{"version":3,"file":"f2b80217adf36aa0494e-78.js","mappings":"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","sources":["webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/atoa/atoa.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/bootstrap/js/dist/modal.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/bootstrap/js/dist/util.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/contra/debounce.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/contra/emitter.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/cropperjs/dist/cropper.esm.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/crossvent/src/crossvent.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/crossvent/src/eventmap.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/custom-event/index.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/dragula/classes.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/dragula/dragula.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/jquery-validation-unobtrusive/dist/jquery.validate.unobtrusive.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/jquery-validation/dist/jquery.validate.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/js-cookie/dist/js.cookie.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/lazysizes/lazysizes.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/pica/dist/pica.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/popper.js/dist/esm/popper.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/ticky/ticky-browser.js","webpack://lincoln_crankshaft/../Components/Base/BaseComponent/Content/node_modules/tom-select/dist/js/tom-select.complete.js"],"sourcesContent":["module.exports = function atoa (a, n) { return Array.prototype.slice.call(a, n); }\n","/*!\n * Bootstrap modal.js v4.6.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.jQuery, global.Util));\n})(this, (function ($, Util) { 'use strict';\n\n function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\n var $__default = /*#__PURE__*/_interopDefaultLegacy($);\n var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);\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 Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n\n function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n }\n\n /**\n * Constants\n */\n\n var NAME = 'modal';\n var VERSION = '4.6.2';\n var DATA_KEY = 'bs.modal';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $__default[\"default\"].fn[NAME];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';\n var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';\n var CLASS_NAME_BACKDROP = 'modal-backdrop';\n var CLASS_NAME_OPEN = 'modal-open';\n var CLASS_NAME_FADE = 'fade';\n var CLASS_NAME_SHOW = 'show';\n var CLASS_NAME_STATIC = 'modal-static';\n var EVENT_HIDE = \"hide\" + EVENT_KEY;\n var EVENT_HIDE_PREVENTED = \"hidePrevented\" + EVENT_KEY;\n var EVENT_HIDDEN = \"hidden\" + EVENT_KEY;\n var EVENT_SHOW = \"show\" + EVENT_KEY;\n var EVENT_SHOWN = \"shown\" + EVENT_KEY;\n var EVENT_FOCUSIN = \"focusin\" + EVENT_KEY;\n var EVENT_RESIZE = \"resize\" + EVENT_KEY;\n var EVENT_CLICK_DISMISS = \"click.dismiss\" + EVENT_KEY;\n var EVENT_KEYDOWN_DISMISS = \"keydown.dismiss\" + EVENT_KEY;\n var EVENT_MOUSEUP_DISMISS = \"mouseup.dismiss\" + EVENT_KEY;\n var EVENT_MOUSEDOWN_DISMISS = \"mousedown.dismiss\" + EVENT_KEY;\n var EVENT_CLICK_DATA_API = \"click\" + EVENT_KEY + DATA_API_KEY;\n var SELECTOR_DIALOG = '.modal-dialog';\n var SELECTOR_MODAL_BODY = '.modal-body';\n var SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]';\n var SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]';\n var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n var SELECTOR_STICKY_CONTENT = '.sticky-top';\n var Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n };\n var DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n };\n /**\n * Class definition\n */\n\n var Modal = /*#__PURE__*/function () {\n function Modal(element, config) {\n this._config = this._getConfig(config);\n this._element = element;\n this._dialog = element.querySelector(SELECTOR_DIALOG);\n this._backdrop = null;\n this._isShown = false;\n this._isBodyOverflowing = false;\n this._ignoreBackdropClick = false;\n this._isTransitioning = false;\n this._scrollbarWidth = 0;\n } // Getters\n\n\n var _proto = Modal.prototype;\n\n // Public\n _proto.toggle = function toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n };\n\n _proto.show = function show(relatedTarget) {\n var _this = this;\n\n if (this._isShown || this._isTransitioning) {\n return;\n }\n\n var showEvent = $__default[\"default\"].Event(EVENT_SHOW, {\n relatedTarget: relatedTarget\n });\n $__default[\"default\"](this._element).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = true;\n\n if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true;\n }\n\n this._checkScrollbar();\n\n this._setScrollbar();\n\n this._adjustDialog();\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $__default[\"default\"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {\n return _this.hide(event);\n });\n $__default[\"default\"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {\n $__default[\"default\"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {\n if ($__default[\"default\"](event.target).is(_this._element)) {\n _this._ignoreBackdropClick = true;\n }\n });\n });\n\n this._showBackdrop(function () {\n return _this._showElement(relatedTarget);\n });\n };\n\n _proto.hide = function hide(event) {\n var _this2 = this;\n\n if (event) {\n event.preventDefault();\n }\n\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n\n var hideEvent = $__default[\"default\"].Event(EVENT_HIDE);\n $__default[\"default\"](this._element).trigger(hideEvent);\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = false;\n var transition = $__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE);\n\n if (transition) {\n this._isTransitioning = true;\n }\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $__default[\"default\"](document).off(EVENT_FOCUSIN);\n $__default[\"default\"](this._element).removeClass(CLASS_NAME_SHOW);\n $__default[\"default\"](this._element).off(EVENT_CLICK_DISMISS);\n $__default[\"default\"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);\n\n if (transition) {\n var transitionDuration = Util__default[\"default\"].getTransitionDurationFromElement(this._element);\n $__default[\"default\"](this._element).one(Util__default[\"default\"].TRANSITION_END, function (event) {\n return _this2._hideModal(event);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n this._hideModal();\n }\n };\n\n _proto.dispose = function dispose() {\n [window, this._element, this._dialog].forEach(function (htmlElement) {\n return $__default[\"default\"](htmlElement).off(EVENT_KEY);\n });\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n\n $__default[\"default\"](document).off(EVENT_FOCUSIN);\n $__default[\"default\"].removeData(this._element, DATA_KEY);\n this._config = null;\n this._element = null;\n this._dialog = null;\n this._backdrop = null;\n this._isShown = null;\n this._isBodyOverflowing = null;\n this._ignoreBackdropClick = null;\n this._isTransitioning = null;\n this._scrollbarWidth = null;\n };\n\n _proto.handleUpdate = function handleUpdate() {\n this._adjustDialog();\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _extends({}, Default, config);\n Util__default[\"default\"].typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._triggerBackdropTransition = function _triggerBackdropTransition() {\n var _this3 = this;\n\n var hideEventPrevented = $__default[\"default\"].Event(EVENT_HIDE_PREVENTED);\n $__default[\"default\"](this._element).trigger(hideEventPrevented);\n\n if (hideEventPrevented.isDefaultPrevented()) {\n return;\n }\n\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n\n this._element.classList.add(CLASS_NAME_STATIC);\n\n var modalTransitionDuration = Util__default[\"default\"].getTransitionDurationFromElement(this._dialog);\n $__default[\"default\"](this._element).off(Util__default[\"default\"].TRANSITION_END);\n $__default[\"default\"](this._element).one(Util__default[\"default\"].TRANSITION_END, function () {\n _this3._element.classList.remove(CLASS_NAME_STATIC);\n\n if (!isModalOverflowing) {\n $__default[\"default\"](_this3._element).one(Util__default[\"default\"].TRANSITION_END, function () {\n _this3._element.style.overflowY = '';\n }).emulateTransitionEnd(_this3._element, modalTransitionDuration);\n }\n }).emulateTransitionEnd(modalTransitionDuration);\n\n this._element.focus();\n };\n\n _proto._showElement = function _showElement(relatedTarget) {\n var _this4 = this;\n\n var transition = $__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE);\n var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element);\n }\n\n this._element.style.display = 'block';\n\n this._element.removeAttribute('aria-hidden');\n\n this._element.setAttribute('aria-modal', true);\n\n this._element.setAttribute('role', 'dialog');\n\n if ($__default[\"default\"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0;\n } else {\n this._element.scrollTop = 0;\n }\n\n if (transition) {\n Util__default[\"default\"].reflow(this._element);\n }\n\n $__default[\"default\"](this._element).addClass(CLASS_NAME_SHOW);\n\n if (this._config.focus) {\n this._enforceFocus();\n }\n\n var shownEvent = $__default[\"default\"].Event(EVENT_SHOWN, {\n relatedTarget: relatedTarget\n });\n\n var transitionComplete = function transitionComplete() {\n if (_this4._config.focus) {\n _this4._element.focus();\n }\n\n _this4._isTransitioning = false;\n $__default[\"default\"](_this4._element).trigger(shownEvent);\n };\n\n if (transition) {\n var transitionDuration = Util__default[\"default\"].getTransitionDurationFromElement(this._dialog);\n $__default[\"default\"](this._dialog).one(Util__default[\"default\"].TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n } else {\n transitionComplete();\n }\n };\n\n _proto._enforceFocus = function _enforceFocus() {\n var _this5 = this;\n\n $__default[\"default\"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, function (event) {\n if (document !== event.target && _this5._element !== event.target && $__default[\"default\"](_this5._element).has(event.target).length === 0) {\n _this5._element.focus();\n }\n });\n };\n\n _proto._setEscapeEvent = function _setEscapeEvent() {\n var _this6 = this;\n\n if (this._isShown) {\n $__default[\"default\"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {\n if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault();\n\n _this6.hide();\n } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {\n _this6._triggerBackdropTransition();\n }\n });\n } else if (!this._isShown) {\n $__default[\"default\"](this._element).off(EVENT_KEYDOWN_DISMISS);\n }\n };\n\n _proto._setResizeEvent = function _setResizeEvent() {\n var _this7 = this;\n\n if (this._isShown) {\n $__default[\"default\"](window).on(EVENT_RESIZE, function (event) {\n return _this7.handleUpdate(event);\n });\n } else {\n $__default[\"default\"](window).off(EVENT_RESIZE);\n }\n };\n\n _proto._hideModal = function _hideModal() {\n var _this8 = this;\n\n this._element.style.display = 'none';\n\n this._element.setAttribute('aria-hidden', true);\n\n this._element.removeAttribute('aria-modal');\n\n this._element.removeAttribute('role');\n\n this._isTransitioning = false;\n\n this._showBackdrop(function () {\n $__default[\"default\"](document.body).removeClass(CLASS_NAME_OPEN);\n\n _this8._resetAdjustments();\n\n _this8._resetScrollbar();\n\n $__default[\"default\"](_this8._element).trigger(EVENT_HIDDEN);\n });\n };\n\n _proto._removeBackdrop = function _removeBackdrop() {\n if (this._backdrop) {\n $__default[\"default\"](this._backdrop).remove();\n this._backdrop = null;\n }\n };\n\n _proto._showBackdrop = function _showBackdrop(callback) {\n var _this9 = this;\n\n var animate = $__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE) ? CLASS_NAME_FADE : '';\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = CLASS_NAME_BACKDROP;\n\n if (animate) {\n this._backdrop.classList.add(animate);\n }\n\n $__default[\"default\"](this._backdrop).appendTo(document.body);\n $__default[\"default\"](this._element).on(EVENT_CLICK_DISMISS, function (event) {\n if (_this9._ignoreBackdropClick) {\n _this9._ignoreBackdropClick = false;\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (_this9._config.backdrop === 'static') {\n _this9._triggerBackdropTransition();\n } else {\n _this9.hide();\n }\n });\n\n if (animate) {\n Util__default[\"default\"].reflow(this._backdrop);\n }\n\n $__default[\"default\"](this._backdrop).addClass(CLASS_NAME_SHOW);\n\n if (!callback) {\n return;\n }\n\n if (!animate) {\n callback();\n return;\n }\n\n var backdropTransitionDuration = Util__default[\"default\"].getTransitionDurationFromElement(this._backdrop);\n $__default[\"default\"](this._backdrop).one(Util__default[\"default\"].TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n } else if (!this._isShown && this._backdrop) {\n $__default[\"default\"](this._backdrop).removeClass(CLASS_NAME_SHOW);\n\n var callbackRemove = function callbackRemove() {\n _this9._removeBackdrop();\n\n if (callback) {\n callback();\n }\n };\n\n if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE)) {\n var _backdropTransitionDuration = Util__default[\"default\"].getTransitionDurationFromElement(this._backdrop);\n\n $__default[\"default\"](this._backdrop).one(Util__default[\"default\"].TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n } else {\n callbackRemove();\n }\n } else if (callback) {\n callback();\n }\n } // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n ;\n\n _proto._adjustDialog = function _adjustDialog() {\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n }\n };\n\n _proto._resetAdjustments = function _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n };\n\n _proto._checkScrollbar = function _checkScrollbar() {\n var rect = document.body.getBoundingClientRect();\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;\n this._scrollbarWidth = this._getScrollbarWidth();\n };\n\n _proto._setScrollbar = function _setScrollbar() {\n var _this10 = this;\n\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding\n\n $__default[\"default\"](fixedContent).each(function (index, element) {\n var actualPadding = element.style.paddingRight;\n var calculatedPadding = $__default[\"default\"](element).css('padding-right');\n $__default[\"default\"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + \"px\");\n }); // Adjust sticky content margin\n\n $__default[\"default\"](stickyContent).each(function (index, element) {\n var actualMargin = element.style.marginRight;\n var calculatedMargin = $__default[\"default\"](element).css('margin-right');\n $__default[\"default\"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + \"px\");\n }); // Adjust body padding\n\n var actualPadding = document.body.style.paddingRight;\n var calculatedPadding = $__default[\"default\"](document.body).css('padding-right');\n $__default[\"default\"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n }\n\n $__default[\"default\"](document.body).addClass(CLASS_NAME_OPEN);\n };\n\n _proto._resetScrollbar = function _resetScrollbar() {\n // Restore fixed content padding\n var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n $__default[\"default\"](fixedContent).each(function (index, element) {\n var padding = $__default[\"default\"](element).data('padding-right');\n $__default[\"default\"](element).removeData('padding-right');\n element.style.paddingRight = padding ? padding : '';\n }); // Restore sticky content\n\n var elements = [].slice.call(document.querySelectorAll(\"\" + SELECTOR_STICKY_CONTENT));\n $__default[\"default\"](elements).each(function (index, element) {\n var margin = $__default[\"default\"](element).data('margin-right');\n\n if (typeof margin !== 'undefined') {\n $__default[\"default\"](element).css('margin-right', margin).removeData('margin-right');\n }\n }); // Restore body padding\n\n var padding = $__default[\"default\"](document.body).data('padding-right');\n $__default[\"default\"](document.body).removeData('padding-right');\n document.body.style.paddingRight = padding ? padding : '';\n };\n\n _proto._getScrollbarWidth = function _getScrollbarWidth() {\n // thx d.walsh\n var scrollDiv = document.createElement('div');\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n } // Static\n ;\n\n Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n var data = $__default[\"default\"](this).data(DATA_KEY);\n\n var _config = _extends({}, Default, $__default[\"default\"](this).data(), typeof config === 'object' && config ? config : {});\n\n if (!data) {\n data = new Modal(this, _config);\n $__default[\"default\"](this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config](relatedTarget);\n } else if (_config.show) {\n data.show(relatedTarget);\n }\n });\n };\n\n _createClass(Modal, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Modal;\n }();\n /**\n * Data API implementation\n */\n\n\n $__default[\"default\"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n var _this11 = this;\n\n var target;\n var selector = Util__default[\"default\"].getSelectorFromElement(this);\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n var config = $__default[\"default\"](target).data(DATA_KEY) ? 'toggle' : _extends({}, $__default[\"default\"](target).data(), $__default[\"default\"](this).data());\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault();\n }\n\n var $target = $__default[\"default\"](target).one(EVENT_SHOW, function (showEvent) {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return;\n }\n\n $target.one(EVENT_HIDDEN, function () {\n if ($__default[\"default\"](_this11).is(':visible')) {\n _this11.focus();\n }\n });\n });\n\n Modal._jQueryInterface.call($__default[\"default\"](target), config, this);\n });\n /**\n * jQuery\n */\n\n $__default[\"default\"].fn[NAME] = Modal._jQueryInterface;\n $__default[\"default\"].fn[NAME].Constructor = Modal;\n\n $__default[\"default\"].fn[NAME].noConflict = function () {\n $__default[\"default\"].fn[NAME] = JQUERY_NO_CONFLICT;\n return Modal._jQueryInterface;\n };\n\n return Modal;\n\n}));\n//# sourceMappingURL=modal.js.map\n","/*!\n * Bootstrap util.js v4.6.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :\n typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Util = factory(global.jQuery));\n})(this, (function ($) { 'use strict';\n\n function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\n var $__default = /*#__PURE__*/_interopDefaultLegacy($);\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n /**\n * Private TransitionEnd Helpers\n */\n\n var TRANSITION_END = 'transitionend';\n var MAX_UID = 1000000;\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n function toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return \"\" + obj;\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle: function handle(event) {\n if ($__default[\"default\"](event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined;\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $__default[\"default\"](this).one(Util.TRANSITION_END, function () {\n called = true;\n });\n setTimeout(function () {\n if (!called) {\n Util.triggerTransitionEnd(_this);\n }\n }, duration);\n return this;\n }\n\n function setTransitionEndSupport() {\n $__default[\"default\"].fn.emulateTransitionEnd = transitionEndEmulator;\n $__default[\"default\"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n /**\n * Public Util API\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n var hrefAttr = element.getAttribute('href');\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n }\n\n try {\n return document.querySelector(selector) ? selector : null;\n } catch (_) {\n return null;\n }\n },\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = $__default[\"default\"](element).css('transition-duration');\n var transitionDelay = $__default[\"default\"](element).css('transition-delay');\n var floatTransitionDuration = parseFloat(transitionDuration);\n var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n triggerTransitionEnd: function triggerTransitionEnd(element) {\n $__default[\"default\"](element).trigger(TRANSITION_END);\n },\n supportsTransitionEnd: function supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n isElement: function isElement(obj) {\n return (obj[0] || obj).nodeType;\n },\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n for (var property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n }\n }\n }\n },\n findShadowRoot: function findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null;\n } // Can find the shadow root otherwise it'll return the document\n\n\n if (typeof element.getRootNode === 'function') {\n var root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n\n if (element instanceof ShadowRoot) {\n return element;\n } // when we don't find a shadow root\n\n\n if (!element.parentNode) {\n return null;\n }\n\n return Util.findShadowRoot(element.parentNode);\n },\n jQueryDetection: function jQueryDetection() {\n if (typeof $__default[\"default\"] === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n }\n\n var version = $__default[\"default\"].fn.jquery.split(' ')[0].split('.');\n var minMajor = 1;\n var ltMajor = 2;\n var minMinor = 9;\n var minPatch = 1;\n var maxMajor = 4;\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n }\n }\n };\n Util.jQueryDetection();\n setTransitionEndSupport();\n\n return Util;\n\n}));\n//# sourceMappingURL=util.js.map\n","'use strict';\n\nvar ticky = require('ticky');\n\nmodule.exports = function debounce (fn, args, ctx) {\n if (!fn) { return; }\n ticky(function run () {\n fn.apply(ctx || null, args || []);\n });\n};\n","'use strict';\n\nvar atoa = require('atoa');\nvar debounce = require('./debounce');\n\nmodule.exports = function emitter (thing, options) {\n var opts = options || {};\n var evt = {};\n if (thing === undefined) { thing = {}; }\n thing.on = function (type, fn) {\n if (!evt[type]) {\n evt[type] = [fn];\n } else {\n evt[type].push(fn);\n }\n return thing;\n };\n thing.once = function (type, fn) {\n fn._once = true; // thing.off(fn) still works!\n thing.on(type, fn);\n return thing;\n };\n thing.off = function (type, fn) {\n var c = arguments.length;\n if (c === 1) {\n delete evt[type];\n } else if (c === 0) {\n evt = {};\n } else {\n var et = evt[type];\n if (!et) { return thing; }\n et.splice(et.indexOf(fn), 1);\n }\n return thing;\n };\n thing.emit = function () {\n var args = atoa(arguments);\n return thing.emitterSnapshot(args.shift()).apply(this, args);\n };\n thing.emitterSnapshot = function (type) {\n var et = (evt[type] || []).slice(0);\n return function () {\n var args = atoa(arguments);\n var ctx = this || thing;\n if (type === 'error' && opts.throws !== false && !et.length) { throw args.length === 1 ? args[0] : args; }\n et.forEach(function emitter (listen) {\n if (opts.async) { debounce(listen, args, ctx); } else { listen.apply(ctx, args); }\n if (listen._once) { thing.off(type, listen); }\n });\n return thing;\n };\n };\n return thing;\n};\n","/*!\n * Cropper.js v1.5.13\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2022-11-20T05:30:46.114Z\n */\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _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}\nfunction _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}\nfunction _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}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _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}\nfunction _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}\nfunction _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\nvar IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nvar WINDOW = IS_BROWSER ? window : {};\nvar IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\nvar HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\nvar NAMESPACE = 'cropper';\n\n// Actions\nvar ACTION_ALL = 'all';\nvar ACTION_CROP = 'crop';\nvar ACTION_MOVE = 'move';\nvar ACTION_ZOOM = 'zoom';\nvar ACTION_EAST = 'e';\nvar ACTION_WEST = 'w';\nvar ACTION_SOUTH = 's';\nvar ACTION_NORTH = 'n';\nvar ACTION_NORTH_EAST = 'ne';\nvar ACTION_NORTH_WEST = 'nw';\nvar ACTION_SOUTH_EAST = 'se';\nvar ACTION_SOUTH_WEST = 'sw';\n\n// Classes\nvar CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\nvar CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\nvar CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\nvar CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\nvar CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\nvar CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\nvar CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n// Data keys\nvar DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\nvar DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n// Drag modes\nvar DRAG_MODE_CROP = 'crop';\nvar DRAG_MODE_MOVE = 'move';\nvar DRAG_MODE_NONE = 'none';\n\n// Events\nvar EVENT_CROP = 'crop';\nvar EVENT_CROP_END = 'cropend';\nvar EVENT_CROP_MOVE = 'cropmove';\nvar EVENT_CROP_START = 'cropstart';\nvar EVENT_DBLCLICK = 'dblclick';\nvar EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\nvar EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\nvar EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\nvar EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\nvar EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\nvar EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\nvar EVENT_READY = 'ready';\nvar EVENT_RESIZE = 'resize';\nvar EVENT_WHEEL = 'wheel';\nvar EVENT_ZOOM = 'zoom';\n\n// Mime types\nvar MIME_TYPE_JPEG = 'image/jpeg';\n\n// RegExps\nvar REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\nvar REGEXP_DATA_URL = /^data:/;\nvar REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\nvar REGEXP_TAG_NAME = /^img|canvas$/i;\n\n// Misc\n// Inspired by the default width and height of a canvas element.\nvar MIN_CONTAINER_WIDTH = 200;\nvar MIN_CONTAINER_HEIGHT = 100;\n\nvar 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\nvar TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
';\n\n/**\n * Check if the given value is not a number.\n */\nvar 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 */\nfunction 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 */\nvar 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 */\nfunction 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 */\nfunction isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n}\nvar 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 */\nfunction 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 */\nfunction isFunction(value) {\n return typeof value === 'function';\n}\nvar 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 */\nfunction 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 */\nfunction 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 */\nvar 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};\nvar 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 */\nfunction 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}\nvar 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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}\nvar 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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}\nvar REGEXP_SPACES = /\\s\\s*/;\nvar 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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}\nvar location = WINDOW.location;\nvar 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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}\nvar 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 */\nfunction 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}\nvar 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 */\nfunction 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 */\nfunction 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 */\nfunction 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 */\nfunction 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°\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°\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90°\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90°\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90°\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n\nvar 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\nvar 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\nvar 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\nvar 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\nvar 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\nvar 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(),\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\nvar AnotherCropper = WINDOW.Cropper;\nvar 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 or 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}();\nassign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\nexport { Cropper as default };\n","'use strict';\n\nvar customEvent = require('custom-event');\nvar eventmap = require('./eventmap');\nvar doc = global.document;\nvar addEvent = addEventEasy;\nvar removeEvent = removeEventEasy;\nvar hardCache = [];\n\nif (!global.addEventListener) {\n addEvent = addEventHard;\n removeEvent = removeEventHard;\n}\n\nmodule.exports = {\n add: addEvent,\n remove: removeEvent,\n fabricate: fabricateEvent\n};\n\nfunction addEventEasy (el, type, fn, capturing) {\n return el.addEventListener(type, fn, capturing);\n}\n\nfunction addEventHard (el, type, fn) {\n return el.attachEvent('on' + type, wrap(el, type, fn));\n}\n\nfunction removeEventEasy (el, type, fn, capturing) {\n return el.removeEventListener(type, fn, capturing);\n}\n\nfunction removeEventHard (el, type, fn) {\n var listener = unwrap(el, type, fn);\n if (listener) {\n return el.detachEvent('on' + type, listener);\n }\n}\n\nfunction fabricateEvent (el, type, model) {\n var e = eventmap.indexOf(type) === -1 ? makeCustomEvent() : makeClassicEvent();\n if (el.dispatchEvent) {\n el.dispatchEvent(e);\n } else {\n el.fireEvent('on' + type, e);\n }\n function makeClassicEvent () {\n var e;\n if (doc.createEvent) {\n e = doc.createEvent('Event');\n e.initEvent(type, true, true);\n } else if (doc.createEventObject) {\n e = doc.createEventObject();\n }\n return e;\n }\n function makeCustomEvent () {\n return new customEvent(type, { detail: model });\n }\n}\n\nfunction wrapperFactory (el, type, fn) {\n return function wrapper (originalEvent) {\n var e = originalEvent || global.event;\n e.target = e.target || e.srcElement;\n e.preventDefault = e.preventDefault || function preventDefault () { e.returnValue = false; };\n e.stopPropagation = e.stopPropagation || function stopPropagation () { e.cancelBubble = true; };\n e.which = e.which || e.keyCode;\n fn.call(el, e);\n };\n}\n\nfunction wrap (el, type, fn) {\n var wrapper = unwrap(el, type, fn) || wrapperFactory(el, type, fn);\n hardCache.push({\n wrapper: wrapper,\n element: el,\n type: type,\n fn: fn\n });\n return wrapper;\n}\n\nfunction unwrap (el, type, fn) {\n var i = find(el, type, fn);\n if (i) {\n var wrapper = hardCache[i].wrapper;\n hardCache.splice(i, 1); // free up a tad of memory\n return wrapper;\n }\n}\n\nfunction find (el, type, fn) {\n var i, item;\n for (i = 0; i < hardCache.length; i++) {\n item = hardCache[i];\n if (item.element === el && item.type === type && item.fn === fn) {\n return i;\n }\n }\n}\n","'use strict';\n\nvar eventmap = [];\nvar eventname = '';\nvar ron = /^on/;\n\nfor (eventname in global) {\n if (ron.test(eventname)) {\n eventmap.push(eventname.slice(2));\n }\n}\n\nmodule.exports = eventmap;\n","\nvar NativeCustomEvent = global.CustomEvent;\n\nfunction useNative () {\n try {\n var p = new NativeCustomEvent('cat', { detail: { foo: 'bar' } });\n return 'cat' === p.type && 'bar' === p.detail.foo;\n } catch (e) {\n }\n return false;\n}\n\n/**\n * Cross-browser `CustomEvent` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.CustomEvent\n *\n * @public\n */\n\nmodule.exports = useNative() ? NativeCustomEvent :\n\n// IE >= 9\n'undefined' !== typeof document && 'function' === typeof document.createEvent ? function CustomEvent (type, params) {\n var e = document.createEvent('CustomEvent');\n if (params) {\n e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\n } else {\n e.initCustomEvent(type, false, false, void 0);\n }\n return e;\n} :\n\n// IE <= 8\nfunction CustomEvent (type, params) {\n var e = document.createEventObject();\n e.type = type;\n if (params) {\n e.bubbles = Boolean(params.bubbles);\n e.cancelable = Boolean(params.cancelable);\n e.detail = params.detail;\n } else {\n e.bubbles = false;\n e.cancelable = false;\n e.detail = void 0;\n }\n return e;\n}\n","'use strict';\n\nvar cache = {};\nvar start = '(?:^|\\\\s)';\nvar end = '(?:\\\\s|$)';\n\nfunction lookupClass (className) {\n var cached = cache[className];\n if (cached) {\n cached.lastIndex = 0;\n } else {\n cache[className] = cached = new RegExp(start + className + end, 'g');\n }\n return cached;\n}\n\nfunction addClass (el, className) {\n var current = el.className;\n if (!current.length) {\n el.className = className;\n } else if (!lookupClass(className).test(current)) {\n el.className += ' ' + className;\n }\n}\n\nfunction rmClass (el, className) {\n el.className = el.className.replace(lookupClass(className), ' ').trim();\n}\n\nmodule.exports = {\n add: addClass,\n rm: rmClass\n};\n","'use strict';\n\nvar emitter = require('contra/emitter');\nvar crossvent = require('crossvent');\nvar classes = require('./classes');\nvar doc = document;\nvar documentElement = doc.documentElement;\n\nfunction dragula (initialContainers, options) {\n var len = arguments.length;\n if (len === 1 && Array.isArray(initialContainers) === false) {\n options = initialContainers;\n initialContainers = [];\n }\n var _mirror; // mirror image\n var _source; // source container\n var _item; // item being dragged\n var _offsetX; // reference x\n var _offsetY; // reference y\n var _moveX; // reference move x\n var _moveY; // reference move y\n var _initialSibling; // reference sibling when grabbed\n var _currentSibling; // reference sibling now\n var _copy; // item used for copying\n var _renderTimer; // timer for setTimeout renderMirrorImage\n var _lastDropTarget = null; // last container item was over\n var _grabbed; // holds mousedown context until first mousemove\n\n var o = options || {};\n if (o.moves === void 0) { o.moves = always; }\n if (o.accepts === void 0) { o.accepts = always; }\n if (o.invalid === void 0) { o.invalid = invalidTarget; }\n if (o.containers === void 0) { o.containers = initialContainers || []; }\n if (o.isContainer === void 0) { o.isContainer = never; }\n if (o.copy === void 0) { o.copy = false; }\n if (o.copySortSource === void 0) { o.copySortSource = false; }\n if (o.revertOnSpill === void 0) { o.revertOnSpill = false; }\n if (o.removeOnSpill === void 0) { o.removeOnSpill = false; }\n if (o.direction === void 0) { o.direction = 'vertical'; }\n if (o.ignoreInputTextSelection === void 0) { o.ignoreInputTextSelection = true; }\n if (o.mirrorContainer === void 0) { o.mirrorContainer = doc.body; }\n\n var drake = emitter({\n containers: o.containers,\n start: manualStart,\n end: end,\n cancel: cancel,\n remove: remove,\n destroy: destroy,\n canMove: canMove,\n dragging: false\n });\n\n if (o.removeOnSpill === true) {\n drake.on('over', spillOver).on('out', spillOut);\n }\n\n events();\n\n return drake;\n\n function isContainer (el) {\n return drake.containers.indexOf(el) !== -1 || o.isContainer(el);\n }\n\n function events (remove) {\n var op = remove ? 'remove' : 'add';\n touchy(documentElement, op, 'mousedown', grab);\n touchy(documentElement, op, 'mouseup', release);\n }\n\n function eventualMovements (remove) {\n var op = remove ? 'remove' : 'add';\n touchy(documentElement, op, 'mousemove', startBecauseMouseMoved);\n }\n\n function movements (remove) {\n var op = remove ? 'remove' : 'add';\n crossvent[op](documentElement, 'selectstart', preventGrabbed); // IE8\n crossvent[op](documentElement, 'click', preventGrabbed);\n }\n\n function destroy () {\n events(true);\n release({});\n }\n\n function preventGrabbed (e) {\n if (_grabbed) {\n e.preventDefault();\n }\n }\n\n function grab (e) {\n _moveX = e.clientX;\n _moveY = e.clientY;\n\n var ignore = whichMouseButton(e) !== 1 || e.metaKey || e.ctrlKey;\n if (ignore) {\n return; // we only care about honest-to-god left clicks and touch events\n }\n var item = e.target;\n var context = canStart(item);\n if (!context) {\n return;\n }\n _grabbed = context;\n eventualMovements();\n if (e.type === 'mousedown') {\n if (isInput(item)) { // see also: https://github.com/bevacqua/dragula/issues/208\n item.focus(); // fixes https://github.com/bevacqua/dragula/issues/176\n } else {\n e.preventDefault(); // fixes https://github.com/bevacqua/dragula/issues/155\n }\n }\n }\n\n function startBecauseMouseMoved (e) {\n if (!_grabbed) {\n return;\n }\n if (whichMouseButton(e) === 0) {\n release({});\n return; // when text is selected on an input and then dragged, mouseup doesn't fire. this is our only hope\n }\n\n // truthy check fixes #239, equality fixes #207, fixes #501\n if ((e.clientX !== void 0 && Math.abs(e.clientX - _moveX) <= (o.slideFactorX || 0)) &&\n (e.clientY !== void 0 && Math.abs(e.clientY - _moveY) <= (o.slideFactorY || 0))) {\n return;\n }\n\n if (o.ignoreInputTextSelection) {\n var clientX = getCoord('clientX', e) || 0;\n var clientY = getCoord('clientY', e) || 0;\n var elementBehindCursor = doc.elementFromPoint(clientX, clientY);\n if (isInput(elementBehindCursor)) {\n return;\n }\n }\n\n var grabbed = _grabbed; // call to end() unsets _grabbed\n eventualMovements(true);\n movements();\n end();\n start(grabbed);\n\n var offset = getOffset(_item);\n _offsetX = getCoord('pageX', e) - offset.left;\n _offsetY = getCoord('pageY', e) - offset.top;\n\n classes.add(_copy || _item, 'gu-transit');\n renderMirrorImage();\n drag(e);\n }\n\n function canStart (item) {\n if (drake.dragging && _mirror) {\n return;\n }\n if (isContainer(item)) {\n return; // don't drag container itself\n }\n var handle = item;\n while (getParent(item) && isContainer(getParent(item)) === false) {\n if (o.invalid(item, handle)) {\n return;\n }\n item = getParent(item); // drag target should be a top element\n if (!item) {\n return;\n }\n }\n var source = getParent(item);\n if (!source) {\n return;\n }\n if (o.invalid(item, handle)) {\n return;\n }\n\n var movable = o.moves(item, source, handle, nextEl(item));\n if (!movable) {\n return;\n }\n\n return {\n item: item,\n source: source\n };\n }\n\n function canMove (item) {\n return !!canStart(item);\n }\n\n function manualStart (item) {\n var context = canStart(item);\n if (context) {\n start(context);\n }\n }\n\n function start (context) {\n if (isCopy(context.item, context.source)) {\n _copy = context.item.cloneNode(true);\n drake.emit('cloned', _copy, context.item, 'copy');\n }\n\n _source = context.source;\n _item = context.item;\n _initialSibling = _currentSibling = nextEl(context.item);\n\n drake.dragging = true;\n drake.emit('drag', _item, _source);\n }\n\n function invalidTarget () {\n return false;\n }\n\n function end () {\n if (!drake.dragging) {\n return;\n }\n var item = _copy || _item;\n drop(item, getParent(item));\n }\n\n function ungrab () {\n _grabbed = false;\n eventualMovements(true);\n movements(true);\n }\n\n function release (e) {\n ungrab();\n\n if (!drake.dragging) {\n return;\n }\n var item = _copy || _item;\n var clientX = getCoord('clientX', e) || 0;\n var clientY = getCoord('clientY', e) || 0;\n var elementBehindCursor = getElementBehindPoint(_mirror, clientX, clientY);\n var dropTarget = findDropTarget(elementBehindCursor, clientX, clientY);\n if (dropTarget && ((_copy && o.copySortSource) || (!_copy || dropTarget !== _source))) {\n drop(item, dropTarget);\n } else if (o.removeOnSpill) {\n remove();\n } else {\n cancel();\n }\n }\n\n function drop (item, target) {\n var parent = getParent(item);\n if (_copy && o.copySortSource && target === _source) {\n parent.removeChild(_item);\n }\n if (isInitialPlacement(target)) {\n drake.emit('cancel', item, _source, _source);\n } else {\n drake.emit('drop', item, target, _source, _currentSibling);\n }\n cleanup();\n }\n\n function remove () {\n if (!drake.dragging) {\n return;\n }\n var item = _copy || _item;\n var parent = getParent(item);\n if (parent) {\n parent.removeChild(item);\n }\n drake.emit(_copy ? 'cancel' : 'remove', item, parent, _source);\n cleanup();\n }\n\n function cancel (revert) {\n if (!drake.dragging) {\n return;\n }\n var reverts = arguments.length > 0 ? revert : o.revertOnSpill;\n var item = _copy || _item;\n var parent = getParent(item);\n var initial = isInitialPlacement(parent);\n if (initial === false && reverts) {\n if (_copy) {\n if (parent) {\n parent.removeChild(_copy);\n }\n } else {\n _source.insertBefore(item, _initialSibling);\n }\n }\n if (initial || reverts) {\n drake.emit('cancel', item, _source, _source);\n } else {\n drake.emit('drop', item, parent, _source, _currentSibling);\n }\n cleanup();\n }\n\n function cleanup () {\n var item = _copy || _item;\n ungrab();\n removeMirrorImage();\n if (item) {\n classes.rm(item, 'gu-transit');\n }\n if (_renderTimer) {\n clearTimeout(_renderTimer);\n }\n drake.dragging = false;\n if (_lastDropTarget) {\n drake.emit('out', item, _lastDropTarget, _source);\n }\n drake.emit('dragend', item);\n _source = _item = _copy = _initialSibling = _currentSibling = _renderTimer = _lastDropTarget = null;\n }\n\n function isInitialPlacement (target, s) {\n var sibling;\n if (s !== void 0) {\n sibling = s;\n } else if (_mirror) {\n sibling = _currentSibling;\n } else {\n sibling = nextEl(_copy || _item);\n }\n return target === _source && sibling === _initialSibling;\n }\n\n function findDropTarget (elementBehindCursor, clientX, clientY) {\n var target = elementBehindCursor;\n while (target && !accepted()) {\n target = getParent(target);\n }\n return target;\n\n function accepted () {\n var droppable = isContainer(target);\n if (droppable === false) {\n return false;\n }\n\n var immediate = getImmediateChild(target, elementBehindCursor);\n var reference = getReference(target, immediate, clientX, clientY);\n var initial = isInitialPlacement(target, reference);\n if (initial) {\n return true; // should always be able to drop it right back where it was\n }\n return o.accepts(_item, target, _source, reference);\n }\n }\n\n function drag (e) {\n if (!_mirror) {\n return;\n }\n e.preventDefault();\n\n var clientX = getCoord('clientX', e) || 0;\n var clientY = getCoord('clientY', e) || 0;\n var x = clientX - _offsetX;\n var y = clientY - _offsetY;\n\n _mirror.style.left = x + 'px';\n _mirror.style.top = y + 'px';\n\n var item = _copy || _item;\n var elementBehindCursor = getElementBehindPoint(_mirror, clientX, clientY);\n var dropTarget = findDropTarget(elementBehindCursor, clientX, clientY);\n var changed = dropTarget !== null && dropTarget !== _lastDropTarget;\n if (changed || dropTarget === null) {\n out();\n _lastDropTarget = dropTarget;\n over();\n }\n var parent = getParent(item);\n if (dropTarget === _source && _copy && !o.copySortSource) {\n if (parent) {\n parent.removeChild(item);\n }\n return;\n }\n var reference;\n var immediate = getImmediateChild(dropTarget, elementBehindCursor);\n if (immediate !== null) {\n reference = getReference(dropTarget, immediate, clientX, clientY);\n } else if (o.revertOnSpill === true && !_copy) {\n reference = _initialSibling;\n dropTarget = _source;\n } else {\n if (_copy && parent) {\n parent.removeChild(item);\n }\n return;\n }\n if (\n (reference === null && changed) ||\n reference !== item &&\n reference !== nextEl(item)\n ) {\n _currentSibling = reference;\n dropTarget.insertBefore(item, reference);\n drake.emit('shadow', item, dropTarget, _source);\n }\n function moved (type) { drake.emit(type, item, _lastDropTarget, _source); }\n function over () { if (changed) { moved('over'); } }\n function out () { if (_lastDropTarget) { moved('out'); } }\n }\n\n function spillOver (el) {\n classes.rm(el, 'gu-hide');\n }\n\n function spillOut (el) {\n if (drake.dragging) { classes.add(el, 'gu-hide'); }\n }\n\n function renderMirrorImage () {\n if (_mirror) {\n return;\n }\n var rect = _item.getBoundingClientRect();\n _mirror = _item.cloneNode(true);\n _mirror.style.width = getRectWidth(rect) + 'px';\n _mirror.style.height = getRectHeight(rect) + 'px';\n classes.rm(_mirror, 'gu-transit');\n classes.add(_mirror, 'gu-mirror');\n o.mirrorContainer.appendChild(_mirror);\n touchy(documentElement, 'add', 'mousemove', drag);\n classes.add(o.mirrorContainer, 'gu-unselectable');\n drake.emit('cloned', _mirror, _item, 'mirror');\n }\n\n function removeMirrorImage () {\n if (_mirror) {\n classes.rm(o.mirrorContainer, 'gu-unselectable');\n touchy(documentElement, 'remove', 'mousemove', drag);\n getParent(_mirror).removeChild(_mirror);\n _mirror = null;\n }\n }\n\n function getImmediateChild (dropTarget, target) {\n var immediate = target;\n while (immediate !== dropTarget && getParent(immediate) !== dropTarget) {\n immediate = getParent(immediate);\n }\n if (immediate === documentElement) {\n return null;\n }\n return immediate;\n }\n\n function getReference (dropTarget, target, x, y) {\n var horizontal = o.direction === 'horizontal';\n var reference = target !== dropTarget ? inside() : outside();\n return reference;\n\n function outside () { // slower, but able to figure out any position\n var len = dropTarget.children.length;\n var i;\n var el;\n var rect;\n for (i = 0; i < len; i++) {\n el = dropTarget.children[i];\n rect = el.getBoundingClientRect();\n if (horizontal && (rect.left + rect.width / 2) > x) { return el; }\n if (!horizontal && (rect.top + rect.height / 2) > y) { return el; }\n }\n return null;\n }\n\n function inside () { // faster, but only available if dropped inside a child element\n var rect = target.getBoundingClientRect();\n if (horizontal) {\n return resolve(x > rect.left + getRectWidth(rect) / 2);\n }\n return resolve(y > rect.top + getRectHeight(rect) / 2);\n }\n\n function resolve (after) {\n return after ? nextEl(target) : target;\n }\n }\n\n function isCopy (item, container) {\n return typeof o.copy === 'boolean' ? o.copy : o.copy(item, container);\n }\n}\n\nfunction touchy (el, op, type, fn) {\n var touch = {\n mouseup: 'touchend',\n mousedown: 'touchstart',\n mousemove: 'touchmove'\n };\n var pointers = {\n mouseup: 'pointerup',\n mousedown: 'pointerdown',\n mousemove: 'pointermove'\n };\n var microsoft = {\n mouseup: 'MSPointerUp',\n mousedown: 'MSPointerDown',\n mousemove: 'MSPointerMove'\n };\n if (global.navigator.pointerEnabled) {\n crossvent[op](el, pointers[type], fn);\n } else if (global.navigator.msPointerEnabled) {\n crossvent[op](el, microsoft[type], fn);\n } else {\n crossvent[op](el, touch[type], fn);\n crossvent[op](el, type, fn);\n }\n}\n\nfunction whichMouseButton (e) {\n if (e.touches !== void 0) { return e.touches.length; }\n if (e.which !== void 0 && e.which !== 0) { return e.which; } // see https://github.com/bevacqua/dragula/issues/261\n if (e.buttons !== void 0) { return e.buttons; }\n var button = e.button;\n if (button !== void 0) { // see https://github.com/jquery/jquery/blob/99e8ff1baa7ae341e94bb89c3e84570c7c3ad9ea/src/event.js#L573-L575\n return button & 1 ? 1 : button & 2 ? 3 : (button & 4 ? 2 : 0);\n }\n}\n\nfunction getOffset (el) {\n var rect = el.getBoundingClientRect();\n return {\n left: rect.left + getScroll('scrollLeft', 'pageXOffset'),\n top: rect.top + getScroll('scrollTop', 'pageYOffset')\n };\n}\n\nfunction getScroll (scrollProp, offsetProp) {\n if (typeof global[offsetProp] !== 'undefined') {\n return global[offsetProp];\n }\n if (documentElement.clientHeight) {\n return documentElement[scrollProp];\n }\n return doc.body[scrollProp];\n}\n\nfunction getElementBehindPoint (point, x, y) {\n point = point || {};\n var state = point.className || '';\n var el;\n point.className += ' gu-hide';\n el = doc.elementFromPoint(x, y);\n point.className = state;\n return el;\n}\n\nfunction never () { return false; }\nfunction always () { return true; }\nfunction getRectWidth (rect) { return rect.width || (rect.right - rect.left); }\nfunction getRectHeight (rect) { return rect.height || (rect.bottom - rect.top); }\nfunction getParent (el) { return el.parentNode === doc ? null : el.parentNode; }\nfunction isInput (el) { return el.tagName === 'INPUT' || el.tagName === 'TEXTAREA' || el.tagName === 'SELECT' || isEditable(el); }\nfunction isEditable (el) {\n if (!el) { return false; } // no parents were editable\n if (el.contentEditable === 'false') { return false; } // stop the lookup\n if (el.contentEditable === 'true') { return true; } // found a contentEditable element in the chain\n return isEditable(getParent(el)); // contentEditable is set to 'inherit'\n}\n\nfunction nextEl (el) {\n return el.nextElementSibling || manually();\n function manually () {\n var sibling = el;\n do {\n sibling = sibling.nextSibling;\n } while (sibling && sibling.nodeType !== 1);\n return sibling;\n }\n}\n\nfunction getEventHost (e) {\n // on touchend event, we have to use `e.changedTouches`\n // see http://stackoverflow.com/questions/7192563/touchend-event-properties\n // see https://github.com/bevacqua/dragula/issues/34\n if (e.targetTouches && e.targetTouches.length) {\n return e.targetTouches[0];\n }\n if (e.changedTouches && e.changedTouches.length) {\n return e.changedTouches[0];\n }\n return e;\n}\n\nfunction getCoord (coord, e) {\n var host = getEventHost(e);\n var missMap = {\n pageX: 'clientX', // IE8\n pageY: 'clientY' // IE8\n };\n if (coord in missMap && !(coord in host) && missMap[coord] in host) {\n coord = missMap[coord];\n }\n return host[coord];\n}\n\nmodule.exports = dragula;\n","// Unobtrusive validation support library for jQuery and jQuery Validate\r\n// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n// @version v3.2.12\r\n\r\n/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */\r\n/*global document: false, jQuery: false */\r\n\r\n(function (factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define(\"jquery.validate.unobtrusive\", ['jquery-validation'], factory);\r\n } else if (typeof module === 'object' && module.exports) {\r\n // CommonJS-like environments that support module.exports \r\n module.exports = factory(require('jquery-validation'));\r\n } else {\r\n // Browser global\r\n jQuery.validator.unobtrusive = factory(jQuery);\r\n }\r\n}(function ($) {\r\n var $jQval = $.validator,\r\n adapters,\r\n data_validation = \"unobtrusiveValidation\";\r\n\r\n function setValidationValues(options, ruleName, value) {\r\n options.rules[ruleName] = value;\r\n if (options.message) {\r\n options.messages[ruleName] = options.message;\r\n }\r\n }\r\n\r\n function splitAndTrim(value) {\r\n return value.replace(/^\\s+|\\s+$/g, \"\").split(/\\s*,\\s*/g);\r\n }\r\n\r\n function escapeAttributeValue(value) {\r\n // As mentioned on http://api.jquery.com/category/selectors/\r\n return value.replace(/([!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^`{|}~])/g, \"\\\\$1\");\r\n }\r\n\r\n function getModelPrefix(fieldName) {\r\n return fieldName.substr(0, fieldName.lastIndexOf(\".\") + 1);\r\n }\r\n\r\n function appendModelPrefix(value, prefix) {\r\n if (value.indexOf(\"*.\") === 0) {\r\n value = value.replace(\"*.\", prefix);\r\n }\r\n return value;\r\n }\r\n\r\n function onError(error, inputElement) { // 'this' is the form element\r\n var container = $(this).find(\"[data-valmsg-for='\" + escapeAttributeValue(inputElement[0].name) + \"']\"),\r\n replaceAttrValue = container.attr(\"data-valmsg-replace\"),\r\n replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;\r\n\r\n container.removeClass(\"field-validation-valid\").addClass(\"field-validation-error\");\r\n error.data(\"unobtrusiveContainer\", container);\r\n\r\n if (replace) {\r\n container.empty();\r\n error.removeClass(\"input-validation-error\").appendTo(container);\r\n }\r\n else {\r\n error.hide();\r\n }\r\n }\r\n\r\n function onErrors(event, validator) { // 'this' is the form element\r\n var container = $(this).find(\"[data-valmsg-summary=true]\"),\r\n list = container.find(\"ul\");\r\n\r\n if (list && list.length && validator.errorList.length) {\r\n list.empty();\r\n container.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\");\r\n\r\n $.each(validator.errorList, function () {\r\n $(\"
  • \").html(this.message).appendTo(list);\r\n });\r\n }\r\n }\r\n\r\n function onSuccess(error) { // 'this' is the form element\r\n var container = error.data(\"unobtrusiveContainer\");\r\n\r\n if (container) {\r\n var replaceAttrValue = container.attr(\"data-valmsg-replace\"),\r\n replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;\r\n\r\n container.addClass(\"field-validation-valid\").removeClass(\"field-validation-error\");\r\n error.removeData(\"unobtrusiveContainer\");\r\n\r\n if (replace) {\r\n container.empty();\r\n }\r\n }\r\n }\r\n\r\n function onReset(event) { // 'this' is the form element\r\n var $form = $(this),\r\n key = '__jquery_unobtrusive_validation_form_reset';\r\n if ($form.data(key)) {\r\n return;\r\n }\r\n // Set a flag that indicates we're currently resetting the form.\r\n $form.data(key, true);\r\n try {\r\n $form.data(\"validator\").resetForm();\r\n } finally {\r\n $form.removeData(key);\r\n }\r\n\r\n $form.find(\".validation-summary-errors\")\r\n .addClass(\"validation-summary-valid\")\r\n .removeClass(\"validation-summary-errors\");\r\n $form.find(\".field-validation-error\")\r\n .addClass(\"field-validation-valid\")\r\n .removeClass(\"field-validation-error\")\r\n .removeData(\"unobtrusiveContainer\")\r\n .find(\">*\") // If we were using valmsg-replace, get the underlying error\r\n .removeData(\"unobtrusiveContainer\");\r\n }\r\n\r\n function validationInfo(form) {\r\n var $form = $(form),\r\n result = $form.data(data_validation),\r\n onResetProxy = $.proxy(onReset, form),\r\n defaultOptions = $jQval.unobtrusive.options || {},\r\n execInContext = function (name, args) {\r\n var func = defaultOptions[name];\r\n func && $.isFunction(func) && func.apply(form, args);\r\n };\r\n\r\n if (!result) {\r\n result = {\r\n options: { // options structure passed to jQuery Validate's validate() method\r\n errorClass: defaultOptions.errorClass || \"input-validation-error\",\r\n errorElement: defaultOptions.errorElement || \"span\",\r\n errorPlacement: function () {\r\n onError.apply(form, arguments);\r\n execInContext(\"errorPlacement\", arguments);\r\n },\r\n invalidHandler: function () {\r\n onErrors.apply(form, arguments);\r\n execInContext(\"invalidHandler\", arguments);\r\n },\r\n messages: {},\r\n rules: {},\r\n success: function () {\r\n onSuccess.apply(form, arguments);\r\n execInContext(\"success\", arguments);\r\n }\r\n },\r\n attachValidation: function () {\r\n $form\r\n .off(\"reset.\" + data_validation, onResetProxy)\r\n .on(\"reset.\" + data_validation, onResetProxy)\r\n .validate(this.options);\r\n },\r\n validate: function () { // a validation function that is called by unobtrusive Ajax\r\n $form.validate();\r\n return $form.valid();\r\n }\r\n };\r\n $form.data(data_validation, result);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n $jQval.unobtrusive = {\r\n adapters: [],\r\n\r\n parseElement: function (element, skipAttach) {\r\n /// \r\n /// Parses a single HTML element for unobtrusive validation attributes.\r\n /// \r\n /// The HTML element to be parsed.\r\n /// [Optional] true to skip attaching the\r\n /// validation to the form. If parsing just this single element, you should specify true.\r\n /// If parsing several elements, you should specify false, and manually attach the validation\r\n /// to the form when you are finished. The default is false.\r\n var $element = $(element),\r\n form = $element.parents(\"form\")[0],\r\n valInfo, rules, messages;\r\n\r\n if (!form) { // Cannot do client-side validation without a form\r\n return;\r\n }\r\n\r\n valInfo = validationInfo(form);\r\n valInfo.options.rules[element.name] = rules = {};\r\n valInfo.options.messages[element.name] = messages = {};\r\n\r\n $.each(this.adapters, function () {\r\n var prefix = \"data-val-\" + this.name,\r\n message = $element.attr(prefix),\r\n paramValues = {};\r\n\r\n if (message !== undefined) { // Compare against undefined, because an empty message is legal (and falsy)\r\n prefix += \"-\";\r\n\r\n $.each(this.params, function () {\r\n paramValues[this] = $element.attr(prefix + this);\r\n });\r\n\r\n this.adapt({\r\n element: element,\r\n form: form,\r\n message: message,\r\n params: paramValues,\r\n rules: rules,\r\n messages: messages\r\n });\r\n }\r\n });\r\n\r\n $.extend(rules, { \"__dummy__\": true });\r\n\r\n if (!skipAttach) {\r\n valInfo.attachValidation();\r\n }\r\n },\r\n\r\n parse: function (selector) {\r\n /// \r\n /// Parses all the HTML elements in the specified selector. It looks for input elements decorated\r\n /// with the [data-val=true] attribute value and enables validation according to the data-val-*\r\n /// attribute values.\r\n /// \r\n /// Any valid jQuery selector.\r\n\r\n // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one\r\n // element with data-val=true\r\n var $selector = $(selector),\r\n $forms = $selector.parents()\r\n .addBack()\r\n .filter(\"form\")\r\n .add($selector.find(\"form\"))\r\n .has(\"[data-val=true]\");\r\n\r\n $selector.find(\"[data-val=true]\").each(function () {\r\n $jQval.unobtrusive.parseElement(this, true);\r\n });\r\n\r\n $forms.each(function () {\r\n var info = validationInfo(this);\r\n if (info) {\r\n info.attachValidation();\r\n }\r\n });\r\n }\r\n };\r\n\r\n adapters = $jQval.unobtrusive.adapters;\r\n\r\n adapters.add = function (adapterName, params, fn) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).\r\n /// [Optional] An array of parameter names (strings) that will\r\n /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and\r\n /// mmmm is the parameter name).\r\n /// The function to call, which adapts the values from the HTML\r\n /// attributes into jQuery Validate rules and/or messages.\r\n /// \r\n if (!fn) { // Called with no params, just a function\r\n fn = params;\r\n params = [];\r\n }\r\n this.push({ name: adapterName, params: params, adapt: fn });\r\n return this;\r\n };\r\n\r\n adapters.addBool = function (adapterName, ruleName) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\r\n /// the jQuery Validate validation rule has no parameter values.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).\r\n /// [Optional] The name of the jQuery Validate rule. If not provided, the value\r\n /// of adapterName will be used instead.\r\n /// \r\n return this.add(adapterName, function (options) {\r\n setValidationValues(options, ruleName || adapterName, true);\r\n });\r\n };\r\n\r\n adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\r\n /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and\r\n /// one for min-and-max). The HTML parameters are expected to be named -min and -max.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).\r\n /// The name of the jQuery Validate rule to be used when you only\r\n /// have a minimum value.\r\n /// The name of the jQuery Validate rule to be used when you only\r\n /// have a maximum value.\r\n /// The name of the jQuery Validate rule to be used when you\r\n /// have both a minimum and maximum value.\r\n /// [Optional] The name of the HTML attribute that\r\n /// contains the minimum value. The default is \"min\".\r\n /// [Optional] The name of the HTML attribute that\r\n /// contains the maximum value. The default is \"max\".\r\n /// \r\n return this.add(adapterName, [minAttribute || \"min\", maxAttribute || \"max\"], function (options) {\r\n var min = options.params.min,\r\n max = options.params.max;\r\n\r\n if (min && max) {\r\n setValidationValues(options, minMaxRuleName, [min, max]);\r\n }\r\n else if (min) {\r\n setValidationValues(options, minRuleName, min);\r\n }\r\n else if (max) {\r\n setValidationValues(options, maxRuleName, max);\r\n }\r\n });\r\n };\r\n\r\n adapters.addSingleVal = function (adapterName, attribute, ruleName) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\r\n /// the jQuery Validate validation rule has a single value.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).\r\n /// [Optional] The name of the HTML attribute that contains the value.\r\n /// The default is \"val\".\r\n /// [Optional] The name of the jQuery Validate rule. If not provided, the value\r\n /// of adapterName will be used instead.\r\n /// \r\n return this.add(adapterName, [attribute || \"val\"], function (options) {\r\n setValidationValues(options, ruleName || adapterName, options.params[attribute]);\r\n });\r\n };\r\n\r\n $jQval.addMethod(\"__dummy__\", function (value, element, params) {\r\n return true;\r\n });\r\n\r\n $jQval.addMethod(\"regex\", function (value, element, params) {\r\n var match;\r\n if (this.optional(element)) {\r\n return true;\r\n }\r\n\r\n match = new RegExp(params).exec(value);\r\n return (match && (match.index === 0) && (match[0].length === value.length));\r\n });\r\n\r\n $jQval.addMethod(\"nonalphamin\", function (value, element, nonalphamin) {\r\n var match;\r\n if (nonalphamin) {\r\n match = value.match(/\\W/g);\r\n match = match && match.length >= nonalphamin;\r\n }\r\n return match;\r\n });\r\n\r\n if ($jQval.methods.extension) {\r\n adapters.addSingleVal(\"accept\", \"mimtype\");\r\n adapters.addSingleVal(\"extension\", \"extension\");\r\n } else {\r\n // for backward compatibility, when the 'extension' validation method does not exist, such as with versions\r\n // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for\r\n // validating the extension, and ignore mime-type validations as they are not supported.\r\n adapters.addSingleVal(\"extension\", \"extension\", \"accept\");\r\n }\r\n\r\n adapters.addSingleVal(\"regex\", \"pattern\");\r\n adapters.addBool(\"creditcard\").addBool(\"date\").addBool(\"digits\").addBool(\"email\").addBool(\"number\").addBool(\"url\");\r\n adapters.addMinMax(\"length\", \"minlength\", \"maxlength\", \"rangelength\").addMinMax(\"range\", \"min\", \"max\", \"range\");\r\n adapters.addMinMax(\"minlength\", \"minlength\").addMinMax(\"maxlength\", \"minlength\", \"maxlength\");\r\n adapters.add(\"equalto\", [\"other\"], function (options) {\r\n var prefix = getModelPrefix(options.element.name),\r\n other = options.params.other,\r\n fullOtherName = appendModelPrefix(other, prefix),\r\n element = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(fullOtherName) + \"']\")[0];\r\n\r\n setValidationValues(options, \"equalTo\", element);\r\n });\r\n adapters.add(\"required\", function (options) {\r\n // jQuery Validate equates \"required\" with \"mandatory\" for checkbox elements\r\n if (options.element.tagName.toUpperCase() !== \"INPUT\" || options.element.type.toUpperCase() !== \"CHECKBOX\") {\r\n setValidationValues(options, \"required\", true);\r\n }\r\n });\r\n adapters.add(\"remote\", [\"url\", \"type\", \"additionalfields\"], function (options) {\r\n var value = {\r\n url: options.params.url,\r\n type: options.params.type || \"GET\",\r\n data: {}\r\n },\r\n prefix = getModelPrefix(options.element.name);\r\n\r\n $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {\r\n var paramName = appendModelPrefix(fieldName, prefix);\r\n value.data[paramName] = function () {\r\n var field = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(paramName) + \"']\");\r\n // For checkboxes and radio buttons, only pick up values from checked fields.\r\n if (field.is(\":checkbox\")) {\r\n return field.filter(\":checked\").val() || field.filter(\":hidden\").val() || '';\r\n }\r\n else if (field.is(\":radio\")) {\r\n return field.filter(\":checked\").val() || '';\r\n }\r\n return field.val();\r\n };\r\n });\r\n\r\n setValidationValues(options, \"remote\", value);\r\n });\r\n adapters.add(\"password\", [\"min\", \"nonalphamin\", \"regex\"], function (options) {\r\n if (options.params.min) {\r\n setValidationValues(options, \"minlength\", options.params.min);\r\n }\r\n if (options.params.nonalphamin) {\r\n setValidationValues(options, \"nonalphamin\", options.params.nonalphamin);\r\n }\r\n if (options.params.regex) {\r\n setValidationValues(options, \"regex\", options.params.regex);\r\n }\r\n });\r\n adapters.add(\"fileextensions\", [\"extensions\"], function (options) {\r\n setValidationValues(options, \"extension\", options.params.extensions);\r\n });\r\n\r\n $(function () {\r\n $jQval.unobtrusive.parse(document);\r\n });\r\n\r\n return $jQval.unobtrusive;\r\n}));\r\n","/*!\n * jQuery Validation Plugin v1.19.5\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2022 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t// - A user defined a `submitHandler`\n\t\t\t\t\t// - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t// was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler && !validator.settings.debug ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tisContentEditable = typeof this.attr( \"contenteditable\" ) !== \"undefined\" && this.attr( \"contenteditable\" ) !== \"false\",\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && isContentEditable ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// JQuery trim is deprecated, provide a trim method based on String.prototype.trim\nvar trim = function( str ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim#Polyfill\n\treturn str.replace( /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\" );\n};\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift => 16\n\t\t\t// Ctrl => 17\n\t\t\t// Alt => 18\n\t\t\t// Caps lock => 20\n\t\t\t// End => 35\n\t\t\t// Home => 36\n\t\t\t// Left arrow => 37\n\t\t\t// Up arrow => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow => 40\n\t\t\t// Insert => 45\n\t\t\t// Num lock => 144\n\t\t\t// AltGr key => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar currentForm = this.currentForm,\n\t\t\t\tgroups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\t// Ignore the element if it belongs to another form. This will happen mainly\n\t\t\t\t// when setting the `form` attribute of an input to the id of another form.\n\t\t\t\tif ( currentForm !== this.form ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable], [type='button']\", delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\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\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.trigger( \"focus\" )\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea, [contenteditable]\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Ignore elements that belong to other/nested forms\n\t\t\t\tif ( this.form !== validator.currentForm ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tisContentEditable = typeof $element.attr( \"contenteditable\" ) !== \"undefined\" && $element.attr( \"contenteditable\" ) !== \"false\",\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( isContentEditable ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t// method: \"method name\",\n\t\t// parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\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\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\tif ( string === undefined ) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() && this.pendingRequest === 0 ) {\n\t\t\t\t$( this.currentForm ).trigger( \"submit\" );\n\n\t\t\t\t// Remove the hidden input that was used as a replacement for the\n\t\t\t\t// missing submit button. The hidden input is added by `handle()`\n\t\t\t\t// to ensure that the value of the used submit button is passed on\n\t\t\t\t// for scripted submits triggered by this method\n\t\t\t\tif ( this.submitButton ) {\n\t\t\t\t\t$( \"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm ).remove();\n\t\t\t\t}\n\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element, method ) {\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\n\t\t\t} );\n\t\t},\n\n\t\t// Cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" )\n\t\t\t\t.find( \".validate-equalTo-blur\" )\n\t\t\t\t\t.off( \".validate-equalTo\" )\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" )\n\t\t\t\t.find( \".validate-lessThan-blur\" )\n\t\t\t\t\t.off( \".validate-lessThan\" )\n\t\t\t\t\t.removeClass( \"validate-lessThan-blur\" )\n\t\t\t\t.find( \".validate-lessThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-lessThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-lessThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThan-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThan\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThan-blur\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// Exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ type === \"date\" ? \"dateISO\" : method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// Support for in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// Force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\n\t\t\t// Cast empty attributes like `data-rule-required` to `true`\n\t\t\tif ( value === \"\" ) {\n\t\t\t\tvalue = true;\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\n\t\t// Handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = typeof parameter === \"function\" && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( Array.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value !== undefined && value !== null && value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[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])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})+(?::(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: ( function() {\n\t\t\tvar called = false;\n\n\t\t\treturn function( value, element ) {\n\t\t\t\tif ( !called ) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"The `date` method is deprecated and will be removed in version '2.0.0'.\\n\" +\n\t\t\t\t\t\t\t\"Please don't use it, since it relies on the Date constructor, which\\n\" +\n\t\t\t\t\t\t\t\"behaves very differently across browsers and locales. Use `dateISO`\\n\" +\n\t\t\t\t\t\t\t\"instead or one of the locale specific methods in `localizations/`\\n\" +\n\t\t\t\t\t\t\t\"and `additional-methods.js`.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t\t};\n\t\t}() ),\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.resetInternals();\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\nreturn $;\n}));","/*! js-cookie v3.0.1 | MIT */\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, (function () {\n var current = global.Cookies;\n var exports = global.Cookies = factory();\n exports.noConflict = function () { global.Cookies = current; return exports; };\n }()));\n}(this, (function () { 'use strict';\n\n /* eslint-disable no-var */\n function assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n }\n /* eslint-enable no-var */\n\n /* eslint-disable no-var */\n var defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n };\n /* eslint-enable no-var */\n\n /* eslint-disable no-var */\n\n function init (converter, defaultAttributes) {\n function set (key, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n key = encodeURIComponent(key)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n key + '=' + converter.write(value, key) + stringifiedAttributes)\n }\n\n function get (key) {\n if (typeof document === 'undefined' || (arguments.length && !key)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var foundKey = decodeURIComponent(parts[0]);\n jar[foundKey] = converter.read(value, foundKey);\n\n if (key === foundKey) {\n break\n }\n } catch (e) {}\n }\n\n return key ? jar[key] : jar\n }\n\n return Object.create(\n {\n set: set,\n get: get,\n remove: function (key, attributes) {\n set(\n key,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n }\n\n var api = init(defaultConverter, { path: '/' });\n /* eslint-enable no-var */\n\n return api;\n\n})));\n","(function(window, factory) {\n\tvar lazySizes = factory(window, window.document, Date);\n\twindow.lazySizes = lazySizes;\n\tif(typeof module == 'object' && module.exports){\n\t\tmodule.exports = lazySizes;\n\t}\n}(typeof window != 'undefined' ?\n window : {}, \n/**\n * import(\"./types/global\")\n * @typedef { import(\"./types/lazysizes-config\").LazySizesConfigPartial } LazySizesConfigPartial\n */\nfunction l(window, document, Date) { // Pass in the window Date function also for SSR because the Date class can be lost\n\t'use strict';\n\t/*jshint eqnull:true */\n\n\tvar lazysizes,\n\t\t/**\n\t\t * @type { LazySizesConfigPartial }\n\t\t */\n\t\tlazySizesCfg;\n\n\t(function(){\n\t\tvar prop;\n\n\t\tvar lazySizesDefaults = {\n\t\t\tlazyClass: 'lazyload',\n\t\t\tloadedClass: 'lazyloaded',\n\t\t\tloadingClass: 'lazyloading',\n\t\t\tpreloadClass: 'lazypreload',\n\t\t\terrorClass: 'lazyerror',\n\t\t\t//strictClass: 'lazystrict',\n\t\t\tautosizesClass: 'lazyautosizes',\n\t\t\tfastLoadedClass: 'ls-is-cached',\n\t\t\tiframeLoadMode: 0,\n\t\t\tsrcAttr: 'data-src',\n\t\t\tsrcsetAttr: 'data-srcset',\n\t\t\tsizesAttr: 'data-sizes',\n\t\t\t//preloadAfterLoad: false,\n\t\t\tminSize: 40,\n\t\t\tcustomMedia: {},\n\t\t\tinit: true,\n\t\t\texpFactor: 1.5,\n\t\t\thFac: 0.8,\n\t\t\tloadMode: 2,\n\t\t\tloadHidden: true,\n\t\t\tricTimeout: 0,\n\t\t\tthrottleDelay: 125,\n\t\t};\n\n\t\tlazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {};\n\n\t\tfor(prop in lazySizesDefaults){\n\t\t\tif(!(prop in lazySizesCfg)){\n\t\t\t\tlazySizesCfg[prop] = lazySizesDefaults[prop];\n\t\t\t}\n\t\t}\n\t})();\n\n\tif (!document || !document.getElementsByClassName) {\n\t\treturn {\n\t\t\tinit: function () {},\n\t\t\t/**\n\t\t\t * @type { LazySizesConfigPartial }\n\t\t\t */\n\t\t\tcfg: lazySizesCfg,\n\t\t\t/**\n\t\t\t * @type { true }\n\t\t\t */\n\t\t\tnoSupport: true,\n\t\t};\n\t}\n\n\tvar docElem = document.documentElement;\n\n\tvar supportPicture = window.HTMLPictureElement;\n\n\tvar _addEventListener = 'addEventListener';\n\n\tvar _getAttribute = 'getAttribute';\n\n\t/**\n\t * Update to bind to window because 'this' becomes null during SSR\n\t * builds.\n\t */\n\tvar addEventListener = window[_addEventListener].bind(window);\n\n\tvar setTimeout = window.setTimeout;\n\n\tvar requestAnimationFrame = window.requestAnimationFrame || setTimeout;\n\n\tvar requestIdleCallback = window.requestIdleCallback;\n\n\tvar regPicture = /^picture$/i;\n\n\tvar loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded'];\n\n\tvar regClassCache = {};\n\n\tvar forEach = Array.prototype.forEach;\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar hasClass = function(ele, cls) {\n\t\tif(!regClassCache[cls]){\n\t\t\tregClassCache[cls] = new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)');\n\t\t}\n\t\treturn regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls];\n\t};\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar addClass = function(ele, cls) {\n\t\tif (!hasClass(ele, cls)){\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls);\n\t\t}\n\t};\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar removeClass = function(ele, cls) {\n\t\tvar reg;\n\t\tif ((reg = hasClass(ele,cls))) {\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' '));\n\t\t}\n\t};\n\n\tvar addRemoveLoadEvents = function(dom, fn, add){\n\t\tvar action = add ? _addEventListener : 'removeEventListener';\n\t\tif(add){\n\t\t\taddRemoveLoadEvents(dom, fn);\n\t\t}\n\t\tloadEvents.forEach(function(evt){\n\t\t\tdom[action](evt, fn);\n\t\t});\n\t};\n\n\t/**\n\t * @param elem { Element }\n\t * @param name { string }\n\t * @param detail { any }\n\t * @param noBubbles { boolean }\n\t * @param noCancelable { boolean }\n\t * @returns { CustomEvent }\n\t */\n\tvar triggerEvent = function(elem, name, detail, noBubbles, noCancelable){\n\t\tvar event = document.createEvent('Event');\n\n\t\tif(!detail){\n\t\t\tdetail = {};\n\t\t}\n\n\t\tdetail.instance = lazysizes;\n\n\t\tevent.initEvent(name, !noBubbles, !noCancelable);\n\n\t\tevent.detail = detail;\n\n\t\telem.dispatchEvent(event);\n\t\treturn event;\n\t};\n\n\tvar updatePolyfill = function (el, full){\n\t\tvar polyfill;\n\t\tif( !supportPicture && ( polyfill = (window.picturefill || lazySizesCfg.pf) ) ){\n\t\t\tif(full && full.src && !el[_getAttribute]('srcset')){\n\t\t\t\tel.setAttribute('srcset', full.src);\n\t\t\t}\n\t\t\tpolyfill({reevaluate: true, elements: [el]});\n\t\t} else if(full && full.src){\n\t\t\tel.src = full.src;\n\t\t}\n\t};\n\n\tvar getCSS = function (elem, style){\n\t\treturn (getComputedStyle(elem, null) || {})[style];\n\t};\n\n\t/**\n\t *\n\t * @param elem { Element }\n\t * @param parent { Element }\n\t * @param [width] {number}\n\t * @returns {number}\n\t */\n\tvar getWidth = function(elem, parent, width){\n\t\twidth = width || elem.offsetWidth;\n\n\t\twhile(width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth){\n\t\t\twidth = parent.offsetWidth;\n\t\t\tparent = parent.parentNode;\n\t\t}\n\n\t\treturn width;\n\t};\n\n\tvar rAF = (function(){\n\t\tvar running, waiting;\n\t\tvar firstFns = [];\n\t\tvar secondFns = [];\n\t\tvar fns = firstFns;\n\n\t\tvar run = function(){\n\t\t\tvar runFns = fns;\n\n\t\t\tfns = firstFns.length ? secondFns : firstFns;\n\n\t\t\trunning = true;\n\t\t\twaiting = false;\n\n\t\t\twhile(runFns.length){\n\t\t\t\trunFns.shift()();\n\t\t\t}\n\n\t\t\trunning = false;\n\t\t};\n\n\t\tvar rafBatch = function(fn, queue){\n\t\t\tif(running && !queue){\n\t\t\t\tfn.apply(this, arguments);\n\t\t\t} else {\n\t\t\t\tfns.push(fn);\n\n\t\t\t\tif(!waiting){\n\t\t\t\t\twaiting = true;\n\t\t\t\t\t(document.hidden ? setTimeout : requestAnimationFrame)(run);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\trafBatch._lsFlush = run;\n\n\t\treturn rafBatch;\n\t})();\n\n\tvar rAFIt = function(fn, simple){\n\t\treturn simple ?\n\t\t\tfunction() {\n\t\t\t\trAF(fn);\n\t\t\t} :\n\t\t\tfunction(){\n\t\t\t\tvar that = this;\n\t\t\t\tvar args = arguments;\n\t\t\t\trAF(function(){\n\t\t\t\t\tfn.apply(that, args);\n\t\t\t\t});\n\t\t\t}\n\t\t;\n\t};\n\n\tvar throttle = function(fn){\n\t\tvar running;\n\t\tvar lastTime = 0;\n\t\tvar gDelay = lazySizesCfg.throttleDelay;\n\t\tvar rICTimeout = lazySizesCfg.ricTimeout;\n\t\tvar run = function(){\n\t\t\trunning = false;\n\t\t\tlastTime = Date.now();\n\t\t\tfn();\n\t\t};\n\t\tvar idleCallback = requestIdleCallback && rICTimeout > 49 ?\n\t\t\tfunction(){\n\t\t\t\trequestIdleCallback(run, {timeout: rICTimeout});\n\n\t\t\t\tif(rICTimeout !== lazySizesCfg.ricTimeout){\n\t\t\t\t\trICTimeout = lazySizesCfg.ricTimeout;\n\t\t\t\t}\n\t\t\t} :\n\t\t\trAFIt(function(){\n\t\t\t\tsetTimeout(run);\n\t\t\t}, true)\n\t\t;\n\n\t\treturn function(isPriority){\n\t\t\tvar delay;\n\n\t\t\tif((isPriority = isPriority === true)){\n\t\t\t\trICTimeout = 33;\n\t\t\t}\n\n\t\t\tif(running){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\trunning = true;\n\n\t\t\tdelay = gDelay - (Date.now() - lastTime);\n\n\t\t\tif(delay < 0){\n\t\t\t\tdelay = 0;\n\t\t\t}\n\n\t\t\tif(isPriority || delay < 9){\n\t\t\t\tidleCallback();\n\t\t\t} else {\n\t\t\t\tsetTimeout(idleCallback, delay);\n\t\t\t}\n\t\t};\n\t};\n\n\t//based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html\n\tvar debounce = function(func) {\n\t\tvar timeout, timestamp;\n\t\tvar wait = 99;\n\t\tvar run = function(){\n\t\t\ttimeout = null;\n\t\t\tfunc();\n\t\t};\n\t\tvar later = function() {\n\t\t\tvar last = Date.now() - timestamp;\n\n\t\t\tif (last < wait) {\n\t\t\t\tsetTimeout(later, wait - last);\n\t\t\t} else {\n\t\t\t\t(requestIdleCallback || run)(run);\n\t\t\t}\n\t\t};\n\n\t\treturn function() {\n\t\t\ttimestamp = Date.now();\n\n\t\t\tif (!timeout) {\n\t\t\t\ttimeout = setTimeout(later, wait);\n\t\t\t}\n\t\t};\n\t};\n\n\tvar loader = (function(){\n\t\tvar preloadElems, isCompleted, resetPreloadingTimer, loadMode, started;\n\n\t\tvar eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden;\n\n\t\tvar regImg = /^img$/i;\n\t\tvar regIframe = /^iframe$/i;\n\n\t\tvar supportScroll = ('onscroll' in window) && !(/(gle|ing)bot/.test(navigator.userAgent));\n\n\t\tvar shrinkExpand = 0;\n\t\tvar currentExpand = 0;\n\n\t\tvar isLoading = 0;\n\t\tvar lowRuns = -1;\n\n\t\tvar resetPreloading = function(e){\n\t\t\tisLoading--;\n\t\t\tif(!e || isLoading < 0 || !e.target){\n\t\t\t\tisLoading = 0;\n\t\t\t}\n\t\t};\n\n\t\tvar isVisible = function (elem) {\n\t\t\tif (isBodyHidden == null) {\n\t\t\t\tisBodyHidden = getCSS(document.body, 'visibility') == 'hidden';\n\t\t\t}\n\n\t\t\treturn isBodyHidden || !(getCSS(elem.parentNode, 'visibility') == 'hidden' && getCSS(elem, 'visibility') == 'hidden');\n\t\t};\n\n\t\tvar isNestedVisible = function(elem, elemExpand){\n\t\t\tvar outerRect;\n\t\t\tvar parent = elem;\n\t\t\tvar visible = isVisible(elem);\n\n\t\t\teLtop -= elemExpand;\n\t\t\teLbottom += elemExpand;\n\t\t\teLleft -= elemExpand;\n\t\t\teLright += elemExpand;\n\n\t\t\twhile(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){\n\t\t\t\tvisible = ((getCSS(parent, 'opacity') || 1) > 0);\n\n\t\t\t\tif(visible && getCSS(parent, 'overflow') != 'visible'){\n\t\t\t\t\touterRect = parent.getBoundingClientRect();\n\t\t\t\t\tvisible = eLright > outerRect.left &&\n\t\t\t\t\t\teLleft < outerRect.right &&\n\t\t\t\t\t\teLbottom > outerRect.top - 1 &&\n\t\t\t\t\t\teLtop < outerRect.bottom + 1\n\t\t\t\t\t;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn visible;\n\t\t};\n\n\t\tvar checkElements = function() {\n\t\t\tvar eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal,\n\t\t\t\tbeforeExpandVal, defaultExpand, preloadExpand, hFac;\n\t\t\tvar lazyloadElems = lazysizes.elements;\n\n\t\t\tif((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){\n\n\t\t\t\ti = 0;\n\n\t\t\t\tlowRuns++;\n\n\t\t\t\tfor(; i < eLlen; i++){\n\n\t\t\t\t\tif(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;}\n\n\t\t\t\t\tif(!supportScroll || (lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i]))){unveilElement(lazyloadElems[i]);continue;}\n\n\t\t\t\t\tif(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){\n\t\t\t\t\t\telemExpand = currentExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!defaultExpand) {\n\t\t\t\t\t\tdefaultExpand = (!lazySizesCfg.expand || lazySizesCfg.expand < 1) ?\n\t\t\t\t\t\t\tdocElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 :\n\t\t\t\t\t\t\tlazySizesCfg.expand;\n\n\t\t\t\t\t\tlazysizes._defEx = defaultExpand;\n\n\t\t\t\t\t\tpreloadExpand = defaultExpand * lazySizesCfg.expFactor;\n\t\t\t\t\t\thFac = lazySizesCfg.hFac;\n\t\t\t\t\t\tisBodyHidden = null;\n\n\t\t\t\t\t\tif(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){\n\t\t\t\t\t\t\tcurrentExpand = preloadExpand;\n\t\t\t\t\t\t\tlowRuns = 0;\n\t\t\t\t\t\t} else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){\n\t\t\t\t\t\t\tcurrentExpand = defaultExpand;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentExpand = shrinkExpand;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(beforeExpandVal !== elemExpand){\n\t\t\t\t\t\teLvW = innerWidth + (elemExpand * hFac);\n\t\t\t\t\t\telvH = innerHeight + elemExpand;\n\t\t\t\t\t\telemNegativeExpand = elemExpand * -1;\n\t\t\t\t\t\tbeforeExpandVal = elemExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\trect = lazyloadElems[i].getBoundingClientRect();\n\n\t\t\t\t\tif ((eLbottom = rect.bottom) >= elemNegativeExpand &&\n\t\t\t\t\t\t(eLtop = rect.top) <= elvH &&\n\t\t\t\t\t\t(eLright = rect.right) >= elemNegativeExpand * hFac &&\n\t\t\t\t\t\t(eLleft = rect.left) <= eLvW &&\n\t\t\t\t\t\t(eLbottom || eLright || eLleft || eLtop) &&\n\t\t\t\t\t\t(lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) &&\n\t\t\t\t\t\t((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){\n\t\t\t\t\t\tunveilElement(lazyloadElems[i]);\n\t\t\t\t\t\tloadedSomething = true;\n\t\t\t\t\t\tif(isLoading > 9){break;}\n\t\t\t\t\t} else if(!loadedSomething && isCompleted && !autoLoadElem &&\n\t\t\t\t\t\tisLoading < 4 && lowRuns < 4 && loadMode > 2 &&\n\t\t\t\t\t\t(preloadElems[0] || lazySizesCfg.preloadAfterLoad) &&\n\t\t\t\t\t\t(preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto')))){\n\t\t\t\t\t\tautoLoadElem = preloadElems[0] || lazyloadElems[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(autoLoadElem && !loadedSomething){\n\t\t\t\t\tunveilElement(autoLoadElem);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar throttledCheckElements = throttle(checkElements);\n\n\t\tvar switchLoadingClass = function(e){\n\t\t\tvar elem = e.target;\n\n\t\t\tif (elem._lazyCache) {\n\t\t\t\tdelete elem._lazyCache;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresetPreloading(e);\n\t\t\taddClass(elem, lazySizesCfg.loadedClass);\n\t\t\tremoveClass(elem, lazySizesCfg.loadingClass);\n\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass);\n\t\t\ttriggerEvent(elem, 'lazyloaded');\n\t\t};\n\t\tvar rafedSwitchLoadingClass = rAFIt(switchLoadingClass);\n\t\tvar rafSwitchLoadingClass = function(e){\n\t\t\trafedSwitchLoadingClass({target: e.target});\n\t\t};\n\n\t\tvar changeIframeSrc = function(elem, src){\n\t\t\tvar loadMode = elem.getAttribute('data-load-mode') || lazySizesCfg.iframeLoadMode;\n\n\t\t\t// loadMode can be also a string!\n\t\t\tif (loadMode == 0) {\n\t\t\t\telem.contentWindow.location.replace(src);\n\t\t\t} else if (loadMode == 1) {\n\t\t\t\telem.src = src;\n\t\t\t}\n\t\t};\n\n\t\tvar handleSources = function(source){\n\t\t\tvar customMedia;\n\n\t\t\tvar sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr);\n\n\t\t\tif( (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){\n\t\t\t\tsource.setAttribute('media', customMedia);\n\t\t\t}\n\n\t\t\tif(sourceSrcset){\n\t\t\t\tsource.setAttribute('srcset', sourceSrcset);\n\t\t\t}\n\t\t};\n\n\t\tvar lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){\n\t\t\tvar src, srcset, parent, isPicture, event, firesLoad;\n\n\t\t\tif(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){\n\n\t\t\t\tif(sizes){\n\t\t\t\t\tif(isAuto){\n\t\t\t\t\t\taddClass(elem, lazySizesCfg.autosizesClass);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.setAttribute('sizes', sizes);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsrcset = elem[_getAttribute](lazySizesCfg.srcsetAttr);\n\t\t\t\tsrc = elem[_getAttribute](lazySizesCfg.srcAttr);\n\n\t\t\t\tif(isImg) {\n\t\t\t\t\tparent = elem.parentNode;\n\t\t\t\t\tisPicture = parent && regPicture.test(parent.nodeName || '');\n\t\t\t\t}\n\n\t\t\t\tfiresLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture));\n\n\t\t\t\tevent = {target: elem};\n\n\t\t\t\taddClass(elem, lazySizesCfg.loadingClass);\n\n\t\t\t\tif(firesLoad){\n\t\t\t\t\tclearTimeout(resetPreloadingTimer);\n\t\t\t\t\tresetPreloadingTimer = setTimeout(resetPreloading, 2500);\n\t\t\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass, true);\n\t\t\t\t}\n\n\t\t\t\tif(isPicture){\n\t\t\t\t\tforEach.call(parent.getElementsByTagName('source'), handleSources);\n\t\t\t\t}\n\n\t\t\t\tif(srcset){\n\t\t\t\t\telem.setAttribute('srcset', srcset);\n\t\t\t\t} else if(src && !isPicture){\n\t\t\t\t\tif(regIframe.test(elem.nodeName)){\n\t\t\t\t\t\tchangeIframeSrc(elem, src);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.src = src;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(isImg && (srcset || isPicture)){\n\t\t\t\t\tupdatePolyfill(elem, {src: src});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(elem._lazyRace){\n\t\t\t\tdelete elem._lazyRace;\n\t\t\t}\n\t\t\tremoveClass(elem, lazySizesCfg.lazyClass);\n\n\t\t\trAF(function(){\n\t\t\t\t// Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015)\n\t\t\t\tvar isLoaded = elem.complete && elem.naturalWidth > 1;\n\n\t\t\t\tif( !firesLoad || isLoaded){\n\t\t\t\t\tif (isLoaded) {\n\t\t\t\t\t\taddClass(elem, lazySizesCfg.fastLoadedClass);\n\t\t\t\t\t}\n\t\t\t\t\tswitchLoadingClass(event);\n\t\t\t\t\telem._lazyCache = true;\n\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\tif ('_lazyCache' in elem) {\n\t\t\t\t\t\t\tdelete elem._lazyCache;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 9);\n\t\t\t\t}\n\t\t\t\tif (elem.loading == 'lazy') {\n\t\t\t\t\tisLoading--;\n\t\t\t\t}\n\t\t\t}, true);\n\t\t});\n\n\t\t/**\n\t\t *\n\t\t * @param elem { Element }\n\t\t */\n\t\tvar unveilElement = function (elem){\n\t\t\tif (elem._lazyRace) {return;}\n\t\t\tvar detail;\n\n\t\t\tvar isImg = regImg.test(elem.nodeName);\n\n\t\t\t//allow using sizes=\"auto\", but don't use. it's invalid. Use data-sizes=\"auto\" or a valid value for sizes instead (i.e.: sizes=\"80vw\")\n\t\t\tvar sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes'));\n\t\t\tvar isAuto = sizes == 'auto';\n\n\t\t\tif( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)){return;}\n\n\t\t\tdetail = triggerEvent(elem, 'lazyunveilread').detail;\n\n\t\t\tif(isAuto){\n\t\t\t\t autoSizer.updateElem(elem, true, elem.offsetWidth);\n\t\t\t}\n\n\t\t\telem._lazyRace = true;\n\t\t\tisLoading++;\n\n\t\t\tlazyUnveil(elem, detail, isAuto, sizes, isImg);\n\t\t};\n\n\t\tvar afterScroll = debounce(function(){\n\t\t\tlazySizesCfg.loadMode = 3;\n\t\t\tthrottledCheckElements();\n\t\t});\n\n\t\tvar altLoadmodeScrollListner = function(){\n\t\t\tif(lazySizesCfg.loadMode == 3){\n\t\t\t\tlazySizesCfg.loadMode = 2;\n\t\t\t}\n\t\t\tafterScroll();\n\t\t};\n\n\t\tvar onload = function(){\n\t\t\tif(isCompleted){return;}\n\t\t\tif(Date.now() - started < 999){\n\t\t\t\tsetTimeout(onload, 999);\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\tisCompleted = true;\n\n\t\t\tlazySizesCfg.loadMode = 3;\n\n\t\t\tthrottledCheckElements();\n\n\t\t\taddEventListener('scroll', altLoadmodeScrollListner, true);\n\t\t};\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tstarted = Date.now();\n\n\t\t\t\tlazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass);\n\t\t\t\tpreloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass);\n\n\t\t\t\taddEventListener('scroll', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('resize', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('pageshow', function (e) {\n\t\t\t\t\tif (e.persisted) {\n\t\t\t\t\t\tvar loadingElements = document.querySelectorAll('.' + lazySizesCfg.loadingClass);\n\n\t\t\t\t\t\tif (loadingElements.length && loadingElements.forEach) {\n\t\t\t\t\t\t\trequestAnimationFrame(function () {\n\t\t\t\t\t\t\t\tloadingElements.forEach( function (img) {\n\t\t\t\t\t\t\t\t\tif (img.complete) {\n\t\t\t\t\t\t\t\t\t\tunveilElement(img);\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});\n\n\t\t\t\tif(window.MutationObserver){\n\t\t\t\t\tnew MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} );\n\t\t\t\t} else {\n\t\t\t\t\tdocElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true);\n\t\t\t\t\tdocElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true);\n\t\t\t\t\tsetInterval(throttledCheckElements, 999);\n\t\t\t\t}\n\n\t\t\t\taddEventListener('hashchange', throttledCheckElements, true);\n\n\t\t\t\t//, 'fullscreenchange'\n\t\t\t\t['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function(name){\n\t\t\t\t\tdocument[_addEventListener](name, throttledCheckElements, true);\n\t\t\t\t});\n\n\t\t\t\tif((/d$|^c/.test(document.readyState))){\n\t\t\t\t\tonload();\n\t\t\t\t} else {\n\t\t\t\t\taddEventListener('load', onload);\n\t\t\t\t\tdocument[_addEventListener]('DOMContentLoaded', throttledCheckElements);\n\t\t\t\t\tsetTimeout(onload, 20000);\n\t\t\t\t}\n\n\t\t\t\tif(lazysizes.elements.length){\n\t\t\t\t\tcheckElements();\n\t\t\t\t\trAF._lsFlush();\n\t\t\t\t} else {\n\t\t\t\t\tthrottledCheckElements();\n\t\t\t\t}\n\t\t\t},\n\t\t\tcheckElems: throttledCheckElements,\n\t\t\tunveil: unveilElement,\n\t\t\t_aLSL: altLoadmodeScrollListner,\n\t\t};\n\t})();\n\n\n\tvar autoSizer = (function(){\n\t\tvar autosizesElems;\n\n\t\tvar sizeElement = rAFIt(function(elem, parent, event, width){\n\t\t\tvar sources, i, len;\n\t\t\telem._lazysizesWidth = width;\n\t\t\twidth += 'px';\n\n\t\t\telem.setAttribute('sizes', width);\n\n\t\t\tif(regPicture.test(parent.nodeName || '')){\n\t\t\t\tsources = parent.getElementsByTagName('source');\n\t\t\t\tfor(i = 0, len = sources.length; i < len; i++){\n\t\t\t\t\tsources[i].setAttribute('sizes', width);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!event.detail.dataAttr){\n\t\t\t\tupdatePolyfill(elem, event.detail);\n\t\t\t}\n\t\t});\n\t\t/**\n\t\t *\n\t\t * @param elem {Element}\n\t\t * @param dataAttr\n\t\t * @param [width] { number }\n\t\t */\n\t\tvar getSizeElement = function (elem, dataAttr, width){\n\t\t\tvar event;\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif(parent){\n\t\t\t\twidth = getWidth(elem, parent, width);\n\t\t\t\tevent = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr});\n\n\t\t\t\tif(!event.defaultPrevented){\n\t\t\t\t\twidth = event.detail.width;\n\n\t\t\t\t\tif(width && width !== elem._lazysizesWidth){\n\t\t\t\t\t\tsizeElement(elem, parent, event, width);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar updateElementsSizes = function(){\n\t\t\tvar i;\n\t\t\tvar len = autosizesElems.length;\n\t\t\tif(len){\n\t\t\t\ti = 0;\n\n\t\t\t\tfor(; i < len; i++){\n\t\t\t\t\tgetSizeElement(autosizesElems[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar debouncedUpdateElementsSizes = debounce(updateElementsSizes);\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tautosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass);\n\t\t\t\taddEventListener('resize', debouncedUpdateElementsSizes);\n\t\t\t},\n\t\t\tcheckElems: debouncedUpdateElementsSizes,\n\t\t\tupdateElem: getSizeElement\n\t\t};\n\t})();\n\n\tvar init = function(){\n\t\tif(!init.i && document.getElementsByClassName){\n\t\t\tinit.i = true;\n\t\t\tautoSizer._();\n\t\t\tloader._();\n\t\t}\n\t};\n\n\tsetTimeout(function(){\n\t\tif(lazySizesCfg.init){\n\t\t\tinit();\n\t\t}\n\t});\n\n\tlazysizes = {\n\t\t/**\n\t\t * @type { LazySizesConfigPartial }\n\t\t */\n\t\tcfg: lazySizesCfg,\n\t\tautoSizer: autoSizer,\n\t\tloader: loader,\n\t\tinit: init,\n\t\tuP: updatePolyfill,\n\t\taC: addClass,\n\t\trC: removeClass,\n\t\thC: hasClass,\n\t\tfire: triggerEvent,\n\t\tgW: getWidth,\n\t\trAF: rAF,\n\t};\n\n\treturn lazysizes;\n}\n));\n","/*!\n\npica\nhttps://github.com/nodeca/pica\n\n*/\n\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.pica = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i= 0,\n wasm: __requested_features.indexOf('wasm') >= 0\n };\n Multimath.call(this, features);\n this.features = {\n js: features.js,\n wasm: features.wasm && this.has_wasm()\n };\n this.use(mm_unsharp_mask);\n this.use(mm_resize);\n}\n\nMathLib.prototype = Object.create(Multimath.prototype);\nMathLib.prototype.constructor = MathLib;\n\nMathLib.prototype.resizeAndUnsharp = function resizeAndUnsharp(options, cache) {\n var result = this.resize(options, cache);\n\n if (options.unsharpAmount) {\n this.unsharp_mask(result, options.toWidth, options.toHeight, options.unsharpAmount, options.unsharpRadius, options.unsharpThreshold);\n }\n\n return result;\n};\n\nmodule.exports = MathLib;\n\n},{\"./mm_resize\":4,\"./mm_unsharp_mask\":9,\"multimath\":19}],2:[function(_dereq_,module,exports){\n// Resize convolvers, pure JS implementation\n//\n'use strict'; // Precision of fixed FP values\n//var FIXED_FRAC_BITS = 14;\n\nfunction clampTo8(i) {\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clampNegative(i) {\n return i >= 0 ? i : 0;\n} // Convolve image data in horizontal direction. Can be used for:\n//\n// 1. bitmap with premultiplied alpha\n// 2. bitmap without alpha (all values 255)\n//\n// Notes:\n//\n// - output is transposed\n// - output resolution is ~15 bits per channel(for better precision).\n//\n\n\nfunction convolveHor(src, dest, srcW, srcH, destW, filters) {\n var r, g, b, a;\n var filterPtr, filterShift, filterSize;\n var srcPtr, srcY, destX, filterVal;\n var srcOffset = 0,\n destOffset = 0; // For each row\n\n for (srcY = 0; srcY < srcH; srcY++) {\n filterPtr = 0; // Apply precomputed filters to each destination row point\n\n for (destX = 0; destX < destW; destX++) {\n // Get the filter that determines the current output pixel.\n filterShift = filters[filterPtr++];\n filterSize = filters[filterPtr++];\n srcPtr = srcOffset + filterShift * 4 | 0;\n r = g = b = a = 0; // Apply the filter to the row to get the destination pixel r, g, b, a\n\n for (; filterSize > 0; filterSize--) {\n filterVal = filters[filterPtr++]; // Use reverse order to workaround deopts in old v8 (node v.10)\n // Big thanks to @mraleph (Vyacheslav Egorov) for the tip.\n\n a = a + filterVal * src[srcPtr + 3] | 0;\n b = b + filterVal * src[srcPtr + 2] | 0;\n g = g + filterVal * src[srcPtr + 1] | 0;\n r = r + filterVal * src[srcPtr] | 0;\n srcPtr = srcPtr + 4 | 0;\n } // Store 15 bits between passes for better precision\n // Instead of shift to 14 (FIXED_FRAC_BITS), shift to 7 only\n //\n\n\n dest[destOffset + 3] = clampNegative(a >> 7);\n dest[destOffset + 2] = clampNegative(b >> 7);\n dest[destOffset + 1] = clampNegative(g >> 7);\n dest[destOffset] = clampNegative(r >> 7);\n destOffset = destOffset + srcH * 4 | 0;\n }\n\n destOffset = (srcY + 1) * 4 | 0;\n srcOffset = (srcY + 1) * srcW * 4 | 0;\n }\n} // Supplementary method for `convolveHor()`\n//\n\n\nfunction convolveVert(src, dest, srcW, srcH, destW, filters) {\n var r, g, b, a;\n var filterPtr, filterShift, filterSize;\n var srcPtr, srcY, destX, filterVal;\n var srcOffset = 0,\n destOffset = 0; // For each row\n\n for (srcY = 0; srcY < srcH; srcY++) {\n filterPtr = 0; // Apply precomputed filters to each destination row point\n\n for (destX = 0; destX < destW; destX++) {\n // Get the filter that determines the current output pixel.\n filterShift = filters[filterPtr++];\n filterSize = filters[filterPtr++];\n srcPtr = srcOffset + filterShift * 4 | 0;\n r = g = b = a = 0; // Apply the filter to the row to get the destination pixel r, g, b, a\n\n for (; filterSize > 0; filterSize--) {\n filterVal = filters[filterPtr++]; // Use reverse order to workaround deopts in old v8 (node v.10)\n // Big thanks to @mraleph (Vyacheslav Egorov) for the tip.\n\n a = a + filterVal * src[srcPtr + 3] | 0;\n b = b + filterVal * src[srcPtr + 2] | 0;\n g = g + filterVal * src[srcPtr + 1] | 0;\n r = r + filterVal * src[srcPtr] | 0;\n srcPtr = srcPtr + 4 | 0;\n } // Sync with premultiplied version for exact result match\n\n\n r >>= 7;\n g >>= 7;\n b >>= 7;\n a >>= 7; // Bring this value back in range + round result.\n //\n\n dest[destOffset + 3] = clampTo8(a + (1 << 13) >> 14);\n dest[destOffset + 2] = clampTo8(b + (1 << 13) >> 14);\n dest[destOffset + 1] = clampTo8(g + (1 << 13) >> 14);\n dest[destOffset] = clampTo8(r + (1 << 13) >> 14);\n destOffset = destOffset + srcH * 4 | 0;\n }\n\n destOffset = (srcY + 1) * 4 | 0;\n srcOffset = (srcY + 1) * srcW * 4 | 0;\n }\n} // Premultiply & convolve image data in horizontal direction. Can be used for:\n//\n// - Any bitmap data, extracted with `.getImageData()` method (with\n// non-premultiplied alpha)\n//\n// For images without alpha channel this method is slower than `convolveHor()`\n//\n\n\nfunction convolveHorWithPre(src, dest, srcW, srcH, destW, filters) {\n var r, g, b, a, alpha;\n var filterPtr, filterShift, filterSize;\n var srcPtr, srcY, destX, filterVal;\n var srcOffset = 0,\n destOffset = 0; // For each row\n\n for (srcY = 0; srcY < srcH; srcY++) {\n filterPtr = 0; // Apply precomputed filters to each destination row point\n\n for (destX = 0; destX < destW; destX++) {\n // Get the filter that determines the current output pixel.\n filterShift = filters[filterPtr++];\n filterSize = filters[filterPtr++];\n srcPtr = srcOffset + filterShift * 4 | 0;\n r = g = b = a = 0; // Apply the filter to the row to get the destination pixel r, g, b, a\n\n for (; filterSize > 0; filterSize--) {\n filterVal = filters[filterPtr++]; // Use reverse order to workaround deopts in old v8 (node v.10)\n // Big thanks to @mraleph (Vyacheslav Egorov) for the tip.\n\n alpha = src[srcPtr + 3];\n a = a + filterVal * alpha | 0;\n b = b + filterVal * src[srcPtr + 2] * alpha | 0;\n g = g + filterVal * src[srcPtr + 1] * alpha | 0;\n r = r + filterVal * src[srcPtr] * alpha | 0;\n srcPtr = srcPtr + 4 | 0;\n } // Premultiply is (* alpha / 255).\n // Postpone division for better performance\n\n\n b = b / 255 | 0;\n g = g / 255 | 0;\n r = r / 255 | 0; // Store 15 bits between passes for better precision\n // Instead of shift to 14 (FIXED_FRAC_BITS), shift to 7 only\n //\n\n dest[destOffset + 3] = clampNegative(a >> 7);\n dest[destOffset + 2] = clampNegative(b >> 7);\n dest[destOffset + 1] = clampNegative(g >> 7);\n dest[destOffset] = clampNegative(r >> 7);\n destOffset = destOffset + srcH * 4 | 0;\n }\n\n destOffset = (srcY + 1) * 4 | 0;\n srcOffset = (srcY + 1) * srcW * 4 | 0;\n }\n} // Supplementary method for `convolveHorWithPre()`\n//\n\n\nfunction convolveVertWithPre(src, dest, srcW, srcH, destW, filters) {\n var r, g, b, a;\n var filterPtr, filterShift, filterSize;\n var srcPtr, srcY, destX, filterVal;\n var srcOffset = 0,\n destOffset = 0; // For each row\n\n for (srcY = 0; srcY < srcH; srcY++) {\n filterPtr = 0; // Apply precomputed filters to each destination row point\n\n for (destX = 0; destX < destW; destX++) {\n // Get the filter that determines the current output pixel.\n filterShift = filters[filterPtr++];\n filterSize = filters[filterPtr++];\n srcPtr = srcOffset + filterShift * 4 | 0;\n r = g = b = a = 0; // Apply the filter to the row to get the destination pixel r, g, b, a\n\n for (; filterSize > 0; filterSize--) {\n filterVal = filters[filterPtr++]; // Use reverse order to workaround deopts in old v8 (node v.10)\n // Big thanks to @mraleph (Vyacheslav Egorov) for the tip.\n\n a = a + filterVal * src[srcPtr + 3] | 0;\n b = b + filterVal * src[srcPtr + 2] | 0;\n g = g + filterVal * src[srcPtr + 1] | 0;\n r = r + filterVal * src[srcPtr] | 0;\n srcPtr = srcPtr + 4 | 0;\n } // Downscale to leave room for un-premultiply\n\n\n r >>= 7;\n g >>= 7;\n b >>= 7;\n a >>= 7; // Un-premultiply\n\n a = clampTo8(a + (1 << 13) >> 14);\n\n if (a > 0) {\n r = r * 255 / a | 0;\n g = g * 255 / a | 0;\n b = b * 255 / a | 0;\n } // Bring this value back in range + round result.\n // Shift value = FIXED_FRAC_BITS + 7\n //\n\n\n dest[destOffset + 3] = a;\n dest[destOffset + 2] = clampTo8(b + (1 << 13) >> 14);\n dest[destOffset + 1] = clampTo8(g + (1 << 13) >> 14);\n dest[destOffset] = clampTo8(r + (1 << 13) >> 14);\n destOffset = destOffset + srcH * 4 | 0;\n }\n\n destOffset = (srcY + 1) * 4 | 0;\n srcOffset = (srcY + 1) * srcW * 4 | 0;\n }\n}\n\nmodule.exports = {\n convolveHor: convolveHor,\n convolveVert: convolveVert,\n convolveHorWithPre: convolveHorWithPre,\n convolveVertWithPre: convolveVertWithPre\n};\n\n},{}],3:[function(_dereq_,module,exports){\n// This is autogenerated file from math.wasm, don't edit.\n//\n'use strict';\n/* eslint-disable max-len */\n\nmodule.exports = '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';\n\n},{}],4:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = {\n name: 'resize',\n fn: _dereq_('./resize'),\n wasm_fn: _dereq_('./resize_wasm'),\n wasm_src: _dereq_('./convolve_wasm_base64')\n};\n\n},{\"./convolve_wasm_base64\":3,\"./resize\":5,\"./resize_wasm\":8}],5:[function(_dereq_,module,exports){\n'use strict';\n\nvar createFilters = _dereq_('./resize_filter_gen');\n\nvar _require = _dereq_('./convolve'),\n convolveHor = _require.convolveHor,\n convolveVert = _require.convolveVert,\n convolveHorWithPre = _require.convolveHorWithPre,\n convolveVertWithPre = _require.convolveVertWithPre;\n\nfunction hasAlpha(src, width, height) {\n var ptr = 3,\n len = width * height * 4 | 0;\n\n while (ptr < len) {\n if (src[ptr] !== 255) return true;\n ptr = ptr + 4 | 0;\n }\n\n return false;\n}\n\nfunction resetAlpha(dst, width, height) {\n var ptr = 3,\n len = width * height * 4 | 0;\n\n while (ptr < len) {\n dst[ptr] = 0xFF;\n ptr = ptr + 4 | 0;\n }\n}\n\nmodule.exports = function resize(options) {\n var src = options.src;\n var srcW = options.width;\n var srcH = options.height;\n var destW = options.toWidth;\n var destH = options.toHeight;\n var scaleX = options.scaleX || options.toWidth / options.width;\n var scaleY = options.scaleY || options.toHeight / options.height;\n var offsetX = options.offsetX || 0;\n var offsetY = options.offsetY || 0;\n var dest = options.dest || new Uint8Array(destW * destH * 4);\n var filter = typeof options.filter === 'undefined' ? 'mks2013' : options.filter;\n var filtersX = createFilters(filter, srcW, destW, scaleX, offsetX),\n filtersY = createFilters(filter, srcH, destH, scaleY, offsetY);\n var tmp = new Uint16Array(destW * srcH * 4); // Autodetect if alpha channel exists, and use appropriate method\n\n if (hasAlpha(src, srcW, srcH)) {\n convolveHorWithPre(src, tmp, srcW, srcH, destW, filtersX);\n convolveVertWithPre(tmp, dest, srcH, destW, destH, filtersY);\n } else {\n convolveHor(src, tmp, srcW, srcH, destW, filtersX);\n convolveVert(tmp, dest, srcH, destW, destH, filtersY);\n resetAlpha(dest, destW, destH);\n }\n\n return dest;\n};\n\n},{\"./convolve\":2,\"./resize_filter_gen\":6}],6:[function(_dereq_,module,exports){\n// Calculate convolution filters for each destination point,\n// and pack data to Int16Array:\n//\n// [ shift, length, data..., shift2, length2, data..., ... ]\n//\n// - shift - offset in src image\n// - length - filter length (in src points)\n// - data - filter values sequence\n//\n'use strict';\n\nvar FILTER_INFO = _dereq_('./resize_filter_info'); // Precision of fixed FP values\n\n\nvar FIXED_FRAC_BITS = 14;\n\nfunction toFixedPoint(num) {\n return Math.round(num * ((1 << FIXED_FRAC_BITS) - 1));\n}\n\nmodule.exports = function resizeFilterGen(filter, srcSize, destSize, scale, offset) {\n var filterFunction = FILTER_INFO.filter[filter].fn;\n var scaleInverted = 1.0 / scale;\n var scaleClamped = Math.min(1.0, scale); // For upscale\n // Filter window (averaging interval), scaled to src image\n\n var srcWindow = FILTER_INFO.filter[filter].win / scaleClamped;\n var destPixel, srcPixel, srcFirst, srcLast, filterElementSize, floatFilter, fxpFilter, total, pxl, idx, floatVal, filterTotal, filterVal;\n var leftNotEmpty, rightNotEmpty, filterShift, filterSize;\n var maxFilterElementSize = Math.floor((srcWindow + 1) * 2);\n var packedFilter = new Int16Array((maxFilterElementSize + 2) * destSize);\n var packedFilterPtr = 0;\n var slowCopy = !packedFilter.subarray || !packedFilter.set; // For each destination pixel calculate source range and built filter values\n\n for (destPixel = 0; destPixel < destSize; destPixel++) {\n // Scaling should be done relative to central pixel point\n srcPixel = (destPixel + 0.5) * scaleInverted + offset;\n srcFirst = Math.max(0, Math.floor(srcPixel - srcWindow));\n srcLast = Math.min(srcSize - 1, Math.ceil(srcPixel + srcWindow));\n filterElementSize = srcLast - srcFirst + 1;\n floatFilter = new Float32Array(filterElementSize);\n fxpFilter = new Int16Array(filterElementSize);\n total = 0.0; // Fill filter values for calculated range\n\n for (pxl = srcFirst, idx = 0; pxl <= srcLast; pxl++, idx++) {\n floatVal = filterFunction((pxl + 0.5 - srcPixel) * scaleClamped);\n total += floatVal;\n floatFilter[idx] = floatVal;\n } // Normalize filter, convert to fixed point and accumulate conversion error\n\n\n filterTotal = 0;\n\n for (idx = 0; idx < floatFilter.length; idx++) {\n filterVal = floatFilter[idx] / total;\n filterTotal += filterVal;\n fxpFilter[idx] = toFixedPoint(filterVal);\n } // Compensate normalization error, to minimize brightness drift\n\n\n fxpFilter[destSize >> 1] += toFixedPoint(1.0 - filterTotal); //\n // Now pack filter to useable form\n //\n // 1. Trim heading and tailing zero values, and compensate shitf/length\n // 2. Put all to single array in this format:\n //\n // [ pos shift, data length, value1, value2, value3, ... ]\n //\n\n leftNotEmpty = 0;\n\n while (leftNotEmpty < fxpFilter.length && fxpFilter[leftNotEmpty] === 0) {\n leftNotEmpty++;\n }\n\n if (leftNotEmpty < fxpFilter.length) {\n rightNotEmpty = fxpFilter.length - 1;\n\n while (rightNotEmpty > 0 && fxpFilter[rightNotEmpty] === 0) {\n rightNotEmpty--;\n }\n\n filterShift = srcFirst + leftNotEmpty;\n filterSize = rightNotEmpty - leftNotEmpty + 1;\n packedFilter[packedFilterPtr++] = filterShift; // shift\n\n packedFilter[packedFilterPtr++] = filterSize; // size\n\n if (!slowCopy) {\n packedFilter.set(fxpFilter.subarray(leftNotEmpty, rightNotEmpty + 1), packedFilterPtr);\n packedFilterPtr += filterSize;\n } else {\n // fallback for old IE < 11, without subarray/set methods\n for (idx = leftNotEmpty; idx <= rightNotEmpty; idx++) {\n packedFilter[packedFilterPtr++] = fxpFilter[idx];\n }\n }\n } else {\n // zero data, write header only\n packedFilter[packedFilterPtr++] = 0; // shift\n\n packedFilter[packedFilterPtr++] = 0; // size\n }\n }\n\n return packedFilter;\n};\n\n},{\"./resize_filter_info\":7}],7:[function(_dereq_,module,exports){\n// Filter definitions to build tables for\n// resizing convolvers.\n//\n// Presets for quality 0..3. Filter functions + window size\n//\n'use strict';\n\nvar filter = {\n // Nearest neibor\n box: {\n win: 0.5,\n fn: function fn(x) {\n if (x < 0) x = -x;\n return x < 0.5 ? 1.0 : 0.0;\n }\n },\n // // Hamming\n hamming: {\n win: 1.0,\n fn: function fn(x) {\n if (x < 0) x = -x;\n\n if (x >= 1.0) {\n return 0.0;\n }\n\n if (x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * (0.54 + 0.46 * Math.cos(xpi / 1.0));\n }\n },\n // Lanczos, win = 2\n lanczos2: {\n win: 2.0,\n fn: function fn(x) {\n if (x < 0) x = -x;\n\n if (x >= 2.0) {\n return 0.0;\n }\n\n if (x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * Math.sin(xpi / 2.0) / (xpi / 2.0);\n }\n },\n // Lanczos, win = 3\n lanczos3: {\n win: 3.0,\n fn: function fn(x) {\n if (x < 0) x = -x;\n\n if (x >= 3.0) {\n return 0.0;\n }\n\n if (x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * Math.sin(xpi / 3.0) / (xpi / 3.0);\n }\n },\n // Magic Kernel Sharp 2013, win = 2.5\n // http://johncostella.com/magic/\n mks2013: {\n win: 2.5,\n fn: function fn(x) {\n if (x < 0) x = -x;\n\n if (x >= 2.5) {\n return 0.0;\n }\n\n if (x >= 1.5) {\n return -0.125 * (x - 2.5) * (x - 2.5);\n }\n\n if (x >= 0.5) {\n return 0.25 * (4 * x * x - 11 * x + 7);\n }\n\n return 1.0625 - 1.75 * x * x;\n }\n }\n};\nmodule.exports = {\n filter: filter,\n // Legacy mapping\n f2q: {\n box: 0,\n hamming: 1,\n lanczos2: 2,\n lanczos3: 3\n },\n q2f: ['box', 'hamming', 'lanczos2', 'lanczos3']\n};\n\n},{}],8:[function(_dereq_,module,exports){\n'use strict';\n\nvar createFilters = _dereq_('./resize_filter_gen');\n\nfunction hasAlpha(src, width, height) {\n var ptr = 3,\n len = width * height * 4 | 0;\n\n while (ptr < len) {\n if (src[ptr] !== 255) return true;\n ptr = ptr + 4 | 0;\n }\n\n return false;\n}\n\nfunction resetAlpha(dst, width, height) {\n var ptr = 3,\n len = width * height * 4 | 0;\n\n while (ptr < len) {\n dst[ptr] = 0xFF;\n ptr = ptr + 4 | 0;\n }\n}\n\nfunction asUint8Array(src) {\n return new Uint8Array(src.buffer, 0, src.byteLength);\n}\n\nvar IS_LE = true; // should not crash everything on module load in old browsers\n\ntry {\n IS_LE = new Uint32Array(new Uint8Array([1, 0, 0, 0]).buffer)[0] === 1;\n} catch (__) {}\n\nfunction copyInt16asLE(src, target, target_offset) {\n if (IS_LE) {\n target.set(asUint8Array(src), target_offset);\n return;\n }\n\n for (var ptr = target_offset, i = 0; i < src.length; i++) {\n var data = src[i];\n target[ptr++] = data & 0xFF;\n target[ptr++] = data >> 8 & 0xFF;\n }\n}\n\nmodule.exports = function resize_wasm(options) {\n var src = options.src;\n var srcW = options.width;\n var srcH = options.height;\n var destW = options.toWidth;\n var destH = options.toHeight;\n var scaleX = options.scaleX || options.toWidth / options.width;\n var scaleY = options.scaleY || options.toHeight / options.height;\n var offsetX = options.offsetX || 0.0;\n var offsetY = options.offsetY || 0.0;\n var dest = options.dest || new Uint8Array(destW * destH * 4);\n var filter = typeof options.filter === 'undefined' ? 'mks2013' : options.filter;\n var filtersX = createFilters(filter, srcW, destW, scaleX, offsetX),\n filtersY = createFilters(filter, srcH, destH, scaleY, offsetY); // destination is 0 too.\n\n var src_offset = 0;\n var src_size = Math.max(src.byteLength, dest.byteLength); // buffer between convolve passes\n\n var tmp_offset = this.__align(src_offset + src_size);\n\n var tmp_size = srcH * destW * 4 * 2; // 2 bytes per channel\n\n var filtersX_offset = this.__align(tmp_offset + tmp_size);\n\n var filtersY_offset = this.__align(filtersX_offset + filtersX.byteLength);\n\n var alloc_bytes = filtersY_offset + filtersY.byteLength;\n\n var instance = this.__instance('resize', alloc_bytes); //\n // Fill memory block with data to process\n //\n\n\n var mem = new Uint8Array(this.__memory.buffer);\n var mem32 = new Uint32Array(this.__memory.buffer); // 32-bit copy is much faster in chrome\n\n var src32 = new Uint32Array(src.buffer);\n mem32.set(src32); // We should guarantee LE bytes order. Filters are not big, so\n // speed difference is not significant vs direct .set()\n\n copyInt16asLE(filtersX, mem, filtersX_offset);\n copyInt16asLE(filtersY, mem, filtersY_offset); // Now call webassembly method\n // emsdk does method names with '_'\n\n var fn = instance.exports.convolveHV || instance.exports._convolveHV;\n\n if (hasAlpha(src, srcW, srcH)) {\n fn(filtersX_offset, filtersY_offset, tmp_offset, srcW, srcH, destW, destH, 1);\n } else {\n fn(filtersX_offset, filtersY_offset, tmp_offset, srcW, srcH, destW, destH, 0);\n resetAlpha(dest, destW, destH);\n } //\n // Copy data back to typed array\n //\n // 32-bit copy is much faster in chrome\n\n\n var dest32 = new Uint32Array(dest.buffer);\n dest32.set(new Uint32Array(this.__memory.buffer, 0, destH * destW));\n return dest;\n};\n\n},{\"./resize_filter_gen\":6}],9:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = {\n name: 'unsharp_mask',\n fn: _dereq_('./unsharp_mask'),\n wasm_fn: _dereq_('./unsharp_mask_wasm'),\n wasm_src: _dereq_('./unsharp_mask_wasm_base64')\n};\n\n},{\"./unsharp_mask\":10,\"./unsharp_mask_wasm\":11,\"./unsharp_mask_wasm_base64\":12}],10:[function(_dereq_,module,exports){\n// Unsharp mask filter\n//\n// http://stackoverflow.com/a/23322820/1031804\n// USM(O) = O + (2 * (Amount / 100) * (O - GB))\n// GB - gaussian blur.\n//\n// Image is converted from RGB to HSV, unsharp mask is applied to the\n// brightness channel and then image is converted back to RGB.\n//\n'use strict';\n\nvar glur_mono16 = _dereq_('glur/mono16');\n\nfunction hsv_v16(img, width, height) {\n var size = width * height;\n var out = new Uint16Array(size);\n var r, g, b, max;\n\n for (var i = 0; i < size; i++) {\n r = img[4 * i];\n g = img[4 * i + 1];\n b = img[4 * i + 2];\n max = r >= g && r >= b ? r : g >= b && g >= r ? g : b;\n out[i] = max << 8;\n }\n\n return out;\n}\n\nmodule.exports = function unsharp(img, width, height, amount, radius, threshold) {\n var v1, v2, vmul;\n var diff, iTimes4;\n\n if (amount === 0 || radius < 0.5) {\n return;\n }\n\n if (radius > 2.0) {\n radius = 2.0;\n }\n\n var brightness = hsv_v16(img, width, height);\n var blured = new Uint16Array(brightness); // copy, because blur modify src\n\n glur_mono16(blured, width, height, radius);\n var amountFp = amount / 100 * 0x1000 + 0.5 | 0;\n var thresholdFp = threshold << 8;\n var size = width * height;\n /* eslint-disable indent */\n\n for (var i = 0; i < size; i++) {\n v1 = brightness[i];\n diff = v1 - blured[i];\n\n if (Math.abs(diff) >= thresholdFp) {\n // add unsharp mask to the brightness channel\n v2 = v1 + (amountFp * diff + 0x800 >> 12); // Both v1 and v2 are within [0.0 .. 255.0] (0000-FF00) range, never going into\n // [255.003 .. 255.996] (FF01-FFFF). This allows to round this value as (x+.5)|0\n // later without overflowing.\n\n v2 = v2 > 0xff00 ? 0xff00 : v2;\n v2 = v2 < 0x0000 ? 0x0000 : v2; // Avoid division by 0. V=0 means rgb(0,0,0), unsharp with unsharpAmount>0 cannot\n // change this value (because diff between colors gets inflated), so no need to verify correctness.\n\n v1 = v1 !== 0 ? v1 : 1; // Multiplying V in HSV model by a constant is equivalent to multiplying each component\n // in RGB by the same constant (same for HSL), see also:\n // https://beesbuzz.biz/code/16-hsv-color-transforms\n\n vmul = (v2 << 12) / v1 | 0; // Result will be in [0..255] range because:\n // - all numbers are positive\n // - r,g,b <= (v1/256)\n // - r,g,b,(v1/256),(v2/256) <= 255\n // So highest this number can get is X*255/X+0.5=255.5 which is < 256 and rounds down.\n\n iTimes4 = i * 4;\n img[iTimes4] = img[iTimes4] * vmul + 0x800 >> 12; // R\n\n img[iTimes4 + 1] = img[iTimes4 + 1] * vmul + 0x800 >> 12; // G\n\n img[iTimes4 + 2] = img[iTimes4 + 2] * vmul + 0x800 >> 12; // B\n }\n }\n};\n\n},{\"glur/mono16\":18}],11:[function(_dereq_,module,exports){\n'use strict';\n\nmodule.exports = function unsharp(img, width, height, amount, radius, threshold) {\n if (amount === 0 || radius < 0.5) {\n return;\n }\n\n if (radius > 2.0) {\n radius = 2.0;\n }\n\n var pixels = width * height;\n var img_bytes_cnt = pixels * 4;\n var hsv_bytes_cnt = pixels * 2;\n var blur_bytes_cnt = pixels * 2;\n var blur_line_byte_cnt = Math.max(width, height) * 4; // float32 array\n\n var blur_coeffs_byte_cnt = 8 * 4; // float32 array\n\n var img_offset = 0;\n var hsv_offset = img_bytes_cnt;\n var blur_offset = hsv_offset + hsv_bytes_cnt;\n var blur_tmp_offset = blur_offset + blur_bytes_cnt;\n var blur_line_offset = blur_tmp_offset + blur_bytes_cnt;\n var blur_coeffs_offset = blur_line_offset + blur_line_byte_cnt;\n\n var instance = this.__instance('unsharp_mask', img_bytes_cnt + hsv_bytes_cnt + blur_bytes_cnt * 2 + blur_line_byte_cnt + blur_coeffs_byte_cnt, {\n exp: Math.exp\n }); // 32-bit copy is much faster in chrome\n\n\n var img32 = new Uint32Array(img.buffer);\n var mem32 = new Uint32Array(this.__memory.buffer);\n mem32.set(img32); // HSL\n\n var fn = instance.exports.hsv_v16 || instance.exports._hsv_v16;\n fn(img_offset, hsv_offset, width, height); // BLUR\n\n fn = instance.exports.blurMono16 || instance.exports._blurMono16;\n fn(hsv_offset, blur_offset, blur_tmp_offset, blur_line_offset, blur_coeffs_offset, width, height, radius); // UNSHARP\n\n fn = instance.exports.unsharp || instance.exports._unsharp;\n fn(img_offset, img_offset, hsv_offset, blur_offset, width, height, amount, threshold); // 32-bit copy is much faster in chrome\n\n img32.set(new Uint32Array(this.__memory.buffer, 0, pixels));\n};\n\n},{}],12:[function(_dereq_,module,exports){\n// This is autogenerated file from math.wasm, don't edit.\n//\n'use strict';\n/* eslint-disable max-len */\n\nmodule.exports = 'AGFzbQEAAAAADAZkeWxpbmsAAAAAAAE0B2AAAGAEf39/fwBgBn9/f39/fwBgCH9/f39/f39/AGAIf39/f39/f30AYAJ9fwBgAXwBfAIZAgNlbnYDZXhwAAYDZW52Bm1lbW9yeQIAAAMHBgAFAgQBAwYGAX8AQQALB4oBCBFfX3dhc21fY2FsbF9jdG9ycwABFl9fYnVpbGRfZ2F1c3NpYW5fY29lZnMAAg5fX2dhdXNzMTZfbGluZQADCmJsdXJNb25vMTYABAdoc3ZfdjE2AAUHdW5zaGFycAAGDF9fZHNvX2hhbmRsZQMAGF9fd2FzbV9hcHBseV9kYXRhX3JlbG9jcwABCsUMBgMAAQvWAQEHfCABRNuGukOCGvs/IAC7oyICRAAAAAAAAADAohAAIgW2jDgCFCABIAKaEAAiAyADoCIGtjgCECABRAAAAAAAAPA/IAOhIgQgBKIgAyACIAKgokQAAAAAAADwP6AgBaGjIgS2OAIAIAEgBSAEmqIiB7Y4AgwgASADIAJEAAAAAAAA8D+gIASioiIItjgCCCABIAMgAkQAAAAAAADwv6AgBKKiIgK2OAIEIAEgByAIoCAFRAAAAAAAAPA/IAahoCIDo7Y4AhwgASAEIAKgIAOjtjgCGAuGBQMGfwl8An0gAyoCDCEVIAMqAgghFiADKgIUuyERIAMqAhC7IRACQCAEQQFrIghBAEgiCQRAIAIhByAAIQYMAQsgAiAALwEAuCIPIAMqAhi7oiIMIBGiIg0gDCAQoiAPIAMqAgS7IhOiIhQgAyoCALsiEiAPoqCgoCIOtjgCACACQQRqIQcgAEECaiEGIAhFDQAgCEEBIAhBAUgbIgpBf3MhCwJ/IAQgCmtBAXFFBEAgDiENIAgMAQsgAiANIA4gEKIgFCASIAAvAQK4Ig+ioKCgIg22OAIEIAJBCGohByAAQQRqIQYgDiEMIARBAmsLIQIgC0EAIARrRg0AA0AgByAMIBGiIA0gEKIgDyAToiASIAYvAQC4Ig6ioKCgIgy2OAIAIAcgDSARoiAMIBCiIA4gE6IgEiAGLwECuCIPoqCgoCINtjgCBCAHQQhqIQcgBkEEaiEGIAJBAkohACACQQJrIQIgAA0ACwsCQCAJDQAgASAFIAhsQQF0aiIAAn8gBkECay8BACICuCINIBW7IhKiIA0gFrsiE6KgIA0gAyoCHLuiIgwgEKKgIAwgEaKgIg8gB0EEayIHKgIAu6AiDkQAAAAAAADwQWMgDkQAAAAAAAAAAGZxBEAgDqsMAQtBAAs7AQAgCEUNACAGQQRrIQZBACAFa0EBdCEBA0ACfyANIBKiIAJB//8DcbgiDSAToqAgDyIOIBCioCAMIBGioCIPIAdBBGsiByoCALugIgxEAAAAAAAA8EFjIAxEAAAAAAAAAABmcQRAIAyrDAELQQALIQMgBi8BACECIAAgAWoiACADOwEAIAZBAmshBiAIQQFKIQMgDiEMIAhBAWshCCADDQALCwvRAgIBfwd8AkAgB0MAAAAAWw0AIARE24a6Q4Ia+z8gB0MAAAA/l7ujIglEAAAAAAAAAMCiEAAiDLaMOAIUIAQgCZoQACIKIAqgIg22OAIQIAREAAAAAAAA8D8gCqEiCyALoiAKIAkgCaCiRAAAAAAAAPA/oCAMoaMiC7Y4AgAgBCAMIAuaoiIOtjgCDCAEIAogCUQAAAAAAADwP6AgC6KiIg+2OAIIIAQgCiAJRAAAAAAAAPC/oCALoqIiCbY4AgQgBCAOIA+gIAxEAAAAAAAA8D8gDaGgIgqjtjgCHCAEIAsgCaAgCqO2OAIYIAYEQANAIAAgBSAIbEEBdGogAiAIQQF0aiADIAQgBSAGEAMgCEEBaiIIIAZHDQALCyAFRQ0AQQAhCANAIAIgBiAIbEEBdGogASAIQQF0aiADIAQgBiAFEAMgCEEBaiIIIAVHDQALCwtxAQN/IAIgA2wiBQRAA0AgASAAKAIAIgRBEHZB/wFxIgIgAiAEQQh2Qf8BcSIDIAMgBEH/AXEiBEkbIAIgA0sbIgYgBiAEIAIgBEsbIAMgBEsbQQh0OwEAIAFBAmohASAAQQRqIQAgBUEBayIFDQALCwuZAgIDfwF8IAQgBWwhBAJ/IAazQwAAgEWUQwAAyEKVu0QAAAAAAADgP6AiC5lEAAAAAAAA4EFjBEAgC6oMAQtBgICAgHgLIQUgBARAIAdBCHQhCUEAIQYDQCAJIAIgBkEBdCIHai8BACIBIAMgB2ovAQBrIgcgB0EfdSIIaiAIc00EQCAAIAZBAnQiCGoiCiAFIAdsQYAQakEMdSABaiIHQYD+AyAHQYD+A0gbIgdBACAHQQBKG0EMdCABQQEgARtuIgEgCi0AAGxBgBBqQQx2OgAAIAAgCEEBcmoiByABIActAABsQYAQakEMdjoAACAAIAhBAnJqIgcgASAHLQAAbEGAEGpBDHY6AAALIAZBAWoiBiAERw0ACwsL';\n\n},{}],13:[function(_dereq_,module,exports){\n'use strict';\n\nvar GC_INTERVAL = 100;\n\nfunction Pool(create, idle) {\n this.create = create;\n this.available = [];\n this.acquired = {};\n this.lastId = 1;\n this.timeoutId = 0;\n this.idle = idle || 2000;\n}\n\nPool.prototype.acquire = function () {\n var _this = this;\n\n var resource;\n\n if (this.available.length !== 0) {\n resource = this.available.pop();\n } else {\n resource = this.create();\n resource.id = this.lastId++;\n\n resource.release = function () {\n return _this.release(resource);\n };\n }\n\n this.acquired[resource.id] = resource;\n return resource;\n};\n\nPool.prototype.release = function (resource) {\n var _this2 = this;\n\n delete this.acquired[resource.id];\n resource.lastUsed = Date.now();\n this.available.push(resource);\n\n if (this.timeoutId === 0) {\n this.timeoutId = setTimeout(function () {\n return _this2.gc();\n }, GC_INTERVAL);\n }\n};\n\nPool.prototype.gc = function () {\n var _this3 = this;\n\n var now = Date.now();\n this.available = this.available.filter(function (resource) {\n if (now - resource.lastUsed > _this3.idle) {\n resource.destroy();\n return false;\n }\n\n return true;\n });\n\n if (this.available.length !== 0) {\n this.timeoutId = setTimeout(function () {\n return _this3.gc();\n }, GC_INTERVAL);\n } else {\n this.timeoutId = 0;\n }\n};\n\nmodule.exports = Pool;\n\n},{}],14:[function(_dereq_,module,exports){\n// Add intermediate resizing steps when scaling down by a very large factor.\n//\n// For example, when resizing 10000x10000 down to 10x10, it'll resize it to\n// 300x300 first.\n//\n// It's needed because tiler has issues when the entire tile is scaled down\n// to a few pixels (1024px source tile with border size 3 should result in\n// at least 3+3+2 = 8px target tile, so max scale factor is 128 here).\n//\n// Also, adding intermediate steps can speed up processing if we use lower\n// quality algorithms for first stages.\n//\n'use strict'; // min size = 0 results in infinite loop,\n// min size = 1 can consume large amount of memory\n\nvar MIN_INNER_TILE_SIZE = 2;\n\nmodule.exports = function createStages(fromWidth, fromHeight, toWidth, toHeight, srcTileSize, destTileBorder) {\n var scaleX = toWidth / fromWidth;\n var scaleY = toHeight / fromHeight; // derived from createRegions equation:\n // innerTileWidth = pixelFloor(srcTileSize * scaleX) - 2 * destTileBorder;\n\n var minScale = (2 * destTileBorder + MIN_INNER_TILE_SIZE + 1) / srcTileSize; // refuse to scale image multiple times by less than twice each time,\n // it could only happen because of invalid options\n\n if (minScale > 0.5) return [[toWidth, toHeight]];\n var stageCount = Math.ceil(Math.log(Math.min(scaleX, scaleY)) / Math.log(minScale)); // no additional resizes are necessary,\n // stageCount can be zero or be negative when enlarging the image\n\n if (stageCount <= 1) return [[toWidth, toHeight]];\n var result = [];\n\n for (var i = 0; i < stageCount; i++) {\n var width = Math.round(Math.pow(Math.pow(fromWidth, stageCount - i - 1) * Math.pow(toWidth, i + 1), 1 / stageCount));\n var height = Math.round(Math.pow(Math.pow(fromHeight, stageCount - i - 1) * Math.pow(toHeight, i + 1), 1 / stageCount));\n result.push([width, height]);\n }\n\n return result;\n};\n\n},{}],15:[function(_dereq_,module,exports){\n// Split original image into multiple 1024x1024 chunks to reduce memory usage\n// (images have to be unpacked into typed arrays for resizing) and allow\n// parallel processing of multiple tiles at a time.\n//\n'use strict';\n/*\n * pixelFloor and pixelCeil are modified versions of Math.floor and Math.ceil\n * functions which take into account floating point arithmetic errors.\n * Those errors can cause undesired increments/decrements of sizes and offsets:\n * Math.ceil(36 / (36 / 500)) = 501\n * pixelCeil(36 / (36 / 500)) = 500\n */\n\nvar PIXEL_EPSILON = 1e-5;\n\nfunction pixelFloor(x) {\n var nearest = Math.round(x);\n\n if (Math.abs(x - nearest) < PIXEL_EPSILON) {\n return nearest;\n }\n\n return Math.floor(x);\n}\n\nfunction pixelCeil(x) {\n var nearest = Math.round(x);\n\n if (Math.abs(x - nearest) < PIXEL_EPSILON) {\n return nearest;\n }\n\n return Math.ceil(x);\n}\n\nmodule.exports = function createRegions(options) {\n var scaleX = options.toWidth / options.width;\n var scaleY = options.toHeight / options.height;\n var innerTileWidth = pixelFloor(options.srcTileSize * scaleX) - 2 * options.destTileBorder;\n var innerTileHeight = pixelFloor(options.srcTileSize * scaleY) - 2 * options.destTileBorder; // prevent infinite loop, this should never happen\n\n if (innerTileWidth < 1 || innerTileHeight < 1) {\n throw new Error('Internal error in pica: target tile width/height is too small.');\n }\n\n var x, y;\n var innerX, innerY, toTileWidth, toTileHeight;\n var tiles = [];\n var tile; // we go top-to-down instead of left-to-right to make image displayed from top to\n // doesn in the browser\n\n for (innerY = 0; innerY < options.toHeight; innerY += innerTileHeight) {\n for (innerX = 0; innerX < options.toWidth; innerX += innerTileWidth) {\n x = innerX - options.destTileBorder;\n\n if (x < 0) {\n x = 0;\n }\n\n toTileWidth = innerX + innerTileWidth + options.destTileBorder - x;\n\n if (x + toTileWidth >= options.toWidth) {\n toTileWidth = options.toWidth - x;\n }\n\n y = innerY - options.destTileBorder;\n\n if (y < 0) {\n y = 0;\n }\n\n toTileHeight = innerY + innerTileHeight + options.destTileBorder - y;\n\n if (y + toTileHeight >= options.toHeight) {\n toTileHeight = options.toHeight - y;\n }\n\n tile = {\n toX: x,\n toY: y,\n toWidth: toTileWidth,\n toHeight: toTileHeight,\n toInnerX: innerX,\n toInnerY: innerY,\n toInnerWidth: innerTileWidth,\n toInnerHeight: innerTileHeight,\n offsetX: x / scaleX - pixelFloor(x / scaleX),\n offsetY: y / scaleY - pixelFloor(y / scaleY),\n scaleX: scaleX,\n scaleY: scaleY,\n x: pixelFloor(x / scaleX),\n y: pixelFloor(y / scaleY),\n width: pixelCeil(toTileWidth / scaleX),\n height: pixelCeil(toTileHeight / scaleY)\n };\n tiles.push(tile);\n }\n }\n\n return tiles;\n};\n\n},{}],16:[function(_dereq_,module,exports){\n'use strict';\n\nfunction objClass(obj) {\n return Object.prototype.toString.call(obj);\n}\n\nmodule.exports.isCanvas = function isCanvas(element) {\n var cname = objClass(element);\n return cname === '[object HTMLCanvasElement]'\n /* browser */\n || cname === '[object OffscreenCanvas]' || cname === '[object Canvas]'\n /* node-canvas */\n ;\n};\n\nmodule.exports.isImage = function isImage(element) {\n return objClass(element) === '[object HTMLImageElement]';\n};\n\nmodule.exports.isImageBitmap = function isImageBitmap(element) {\n return objClass(element) === '[object ImageBitmap]';\n};\n\nmodule.exports.limiter = function limiter(concurrency) {\n var active = 0,\n queue = [];\n\n function roll() {\n if (active < concurrency && queue.length) {\n active++;\n queue.shift()();\n }\n }\n\n return function limit(fn) {\n return new Promise(function (resolve, reject) {\n queue.push(function () {\n fn().then(function (result) {\n resolve(result);\n active--;\n roll();\n }, function (err) {\n reject(err);\n active--;\n roll();\n });\n });\n roll();\n });\n };\n};\n\nmodule.exports.cib_quality_name = function cib_quality_name(num) {\n switch (num) {\n case 0:\n return 'pixelated';\n\n case 1:\n return 'low';\n\n case 2:\n return 'medium';\n }\n\n return 'high';\n};\n\nmodule.exports.cib_support = function cib_support(createCanvas) {\n return Promise.resolve().then(function () {\n if (typeof createImageBitmap === 'undefined') {\n return false;\n }\n\n var c = createCanvas(100, 100);\n return createImageBitmap(c, 0, 0, 100, 100, {\n resizeWidth: 10,\n resizeHeight: 10,\n resizeQuality: 'high'\n }).then(function (bitmap) {\n var status = bitmap.width === 10; // Branch below is filtered on upper level. We do not call resize\n // detection for basic ImageBitmap.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap\n // old Crome 51 has ImageBitmap without .close(). Then this code\n // will throw and return 'false' as expected.\n //\n\n bitmap.close();\n c = null;\n return status;\n });\n })[\"catch\"](function () {\n return false;\n });\n};\n\nmodule.exports.worker_offscreen_canvas_support = function worker_offscreen_canvas_support() {\n return new Promise(function (resolve, reject) {\n if (typeof OffscreenCanvas === 'undefined') {\n // if OffscreenCanvas is present, we assume browser supports Worker and built-in Promise as well\n resolve(false);\n return;\n }\n\n function workerPayload(self) {\n if (typeof createImageBitmap === 'undefined') {\n self.postMessage(false);\n return;\n }\n\n Promise.resolve().then(function () {\n var canvas = new OffscreenCanvas(10, 10); // test that 2d context can be used in worker\n\n var ctx = canvas.getContext('2d');\n ctx.rect(0, 0, 1, 1); // test that cib can be used to return image bitmap from worker\n\n return createImageBitmap(canvas, 0, 0, 1, 1);\n }).then(function () {\n return self.postMessage(true);\n }, function () {\n return self.postMessage(false);\n });\n }\n\n var code = btoa(\"(\".concat(workerPayload.toString(), \")(self);\"));\n var w = new Worker(\"data:text/javascript;base64,\".concat(code));\n\n w.onmessage = function (ev) {\n return resolve(ev.data);\n };\n\n w.onerror = reject;\n }).then(function (result) {\n return result;\n }, function () {\n return false;\n });\n}; // Check if canvas.getContext('2d').getImageData can be used,\n// FireFox randomizes the output of that function in `privacy.resistFingerprinting` mode\n\n\nmodule.exports.can_use_canvas = function can_use_canvas(createCanvas) {\n var usable = false;\n\n try {\n var canvas = createCanvas(2, 1);\n var ctx = canvas.getContext('2d');\n var d = ctx.createImageData(2, 1);\n d.data[0] = 12;\n d.data[1] = 23;\n d.data[2] = 34;\n d.data[3] = 255;\n d.data[4] = 45;\n d.data[5] = 56;\n d.data[6] = 67;\n d.data[7] = 255;\n ctx.putImageData(d, 0, 0);\n d = null;\n d = ctx.getImageData(0, 0, 2, 1);\n\n if (d.data[0] === 12 && d.data[1] === 23 && d.data[2] === 34 && d.data[3] === 255 && d.data[4] === 45 && d.data[5] === 56 && d.data[6] === 67 && d.data[7] === 255) {\n usable = true;\n }\n } catch (err) {}\n\n return usable;\n}; // Check if createImageBitmap(img, sx, sy, sw, sh) signature works correctly\n// with JPEG images oriented with Exif;\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n// TODO: remove after it's fixed in chrome for at least 2 releases\n\n\nmodule.exports.cib_can_use_region = function cib_can_use_region() {\n return new Promise(function (resolve) {\n // `Image` check required for use in `ServiceWorker`\n if (typeof Image === 'undefined' || typeof createImageBitmap === 'undefined') {\n resolve(false);\n return;\n }\n\n var image = new Image();\n image.src = 'data:image/jpeg;base64,' + '/9j/4QBiRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAYAAAEaAAUAAAABAAAASgEbAAUAA' + 'AABAAAAUgEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAAAAABIAAAAAQAAAEgAAAAB/9' + 'sAQwAEAwMEAwMEBAMEBQQEBQYKBwYGBgYNCQoICg8NEBAPDQ8OERMYFBESFxIODxUcFRc' + 'ZGRsbGxAUHR8dGh8YGhsa/9sAQwEEBQUGBQYMBwcMGhEPERoaGhoaGhoaGhoaGhoaGhoa' + 'GhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoa/8IAEQgAAQACAwERAAIRAQMRA' + 'f/EABQAAQAAAAAAAAAAAAAAAAAAAAf/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAA' + 'IQAxAAAAF/P//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAQUCf//EABQRAQAAAAA' + 'AAAAAAAAAAAAAAAD/2gAIAQMBAT8Bf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIB' + 'AT8Bf//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEABj8Cf//EABQQAQAAAAAAAAAAA' + 'AAAAAAAAAD/2gAIAQEAAT8hf//aAAwDAQACAAMAAAAQH//EABQRAQAAAAAAAAAAAAAAAA' + 'AAAAD/2gAIAQMBAT8Qf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIBAT8Qf//EABQ' + 'QAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAT8Qf//Z';\n\n image.onload = function () {\n createImageBitmap(image, 0, 0, image.width, image.height).then(function (bitmap) {\n if (bitmap.width === image.width && bitmap.height === image.height) {\n resolve(true);\n } else {\n resolve(false);\n }\n }, function () {\n return resolve(false);\n });\n };\n\n image.onerror = function () {\n return resolve(false);\n };\n });\n};\n\n},{}],17:[function(_dereq_,module,exports){\n// Web Worker wrapper for image resize function\n'use strict';\n\nmodule.exports = function () {\n var MathLib = _dereq_('./mathlib');\n\n var mathLib;\n /* eslint-disable no-undef */\n\n onmessage = function onmessage(ev) {\n var tileOpts = ev.data.opts;\n var returnBitmap = false;\n\n if (!tileOpts.src && tileOpts.srcBitmap) {\n var canvas = new OffscreenCanvas(tileOpts.width, tileOpts.height);\n var ctx = canvas.getContext('2d');\n ctx.drawImage(tileOpts.srcBitmap, 0, 0);\n tileOpts.src = ctx.getImageData(0, 0, tileOpts.width, tileOpts.height).data;\n canvas.width = canvas.height = 0;\n canvas = null;\n tileOpts.srcBitmap.close();\n tileOpts.srcBitmap = null; // Temporary force out data to typed array, because Chrome have artefacts\n // https://github.com/nodeca/pica/issues/223\n // returnBitmap = true;\n }\n\n if (!mathLib) mathLib = new MathLib(ev.data.features); // Use multimath's sync auto-init. Avoid Promise use in old browsers,\n // because polyfills are not propagated to webworker.\n\n var data = mathLib.resizeAndUnsharp(tileOpts);\n\n if (returnBitmap) {\n var toImageData = new ImageData(new Uint8ClampedArray(data), tileOpts.toWidth, tileOpts.toHeight);\n\n var _canvas = new OffscreenCanvas(tileOpts.toWidth, tileOpts.toHeight);\n\n var _ctx = _canvas.getContext('2d');\n\n _ctx.putImageData(toImageData, 0, 0);\n\n createImageBitmap(_canvas).then(function (bitmap) {\n postMessage({\n bitmap: bitmap\n }, [bitmap]);\n });\n } else {\n postMessage({\n data: data\n }, [data.buffer]);\n }\n };\n};\n\n},{\"./mathlib\":1}],18:[function(_dereq_,module,exports){\n// Calculate Gaussian blur of an image using IIR filter\n// The method is taken from Intel's white paper and code example attached to it:\n// https://software.intel.com/en-us/articles/iir-gaussian-blur-filter\n// -implementation-using-intel-advanced-vector-extensions\n\nvar a0, a1, a2, a3, b1, b2, left_corner, right_corner;\n\nfunction gaussCoef(sigma) {\n if (sigma < 0.5) {\n sigma = 0.5;\n }\n\n var a = Math.exp(0.726 * 0.726) / sigma,\n g1 = Math.exp(-a),\n g2 = Math.exp(-2 * a),\n k = (1 - g1) * (1 - g1) / (1 + 2 * a * g1 - g2);\n\n a0 = k;\n a1 = k * (a - 1) * g1;\n a2 = k * (a + 1) * g1;\n a3 = -k * g2;\n b1 = 2 * g1;\n b2 = -g2;\n left_corner = (a0 + a1) / (1 - b1 - b2);\n right_corner = (a2 + a3) / (1 - b1 - b2);\n\n // Attempt to force type to FP32.\n return new Float32Array([ a0, a1, a2, a3, b1, b2, left_corner, right_corner ]);\n}\n\nfunction convolveMono16(src, out, line, coeff, width, height) {\n // takes src image and writes the blurred and transposed result into out\n\n var prev_src, curr_src, curr_out, prev_out, prev_prev_out;\n var src_index, out_index, line_index;\n var i, j;\n var coeff_a0, coeff_a1, coeff_b1, coeff_b2;\n\n for (i = 0; i < height; i++) {\n src_index = i * width;\n out_index = i;\n line_index = 0;\n\n // left to right\n prev_src = src[src_index];\n prev_prev_out = prev_src * coeff[6];\n prev_out = prev_prev_out;\n\n coeff_a0 = coeff[0];\n coeff_a1 = coeff[1];\n coeff_b1 = coeff[4];\n coeff_b2 = coeff[5];\n\n for (j = 0; j < width; j++) {\n curr_src = src[src_index];\n\n curr_out = curr_src * coeff_a0 +\n prev_src * coeff_a1 +\n prev_out * coeff_b1 +\n prev_prev_out * coeff_b2;\n\n prev_prev_out = prev_out;\n prev_out = curr_out;\n prev_src = curr_src;\n\n line[line_index] = prev_out;\n line_index++;\n src_index++;\n }\n\n src_index--;\n line_index--;\n out_index += height * (width - 1);\n\n // right to left\n prev_src = src[src_index];\n prev_prev_out = prev_src * coeff[7];\n prev_out = prev_prev_out;\n curr_src = prev_src;\n\n coeff_a0 = coeff[2];\n coeff_a1 = coeff[3];\n\n for (j = width - 1; j >= 0; j--) {\n curr_out = curr_src * coeff_a0 +\n prev_src * coeff_a1 +\n prev_out * coeff_b1 +\n prev_prev_out * coeff_b2;\n\n prev_prev_out = prev_out;\n prev_out = curr_out;\n\n prev_src = curr_src;\n curr_src = src[src_index];\n\n out[out_index] = line[line_index] + prev_out;\n\n src_index--;\n line_index--;\n out_index -= height;\n }\n }\n}\n\n\nfunction blurMono16(src, width, height, radius) {\n // Quick exit on zero radius\n if (!radius) { return; }\n\n var out = new Uint16Array(src.length),\n tmp_line = new Float32Array(Math.max(width, height));\n\n var coeff = gaussCoef(radius);\n\n convolveMono16(src, out, tmp_line, coeff, width, height, radius);\n convolveMono16(out, src, tmp_line, coeff, height, width, radius);\n}\n\nmodule.exports = blurMono16;\n\n},{}],19:[function(_dereq_,module,exports){\n'use strict';\n\n\nvar assign = _dereq_('object-assign');\nvar base64decode = _dereq_('./lib/base64decode');\nvar hasWebAssembly = _dereq_('./lib/wa_detect');\n\n\nvar DEFAULT_OPTIONS = {\n js: true,\n wasm: true\n};\n\n\nfunction MultiMath(options) {\n if (!(this instanceof MultiMath)) return new MultiMath(options);\n\n var opts = assign({}, DEFAULT_OPTIONS, options || {});\n\n this.options = opts;\n\n this.__cache = {};\n\n this.__init_promise = null;\n this.__modules = opts.modules || {};\n this.__memory = null;\n this.__wasm = {};\n\n this.__isLE = ((new Uint32Array((new Uint8Array([ 1, 0, 0, 0 ])).buffer))[0] === 1);\n\n if (!this.options.js && !this.options.wasm) {\n throw new Error('mathlib: at least \"js\" or \"wasm\" should be enabled');\n }\n}\n\n\nMultiMath.prototype.has_wasm = hasWebAssembly;\n\n\nMultiMath.prototype.use = function (module) {\n this.__modules[module.name] = module;\n\n // Pin the best possible implementation\n if (this.options.wasm && this.has_wasm() && module.wasm_fn) {\n this[module.name] = module.wasm_fn;\n } else {\n this[module.name] = module.fn;\n }\n\n return this;\n};\n\n\nMultiMath.prototype.init = function () {\n if (this.__init_promise) return this.__init_promise;\n\n if (!this.options.js && this.options.wasm && !this.has_wasm()) {\n return Promise.reject(new Error('mathlib: only \"wasm\" was enabled, but it\\'s not supported'));\n }\n\n var self = this;\n\n this.__init_promise = Promise.all(Object.keys(self.__modules).map(function (name) {\n var module = self.__modules[name];\n\n if (!self.options.wasm || !self.has_wasm() || !module.wasm_fn) return null;\n\n // If already compiled - exit\n if (self.__wasm[name]) return null;\n\n // Compile wasm source\n return WebAssembly.compile(self.__base64decode(module.wasm_src))\n .then(function (m) { self.__wasm[name] = m; });\n }))\n .then(function () { return self; });\n\n return this.__init_promise;\n};\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Methods below are for internal use from plugins\n\n\n// Simple decode base64 to typed array. Useful to load embedded webassembly\n// code. You probably don't need to call this method directly.\n//\nMultiMath.prototype.__base64decode = base64decode;\n\n\n// Increase current memory to include specified number of bytes. Do nothing if\n// size is already ok. You probably don't need to call this method directly,\n// because it will be invoked from `.__instance()`.\n//\nMultiMath.prototype.__reallocate = function mem_grow_to(bytes) {\n if (!this.__memory) {\n this.__memory = new WebAssembly.Memory({\n initial: Math.ceil(bytes / (64 * 1024))\n });\n return this.__memory;\n }\n\n var mem_size = this.__memory.buffer.byteLength;\n\n if (mem_size < bytes) {\n this.__memory.grow(Math.ceil((bytes - mem_size) / (64 * 1024)));\n }\n\n return this.__memory;\n};\n\n\n// Returns instantinated webassembly item by name, with specified memory size\n// and environment.\n// - use cache if available\n// - do sync module init, if async init was not called earlier\n// - allocate memory if not enougth\n// - can export functions to webassembly via \"env_extra\",\n// for example, { exp: Math.exp }\n//\nMultiMath.prototype.__instance = function instance(name, memsize, env_extra) {\n if (memsize) this.__reallocate(memsize);\n\n // If .init() was not called, do sync compile\n if (!this.__wasm[name]) {\n var module = this.__modules[name];\n this.__wasm[name] = new WebAssembly.Module(this.__base64decode(module.wasm_src));\n }\n\n if (!this.__cache[name]) {\n var env_base = {\n memoryBase: 0,\n memory: this.__memory,\n tableBase: 0,\n table: new WebAssembly.Table({ initial: 0, element: 'anyfunc' })\n };\n\n this.__cache[name] = new WebAssembly.Instance(this.__wasm[name], {\n env: assign(env_base, env_extra || {})\n });\n }\n\n return this.__cache[name];\n};\n\n\n// Helper to calculate memory aligh for pointers. Webassembly does not require\n// this, but you may wish to experiment. Default base = 8;\n//\nMultiMath.prototype.__align = function align(number, base) {\n base = base || 8;\n var reminder = number % base;\n return number + (reminder ? base - reminder : 0);\n};\n\n\nmodule.exports = MultiMath;\n\n},{\"./lib/base64decode\":20,\"./lib/wa_detect\":21,\"object-assign\":22}],20:[function(_dereq_,module,exports){\n// base64 decode str -> Uint8Array, to load WA modules\n//\n'use strict';\n\n\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n\nmodule.exports = function base64decode(str) {\n var input = str.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length;\n\n var out = new Uint8Array((max * 3) >> 2);\n\n // Collect by 6*4 bits (3 bytes)\n\n var bits = 0;\n var ptr = 0;\n\n for (var idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n out[ptr++] = (bits >> 16) & 0xFF;\n out[ptr++] = (bits >> 8) & 0xFF;\n out[ptr++] = bits & 0xFF;\n }\n\n bits = (bits << 6) | BASE64_MAP.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n var tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n out[ptr++] = (bits >> 16) & 0xFF;\n out[ptr++] = (bits >> 8) & 0xFF;\n out[ptr++] = bits & 0xFF;\n } else if (tailbits === 18) {\n out[ptr++] = (bits >> 10) & 0xFF;\n out[ptr++] = (bits >> 2) & 0xFF;\n } else if (tailbits === 12) {\n out[ptr++] = (bits >> 4) & 0xFF;\n }\n\n return out;\n};\n\n},{}],21:[function(_dereq_,module,exports){\n// Detect WebAssembly support.\n// - Check global WebAssembly object\n// - Try to load simple module (can be disabled via CSP)\n//\n'use strict';\n\n\nvar wa;\n\n\nmodule.exports = function hasWebAssembly() {\n // use cache if called before;\n if (typeof wa !== 'undefined') return wa;\n\n wa = false;\n\n if (typeof WebAssembly === 'undefined') return wa;\n\n // If WebAssenbly is disabled, code can throw on compile\n try {\n // https://github.com/brion/min-wasm-fail/blob/master/min-wasm-fail.in.js\n // Additional check that WA internals are correct\n\n /* eslint-disable comma-spacing, max-len */\n var bin = new Uint8Array([ 0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11 ]);\n var module = new WebAssembly.Module(bin);\n var instance = new WebAssembly.Instance(module, {});\n\n // test storing to and loading from a non-zero location via a parameter.\n // Safari on iOS 11.2.5 returns 0 unexpectedly at non-zero locations\n if (instance.exports.test(4) !== 0) wa = true;\n\n return wa;\n } catch (__) {}\n\n return wa;\n};\n\n},{}],22:[function(_dereq_,module,exports){\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n},{}],23:[function(_dereq_,module,exports){\nvar bundleFn = arguments[3];\nvar sources = arguments[4];\nvar cache = arguments[5];\n\nvar stringify = JSON.stringify;\n\nmodule.exports = function (fn, options) {\n var wkey;\n var cacheKeys = Object.keys(cache);\n\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n var exp = cache[key].exports;\n // Using babel as a transpiler to use esmodule, the export will always\n // be an object with the default export as a property of it. To ensure\n // the existing api and babel esmodule exports are both supported we\n // check for both\n if (exp === fn || exp && exp.default === fn) {\n wkey = key;\n break;\n }\n }\n\n if (!wkey) {\n wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n var wcache = {};\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n wcache[key] = key;\n }\n sources[wkey] = [\n 'function(require,module,exports){' + fn + '(self); }',\n wcache\n ];\n }\n var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n\n var scache = {}; scache[wkey] = wkey;\n sources[skey] = [\n 'function(require,module,exports){' +\n // try to call default if defined to also support babel esmodule exports\n 'var f = require(' + stringify(wkey) + ');' +\n '(f.default ? f.default : f)(self);' +\n '}',\n scache\n ];\n\n var workerSources = {};\n resolveSources(skey);\n\n function resolveSources(key) {\n workerSources[key] = true;\n\n for (var depPath in sources[key][1]) {\n var depKey = sources[key][1][depPath];\n if (!workerSources[depKey]) {\n resolveSources(depKey);\n }\n }\n }\n\n var src = '(' + bundleFn + ')({'\n + Object.keys(workerSources).map(function (key) {\n return stringify(key) + ':['\n + sources[key][0]\n + ',' + stringify(sources[key][1]) + ']'\n ;\n }).join(',')\n + '},{},[' + stringify(skey) + '])'\n ;\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n var blob = new Blob([src], { type: 'text/javascript' });\n if (options && options.bare) { return blob; }\n var workerUrl = URL.createObjectURL(blob);\n var worker = new Worker(workerUrl);\n worker.objectURL = workerUrl;\n return worker;\n};\n\n},{}],\"/index.js\":[function(_dereq_,module,exports){\n'use strict';\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nvar assign = _dereq_('object-assign');\n\nvar webworkify = _dereq_('webworkify');\n\nvar MathLib = _dereq_('./lib/mathlib');\n\nvar Pool = _dereq_('./lib/pool');\n\nvar utils = _dereq_('./lib/utils');\n\nvar worker = _dereq_('./lib/worker');\n\nvar createStages = _dereq_('./lib/stepper');\n\nvar createRegions = _dereq_('./lib/tiler');\n\nvar filter_info = _dereq_('./lib/mm_resize/resize_filter_info'); // Deduplicate pools & limiters with the same configs\n// when user creates multiple pica instances.\n\n\nvar singletones = {};\nvar NEED_SAFARI_FIX = false;\n\ntry {\n if (typeof navigator !== 'undefined' && navigator.userAgent) {\n NEED_SAFARI_FIX = navigator.userAgent.indexOf('Safari') >= 0;\n }\n} catch (e) {}\n\nvar concurrency = 1;\n\nif (typeof navigator !== 'undefined') {\n concurrency = Math.min(navigator.hardwareConcurrency || 1, 4);\n}\n\nvar DEFAULT_PICA_OPTS = {\n tile: 1024,\n concurrency: concurrency,\n features: ['js', 'wasm', 'ww'],\n idle: 2000,\n createCanvas: function createCanvas(width, height) {\n var tmpCanvas = document.createElement('canvas');\n tmpCanvas.width = width;\n tmpCanvas.height = height;\n return tmpCanvas;\n }\n};\nvar DEFAULT_RESIZE_OPTS = {\n filter: 'mks2013',\n unsharpAmount: 0,\n unsharpRadius: 0.0,\n unsharpThreshold: 0\n};\nvar CAN_NEW_IMAGE_DATA = false;\nvar CAN_CREATE_IMAGE_BITMAP = false;\nvar CAN_USE_CANVAS_GET_IMAGE_DATA = false;\nvar CAN_USE_OFFSCREEN_CANVAS = false;\nvar CAN_USE_CIB_REGION_FOR_IMAGE = false;\n\nfunction workerFabric() {\n return {\n value: webworkify(worker),\n destroy: function destroy() {\n this.value.terminate();\n\n if (typeof window !== 'undefined') {\n var url = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n if (url && url.revokeObjectURL && this.value.objectURL) {\n url.revokeObjectURL(this.value.objectURL);\n }\n }\n }\n };\n} ////////////////////////////////////////////////////////////////////////////////\n// API methods\n\n\nfunction Pica(options) {\n if (!(this instanceof Pica)) return new Pica(options);\n this.options = assign({}, DEFAULT_PICA_OPTS, options || {});\n var limiter_key = \"lk_\".concat(this.options.concurrency); // Share limiters to avoid multiple parallel workers when user creates\n // multiple pica instances.\n\n this.__limit = singletones[limiter_key] || utils.limiter(this.options.concurrency);\n if (!singletones[limiter_key]) singletones[limiter_key] = this.__limit; // List of supported features, according to options & browser/node.js\n\n this.features = {\n js: false,\n // pure JS implementation, can be disabled for testing\n wasm: false,\n // webassembly implementation for heavy functions\n cib: false,\n // resize via createImageBitmap (only FF at this moment)\n ww: false // webworkers\n\n };\n this.__workersPool = null; // Store requested features for webworkers\n\n this.__requested_features = [];\n this.__mathlib = null;\n}\n\nPica.prototype.init = function () {\n var _this = this;\n\n if (this.__initPromise) return this.__initPromise; // Test if we can create ImageData without canvas and memory copy\n\n if (typeof ImageData !== 'undefined' && typeof Uint8ClampedArray !== 'undefined') {\n try {\n /* eslint-disable no-new */\n new ImageData(new Uint8ClampedArray(400), 10, 10);\n CAN_NEW_IMAGE_DATA = true;\n } catch (__) {}\n } // ImageBitmap can be effective in 2 places:\n //\n // 1. Threaded jpeg unpack (basic)\n // 2. Built-in resize (blocked due problem in chrome, see issue #89)\n //\n // For basic use we also need ImageBitmap wo support .close() method,\n // see https://developer.mozilla.org/ru/docs/Web/API/ImageBitmap\n\n\n if (typeof ImageBitmap !== 'undefined') {\n if (ImageBitmap.prototype && ImageBitmap.prototype.close) {\n CAN_CREATE_IMAGE_BITMAP = true;\n } else {\n this.debug('ImageBitmap does not support .close(), disabled');\n }\n }\n\n var features = this.options.features.slice();\n\n if (features.indexOf('all') >= 0) {\n features = ['cib', 'wasm', 'js', 'ww'];\n }\n\n this.__requested_features = features;\n this.__mathlib = new MathLib(features); // Check WebWorker support if requested\n\n if (features.indexOf('ww') >= 0) {\n if (typeof window !== 'undefined' && 'Worker' in window) {\n // IE <= 11 don't allow to create webworkers from string. We should check it.\n // https://connect.microsoft.com/IE/feedback/details/801810/web-workers-from-blob-urls-in-ie-10-and-11\n try {\n var wkr = _dereq_('webworkify')(function () {});\n\n wkr.terminate();\n this.features.ww = true; // pool uniqueness depends on pool config + webworker config\n\n var wpool_key = \"wp_\".concat(JSON.stringify(this.options));\n\n if (singletones[wpool_key]) {\n this.__workersPool = singletones[wpool_key];\n } else {\n this.__workersPool = new Pool(workerFabric, this.options.idle);\n singletones[wpool_key] = this.__workersPool;\n }\n } catch (__) {}\n }\n }\n\n var initMath = this.__mathlib.init().then(function (mathlib) {\n // Copy detected features\n assign(_this.features, mathlib.features);\n });\n\n var checkCibResize;\n\n if (!CAN_CREATE_IMAGE_BITMAP) {\n checkCibResize = Promise.resolve(false);\n } else {\n checkCibResize = utils.cib_support(this.options.createCanvas).then(function (status) {\n if (_this.features.cib && features.indexOf('cib') < 0) {\n _this.debug('createImageBitmap() resize supported, but disabled by config');\n\n return;\n }\n\n if (features.indexOf('cib') >= 0) _this.features.cib = status;\n });\n }\n\n CAN_USE_CANVAS_GET_IMAGE_DATA = utils.can_use_canvas(this.options.createCanvas);\n var checkOffscreenCanvas;\n\n if (CAN_CREATE_IMAGE_BITMAP && CAN_NEW_IMAGE_DATA && features.indexOf('ww') !== -1) {\n checkOffscreenCanvas = utils.worker_offscreen_canvas_support();\n } else {\n checkOffscreenCanvas = Promise.resolve(false);\n }\n\n checkOffscreenCanvas = checkOffscreenCanvas.then(function (result) {\n CAN_USE_OFFSCREEN_CANVAS = result;\n }); // we use createImageBitmap to crop image data and pass it to workers,\n // so need to check whether function works correctly;\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n\n var checkCibRegion = utils.cib_can_use_region().then(function (result) {\n CAN_USE_CIB_REGION_FOR_IMAGE = result;\n }); // Init math lib. That's async because can load some\n\n this.__initPromise = Promise.all([initMath, checkCibResize, checkOffscreenCanvas, checkCibRegion]).then(function () {\n return _this;\n });\n return this.__initPromise;\n}; // Call resizer in webworker or locally, depending on config\n\n\nPica.prototype.__invokeResize = function (tileOpts, opts) {\n var _this2 = this;\n\n // Share cache between calls:\n //\n // - wasm instance\n // - wasm memory object\n //\n opts.__mathCache = opts.__mathCache || {};\n return Promise.resolve().then(function () {\n if (!_this2.features.ww) {\n // not possible to have ImageBitmap here if user disabled WW\n return {\n data: _this2.__mathlib.resizeAndUnsharp(tileOpts, opts.__mathCache)\n };\n }\n\n return new Promise(function (resolve, reject) {\n var w = _this2.__workersPool.acquire();\n\n if (opts.cancelToken) opts.cancelToken[\"catch\"](function (err) {\n return reject(err);\n });\n\n w.value.onmessage = function (ev) {\n w.release();\n if (ev.data.err) reject(ev.data.err);else resolve(ev.data);\n };\n\n var transfer = [];\n if (tileOpts.src) transfer.push(tileOpts.src.buffer);\n if (tileOpts.srcBitmap) transfer.push(tileOpts.srcBitmap);\n w.value.postMessage({\n opts: tileOpts,\n features: _this2.__requested_features,\n preload: {\n wasm_nodule: _this2.__mathlib.__\n }\n }, transfer);\n });\n });\n}; // this function can return promise if createImageBitmap is used\n\n\nPica.prototype.__extractTileData = function (tile, from, opts, stageEnv, extractTo) {\n if (this.features.ww && CAN_USE_OFFSCREEN_CANVAS && ( // createImageBitmap doesn't work for images (Image, ImageBitmap) with Exif orientation in Chrome,\n // can use canvas because canvas doesn't have orientation;\n // see https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n utils.isCanvas(from) || CAN_USE_CIB_REGION_FOR_IMAGE)) {\n this.debug('Create tile for OffscreenCanvas');\n return createImageBitmap(stageEnv.srcImageBitmap || from, tile.x, tile.y, tile.width, tile.height).then(function (bitmap) {\n extractTo.srcBitmap = bitmap;\n return extractTo;\n });\n } // Extract tile RGBA buffer, depending on input type\n\n\n if (utils.isCanvas(from)) {\n if (!stageEnv.srcCtx) stageEnv.srcCtx = from.getContext('2d'); // If input is Canvas - extract region data directly\n\n this.debug('Get tile pixel data');\n extractTo.src = stageEnv.srcCtx.getImageData(tile.x, tile.y, tile.width, tile.height).data;\n return extractTo;\n } // If input is Image or decoded to ImageBitmap,\n // draw region to temporary canvas and extract data from it\n //\n // Note! Attempt to reuse this canvas causes significant slowdown in chrome\n //\n\n\n this.debug('Draw tile imageBitmap/image to temporary canvas');\n var tmpCanvas = this.options.createCanvas(tile.width, tile.height);\n var tmpCtx = tmpCanvas.getContext('2d');\n tmpCtx.globalCompositeOperation = 'copy';\n tmpCtx.drawImage(stageEnv.srcImageBitmap || from, tile.x, tile.y, tile.width, tile.height, 0, 0, tile.width, tile.height);\n this.debug('Get tile pixel data');\n extractTo.src = tmpCtx.getImageData(0, 0, tile.width, tile.height).data; // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n\n tmpCanvas.width = tmpCanvas.height = 0;\n return extractTo;\n};\n\nPica.prototype.__landTileData = function (tile, result, stageEnv) {\n var toImageData;\n this.debug('Convert raw rgba tile result to ImageData');\n\n if (result.bitmap) {\n stageEnv.toCtx.drawImage(result.bitmap, tile.toX, tile.toY);\n return null;\n }\n\n if (CAN_NEW_IMAGE_DATA) {\n // this branch is for modern browsers\n // If `new ImageData()` & Uint8ClampedArray suported\n toImageData = new ImageData(new Uint8ClampedArray(result.data), tile.toWidth, tile.toHeight);\n } else {\n // fallback for `node-canvas` and old browsers\n // (IE11 has ImageData but does not support `new ImageData()`)\n toImageData = stageEnv.toCtx.createImageData(tile.toWidth, tile.toHeight);\n\n if (toImageData.data.set) {\n toImageData.data.set(result.data);\n } else {\n // IE9 don't have `.set()`\n for (var i = toImageData.data.length - 1; i >= 0; i--) {\n toImageData.data[i] = result.data[i];\n }\n }\n }\n\n this.debug('Draw tile');\n\n if (NEED_SAFARI_FIX) {\n // Safari draws thin white stripes between tiles without this fix\n stageEnv.toCtx.putImageData(toImageData, tile.toX, tile.toY, tile.toInnerX - tile.toX, tile.toInnerY - tile.toY, tile.toInnerWidth + 1e-5, tile.toInnerHeight + 1e-5);\n } else {\n stageEnv.toCtx.putImageData(toImageData, tile.toX, tile.toY, tile.toInnerX - tile.toX, tile.toInnerY - tile.toY, tile.toInnerWidth, tile.toInnerHeight);\n }\n\n return null;\n};\n\nPica.prototype.__tileAndResize = function (from, to, opts) {\n var _this3 = this;\n\n var stageEnv = {\n srcCtx: null,\n srcImageBitmap: null,\n isImageBitmapReused: false,\n toCtx: null\n };\n\n var processTile = function processTile(tile) {\n return _this3.__limit(function () {\n if (opts.canceled) return opts.cancelToken;\n var tileOpts = {\n width: tile.width,\n height: tile.height,\n toWidth: tile.toWidth,\n toHeight: tile.toHeight,\n scaleX: tile.scaleX,\n scaleY: tile.scaleY,\n offsetX: tile.offsetX,\n offsetY: tile.offsetY,\n filter: opts.filter,\n unsharpAmount: opts.unsharpAmount,\n unsharpRadius: opts.unsharpRadius,\n unsharpThreshold: opts.unsharpThreshold\n };\n\n _this3.debug('Invoke resize math');\n\n return Promise.resolve(tileOpts).then(function (tileOpts) {\n return _this3.__extractTileData(tile, from, opts, stageEnv, tileOpts);\n }).then(function (tileOpts) {\n _this3.debug('Invoke resize math');\n\n return _this3.__invokeResize(tileOpts, opts);\n }).then(function (result) {\n if (opts.canceled) return opts.cancelToken;\n stageEnv.srcImageData = null;\n return _this3.__landTileData(tile, result, stageEnv);\n });\n });\n }; // Need to normalize data source first. It can be canvas or image.\n // If image - try to decode in background if possible\n\n\n return Promise.resolve().then(function () {\n stageEnv.toCtx = to.getContext('2d');\n if (utils.isCanvas(from)) return null;\n\n if (utils.isImageBitmap(from)) {\n stageEnv.srcImageBitmap = from;\n stageEnv.isImageBitmapReused = true;\n return null;\n }\n\n if (utils.isImage(from)) {\n // try do decode image in background for faster next operations;\n // if we're using offscreen canvas, cib is called per tile, so not needed here\n if (!CAN_CREATE_IMAGE_BITMAP) return null;\n\n _this3.debug('Decode image via createImageBitmap');\n\n return createImageBitmap(from).then(function (imageBitmap) {\n stageEnv.srcImageBitmap = imageBitmap;\n }) // Suppress error to use fallback, if method fails\n // https://github.com/nodeca/pica/issues/190\n\n /* eslint-disable no-unused-vars */\n [\"catch\"](function (e) {\n return null;\n });\n }\n\n throw new Error('Pica: \".from\" should be Image, Canvas or ImageBitmap');\n }).then(function () {\n if (opts.canceled) return opts.cancelToken;\n\n _this3.debug('Calculate tiles'); //\n // Here we are with \"normalized\" source,\n // follow to tiling\n //\n\n\n var regions = createRegions({\n width: opts.width,\n height: opts.height,\n srcTileSize: _this3.options.tile,\n toWidth: opts.toWidth,\n toHeight: opts.toHeight,\n destTileBorder: opts.__destTileBorder\n });\n var jobs = regions.map(function (tile) {\n return processTile(tile);\n });\n\n function cleanup(stageEnv) {\n if (stageEnv.srcImageBitmap) {\n if (!stageEnv.isImageBitmapReused) stageEnv.srcImageBitmap.close();\n stageEnv.srcImageBitmap = null;\n }\n }\n\n _this3.debug('Process tiles');\n\n return Promise.all(jobs).then(function () {\n _this3.debug('Finished!');\n\n cleanup(stageEnv);\n return to;\n }, function (err) {\n cleanup(stageEnv);\n throw err;\n });\n });\n};\n\nPica.prototype.__processStages = function (stages, from, to, opts) {\n var _this4 = this;\n\n if (opts.canceled) return opts.cancelToken;\n\n var _stages$shift = stages.shift(),\n _stages$shift2 = _slicedToArray(_stages$shift, 2),\n toWidth = _stages$shift2[0],\n toHeight = _stages$shift2[1];\n\n var isLastStage = stages.length === 0; // Optimization for legacy filters -\n // only use user-defined quality for the last stage,\n // use simpler (Hamming) filter for the first stages where\n // scale factor is large enough (more than 2-3)\n //\n // For advanced filters (mks2013 and custom) - skip optimization,\n // because need to apply sharpening every time\n\n var filter;\n if (isLastStage || filter_info.q2f.indexOf(opts.filter) < 0) filter = opts.filter;else if (opts.filter === 'box') filter = 'box';else filter = 'hamming';\n opts = assign({}, opts, {\n toWidth: toWidth,\n toHeight: toHeight,\n filter: filter\n });\n var tmpCanvas;\n\n if (!isLastStage) {\n // create temporary canvas\n tmpCanvas = this.options.createCanvas(toWidth, toHeight);\n }\n\n return this.__tileAndResize(from, isLastStage ? to : tmpCanvas, opts).then(function () {\n if (isLastStage) return to;\n opts.width = toWidth;\n opts.height = toHeight;\n return _this4.__processStages(stages, tmpCanvas, to, opts);\n }).then(function (res) {\n if (tmpCanvas) {\n // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n tmpCanvas.width = tmpCanvas.height = 0;\n }\n\n return res;\n });\n};\n\nPica.prototype.__resizeViaCreateImageBitmap = function (from, to, opts) {\n var _this5 = this;\n\n var toCtx = to.getContext('2d');\n this.debug('Resize via createImageBitmap()');\n return createImageBitmap(from, {\n resizeWidth: opts.toWidth,\n resizeHeight: opts.toHeight,\n resizeQuality: utils.cib_quality_name(filter_info.f2q[opts.filter])\n }).then(function (imageBitmap) {\n if (opts.canceled) return opts.cancelToken; // if no unsharp - draw directly to output canvas\n\n if (!opts.unsharpAmount) {\n toCtx.drawImage(imageBitmap, 0, 0);\n imageBitmap.close();\n toCtx = null;\n\n _this5.debug('Finished!');\n\n return to;\n }\n\n _this5.debug('Unsharp result');\n\n var tmpCanvas = _this5.options.createCanvas(opts.toWidth, opts.toHeight);\n\n var tmpCtx = tmpCanvas.getContext('2d');\n tmpCtx.drawImage(imageBitmap, 0, 0);\n imageBitmap.close();\n var iData = tmpCtx.getImageData(0, 0, opts.toWidth, opts.toHeight);\n\n _this5.__mathlib.unsharp_mask(iData.data, opts.toWidth, opts.toHeight, opts.unsharpAmount, opts.unsharpRadius, opts.unsharpThreshold);\n\n toCtx.putImageData(iData, 0, 0); // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n\n tmpCanvas.width = tmpCanvas.height = 0;\n iData = tmpCtx = tmpCanvas = toCtx = null;\n\n _this5.debug('Finished!');\n\n return to;\n });\n};\n\nPica.prototype.resize = function (from, to, options) {\n var _this6 = this;\n\n this.debug('Start resize...');\n var opts = assign({}, DEFAULT_RESIZE_OPTS);\n\n if (!isNaN(options)) {\n opts = assign(opts, {\n quality: options\n });\n } else if (options) {\n opts = assign(opts, options);\n }\n\n opts.toWidth = to.width;\n opts.toHeight = to.height;\n opts.width = from.naturalWidth || from.width;\n opts.height = from.naturalHeight || from.height; // Legacy `.quality` option\n\n if (Object.prototype.hasOwnProperty.call(opts, 'quality')) {\n if (opts.quality < 0 || opts.quality > 3) {\n throw new Error(\"Pica: .quality should be [0..3], got \".concat(opts.quality));\n }\n\n opts.filter = filter_info.q2f[opts.quality];\n } // Prevent stepper from infinite loop\n\n\n if (to.width === 0 || to.height === 0) {\n return Promise.reject(new Error(\"Invalid output size: \".concat(to.width, \"x\").concat(to.height)));\n }\n\n if (opts.unsharpRadius > 2) opts.unsharpRadius = 2;\n opts.canceled = false;\n\n if (opts.cancelToken) {\n // Wrap cancelToken to avoid successive resolve & set flag\n opts.cancelToken = opts.cancelToken.then(function (data) {\n opts.canceled = true;\n throw data;\n }, function (err) {\n opts.canceled = true;\n throw err;\n });\n }\n\n var DEST_TILE_BORDER = 3; // Max possible filter window size\n\n opts.__destTileBorder = Math.ceil(Math.max(DEST_TILE_BORDER, 2.5 * opts.unsharpRadius | 0));\n return this.init().then(function () {\n if (opts.canceled) return opts.cancelToken; // if createImageBitmap supports resize, just do it and return\n\n if (_this6.features.cib) {\n if (filter_info.q2f.indexOf(opts.filter) >= 0) {\n return _this6.__resizeViaCreateImageBitmap(from, to, opts);\n }\n\n _this6.debug('cib is enabled, but not supports provided filter, fallback to manual math');\n }\n\n if (!CAN_USE_CANVAS_GET_IMAGE_DATA) {\n var err = new Error('Pica: cannot use getImageData on canvas, ' + \"make sure fingerprinting protection isn't enabled\");\n err.code = 'ERR_GET_IMAGE_DATA';\n throw err;\n } //\n // No easy way, let's resize manually via arrays\n //\n\n\n var stages = createStages(opts.width, opts.height, opts.toWidth, opts.toHeight, _this6.options.tile, opts.__destTileBorder);\n return _this6.__processStages(stages, from, to, opts);\n });\n}; // RGBA buffer resize\n//\n\n\nPica.prototype.resizeBuffer = function (options) {\n var _this7 = this;\n\n var opts = assign({}, DEFAULT_RESIZE_OPTS, options); // Legacy `.quality` option\n\n if (Object.prototype.hasOwnProperty.call(opts, 'quality')) {\n if (opts.quality < 0 || opts.quality > 3) {\n throw new Error(\"Pica: .quality should be [0..3], got \".concat(opts.quality));\n }\n\n opts.filter = filter_info.q2f[opts.quality];\n }\n\n return this.init().then(function () {\n return _this7.__mathlib.resizeAndUnsharp(opts);\n });\n};\n\nPica.prototype.toBlob = function (canvas, mimeType, quality) {\n mimeType = mimeType || 'image/png';\n return new Promise(function (resolve) {\n if (canvas.toBlob) {\n canvas.toBlob(function (blob) {\n return resolve(blob);\n }, mimeType, quality);\n return;\n }\n\n if (canvas.convertToBlob) {\n resolve(canvas.convertToBlob({\n type: mimeType,\n quality: quality\n }));\n return;\n } // Fallback for old browsers\n\n\n var asString = atob(canvas.toDataURL(mimeType, quality).split(',')[1]);\n var len = asString.length;\n var asBuffer = new Uint8Array(len);\n\n for (var i = 0; i < len; i++) {\n asBuffer[i] = asString.charCodeAt(i);\n }\n\n resolve(new Blob([asBuffer], {\n type: mimeType\n }));\n });\n};\n\nPica.prototype.debug = function () {};\n\nmodule.exports = Pica;\n\n},{\"./lib/mathlib\":1,\"./lib/mm_resize/resize_filter_info\":7,\"./lib/pool\":13,\"./lib/stepper\":14,\"./lib/tiler\":15,\"./lib/utils\":16,\"./lib/worker\":17,\"object-assign\":22,\"webworkify\":23}]},{},[])(\"/index.js\")\n});\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\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 return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (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};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
    \n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
    \n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
    \n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
    \n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
    \n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
    \n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
    \n * It will read the variation of the `placement` property.
    \n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
    \n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
    \n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
    \n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
    \n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
    \n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
    \n * These can be overridden using the `options` argument of Popper.js.
    \n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
    \n * By default, it is set to no-op.
    \n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
    \n * By default, it is set to no-op.
    \n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
    \n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","var si = typeof setImmediate === 'function', tick;\nif (si) {\n tick = function (fn) { setImmediate(fn); };\n} else {\n tick = function (fn) { setTimeout(fn, 0); };\n}\n\nmodule.exports = tick;","/**\n* Tom Select v2.1.0\n* Licensed under the Apache License, Version 2.0 (the \"License\");\n*/\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.TomSelect = factory());\n})(this, (function () { 'use strict';\n\n\t/**\n\t * MicroEvent - to make any js object an event emitter\n\t *\n\t * - pure javascript - server compatible, browser compatible\n\t * - dont rely on the browser doms\n\t * - super simple - you get it immediatly, no mistery, no magic involved\n\t *\n\t * @author Jerome Etienne (https://github.com/jeromeetienne)\n\t */\n\n\t/**\n\t * Execute callback for each event in space separated list of event names\n\t *\n\t */\n\tfunction forEvents(events, callback) {\n\t events.split(/\\s+/).forEach(event => {\n\t callback(event);\n\t });\n\t}\n\n\tclass MicroEvent {\n\t constructor() {\n\t this._events = void 0;\n\t this._events = {};\n\t }\n\n\t on(events, fct) {\n\t forEvents(events, event => {\n\t this._events[event] = this._events[event] || [];\n\n\t this._events[event].push(fct);\n\t });\n\t }\n\n\t off(events, fct) {\n\t var n = arguments.length;\n\n\t if (n === 0) {\n\t this._events = {};\n\t return;\n\t }\n\n\t forEvents(events, event => {\n\t if (n === 1) return delete this._events[event];\n\t if (event in this._events === false) return;\n\n\t this._events[event].splice(this._events[event].indexOf(fct), 1);\n\t });\n\t }\n\n\t trigger(events, ...args) {\n\t var self = this;\n\t forEvents(events, event => {\n\t if (event in self._events === false) return;\n\n\t for (let fct of self._events[event]) {\n\t fct.apply(self, args);\n\t }\n\t });\n\t }\n\n\t}\n\n\t/**\n\t * microplugin.js\n\t * Copyright (c) 2013 Brian Reavis & contributors\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n\t * file except in compliance with the License. You may obtain a copy of the License at:\n\t * http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software distributed under\n\t * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n\t * ANY KIND, either express or implied. See the License for the specific language\n\t * governing permissions and limitations under the License.\n\t *\n\t * @author Brian Reavis \n\t */\n\tfunction MicroPlugin(Interface) {\n\t Interface.plugins = {};\n\t return class extends Interface {\n\t constructor(...args) {\n\t super(...args);\n\t this.plugins = {\n\t names: [],\n\t settings: {},\n\t requested: {},\n\t loaded: {}\n\t };\n\t }\n\n\t /**\n\t * Registers a plugin.\n\t *\n\t * @param {function} fn\n\t */\n\t static define(name, fn) {\n\t Interface.plugins[name] = {\n\t 'name': name,\n\t 'fn': fn\n\t };\n\t }\n\t /**\n\t * Initializes the listed plugins (with options).\n\t * Acceptable formats:\n\t *\n\t * List (without options):\n\t * ['a', 'b', 'c']\n\t *\n\t * List (with options):\n\t * [{'name': 'a', options: {}}, {'name': 'b', options: {}}]\n\t *\n\t * Hash (with options):\n\t * {'a': { ... }, 'b': { ... }, 'c': { ... }}\n\t *\n\t * @param {array|object} plugins\n\t */\n\n\n\t initializePlugins(plugins) {\n\t var key, name;\n\t const self = this;\n\t const queue = [];\n\n\t if (Array.isArray(plugins)) {\n\t plugins.forEach(plugin => {\n\t if (typeof plugin === 'string') {\n\t queue.push(plugin);\n\t } else {\n\t self.plugins.settings[plugin.name] = plugin.options;\n\t queue.push(plugin.name);\n\t }\n\t });\n\t } else if (plugins) {\n\t for (key in plugins) {\n\t if (plugins.hasOwnProperty(key)) {\n\t self.plugins.settings[key] = plugins[key];\n\t queue.push(key);\n\t }\n\t }\n\t }\n\n\t while (name = queue.shift()) {\n\t self.require(name);\n\t }\n\t }\n\n\t loadPlugin(name) {\n\t var self = this;\n\t var plugins = self.plugins;\n\t var plugin = Interface.plugins[name];\n\n\t if (!Interface.plugins.hasOwnProperty(name)) {\n\t throw new Error('Unable to find \"' + name + '\" plugin');\n\t }\n\n\t plugins.requested[name] = true;\n\t plugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);\n\t plugins.names.push(name);\n\t }\n\t /**\n\t * Initializes a plugin.\n\t *\n\t */\n\n\n\t require(name) {\n\t var self = this;\n\t var plugins = self.plugins;\n\n\t if (!self.plugins.loaded.hasOwnProperty(name)) {\n\t if (plugins.requested[name]) {\n\t throw new Error('Plugin has circular dependency (\"' + name + '\")');\n\t }\n\n\t self.loadPlugin(name);\n\t }\n\n\t return plugins.loaded[name];\n\t }\n\n\t };\n\t}\n\n\t// @ts-ignore TS2691 \"An import path cannot end with a '.ts' extension\"\n\t// https://github.com/andrewrk/node-diacritics/blob/master/index.js\n\tvar latin_pat;\n\tconst accent_pat = '[\\u0300-\\u036F\\u{b7}\\u{2be}]'; // \\u{2bc}\n\n\tconst accent_reg = new RegExp(accent_pat, 'gu');\n\tvar diacritic_patterns;\n\tconst latin_convert = {\n\t 'æ': 'ae',\n\t 'ⱥ': 'a',\n\t 'ø': 'o'\n\t};\n\tconst convert_pat = new RegExp(Object.keys(latin_convert).join('|'), 'gu');\n\tconst code_points = [[0, 65535]];\n\t/**\n\t * Remove accents\n\t * via https://github.com/krisk/Fuse/issues/133#issuecomment-318692703\n\t *\n\t */\n\n\tconst asciifold = str => {\n\t return str.normalize('NFKD').replace(accent_reg, '').toLowerCase().replace(convert_pat, function (foreignletter) {\n\t return latin_convert[foreignletter];\n\t });\n\t};\n\t/**\n\t * Convert array of strings to a regular expression\n\t *\tex ['ab','a'] => (?:ab|a)\n\t * \tex ['a','b'] => [ab]\n\t *\n\t */\n\n\tconst arrayToPattern = (chars, glue = '|') => {\n\t if (chars.length == 1) {\n\t return chars[0];\n\t }\n\n\t var longest = 1;\n\t chars.forEach(a => {\n\t longest = Math.max(longest, a.length);\n\t });\n\n\t if (longest == 1) {\n\t return '[' + chars.join('') + ']';\n\t }\n\n\t return '(?:' + chars.join(glue) + ')';\n\t};\n\tconst escapeToPattern = chars => {\n\t const escaped = chars.map(diacritic => escape_regex(diacritic));\n\t return arrayToPattern(escaped);\n\t};\n\t/**\n\t * Get all possible combinations of substrings that add up to the given string\n\t * https://stackoverflow.com/questions/30169587/find-all-the-combination-of-substrings-that-add-up-to-the-given-string\n\t *\n\t */\n\n\tconst allSubstrings = input => {\n\t if (input.length === 1) return [[input]];\n\t var result = [];\n\t allSubstrings(input.substring(1)).forEach(function (subresult) {\n\t var tmp = subresult.slice(0);\n\t tmp[0] = input.charAt(0) + tmp[0];\n\t result.push(tmp);\n\t tmp = subresult.slice(0);\n\t tmp.unshift(input.charAt(0));\n\t result.push(tmp);\n\t });\n\t return result;\n\t};\n\t/**\n\t * Generate a list of diacritics from the list of code points\n\t *\n\t */\n\n\tconst generateDiacritics = code_points => {\n\t var diacritics = {};\n\t code_points.forEach(code_range => {\n\t for (let i = code_range[0]; i <= code_range[1]; i++) {\n\t let diacritic = String.fromCharCode(i);\n\t let latin = asciifold(diacritic);\n\n\t if (latin == diacritic.toLowerCase()) {\n\t continue;\n\t } // skip when latin is a string longer than 3 characters long\n\t // bc the resulting regex patterns will be long\n\t // eg:\n\t // latin صلى الله عليه وسلم length 18 code point 65018\n\t // latin جل جلاله length 8 code point 65019\n\n\n\t if (latin.length > 3) {\n\t continue;\n\t }\n\n\t if (!(latin in diacritics)) {\n\t diacritics[latin] = [latin];\n\t }\n\n\t var patt = new RegExp(escapeToPattern(diacritics[latin]), 'iu');\n\n\t if (diacritic.match(patt)) {\n\t continue;\n\t }\n\n\t diacritics[latin].push(diacritic);\n\t }\n\t }); // filter out if there's only one character in the list\n\n\t let latin_chars = Object.keys(diacritics);\n\n\t for (let i = 0; i < latin_chars.length; i++) {\n\t const latin = latin_chars[i];\n\n\t if (diacritics[latin].length < 2) {\n\t delete diacritics[latin];\n\t }\n\t } // latin character pattern\n\t // match longer substrings first\n\n\n\t latin_chars = Object.keys(diacritics).sort((a, b) => b.length - a.length);\n\t latin_pat = new RegExp('(' + escapeToPattern(latin_chars) + accent_pat + '*)', 'gu'); // build diacritic patterns\n\t // ae needs:\n\t //\t(?:(?:ae|Æ|Ǽ|Ǣ)|(?:A|Ⓐ|A...)(?:E|ɛ|Ⓔ...))\n\n\t var diacritic_patterns = {};\n\t latin_chars.sort((a, b) => a.length - b.length).forEach(latin => {\n\t var substrings = allSubstrings(latin);\n\t var pattern = substrings.map(sub_pat => {\n\t sub_pat = sub_pat.map(l => {\n\t if (diacritics.hasOwnProperty(l)) {\n\t return escapeToPattern(diacritics[l]);\n\t }\n\n\t return l;\n\t });\n\t return arrayToPattern(sub_pat, '');\n\t });\n\t diacritic_patterns[latin] = arrayToPattern(pattern);\n\t });\n\t return diacritic_patterns;\n\t};\n\t/**\n\t * Expand a regular expression pattern to include diacritics\n\t * \teg /a/ becomes /aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐɑAⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ/\n\t *\n\t */\n\n\tconst diacriticRegexPoints = regex => {\n\t if (diacritic_patterns === undefined) {\n\t diacritic_patterns = generateDiacritics(code_points);\n\t }\n\n\t const decomposed = regex.normalize('NFKD').toLowerCase();\n\t return decomposed.split(latin_pat).map(part => {\n\t // \"ffl\" or \"ffl\"\n\t const no_accent = asciifold(part);\n\n\t if (no_accent == '') {\n\t return '';\n\t }\n\n\t if (diacritic_patterns.hasOwnProperty(no_accent)) {\n\t return diacritic_patterns[no_accent];\n\t }\n\n\t return part;\n\t }).join('');\n\t};\n\n\t// @ts-ignore TS2691 \"An import path cannot end with a '.ts' extension\"\n\n\t/**\n\t * A property getter resolving dot-notation\n\t * @param {Object} obj The root object to fetch property on\n\t * @param {String} name The optionally dotted property name to fetch\n\t * @return {Object} The resolved property value\n\t */\n\tconst getAttr = (obj, name) => {\n\t if (!obj) return;\n\t return obj[name];\n\t};\n\t/**\n\t * A property getter resolving dot-notation\n\t * @param {Object} obj The root object to fetch property on\n\t * @param {String} name The optionally dotted property name to fetch\n\t * @return {Object} The resolved property value\n\t */\n\n\tconst getAttrNesting = (obj, name) => {\n\t if (!obj) return;\n\t var part,\n\t names = name.split(\".\");\n\n\t while ((part = names.shift()) && (obj = obj[part]));\n\n\t return obj;\n\t};\n\t/**\n\t * Calculates how close of a match the\n\t * given value is against a search token.\n\t *\n\t */\n\n\tconst scoreValue = (value, token, weight) => {\n\t var score, pos;\n\t if (!value) return 0;\n\t value = value + '';\n\t pos = value.search(token.regex);\n\t if (pos === -1) return 0;\n\t score = token.string.length / value.length;\n\t if (pos === 0) score += 0.5;\n\t return score * weight;\n\t};\n\t/**\n\t *\n\t * https://stackoverflow.com/questions/63006601/why-does-u-throw-an-invalid-escape-error\n\t */\n\n\tconst escape_regex = str => {\n\t return (str + '').replace(/([\\$\\(-\\+\\.\\?\\[-\\^\\{-\\}])/g, '\\\\$1');\n\t};\n\t/**\n\t * Cast object property to an array if it exists and has a value\n\t *\n\t */\n\n\tconst propToArray = (obj, key) => {\n\t var value = obj[key];\n\t if (typeof value == 'function') return value;\n\n\t if (value && !Array.isArray(value)) {\n\t obj[key] = [value];\n\t }\n\t};\n\t/**\n\t * Iterates over arrays and hashes.\n\t *\n\t * ```\n\t * iterate(this.items, function(item, id) {\n\t * // invoked for each item\n\t * });\n\t * ```\n\t *\n\t */\n\n\tconst iterate = (object, callback) => {\n\t if (Array.isArray(object)) {\n\t object.forEach(callback);\n\t } else {\n\t for (var key in object) {\n\t if (object.hasOwnProperty(key)) {\n\t callback(object[key], key);\n\t }\n\t }\n\t }\n\t};\n\tconst cmp = (a, b) => {\n\t if (typeof a === 'number' && typeof b === 'number') {\n\t return a > b ? 1 : a < b ? -1 : 0;\n\t }\n\n\t a = asciifold(a + '').toLowerCase();\n\t b = asciifold(b + '').toLowerCase();\n\t if (a > b) return 1;\n\t if (b > a) return -1;\n\t return 0;\n\t};\n\n\t/**\n\t * sifter.js\n\t * Copyright (c) 2013–2020 Brian Reavis & contributors\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n\t * file except in compliance with the License. You may obtain a copy of the License at:\n\t * http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software distributed under\n\t * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n\t * ANY KIND, either express or implied. See the License for the specific language\n\t * governing permissions and limitations under the License.\n\t *\n\t * @author Brian Reavis \n\t */\n\n\tclass Sifter {\n\t // []|{};\n\n\t /**\n\t * Textually searches arrays and hashes of objects\n\t * by property (or multiple properties). Designed\n\t * specifically for autocomplete.\n\t *\n\t */\n\t constructor(items, settings) {\n\t this.items = void 0;\n\t this.settings = void 0;\n\t this.items = items;\n\t this.settings = settings || {\n\t diacritics: true\n\t };\n\t }\n\n\t /**\n\t * Splits a search string into an array of individual\n\t * regexps to be used to match results.\n\t *\n\t */\n\t tokenize(query, respect_word_boundaries, weights) {\n\t if (!query || !query.length) return [];\n\t const tokens = [];\n\t const words = query.split(/\\s+/);\n\t var field_regex;\n\n\t if (weights) {\n\t field_regex = new RegExp('^(' + Object.keys(weights).map(escape_regex).join('|') + ')\\:(.*)$');\n\t }\n\n\t words.forEach(word => {\n\t let field_match;\n\t let field = null;\n\t let regex = null; // look for \"field:query\" tokens\n\n\t if (field_regex && (field_match = word.match(field_regex))) {\n\t field = field_match[1];\n\t word = field_match[2];\n\t }\n\n\t if (word.length > 0) {\n\t if (this.settings.diacritics) {\n\t regex = diacriticRegexPoints(word);\n\t } else {\n\t regex = escape_regex(word);\n\t }\n\n\t if (respect_word_boundaries) regex = \"\\\\b\" + regex;\n\t }\n\n\t tokens.push({\n\t string: word,\n\t regex: regex ? new RegExp(regex, 'iu') : null,\n\t field: field\n\t });\n\t });\n\t return tokens;\n\t }\n\n\t /**\n\t * Returns a function to be used to score individual results.\n\t *\n\t * Good matches will have a higher score than poor matches.\n\t * If an item is not a match, 0 will be returned by the function.\n\t *\n\t * @returns {function}\n\t */\n\t getScoreFunction(query, options) {\n\t var search = this.prepareSearch(query, options);\n\t return this._getScoreFunction(search);\n\t }\n\n\t _getScoreFunction(search) {\n\t const tokens = search.tokens,\n\t token_count = tokens.length;\n\n\t if (!token_count) {\n\t return function () {\n\t return 0;\n\t };\n\t }\n\n\t const fields = search.options.fields,\n\t weights = search.weights,\n\t field_count = fields.length,\n\t getAttrFn = search.getAttrFn;\n\n\t if (!field_count) {\n\t return function () {\n\t return 1;\n\t };\n\t }\n\t /**\n\t * Calculates the score of an object\n\t * against the search query.\n\t *\n\t */\n\n\n\t const scoreObject = function () {\n\t if (field_count === 1) {\n\t return function (token, data) {\n\t const field = fields[0].field;\n\t return scoreValue(getAttrFn(data, field), token, weights[field]);\n\t };\n\t }\n\n\t return function (token, data) {\n\t var sum = 0; // is the token specific to a field?\n\n\t if (token.field) {\n\t const value = getAttrFn(data, token.field);\n\n\t if (!token.regex && value) {\n\t sum += 1 / field_count;\n\t } else {\n\t sum += scoreValue(value, token, 1);\n\t }\n\t } else {\n\t iterate(weights, (weight, field) => {\n\t sum += scoreValue(getAttrFn(data, field), token, weight);\n\t });\n\t }\n\n\t return sum / field_count;\n\t };\n\t }();\n\n\t if (token_count === 1) {\n\t return function (data) {\n\t return scoreObject(tokens[0], data);\n\t };\n\t }\n\n\t if (search.options.conjunction === 'and') {\n\t return function (data) {\n\t var i = 0,\n\t score,\n\t sum = 0;\n\n\t for (; i < token_count; i++) {\n\t score = scoreObject(tokens[i], data);\n\t if (score <= 0) return 0;\n\t sum += score;\n\t }\n\n\t return sum / token_count;\n\t };\n\t } else {\n\t return function (data) {\n\t var sum = 0;\n\t iterate(tokens, token => {\n\t sum += scoreObject(token, data);\n\t });\n\t return sum / token_count;\n\t };\n\t }\n\t }\n\n\t /**\n\t * Returns a function that can be used to compare two\n\t * results, for sorting purposes. If no sorting should\n\t * be performed, `null` will be returned.\n\t *\n\t * @return function(a,b)\n\t */\n\t getSortFunction(query, options) {\n\t var search = this.prepareSearch(query, options);\n\t return this._getSortFunction(search);\n\t }\n\n\t _getSortFunction(search) {\n\t var i, n, implicit_score;\n\t const self = this,\n\t options = search.options,\n\t sort = !search.query && options.sort_empty ? options.sort_empty : options.sort,\n\t sort_flds = [],\n\t multipliers = [];\n\n\t if (typeof sort == 'function') {\n\t return sort.bind(this);\n\t }\n\t /**\n\t * Fetches the specified sort field value\n\t * from a search result item.\n\t *\n\t */\n\n\n\t const get_field = function get_field(name, result) {\n\t if (name === '$score') return result.score;\n\t return search.getAttrFn(self.items[result.id], name);\n\t }; // parse options\n\n\n\t if (sort) {\n\t for (i = 0, n = sort.length; i < n; i++) {\n\t if (search.query || sort[i].field !== '$score') {\n\t sort_flds.push(sort[i]);\n\t }\n\t }\n\t } // the \"$score\" field is implied to be the primary\n\t // sort field, unless it's manually specified\n\n\n\t if (search.query) {\n\t implicit_score = true;\n\n\t for (i = 0, n = sort_flds.length; i < n; i++) {\n\t if (sort_flds[i].field === '$score') {\n\t implicit_score = false;\n\t break;\n\t }\n\t }\n\n\t if (implicit_score) {\n\t sort_flds.unshift({\n\t field: '$score',\n\t direction: 'desc'\n\t });\n\t }\n\t } else {\n\t for (i = 0, n = sort_flds.length; i < n; i++) {\n\t if (sort_flds[i].field === '$score') {\n\t sort_flds.splice(i, 1);\n\t break;\n\t }\n\t }\n\t }\n\n\t for (i = 0, n = sort_flds.length; i < n; i++) {\n\t multipliers.push(sort_flds[i].direction === 'desc' ? -1 : 1);\n\t } // build function\n\n\n\t const sort_flds_count = sort_flds.length;\n\n\t if (!sort_flds_count) {\n\t return null;\n\t } else if (sort_flds_count === 1) {\n\t const sort_fld = sort_flds[0].field;\n\t const multiplier = multipliers[0];\n\t return function (a, b) {\n\t return multiplier * cmp(get_field(sort_fld, a), get_field(sort_fld, b));\n\t };\n\t } else {\n\t return function (a, b) {\n\t var i, result, field;\n\n\t for (i = 0; i < sort_flds_count; i++) {\n\t field = sort_flds[i].field;\n\t result = multipliers[i] * cmp(get_field(field, a), get_field(field, b));\n\t if (result) return result;\n\t }\n\n\t return 0;\n\t };\n\t }\n\t }\n\n\t /**\n\t * Parses a search query and returns an object\n\t * with tokens and fields ready to be populated\n\t * with results.\n\t *\n\t */\n\t prepareSearch(query, optsUser) {\n\t const weights = {};\n\t var options = Object.assign({}, optsUser);\n\t propToArray(options, 'sort');\n\t propToArray(options, 'sort_empty'); // convert fields to new format\n\n\t if (options.fields) {\n\t propToArray(options, 'fields');\n\t const fields = [];\n\t options.fields.forEach(field => {\n\t if (typeof field == 'string') {\n\t field = {\n\t field: field,\n\t weight: 1\n\t };\n\t }\n\n\t fields.push(field);\n\t weights[field.field] = 'weight' in field ? field.weight : 1;\n\t });\n\t options.fields = fields;\n\t }\n\n\t return {\n\t options: options,\n\t query: query.toLowerCase().trim(),\n\t tokens: this.tokenize(query, options.respect_word_boundaries, weights),\n\t total: 0,\n\t items: [],\n\t weights: weights,\n\t getAttrFn: options.nesting ? getAttrNesting : getAttr\n\t };\n\t }\n\n\t /**\n\t * Searches through all items and returns a sorted array of matches.\n\t *\n\t */\n\t search(query, options) {\n\t var self = this,\n\t score,\n\t search;\n\t search = this.prepareSearch(query, options);\n\t options = search.options;\n\t query = search.query; // generate result scoring function\n\n\t const fn_score = options.score || self._getScoreFunction(search); // perform search and sort\n\n\n\t if (query.length) {\n\t iterate(self.items, (item, id) => {\n\t score = fn_score(item);\n\n\t if (options.filter === false || score > 0) {\n\t search.items.push({\n\t 'score': score,\n\t 'id': id\n\t });\n\t }\n\t });\n\t } else {\n\t iterate(self.items, (_, id) => {\n\t search.items.push({\n\t 'score': 1,\n\t 'id': id\n\t });\n\t });\n\t }\n\n\t const fn_sort = self._getSortFunction(search);\n\n\t if (fn_sort) search.items.sort(fn_sort); // apply limits\n\n\t search.total = search.items.length;\n\n\t if (typeof options.limit === 'number') {\n\t search.items = search.items.slice(0, options.limit);\n\t }\n\n\t return search;\n\t }\n\n\t}\n\n\t/**\n\t * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n\t * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n\t *\n\t * param query should be {}\n\t */\n\n\tconst getDom = query => {\n\t if (query.jquery) {\n\t return query[0];\n\t }\n\n\t if (query instanceof HTMLElement) {\n\t return query;\n\t }\n\n\t if (isHtmlString(query)) {\n\t let div = document.createElement('div');\n\t div.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\n\t return div.firstChild;\n\t }\n\n\t return document.querySelector(query);\n\t};\n\tconst isHtmlString = arg => {\n\t if (typeof arg === 'string' && arg.indexOf('<') > -1) {\n\t return true;\n\t }\n\n\t return false;\n\t};\n\tconst escapeQuery = query => {\n\t return query.replace(/['\"\\\\]/g, '\\\\$&');\n\t};\n\t/**\n\t * Dispatch an event\n\t *\n\t */\n\n\tconst triggerEvent = (dom_el, event_name) => {\n\t var event = document.createEvent('HTMLEvents');\n\t event.initEvent(event_name, true, false);\n\t dom_el.dispatchEvent(event);\n\t};\n\t/**\n\t * Apply CSS rules to a dom element\n\t *\n\t */\n\n\tconst applyCSS = (dom_el, css) => {\n\t Object.assign(dom_el.style, css);\n\t};\n\t/**\n\t * Add css classes\n\t *\n\t */\n\n\tconst addClasses = (elmts, ...classes) => {\n\t var norm_classes = classesArray(classes);\n\t elmts = castAsArray(elmts);\n\t elmts.map(el => {\n\t norm_classes.map(cls => {\n\t el.classList.add(cls);\n\t });\n\t });\n\t};\n\t/**\n\t * Remove css classes\n\t *\n\t */\n\n\tconst removeClasses = (elmts, ...classes) => {\n\t var norm_classes = classesArray(classes);\n\t elmts = castAsArray(elmts);\n\t elmts.map(el => {\n\t norm_classes.map(cls => {\n\t el.classList.remove(cls);\n\t });\n\t });\n\t};\n\t/**\n\t * Return arguments\n\t *\n\t */\n\n\tconst classesArray = args => {\n\t var classes = [];\n\t iterate(args, _classes => {\n\t if (typeof _classes === 'string') {\n\t _classes = _classes.trim().split(/[\\11\\12\\14\\15\\40]/);\n\t }\n\n\t if (Array.isArray(_classes)) {\n\t classes = classes.concat(_classes);\n\t }\n\t });\n\t return classes.filter(Boolean);\n\t};\n\t/**\n\t * Create an array from arg if it's not already an array\n\t *\n\t */\n\n\tconst castAsArray = arg => {\n\t if (!Array.isArray(arg)) {\n\t arg = [arg];\n\t }\n\n\t return arg;\n\t};\n\t/**\n\t * Get the closest node to the evt.target matching the selector\n\t * Stops at wrapper\n\t *\n\t */\n\n\tconst parentMatch = (target, selector, wrapper) => {\n\t if (wrapper && !wrapper.contains(target)) {\n\t return;\n\t }\n\n\t while (target && target.matches) {\n\t if (target.matches(selector)) {\n\t return target;\n\t }\n\n\t target = target.parentNode;\n\t }\n\t};\n\t/**\n\t * Get the first or last item from an array\n\t *\n\t * > 0 - right (last)\n\t * <= 0 - left (first)\n\t *\n\t */\n\n\tconst getTail = (list, direction = 0) => {\n\t if (direction > 0) {\n\t return list[list.length - 1];\n\t }\n\n\t return list[0];\n\t};\n\t/**\n\t * Return true if an object is empty\n\t *\n\t */\n\n\tconst isEmptyObject = obj => {\n\t return Object.keys(obj).length === 0;\n\t};\n\t/**\n\t * Get the index of an element amongst sibling nodes of the same type\n\t *\n\t */\n\n\tconst nodeIndex = (el, amongst) => {\n\t if (!el) return -1;\n\t amongst = amongst || el.nodeName;\n\t var i = 0;\n\n\t while (el = el.previousElementSibling) {\n\t if (el.matches(amongst)) {\n\t i++;\n\t }\n\t }\n\n\t return i;\n\t};\n\t/**\n\t * Set attributes of an element\n\t *\n\t */\n\n\tconst setAttr = (el, attrs) => {\n\t iterate(attrs, (val, attr) => {\n\t if (val == null) {\n\t el.removeAttribute(attr);\n\t } else {\n\t el.setAttribute(attr, '' + val);\n\t }\n\t });\n\t};\n\t/**\n\t * Replace a node\n\t */\n\n\tconst replaceNode = (existing, replacement) => {\n\t if (existing.parentNode) existing.parentNode.replaceChild(replacement, existing);\n\t};\n\n\t/**\n\t * highlight v3 | MIT license | Johann Burkard \n\t * Highlights arbitrary terms in a node.\n\t *\n\t * - Modified by Marshal 2011-6-24 (added regex)\n\t * - Modified by Brian Reavis 2012-8-27 (cleanup)\n\t */\n\tconst highlight = (element, regex) => {\n\t if (regex === null) return; // convet string to regex\n\n\t if (typeof regex === 'string') {\n\t if (!regex.length) return;\n\t regex = new RegExp(regex, 'i');\n\t } // Wrap matching part of text node with highlighting , e.g.\n\t // Soccer -> Soccer for regex = /soc/i\n\n\n\t const highlightText = node => {\n\t var match = node.data.match(regex);\n\n\t if (match && node.data.length > 0) {\n\t var spannode = document.createElement('span');\n\t spannode.className = 'highlight';\n\t var middlebit = node.splitText(match.index);\n\t middlebit.splitText(match[0].length);\n\t var middleclone = middlebit.cloneNode(true);\n\t spannode.appendChild(middleclone);\n\t replaceNode(middlebit, spannode);\n\t return 1;\n\t }\n\n\t return 0;\n\t }; // Recurse element node, looking for child text nodes to highlight, unless element\n\t // is childless,