{"version":3,"file":"SurfaceContainerTimelineClassic-52caeac2.js","sources":["../../../app/javascript/vuecomponents/SurfaceContainerTimelinePostsLtr.vue","../../../../../node_modules/@shopify/draggable/lib/draggable.bundle.js","../../../app/javascript/vuecomponents/SurfaceContainerTimelinePostsRtl.vue","../../../app/javascript/vuecomponents/SurfaceContainerTimelineClassic.vue"],"sourcesContent":["\n\n\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Draggable\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Draggable\"] = factory();\n\telse\n\t\troot[\"Draggable\"] = factory();\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 72);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _AbstractPlugin = __webpack_require__(66);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _AbstractPlugin2.default;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _AbstractEvent = __webpack_require__(70);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _AbstractEvent2.default;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _closest = __webpack_require__(57);\n\nObject.defineProperty(exports, 'closest', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_closest).default;\n }\n});\n\nvar _requestNextAnimationFrame = __webpack_require__(55);\n\nObject.defineProperty(exports, 'requestNextAnimationFrame', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_requestNextAnimationFrame).default;\n }\n});\n\nvar _distance = __webpack_require__(53);\n\nObject.defineProperty(exports, 'distance', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_distance).default;\n }\n});\n\nvar _touchCoords = __webpack_require__(51);\n\nObject.defineProperty(exports, 'touchCoords', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_touchCoords).default;\n }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SensorEvent = __webpack_require__(46);\n\nObject.keys(_SensorEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SensorEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Sensor = __webpack_require__(49);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Sensor2.default;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _DragEvent = __webpack_require__(14);\n\nObject.keys(_DragEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _DragEvent[key];\n }\n });\n});\n\nvar _DraggableEvent = __webpack_require__(13);\n\nObject.keys(_DraggableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _DraggableEvent[key];\n }\n });\n});\n\nvar _Plugins = __webpack_require__(12);\n\nObject.keys(_Plugins).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _Plugins[key];\n }\n });\n});\n\nvar _Sensors = __webpack_require__(6);\n\nObject.keys(_Sensors).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _Sensors[key];\n }\n });\n});\n\nvar _Draggable = __webpack_require__(39);\n\nvar _Draggable2 = _interopRequireDefault(_Draggable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Draggable2.default;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Sensor = __webpack_require__(4);\n\nObject.defineProperty(exports, 'Sensor', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Sensor).default;\n }\n});\n\nvar _MouseSensor = __webpack_require__(48);\n\nObject.defineProperty(exports, 'MouseSensor', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_MouseSensor).default;\n }\n});\n\nvar _TouchSensor = __webpack_require__(45);\n\nObject.defineProperty(exports, 'TouchSensor', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_TouchSensor).default;\n }\n});\n\nvar _DragSensor = __webpack_require__(43);\n\nObject.defineProperty(exports, 'DragSensor', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_DragSensor).default;\n }\n});\n\nvar _ForceTouchSensor = __webpack_require__(41);\n\nObject.defineProperty(exports, 'ForceTouchSensor', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_ForceTouchSensor).default;\n }\n});\n\nvar _SensorEvent = __webpack_require__(3);\n\nObject.keys(_SensorEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SensorEvent[key];\n }\n });\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SnappableEvent = __webpack_require__(20);\n\nObject.keys(_SnappableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SnappableEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _CollidableEvent = __webpack_require__(25);\n\nObject.keys(_CollidableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _CollidableEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SortableEvent = __webpack_require__(29);\n\nObject.keys(_SortableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SortableEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SwappableEvent = __webpack_require__(32);\n\nObject.keys(_SwappableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SwappableEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _DroppableEvent = __webpack_require__(35);\n\nObject.keys(_DroppableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _DroppableEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Announcement = __webpack_require__(68);\n\nObject.defineProperty(exports, 'Announcement', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Announcement).default;\n }\n});\nObject.defineProperty(exports, 'defaultAnnouncementOptions', {\n enumerable: true,\n get: function () {\n return _Announcement.defaultOptions;\n }\n});\n\nvar _Focusable = __webpack_require__(65);\n\nObject.defineProperty(exports, 'Focusable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Focusable).default;\n }\n});\n\nvar _Mirror = __webpack_require__(63);\n\nObject.defineProperty(exports, 'Mirror', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Mirror).default;\n }\n});\nObject.defineProperty(exports, 'defaultMirrorOptions', {\n enumerable: true,\n get: function () {\n return _Mirror.defaultOptions;\n }\n});\n\nvar _Scrollable = __webpack_require__(59);\n\nObject.defineProperty(exports, 'Scrollable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Scrollable).default;\n }\n});\nObject.defineProperty(exports, 'defaultScrollableOptions', {\n enumerable: true,\n get: function () {\n return _Scrollable.defaultOptions;\n }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _DraggableEvent = __webpack_require__(69);\n\nObject.keys(_DraggableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _DraggableEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _DragEvent = __webpack_require__(71);\n\nObject.keys(_DragEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _DragEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _AbstractPlugin = __webpack_require__(0);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onSortableSorted = Symbol('onSortableSorted');\nconst onSortableSort = Symbol('onSortableSort');\n\n/**\n * SortAnimation default options\n * @property {Object} defaultOptions\n * @property {Number} defaultOptions.duration\n * @property {String} defaultOptions.easingFunction\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {\n duration: 150,\n easingFunction: 'ease-in-out'\n};\n\n/**\n * SortAnimation plugin adds sort animation for sortable\n * @class SortAnimation\n * @module SortAnimation\n * @extends AbstractPlugin\n */\nclass SortAnimation extends _AbstractPlugin2.default {\n /**\n * SortAnimation constructor.\n * @constructs SortAnimation\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * SortAnimation options\n * @property {Object} options\n * @property {Number} defaultOptions.duration\n * @property {String} defaultOptions.easingFunction\n * @type {Object}\n */\n this.options = _extends({}, defaultOptions, this.getOptions());\n\n /**\n * Last animation frame\n * @property {Number} lastAnimationFrame\n * @type {Number}\n */\n this.lastAnimationFrame = null;\n this.lastElements = [];\n\n this[onSortableSorted] = this[onSortableSorted].bind(this);\n this[onSortableSort] = this[onSortableSort].bind(this);\n }\n\n /**\n * Attaches plugins event listeners\n */\n attach() {\n this.draggable.on('sortable:sort', this[onSortableSort]);\n this.draggable.on('sortable:sorted', this[onSortableSorted]);\n }\n\n /**\n * Detaches plugins event listeners\n */\n detach() {\n this.draggable.off('sortable:sort', this[onSortableSort]);\n this.draggable.off('sortable:sorted', this[onSortableSorted]);\n }\n\n /**\n * Returns options passed through draggable\n * @return {Object}\n */\n getOptions() {\n return this.draggable.options.sortAnimation || {};\n }\n\n /**\n * Sortable sort handler\n * @param {SortableSortEvent} sortableEvent\n * @private\n */\n [onSortableSort]({ dragEvent }) {\n const { sourceContainer } = dragEvent;\n const elements = this.draggable.getDraggableElementsForContainer(sourceContainer);\n this.lastElements = Array.from(elements).map(el => {\n return {\n domEl: el,\n offsetTop: el.offsetTop,\n offsetLeft: el.offsetLeft\n };\n });\n }\n\n /**\n * Sortable sorted handler\n * @param {SortableSortedEvent} sortableEvent\n * @private\n */\n [onSortableSorted]({ oldIndex, newIndex }) {\n if (oldIndex === newIndex) {\n return;\n }\n\n const effectedElements = [];\n let start;\n let end;\n let num;\n if (oldIndex > newIndex) {\n start = newIndex;\n end = oldIndex - 1;\n num = 1;\n } else {\n start = oldIndex + 1;\n end = newIndex;\n num = -1;\n }\n\n for (let i = start; i <= end; i++) {\n const from = this.lastElements[i];\n const to = this.lastElements[i + num];\n effectedElements.push({ from, to });\n }\n cancelAnimationFrame(this.lastAnimationFrame);\n\n // Can be done in a separate frame\n this.lastAnimationFrame = requestAnimationFrame(() => {\n effectedElements.forEach(element => animate(element, this.options));\n });\n }\n}\n\nexports.default = SortAnimation; /**\n * Animates two elements\n * @param {Object} element\n * @param {Object} element.from\n * @param {Object} element.to\n * @param {Object} options\n * @param {Number} options.duration\n * @param {String} options.easingFunction\n * @private\n */\n\nfunction animate({ from, to }, { duration, easingFunction }) {\n const domEl = from.domEl;\n const x = from.offsetLeft - to.offsetLeft;\n const y = from.offsetTop - to.offsetTop;\n\n domEl.style.pointerEvents = 'none';\n domEl.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n\n requestAnimationFrame(() => {\n domEl.addEventListener('transitionend', resetElementOnTransitionEnd);\n domEl.style.transition = `transform ${duration}ms ${easingFunction}`;\n domEl.style.transform = '';\n });\n}\n\n/**\n * Resets animation style properties after animation has completed\n * @param {Event} event\n * @private\n */\nfunction resetElementOnTransitionEnd(event) {\n event.target.style.transition = '';\n event.target.style.pointerEvents = '';\n event.target.removeEventListener('transitionend', resetElementOnTransitionEnd);\n}\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _SortAnimation = __webpack_require__(15);\n\nvar _SortAnimation2 = _interopRequireDefault(_SortAnimation);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _SortAnimation2.default;\nexports.defaultOptions = _SortAnimation.defaultOptions;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _AbstractPlugin = __webpack_require__(0);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onSortableSorted = Symbol('onSortableSorted');\n\n/**\n * SwapAnimation default options\n * @property {Object} defaultOptions\n * @property {Number} defaultOptions.duration\n * @property {String} defaultOptions.easingFunction\n * @property {Boolean} defaultOptions.horizontal\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {\n duration: 150,\n easingFunction: 'ease-in-out',\n horizontal: false\n};\n\n/**\n * SwapAnimation plugin adds swap animations for sortable\n * @class SwapAnimation\n * @module SwapAnimation\n * @extends AbstractPlugin\n */\nclass SwapAnimation extends _AbstractPlugin2.default {\n /**\n * SwapAnimation constructor.\n * @constructs SwapAnimation\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * SwapAnimation options\n * @property {Object} options\n * @property {Number} defaultOptions.duration\n * @property {String} defaultOptions.easingFunction\n * @type {Object}\n */\n this.options = _extends({}, defaultOptions, this.getOptions());\n\n /**\n * Last animation frame\n * @property {Number} lastAnimationFrame\n * @type {Number}\n */\n this.lastAnimationFrame = null;\n\n this[onSortableSorted] = this[onSortableSorted].bind(this);\n }\n\n /**\n * Attaches plugins event listeners\n */\n attach() {\n this.draggable.on('sortable:sorted', this[onSortableSorted]);\n }\n\n /**\n * Detaches plugins event listeners\n */\n detach() {\n this.draggable.off('sortable:sorted', this[onSortableSorted]);\n }\n\n /**\n * Returns options passed through draggable\n * @return {Object}\n */\n getOptions() {\n return this.draggable.options.swapAnimation || {};\n }\n\n /**\n * Sortable sorted handler\n * @param {SortableSortedEvent} sortableEvent\n * @private\n */\n [onSortableSorted]({ oldIndex, newIndex, dragEvent }) {\n const { source, over } = dragEvent;\n\n cancelAnimationFrame(this.lastAnimationFrame);\n\n // Can be done in a separate frame\n this.lastAnimationFrame = requestAnimationFrame(() => {\n if (oldIndex >= newIndex) {\n animate(source, over, this.options);\n } else {\n animate(over, source, this.options);\n }\n });\n }\n}\n\nexports.default = SwapAnimation; /**\n * Animates two elements\n * @param {HTMLElement} from\n * @param {HTMLElement} to\n * @param {Object} options\n * @param {Number} options.duration\n * @param {String} options.easingFunction\n * @param {String} options.horizontal\n * @private\n */\n\nfunction animate(from, to, { duration, easingFunction, horizontal }) {\n for (const element of [from, to]) {\n element.style.pointerEvents = 'none';\n }\n\n if (horizontal) {\n const width = from.offsetWidth;\n from.style.transform = `translate3d(${width}px, 0, 0)`;\n to.style.transform = `translate3d(-${width}px, 0, 0)`;\n } else {\n const height = from.offsetHeight;\n from.style.transform = `translate3d(0, ${height}px, 0)`;\n to.style.transform = `translate3d(0, -${height}px, 0)`;\n }\n\n requestAnimationFrame(() => {\n for (const element of [from, to]) {\n element.addEventListener('transitionend', resetElementOnTransitionEnd);\n element.style.transition = `transform ${duration}ms ${easingFunction}`;\n element.style.transform = '';\n }\n });\n}\n\n/**\n * Resets animation style properties after animation has completed\n * @param {Event} event\n * @private\n */\nfunction resetElementOnTransitionEnd(event) {\n event.target.style.transition = '';\n event.target.style.pointerEvents = '';\n event.target.removeEventListener('transitionend', resetElementOnTransitionEnd);\n}\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _SwapAnimation = __webpack_require__(17);\n\nvar _SwapAnimation2 = _interopRequireDefault(_SwapAnimation);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _SwapAnimation2.default;\nexports.defaultOptions = _SwapAnimation.defaultOptions;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _AbstractPlugin = __webpack_require__(0);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _SnappableEvent = __webpack_require__(7);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragStop = Symbol('onDragStop');\nconst onDragOver = Symbol('onDragOver');\nconst onDragOut = Symbol('onDragOut');\nconst onMirrorCreated = Symbol('onMirrorCreated');\nconst onMirrorDestroy = Symbol('onMirrorDestroy');\n\n/**\n * Snappable plugin which snaps draggable elements into place\n * @class Snappable\n * @module Snappable\n * @extends AbstractPlugin\n */\nclass Snappable extends _AbstractPlugin2.default {\n /**\n * Snappable constructor.\n * @constructs Snappable\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * Keeps track of the first source element\n * @property {HTMLElement|null} firstSource\n */\n this.firstSource = null;\n\n /**\n * Keeps track of the mirror element\n * @property {HTMLElement} mirror\n */\n this.mirror = null;\n\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n this[onDragOver] = this[onDragOver].bind(this);\n this[onDragOut] = this[onDragOut].bind(this);\n this[onMirrorCreated] = this[onMirrorCreated].bind(this);\n this[onMirrorDestroy] = this[onMirrorDestroy].bind(this);\n }\n\n /**\n * Attaches plugins event listeners\n */\n attach() {\n this.draggable.on('drag:start', this[onDragStart]).on('drag:stop', this[onDragStop]).on('drag:over', this[onDragOver]).on('drag:out', this[onDragOut]).on('droppable:over', this[onDragOver]).on('droppable:out', this[onDragOut]).on('mirror:created', this[onMirrorCreated]).on('mirror:destroy', this[onMirrorDestroy]);\n }\n\n /**\n * Detaches plugins event listeners\n */\n detach() {\n this.draggable.off('drag:start', this[onDragStart]).off('drag:stop', this[onDragStop]).off('drag:over', this[onDragOver]).off('drag:out', this[onDragOut]).off('droppable:over', this[onDragOver]).off('droppable:out', this[onDragOut]).off('mirror:created', this[onMirrorCreated]).off('mirror:destroy', this[onMirrorDestroy]);\n }\n\n /**\n * Drag start handler\n * @private\n * @param {DragStartEvent} event - Drag start event\n */\n [onDragStart](event) {\n if (event.canceled()) {\n return;\n }\n\n this.firstSource = event.source;\n }\n\n /**\n * Drag stop handler\n * @private\n * @param {DragStopEvent} event - Drag stop event\n */\n [onDragStop]() {\n this.firstSource = null;\n }\n\n /**\n * Drag over handler\n * @private\n * @param {DragOverEvent|DroppableOverEvent} event - Drag over event\n */\n [onDragOver](event) {\n if (event.canceled()) {\n return;\n }\n\n const source = event.source || event.dragEvent.source;\n\n if (source === this.firstSource) {\n this.firstSource = null;\n return;\n }\n\n const snapInEvent = new _SnappableEvent.SnapInEvent({\n dragEvent: event,\n snappable: event.over || event.droppable\n });\n\n this.draggable.trigger(snapInEvent);\n\n if (snapInEvent.canceled()) {\n return;\n }\n\n if (this.mirror) {\n this.mirror.style.display = 'none';\n }\n\n source.classList.remove(...this.draggable.getClassNamesFor('source:dragging'));\n source.classList.add(...this.draggable.getClassNamesFor('source:placed'));\n\n // Need to cancel this in drag out\n setTimeout(() => {\n source.classList.remove(...this.draggable.getClassNamesFor('source:placed'));\n }, this.draggable.options.placedTimeout);\n }\n\n /**\n * Drag out handler\n * @private\n * @param {DragOutEvent|DroppableOutEvent} event - Drag out event\n */\n [onDragOut](event) {\n if (event.canceled()) {\n return;\n }\n\n const source = event.source || event.dragEvent.source;\n\n const snapOutEvent = new _SnappableEvent.SnapOutEvent({\n dragEvent: event,\n snappable: event.over || event.droppable\n });\n\n this.draggable.trigger(snapOutEvent);\n\n if (snapOutEvent.canceled()) {\n return;\n }\n\n if (this.mirror) {\n this.mirror.style.display = '';\n }\n\n source.classList.add(...this.draggable.getClassNamesFor('source:dragging'));\n }\n\n /**\n * Mirror created handler\n * @param {MirrorCreatedEvent} mirrorEvent\n * @private\n */\n [onMirrorCreated]({ mirror }) {\n this.mirror = mirror;\n }\n\n /**\n * Mirror destroy handler\n * @param {MirrorDestroyEvent} mirrorEvent\n * @private\n */\n [onMirrorDestroy]() {\n this.mirror = null;\n }\n}\nexports.default = Snappable;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SnapOutEvent = exports.SnapInEvent = exports.SnapEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(1);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base snap event\n * @class SnapEvent\n * @module SnapEvent\n * @extends AbstractEvent\n */\nclass SnapEvent extends _AbstractEvent2.default {\n\n /**\n * Drag event that triggered this snap event\n * @property dragEvent\n * @type {DragEvent}\n * @readonly\n */\n get dragEvent() {\n return this.data.dragEvent;\n }\n\n /**\n * Snappable element\n * @property snappable\n * @type {HTMLElement}\n * @readonly\n */\n get snappable() {\n return this.data.snappable;\n }\n}\n\nexports.SnapEvent = SnapEvent; /**\n * Snap in event\n * @class SnapInEvent\n * @module SnapInEvent\n * @extends SnapEvent\n */\n\nSnapEvent.type = 'snap';\nclass SnapInEvent extends SnapEvent {}\n\nexports.SnapInEvent = SnapInEvent; /**\n * Snap out event\n * @class SnapOutEvent\n * @module SnapOutEvent\n * @extends SnapEvent\n */\n\nSnapInEvent.type = 'snap:in';\nSnapInEvent.cancelable = true;\nclass SnapOutEvent extends SnapEvent {}\nexports.SnapOutEvent = SnapOutEvent;\nSnapOutEvent.type = 'snap:out';\nSnapOutEvent.cancelable = true;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SnappableEvent = __webpack_require__(7);\n\nObject.keys(_SnappableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SnappableEvent[key];\n }\n });\n});\n\nvar _Snappable = __webpack_require__(19);\n\nvar _Snappable2 = _interopRequireDefault(_Snappable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Snappable2.default;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _AbstractPlugin = __webpack_require__(0);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _utils = __webpack_require__(2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onMirrorCreated = Symbol('onMirrorCreated');\nconst onMirrorDestroy = Symbol('onMirrorDestroy');\nconst onDragOver = Symbol('onDragOver');\nconst resize = Symbol('resize');\n\n/**\n * ResizeMirror default options\n * @property {Object} defaultOptions\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {};\n\n/**\n * The ResizeMirror plugin resizes the mirror element to the dimensions of the draggable element that the mirror is hovering over\n * @class ResizeMirror\n * @module ResizeMirror\n * @extends AbstractPlugin\n */\nclass ResizeMirror extends _AbstractPlugin2.default {\n /**\n * ResizeMirror constructor.\n * @constructs ResizeMirror\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * ResizeMirror options\n * @property {Object} options\n * @type {Object}\n */\n this.options = _extends({}, defaultOptions, this.getOptions());\n\n /**\n * ResizeMirror remembers the last width when resizing the mirror\n * to avoid additional writes to the DOM\n * @property {number} lastWidth\n */\n this.lastWidth = 0;\n\n /**\n * ResizeMirror remembers the last height when resizing the mirror\n * to avoid additional writes to the DOM\n * @property {number} lastHeight\n */\n this.lastHeight = 0;\n\n /**\n * Keeps track of the mirror element\n * @property {HTMLElement} mirror\n */\n this.mirror = null;\n\n this[onMirrorCreated] = this[onMirrorCreated].bind(this);\n this[onMirrorDestroy] = this[onMirrorDestroy].bind(this);\n this[onDragOver] = this[onDragOver].bind(this);\n }\n\n /**\n * Attaches plugins event listeners\n */\n attach() {\n this.draggable.on('mirror:created', this[onMirrorCreated]).on('drag:over', this[onDragOver]).on('drag:over:container', this[onDragOver]);\n }\n\n /**\n * Detaches plugins event listeners\n */\n detach() {\n this.draggable.off('mirror:created', this[onMirrorCreated]).off('mirror:destroy', this[onMirrorDestroy]).off('drag:over', this[onDragOver]).off('drag:over:container', this[onDragOver]);\n }\n\n /**\n * Returns options passed through draggable\n * @return {Object}\n */\n getOptions() {\n return this.draggable.options.resizeMirror || {};\n }\n\n /**\n * Mirror created handler\n * @param {MirrorCreatedEvent} mirrorEvent\n * @private\n */\n [onMirrorCreated]({ mirror }) {\n this.mirror = mirror;\n }\n\n /**\n * Mirror destroy handler\n * @param {MirrorDestroyEvent} mirrorEvent\n * @private\n */\n [onMirrorDestroy]() {\n this.mirror = null;\n }\n\n /**\n * Drag over handler\n * @param {DragOverEvent | DragOverContainer} dragEvent\n * @private\n */\n [onDragOver](dragEvent) {\n this[resize](dragEvent);\n }\n\n /**\n * Resize function for\n * @param {DragOverEvent | DragOverContainer} dragEvent\n * @private\n */\n [resize]({ overContainer, over }) {\n requestAnimationFrame(() => {\n if (!this.mirror.parentNode) {\n return;\n }\n\n if (this.mirror.parentNode !== overContainer) {\n overContainer.appendChild(this.mirror);\n }\n\n const overElement = over || this.draggable.getDraggableElementsForContainer(overContainer)[0];\n\n if (!overElement) {\n return;\n }\n\n (0, _utils.requestNextAnimationFrame)(() => {\n const overRect = overElement.getBoundingClientRect();\n\n if (this.lastHeight === overRect.height && this.lastWidth === overRect.width) {\n return;\n }\n\n this.mirror.style.width = `${overRect.width}px`;\n this.mirror.style.height = `${overRect.height}px`;\n\n this.lastWidth = overRect.width;\n this.lastHeight = overRect.height;\n });\n });\n }\n}\nexports.default = ResizeMirror;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _ResizeMirror = __webpack_require__(22);\n\nvar _ResizeMirror2 = _interopRequireDefault(_ResizeMirror);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _ResizeMirror2.default;\nexports.defaultOptions = _ResizeMirror.defaultOptions;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _AbstractPlugin = __webpack_require__(0);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _utils = __webpack_require__(2);\n\nvar _CollidableEvent = __webpack_require__(8);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragMove = Symbol('onDragMove');\nconst onDragStop = Symbol('onDragStop');\nconst onRequestAnimationFrame = Symbol('onRequestAnimationFrame');\n\n/**\n * Collidable plugin which detects colliding elements while dragging\n * @class Collidable\n * @module Collidable\n * @extends AbstractPlugin\n */\nclass Collidable extends _AbstractPlugin2.default {\n /**\n * Collidable constructor.\n * @constructs Collidable\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * Keeps track of currently colliding elements\n * @property {HTMLElement|null} currentlyCollidingElement\n * @type {HTMLElement|null}\n */\n this.currentlyCollidingElement = null;\n\n /**\n * Keeps track of currently colliding elements\n * @property {HTMLElement|null} lastCollidingElement\n * @type {HTMLElement|null}\n */\n this.lastCollidingElement = null;\n\n /**\n * Animation frame for finding colliding elements\n * @property {Number|null} currentAnimationFrame\n * @type {Number|null}\n */\n this.currentAnimationFrame = null;\n\n this[onDragMove] = this[onDragMove].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n this[onRequestAnimationFrame] = this[onRequestAnimationFrame].bind(this);\n }\n\n /**\n * Attaches plugins event listeners\n */\n attach() {\n this.draggable.on('drag:move', this[onDragMove]).on('drag:stop', this[onDragStop]);\n }\n\n /**\n * Detaches plugins event listeners\n */\n detach() {\n this.draggable.off('drag:move', this[onDragMove]).off('drag:stop', this[onDragStop]);\n }\n\n /**\n * Returns current collidables based on `collidables` option\n * @return {HTMLElement[]}\n */\n getCollidables() {\n const collidables = this.draggable.options.collidables;\n\n if (typeof collidables === 'string') {\n return Array.prototype.slice.call(document.querySelectorAll(collidables));\n } else if (collidables instanceof NodeList || collidables instanceof Array) {\n return Array.prototype.slice.call(collidables);\n } else if (collidables instanceof HTMLElement) {\n return [collidables];\n } else if (typeof collidables === 'function') {\n return collidables();\n } else {\n return [];\n }\n }\n\n /**\n * Drag move handler\n * @private\n * @param {DragMoveEvent} event - Drag move event\n */\n [onDragMove](event) {\n const target = event.sensorEvent.target;\n\n this.currentAnimationFrame = requestAnimationFrame(this[onRequestAnimationFrame](target));\n\n if (this.currentlyCollidingElement) {\n event.cancel();\n }\n\n const collidableInEvent = new _CollidableEvent.CollidableInEvent({\n dragEvent: event,\n collidingElement: this.currentlyCollidingElement\n });\n\n const collidableOutEvent = new _CollidableEvent.CollidableOutEvent({\n dragEvent: event,\n collidingElement: this.lastCollidingElement\n });\n\n const enteringCollidable = Boolean(this.currentlyCollidingElement && this.lastCollidingElement !== this.currentlyCollidingElement);\n const leavingCollidable = Boolean(!this.currentlyCollidingElement && this.lastCollidingElement);\n\n if (enteringCollidable) {\n if (this.lastCollidingElement) {\n this.draggable.trigger(collidableOutEvent);\n }\n\n this.draggable.trigger(collidableInEvent);\n } else if (leavingCollidable) {\n this.draggable.trigger(collidableOutEvent);\n }\n\n this.lastCollidingElement = this.currentlyCollidingElement;\n }\n\n /**\n * Drag stop handler\n * @private\n * @param {DragStopEvent} event - Drag stop event\n */\n [onDragStop](event) {\n const lastCollidingElement = this.currentlyCollidingElement || this.lastCollidingElement;\n const collidableOutEvent = new _CollidableEvent.CollidableOutEvent({\n dragEvent: event,\n collidingElement: lastCollidingElement\n });\n\n if (lastCollidingElement) {\n this.draggable.trigger(collidableOutEvent);\n }\n\n this.lastCollidingElement = null;\n this.currentlyCollidingElement = null;\n }\n\n /**\n * Animation frame function\n * @private\n * @param {HTMLElement} target - Current move target\n * @return {Function}\n */\n [onRequestAnimationFrame](target) {\n return () => {\n const collidables = this.getCollidables();\n this.currentlyCollidingElement = (0, _utils.closest)(target, element => collidables.includes(element));\n };\n }\n}\nexports.default = Collidable;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CollidableOutEvent = exports.CollidableInEvent = exports.CollidableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(1);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base collidable event\n * @class CollidableEvent\n * @module CollidableEvent\n * @extends AbstractEvent\n */\nclass CollidableEvent extends _AbstractEvent2.default {\n\n /**\n * Drag event that triggered this colliable event\n * @property dragEvent\n * @type {DragEvent}\n * @readonly\n */\n get dragEvent() {\n return this.data.dragEvent;\n }\n}\n\nexports.CollidableEvent = CollidableEvent; /**\n * Collidable in event\n * @class CollidableInEvent\n * @module CollidableInEvent\n * @extends CollidableEvent\n */\n\nCollidableEvent.type = 'collidable';\nclass CollidableInEvent extends CollidableEvent {\n\n /**\n * Element you are currently colliding with\n * @property collidingElement\n * @type {HTMLElement}\n * @readonly\n */\n get collidingElement() {\n return this.data.collidingElement;\n }\n}\n\nexports.CollidableInEvent = CollidableInEvent; /**\n * Collidable out event\n * @class CollidableOutEvent\n * @module CollidableOutEvent\n * @extends CollidableEvent\n */\n\nCollidableInEvent.type = 'collidable:in';\nclass CollidableOutEvent extends CollidableEvent {\n\n /**\n * Element you were previously colliding with\n * @property collidingElement\n * @type {HTMLElement}\n * @readonly\n */\n get collidingElement() {\n return this.data.collidingElement;\n }\n}\nexports.CollidableOutEvent = CollidableOutEvent;\nCollidableOutEvent.type = 'collidable:out';\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _CollidableEvent = __webpack_require__(8);\n\nObject.keys(_CollidableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _CollidableEvent[key];\n }\n });\n});\n\nvar _Collidable = __webpack_require__(24);\n\nvar _Collidable2 = _interopRequireDefault(_Collidable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Collidable2.default;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Collidable = __webpack_require__(26);\n\nObject.defineProperty(exports, 'Collidable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Collidable).default;\n }\n});\n\nvar _ResizeMirror = __webpack_require__(23);\n\nObject.defineProperty(exports, 'ResizeMirror', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_ResizeMirror).default;\n }\n});\nObject.defineProperty(exports, 'defaultResizeMirrorOptions', {\n enumerable: true,\n get: function () {\n return _ResizeMirror.defaultOptions;\n }\n});\n\nvar _Snappable = __webpack_require__(21);\n\nObject.defineProperty(exports, 'Snappable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Snappable).default;\n }\n});\n\nvar _SwapAnimation = __webpack_require__(18);\n\nObject.defineProperty(exports, 'SwapAnimation', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_SwapAnimation).default;\n }\n});\nObject.defineProperty(exports, 'defaultSwapAnimationOptions', {\n enumerable: true,\n get: function () {\n return _SwapAnimation.defaultOptions;\n }\n});\n\nvar _SortAnimation = __webpack_require__(16);\n\nObject.defineProperty(exports, 'SortAnimation', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_SortAnimation).default;\n }\n});\nObject.defineProperty(exports, 'defaultSortAnimationOptions', {\n enumerable: true,\n get: function () {\n return _SortAnimation.defaultOptions;\n }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Draggable = __webpack_require__(5);\n\nvar _Draggable2 = _interopRequireDefault(_Draggable);\n\nvar _SortableEvent = __webpack_require__(9);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragOverContainer = Symbol('onDragOverContainer');\nconst onDragOver = Symbol('onDragOver');\nconst onDragStop = Symbol('onDragStop');\n\n/**\n * Returns announcement message when a Draggable element has been sorted with another Draggable element\n * or moved into a new container\n * @param {SortableSortedEvent} sortableEvent\n * @return {String}\n */\nfunction onSortableSortedDefaultAnnouncement({ dragEvent }) {\n const sourceText = dragEvent.source.textContent.trim() || dragEvent.source.id || 'sortable element';\n\n if (dragEvent.over) {\n const overText = dragEvent.over.textContent.trim() || dragEvent.over.id || 'sortable element';\n const isFollowing = dragEvent.source.compareDocumentPosition(dragEvent.over) & Node.DOCUMENT_POSITION_FOLLOWING;\n\n if (isFollowing) {\n return `Placed ${sourceText} after ${overText}`;\n } else {\n return `Placed ${sourceText} before ${overText}`;\n }\n } else {\n // need to figure out how to compute container name\n return `Placed ${sourceText} into a different container`;\n }\n}\n\n/**\n * @const {Object} defaultAnnouncements\n * @const {Function} defaultAnnouncements['sortable:sorted']\n */\nconst defaultAnnouncements = {\n 'sortable:sorted': onSortableSortedDefaultAnnouncement\n};\n\n/**\n * Sortable is built on top of Draggable and allows sorting of draggable elements. Sortable will keep\n * track of the original index and emits the new index as you drag over draggable elements.\n * @class Sortable\n * @module Sortable\n * @extends Draggable\n */\nclass Sortable extends _Draggable2.default {\n /**\n * Sortable constructor.\n * @constructs Sortable\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Sortable containers\n * @param {Object} options - Options for Sortable\n */\n constructor(containers = [], options = {}) {\n super(containers, _extends({}, options, {\n announcements: _extends({}, defaultAnnouncements, options.announcements || {})\n }));\n\n /**\n * start index of source on drag start\n * @property startIndex\n * @type {Number}\n */\n this.startIndex = null;\n\n /**\n * start container on drag start\n * @property startContainer\n * @type {HTMLElement}\n * @default null\n */\n this.startContainer = null;\n\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragOverContainer] = this[onDragOverContainer].bind(this);\n this[onDragOver] = this[onDragOver].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n\n this.on('drag:start', this[onDragStart]).on('drag:over:container', this[onDragOverContainer]).on('drag:over', this[onDragOver]).on('drag:stop', this[onDragStop]);\n }\n\n /**\n * Destroys Sortable instance.\n */\n destroy() {\n super.destroy();\n\n this.off('drag:start', this[onDragStart]).off('drag:over:container', this[onDragOverContainer]).off('drag:over', this[onDragOver]).off('drag:stop', this[onDragStop]);\n }\n\n /**\n * Returns true index of element within its container during drag operation, i.e. excluding mirror and original source\n * @param {HTMLElement} element - An element\n * @return {Number}\n */\n index(element) {\n return this.getSortableElementsForContainer(element.parentNode).indexOf(element);\n }\n\n /**\n * Returns sortable elements for a given container, excluding the mirror and\n * original source element if present\n * @param {HTMLElement} container\n * @return {HTMLElement[]}\n */\n getSortableElementsForContainer(container) {\n const allSortableElements = container.querySelectorAll(this.options.draggable);\n\n return [...allSortableElements].filter(childElement => {\n return childElement !== this.originalSource && childElement !== this.mirror && childElement.parentNode === container;\n });\n }\n\n /**\n * Drag start handler\n * @private\n * @param {DragStartEvent} event - Drag start event\n */\n [onDragStart](event) {\n this.startContainer = event.source.parentNode;\n this.startIndex = this.index(event.source);\n\n const sortableStartEvent = new _SortableEvent.SortableStartEvent({\n dragEvent: event,\n startIndex: this.startIndex,\n startContainer: this.startContainer\n });\n\n this.trigger(sortableStartEvent);\n\n if (sortableStartEvent.canceled()) {\n event.cancel();\n }\n }\n\n /**\n * Drag over container handler\n * @private\n * @param {DragOverContainerEvent} event - Drag over container event\n */\n [onDragOverContainer](event) {\n if (event.canceled()) {\n return;\n }\n\n const { source, over, overContainer } = event;\n const oldIndex = this.index(source);\n\n const sortableSortEvent = new _SortableEvent.SortableSortEvent({\n dragEvent: event,\n currentIndex: oldIndex,\n source,\n over\n });\n\n this.trigger(sortableSortEvent);\n\n if (sortableSortEvent.canceled()) {\n return;\n }\n\n const children = this.getSortableElementsForContainer(overContainer);\n const moves = move({ source, over, overContainer, children });\n\n if (!moves) {\n return;\n }\n\n const { oldContainer, newContainer } = moves;\n const newIndex = this.index(event.source);\n\n const sortableSortedEvent = new _SortableEvent.SortableSortedEvent({\n dragEvent: event,\n oldIndex,\n newIndex,\n oldContainer,\n newContainer\n });\n\n this.trigger(sortableSortedEvent);\n }\n\n /**\n * Drag over handler\n * @private\n * @param {DragOverEvent} event - Drag over event\n */\n [onDragOver](event) {\n if (event.over === event.originalSource || event.over === event.source) {\n return;\n }\n\n const { source, over, overContainer } = event;\n const oldIndex = this.index(source);\n\n const sortableSortEvent = new _SortableEvent.SortableSortEvent({\n dragEvent: event,\n currentIndex: oldIndex,\n source,\n over\n });\n\n this.trigger(sortableSortEvent);\n\n if (sortableSortEvent.canceled()) {\n return;\n }\n\n const children = this.getDraggableElementsForContainer(overContainer);\n const moves = move({ source, over, overContainer, children });\n\n if (!moves) {\n return;\n }\n\n const { oldContainer, newContainer } = moves;\n const newIndex = this.index(source);\n\n const sortableSortedEvent = new _SortableEvent.SortableSortedEvent({\n dragEvent: event,\n oldIndex,\n newIndex,\n oldContainer,\n newContainer\n });\n\n this.trigger(sortableSortedEvent);\n }\n\n /**\n * Drag stop handler\n * @private\n * @param {DragStopEvent} event - Drag stop event\n */\n [onDragStop](event) {\n const sortableStopEvent = new _SortableEvent.SortableStopEvent({\n dragEvent: event,\n oldIndex: this.startIndex,\n newIndex: this.index(event.source),\n oldContainer: this.startContainer,\n newContainer: event.source.parentNode\n });\n\n this.trigger(sortableStopEvent);\n\n this.startIndex = null;\n this.startContainer = null;\n }\n}\n\nexports.default = Sortable;\nfunction index(element) {\n return Array.prototype.indexOf.call(element.parentNode.children, element);\n}\n\nfunction move({ source, over, overContainer, children }) {\n const emptyOverContainer = !children.length;\n const differentContainer = source.parentNode !== overContainer;\n const sameContainer = over && source.parentNode === over.parentNode;\n\n if (emptyOverContainer) {\n return moveInsideEmptyContainer(source, overContainer);\n } else if (sameContainer) {\n return moveWithinContainer(source, over);\n } else if (differentContainer) {\n return moveOutsideContainer(source, over, overContainer);\n } else {\n return null;\n }\n}\n\nfunction moveInsideEmptyContainer(source, overContainer) {\n const oldContainer = source.parentNode;\n\n overContainer.appendChild(source);\n\n return { oldContainer, newContainer: overContainer };\n}\n\nfunction moveWithinContainer(source, over) {\n const oldIndex = index(source);\n const newIndex = index(over);\n\n if (oldIndex < newIndex) {\n source.parentNode.insertBefore(source, over.nextElementSibling);\n } else {\n source.parentNode.insertBefore(source, over);\n }\n\n return { oldContainer: source.parentNode, newContainer: source.parentNode };\n}\n\nfunction moveOutsideContainer(source, over, overContainer) {\n const oldContainer = source.parentNode;\n\n if (over) {\n over.parentNode.insertBefore(source, over);\n } else {\n // need to figure out proper position\n overContainer.appendChild(source);\n }\n\n return { oldContainer, newContainer: source.parentNode };\n}\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SortableStopEvent = exports.SortableSortedEvent = exports.SortableSortEvent = exports.SortableStartEvent = exports.SortableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(1);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base sortable event\n * @class SortableEvent\n * @module SortableEvent\n * @extends AbstractEvent\n */\nclass SortableEvent extends _AbstractEvent2.default {\n\n /**\n * Original drag event that triggered this sortable event\n * @property dragEvent\n * @type {DragEvent}\n * @readonly\n */\n get dragEvent() {\n return this.data.dragEvent;\n }\n}\n\nexports.SortableEvent = SortableEvent; /**\n * Sortable start event\n * @class SortableStartEvent\n * @module SortableStartEvent\n * @extends SortableEvent\n */\n\nSortableEvent.type = 'sortable';\nclass SortableStartEvent extends SortableEvent {\n\n /**\n * Start index of source on sortable start\n * @property startIndex\n * @type {Number}\n * @readonly\n */\n get startIndex() {\n return this.data.startIndex;\n }\n\n /**\n * Start container on sortable start\n * @property startContainer\n * @type {HTMLElement}\n * @readonly\n */\n get startContainer() {\n return this.data.startContainer;\n }\n}\n\nexports.SortableStartEvent = SortableStartEvent; /**\n * Sortable sort event\n * @class SortableSortEvent\n * @module SortableSortEvent\n * @extends SortableEvent\n */\n\nSortableStartEvent.type = 'sortable:start';\nSortableStartEvent.cancelable = true;\nclass SortableSortEvent extends SortableEvent {\n\n /**\n * Index of current draggable element\n * @property currentIndex\n * @type {Number}\n * @readonly\n */\n get currentIndex() {\n return this.data.currentIndex;\n }\n\n /**\n * Draggable element you are hovering over\n * @property over\n * @type {HTMLElement}\n * @readonly\n */\n get over() {\n return this.data.over;\n }\n\n /**\n * Draggable container element you are hovering over\n * @property overContainer\n * @type {HTMLElement}\n * @readonly\n */\n get overContainer() {\n return this.data.dragEvent.overContainer;\n }\n}\n\nexports.SortableSortEvent = SortableSortEvent; /**\n * Sortable sorted event\n * @class SortableSortedEvent\n * @module SortableSortedEvent\n * @extends SortableEvent\n */\n\nSortableSortEvent.type = 'sortable:sort';\nSortableSortEvent.cancelable = true;\nclass SortableSortedEvent extends SortableEvent {\n\n /**\n * Index of last sorted event\n * @property oldIndex\n * @type {Number}\n * @readonly\n */\n get oldIndex() {\n return this.data.oldIndex;\n }\n\n /**\n * New index of this sorted event\n * @property newIndex\n * @type {Number}\n * @readonly\n */\n get newIndex() {\n return this.data.newIndex;\n }\n\n /**\n * Old container of draggable element\n * @property oldContainer\n * @type {HTMLElement}\n * @readonly\n */\n get oldContainer() {\n return this.data.oldContainer;\n }\n\n /**\n * New container of draggable element\n * @property newContainer\n * @type {HTMLElement}\n * @readonly\n */\n get newContainer() {\n return this.data.newContainer;\n }\n}\n\nexports.SortableSortedEvent = SortableSortedEvent; /**\n * Sortable stop event\n * @class SortableStopEvent\n * @module SortableStopEvent\n * @extends SortableEvent\n */\n\nSortableSortedEvent.type = 'sortable:sorted';\nclass SortableStopEvent extends SortableEvent {\n\n /**\n * Original index on sortable start\n * @property oldIndex\n * @type {Number}\n * @readonly\n */\n get oldIndex() {\n return this.data.oldIndex;\n }\n\n /**\n * New index of draggable element\n * @property newIndex\n * @type {Number}\n * @readonly\n */\n get newIndex() {\n return this.data.newIndex;\n }\n\n /**\n * Original container of draggable element\n * @property oldContainer\n * @type {HTMLElement}\n * @readonly\n */\n get oldContainer() {\n return this.data.oldContainer;\n }\n\n /**\n * New container of draggable element\n * @property newContainer\n * @type {HTMLElement}\n * @readonly\n */\n get newContainer() {\n return this.data.newContainer;\n }\n}\nexports.SortableStopEvent = SortableStopEvent;\nSortableStopEvent.type = 'sortable:stop';\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SortableEvent = __webpack_require__(9);\n\nObject.keys(_SortableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SortableEvent[key];\n }\n });\n});\n\nvar _Sortable = __webpack_require__(28);\n\nvar _Sortable2 = _interopRequireDefault(_Sortable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Sortable2.default;\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Draggable = __webpack_require__(5);\n\nvar _Draggable2 = _interopRequireDefault(_Draggable);\n\nvar _SwappableEvent = __webpack_require__(10);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragOver = Symbol('onDragOver');\nconst onDragStop = Symbol('onDragStop');\n\n/**\n * Returns an announcement message when the Draggable element is swapped with another draggable element\n * @param {SwappableSwappedEvent} swappableEvent\n * @return {String}\n */\nfunction onSwappableSwappedDefaultAnnouncement({ dragEvent, swappedElement }) {\n const sourceText = dragEvent.source.textContent.trim() || dragEvent.source.id || 'swappable element';\n const overText = swappedElement.textContent.trim() || swappedElement.id || 'swappable element';\n\n return `Swapped ${sourceText} with ${overText}`;\n}\n\n/**\n * @const {Object} defaultAnnouncements\n * @const {Function} defaultAnnouncements['swappabled:swapped']\n */\nconst defaultAnnouncements = {\n 'swappabled:swapped': onSwappableSwappedDefaultAnnouncement\n};\n\n/**\n * Swappable is built on top of Draggable and allows swapping of draggable elements.\n * Order is irrelevant to Swappable.\n * @class Swappable\n * @module Swappable\n * @extends Draggable\n */\nclass Swappable extends _Draggable2.default {\n /**\n * Swappable constructor.\n * @constructs Swappable\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Swappable containers\n * @param {Object} options - Options for Swappable\n */\n constructor(containers = [], options = {}) {\n super(containers, _extends({}, options, {\n announcements: _extends({}, defaultAnnouncements, options.announcements || {})\n }));\n\n /**\n * Last draggable element that was dragged over\n * @property lastOver\n * @type {HTMLElement}\n */\n this.lastOver = null;\n\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragOver] = this[onDragOver].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n\n this.on('drag:start', this[onDragStart]).on('drag:over', this[onDragOver]).on('drag:stop', this[onDragStop]);\n }\n\n /**\n * Destroys Swappable instance.\n */\n destroy() {\n super.destroy();\n\n this.off('drag:start', this._onDragStart).off('drag:over', this._onDragOver).off('drag:stop', this._onDragStop);\n }\n\n /**\n * Drag start handler\n * @private\n * @param {DragStartEvent} event - Drag start event\n */\n [onDragStart](event) {\n const swappableStartEvent = new _SwappableEvent.SwappableStartEvent({\n dragEvent: event\n });\n\n this.trigger(swappableStartEvent);\n\n if (swappableStartEvent.canceled()) {\n event.cancel();\n }\n }\n\n /**\n * Drag over handler\n * @private\n * @param {DragOverEvent} event - Drag over event\n */\n [onDragOver](event) {\n if (event.over === event.originalSource || event.over === event.source || event.canceled()) {\n return;\n }\n\n const swappableSwapEvent = new _SwappableEvent.SwappableSwapEvent({\n dragEvent: event,\n over: event.over,\n overContainer: event.overContainer\n });\n\n this.trigger(swappableSwapEvent);\n\n if (swappableSwapEvent.canceled()) {\n return;\n }\n\n // swap originally swapped element back\n if (this.lastOver && this.lastOver !== event.over) {\n swap(this.lastOver, event.source);\n }\n\n if (this.lastOver === event.over) {\n this.lastOver = null;\n } else {\n this.lastOver = event.over;\n }\n\n swap(event.source, event.over);\n\n const swappableSwappedEvent = new _SwappableEvent.SwappableSwappedEvent({\n dragEvent: event,\n swappedElement: event.over\n });\n\n this.trigger(swappableSwappedEvent);\n }\n\n /**\n * Drag stop handler\n * @private\n * @param {DragStopEvent} event - Drag stop event\n */\n [onDragStop](event) {\n const swappableStopEvent = new _SwappableEvent.SwappableStopEvent({\n dragEvent: event\n });\n\n this.trigger(swappableStopEvent);\n this.lastOver = null;\n }\n}\n\nexports.default = Swappable;\nfunction withTempElement(callback) {\n const tmpElement = document.createElement('div');\n callback(tmpElement);\n tmpElement.parentNode.removeChild(tmpElement);\n}\n\nfunction swap(source, over) {\n const overParent = over.parentNode;\n const sourceParent = source.parentNode;\n\n withTempElement(tmpElement => {\n sourceParent.insertBefore(tmpElement, source);\n overParent.insertBefore(source, over);\n sourceParent.insertBefore(over, tmpElement);\n });\n}\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SwappableStopEvent = exports.SwappableSwappedEvent = exports.SwappableSwapEvent = exports.SwappableStartEvent = exports.SwappableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(1);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base swappable event\n * @class SwappableEvent\n * @module SwappableEvent\n * @extends AbstractEvent\n */\nclass SwappableEvent extends _AbstractEvent2.default {\n\n /**\n * Original drag event that triggered this swappable event\n * @property dragEvent\n * @type {DragEvent}\n * @readonly\n */\n get dragEvent() {\n return this.data.dragEvent;\n }\n}\n\nexports.SwappableEvent = SwappableEvent; /**\n * Swappable start event\n * @class SwappableStartEvent\n * @module SwappableStartEvent\n * @extends SwappableEvent\n */\n\nSwappableEvent.type = 'swappable';\nclass SwappableStartEvent extends SwappableEvent {}\n\nexports.SwappableStartEvent = SwappableStartEvent; /**\n * Swappable swap event\n * @class SwappableSwapEvent\n * @module SwappableSwapEvent\n * @extends SwappableEvent\n */\n\nSwappableStartEvent.type = 'swappable:start';\nSwappableStartEvent.cancelable = true;\nclass SwappableSwapEvent extends SwappableEvent {\n\n /**\n * Draggable element you are over\n * @property over\n * @type {HTMLElement}\n * @readonly\n */\n get over() {\n return this.data.over;\n }\n\n /**\n * Draggable container you are over\n * @property overContainer\n * @type {HTMLElement}\n * @readonly\n */\n get overContainer() {\n return this.data.overContainer;\n }\n}\n\nexports.SwappableSwapEvent = SwappableSwapEvent; /**\n * Swappable swapped event\n * @class SwappableSwappedEvent\n * @module SwappableSwappedEvent\n * @extends SwappableEvent\n */\n\nSwappableSwapEvent.type = 'swappable:swap';\nSwappableSwapEvent.cancelable = true;\nclass SwappableSwappedEvent extends SwappableEvent {\n\n /**\n * The draggable element that you swapped with\n * @property swappedElement\n * @type {HTMLElement}\n * @readonly\n */\n get swappedElement() {\n return this.data.swappedElement;\n }\n}\n\nexports.SwappableSwappedEvent = SwappableSwappedEvent; /**\n * Swappable stop event\n * @class SwappableStopEvent\n * @module SwappableStopEvent\n * @extends SwappableEvent\n */\n\nSwappableSwappedEvent.type = 'swappable:swapped';\nclass SwappableStopEvent extends SwappableEvent {}\nexports.SwappableStopEvent = SwappableStopEvent;\nSwappableStopEvent.type = 'swappable:stop';\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SwappableEvent = __webpack_require__(10);\n\nObject.keys(_SwappableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _SwappableEvent[key];\n }\n });\n});\n\nvar _Swappable = __webpack_require__(31);\n\nvar _Swappable2 = _interopRequireDefault(_Swappable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Swappable2.default;\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _utils = __webpack_require__(2);\n\nvar _Draggable = __webpack_require__(5);\n\nvar _Draggable2 = _interopRequireDefault(_Draggable);\n\nvar _DroppableEvent = __webpack_require__(11);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragMove = Symbol('onDragMove');\nconst onDragStop = Symbol('onDragStop');\nconst dropInDropzone = Symbol('dropInDropZone');\nconst returnToOriginalDropzone = Symbol('returnToOriginalDropzone');\nconst closestDropzone = Symbol('closestDropzone');\nconst getDropzones = Symbol('getDropzones');\n\n/**\n * Returns an announcement message when the Draggable element is dropped into a dropzone element\n * @param {DroppableDroppedEvent} droppableEvent\n * @return {String}\n */\nfunction onDroppableDroppedDefaultAnnouncement({ dragEvent, dropzone }) {\n const sourceText = dragEvent.source.textContent.trim() || dragEvent.source.id || 'draggable element';\n const dropzoneText = dropzone.textContent.trim() || dropzone.id || 'droppable element';\n\n return `Dropped ${sourceText} into ${dropzoneText}`;\n}\n\n/**\n * Returns an announcement message when the Draggable element has returned to its original dropzone element\n * @param {DroppableReturnedEvent} droppableEvent\n * @return {String}\n */\nfunction onDroppableReturnedDefaultAnnouncement({ dragEvent, dropzone }) {\n const sourceText = dragEvent.source.textContent.trim() || dragEvent.source.id || 'draggable element';\n const dropzoneText = dropzone.textContent.trim() || dropzone.id || 'droppable element';\n\n return `Returned ${sourceText} from ${dropzoneText}`;\n}\n\n/**\n * @const {Object} defaultAnnouncements\n * @const {Function} defaultAnnouncements['droppable:dropped']\n * @const {Function} defaultAnnouncements['droppable:returned']\n */\nconst defaultAnnouncements = {\n 'droppable:dropped': onDroppableDroppedDefaultAnnouncement,\n 'droppable:returned': onDroppableReturnedDefaultAnnouncement\n};\n\nconst defaultClasses = {\n 'droppable:active': 'draggable-dropzone--active',\n 'droppable:occupied': 'draggable-dropzone--occupied'\n};\n\nconst defaultOptions = {\n dropzone: '.draggable-droppable'\n};\n\n/**\n * Droppable is built on top of Draggable and allows dropping draggable elements\n * into dropzone element\n * @class Droppable\n * @module Droppable\n * @extends Draggable\n */\nclass Droppable extends _Draggable2.default {\n /**\n * Droppable constructor.\n * @constructs Droppable\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Droppable containers\n * @param {Object} options - Options for Droppable\n */\n constructor(containers = [], options = {}) {\n super(containers, _extends({}, defaultOptions, options, {\n classes: _extends({}, defaultClasses, options.classes || {}),\n announcements: _extends({}, defaultAnnouncements, options.announcements || {})\n }));\n\n /**\n * All dropzone elements on drag start\n * @property dropzones\n * @type {HTMLElement[]}\n */\n this.dropzones = null;\n\n /**\n * Last dropzone element that the source was dropped into\n * @property lastDropzone\n * @type {HTMLElement}\n */\n this.lastDropzone = null;\n\n /**\n * Initial dropzone element that the source was drag from\n * @property initialDropzone\n * @type {HTMLElement}\n */\n this.initialDropzone = null;\n\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragMove] = this[onDragMove].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n\n this.on('drag:start', this[onDragStart]).on('drag:move', this[onDragMove]).on('drag:stop', this[onDragStop]);\n }\n\n /**\n * Destroys Droppable instance.\n */\n destroy() {\n super.destroy();\n\n this.off('drag:start', this[onDragStart]).off('drag:move', this[onDragMove]).off('drag:stop', this[onDragStop]);\n }\n\n /**\n * Drag start handler\n * @private\n * @param {DragStartEvent} event - Drag start event\n */\n [onDragStart](event) {\n if (event.canceled()) {\n return;\n }\n\n this.dropzones = [...this[getDropzones]()];\n const dropzone = (0, _utils.closest)(event.sensorEvent.target, this.options.dropzone);\n\n if (!dropzone) {\n event.cancel();\n return;\n }\n\n const droppableStartEvent = new _DroppableEvent.DroppableStartEvent({\n dragEvent: event,\n dropzone\n });\n\n this.trigger(droppableStartEvent);\n\n if (droppableStartEvent.canceled()) {\n event.cancel();\n return;\n }\n\n this.initialDropzone = dropzone;\n\n for (const dropzoneElement of this.dropzones) {\n if (dropzoneElement.classList.contains(this.getClassNameFor('droppable:occupied'))) {\n continue;\n }\n\n dropzoneElement.classList.add(...this.getClassNamesFor('droppable:active'));\n }\n }\n\n /**\n * Drag move handler\n * @private\n * @param {DragMoveEvent} event - Drag move event\n */\n [onDragMove](event) {\n if (event.canceled()) {\n return;\n }\n\n const dropzone = this[closestDropzone](event.sensorEvent.target);\n const overEmptyDropzone = dropzone && !dropzone.classList.contains(this.getClassNameFor('droppable:occupied'));\n\n if (overEmptyDropzone && this[dropInDropzone](event, dropzone)) {\n this.lastDropzone = dropzone;\n } else if ((!dropzone || dropzone === this.initialDropzone) && this.lastDropzone) {\n this[returnToOriginalDropzone](event);\n this.lastDropzone = null;\n }\n }\n\n /**\n * Drag stop handler\n * @private\n * @param {DragStopEvent} event - Drag stop event\n */\n [onDragStop](event) {\n const droppableStopEvent = new _DroppableEvent.DroppableStopEvent({\n dragEvent: event,\n dropzone: this.lastDropzone || this.initialDropzone\n });\n\n this.trigger(droppableStopEvent);\n\n const occupiedClasses = this.getClassNamesFor('droppable:occupied');\n\n for (const dropzone of this.dropzones) {\n dropzone.classList.remove(...this.getClassNamesFor('droppable:active'));\n }\n\n if (this.lastDropzone && this.lastDropzone !== this.initialDropzone) {\n this.initialDropzone.classList.remove(...occupiedClasses);\n }\n\n this.dropzones = null;\n this.lastDropzone = null;\n this.initialDropzone = null;\n }\n\n /**\n * Drops a draggable element into a dropzone element\n * @private\n * @param {DragMoveEvent} event - Drag move event\n * @param {HTMLElement} dropzone - Dropzone element to drop draggable into\n */\n [dropInDropzone](event, dropzone) {\n const droppableDroppedEvent = new _DroppableEvent.DroppableDroppedEvent({\n dragEvent: event,\n dropzone\n });\n\n this.trigger(droppableDroppedEvent);\n\n if (droppableDroppedEvent.canceled()) {\n return false;\n }\n\n const occupiedClasses = this.getClassNamesFor('droppable:occupied');\n\n if (this.lastDropzone) {\n this.lastDropzone.classList.remove(...occupiedClasses);\n }\n\n dropzone.appendChild(event.source);\n dropzone.classList.add(...occupiedClasses);\n\n return true;\n }\n\n /**\n * Moves the previously dropped element back into its original dropzone\n * @private\n * @param {DragMoveEvent} event - Drag move event\n */\n [returnToOriginalDropzone](event) {\n const droppableReturnedEvent = new _DroppableEvent.DroppableReturnedEvent({\n dragEvent: event,\n dropzone: this.lastDropzone\n });\n\n this.trigger(droppableReturnedEvent);\n\n if (droppableReturnedEvent.canceled()) {\n return;\n }\n\n this.initialDropzone.appendChild(event.source);\n this.lastDropzone.classList.remove(...this.getClassNamesFor('droppable:occupied'));\n }\n\n /**\n * Returns closest dropzone element for even target\n * @private\n * @param {HTMLElement} target - Event target\n * @return {HTMLElement|null}\n */\n [closestDropzone](target) {\n if (!this.dropzones) {\n return null;\n }\n\n return (0, _utils.closest)(target, this.dropzones);\n }\n\n /**\n * Returns all current dropzone elements for this draggable instance\n * @private\n * @return {NodeList|HTMLElement[]|Array}\n */\n [getDropzones]() {\n const dropzone = this.options.dropzone;\n\n if (typeof dropzone === 'string') {\n return document.querySelectorAll(dropzone);\n } else if (dropzone instanceof NodeList || dropzone instanceof Array) {\n return dropzone;\n } else if (typeof dropzone === 'function') {\n return dropzone();\n } else {\n return [];\n }\n }\n}\nexports.default = Droppable;\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DroppableStopEvent = exports.DroppableReturnedEvent = exports.DroppableDroppedEvent = exports.DroppableStartEvent = exports.DroppableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(1);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base droppable event\n * @class DroppableEvent\n * @module DroppableEvent\n * @extends AbstractEvent\n */\nclass DroppableEvent extends _AbstractEvent2.default {\n\n /**\n * Original drag event that triggered this droppable event\n * @property dragEvent\n * @type {DragEvent}\n * @readonly\n */\n get dragEvent() {\n return this.data.dragEvent;\n }\n}\n\nexports.DroppableEvent = DroppableEvent; /**\n * Droppable start event\n * @class DroppableStartEvent\n * @module DroppableStartEvent\n * @extends DroppableEvent\n */\n\nDroppableEvent.type = 'droppable';\nclass DroppableStartEvent extends DroppableEvent {\n\n /**\n * The initial dropzone element of the currently dragging draggable element\n * @property dropzone\n * @type {HTMLElement}\n * @readonly\n */\n get dropzone() {\n return this.data.dropzone;\n }\n}\n\nexports.DroppableStartEvent = DroppableStartEvent; /**\n * Droppable dropped event\n * @class DroppableDroppedEvent\n * @module DroppableDroppedEvent\n * @extends DroppableEvent\n */\n\nDroppableStartEvent.type = 'droppable:start';\nDroppableStartEvent.cancelable = true;\nclass DroppableDroppedEvent extends DroppableEvent {\n\n /**\n * The dropzone element you dropped the draggable element into\n * @property dropzone\n * @type {HTMLElement}\n * @readonly\n */\n get dropzone() {\n return this.data.dropzone;\n }\n}\n\nexports.DroppableDroppedEvent = DroppableDroppedEvent; /**\n * Droppable returned event\n * @class DroppableReturnedEvent\n * @module DroppableReturnedEvent\n * @extends DroppableEvent\n */\n\nDroppableDroppedEvent.type = 'droppable:dropped';\nDroppableDroppedEvent.cancelable = true;\nclass DroppableReturnedEvent extends DroppableEvent {\n\n /**\n * The dropzone element you dragged away from\n * @property dropzone\n * @type {HTMLElement}\n * @readonly\n */\n get dropzone() {\n return this.data.dropzone;\n }\n}\n\nexports.DroppableReturnedEvent = DroppableReturnedEvent; /**\n * Droppable stop event\n * @class DroppableStopEvent\n * @module DroppableStopEvent\n * @extends DroppableEvent\n */\n\nDroppableReturnedEvent.type = 'droppable:returned';\nDroppableReturnedEvent.cancelable = true;\nclass DroppableStopEvent extends DroppableEvent {\n\n /**\n * The final dropzone element of the draggable element\n * @property dropzone\n * @type {HTMLElement}\n * @readonly\n */\n get dropzone() {\n return this.data.dropzone;\n }\n}\nexports.DroppableStopEvent = DroppableStopEvent;\nDroppableStopEvent.type = 'droppable:stop';\nDroppableStopEvent.cancelable = true;\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _DroppableEvent = __webpack_require__(11);\n\nObject.keys(_DroppableEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _DroppableEvent[key];\n }\n });\n});\n\nvar _Droppable = __webpack_require__(34);\n\nvar _Droppable2 = _interopRequireDefault(_Droppable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Droppable2.default;\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * The Emitter is a simple emitter class that provides you with `on()`, `off()` and `trigger()` methods\n * @class Emitter\n * @module Emitter\n */\nclass Emitter {\n constructor() {\n this.callbacks = {};\n }\n\n /**\n * Registers callbacks by event name\n * @param {String} type\n * @param {...Function} callbacks\n */\n on(type, ...callbacks) {\n if (!this.callbacks[type]) {\n this.callbacks[type] = [];\n }\n\n this.callbacks[type].push(...callbacks);\n\n return this;\n }\n\n /**\n * Unregisters callbacks by event name\n * @param {String} type\n * @param {Function} callback\n */\n off(type, callback) {\n if (!this.callbacks[type]) {\n return null;\n }\n\n const copy = this.callbacks[type].slice(0);\n\n for (let i = 0; i < copy.length; i++) {\n if (callback === copy[i]) {\n this.callbacks[type].splice(i, 1);\n }\n }\n\n return this;\n }\n\n /**\n * Triggers event callbacks by event object\n * @param {AbstractEvent} event\n */\n trigger(event) {\n if (!this.callbacks[event.type]) {\n return null;\n }\n\n const callbacks = [...this.callbacks[event.type]];\n const caughtErrors = [];\n\n for (let i = callbacks.length - 1; i >= 0; i--) {\n const callback = callbacks[i];\n\n try {\n callback(event);\n } catch (error) {\n caughtErrors.push(error);\n }\n }\n\n if (caughtErrors.length) {\n /* eslint-disable no-console */\n console.error(`Draggable caught errors while triggering '${event.type}'`, caughtErrors);\n /* eslint-disable no-console */\n }\n\n return this;\n }\n}\nexports.default = Emitter;\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Emitter = __webpack_require__(37);\n\nvar _Emitter2 = _interopRequireDefault(_Emitter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Emitter2.default;\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _utils = __webpack_require__(2);\n\nvar _Plugins = __webpack_require__(12);\n\nvar _Emitter = __webpack_require__(38);\n\nvar _Emitter2 = _interopRequireDefault(_Emitter);\n\nvar _Sensors = __webpack_require__(6);\n\nvar _DraggableEvent = __webpack_require__(13);\n\nvar _DragEvent = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragMove = Symbol('onDragMove');\nconst onDragStop = Symbol('onDragStop');\nconst onDragPressure = Symbol('onDragPressure');\n\n/**\n * @const {Object} defaultAnnouncements\n * @const {Function} defaultAnnouncements['drag:start']\n * @const {Function} defaultAnnouncements['drag:stop']\n */\nconst defaultAnnouncements = {\n 'drag:start': event => `Picked up ${event.source.textContent.trim() || event.source.id || 'draggable element'}`,\n 'drag:stop': event => `Released ${event.source.textContent.trim() || event.source.id || 'draggable element'}`\n};\n\nconst defaultClasses = {\n 'container:dragging': 'draggable-container--is-dragging',\n 'source:dragging': 'draggable-source--is-dragging',\n 'source:placed': 'draggable-source--placed',\n 'container:placed': 'draggable-container--placed',\n 'body:dragging': 'draggable--is-dragging',\n 'draggable:over': 'draggable--over',\n 'container:over': 'draggable-container--over',\n 'source:original': 'draggable--original',\n mirror: 'draggable-mirror'\n};\n\nconst defaultOptions = exports.defaultOptions = {\n draggable: '.draggable-source',\n handle: null,\n delay: {},\n distance: 0,\n placedTimeout: 800,\n plugins: [],\n sensors: [],\n exclude: {\n plugins: [],\n sensors: []\n }\n};\n\n/**\n * This is the core draggable library that does the heavy lifting\n * @class Draggable\n * @module Draggable\n */\nclass Draggable {\n\n /**\n * Draggable constructor.\n * @constructs Draggable\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Draggable containers\n * @param {Object} options - Options for draggable\n */\n\n /**\n * Default plugins draggable uses\n * @static\n * @property {Object} Plugins\n * @property {Announcement} Plugins.Announcement\n * @property {Focusable} Plugins.Focusable\n * @property {Mirror} Plugins.Mirror\n * @property {Scrollable} Plugins.Scrollable\n * @type {Object}\n */\n constructor(containers = [document.body], options = {}) {\n /**\n * Draggable containers\n * @property containers\n * @type {HTMLElement[]}\n */\n if (containers instanceof NodeList || containers instanceof Array) {\n this.containers = [...containers];\n } else if (containers instanceof HTMLElement) {\n this.containers = [containers];\n } else {\n throw new Error('Draggable containers are expected to be of type `NodeList`, `HTMLElement[]` or `HTMLElement`');\n }\n\n this.options = _extends({}, defaultOptions, options, {\n classes: _extends({}, defaultClasses, options.classes || {}),\n announcements: _extends({}, defaultAnnouncements, options.announcements || {}),\n exclude: {\n plugins: options.exclude && options.exclude.plugins || [],\n sensors: options.exclude && options.exclude.sensors || []\n }\n });\n\n /**\n * Draggables event emitter\n * @property emitter\n * @type {Emitter}\n */\n this.emitter = new _Emitter2.default();\n\n /**\n * Current drag state\n * @property dragging\n * @type {Boolean}\n */\n this.dragging = false;\n\n /**\n * Active plugins\n * @property plugins\n * @type {Plugin[]}\n */\n this.plugins = [];\n\n /**\n * Active sensors\n * @property sensors\n * @type {Sensor[]}\n */\n this.sensors = [];\n\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragMove] = this[onDragMove].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n this[onDragPressure] = this[onDragPressure].bind(this);\n\n document.addEventListener('drag:start', this[onDragStart], true);\n document.addEventListener('drag:move', this[onDragMove], true);\n document.addEventListener('drag:stop', this[onDragStop], true);\n document.addEventListener('drag:pressure', this[onDragPressure], true);\n\n const defaultPlugins = Object.values(Draggable.Plugins).filter(Plugin => !this.options.exclude.plugins.includes(Plugin));\n const defaultSensors = Object.values(Draggable.Sensors).filter(sensor => !this.options.exclude.sensors.includes(sensor));\n\n this.addPlugin(...[...defaultPlugins, ...this.options.plugins]);\n this.addSensor(...[...defaultSensors, ...this.options.sensors]);\n\n const draggableInitializedEvent = new _DraggableEvent.DraggableInitializedEvent({\n draggable: this\n });\n\n this.on('mirror:created', ({ mirror }) => this.mirror = mirror);\n this.on('mirror:destroy', () => this.mirror = null);\n\n this.trigger(draggableInitializedEvent);\n }\n\n /**\n * Destroys Draggable instance. This removes all internal event listeners and\n * deactivates sensors and plugins\n */\n\n\n /**\n * Default sensors draggable uses\n * @static\n * @property {Object} Sensors\n * @property {MouseSensor} Sensors.MouseSensor\n * @property {TouchSensor} Sensors.TouchSensor\n * @type {Object}\n */\n destroy() {\n document.removeEventListener('drag:start', this[onDragStart], true);\n document.removeEventListener('drag:move', this[onDragMove], true);\n document.removeEventListener('drag:stop', this[onDragStop], true);\n document.removeEventListener('drag:pressure', this[onDragPressure], true);\n\n const draggableDestroyEvent = new _DraggableEvent.DraggableDestroyEvent({\n draggable: this\n });\n\n this.trigger(draggableDestroyEvent);\n\n this.removePlugin(...this.plugins.map(plugin => plugin.constructor));\n this.removeSensor(...this.sensors.map(sensor => sensor.constructor));\n }\n\n /**\n * Adds plugin to this draggable instance. This will end up calling the attach method of the plugin\n * @param {...typeof Plugin} plugins - Plugins that you want attached to draggable\n * @return {Draggable}\n * @example draggable.addPlugin(CustomA11yPlugin, CustomMirrorPlugin)\n */\n addPlugin(...plugins) {\n const activePlugins = plugins.map(Plugin => new Plugin(this));\n\n activePlugins.forEach(plugin => plugin.attach());\n this.plugins = [...this.plugins, ...activePlugins];\n\n return this;\n }\n\n /**\n * Removes plugins that are already attached to this draggable instance. This will end up calling\n * the detach method of the plugin\n * @param {...typeof Plugin} plugins - Plugins that you want detached from draggable\n * @return {Draggable}\n * @example draggable.removePlugin(MirrorPlugin, CustomMirrorPlugin)\n */\n removePlugin(...plugins) {\n const removedPlugins = this.plugins.filter(plugin => plugins.includes(plugin.constructor));\n\n removedPlugins.forEach(plugin => plugin.detach());\n this.plugins = this.plugins.filter(plugin => !plugins.includes(plugin.constructor));\n\n return this;\n }\n\n /**\n * Adds sensors to this draggable instance. This will end up calling the attach method of the sensor\n * @param {...typeof Sensor} sensors - Sensors that you want attached to draggable\n * @return {Draggable}\n * @example draggable.addSensor(ForceTouchSensor, CustomSensor)\n */\n addSensor(...sensors) {\n const activeSensors = sensors.map(Sensor => new Sensor(this.containers, this.options));\n\n activeSensors.forEach(sensor => sensor.attach());\n this.sensors = [...this.sensors, ...activeSensors];\n\n return this;\n }\n\n /**\n * Removes sensors that are already attached to this draggable instance. This will end up calling\n * the detach method of the sensor\n * @param {...typeof Sensor} sensors - Sensors that you want attached to draggable\n * @return {Draggable}\n * @example draggable.removeSensor(TouchSensor, DragSensor)\n */\n removeSensor(...sensors) {\n const removedSensors = this.sensors.filter(sensor => sensors.includes(sensor.constructor));\n\n removedSensors.forEach(sensor => sensor.detach());\n this.sensors = this.sensors.filter(sensor => !sensors.includes(sensor.constructor));\n\n return this;\n }\n\n /**\n * Adds container to this draggable instance\n * @param {...HTMLElement} containers - Containers you want to add to draggable\n * @return {Draggable}\n * @example draggable.addContainer(document.body)\n */\n addContainer(...containers) {\n this.containers = [...this.containers, ...containers];\n this.sensors.forEach(sensor => sensor.addContainer(...containers));\n return this;\n }\n\n /**\n * Removes container from this draggable instance\n * @param {...HTMLElement} containers - Containers you want to remove from draggable\n * @return {Draggable}\n * @example draggable.removeContainer(document.body)\n */\n removeContainer(...containers) {\n this.containers = this.containers.filter(container => !containers.includes(container));\n this.sensors.forEach(sensor => sensor.removeContainer(...containers));\n return this;\n }\n\n /**\n * Adds listener for draggable events\n * @param {String} type - Event name\n * @param {...Function} callbacks - Event callbacks\n * @return {Draggable}\n * @example draggable.on('drag:start', (dragEvent) => dragEvent.cancel());\n */\n on(type, ...callbacks) {\n this.emitter.on(type, ...callbacks);\n return this;\n }\n\n /**\n * Removes listener from draggable\n * @param {String} type - Event name\n * @param {Function} callback - Event callback\n * @return {Draggable}\n * @example draggable.off('drag:start', handlerFunction);\n */\n off(type, callback) {\n this.emitter.off(type, callback);\n return this;\n }\n\n /**\n * Triggers draggable event\n * @param {AbstractEvent} event - Event instance\n * @return {Draggable}\n * @example draggable.trigger(event);\n */\n trigger(event) {\n this.emitter.trigger(event);\n return this;\n }\n\n /**\n * Returns class name for class identifier\n * @param {String} name - Name of class identifier\n * @return {String|null}\n */\n getClassNameFor(name) {\n return this.getClassNamesFor(name)[0];\n }\n\n /**\n * Returns class names for class identifier\n * @return {String[]}\n */\n getClassNamesFor(name) {\n const classNames = this.options.classes[name];\n\n if (classNames instanceof Array) {\n return classNames;\n } else if (typeof classNames === 'string' || classNames instanceof String) {\n return [classNames];\n } else {\n return [];\n }\n }\n\n /**\n * Returns true if this draggable instance is currently dragging\n * @return {Boolean}\n */\n isDragging() {\n return Boolean(this.dragging);\n }\n\n /**\n * Returns all draggable elements\n * @return {HTMLElement[]}\n */\n getDraggableElements() {\n return this.containers.reduce((current, container) => {\n return [...current, ...this.getDraggableElementsForContainer(container)];\n }, []);\n }\n\n /**\n * Returns draggable elements for a given container, excluding the mirror and\n * original source element if present\n * @param {HTMLElement} container\n * @return {HTMLElement[]}\n */\n getDraggableElementsForContainer(container) {\n const allDraggableElements = container.querySelectorAll(this.options.draggable);\n\n return [...allDraggableElements].filter(childElement => {\n return childElement !== this.originalSource && childElement !== this.mirror;\n });\n }\n\n /**\n * Drag start handler\n * @private\n * @param {Event} event - DOM Drag event\n */\n [onDragStart](event) {\n const sensorEvent = getSensorEvent(event);\n const { target, container } = sensorEvent;\n\n if (!this.containers.includes(container)) {\n return;\n }\n\n if (this.options.handle && target && !(0, _utils.closest)(target, this.options.handle)) {\n sensorEvent.cancel();\n return;\n }\n\n // Find draggable source element\n this.originalSource = (0, _utils.closest)(target, this.options.draggable);\n this.sourceContainer = container;\n\n if (!this.originalSource) {\n sensorEvent.cancel();\n return;\n }\n\n if (this.lastPlacedSource && this.lastPlacedContainer) {\n clearTimeout(this.placedTimeoutID);\n this.lastPlacedSource.classList.remove(...this.getClassNamesFor('source:placed'));\n this.lastPlacedContainer.classList.remove(...this.getClassNamesFor('container:placed'));\n }\n\n this.source = this.originalSource.cloneNode(true);\n this.originalSource.parentNode.insertBefore(this.source, this.originalSource);\n this.originalSource.style.display = 'none';\n\n const dragEvent = new _DragEvent.DragStartEvent({\n source: this.source,\n originalSource: this.originalSource,\n sourceContainer: container,\n sensorEvent\n });\n\n this.trigger(dragEvent);\n\n this.dragging = !dragEvent.canceled();\n\n if (dragEvent.canceled()) {\n this.source.parentNode.removeChild(this.source);\n this.originalSource.style.display = null;\n return;\n }\n\n this.originalSource.classList.add(...this.getClassNamesFor('source:original'));\n this.source.classList.add(...this.getClassNamesFor('source:dragging'));\n this.sourceContainer.classList.add(...this.getClassNamesFor('container:dragging'));\n document.body.classList.add(...this.getClassNamesFor('body:dragging'));\n applyUserSelect(document.body, 'none');\n\n requestAnimationFrame(() => {\n const oldSensorEvent = getSensorEvent(event);\n const newSensorEvent = oldSensorEvent.clone({ target: this.source });\n\n this[onDragMove](_extends({}, event, {\n detail: newSensorEvent\n }));\n });\n }\n\n /**\n * Drag move handler\n * @private\n * @param {Event} event - DOM Drag event\n */\n [onDragMove](event) {\n if (!this.dragging) {\n return;\n }\n\n const sensorEvent = getSensorEvent(event);\n const { container } = sensorEvent;\n let target = sensorEvent.target;\n\n const dragMoveEvent = new _DragEvent.DragMoveEvent({\n source: this.source,\n originalSource: this.originalSource,\n sourceContainer: container,\n sensorEvent\n });\n\n this.trigger(dragMoveEvent);\n\n if (dragMoveEvent.canceled()) {\n sensorEvent.cancel();\n }\n\n target = (0, _utils.closest)(target, this.options.draggable);\n const withinCorrectContainer = (0, _utils.closest)(sensorEvent.target, this.containers);\n const overContainer = sensorEvent.overContainer || withinCorrectContainer;\n const isLeavingContainer = this.currentOverContainer && overContainer !== this.currentOverContainer;\n const isLeavingDraggable = this.currentOver && target !== this.currentOver;\n const isOverContainer = overContainer && this.currentOverContainer !== overContainer;\n const isOverDraggable = withinCorrectContainer && target && this.currentOver !== target;\n\n if (isLeavingDraggable) {\n const dragOutEvent = new _DragEvent.DragOutEvent({\n source: this.source,\n originalSource: this.originalSource,\n sourceContainer: container,\n sensorEvent,\n over: this.currentOver,\n overContainer: this.currentOverContainer\n });\n\n this.currentOver.classList.remove(...this.getClassNamesFor('draggable:over'));\n this.currentOver = null;\n\n this.trigger(dragOutEvent);\n }\n\n if (isLeavingContainer) {\n const dragOutContainerEvent = new _DragEvent.DragOutContainerEvent({\n source: this.source,\n originalSource: this.originalSource,\n sourceContainer: container,\n sensorEvent,\n overContainer: this.currentOverContainer\n });\n\n this.currentOverContainer.classList.remove(...this.getClassNamesFor('container:over'));\n this.currentOverContainer = null;\n\n this.trigger(dragOutContainerEvent);\n }\n\n if (isOverContainer) {\n overContainer.classList.add(...this.getClassNamesFor('container:over'));\n\n const dragOverContainerEvent = new _DragEvent.DragOverContainerEvent({\n source: this.source,\n originalSource: this.originalSource,\n sourceContainer: container,\n sensorEvent,\n overContainer\n });\n\n this.currentOverContainer = overContainer;\n\n this.trigger(dragOverContainerEvent);\n }\n\n if (isOverDraggable) {\n target.classList.add(...this.getClassNamesFor('draggable:over'));\n\n const dragOverEvent = new _DragEvent.DragOverEvent({\n source: this.source,\n originalSource: this.originalSource,\n sourceContainer: container,\n sensorEvent,\n overContainer,\n over: target\n });\n\n this.currentOver = target;\n\n this.trigger(dragOverEvent);\n }\n }\n\n /**\n * Drag stop handler\n * @private\n * @param {Event} event - DOM Drag event\n */\n [onDragStop](event) {\n if (!this.dragging) {\n return;\n }\n\n this.dragging = false;\n\n const dragStopEvent = new _DragEvent.DragStopEvent({\n source: this.source,\n originalSource: this.originalSource,\n sensorEvent: event.sensorEvent,\n sourceContainer: this.sourceContainer\n });\n\n this.trigger(dragStopEvent);\n\n this.source.parentNode.insertBefore(this.originalSource, this.source);\n this.source.parentNode.removeChild(this.source);\n this.originalSource.style.display = '';\n\n this.source.classList.remove(...this.getClassNamesFor('source:dragging'));\n this.originalSource.classList.remove(...this.getClassNamesFor('source:original'));\n this.originalSource.classList.add(...this.getClassNamesFor('source:placed'));\n this.sourceContainer.classList.add(...this.getClassNamesFor('container:placed'));\n this.sourceContainer.classList.remove(...this.getClassNamesFor('container:dragging'));\n document.body.classList.remove(...this.getClassNamesFor('body:dragging'));\n applyUserSelect(document.body, '');\n\n if (this.currentOver) {\n this.currentOver.classList.remove(...this.getClassNamesFor('draggable:over'));\n }\n\n if (this.currentOverContainer) {\n this.currentOverContainer.classList.remove(...this.getClassNamesFor('container:over'));\n }\n\n this.lastPlacedSource = this.originalSource;\n this.lastPlacedContainer = this.sourceContainer;\n\n this.placedTimeoutID = setTimeout(() => {\n if (this.lastPlacedSource) {\n this.lastPlacedSource.classList.remove(...this.getClassNamesFor('source:placed'));\n }\n\n if (this.lastPlacedContainer) {\n this.lastPlacedContainer.classList.remove(...this.getClassNamesFor('container:placed'));\n }\n\n this.lastPlacedSource = null;\n this.lastPlacedContainer = null;\n }, this.options.placedTimeout);\n\n const dragStoppedEvent = new _DragEvent.DragStoppedEvent({\n source: this.source,\n originalSource: this.originalSource,\n sensorEvent: event.sensorEvent,\n sourceContainer: this.sourceContainer\n });\n\n this.trigger(dragStoppedEvent);\n\n this.source = null;\n this.originalSource = null;\n this.currentOverContainer = null;\n this.currentOver = null;\n this.sourceContainer = null;\n }\n\n /**\n * Drag pressure handler\n * @private\n * @param {Event} event - DOM Drag event\n */\n [onDragPressure](event) {\n if (!this.dragging) {\n return;\n }\n\n const sensorEvent = getSensorEvent(event);\n const source = this.source || (0, _utils.closest)(sensorEvent.originalEvent.target, this.options.draggable);\n\n const dragPressureEvent = new _DragEvent.DragPressureEvent({\n sensorEvent,\n source,\n pressure: sensorEvent.pressure\n });\n\n this.trigger(dragPressureEvent);\n }\n}\n\nexports.default = Draggable;\nDraggable.Plugins = { Announcement: _Plugins.Announcement, Focusable: _Plugins.Focusable, Mirror: _Plugins.Mirror, Scrollable: _Plugins.Scrollable };\nDraggable.Sensors = { MouseSensor: _Sensors.MouseSensor, TouchSensor: _Sensors.TouchSensor };\nfunction getSensorEvent(event) {\n return event.detail;\n}\n\nfunction applyUserSelect(element, value) {\n element.style.webkitUserSelect = value;\n element.style.mozUserSelect = value;\n element.style.msUserSelect = value;\n element.style.oUserSelect = value;\n element.style.userSelect = value;\n}\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Sensor = __webpack_require__(4);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nvar _SensorEvent = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onMouseForceWillBegin = Symbol('onMouseForceWillBegin');\nconst onMouseForceDown = Symbol('onMouseForceDown');\nconst onMouseDown = Symbol('onMouseDown');\nconst onMouseForceChange = Symbol('onMouseForceChange');\nconst onMouseMove = Symbol('onMouseMove');\nconst onMouseUp = Symbol('onMouseUp');\nconst onMouseForceGlobalChange = Symbol('onMouseForceGlobalChange');\n\n/**\n * This sensor picks up native force touch events and dictates drag operations\n * @class ForceTouchSensor\n * @module ForceTouchSensor\n * @extends Sensor\n */\nclass ForceTouchSensor extends _Sensor2.default {\n /**\n * ForceTouchSensor constructor.\n * @constructs ForceTouchSensor\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n * @param {Object} options - Options\n */\n constructor(containers = [], options = {}) {\n super(containers, options);\n\n /**\n * Draggable element needs to be remembered to unset the draggable attribute after drag operation has completed\n * @property mightDrag\n * @type {Boolean}\n */\n this.mightDrag = false;\n\n this[onMouseForceWillBegin] = this[onMouseForceWillBegin].bind(this);\n this[onMouseForceDown] = this[onMouseForceDown].bind(this);\n this[onMouseDown] = this[onMouseDown].bind(this);\n this[onMouseForceChange] = this[onMouseForceChange].bind(this);\n this[onMouseMove] = this[onMouseMove].bind(this);\n this[onMouseUp] = this[onMouseUp].bind(this);\n }\n\n /**\n * Attaches sensors event listeners to the DOM\n */\n attach() {\n for (const container of this.containers) {\n container.addEventListener('webkitmouseforcewillbegin', this[onMouseForceWillBegin], false);\n container.addEventListener('webkitmouseforcedown', this[onMouseForceDown], false);\n container.addEventListener('mousedown', this[onMouseDown], true);\n container.addEventListener('webkitmouseforcechanged', this[onMouseForceChange], false);\n }\n\n document.addEventListener('mousemove', this[onMouseMove]);\n document.addEventListener('mouseup', this[onMouseUp]);\n }\n\n /**\n * Detaches sensors event listeners to the DOM\n */\n detach() {\n for (const container of this.containers) {\n container.removeEventListener('webkitmouseforcewillbegin', this[onMouseForceWillBegin], false);\n container.removeEventListener('webkitmouseforcedown', this[onMouseForceDown], false);\n container.removeEventListener('mousedown', this[onMouseDown], true);\n container.removeEventListener('webkitmouseforcechanged', this[onMouseForceChange], false);\n }\n\n document.removeEventListener('mousemove', this[onMouseMove]);\n document.removeEventListener('mouseup', this[onMouseUp]);\n }\n\n /**\n * Mouse force will begin handler\n * @private\n * @param {Event} event - Mouse force will begin event\n */\n [onMouseForceWillBegin](event) {\n event.preventDefault();\n this.mightDrag = true;\n }\n\n /**\n * Mouse force down handler\n * @private\n * @param {Event} event - Mouse force down event\n */\n [onMouseForceDown](event) {\n if (this.dragging) {\n return;\n }\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n const container = event.currentTarget;\n\n const dragStartEvent = new _SensorEvent.DragStartSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container,\n originalEvent: event\n });\n\n this.trigger(container, dragStartEvent);\n\n this.currentContainer = container;\n this.dragging = !dragStartEvent.canceled();\n this.mightDrag = false;\n }\n\n /**\n * Mouse up handler\n * @private\n * @param {Event} event - Mouse up event\n */\n [onMouseUp](event) {\n if (!this.dragging) {\n return;\n }\n\n const dragStopEvent = new _SensorEvent.DragStopSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target: null,\n container: this.currentContainer,\n originalEvent: event\n });\n\n this.trigger(this.currentContainer, dragStopEvent);\n\n this.currentContainer = null;\n this.dragging = false;\n this.mightDrag = false;\n }\n\n /**\n * Mouse down handler\n * @private\n * @param {Event} event - Mouse down event\n */\n [onMouseDown](event) {\n if (!this.mightDrag) {\n return;\n }\n\n // Need workaround for real click\n // Cancel potential drag events\n event.stopPropagation();\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n\n /**\n * Mouse move handler\n * @private\n * @param {Event} event - Mouse force will begin event\n */\n [onMouseMove](event) {\n if (!this.dragging) {\n return;\n }\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n\n const dragMoveEvent = new _SensorEvent.DragMoveSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container: this.currentContainer,\n originalEvent: event\n });\n\n this.trigger(this.currentContainer, dragMoveEvent);\n }\n\n /**\n * Mouse force change handler\n * @private\n * @param {Event} event - Mouse force change event\n */\n [onMouseForceChange](event) {\n if (this.dragging) {\n return;\n }\n\n const target = event.target;\n const container = event.currentTarget;\n\n const dragPressureEvent = new _SensorEvent.DragPressureSensorEvent({\n pressure: event.webkitForce,\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container,\n originalEvent: event\n });\n\n this.trigger(container, dragPressureEvent);\n }\n\n /**\n * Mouse force global change handler\n * @private\n * @param {Event} event - Mouse force global change event\n */\n [onMouseForceGlobalChange](event) {\n if (!this.dragging) {\n return;\n }\n\n const target = event.target;\n\n const dragPressureEvent = new _SensorEvent.DragPressureSensorEvent({\n pressure: event.webkitForce,\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container: this.currentContainer,\n originalEvent: event\n });\n\n this.trigger(this.currentContainer, dragPressureEvent);\n }\n}\nexports.default = ForceTouchSensor;\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _ForceTouchSensor = __webpack_require__(40);\n\nvar _ForceTouchSensor2 = _interopRequireDefault(_ForceTouchSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _ForceTouchSensor2.default;\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(2);\n\nvar _Sensor = __webpack_require__(4);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nvar _SensorEvent = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onMouseDown = Symbol('onMouseDown');\nconst onMouseUp = Symbol('onMouseUp');\nconst onDragStart = Symbol('onDragStart');\nconst onDragOver = Symbol('onDragOver');\nconst onDragEnd = Symbol('onDragEnd');\nconst onDrop = Symbol('onDrop');\nconst reset = Symbol('reset');\n\n/**\n * This sensor picks up native browser drag events and dictates drag operations\n * @class DragSensor\n * @module DragSensor\n * @extends Sensor\n */\nclass DragSensor extends _Sensor2.default {\n /**\n * DragSensor constructor.\n * @constructs DragSensor\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n * @param {Object} options - Options\n */\n constructor(containers = [], options = {}) {\n super(containers, options);\n\n /**\n * Mouse down timer which will end up setting the draggable attribute, unless canceled\n * @property mouseDownTimeout\n * @type {Number}\n */\n this.mouseDownTimeout = null;\n\n /**\n * Draggable element needs to be remembered to unset the draggable attribute after drag operation has completed\n * @property draggableElement\n * @type {HTMLElement}\n */\n this.draggableElement = null;\n\n /**\n * Native draggable element could be links or images, their draggable state will be disabled during drag operation\n * @property nativeDraggableElement\n * @type {HTMLElement}\n */\n this.nativeDraggableElement = null;\n\n this[onMouseDown] = this[onMouseDown].bind(this);\n this[onMouseUp] = this[onMouseUp].bind(this);\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragOver] = this[onDragOver].bind(this);\n this[onDragEnd] = this[onDragEnd].bind(this);\n this[onDrop] = this[onDrop].bind(this);\n }\n\n /**\n * Attaches sensors event listeners to the DOM\n */\n attach() {\n document.addEventListener('mousedown', this[onMouseDown], true);\n }\n\n /**\n * Detaches sensors event listeners to the DOM\n */\n detach() {\n document.removeEventListener('mousedown', this[onMouseDown], true);\n }\n\n /**\n * Drag start handler\n * @private\n * @param {Event} event - Drag start event\n */\n [onDragStart](event) {\n // Need for firefox. \"text\" key is needed for IE\n event.dataTransfer.setData('text', '');\n event.dataTransfer.effectAllowed = this.options.type;\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n this.currentContainer = (0, _utils.closest)(event.target, this.containers);\n\n if (!this.currentContainer) {\n return;\n }\n\n const dragStartEvent = new _SensorEvent.DragStartSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container: this.currentContainer,\n originalEvent: event\n });\n\n // Workaround\n setTimeout(() => {\n this.trigger(this.currentContainer, dragStartEvent);\n\n if (dragStartEvent.canceled()) {\n this.dragging = false;\n } else {\n this.dragging = true;\n }\n }, 0);\n }\n\n /**\n * Drag over handler\n * @private\n * @param {Event} event - Drag over event\n */\n [onDragOver](event) {\n if (!this.dragging) {\n return;\n }\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n const container = this.currentContainer;\n\n const dragMoveEvent = new _SensorEvent.DragMoveSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container,\n originalEvent: event\n });\n\n this.trigger(container, dragMoveEvent);\n\n if (!dragMoveEvent.canceled()) {\n event.preventDefault();\n event.dataTransfer.dropEffect = this.options.type;\n }\n }\n\n /**\n * Drag end handler\n * @private\n * @param {Event} event - Drag end event\n */\n [onDragEnd](event) {\n if (!this.dragging) {\n return;\n }\n\n document.removeEventListener('mouseup', this[onMouseUp], true);\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n const container = this.currentContainer;\n\n const dragStopEvent = new _SensorEvent.DragStopSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container,\n originalEvent: event\n });\n\n this.trigger(container, dragStopEvent);\n\n this.dragging = false;\n this.startEvent = null;\n\n this[reset]();\n }\n\n /**\n * Drop handler\n * @private\n * @param {Event} event - Drop event\n */\n [onDrop](event) {\n // eslint-disable-line class-methods-use-this\n event.preventDefault();\n }\n\n /**\n * Mouse down handler\n * @private\n * @param {Event} event - Mouse down event\n */\n [onMouseDown](event) {\n // Firefox bug for inputs within draggables https://bugzilla.mozilla.org/show_bug.cgi?id=739071\n if (event.target && (event.target.form || event.target.contenteditable)) {\n return;\n }\n\n const nativeDraggableElement = (0, _utils.closest)(event.target, element => element.draggable);\n\n if (nativeDraggableElement) {\n nativeDraggableElement.draggable = false;\n this.nativeDraggableElement = nativeDraggableElement;\n }\n\n document.addEventListener('mouseup', this[onMouseUp], true);\n document.addEventListener('dragstart', this[onDragStart], false);\n document.addEventListener('dragover', this[onDragOver], false);\n document.addEventListener('dragend', this[onDragEnd], false);\n document.addEventListener('drop', this[onDrop], false);\n\n const target = (0, _utils.closest)(event.target, this.options.draggable);\n\n if (!target) {\n return;\n }\n\n this.startEvent = event;\n\n this.mouseDownTimeout = setTimeout(() => {\n target.draggable = true;\n this.draggableElement = target;\n }, this.delay.drag);\n }\n\n /**\n * Mouse up handler\n * @private\n * @param {Event} event - Mouse up event\n */\n [onMouseUp]() {\n this[reset]();\n }\n\n /**\n * Mouse up handler\n * @private\n * @param {Event} event - Mouse up event\n */\n [reset]() {\n clearTimeout(this.mouseDownTimeout);\n\n document.removeEventListener('mouseup', this[onMouseUp], true);\n document.removeEventListener('dragstart', this[onDragStart], false);\n document.removeEventListener('dragover', this[onDragOver], false);\n document.removeEventListener('dragend', this[onDragEnd], false);\n document.removeEventListener('drop', this[onDrop], false);\n\n if (this.nativeDraggableElement) {\n this.nativeDraggableElement.draggable = true;\n this.nativeDraggableElement = null;\n }\n\n if (this.draggableElement) {\n this.draggableElement.draggable = false;\n this.draggableElement = null;\n }\n }\n}\nexports.default = DragSensor;\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _DragSensor = __webpack_require__(42);\n\nvar _DragSensor2 = _interopRequireDefault(_DragSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _DragSensor2.default;\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(2);\n\nvar _Sensor = __webpack_require__(4);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nvar _SensorEvent = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onTouchStart = Symbol('onTouchStart');\nconst onTouchEnd = Symbol('onTouchEnd');\nconst onTouchMove = Symbol('onTouchMove');\nconst startDrag = Symbol('startDrag');\nconst onDistanceChange = Symbol('onDistanceChange');\n\n/**\n * Prevents scrolling when set to true\n * @var {Boolean} preventScrolling\n */\nlet preventScrolling = false;\n\n// WebKit requires cancelable `touchmove` events to be added as early as possible\nwindow.addEventListener('touchmove', event => {\n if (!preventScrolling) {\n return;\n }\n\n // Prevent scrolling\n event.preventDefault();\n}, { passive: false });\n\n/**\n * This sensor picks up native browser touch events and dictates drag operations\n * @class TouchSensor\n * @module TouchSensor\n * @extends Sensor\n */\nclass TouchSensor extends _Sensor2.default {\n /**\n * TouchSensor constructor.\n * @constructs TouchSensor\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n * @param {Object} options - Options\n */\n constructor(containers = [], options = {}) {\n super(containers, options);\n\n /**\n * Closest scrollable container so accidental scroll can cancel long touch\n * @property currentScrollableParent\n * @type {HTMLElement}\n */\n this.currentScrollableParent = null;\n\n /**\n * TimeoutID for managing delay\n * @property tapTimeout\n * @type {Number}\n */\n this.tapTimeout = null;\n\n /**\n * touchMoved indicates if touch has moved during tapTimeout\n * @property touchMoved\n * @type {Boolean}\n */\n this.touchMoved = false;\n\n /**\n * Save pageX coordinates for delay drag\n * @property {Numbre} pageX\n * @private\n */\n this.pageX = null;\n\n /**\n * Save pageY coordinates for delay drag\n * @property {Numbre} pageY\n * @private\n */\n this.pageY = null;\n\n this[onTouchStart] = this[onTouchStart].bind(this);\n this[onTouchEnd] = this[onTouchEnd].bind(this);\n this[onTouchMove] = this[onTouchMove].bind(this);\n this[startDrag] = this[startDrag].bind(this);\n this[onDistanceChange] = this[onDistanceChange].bind(this);\n }\n\n /**\n * Attaches sensors event listeners to the DOM\n */\n attach() {\n document.addEventListener('touchstart', this[onTouchStart]);\n }\n\n /**\n * Detaches sensors event listeners to the DOM\n */\n detach() {\n document.removeEventListener('touchstart', this[onTouchStart]);\n }\n\n /**\n * Touch start handler\n * @private\n * @param {Event} event - Touch start event\n */\n [onTouchStart](event) {\n const container = (0, _utils.closest)(event.target, this.containers);\n\n if (!container) {\n return;\n }\n const { distance = 0 } = this.options;\n const { delay } = this;\n const { pageX, pageY } = (0, _utils.touchCoords)(event);\n\n Object.assign(this, { pageX, pageY });\n this.onTouchStartAt = Date.now();\n this.startEvent = event;\n this.currentContainer = container;\n\n document.addEventListener('touchend', this[onTouchEnd]);\n document.addEventListener('touchcancel', this[onTouchEnd]);\n document.addEventListener('touchmove', this[onDistanceChange]);\n container.addEventListener('contextmenu', onContextMenu);\n\n if (distance) {\n preventScrolling = true;\n }\n\n this.tapTimeout = window.setTimeout(() => {\n this[onDistanceChange]({ touches: [{ pageX: this.pageX, pageY: this.pageY }] });\n }, delay.touch);\n }\n\n /**\n * Start the drag\n * @private\n */\n [startDrag]() {\n const startEvent = this.startEvent;\n const container = this.currentContainer;\n const touch = (0, _utils.touchCoords)(startEvent);\n\n const dragStartEvent = new _SensorEvent.DragStartSensorEvent({\n clientX: touch.pageX,\n clientY: touch.pageY,\n target: startEvent.target,\n container,\n originalEvent: startEvent\n });\n\n this.trigger(this.currentContainer, dragStartEvent);\n\n this.dragging = !dragStartEvent.canceled();\n\n if (this.dragging) {\n document.addEventListener('touchmove', this[onTouchMove]);\n }\n preventScrolling = this.dragging;\n }\n\n /**\n * Touch move handler prior to drag start.\n * @private\n * @param {Event} event - Touch move event\n */\n [onDistanceChange](event) {\n const { distance } = this.options;\n const { startEvent, delay } = this;\n const start = (0, _utils.touchCoords)(startEvent);\n const current = (0, _utils.touchCoords)(event);\n const timeElapsed = Date.now() - this.onTouchStartAt;\n const distanceTravelled = (0, _utils.distance)(start.pageX, start.pageY, current.pageX, current.pageY);\n\n Object.assign(this, current);\n\n clearTimeout(this.tapTimeout);\n\n if (timeElapsed < delay.touch) {\n // moved during delay\n document.removeEventListener('touchmove', this[onDistanceChange]);\n } else if (distanceTravelled >= distance) {\n document.removeEventListener('touchmove', this[onDistanceChange]);\n this[startDrag]();\n }\n }\n\n /**\n * Mouse move handler while dragging\n * @private\n * @param {Event} event - Touch move event\n */\n [onTouchMove](event) {\n if (!this.dragging) {\n return;\n }\n const { pageX, pageY } = (0, _utils.touchCoords)(event);\n const target = document.elementFromPoint(pageX - window.scrollX, pageY - window.scrollY);\n\n const dragMoveEvent = new _SensorEvent.DragMoveSensorEvent({\n clientX: pageX,\n clientY: pageY,\n target,\n container: this.currentContainer,\n originalEvent: event\n });\n\n this.trigger(this.currentContainer, dragMoveEvent);\n }\n\n /**\n * Touch end handler\n * @private\n * @param {Event} event - Touch end event\n */\n [onTouchEnd](event) {\n clearTimeout(this.tapTimeout);\n preventScrolling = false;\n\n document.removeEventListener('touchend', this[onTouchEnd]);\n document.removeEventListener('touchcancel', this[onTouchEnd]);\n document.removeEventListener('touchmove', this[onDistanceChange]);\n\n if (this.currentContainer) {\n this.currentContainer.removeEventListener('contextmenu', onContextMenu);\n }\n\n if (!this.dragging) {\n return;\n }\n\n document.removeEventListener('touchmove', this[onTouchMove]);\n\n const { pageX, pageY } = (0, _utils.touchCoords)(event);\n const target = document.elementFromPoint(pageX - window.scrollX, pageY - window.scrollY);\n\n event.preventDefault();\n\n const dragStopEvent = new _SensorEvent.DragStopSensorEvent({\n clientX: pageX,\n clientY: pageY,\n target,\n container: this.currentContainer,\n originalEvent: event\n });\n\n this.trigger(this.currentContainer, dragStopEvent);\n\n this.currentContainer = null;\n this.dragging = false;\n this.startEvent = null;\n }\n}\n\nexports.default = TouchSensor;\nfunction onContextMenu(event) {\n event.preventDefault();\n event.stopPropagation();\n}\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _TouchSensor = __webpack_require__(44);\n\nvar _TouchSensor2 = _interopRequireDefault(_TouchSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _TouchSensor2.default;\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DragPressureSensorEvent = exports.DragStopSensorEvent = exports.DragMoveSensorEvent = exports.DragStartSensorEvent = exports.SensorEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(1);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base sensor event\n * @class SensorEvent\n * @module SensorEvent\n * @extends AbstractEvent\n */\nclass SensorEvent extends _AbstractEvent2.default {\n /**\n * Original browser event that triggered a sensor\n * @property originalEvent\n * @type {Event}\n * @readonly\n */\n get originalEvent() {\n return this.data.originalEvent;\n }\n\n /**\n * Normalized clientX for both touch and mouse events\n * @property clientX\n * @type {Number}\n * @readonly\n */\n get clientX() {\n return this.data.clientX;\n }\n\n /**\n * Normalized clientY for both touch and mouse events\n * @property clientY\n * @type {Number}\n * @readonly\n */\n get clientY() {\n return this.data.clientY;\n }\n\n /**\n * Normalized target for both touch and mouse events\n * Returns the element that is behind cursor or touch pointer\n * @property target\n * @type {HTMLElement}\n * @readonly\n */\n get target() {\n return this.data.target;\n }\n\n /**\n * Container that initiated the sensor\n * @property container\n * @type {HTMLElement}\n * @readonly\n */\n get container() {\n return this.data.container;\n }\n\n /**\n * Trackpad pressure\n * @property pressure\n * @type {Number}\n * @readonly\n */\n get pressure() {\n return this.data.pressure;\n }\n}\n\nexports.SensorEvent = SensorEvent; /**\n * Drag start sensor event\n * @class DragStartSensorEvent\n * @module DragStartSensorEvent\n * @extends SensorEvent\n */\n\nclass DragStartSensorEvent extends SensorEvent {}\n\nexports.DragStartSensorEvent = DragStartSensorEvent; /**\n * Drag move sensor event\n * @class DragMoveSensorEvent\n * @module DragMoveSensorEvent\n * @extends SensorEvent\n */\n\nDragStartSensorEvent.type = 'drag:start';\nclass DragMoveSensorEvent extends SensorEvent {}\n\nexports.DragMoveSensorEvent = DragMoveSensorEvent; /**\n * Drag stop sensor event\n * @class DragStopSensorEvent\n * @module DragStopSensorEvent\n * @extends SensorEvent\n */\n\nDragMoveSensorEvent.type = 'drag:move';\nclass DragStopSensorEvent extends SensorEvent {}\n\nexports.DragStopSensorEvent = DragStopSensorEvent; /**\n * Drag pressure sensor event\n * @class DragPressureSensorEvent\n * @module DragPressureSensorEvent\n * @extends SensorEvent\n */\n\nDragStopSensorEvent.type = 'drag:stop';\nclass DragPressureSensorEvent extends SensorEvent {}\nexports.DragPressureSensorEvent = DragPressureSensorEvent;\nDragPressureSensorEvent.type = 'drag:pressure';\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(2);\n\nvar _Sensor = __webpack_require__(4);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nvar _SensorEvent = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onContextMenuWhileDragging = Symbol('onContextMenuWhileDragging');\nconst onMouseDown = Symbol('onMouseDown');\nconst onMouseMove = Symbol('onMouseMove');\nconst onMouseUp = Symbol('onMouseUp');\nconst startDrag = Symbol('startDrag');\nconst onDistanceChange = Symbol('onDistanceChange');\n\n/**\n * This sensor picks up native browser mouse events and dictates drag operations\n * @class MouseSensor\n * @module MouseSensor\n * @extends Sensor\n */\nclass MouseSensor extends _Sensor2.default {\n /**\n * MouseSensor constructor.\n * @constructs MouseSensor\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n * @param {Object} options - Options\n */\n constructor(containers = [], options = {}) {\n super(containers, options);\n\n /**\n * Mouse down timer which will end up triggering the drag start operation\n * @property mouseDownTimeout\n * @type {Number}\n */\n this.mouseDownTimeout = null;\n\n /**\n * Save pageX coordinates for delay drag\n * @property {Numbre} pageX\n * @private\n */\n this.pageX = null;\n\n /**\n * Save pageY coordinates for delay drag\n * @property {Numbre} pageY\n * @private\n */\n this.pageY = null;\n\n this[onContextMenuWhileDragging] = this[onContextMenuWhileDragging].bind(this);\n this[onMouseDown] = this[onMouseDown].bind(this);\n this[onMouseMove] = this[onMouseMove].bind(this);\n this[onMouseUp] = this[onMouseUp].bind(this);\n this[startDrag] = this[startDrag].bind(this);\n this[onDistanceChange] = this[onDistanceChange].bind(this);\n }\n\n /**\n * Attaches sensors event listeners to the DOM\n */\n attach() {\n document.addEventListener('mousedown', this[onMouseDown], true);\n }\n\n /**\n * Detaches sensors event listeners to the DOM\n */\n detach() {\n document.removeEventListener('mousedown', this[onMouseDown], true);\n }\n\n /**\n * Mouse down handler\n * @private\n * @param {Event} event - Mouse down event\n */\n [onMouseDown](event) {\n if (event.button !== 0 || event.ctrlKey || event.metaKey) {\n return;\n }\n const container = (0, _utils.closest)(event.target, this.containers);\n\n if (!container) {\n return;\n }\n\n const { delay } = this;\n const { pageX, pageY } = event;\n\n Object.assign(this, { pageX, pageY });\n this.onMouseDownAt = Date.now();\n this.startEvent = event;\n\n this.currentContainer = container;\n document.addEventListener('mouseup', this[onMouseUp]);\n document.addEventListener('dragstart', preventNativeDragStart);\n document.addEventListener('mousemove', this[onDistanceChange]);\n\n this.mouseDownTimeout = window.setTimeout(() => {\n this[onDistanceChange]({ pageX: this.pageX, pageY: this.pageY });\n }, delay.mouse);\n }\n\n /**\n * Start the drag\n * @private\n */\n [startDrag]() {\n const startEvent = this.startEvent;\n const container = this.currentContainer;\n\n const dragStartEvent = new _SensorEvent.DragStartSensorEvent({\n clientX: startEvent.clientX,\n clientY: startEvent.clientY,\n target: startEvent.target,\n container,\n originalEvent: startEvent\n });\n\n this.trigger(this.currentContainer, dragStartEvent);\n\n this.dragging = !dragStartEvent.canceled();\n\n if (this.dragging) {\n document.addEventListener('contextmenu', this[onContextMenuWhileDragging], true);\n document.addEventListener('mousemove', this[onMouseMove]);\n }\n }\n\n /**\n * Detect change in distance, starting drag when both\n * delay and distance requirements are met\n * @private\n * @param {Event} event - Mouse move event\n */\n [onDistanceChange](event) {\n const { pageX, pageY } = event;\n const { distance } = this.options;\n const { startEvent, delay } = this;\n\n Object.assign(this, { pageX, pageY });\n\n if (!this.currentContainer) {\n return;\n }\n\n const timeElapsed = Date.now() - this.onMouseDownAt;\n const distanceTravelled = (0, _utils.distance)(startEvent.pageX, startEvent.pageY, pageX, pageY) || 0;\n\n clearTimeout(this.mouseDownTimeout);\n\n if (timeElapsed < delay.mouse) {\n // moved during delay\n document.removeEventListener('mousemove', this[onDistanceChange]);\n } else if (distanceTravelled >= distance) {\n document.removeEventListener('mousemove', this[onDistanceChange]);\n this[startDrag]();\n }\n }\n\n /**\n * Mouse move handler\n * @private\n * @param {Event} event - Mouse move event\n */\n [onMouseMove](event) {\n if (!this.dragging) {\n return;\n }\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n\n const dragMoveEvent = new _SensorEvent.DragMoveSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container: this.currentContainer,\n originalEvent: event\n });\n\n this.trigger(this.currentContainer, dragMoveEvent);\n }\n\n /**\n * Mouse up handler\n * @private\n * @param {Event} event - Mouse up event\n */\n [onMouseUp](event) {\n clearTimeout(this.mouseDownTimeout);\n\n if (event.button !== 0) {\n return;\n }\n\n document.removeEventListener('mouseup', this[onMouseUp]);\n document.removeEventListener('dragstart', preventNativeDragStart);\n document.removeEventListener('mousemove', this[onDistanceChange]);\n\n if (!this.dragging) {\n return;\n }\n\n const target = document.elementFromPoint(event.clientX, event.clientY);\n\n const dragStopEvent = new _SensorEvent.DragStopSensorEvent({\n clientX: event.clientX,\n clientY: event.clientY,\n target,\n container: this.currentContainer,\n originalEvent: event\n });\n\n this.trigger(this.currentContainer, dragStopEvent);\n\n document.removeEventListener('contextmenu', this[onContextMenuWhileDragging], true);\n document.removeEventListener('mousemove', this[onMouseMove]);\n\n this.currentContainer = null;\n this.dragging = false;\n this.startEvent = null;\n }\n\n /**\n * Context menu handler\n * @private\n * @param {Event} event - Context menu event\n */\n [onContextMenuWhileDragging](event) {\n event.preventDefault();\n }\n}\n\nexports.default = MouseSensor;\nfunction preventNativeDragStart(event) {\n event.preventDefault();\n}\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _MouseSensor = __webpack_require__(47);\n\nvar _MouseSensor2 = _interopRequireDefault(_MouseSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _MouseSensor2.default;\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nconst defaultDealy = {\n mouse: 0,\n drag: 0,\n touch: 100\n};\n\n/**\n * Base sensor class. Extend from this class to create a new or custom sensor\n * @class Sensor\n * @module Sensor\n */\nclass Sensor {\n /**\n * Sensor constructor.\n * @constructs Sensor\n * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n * @param {Object} options - Options\n */\n constructor(containers = [], options = {}) {\n /**\n * Current containers\n * @property containers\n * @type {HTMLElement[]}\n */\n this.containers = [...containers];\n\n /**\n * Current options\n * @property options\n * @type {Object}\n */\n this.options = _extends({}, options);\n\n /**\n * Current drag state\n * @property dragging\n * @type {Boolean}\n */\n this.dragging = false;\n\n /**\n * Current container\n * @property currentContainer\n * @type {HTMLElement}\n */\n this.currentContainer = null;\n\n /**\n * The event of the initial sensor down\n * @property startEvent\n * @type {Event}\n */\n this.startEvent = null;\n\n /**\n * The delay of each sensor\n * @property delay\n * @type {Object}\n */\n this.delay = calcDelay(options.delay);\n }\n\n /**\n * Attaches sensors event listeners to the DOM\n * @return {Sensor}\n */\n attach() {\n return this;\n }\n\n /**\n * Detaches sensors event listeners to the DOM\n * @return {Sensor}\n */\n detach() {\n return this;\n }\n\n /**\n * Adds container to this sensor instance\n * @param {...HTMLElement} containers - Containers you want to add to this sensor\n * @example draggable.addContainer(document.body)\n */\n addContainer(...containers) {\n this.containers = [...this.containers, ...containers];\n }\n\n /**\n * Removes container from this sensor instance\n * @param {...HTMLElement} containers - Containers you want to remove from this sensor\n * @example draggable.removeContainer(document.body)\n */\n removeContainer(...containers) {\n this.containers = this.containers.filter(container => !containers.includes(container));\n }\n\n /**\n * Triggers event on target element\n * @param {HTMLElement} element - Element to trigger event on\n * @param {SensorEvent} sensorEvent - Sensor event to trigger\n */\n trigger(element, sensorEvent) {\n const event = document.createEvent('Event');\n event.detail = sensorEvent;\n event.initEvent(sensorEvent.type, true, true);\n element.dispatchEvent(event);\n this.lastEvent = sensorEvent;\n\n return sensorEvent;\n }\n}\n\nexports.default = Sensor; /**\n * Calculate the delay of each sensor through the delay in the options\n * @param {undefined|Number|Object} optionsDelay - the delay in the options\n * @return {Object}\n */\n\nfunction calcDelay(optionsDelay) {\n const delay = {};\n\n if (optionsDelay === undefined) {\n return _extends({}, defaultDealy);\n }\n\n if (typeof optionsDelay === 'number') {\n for (const key in defaultDealy) {\n if (defaultDealy.hasOwnProperty(key)) {\n delay[key] = optionsDelay;\n }\n }\n return delay;\n }\n\n for (const key in defaultDealy) {\n if (defaultDealy.hasOwnProperty(key)) {\n if (optionsDelay[key] === undefined) {\n delay[key] = defaultDealy[key];\n } else {\n delay[key] = optionsDelay[key];\n }\n }\n }\n\n return delay;\n}\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = touchCoords;\n/**\n * Returns the first touch event found in touches or changedTouches of a touch events.\n * @param {TouchEvent} event a touch event\n * @return {Touch} a touch object\n */\nfunction touchCoords(event = {}) {\n const { touches, changedTouches } = event;\n return touches && touches[0] || changedTouches && changedTouches[0];\n}\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _touchCoords = __webpack_require__(50);\n\nvar _touchCoords2 = _interopRequireDefault(_touchCoords);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _touchCoords2.default;\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = distance;\n/**\n * Returns the distance between two points\n * @param {Number} x1 The X position of the first point\n * @param {Number} y1 The Y position of the first point\n * @param {Number} x2 The X position of the second point\n * @param {Number} y2 The Y position of the second point\n * @return {Number}\n */\nfunction distance(x1, y1, x2, y2) {\n return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n}\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _distance = __webpack_require__(52);\n\nvar _distance2 = _interopRequireDefault(_distance);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _distance2.default;\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = requestNextAnimationFrame;\nfunction requestNextAnimationFrame(callback) {\n return requestAnimationFrame(() => {\n requestAnimationFrame(callback);\n });\n}\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _requestNextAnimationFrame = __webpack_require__(54);\n\nvar _requestNextAnimationFrame2 = _interopRequireDefault(_requestNextAnimationFrame);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _requestNextAnimationFrame2.default;\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = closest;\nconst matchFunction = Element.prototype.matches || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector;\n\n/**\n * Get the closest parent element of a given element that matches the given\n * selector string or matching function\n *\n * @param {Element} element The child element to find a parent of\n * @param {String|Function} selector The string or function to use to match\n * the parent element\n * @return {Element|null}\n */\nfunction closest(element, value) {\n if (!element) {\n return null;\n }\n\n const selector = value;\n const callback = value;\n const nodeList = value;\n const singleElement = value;\n\n const isSelector = Boolean(typeof value === 'string');\n const isFunction = Boolean(typeof value === 'function');\n const isNodeList = Boolean(value instanceof NodeList || value instanceof Array);\n const isElement = Boolean(value instanceof HTMLElement);\n\n function conditionFn(currentElement) {\n if (!currentElement) {\n return currentElement;\n } else if (isSelector) {\n return matchFunction.call(currentElement, selector);\n } else if (isNodeList) {\n return [...nodeList].includes(currentElement);\n } else if (isElement) {\n return singleElement === currentElement;\n } else if (isFunction) {\n return callback(currentElement);\n } else {\n return null;\n }\n }\n\n let current = element;\n\n do {\n current = current.correspondingUseElement || current.correspondingElement || current;\n\n if (conditionFn(current)) {\n return current;\n }\n\n current = current.parentNode;\n } while (current && current !== document.body && current !== document);\n\n return null;\n}\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _closest = __webpack_require__(56);\n\nvar _closest2 = _interopRequireDefault(_closest);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _closest2.default;\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = exports.scroll = exports.onDragStop = exports.onDragMove = exports.onDragStart = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _AbstractPlugin = __webpack_require__(0);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _utils = __webpack_require__(2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = exports.onDragStart = Symbol('onDragStart');\nconst onDragMove = exports.onDragMove = Symbol('onDragMove');\nconst onDragStop = exports.onDragStop = Symbol('onDragStop');\nconst scroll = exports.scroll = Symbol('scroll');\n\n/**\n * Scrollable default options\n * @property {Object} defaultOptions\n * @property {Number} defaultOptions.speed\n * @property {Number} defaultOptions.sensitivity\n * @property {HTMLElement[]} defaultOptions.scrollableElements\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {\n speed: 6,\n sensitivity: 50,\n scrollableElements: []\n};\n\n/**\n * Scrollable plugin which scrolls the closest scrollable parent\n * @class Scrollable\n * @module Scrollable\n * @extends AbstractPlugin\n */\nclass Scrollable extends _AbstractPlugin2.default {\n /**\n * Scrollable constructor.\n * @constructs Scrollable\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * Scrollable options\n * @property {Object} options\n * @property {Number} options.speed\n * @property {Number} options.sensitivity\n * @property {HTMLElement[]} options.scrollableElements\n * @type {Object}\n */\n this.options = _extends({}, defaultOptions, this.getOptions());\n\n /**\n * Keeps current mouse position\n * @property {Object} currentMousePosition\n * @property {Number} currentMousePosition.clientX\n * @property {Number} currentMousePosition.clientY\n * @type {Object|null}\n */\n this.currentMousePosition = null;\n\n /**\n * Scroll animation frame\n * @property scrollAnimationFrame\n * @type {Number|null}\n */\n this.scrollAnimationFrame = null;\n\n /**\n * Closest scrollable element\n * @property scrollableElement\n * @type {HTMLElement|null}\n */\n this.scrollableElement = null;\n\n /**\n * Animation frame looking for the closest scrollable element\n * @property findScrollableElementFrame\n * @type {Number|null}\n */\n this.findScrollableElementFrame = null;\n\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragMove] = this[onDragMove].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n this[scroll] = this[scroll].bind(this);\n }\n\n /**\n * Attaches plugins event listeners\n */\n attach() {\n this.draggable.on('drag:start', this[onDragStart]).on('drag:move', this[onDragMove]).on('drag:stop', this[onDragStop]);\n }\n\n /**\n * Detaches plugins event listeners\n */\n detach() {\n this.draggable.off('drag:start', this[onDragStart]).off('drag:move', this[onDragMove]).off('drag:stop', this[onDragStop]);\n }\n\n /**\n * Returns options passed through draggable\n * @return {Object}\n */\n getOptions() {\n return this.draggable.options.scrollable || {};\n }\n\n /**\n * Returns closest scrollable elements by element\n * @param {HTMLElement} target\n * @return {HTMLElement}\n */\n getScrollableElement(target) {\n if (this.hasDefinedScrollableElements()) {\n return (0, _utils.closest)(target, this.options.scrollableElements) || document.documentElement;\n } else {\n return closestScrollableElement(target);\n }\n }\n\n /**\n * Returns true if at least one scrollable element have been defined via options\n * @param {HTMLElement} target\n * @return {Boolean}\n */\n hasDefinedScrollableElements() {\n return Boolean(this.options.scrollableElements.length !== 0);\n }\n\n /**\n * Drag start handler. Finds closest scrollable parent in separate frame\n * @param {DragStartEvent} dragEvent\n * @private\n */\n [onDragStart](dragEvent) {\n this.findScrollableElementFrame = requestAnimationFrame(() => {\n this.scrollableElement = this.getScrollableElement(dragEvent.source);\n });\n }\n\n /**\n * Drag move handler. Remembers mouse position and initiates scrolling\n * @param {DragMoveEvent} dragEvent\n * @private\n */\n [onDragMove](dragEvent) {\n this.findScrollableElementFrame = requestAnimationFrame(() => {\n this.scrollableElement = this.getScrollableElement(dragEvent.sensorEvent.target);\n });\n\n if (!this.scrollableElement) {\n return;\n }\n\n const sensorEvent = dragEvent.sensorEvent;\n const scrollOffset = { x: 0, y: 0 };\n\n if ('ontouchstart' in window) {\n scrollOffset.y = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n scrollOffset.x = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;\n }\n\n this.currentMousePosition = {\n clientX: sensorEvent.clientX - scrollOffset.x,\n clientY: sensorEvent.clientY - scrollOffset.y\n };\n\n this.scrollAnimationFrame = requestAnimationFrame(this[scroll]);\n }\n\n /**\n * Drag stop handler. Cancels scroll animations and resets state\n * @private\n */\n [onDragStop]() {\n cancelAnimationFrame(this.scrollAnimationFrame);\n cancelAnimationFrame(this.findScrollableElementFrame);\n\n this.scrollableElement = null;\n this.scrollAnimationFrame = null;\n this.findScrollableElementFrame = null;\n this.currentMousePosition = null;\n }\n\n /**\n * Scroll function that does the heavylifting\n * @private\n */\n [scroll]() {\n if (!this.scrollableElement || !this.currentMousePosition) {\n return;\n }\n\n cancelAnimationFrame(this.scrollAnimationFrame);\n\n const { speed, sensitivity } = this.options;\n\n const rect = this.scrollableElement.getBoundingClientRect();\n const bottomCutOff = rect.bottom > window.innerHeight;\n const topCutOff = rect.top < 0;\n const cutOff = topCutOff || bottomCutOff;\n\n const documentScrollingElement = getDocumentScrollingElement();\n const scrollableElement = this.scrollableElement;\n const clientX = this.currentMousePosition.clientX;\n const clientY = this.currentMousePosition.clientY;\n\n if (scrollableElement !== document.body && scrollableElement !== document.documentElement && !cutOff) {\n const { offsetHeight, offsetWidth } = scrollableElement;\n\n if (rect.top + offsetHeight - clientY < sensitivity) {\n scrollableElement.scrollTop += speed;\n } else if (clientY - rect.top < sensitivity) {\n scrollableElement.scrollTop -= speed;\n }\n\n if (rect.left + offsetWidth - clientX < sensitivity) {\n scrollableElement.scrollLeft += speed;\n } else if (clientX - rect.left < sensitivity) {\n scrollableElement.scrollLeft -= speed;\n }\n } else {\n const { innerHeight, innerWidth } = window;\n\n if (clientY < sensitivity) {\n documentScrollingElement.scrollTop -= speed;\n } else if (innerHeight - clientY < sensitivity) {\n documentScrollingElement.scrollTop += speed;\n }\n\n if (clientX < sensitivity) {\n documentScrollingElement.scrollLeft -= speed;\n } else if (innerWidth - clientX < sensitivity) {\n documentScrollingElement.scrollLeft += speed;\n }\n }\n\n this.scrollAnimationFrame = requestAnimationFrame(this[scroll]);\n }\n}\n\nexports.default = Scrollable; /**\n * Returns true if the passed element has overflow\n * @param {HTMLElement} element\n * @return {Boolean}\n * @private\n */\n\nfunction hasOverflow(element) {\n const overflowRegex = /(auto|scroll)/;\n const computedStyles = getComputedStyle(element, null);\n\n const overflow = computedStyles.getPropertyValue('overflow') + computedStyles.getPropertyValue('overflow-y') + computedStyles.getPropertyValue('overflow-x');\n\n return overflowRegex.test(overflow);\n}\n\n/**\n * Returns true if the passed element is statically positioned\n * @param {HTMLElement} element\n * @return {Boolean}\n * @private\n */\nfunction isStaticallyPositioned(element) {\n const position = getComputedStyle(element).getPropertyValue('position');\n return position === 'static';\n}\n\n/**\n * Finds closest scrollable element\n * @param {HTMLElement} element\n * @return {HTMLElement}\n * @private\n */\nfunction closestScrollableElement(element) {\n if (!element) {\n return getDocumentScrollingElement();\n }\n\n const position = getComputedStyle(element).getPropertyValue('position');\n const excludeStaticParents = position === 'absolute';\n\n const scrollableElement = (0, _utils.closest)(element, parent => {\n if (excludeStaticParents && isStaticallyPositioned(parent)) {\n return false;\n }\n return hasOverflow(parent);\n });\n\n if (position === 'fixed' || !scrollableElement) {\n return getDocumentScrollingElement();\n } else {\n return scrollableElement;\n }\n}\n\n/**\n * Returns element that scrolls document\n * @return {HTMLElement}\n * @private\n */\nfunction getDocumentScrollingElement() {\n return document.scrollingElement || document.documentElement;\n}\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _Scrollable = __webpack_require__(58);\n\nvar _Scrollable2 = _interopRequireDefault(_Scrollable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Scrollable2.default;\nexports.defaultOptions = _Scrollable.defaultOptions;\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MirrorDestroyEvent = exports.MirrorMoveEvent = exports.MirrorAttachedEvent = exports.MirrorCreatedEvent = exports.MirrorCreateEvent = exports.MirrorEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(1);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base mirror event\n * @class MirrorEvent\n * @module MirrorEvent\n * @extends AbstractEvent\n */\nclass MirrorEvent extends _AbstractEvent2.default {\n /**\n * Draggables source element\n * @property source\n * @type {HTMLElement}\n * @readonly\n */\n get source() {\n return this.data.source;\n }\n\n /**\n * Draggables original source element\n * @property originalSource\n * @type {HTMLElement}\n * @readonly\n */\n get originalSource() {\n return this.data.originalSource;\n }\n\n /**\n * Draggables source container element\n * @property sourceContainer\n * @type {HTMLElement}\n * @readonly\n */\n get sourceContainer() {\n return this.data.sourceContainer;\n }\n\n /**\n * Sensor event\n * @property sensorEvent\n * @type {SensorEvent}\n * @readonly\n */\n get sensorEvent() {\n return this.data.sensorEvent;\n }\n\n /**\n * Drag event\n * @property dragEvent\n * @type {DragEvent}\n * @readonly\n */\n get dragEvent() {\n return this.data.dragEvent;\n }\n\n /**\n * Original event that triggered sensor event\n * @property originalEvent\n * @type {Event}\n * @readonly\n */\n get originalEvent() {\n if (this.sensorEvent) {\n return this.sensorEvent.originalEvent;\n }\n\n return null;\n }\n}\n\nexports.MirrorEvent = MirrorEvent; /**\n * Mirror create event\n * @class MirrorCreateEvent\n * @module MirrorCreateEvent\n * @extends MirrorEvent\n */\n\nclass MirrorCreateEvent extends MirrorEvent {}\n\nexports.MirrorCreateEvent = MirrorCreateEvent; /**\n * Mirror created event\n * @class MirrorCreatedEvent\n * @module MirrorCreatedEvent\n * @extends MirrorEvent\n */\n\nMirrorCreateEvent.type = 'mirror:create';\nclass MirrorCreatedEvent extends MirrorEvent {\n\n /**\n * Draggables mirror element\n * @property mirror\n * @type {HTMLElement}\n * @readonly\n */\n get mirror() {\n return this.data.mirror;\n }\n}\n\nexports.MirrorCreatedEvent = MirrorCreatedEvent; /**\n * Mirror attached event\n * @class MirrorAttachedEvent\n * @module MirrorAttachedEvent\n * @extends MirrorEvent\n */\n\nMirrorCreatedEvent.type = 'mirror:created';\nclass MirrorAttachedEvent extends MirrorEvent {\n\n /**\n * Draggables mirror element\n * @property mirror\n * @type {HTMLElement}\n * @readonly\n */\n get mirror() {\n return this.data.mirror;\n }\n}\n\nexports.MirrorAttachedEvent = MirrorAttachedEvent; /**\n * Mirror move event\n * @class MirrorMoveEvent\n * @module MirrorMoveEvent\n * @extends MirrorEvent\n */\n\nMirrorAttachedEvent.type = 'mirror:attached';\nclass MirrorMoveEvent extends MirrorEvent {\n\n /**\n * Draggables mirror element\n * @property mirror\n * @type {HTMLElement}\n * @readonly\n */\n get mirror() {\n return this.data.mirror;\n }\n\n /**\n * Sensor has exceeded mirror's threshold on x axis\n * @type {Boolean}\n * @readonly\n */\n get passedThreshX() {\n return this.data.passedThreshX;\n }\n\n /**\n * Sensor has exceeded mirror's threshold on y axis\n * @type {Boolean}\n * @readonly\n */\n get passedThreshY() {\n return this.data.passedThreshY;\n }\n}\n\nexports.MirrorMoveEvent = MirrorMoveEvent; /**\n * Mirror destroy event\n * @class MirrorDestroyEvent\n * @module MirrorDestroyEvent\n * @extends MirrorEvent\n */\n\nMirrorMoveEvent.type = 'mirror:move';\nMirrorMoveEvent.cancelable = true;\nclass MirrorDestroyEvent extends MirrorEvent {\n\n /**\n * Draggables mirror element\n * @property mirror\n * @type {HTMLElement}\n * @readonly\n */\n get mirror() {\n return this.data.mirror;\n }\n}\nexports.MirrorDestroyEvent = MirrorDestroyEvent;\nMirrorDestroyEvent.type = 'mirror:destroy';\nMirrorDestroyEvent.cancelable = true;\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _MirrorEvent = __webpack_require__(60);\n\nObject.keys(_MirrorEvent).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _MirrorEvent[key];\n }\n });\n});\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = exports.getAppendableContainer = exports.onScroll = exports.onMirrorMove = exports.onMirrorCreated = exports.onDragStop = exports.onDragMove = exports.onDragStart = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _AbstractPlugin = __webpack_require__(0);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _MirrorEvent = __webpack_require__(61);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nconst onDragStart = exports.onDragStart = Symbol('onDragStart');\nconst onDragMove = exports.onDragMove = Symbol('onDragMove');\nconst onDragStop = exports.onDragStop = Symbol('onDragStop');\nconst onMirrorCreated = exports.onMirrorCreated = Symbol('onMirrorCreated');\nconst onMirrorMove = exports.onMirrorMove = Symbol('onMirrorMove');\nconst onScroll = exports.onScroll = Symbol('onScroll');\nconst getAppendableContainer = exports.getAppendableContainer = Symbol('getAppendableContainer');\n\n/**\n * Mirror default options\n * @property {Object} defaultOptions\n * @property {Boolean} defaultOptions.constrainDimensions\n * @property {Boolean} defaultOptions.xAxis\n * @property {Boolean} defaultOptions.yAxis\n * @property {null} defaultOptions.cursorOffsetX\n * @property {null} defaultOptions.cursorOffsetY\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {\n constrainDimensions: false,\n xAxis: true,\n yAxis: true,\n cursorOffsetX: null,\n cursorOffsetY: null,\n thresholdX: null,\n thresholdY: null\n};\n\n/**\n * Mirror plugin which controls the mirror positioning while dragging\n * @class Mirror\n * @module Mirror\n * @extends AbstractPlugin\n */\nclass Mirror extends _AbstractPlugin2.default {\n /**\n * Mirror constructor.\n * @constructs Mirror\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * Mirror options\n * @property {Object} options\n * @property {Boolean} options.constrainDimensions\n * @property {Boolean} options.xAxis\n * @property {Boolean} options.yAxis\n * @property {Number|null} options.cursorOffsetX\n * @property {Number|null} options.cursorOffsetY\n * @property {String|HTMLElement|Function} options.appendTo\n * @type {Object}\n */\n this.options = _extends({}, defaultOptions, this.getOptions());\n\n /**\n * Scroll offset for touch devices because the mirror is positioned fixed\n * @property {Object} scrollOffset\n * @property {Number} scrollOffset.x\n * @property {Number} scrollOffset.y\n */\n this.scrollOffset = { x: 0, y: 0 };\n\n /**\n * Initial scroll offset for touch devices because the mirror is positioned fixed\n * @property {Object} scrollOffset\n * @property {Number} scrollOffset.x\n * @property {Number} scrollOffset.y\n */\n this.initialScrollOffset = {\n x: window.scrollX,\n y: window.scrollY\n };\n\n this[onDragStart] = this[onDragStart].bind(this);\n this[onDragMove] = this[onDragMove].bind(this);\n this[onDragStop] = this[onDragStop].bind(this);\n this[onMirrorCreated] = this[onMirrorCreated].bind(this);\n this[onMirrorMove] = this[onMirrorMove].bind(this);\n this[onScroll] = this[onScroll].bind(this);\n }\n\n /**\n * Attaches plugins event listeners\n */\n attach() {\n this.draggable.on('drag:start', this[onDragStart]).on('drag:move', this[onDragMove]).on('drag:stop', this[onDragStop]).on('mirror:created', this[onMirrorCreated]).on('mirror:move', this[onMirrorMove]);\n }\n\n /**\n * Detaches plugins event listeners\n */\n detach() {\n this.draggable.off('drag:start', this[onDragStart]).off('drag:move', this[onDragMove]).off('drag:stop', this[onDragStop]).off('mirror:created', this[onMirrorCreated]).off('mirror:move', this[onMirrorMove]);\n }\n\n /**\n * Returns options passed through draggable\n * @return {Object}\n */\n getOptions() {\n return this.draggable.options.mirror || {};\n }\n\n [onDragStart](dragEvent) {\n if (dragEvent.canceled()) {\n return;\n }\n\n if ('ontouchstart' in window) {\n document.addEventListener('scroll', this[onScroll], true);\n }\n\n this.initialScrollOffset = {\n x: window.scrollX,\n y: window.scrollY\n };\n\n const { source, originalSource, sourceContainer, sensorEvent } = dragEvent;\n\n // Last sensor position of mirror move\n this.lastMirrorMovedClient = {\n x: sensorEvent.clientX,\n y: sensorEvent.clientY\n };\n\n const mirrorCreateEvent = new _MirrorEvent.MirrorCreateEvent({\n source,\n originalSource,\n sourceContainer,\n sensorEvent,\n dragEvent\n });\n\n this.draggable.trigger(mirrorCreateEvent);\n\n if (isNativeDragEvent(sensorEvent) || mirrorCreateEvent.canceled()) {\n return;\n }\n\n const appendableContainer = this[getAppendableContainer](source) || sourceContainer;\n this.mirror = source.cloneNode(true);\n\n const mirrorCreatedEvent = new _MirrorEvent.MirrorCreatedEvent({\n source,\n originalSource,\n sourceContainer,\n sensorEvent,\n dragEvent,\n mirror: this.mirror\n });\n\n const mirrorAttachedEvent = new _MirrorEvent.MirrorAttachedEvent({\n source,\n originalSource,\n sourceContainer,\n sensorEvent,\n dragEvent,\n mirror: this.mirror\n });\n\n this.draggable.trigger(mirrorCreatedEvent);\n appendableContainer.appendChild(this.mirror);\n this.draggable.trigger(mirrorAttachedEvent);\n }\n\n [onDragMove](dragEvent) {\n if (!this.mirror || dragEvent.canceled()) {\n return;\n }\n\n const { source, originalSource, sourceContainer, sensorEvent } = dragEvent;\n\n let passedThreshX = true;\n let passedThreshY = true;\n\n if (this.options.thresholdX || this.options.thresholdY) {\n const { x: lastX, y: lastY } = this.lastMirrorMovedClient;\n\n if (Math.abs(lastX - sensorEvent.clientX) < this.options.thresholdX) {\n passedThreshX = false;\n } else {\n this.lastMirrorMovedClient.x = sensorEvent.clientX;\n }\n\n if (Math.abs(lastY - sensorEvent.clientY) < this.options.thresholdY) {\n passedThreshY = false;\n } else {\n this.lastMirrorMovedClient.y = sensorEvent.clientY;\n }\n\n if (!passedThreshX && !passedThreshY) {\n return;\n }\n }\n\n const mirrorMoveEvent = new _MirrorEvent.MirrorMoveEvent({\n source,\n originalSource,\n sourceContainer,\n sensorEvent,\n dragEvent,\n mirror: this.mirror,\n passedThreshX,\n passedThreshY\n });\n\n this.draggable.trigger(mirrorMoveEvent);\n }\n\n [onDragStop](dragEvent) {\n if ('ontouchstart' in window) {\n document.removeEventListener('scroll', this[onScroll], true);\n }\n\n this.initialScrollOffset = { x: 0, y: 0 };\n this.scrollOffset = { x: 0, y: 0 };\n\n if (!this.mirror) {\n return;\n }\n\n const { source, sourceContainer, sensorEvent } = dragEvent;\n\n const mirrorDestroyEvent = new _MirrorEvent.MirrorDestroyEvent({\n source,\n mirror: this.mirror,\n sourceContainer,\n sensorEvent,\n dragEvent\n });\n\n this.draggable.trigger(mirrorDestroyEvent);\n\n if (!mirrorDestroyEvent.canceled()) {\n this.mirror.parentNode.removeChild(this.mirror);\n }\n }\n\n [onScroll]() {\n this.scrollOffset = {\n x: window.scrollX - this.initialScrollOffset.x,\n y: window.scrollY - this.initialScrollOffset.y\n };\n }\n\n /**\n * Mirror created handler\n * @param {MirrorCreatedEvent} mirrorEvent\n * @return {Promise}\n * @private\n */\n [onMirrorCreated]({ mirror, source, sensorEvent }) {\n const mirrorClasses = this.draggable.getClassNamesFor('mirror');\n\n const setState = (_ref) => {\n let { mirrorOffset, initialX, initialY } = _ref,\n args = _objectWithoutProperties(_ref, ['mirrorOffset', 'initialX', 'initialY']);\n\n this.mirrorOffset = mirrorOffset;\n this.initialX = initialX;\n this.initialY = initialY;\n this.lastMovedX = initialX;\n this.lastMovedY = initialY;\n return _extends({ mirrorOffset, initialX, initialY }, args);\n };\n\n mirror.style.display = 'none';\n\n const initialState = {\n mirror,\n source,\n sensorEvent,\n mirrorClasses,\n scrollOffset: this.scrollOffset,\n options: this.options,\n passedThreshX: true,\n passedThreshY: true\n };\n\n return Promise.resolve(initialState)\n // Fix reflow here\n .then(computeMirrorDimensions).then(calculateMirrorOffset).then(resetMirror).then(addMirrorClasses).then(positionMirror({ initial: true })).then(removeMirrorID).then(setState);\n }\n\n /**\n * Mirror move handler\n * @param {MirrorMoveEvent} mirrorEvent\n * @return {Promise|null}\n * @private\n */\n [onMirrorMove](mirrorEvent) {\n if (mirrorEvent.canceled()) {\n return null;\n }\n\n const setState = (_ref2) => {\n let { lastMovedX, lastMovedY } = _ref2,\n args = _objectWithoutProperties(_ref2, ['lastMovedX', 'lastMovedY']);\n\n this.lastMovedX = lastMovedX;\n this.lastMovedY = lastMovedY;\n\n return _extends({ lastMovedX, lastMovedY }, args);\n };\n\n const initialState = {\n mirror: mirrorEvent.mirror,\n sensorEvent: mirrorEvent.sensorEvent,\n mirrorOffset: this.mirrorOffset,\n options: this.options,\n initialX: this.initialX,\n initialY: this.initialY,\n scrollOffset: this.scrollOffset,\n passedThreshX: mirrorEvent.passedThreshX,\n passedThreshY: mirrorEvent.passedThreshY,\n lastMovedX: this.lastMovedX,\n lastMovedY: this.lastMovedY\n };\n\n return Promise.resolve(initialState).then(positionMirror({ raf: true })).then(setState);\n }\n\n /**\n * Returns appendable container for mirror based on the appendTo option\n * @private\n * @param {Object} options\n * @param {HTMLElement} options.source - Current source\n * @return {HTMLElement}\n */\n [getAppendableContainer](source) {\n const appendTo = this.options.appendTo;\n\n if (typeof appendTo === 'string') {\n return document.querySelector(appendTo);\n } else if (appendTo instanceof HTMLElement) {\n return appendTo;\n } else if (typeof appendTo === 'function') {\n return appendTo(source);\n } else {\n return source.parentNode;\n }\n }\n}\n\nexports.default = Mirror; /**\n * Computes mirror dimensions based on the source element\n * Adds sourceRect to state\n * @param {Object} state\n * @param {HTMLElement} state.source\n * @return {Promise}\n * @private\n */\n\nfunction computeMirrorDimensions(_ref3) {\n let { source } = _ref3,\n args = _objectWithoutProperties(_ref3, ['source']);\n\n return withPromise(resolve => {\n const sourceRect = source.getBoundingClientRect();\n resolve(_extends({ source, sourceRect }, args));\n });\n}\n\n/**\n * Calculates mirror offset\n * Adds mirrorOffset to state\n * @param {Object} state\n * @param {SensorEvent} state.sensorEvent\n * @param {DOMRect} state.sourceRect\n * @return {Promise}\n * @private\n */\nfunction calculateMirrorOffset(_ref4) {\n let { sensorEvent, sourceRect, options } = _ref4,\n args = _objectWithoutProperties(_ref4, ['sensorEvent', 'sourceRect', 'options']);\n\n return withPromise(resolve => {\n const top = options.cursorOffsetY === null ? sensorEvent.clientY - sourceRect.top : options.cursorOffsetY;\n const left = options.cursorOffsetX === null ? sensorEvent.clientX - sourceRect.left : options.cursorOffsetX;\n\n const mirrorOffset = { top, left };\n\n resolve(_extends({ sensorEvent, sourceRect, mirrorOffset, options }, args));\n });\n}\n\n/**\n * Applys mirror styles\n * @param {Object} state\n * @param {HTMLElement} state.mirror\n * @param {HTMLElement} state.source\n * @param {Object} state.options\n * @return {Promise}\n * @private\n */\nfunction resetMirror(_ref5) {\n let { mirror, source, options } = _ref5,\n args = _objectWithoutProperties(_ref5, ['mirror', 'source', 'options']);\n\n return withPromise(resolve => {\n let offsetHeight;\n let offsetWidth;\n\n if (options.constrainDimensions) {\n const computedSourceStyles = getComputedStyle(source);\n offsetHeight = computedSourceStyles.getPropertyValue('height');\n offsetWidth = computedSourceStyles.getPropertyValue('width');\n }\n\n mirror.style.display = null;\n mirror.style.position = 'fixed';\n mirror.style.pointerEvents = 'none';\n mirror.style.top = 0;\n mirror.style.left = 0;\n mirror.style.margin = 0;\n\n if (options.constrainDimensions) {\n mirror.style.height = offsetHeight;\n mirror.style.width = offsetWidth;\n }\n\n resolve(_extends({ mirror, source, options }, args));\n });\n}\n\n/**\n * Applys mirror class on mirror element\n * @param {Object} state\n * @param {HTMLElement} state.mirror\n * @param {String[]} state.mirrorClasses\n * @return {Promise}\n * @private\n */\nfunction addMirrorClasses(_ref6) {\n let { mirror, mirrorClasses } = _ref6,\n args = _objectWithoutProperties(_ref6, ['mirror', 'mirrorClasses']);\n\n return withPromise(resolve => {\n mirror.classList.add(...mirrorClasses);\n resolve(_extends({ mirror, mirrorClasses }, args));\n });\n}\n\n/**\n * Removes source ID from cloned mirror element\n * @param {Object} state\n * @param {HTMLElement} state.mirror\n * @return {Promise}\n * @private\n */\nfunction removeMirrorID(_ref7) {\n let { mirror } = _ref7,\n args = _objectWithoutProperties(_ref7, ['mirror']);\n\n return withPromise(resolve => {\n mirror.removeAttribute('id');\n delete mirror.id;\n resolve(_extends({ mirror }, args));\n });\n}\n\n/**\n * Positions mirror with translate3d\n * @param {Object} state\n * @param {HTMLElement} state.mirror\n * @param {SensorEvent} state.sensorEvent\n * @param {Object} state.mirrorOffset\n * @param {Number} state.initialY\n * @param {Number} state.initialX\n * @param {Object} state.options\n * @return {Promise}\n * @private\n */\nfunction positionMirror({ withFrame = false, initial = false } = {}) {\n return (_ref8) => {\n let {\n mirror,\n sensorEvent,\n mirrorOffset,\n initialY,\n initialX,\n scrollOffset,\n options,\n passedThreshX,\n passedThreshY,\n lastMovedX,\n lastMovedY\n } = _ref8,\n args = _objectWithoutProperties(_ref8, ['mirror', 'sensorEvent', 'mirrorOffset', 'initialY', 'initialX', 'scrollOffset', 'options', 'passedThreshX', 'passedThreshY', 'lastMovedX', 'lastMovedY']);\n\n return withPromise(resolve => {\n const result = _extends({\n mirror,\n sensorEvent,\n mirrorOffset,\n options\n }, args);\n\n if (mirrorOffset) {\n const x = passedThreshX ? Math.round((sensorEvent.clientX - mirrorOffset.left - scrollOffset.x) / (options.thresholdX || 1)) * (options.thresholdX || 1) : Math.round(lastMovedX);\n const y = passedThreshY ? Math.round((sensorEvent.clientY - mirrorOffset.top - scrollOffset.y) / (options.thresholdY || 1)) * (options.thresholdY || 1) : Math.round(lastMovedY);\n\n if (options.xAxis && options.yAxis || initial) {\n mirror.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n } else if (options.xAxis && !options.yAxis) {\n mirror.style.transform = `translate3d(${x}px, ${initialY}px, 0)`;\n } else if (options.yAxis && !options.xAxis) {\n mirror.style.transform = `translate3d(${initialX}px, ${y}px, 0)`;\n }\n\n if (initial) {\n result.initialX = x;\n result.initialY = y;\n }\n\n result.lastMovedX = x;\n result.lastMovedY = y;\n }\n\n resolve(result);\n }, { frame: withFrame });\n };\n}\n\n/**\n * Wraps functions in promise with potential animation frame option\n * @param {Function} callback\n * @param {Object} options\n * @param {Boolean} options.raf\n * @return {Promise}\n * @private\n */\nfunction withPromise(callback, { raf = false } = {}) {\n return new Promise((resolve, reject) => {\n if (raf) {\n requestAnimationFrame(() => {\n callback(resolve, reject);\n });\n } else {\n callback(resolve, reject);\n }\n });\n}\n\n/**\n * Returns true if the sensor event was triggered by a native browser drag event\n * @param {SensorEvent} sensorEvent\n */\nfunction isNativeDragEvent(sensorEvent) {\n return (/^drag/.test(sensorEvent.originalEvent.type)\n );\n}\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _Mirror = __webpack_require__(62);\n\nvar _Mirror2 = _interopRequireDefault(_Mirror);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Mirror2.default;\nexports.defaultOptions = _Mirror.defaultOptions;\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _AbstractPlugin = __webpack_require__(0);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onInitialize = Symbol('onInitialize');\nconst onDestroy = Symbol('onDestroy');\n\n/**\n * Focusable default options\n * @property {Object} defaultOptions\n * @type {Object}\n */\nconst defaultOptions = {};\n\n/**\n * Focusable plugin\n * @class Focusable\n * @module Focusable\n * @extends AbstractPlugin\n */\nclass Focusable extends _AbstractPlugin2.default {\n /**\n * Focusable constructor.\n * @constructs Focusable\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * Focusable options\n * @property {Object} options\n * @type {Object}\n */\n this.options = _extends({}, defaultOptions, this.getOptions());\n\n this[onInitialize] = this[onInitialize].bind(this);\n this[onDestroy] = this[onDestroy].bind(this);\n }\n\n /**\n * Attaches listeners to draggable\n */\n attach() {\n this.draggable.on('draggable:initialize', this[onInitialize]).on('draggable:destroy', this[onDestroy]);\n }\n\n /**\n * Detaches listeners from draggable\n */\n detach() {\n this.draggable.off('draggable:initialize', this[onInitialize]).off('draggable:destroy', this[onDestroy]);\n\n // Remove modified elements when detach\n this[onDestroy]();\n }\n\n /**\n * Returns options passed through draggable\n * @return {Object}\n */\n getOptions() {\n return this.draggable.options.focusable || {};\n }\n\n /**\n * Returns draggable containers and elements\n * @return {HTMLElement[]}\n */\n getElements() {\n return [...this.draggable.containers, ...this.draggable.getDraggableElements()];\n }\n\n /**\n * Intialize handler\n * @private\n */\n [onInitialize]() {\n // Can wait until the next best frame is available\n requestAnimationFrame(() => {\n this.getElements().forEach(element => decorateElement(element));\n });\n }\n\n /**\n * Destroy handler\n * @private\n */\n [onDestroy]() {\n // Can wait until the next best frame is available\n requestAnimationFrame(() => {\n this.getElements().forEach(element => stripElement(element));\n });\n }\n}\n\nexports.default = Focusable; /**\n * Keeps track of all the elements that are missing tabindex attributes\n * so they can be reset when draggable gets destroyed\n * @const {HTMLElement[]} elementsWithMissingTabIndex\n */\n\nconst elementsWithMissingTabIndex = [];\n\n/**\n * Decorates element with tabindex attributes\n * @param {HTMLElement} element\n * @return {Object}\n * @private\n */\nfunction decorateElement(element) {\n const hasMissingTabIndex = Boolean(!element.getAttribute('tabindex') && element.tabIndex === -1);\n\n if (hasMissingTabIndex) {\n elementsWithMissingTabIndex.push(element);\n element.tabIndex = 0;\n }\n}\n\n/**\n * Removes elements tabindex attributes\n * @param {HTMLElement} element\n * @private\n */\nfunction stripElement(element) {\n const tabIndexElementPosition = elementsWithMissingTabIndex.indexOf(element);\n\n if (tabIndexElementPosition !== -1) {\n element.tabIndex = -1;\n elementsWithMissingTabIndex.splice(tabIndexElementPosition, 1);\n }\n}\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Focusable = __webpack_require__(64);\n\nvar _Focusable2 = _interopRequireDefault(_Focusable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Focusable2.default;\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * All draggable plugins inherit from this class.\n * @abstract\n * @class AbstractPlugin\n * @module AbstractPlugin\n */\nclass AbstractPlugin {\n /**\n * AbstractPlugin constructor.\n * @constructs AbstractPlugin\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n /**\n * Draggable instance\n * @property draggable\n * @type {Draggable}\n */\n this.draggable = draggable;\n }\n\n /**\n * Override to add listeners\n * @abstract\n */\n attach() {\n throw new Error('Not Implemented');\n }\n\n /**\n * Override to remove listeners\n * @abstract\n */\n detach() {\n throw new Error('Not Implemented');\n }\n}\nexports.default = AbstractPlugin;\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _AbstractPlugin = __webpack_require__(0);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onInitialize = Symbol('onInitialize');\nconst onDestroy = Symbol('onDestroy');\nconst announceEvent = Symbol('announceEvent');\nconst announceMessage = Symbol('announceMessage');\n\nconst ARIA_RELEVANT = 'aria-relevant';\nconst ARIA_ATOMIC = 'aria-atomic';\nconst ARIA_LIVE = 'aria-live';\nconst ROLE = 'role';\n\n/**\n * Announcement default options\n * @property {Object} defaultOptions\n * @property {Number} defaultOptions.expire\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {\n expire: 7000\n};\n\n/**\n * Announcement plugin\n * @class Announcement\n * @module Announcement\n * @extends AbstractPlugin\n */\nclass Announcement extends _AbstractPlugin2.default {\n /**\n * Announcement constructor.\n * @constructs Announcement\n * @param {Draggable} draggable - Draggable instance\n */\n constructor(draggable) {\n super(draggable);\n\n /**\n * Plugin options\n * @property options\n * @type {Object}\n */\n this.options = _extends({}, defaultOptions, this.getOptions());\n\n /**\n * Original draggable trigger method. Hack until we have onAll or on('all')\n * @property originalTriggerMethod\n * @type {Function}\n */\n this.originalTriggerMethod = this.draggable.trigger;\n\n this[onInitialize] = this[onInitialize].bind(this);\n this[onDestroy] = this[onDestroy].bind(this);\n }\n\n /**\n * Attaches listeners to draggable\n */\n attach() {\n this.draggable.on('draggable:initialize', this[onInitialize]);\n }\n\n /**\n * Detaches listeners from draggable\n */\n detach() {\n this.draggable.off('draggable:destroy', this[onDestroy]);\n }\n\n /**\n * Returns passed in options\n */\n getOptions() {\n return this.draggable.options.announcements || {};\n }\n\n /**\n * Announces event\n * @private\n * @param {AbstractEvent} event\n */\n [announceEvent](event) {\n const message = this.options[event.type];\n\n if (message && typeof message === 'string') {\n this[announceMessage](message);\n }\n\n if (message && typeof message === 'function') {\n this[announceMessage](message(event));\n }\n }\n\n /**\n * Announces message to screen reader\n * @private\n * @param {String} message\n */\n [announceMessage](message) {\n announce(message, { expire: this.options.expire });\n }\n\n /**\n * Initialize hander\n * @private\n */\n [onInitialize]() {\n // Hack until there is an api for listening for all events\n this.draggable.trigger = event => {\n try {\n this[announceEvent](event);\n } finally {\n // Ensure that original trigger is called\n this.originalTriggerMethod.call(this.draggable, event);\n }\n };\n }\n\n /**\n * Destroy hander\n * @private\n */\n [onDestroy]() {\n this.draggable.trigger = this.originalTriggerMethod;\n }\n}\n\nexports.default = Announcement; /**\n * @const {HTMLElement} liveRegion\n */\n\nconst liveRegion = createRegion();\n\n/**\n * Announces message via live region\n * @param {String} message\n * @param {Object} options\n * @param {Number} options.expire\n */\nfunction announce(message, { expire }) {\n const element = document.createElement('div');\n\n element.textContent = message;\n liveRegion.appendChild(element);\n\n return setTimeout(() => {\n liveRegion.removeChild(element);\n }, expire);\n}\n\n/**\n * Creates region element\n * @return {HTMLElement}\n */\nfunction createRegion() {\n const element = document.createElement('div');\n\n element.setAttribute('id', 'draggable-live-region');\n element.setAttribute(ARIA_RELEVANT, 'additions');\n element.setAttribute(ARIA_ATOMIC, 'true');\n element.setAttribute(ARIA_LIVE, 'assertive');\n element.setAttribute(ROLE, 'log');\n\n element.style.position = 'fixed';\n element.style.width = '1px';\n element.style.height = '1px';\n element.style.top = '-1px';\n element.style.overflow = 'hidden';\n\n return element;\n}\n\n// Append live region element as early as possible\ndocument.addEventListener('DOMContentLoaded', () => {\n document.body.appendChild(liveRegion);\n});\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.defaultOptions = undefined;\n\nvar _Announcement = __webpack_require__(67);\n\nvar _Announcement2 = _interopRequireDefault(_Announcement);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Announcement2.default;\nexports.defaultOptions = _Announcement.defaultOptions;\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DraggableDestroyEvent = exports.DraggableInitializedEvent = exports.DraggableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(1);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base draggable event\n * @class DraggableEvent\n * @module DraggableEvent\n * @extends AbstractEvent\n */\nclass DraggableEvent extends _AbstractEvent2.default {\n\n /**\n * Draggable instance\n * @property draggable\n * @type {Draggable}\n * @readonly\n */\n get draggable() {\n return this.data.draggable;\n }\n}\n\nexports.DraggableEvent = DraggableEvent; /**\n * Draggable initialized event\n * @class DraggableInitializedEvent\n * @module DraggableInitializedEvent\n * @extends DraggableEvent\n */\n\nDraggableEvent.type = 'draggable';\nclass DraggableInitializedEvent extends DraggableEvent {}\n\nexports.DraggableInitializedEvent = DraggableInitializedEvent; /**\n * Draggable destory event\n * @class DraggableInitializedEvent\n * @module DraggableDestroyEvent\n * @extends DraggableDestroyEvent\n */\n\nDraggableInitializedEvent.type = 'draggable:initialize';\nclass DraggableDestroyEvent extends DraggableEvent {}\nexports.DraggableDestroyEvent = DraggableDestroyEvent;\nDraggableDestroyEvent.type = 'draggable:destroy';\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nconst canceled = Symbol('canceled');\n\n/**\n * All events fired by draggable inherit this class. You can call `cancel()` to\n * cancel a specific event or you can check if an event has been canceled by\n * calling `canceled()`.\n * @abstract\n * @class AbstractEvent\n * @module AbstractEvent\n */\nclass AbstractEvent {\n\n /**\n * AbstractEvent constructor.\n * @constructs AbstractEvent\n * @param {object} data - Event data\n */\n\n /**\n * Event type\n * @static\n * @abstract\n * @property type\n * @type {String}\n */\n constructor(data) {\n this[canceled] = false;\n this.data = data;\n }\n\n /**\n * Read-only type\n * @abstract\n * @return {String}\n */\n\n\n /**\n * Event cancelable\n * @static\n * @abstract\n * @property cancelable\n * @type {Boolean}\n */\n get type() {\n return this.constructor.type;\n }\n\n /**\n * Read-only cancelable\n * @abstract\n * @return {Boolean}\n */\n get cancelable() {\n return this.constructor.cancelable;\n }\n\n /**\n * Cancels the event instance\n * @abstract\n */\n cancel() {\n this[canceled] = true;\n }\n\n /**\n * Check if event has been canceled\n * @abstract\n * @return {Boolean}\n */\n canceled() {\n return Boolean(this[canceled]);\n }\n\n /**\n * Returns new event instance with existing event data.\n * This method allows for overriding of event data.\n * @param {Object} data\n * @return {AbstractEvent}\n */\n clone(data) {\n return new this.constructor(_extends({}, this.data, data));\n }\n}\nexports.default = AbstractEvent;\nAbstractEvent.type = 'event';\nAbstractEvent.cancelable = false;\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DragStoppedEvent = exports.DragStopEvent = exports.DragPressureEvent = exports.DragOutContainerEvent = exports.DragOverContainerEvent = exports.DragOutEvent = exports.DragOverEvent = exports.DragMoveEvent = exports.DragStartEvent = exports.DragEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(1);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base drag event\n * @class DragEvent\n * @module DragEvent\n * @extends AbstractEvent\n */\nclass DragEvent extends _AbstractEvent2.default {\n\n /**\n * Draggables source element\n * @property source\n * @type {HTMLElement}\n * @readonly\n */\n get source() {\n return this.data.source;\n }\n\n /**\n * Draggables original source element\n * @property originalSource\n * @type {HTMLElement}\n * @readonly\n */\n get originalSource() {\n return this.data.originalSource;\n }\n\n /**\n * Draggables mirror element\n * @property mirror\n * @type {HTMLElement}\n * @readonly\n */\n get mirror() {\n return this.data.mirror;\n }\n\n /**\n * Draggables source container element\n * @property sourceContainer\n * @type {HTMLElement}\n * @readonly\n */\n get sourceContainer() {\n return this.data.sourceContainer;\n }\n\n /**\n * Sensor event\n * @property sensorEvent\n * @type {SensorEvent}\n * @readonly\n */\n get sensorEvent() {\n return this.data.sensorEvent;\n }\n\n /**\n * Original event that triggered sensor event\n * @property originalEvent\n * @type {Event}\n * @readonly\n */\n get originalEvent() {\n if (this.sensorEvent) {\n return this.sensorEvent.originalEvent;\n }\n\n return null;\n }\n}\n\nexports.DragEvent = DragEvent; /**\n * Drag start event\n * @class DragStartEvent\n * @module DragStartEvent\n * @extends DragEvent\n */\n\nDragEvent.type = 'drag';\nclass DragStartEvent extends DragEvent {}\n\nexports.DragStartEvent = DragStartEvent; /**\n * Drag move event\n * @class DragMoveEvent\n * @module DragMoveEvent\n * @extends DragEvent\n */\n\nDragStartEvent.type = 'drag:start';\nDragStartEvent.cancelable = true;\nclass DragMoveEvent extends DragEvent {}\n\nexports.DragMoveEvent = DragMoveEvent; /**\n * Drag over event\n * @class DragOverEvent\n * @module DragOverEvent\n * @extends DragEvent\n */\n\nDragMoveEvent.type = 'drag:move';\nclass DragOverEvent extends DragEvent {\n\n /**\n * Draggable container you are over\n * @property overContainer\n * @type {HTMLElement}\n * @readonly\n */\n get overContainer() {\n return this.data.overContainer;\n }\n\n /**\n * Draggable element you are over\n * @property over\n * @type {HTMLElement}\n * @readonly\n */\n get over() {\n return this.data.over;\n }\n}\n\nexports.DragOverEvent = DragOverEvent; /**\n * Drag out event\n * @class DragOutEvent\n * @module DragOutEvent\n * @extends DragEvent\n */\n\nDragOverEvent.type = 'drag:over';\nDragOverEvent.cancelable = true;\nclass DragOutEvent extends DragEvent {\n\n /**\n * Draggable container you are over\n * @property overContainer\n * @type {HTMLElement}\n * @readonly\n */\n get overContainer() {\n return this.data.overContainer;\n }\n\n /**\n * Draggable element you left\n * @property over\n * @type {HTMLElement}\n * @readonly\n */\n get over() {\n return this.data.over;\n }\n}\n\nexports.DragOutEvent = DragOutEvent; /**\n * Drag over container event\n * @class DragOverContainerEvent\n * @module DragOverContainerEvent\n * @extends DragEvent\n */\n\nDragOutEvent.type = 'drag:out';\nclass DragOverContainerEvent extends DragEvent {\n\n /**\n * Draggable container you are over\n * @property overContainer\n * @type {HTMLElement}\n * @readonly\n */\n get overContainer() {\n return this.data.overContainer;\n }\n}\n\nexports.DragOverContainerEvent = DragOverContainerEvent; /**\n * Drag out container event\n * @class DragOutContainerEvent\n * @module DragOutContainerEvent\n * @extends DragEvent\n */\n\nDragOverContainerEvent.type = 'drag:over:container';\nclass DragOutContainerEvent extends DragEvent {\n\n /**\n * Draggable container you left\n * @property overContainer\n * @type {HTMLElement}\n * @readonly\n */\n get overContainer() {\n return this.data.overContainer;\n }\n}\n\nexports.DragOutContainerEvent = DragOutContainerEvent; /**\n * Drag pressure event\n * @class DragPressureEvent\n * @module DragPressureEvent\n * @extends DragEvent\n */\n\nDragOutContainerEvent.type = 'drag:out:container';\nclass DragPressureEvent extends DragEvent {\n\n /**\n * Pressure applied on draggable element\n * @property pressure\n * @type {Number}\n * @readonly\n */\n get pressure() {\n return this.data.pressure;\n }\n}\n\nexports.DragPressureEvent = DragPressureEvent; /**\n * Drag stop event\n * @class DragStopEvent\n * @module DragStopEvent\n * @extends DragEvent\n */\n\nDragPressureEvent.type = 'drag:pressure';\nclass DragStopEvent extends DragEvent {}\n\nexports.DragStopEvent = DragStopEvent; /**\n * Drag stopped event\n * @class DragStoppedEvent\n * @module DragStoppedEvent\n * @extends DragEvent\n */\n\nDragStopEvent.type = 'drag:stop';\nclass DragStoppedEvent extends DragEvent {}\nexports.DragStoppedEvent = DragStoppedEvent;\nDragStoppedEvent.type = 'drag:stopped';\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Plugins = exports.Sensors = exports.Sortable = exports.Swappable = exports.Droppable = exports.Draggable = exports.BasePlugin = exports.BaseEvent = undefined;\n\nvar _Draggable = __webpack_require__(5);\n\nObject.defineProperty(exports, 'Draggable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Draggable).default;\n }\n});\n\nvar _Droppable = __webpack_require__(36);\n\nObject.defineProperty(exports, 'Droppable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Droppable).default;\n }\n});\n\nvar _Swappable = __webpack_require__(33);\n\nObject.defineProperty(exports, 'Swappable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Swappable).default;\n }\n});\n\nvar _Sortable = __webpack_require__(30);\n\nObject.defineProperty(exports, 'Sortable', {\n enumerable: true,\n get: function () {\n return _interopRequireDefault(_Sortable).default;\n }\n});\n\nvar _AbstractEvent = __webpack_require__(1);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nvar _AbstractPlugin = __webpack_require__(0);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _Sensors = __webpack_require__(6);\n\nvar Sensors = _interopRequireWildcard(_Sensors);\n\nvar _Plugins = __webpack_require__(27);\n\nvar Plugins = _interopRequireWildcard(_Plugins);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.BaseEvent = _AbstractEvent2.default;\nexports.BasePlugin = _AbstractPlugin2.default;\nexports.Sensors = Sensors;\nexports.Plugins = Plugins;\n\n/***/ })\n/******/ ]);\n});","\n\n\n","\n\n\n\n\n"],"names":["user","storeToRefs","useSurfaceStore","canIModerate","canIWrite","useSurfacePermissionsStore","shouldDisableDraggingPost","useSurfacePostsDragAndDropStore","sortPost","useSurfacePostsStore","postCidBeingDragged","ref","dragging","dragCloneStyle","canDrag","computed","props","postBeingEditedCid","value","shouldMatchApprovalColor","isAboveLine","isPublished","wasWrittenByCurrentUser","post","id","String","author_id","isEditableByCurrentUser","mutationObserver","onStartDrag","e","dragNode","document","querySelector","rect","getBoundingClientRect","middleX","left","width","xOffsetFix","originalEvent","clientX","pageX","innerHTML","MutationObserver","change","matrix","target","style","transform","replace","split","yOffsetFix","length","observe","attributes","attributeFilter","addDragJustEndClass","el","classList","add","setTimeout","remove","onEndDrag","event","item","onMove","postCid","dragged","dataset","reorder","list","postOrderInCids","map","p","cid","postOrderInIds","postIndex","indexOf","earlierPostId","laterPostId","sortIndex","computePostIndexFromPost","prevId","nextId","startLeaveAnimation","top","position","grandPa","parentElement","removeChild","appendChild","onMounted","createElement","head","watch","emit","draggableSortablePostArray","get","currentSortedPosts","set","updated","root","factory","module","modules","installedModules","__webpack_require__","moduleId","exports","name","getter","mode","ns","key","object","property","_AbstractPlugin","_AbstractPlugin2","_interopRequireDefault","obj","_AbstractEvent","_AbstractEvent2","_closest","_requestNextAnimationFrame","_distance","_touchCoords","_SensorEvent","_Sensor","_Sensor2","_DragEvent","_DraggableEvent","_Plugins","_Sensors","_Draggable","_Draggable2","_MouseSensor","_TouchSensor","_DragSensor","_ForceTouchSensor","_SnappableEvent","_CollidableEvent","_SortableEvent","_SwappableEvent","_DroppableEvent","_Announcement","_Focusable","_Mirror","_Scrollable","_extends","i","source","onSortableSorted","onSortableSort","defaultOptions","SortAnimation","draggable","dragEvent","sourceContainer","elements","oldIndex","newIndex","effectedElements","start","end","num","from","to","element","animate","duration","easingFunction","domEl","x","y","resetElementOnTransitionEnd","_SortAnimation","_SortAnimation2","SwapAnimation","over","horizontal","height","_SwapAnimation","_SwapAnimation2","onDragStart","onDragStop","onDragOver","onDragOut","onMirrorCreated","onMirrorDestroy","Snappable","snapInEvent","snapOutEvent","mirror","SnapEvent","SnapInEvent","SnapOutEvent","_Snappable","_Snappable2","_utils","resize","ResizeMirror","overContainer","overElement","overRect","_ResizeMirror","_ResizeMirror2","onDragMove","onRequestAnimationFrame","Collidable","collidables","collidableInEvent","collidableOutEvent","enteringCollidable","leavingCollidable","lastCollidingElement","CollidableEvent","CollidableInEvent","CollidableOutEvent","_Collidable","_Collidable2","onDragOverContainer","onSortableSortedDefaultAnnouncement","sourceText","overText","defaultAnnouncements","Sortable","containers","options","container","childElement","sortableStartEvent","sortableSortEvent","children","moves","move","oldContainer","newContainer","sortableSortedEvent","sortableStopEvent","index","emptyOverContainer","differentContainer","sameContainer","moveInsideEmptyContainer","moveWithinContainer","moveOutsideContainer","SortableEvent","SortableStartEvent","SortableSortEvent","SortableSortedEvent","SortableStopEvent","_Sortable","_Sortable2","onSwappableSwappedDefaultAnnouncement","swappedElement","Swappable","swappableStartEvent","swappableSwapEvent","swap","swappableSwappedEvent","swappableStopEvent","withTempElement","callback","tmpElement","overParent","sourceParent","SwappableEvent","SwappableStartEvent","SwappableSwapEvent","SwappableSwappedEvent","SwappableStopEvent","_Swappable","_Swappable2","dropInDropzone","returnToOriginalDropzone","closestDropzone","getDropzones","onDroppableDroppedDefaultAnnouncement","dropzone","dropzoneText","onDroppableReturnedDefaultAnnouncement","defaultClasses","Droppable","droppableStartEvent","dropzoneElement","droppableStopEvent","occupiedClasses","droppableDroppedEvent","droppableReturnedEvent","DroppableEvent","DroppableStartEvent","DroppableDroppedEvent","DroppableReturnedEvent","DroppableStopEvent","_Droppable","_Droppable2","Emitter","type","callbacks","copy","caughtErrors","error","_Emitter","_Emitter2","onDragPressure","Draggable","defaultPlugins","Plugin","defaultSensors","sensor","draggableInitializedEvent","draggableDestroyEvent","plugin","plugins","activePlugins","sensors","activeSensors","Sensor","classNames","current","sensorEvent","getSensorEvent","applyUserSelect","newSensorEvent","dragMoveEvent","withinCorrectContainer","isLeavingContainer","isLeavingDraggable","isOverContainer","isOverDraggable","dragOutEvent","dragOutContainerEvent","dragOverContainerEvent","dragOverEvent","dragStopEvent","dragStoppedEvent","dragPressureEvent","onMouseForceWillBegin","onMouseForceDown","onMouseDown","onMouseForceChange","onMouseMove","onMouseUp","onMouseForceGlobalChange","ForceTouchSensor","dragStartEvent","_ForceTouchSensor2","onDragEnd","onDrop","reset","DragSensor","nativeDraggableElement","_DragSensor2","onTouchStart","onTouchEnd","onTouchMove","startDrag","onDistanceChange","preventScrolling","TouchSensor","distance","delay","pageY","onContextMenu","startEvent","touch","timeElapsed","distanceTravelled","_TouchSensor2","SensorEvent","DragStartSensorEvent","DragMoveSensorEvent","DragStopSensorEvent","DragPressureSensorEvent","onContextMenuWhileDragging","MouseSensor","preventNativeDragStart","_MouseSensor2","defaultDealy","calcDelay","optionsDelay","touchCoords","touches","changedTouches","_touchCoords2","x1","y1","x2","y2","_distance2","requestNextAnimationFrame","_requestNextAnimationFrame2","closest","matchFunction","selector","nodeList","singleElement","isSelector","isFunction","isNodeList","isElement","conditionFn","currentElement","_closest2","scroll","Scrollable","closestScrollableElement","scrollOffset","speed","sensitivity","bottomCutOff","cutOff","documentScrollingElement","getDocumentScrollingElement","scrollableElement","clientY","offsetHeight","offsetWidth","innerHeight","innerWidth","hasOverflow","overflowRegex","computedStyles","overflow","isStaticallyPositioned","excludeStaticParents","parent","_Scrollable2","MirrorEvent","MirrorCreateEvent","MirrorCreatedEvent","MirrorAttachedEvent","MirrorMoveEvent","MirrorDestroyEvent","_MirrorEvent","_objectWithoutProperties","keys","onMirrorMove","onScroll","getAppendableContainer","Mirror","originalSource","mirrorCreateEvent","isNativeDragEvent","appendableContainer","mirrorCreatedEvent","mirrorAttachedEvent","passedThreshX","passedThreshY","lastX","lastY","mirrorMoveEvent","mirrorDestroyEvent","mirrorClasses","setState","_ref","mirrorOffset","initialX","initialY","args","initialState","computeMirrorDimensions","calculateMirrorOffset","resetMirror","addMirrorClasses","positionMirror","removeMirrorID","mirrorEvent","_ref2","lastMovedX","lastMovedY","appendTo","_ref3","withPromise","resolve","sourceRect","_ref4","_ref5","computedSourceStyles","_ref6","_ref7","withFrame","initial","_ref8","result","raf","reject","_Mirror2","onInitialize","onDestroy","Focusable","decorateElement","stripElement","elementsWithMissingTabIndex","tabIndexElementPosition","_Focusable2","AbstractPlugin","announceEvent","announceMessage","ARIA_RELEVANT","ARIA_ATOMIC","ARIA_LIVE","ROLE","Announcement","message","announce","liveRegion","createRegion","expire","_Announcement2","DraggableEvent","DraggableInitializedEvent","DraggableDestroyEvent","canceled","AbstractEvent","data","DragEvent","DragStartEvent","DragMoveEvent","DragOverEvent","DragOutEvent","DragOverContainerEvent","DragOutContainerEvent","DragPressureEvent","DragStopEvent","DragStoppedEvent","Sensors","_interopRequireWildcard","Plugins","newObj","draggableWrapper","arrayDuringSorting","sortable","makeSortable","$el","handle","constrainDimensions","yAxis","on","find","cancel","originalNode","parentNode","right","splice","disconnect","destroy","useDoubleClickToPost","xHeader","headerHeight","backgroundLuminance","isReadOnly","isScreenshotMode","isDesktopLayout","isMobileLayout","commentsPanelPostId","useCommentsStore","isAPostDragging","surfacePostsStore","newestPostCid","startNewPost","canShowAddPostButton","isDragging","wishList","handleDraggingChanged","startOfLine","endOfLine","isAtStart","isAtEnd","startIntersectionObserver","endIntersectionObserver","observeIntersection","IntersectionObserver","entry","intersectionRatio","addBefore","postAfter","previousId","postAfterIndex","findIndex","addToLast","SCROLL_PADDING","scrollToPostWithCid","nextTick","newWishElement","newWishWrapperElement","body","scrollLeft","offsetLeft","$","postId","lineExtendedElement","getElementById","postElement","wrapperElement","scrollToStart","scrollToEnd","scrollWidth","dir","maxHeightForRealWishStyle","updateWishMaxHeight","bottomBarHeight","circleHeightPlusPaddingHeight","approvalMessageHeight","css","update","appendCssToDocumentHead","newHeaderHeight","onBeforeUnmount"],"mappings":"s/LA8BM,CAAEA,KAAAA,CAAK,EAAIC,EAAYC,GAAiB,EACxC,CAAEC,aAAAA,EAAcC,UAAAA,CAAU,EAAIH,EAAYI,IAA4B,EACtE,CAAEC,0BAAAA,CAA0B,EAAIL,EAAYM,IAAiC,EAC7E,CAAEC,SAAAA,CAAS,EAAIC,GAAqB,EAEpCC,EAAsBC,EAAgB,IAAI,EAC1CC,EAAWD,EAAa,EAAK,EAC7BE,EAAiBF,IAEjBG,EAAUC,EAAkB,IACzB,CAACC,EAAMC,oBAAsB,CAACX,EAA0BY,KAChE,EAEQ,SAAAC,EAAyBC,EAAsBC,EAAgC,CAClF,OAAAA,EAAoB,GACpBD,EAAoBjB,EAAae,MAC9B,CAACf,EAAae,KACvB,CAEA,SAASI,EAAwBC,EAAqB,CACpD,MAAO,CAAC,CAACvB,EAAKkB,MAAMM,IAAMC,OAAOF,EAAKG,SAAS,IAAMD,OAAOzB,EAAKkB,MAAMM,EAAE,CAC3E,CAEA,SAASG,EAAwBJ,EAAqB,CACpD,OAAOpB,EAAae,OAAUI,EAAwBC,CAAI,GAAKnB,EAAUc,KAC3E,CAEI,IAAAU,EACJ,SAASC,EAAYC,EAAS,CAC5BlB,EAASM,MAAQ,GACX,MAAAa,EAAWC,SAASC,cAAc,mBAAmB,EACvD,GAAAF,GAAYlB,EAAeK,MAAO,CAC9B,MAAAgB,EAAOH,EAASI,wBAChBC,EAAUF,EAAKG,KAAOH,EAAKI,MAAQ,EAKnCC,GAAcT,EAAEU,cAAcC,SAAWX,EAAEU,cAAcE,OAASN,EAAU,GAClFvB,EAAeK,MAAMyB,UAAY;AAAA;AAAA;AAAA;AAAA,iCAIJJ,CAAU;AAAA;AAAA,QAGpBX,EAAA,IAAIgB,iBAAkBC,GAAW,CAE5C,MAAAC,EADaD,EAAO,CAAC,EAAEE,OAAuBC,MAAMC,UACjCC,QAAQ,UAAW,EAAE,EAAEA,QAAQ,IAAK,EAAE,EAAEC,MAAM,GAAG,EACpEC,EAAa,CAACN,EAAOA,EAAOO,OAAS,CAAC,EACxCxC,EAAeK,QAAU,SAC7BL,EAAeK,MAAMyB,UAAY;AAAA;AAAA;AAAA;AAAA,mCAIJJ,CAAU,OAAOa,CAAU;AAAA;AAAA,UAG1D,CAAC,EACgBxB,EAAA0B,QAAQvB,EAAU,CAAEwB,WAAY,GAAMC,gBAAiB,CAAC,OAAO,CAAE,CAAC,CACrF,CACF,CAGA,SAASC,EAAoBC,EAAuB,CAC/CA,EAAAC,UAAUC,IAAI,eAAe,EAChCC,WAAW,IAAM,CACZH,EAAAC,UAAUG,OAAO,eAAe,GAClC,GAAG,CACR,CAGA,SAASC,EAAUC,EAAkB,CACnCP,EAAoBO,EAAMC,IAAI,EAC9BrD,EAASM,MAAQ,EACnB,CAEA,SAASgD,EAAOpC,EAAS,CAKjB,MAAAqC,EAAUrC,EAAEsC,QAAQC,QAAQF,QAClCzD,EAAoBQ,MAAQiD,CAC9B,CAES,SAAAG,EAAQH,EAAcI,EAAoB,CACjD,MAAMC,EAAkBD,EAAKE,IAAKC,GAAMA,EAAEC,GAAG,EACvCC,EAAiBL,EAAKE,IAAKC,GAAMA,EAAElD,EAAE,EACrCqD,EAAYL,EAAgBM,QAAQX,CAAO,EAC3CY,EAAgBF,IAAc,EAAI,KAAOD,EAAeC,EAAY,CAAC,EACrEG,EAAcH,IAAcN,EAAKlB,OAAS,EAAI,KAAOuB,EAAeC,EAAY,CAAC,EACjFI,EAAYC,EAAyB,KAAM,CAC/CC,OAAQH,IAAgB,KAAO,KAAO,QAAQA,CAAW,GACzDI,OAAQL,IAAkB,KAAO,KAAO,QAAQA,CAAa,EAC9D,CAAA,EAAEE,UACMzE,EAAA,CACP2D,QAAAA,EACAc,UAAAA,CACF,CAAC,CACH,CAEA,SAASI,EAAoB3B,EAA0B,SACrDA,EAAGV,MAAMX,KAAOqB,EAAGW,QAAQhC,MAAQ,GACnCqB,EAAGV,MAAMsC,IAAM5B,EAAGW,QAAQiB,KAAO,GACjC5B,EAAGV,MAAMuC,SAAW,WAEd,MAAAC,GAAU9B,EAAAA,EAAG+B,gBAAH/B,YAAAA,EAAkB+B,eAC/B/B,EAAAA,EAAA+B,gBAAA/B,MAAAA,EAAegC,YAAYhC,GAC9B8B,GAAAA,MAAAA,EAASG,YAAYjC,EACvB,CAEAkC,EAAU,IAAM,CACC/E,EAAAK,MAAQc,SAAS6D,cAAc,OAAO,EAC5C7D,SAAA8D,KAAKH,YAAY9E,EAAeK,KAAK,CAChD,CAAC,EAED6E,EAAMnF,EAAU,IAAM,CACfoF,EAAA,WAAYpF,EAASM,KAAK,CACjC,CAAC,EAED,MAAM+E,EAA6BlF,EAAiB,CAClDmF,KAAM,CACG,MAAA,CAAC,GAAGlF,EAAMmF,kBAAkB,CACrC,EACAC,IAAIC,EAAiB,CACf3F,EAAoBQ,OAAS,OACvBoD,EAAA5D,EAAoBQ,MAAOmF,CAAO,EAC1C3F,EAAoBQ,MAAQ,KAEhC,CACF,CAAC,ytECjKA,SAA0CoF,EAAMC,EAAS,CAExDC,EAAA,QAAiBD,GAOlB,GAAE,OAAQ,UAAW,CACtB,OAAiB,SAASE,EAAS,CAEzB,IAAIC,EAAmB,CAAA,EAGvB,SAASC,EAAoBC,EAAU,CAGtC,GAAGF,EAAiBE,CAAQ,EAC3B,OAAOF,EAAiBE,CAAQ,EAAE,QAGnC,IAAIJ,EAASE,EAAiBE,CAAQ,EAAI,CACzC,EAAGA,EACH,EAAG,GACH,QAAS,CAAC,CACtB,EAGW,OAAAH,EAAQG,CAAQ,EAAE,KAAKJ,EAAO,QAASA,EAAQA,EAAO,QAASG,CAAmB,EAGlFH,EAAO,EAAI,GAGJA,EAAO,OACf,CAIA,OAAAG,EAAoB,EAAIF,EAGxBE,EAAoB,EAAID,EAGxBC,EAAoB,EAAI,SAASE,EAASC,EAAMC,EAAQ,CACnDJ,EAAoB,EAAEE,EAASC,CAAI,GACtC,OAAO,eAAeD,EAASC,EAAM,CAAE,WAAY,GAAM,IAAKC,CAAM,CAAE,CAElF,EAGUJ,EAAoB,EAAI,SAASE,EAAS,CACtC,OAAO,OAAW,KAAe,OAAO,aAC1C,OAAO,eAAeA,EAAS,OAAO,YAAa,CAAE,MAAO,QAAQ,CAAE,EAEvE,OAAO,eAAeA,EAAS,aAAc,CAAE,MAAO,EAAI,CAAE,CACvE,EAOUF,EAAoB,EAAI,SAASzF,EAAO8F,EAAM,CAG7C,GAFGA,EAAO,IAAG9F,EAAQyF,EAAoBzF,CAAK,GAC3C8F,EAAO,GACNA,EAAO,GAAM,OAAO9F,GAAU,UAAYA,GAASA,EAAM,WAAY,OAAOA,EAChF,IAAI+F,EAAK,OAAO,OAAO,IAAI,EAG3B,GAFAN,EAAoB,EAAEM,CAAE,EACxB,OAAO,eAAeA,EAAI,UAAW,CAAE,WAAY,GAAM,MAAO/F,CAAK,CAAE,EACpE8F,EAAO,GAAK,OAAO9F,GAAS,SAAU,QAAQgG,KAAOhG,EAAOyF,EAAoB,EAAEM,EAAIC,GAAK,SAASA,EAAK,CAAE,OAAOhG,EAAMgG,CAAG,CAAI,GAAC,KAAK,KAAMA,CAAG,CAAC,EAClJ,OAAOD,CAClB,EAGUN,EAAoB,EAAI,SAASH,EAAQ,CACxC,IAAIO,EAASP,GAAUA,EAAO,WAC7B,UAAsB,CAAE,OAAOA,EAAO,OAAa,EACnD,UAA4B,CAAE,OAAOA,GACtC,OAAAG,EAAoB,EAAEI,EAAQ,IAAKA,CAAM,EAClCA,CAClB,EAGUJ,EAAoB,EAAI,SAASQ,EAAQC,EAAU,CAAE,OAAO,OAAO,UAAU,eAAe,KAAKD,EAAQC,CAAQ,CAAE,EAGnHT,EAAoB,EAAI,GAIjBA,EAAoBA,EAAoB,EAAI,EAAE,CACrD,EAEA,CAEH,SAASH,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIQ,EAAkBV,EAAoB,EAAE,EAExCW,EAAmBC,EAAuBF,CAAe,EAE7D,SAASE,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUS,EAAiB,OAE5B,EAEA,SAASd,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIY,EAAiBd,EAAoB,EAAE,EAEvCe,EAAkBH,EAAuBE,CAAc,EAE3D,SAASF,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUa,EAAgB,OAE3B,EAEA,SAASlB,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIc,EAAWhB,EAAoB,EAAE,EAErC,OAAO,eAAeE,EAAS,UAAW,CACxC,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuBI,CAAQ,EAAE,OAC1C,CACF,CAAC,EAED,IAAIC,EAA6BjB,EAAoB,EAAE,EAEvD,OAAO,eAAeE,EAAS,4BAA6B,CAC1D,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuBK,CAA0B,EAAE,OAC5D,CACF,CAAC,EAED,IAAIC,EAAYlB,EAAoB,EAAE,EAEtC,OAAO,eAAeE,EAAS,WAAY,CACzC,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuBM,CAAS,EAAE,OAC3C,CACF,CAAC,EAED,IAAIC,EAAenB,EAAoB,EAAE,EAEzC,OAAO,eAAeE,EAAS,cAAe,CAC5C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuBO,CAAY,EAAE,OAC9C,CACF,CAAC,EAED,SAASP,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAEvF,EAEA,SAAShB,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIkB,EAAepB,EAAoB,EAAE,EAEzC,OAAO,KAAKoB,CAAY,EAAE,QAAQ,SAAUb,EAAK,CAC3CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAOa,EAAab,CAAG,CACzB,CACJ,CAAG,CACH,CAAC,CAEM,EAEA,SAASV,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAImB,EAAUrB,EAAoB,EAAE,EAEhCsB,EAAWV,EAAuBS,CAAO,EAE7C,SAAST,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUoB,EAAS,OAEpB,EAEA,SAASzB,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIqB,EAAavB,EAAoB,EAAE,EAEvC,OAAO,KAAKuB,CAAU,EAAE,QAAQ,SAAUhB,EAAK,CACzCA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAOgB,EAAWhB,CAAG,CACvB,CACJ,CAAG,CACH,CAAC,EAED,IAAIiB,EAAkBxB,EAAoB,EAAE,EAE5C,OAAO,KAAKwB,CAAe,EAAE,QAAQ,SAAUjB,EAAK,CAC9CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAOiB,EAAgBjB,CAAG,CAC5B,CACJ,CAAG,CACH,CAAC,EAED,IAAIkB,EAAWzB,EAAoB,EAAE,EAErC,OAAO,KAAKyB,CAAQ,EAAE,QAAQ,SAAUlB,EAAK,CACvCA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAOkB,EAASlB,CAAG,CACrB,CACJ,CAAG,CACH,CAAC,EAED,IAAImB,EAAW1B,EAAoB,CAAC,EAEpC,OAAO,KAAK0B,CAAQ,EAAE,QAAQ,SAAUnB,EAAK,CACvCA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAOmB,EAASnB,CAAG,CACrB,CACJ,CAAG,CACH,CAAC,EAED,IAAIoB,EAAa3B,EAAoB,EAAE,EAEnC4B,EAAchB,EAAuBe,CAAU,EAEnD,SAASf,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAU0B,EAAY,OAEvB,EAEA,SAAS/B,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAImB,EAAUrB,EAAoB,CAAC,EAEnC,OAAO,eAAeE,EAAS,SAAU,CACvC,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuBS,CAAO,EAAE,OACzC,CACF,CAAC,EAED,IAAIQ,EAAe7B,EAAoB,EAAE,EAEzC,OAAO,eAAeE,EAAS,cAAe,CAC5C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuBiB,CAAY,EAAE,OAC9C,CACF,CAAC,EAED,IAAIC,EAAe9B,EAAoB,EAAE,EAEzC,OAAO,eAAeE,EAAS,cAAe,CAC5C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuBkB,CAAY,EAAE,OAC9C,CACF,CAAC,EAED,IAAIC,EAAc/B,EAAoB,EAAE,EAExC,OAAO,eAAeE,EAAS,aAAc,CAC3C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuBmB,CAAW,EAAE,OAC7C,CACF,CAAC,EAED,IAAIC,EAAoBhC,EAAoB,EAAE,EAE9C,OAAO,eAAeE,EAAS,mBAAoB,CACjD,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuBoB,CAAiB,EAAE,OACnD,CACF,CAAC,EAED,IAAIZ,EAAepB,EAAoB,CAAC,EAExC,OAAO,KAAKoB,CAAY,EAAE,QAAQ,SAAUb,EAAK,CAC3CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAOa,EAAab,CAAG,CACzB,CACJ,CAAG,CACH,CAAC,EAED,SAASK,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAEvF,EAEA,SAAShB,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAI+B,EAAkBjC,EAAoB,EAAE,EAE5C,OAAO,KAAKiC,CAAe,EAAE,QAAQ,SAAU1B,EAAK,CAC9CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAO0B,EAAgB1B,CAAG,CAC5B,CACJ,CAAG,CACH,CAAC,CAEM,EAEA,SAASV,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIgC,EAAmBlC,EAAoB,EAAE,EAE7C,OAAO,KAAKkC,CAAgB,EAAE,QAAQ,SAAU3B,EAAK,CAC/CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAO2B,EAAiB3B,CAAG,CAC7B,CACJ,CAAG,CACH,CAAC,CAEM,EAEA,SAASV,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIiC,EAAiBnC,EAAoB,EAAE,EAE3C,OAAO,KAAKmC,CAAc,EAAE,QAAQ,SAAU5B,EAAK,CAC7CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAO4B,EAAe5B,CAAG,CAC3B,CACJ,CAAG,CACH,CAAC,CAEM,EAEA,SAASV,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIkC,EAAkBpC,EAAoB,EAAE,EAE5C,OAAO,KAAKoC,CAAe,EAAE,QAAQ,SAAU7B,EAAK,CAC9CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAO6B,EAAgB7B,CAAG,CAC5B,CACJ,CAAG,CACH,CAAC,CAEM,EAEA,SAASV,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAImC,EAAkBrC,EAAoB,EAAE,EAE5C,OAAO,KAAKqC,CAAe,EAAE,QAAQ,SAAU9B,EAAK,CAC9CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAO8B,EAAgB9B,CAAG,CAC5B,CACJ,CAAG,CACH,CAAC,CAEM,EAEA,SAASV,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIoC,EAAgBtC,EAAoB,EAAE,EAE1C,OAAO,eAAeE,EAAS,eAAgB,CAC7C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuB0B,CAAa,EAAE,OAC/C,CACF,CAAC,EACD,OAAO,eAAepC,EAAS,6BAA8B,CAC3D,WAAY,GACZ,IAAK,UAAY,CACf,OAAOoC,EAAc,cACvB,CACF,CAAC,EAED,IAAIC,EAAavC,EAAoB,EAAE,EAEvC,OAAO,eAAeE,EAAS,YAAa,CAC1C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuB2B,CAAU,EAAE,OAC5C,CACF,CAAC,EAED,IAAIC,EAAUxC,EAAoB,EAAE,EAEpC,OAAO,eAAeE,EAAS,SAAU,CACvC,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuB4B,CAAO,EAAE,OACzC,CACF,CAAC,EACD,OAAO,eAAetC,EAAS,uBAAwB,CACrD,WAAY,GACZ,IAAK,UAAY,CACf,OAAOsC,EAAQ,cACjB,CACF,CAAC,EAED,IAAIC,EAAczC,EAAoB,EAAE,EAExC,OAAO,eAAeE,EAAS,aAAc,CAC3C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuB6B,CAAW,EAAE,OAC7C,CACF,CAAC,EACD,OAAO,eAAevC,EAAS,2BAA4B,CACzD,WAAY,GACZ,IAAK,UAAY,CACf,OAAOuC,EAAY,cACrB,CACF,CAAC,EAED,SAAS7B,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAEvF,EAEA,SAAShB,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIsB,EAAkBxB,EAAoB,EAAE,EAE5C,OAAO,KAAKwB,CAAe,EAAE,QAAQ,SAAUjB,EAAK,CAC9CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAOiB,EAAgBjB,CAAG,CAC5B,CACJ,CAAG,CACH,CAAC,CAEM,EAEA,SAASV,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIqB,EAAavB,EAAoB,EAAE,EAEvC,OAAO,KAAKuB,CAAU,EAAE,QAAQ,SAAUhB,EAAK,CACzCA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAOgB,EAAWhB,CAAG,CACvB,CACJ,CAAG,CACH,CAAC,CAEM,EAEA,SAASV,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,eAAiB,OAEzB,IAAIwC,EAAW,OAAO,QAAU,SAAUtG,EAAQ,CAAE,QAASuG,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASpC,KAAOqC,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQrC,CAAG,IAAKnE,EAAOmE,CAAG,EAAIqC,EAAOrC,CAAG,GAAS,OAAOnE,GAEnPsE,EAAkBV,EAAoB,CAAC,EAEvCW,EAAmBC,EAAuBF,CAAe,EAE7D,SAASE,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAMgC,EAAmB,OAAO,kBAAkB,EAC5CC,EAAiB,OAAO,gBAAgB,EASxCC,EAAiB7C,EAAQ,eAAiB,CAC9C,SAAU,IACV,eAAgB,aAClB,EAQA,MAAM8C,UAAsBrC,EAAiB,OAAQ,CAMnD,YAAYsC,EAAW,CACrB,MAAMA,CAAS,EASf,KAAK,QAAUP,EAAS,CAAA,EAAIK,EAAgB,KAAK,WAAU,CAAE,EAO7D,KAAK,mBAAqB,KAC1B,KAAK,aAAe,GAEpB,KAAKF,CAAgB,EAAI,KAAKA,CAAgB,EAAE,KAAK,IAAI,EACzD,KAAKC,CAAc,EAAI,KAAKA,CAAc,EAAE,KAAK,IAAI,CACvD,CAKA,QAAS,CACP,KAAK,UAAU,GAAG,gBAAiB,KAAKA,CAAc,CAAC,EACvD,KAAK,UAAU,GAAG,kBAAmB,KAAKD,CAAgB,CAAC,CAC7D,CAKA,QAAS,CACP,KAAK,UAAU,IAAI,gBAAiB,KAAKC,CAAc,CAAC,EACxD,KAAK,UAAU,IAAI,kBAAmB,KAAKD,CAAgB,CAAC,CAC9D,CAMA,YAAa,CACX,OAAO,KAAK,UAAU,QAAQ,eAAiB,CAAA,CACjD,CAOA,CAACC,CAAc,EAAE,CAAE,UAAAI,GAAa,CAC9B,KAAM,CAAE,gBAAAC,CAAiB,EAAGD,EACtBE,EAAW,KAAK,UAAU,iCAAiCD,CAAe,EAChF,KAAK,aAAe,MAAM,KAAKC,CAAQ,EAAE,IAAIrG,IACpC,CACL,MAAOA,EACP,UAAWA,EAAG,UACd,WAAYA,EAAG,UACvB,EACK,CACH,CAOA,CAAC8F,CAAgB,EAAE,CAAE,SAAAQ,EAAU,SAAAC,CAAQ,EAAI,CACzC,GAAID,IAAaC,EACf,OAGF,MAAMC,EAAmB,CAAA,EACzB,IAAIC,EACAC,EACAC,EACAL,EAAWC,GACbE,EAAQF,EACRG,EAAMJ,EAAW,EACjBK,EAAM,IAENF,EAAQH,EAAW,EACnBI,EAAMH,EACNI,EAAM,IAGR,QAASf,EAAIa,EAAOb,GAAKc,EAAKd,IAAK,CACjC,MAAMgB,EAAO,KAAK,aAAahB,CAAC,EAC1BiB,EAAK,KAAK,aAAajB,EAAIe,CAAG,EACpCH,EAAiB,KAAK,CAAE,KAAAI,EAAM,GAAAC,CAAI,CAAA,CACpC,CACA,qBAAqB,KAAK,kBAAkB,EAG5C,KAAK,mBAAqB,sBAAsB,IAAM,CACpDL,EAAiB,QAAQM,GAAWC,EAAQD,EAAS,KAAK,OAAO,CAAC,CACxE,CAAK,CACH,CACF,CAEA3D,EAAQ,QAAU8C,EAWlB,SAASc,EAAQ,CAAE,KAAAH,EAAM,GAAAC,CAAI,EAAE,CAAE,SAAAG,EAAU,eAAAC,GAAkB,CAC3D,MAAMC,EAAQN,EAAK,MACbO,EAAIP,EAAK,WAAaC,EAAG,WACzBO,EAAIR,EAAK,UAAYC,EAAG,UAE9BK,EAAM,MAAM,cAAgB,OAC5BA,EAAM,MAAM,UAAY,eAAeC,CAAC,OAAOC,CAAC,SAEhD,sBAAsB,IAAM,CAC1BF,EAAM,iBAAiB,gBAAiBG,CAA2B,EACnEH,EAAM,MAAM,WAAa,aAAaF,CAAQ,MAAMC,CAAc,GAClEC,EAAM,MAAM,UAAY,EAC5B,CAAG,CACH,CAOA,SAASG,EAA4B/G,EAAO,CAC1CA,EAAM,OAAO,MAAM,WAAa,GAChCA,EAAM,OAAO,MAAM,cAAgB,GACnCA,EAAM,OAAO,oBAAoB,gBAAiB+G,CAA2B,CAC/E,CAEO,EAEA,SAASvE,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,eAAiB,OAEzB,IAAImE,EAAiBrE,EAAoB,EAAE,EAEvCsE,EAAkB1D,EAAuByD,CAAc,EAE3D,SAASzD,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUoE,EAAgB,QAClCpE,EAAQ,eAAiBmE,EAAe,cAEjC,EAEA,SAASxE,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,eAAiB,OAEzB,IAAIwC,EAAW,OAAO,QAAU,SAAUtG,EAAQ,CAAE,QAASuG,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASpC,KAAOqC,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQrC,CAAG,IAAKnE,EAAOmE,CAAG,EAAIqC,EAAOrC,CAAG,GAAS,OAAOnE,GAEnPsE,EAAkBV,EAAoB,CAAC,EAEvCW,EAAmBC,EAAuBF,CAAe,EAE7D,SAASE,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAMgC,EAAmB,OAAO,kBAAkB,EAU5CE,EAAiB7C,EAAQ,eAAiB,CAC9C,SAAU,IACV,eAAgB,cAChB,WAAY,EACd,EAQA,MAAMqE,UAAsB5D,EAAiB,OAAQ,CAMnD,YAAYsC,EAAW,CACrB,MAAMA,CAAS,EASf,KAAK,QAAUP,EAAS,CAAA,EAAIK,EAAgB,KAAK,WAAU,CAAE,EAO7D,KAAK,mBAAqB,KAE1B,KAAKF,CAAgB,EAAI,KAAKA,CAAgB,EAAE,KAAK,IAAI,CAC3D,CAKA,QAAS,CACP,KAAK,UAAU,GAAG,kBAAmB,KAAKA,CAAgB,CAAC,CAC7D,CAKA,QAAS,CACP,KAAK,UAAU,IAAI,kBAAmB,KAAKA,CAAgB,CAAC,CAC9D,CAMA,YAAa,CACX,OAAO,KAAK,UAAU,QAAQ,eAAiB,CAAA,CACjD,CAOA,CAACA,CAAgB,EAAE,CAAE,SAAAQ,EAAU,SAAAC,EAAU,UAAAJ,CAAS,EAAI,CACpD,KAAM,CAAE,OAAAN,EAAQ,KAAA4B,CAAM,EAAGtB,EAEzB,qBAAqB,KAAK,kBAAkB,EAG5C,KAAK,mBAAqB,sBAAsB,IAAM,CAChDG,GAAYC,EACdQ,EAAQlB,EAAQ4B,EAAM,KAAK,OAAO,EAElCV,EAAQU,EAAM5B,EAAQ,KAAK,OAAO,CAE1C,CAAK,CACH,CACF,CAEA1C,EAAQ,QAAUqE,EAWlB,SAAST,EAAQH,EAAMC,EAAI,CAAE,SAAAG,EAAU,eAAAC,EAAgB,WAAAS,GAAc,CACnE,UAAWZ,IAAW,CAACF,EAAMC,CAAE,EAC7BC,EAAQ,MAAM,cAAgB,OAGhC,GAAIY,EAAY,CACd,MAAM9I,EAAQgI,EAAK,YACnBA,EAAK,MAAM,UAAY,eAAehI,CAAK,YAC3CiI,EAAG,MAAM,UAAY,gBAAgBjI,CAAK,WAC9C,KAAS,CACL,MAAM+I,EAASf,EAAK,aACpBA,EAAK,MAAM,UAAY,kBAAkBe,CAAM,SAC/Cd,EAAG,MAAM,UAAY,mBAAmBc,CAAM,QAChD,CAEA,sBAAsB,IAAM,CAC1B,UAAWb,IAAW,CAACF,EAAMC,CAAE,EAC7BC,EAAQ,iBAAiB,gBAAiBO,CAA2B,EACrEP,EAAQ,MAAM,WAAa,aAAaE,CAAQ,MAAMC,CAAc,GACpEH,EAAQ,MAAM,UAAY,EAEhC,CAAG,CACH,CAOA,SAASO,EAA4B/G,EAAO,CAC1CA,EAAM,OAAO,MAAM,WAAa,GAChCA,EAAM,OAAO,MAAM,cAAgB,GACnCA,EAAM,OAAO,oBAAoB,gBAAiB+G,CAA2B,CAC/E,CAEO,EAEA,SAASvE,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,eAAiB,OAEzB,IAAIyE,EAAiB3E,EAAoB,EAAE,EAEvC4E,EAAkBhE,EAAuB+D,CAAc,EAE3D,SAAS/D,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAU0E,EAAgB,QAClC1E,EAAQ,eAAiByE,EAAe,cAEjC,EAEA,SAAS9E,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIQ,EAAkBV,EAAoB,CAAC,EAEvCW,EAAmBC,EAAuBF,CAAe,EAEzDuB,EAAkBjC,EAAoB,CAAC,EAE3C,SAASY,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAMgE,EAAc,OAAO,aAAa,EAClCC,EAAa,OAAO,YAAY,EAChCC,EAAa,OAAO,YAAY,EAChCC,EAAY,OAAO,WAAW,EAC9BC,EAAkB,OAAO,iBAAiB,EAC1CC,EAAkB,OAAO,iBAAiB,EAQhD,MAAMC,UAAkBxE,EAAiB,OAAQ,CAM/C,YAAYsC,EAAW,CACrB,MAAMA,CAAS,EAMf,KAAK,YAAc,KAMnB,KAAK,OAAS,KAEd,KAAK4B,CAAW,EAAI,KAAKA,CAAW,EAAE,KAAK,IAAI,EAC/C,KAAKC,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAKC,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAKC,CAAS,EAAI,KAAKA,CAAS,EAAE,KAAK,IAAI,EAC3C,KAAKC,CAAe,EAAI,KAAKA,CAAe,EAAE,KAAK,IAAI,EACvD,KAAKC,CAAe,EAAI,KAAKA,CAAe,EAAE,KAAK,IAAI,CACzD,CAKA,QAAS,CACP,KAAK,UAAU,GAAG,aAAc,KAAKL,CAAW,CAAC,EAAE,GAAG,YAAa,KAAKC,CAAU,CAAC,EAAE,GAAG,YAAa,KAAKC,CAAU,CAAC,EAAE,GAAG,WAAY,KAAKC,CAAS,CAAC,EAAE,GAAG,iBAAkB,KAAKD,CAAU,CAAC,EAAE,GAAG,gBAAiB,KAAKC,CAAS,CAAC,EAAE,GAAG,iBAAkB,KAAKC,CAAe,CAAC,EAAE,GAAG,iBAAkB,KAAKC,CAAe,CAAC,CAC3T,CAKA,QAAS,CACP,KAAK,UAAU,IAAI,aAAc,KAAKL,CAAW,CAAC,EAAE,IAAI,YAAa,KAAKC,CAAU,CAAC,EAAE,IAAI,YAAa,KAAKC,CAAU,CAAC,EAAE,IAAI,WAAY,KAAKC,CAAS,CAAC,EAAE,IAAI,iBAAkB,KAAKD,CAAU,CAAC,EAAE,IAAI,gBAAiB,KAAKC,CAAS,CAAC,EAAE,IAAI,iBAAkB,KAAKC,CAAe,CAAC,EAAE,IAAI,iBAAkB,KAAKC,CAAe,CAAC,CACnU,CAOA,CAACL,CAAW,EAAExH,EAAO,CACfA,EAAM,aAIV,KAAK,YAAcA,EAAM,OAC3B,CAOA,CAACyH,CAAU,GAAI,CACb,KAAK,YAAc,IACrB,CAOA,CAACC,CAAU,EAAE1H,EAAO,CAClB,GAAIA,EAAM,WACR,OAGF,MAAMuF,EAASvF,EAAM,QAAUA,EAAM,UAAU,OAE/C,GAAIuF,IAAW,KAAK,YAAa,CAC/B,KAAK,YAAc,KACnB,MACF,CAEA,MAAMwC,EAAc,IAAInD,EAAgB,YAAY,CAClD,UAAW5E,EACX,UAAWA,EAAM,MAAQA,EAAM,SACrC,CAAK,EAED,KAAK,UAAU,QAAQ+H,CAAW,EAE9B,CAAAA,EAAY,aAIZ,KAAK,SACP,KAAK,OAAO,MAAM,QAAU,QAG9BxC,EAAO,UAAU,OAAO,GAAG,KAAK,UAAU,iBAAiB,iBAAiB,CAAC,EAC7EA,EAAO,UAAU,IAAI,GAAG,KAAK,UAAU,iBAAiB,eAAe,CAAC,EAGxE,WAAW,IAAM,CACfA,EAAO,UAAU,OAAO,GAAG,KAAK,UAAU,iBAAiB,eAAe,CAAC,CAC5E,EAAE,KAAK,UAAU,QAAQ,aAAa,EACzC,CAOA,CAACoC,CAAS,EAAE3H,EAAO,CACjB,GAAIA,EAAM,WACR,OAGF,MAAMuF,EAASvF,EAAM,QAAUA,EAAM,UAAU,OAEzCgI,EAAe,IAAIpD,EAAgB,aAAa,CACpD,UAAW5E,EACX,UAAWA,EAAM,MAAQA,EAAM,SACrC,CAAK,EAED,KAAK,UAAU,QAAQgI,CAAY,EAE/B,CAAAA,EAAa,aAIb,KAAK,SACP,KAAK,OAAO,MAAM,QAAU,IAG9BzC,EAAO,UAAU,IAAI,GAAG,KAAK,UAAU,iBAAiB,iBAAiB,CAAC,EAC5E,CAOA,CAACqC,CAAe,EAAE,CAAE,OAAAK,GAAU,CAC5B,KAAK,OAASA,CAChB,CAOA,CAACJ,CAAe,GAAI,CAClB,KAAK,OAAS,IAChB,CACF,CACAhF,EAAQ,QAAUiF,CAEX,EAEA,SAAStF,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,aAAeA,EAAQ,YAAcA,EAAQ,UAAY,OAEjE,IAAIY,EAAiBd,EAAoB,CAAC,EAEtCe,EAAkBH,EAAuBE,CAAc,EAE3D,SAASF,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAQ9F,MAAM0E,UAAkBxE,EAAgB,OAAQ,CAQ9C,IAAI,WAAY,CACd,OAAO,KAAK,KAAK,SACnB,CAQA,IAAI,WAAY,CACd,OAAO,KAAK,KAAK,SACnB,CACF,CAEAb,EAAQ,UAAYqF,EAOpBA,EAAU,KAAO,OACjB,MAAMC,UAAoBD,CAAU,CAAC,CAErCrF,EAAQ,YAAcsF,EAOtBA,EAAY,KAAO,UACnBA,EAAY,WAAa,GACzB,MAAMC,UAAqBF,CAAU,CAAC,CACtCrF,EAAQ,aAAeuF,EACvBA,EAAa,KAAO,WACpBA,EAAa,WAAa,EAEnB,EAEA,SAAS5F,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAI+B,EAAkBjC,EAAoB,CAAC,EAE3C,OAAO,KAAKiC,CAAe,EAAE,QAAQ,SAAU1B,EAAK,CAC9CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAO0B,EAAgB1B,CAAG,CAC5B,CACJ,CAAG,CACH,CAAC,EAED,IAAImF,EAAa1F,EAAoB,EAAE,EAEnC2F,EAAc/E,EAAuB8E,CAAU,EAEnD,SAAS9E,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUyF,EAAY,OAEvB,EAEA,SAAS9F,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,eAAiB,OAEzB,IAAIwC,EAAW,OAAO,QAAU,SAAUtG,EAAQ,CAAE,QAASuG,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASpC,KAAOqC,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQrC,CAAG,IAAKnE,EAAOmE,CAAG,EAAIqC,EAAOrC,CAAG,GAAS,OAAOnE,GAEnPsE,EAAkBV,EAAoB,CAAC,EAEvCW,EAAmBC,EAAuBF,CAAe,EAEzDkF,EAAS5F,EAAoB,CAAC,EAElC,SAASY,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAMoE,EAAkB,OAAO,iBAAiB,EAC1CC,EAAkB,OAAO,iBAAiB,EAC1CH,EAAa,OAAO,YAAY,EAChCc,EAAS,OAAO,QAAQ,EAOxB9C,EAAiB7C,EAAQ,eAAiB,GAQhD,MAAM4F,UAAqBnF,EAAiB,OAAQ,CAMlD,YAAYsC,EAAW,CACrB,MAAMA,CAAS,EAOf,KAAK,QAAUP,EAAS,CAAA,EAAIK,EAAgB,KAAK,WAAU,CAAE,EAO7D,KAAK,UAAY,EAOjB,KAAK,WAAa,EAMlB,KAAK,OAAS,KAEd,KAAKkC,CAAe,EAAI,KAAKA,CAAe,EAAE,KAAK,IAAI,EACvD,KAAKC,CAAe,EAAI,KAAKA,CAAe,EAAE,KAAK,IAAI,EACvD,KAAKH,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,CAC/C,CAKA,QAAS,CACP,KAAK,UAAU,GAAG,iBAAkB,KAAKE,CAAe,CAAC,EAAE,GAAG,YAAa,KAAKF,CAAU,CAAC,EAAE,GAAG,sBAAuB,KAAKA,CAAU,CAAC,CACzI,CAKA,QAAS,CACP,KAAK,UAAU,IAAI,iBAAkB,KAAKE,CAAe,CAAC,EAAE,IAAI,iBAAkB,KAAKC,CAAe,CAAC,EAAE,IAAI,YAAa,KAAKH,CAAU,CAAC,EAAE,IAAI,sBAAuB,KAAKA,CAAU,CAAC,CACzL,CAMA,YAAa,CACX,OAAO,KAAK,UAAU,QAAQ,cAAgB,CAAA,CAChD,CAOA,CAACE,CAAe,EAAE,CAAE,OAAAK,GAAU,CAC5B,KAAK,OAASA,CAChB,CAOA,CAACJ,CAAe,GAAI,CAClB,KAAK,OAAS,IAChB,CAOA,CAACH,CAAU,EAAE7B,EAAW,CACtB,KAAK2C,CAAM,EAAE3C,CAAS,CACxB,CAOA,CAAC2C,CAAM,EAAE,CAAE,cAAAE,EAAe,KAAAvB,CAAI,EAAI,CAChC,sBAAsB,IAAM,CAC1B,GAAI,CAAC,KAAK,OAAO,WACf,OAGE,KAAK,OAAO,aAAeuB,GAC7BA,EAAc,YAAY,KAAK,MAAM,EAGvC,MAAMC,EAAcxB,GAAQ,KAAK,UAAU,iCAAiCuB,CAAa,EAAE,CAAC,EAEvFC,MAIDJ,EAAO,2BAA2B,IAAM,CAC1C,MAAMK,EAAWD,EAAY,wBAEzB,KAAK,aAAeC,EAAS,QAAU,KAAK,YAAcA,EAAS,QAIvE,KAAK,OAAO,MAAM,MAAQ,GAAGA,EAAS,KAAK,KAC3C,KAAK,OAAO,MAAM,OAAS,GAAGA,EAAS,MAAM,KAE7C,KAAK,UAAYA,EAAS,MAC1B,KAAK,WAAaA,EAAS,OACnC,CAAO,CACP,CAAK,CACH,CACF,CACA/F,EAAQ,QAAU4F,CAEX,EAEA,SAASjG,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,eAAiB,OAEzB,IAAIgG,EAAgBlG,EAAoB,EAAE,EAEtCmG,EAAiBvF,EAAuBsF,CAAa,EAEzD,SAAStF,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUiG,EAAe,QACjCjG,EAAQ,eAAiBgG,EAAc,cAEhC,EAEA,SAASrG,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIQ,EAAkBV,EAAoB,CAAC,EAEvCW,EAAmBC,EAAuBF,CAAe,EAEzDkF,EAAS5F,EAAoB,CAAC,EAE9BkC,EAAmBlC,EAAoB,CAAC,EAE5C,SAASY,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAMuF,EAAa,OAAO,YAAY,EAChCtB,EAAa,OAAO,YAAY,EAChCuB,EAA0B,OAAO,yBAAyB,EAQhE,MAAMC,UAAmB3F,EAAiB,OAAQ,CAMhD,YAAYsC,EAAW,CACrB,MAAMA,CAAS,EAOf,KAAK,0BAA4B,KAOjC,KAAK,qBAAuB,KAO5B,KAAK,sBAAwB,KAE7B,KAAKmD,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAKtB,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAKuB,CAAuB,EAAI,KAAKA,CAAuB,EAAE,KAAK,IAAI,CACzE,CAKA,QAAS,CACP,KAAK,UAAU,GAAG,YAAa,KAAKD,CAAU,CAAC,EAAE,GAAG,YAAa,KAAKtB,CAAU,CAAC,CACnF,CAKA,QAAS,CACP,KAAK,UAAU,IAAI,YAAa,KAAKsB,CAAU,CAAC,EAAE,IAAI,YAAa,KAAKtB,CAAU,CAAC,CACrF,CAMA,gBAAiB,CACf,MAAMyB,EAAc,KAAK,UAAU,QAAQ,YAE3C,OAAI,OAAOA,GAAgB,SAClB,MAAM,UAAU,MAAM,KAAK,SAAS,iBAAiBA,CAAW,CAAC,EAC/DA,aAAuB,UAAYA,aAAuB,MAC5D,MAAM,UAAU,MAAM,KAAKA,CAAW,EACpCA,aAAuB,YACzB,CAACA,CAAW,EACV,OAAOA,GAAgB,WACzBA,EAAW,EAEX,EAEX,CAOA,CAACH,CAAU,EAAE/I,EAAO,CAClB,MAAMjB,EAASiB,EAAM,YAAY,OAEjC,KAAK,sBAAwB,sBAAsB,KAAKgJ,CAAuB,EAAEjK,CAAM,CAAC,EAEpF,KAAK,2BACPiB,EAAM,OAAM,EAGd,MAAMmJ,EAAoB,IAAItE,EAAiB,kBAAkB,CAC/D,UAAW7E,EACX,iBAAkB,KAAK,yBAC7B,CAAK,EAEKoJ,EAAqB,IAAIvE,EAAiB,mBAAmB,CACjE,UAAW7E,EACX,iBAAkB,KAAK,oBAC7B,CAAK,EAEKqJ,EAAqB,GAAQ,KAAK,2BAA6B,KAAK,uBAAyB,KAAK,2BAClGC,EAAoB,GAAQ,CAAC,KAAK,2BAA6B,KAAK,sBAEtED,GACE,KAAK,sBACP,KAAK,UAAU,QAAQD,CAAkB,EAG3C,KAAK,UAAU,QAAQD,CAAiB,GAC/BG,GACT,KAAK,UAAU,QAAQF,CAAkB,EAG3C,KAAK,qBAAuB,KAAK,yBACnC,CAOA,CAAC3B,CAAU,EAAEzH,EAAO,CAClB,MAAMuJ,EAAuB,KAAK,2BAA6B,KAAK,qBAC9DH,EAAqB,IAAIvE,EAAiB,mBAAmB,CACjE,UAAW7E,EACX,iBAAkBuJ,CACxB,CAAK,EAEGA,GACF,KAAK,UAAU,QAAQH,CAAkB,EAG3C,KAAK,qBAAuB,KAC5B,KAAK,0BAA4B,IACnC,CAQA,CAACJ,CAAuB,EAAEjK,EAAQ,CAChC,MAAO,IAAM,CACX,MAAMmK,EAAc,KAAK,iBACzB,KAAK,6BAAgCX,EAAO,SAASxJ,EAAQyH,GAAW0C,EAAY,SAAS1C,CAAO,CAAC,CAC3G,CACE,CACF,CACA3D,EAAQ,QAAUoG,CAEX,EAEA,SAASzG,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,mBAAqBA,EAAQ,kBAAoBA,EAAQ,gBAAkB,OAEnF,IAAIY,EAAiBd,EAAoB,CAAC,EAEtCe,EAAkBH,EAAuBE,CAAc,EAE3D,SAASF,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAQ9F,MAAMgG,UAAwB9F,EAAgB,OAAQ,CAQpD,IAAI,WAAY,CACd,OAAO,KAAK,KAAK,SACnB,CACF,CAEAb,EAAQ,gBAAkB2G,EAO1BA,EAAgB,KAAO,aACvB,MAAMC,UAA0BD,CAAgB,CAQ9C,IAAI,kBAAmB,CACrB,OAAO,KAAK,KAAK,gBACnB,CACF,CAEA3G,EAAQ,kBAAoB4G,EAO5BA,EAAkB,KAAO,gBACzB,MAAMC,UAA2BF,CAAgB,CAQ/C,IAAI,kBAAmB,CACrB,OAAO,KAAK,KAAK,gBACnB,CACF,CACA3G,EAAQ,mBAAqB6G,EAC7BA,EAAmB,KAAO,gBAEnB,EAEA,SAASlH,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIgC,EAAmBlC,EAAoB,CAAC,EAE5C,OAAO,KAAKkC,CAAgB,EAAE,QAAQ,SAAU3B,EAAK,CAC/CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAO2B,EAAiB3B,CAAG,CAC7B,CACJ,CAAG,CACH,CAAC,EAED,IAAIyG,EAAchH,EAAoB,EAAE,EAEpCiH,EAAerG,EAAuBoG,CAAW,EAErD,SAASpG,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAU+G,EAAa,OAExB,EAEA,SAASpH,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAI8G,EAAchH,EAAoB,EAAE,EAExC,OAAO,eAAeE,EAAS,aAAc,CAC3C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuBoG,CAAW,EAAE,OAC7C,CACF,CAAC,EAED,IAAId,EAAgBlG,EAAoB,EAAE,EAE1C,OAAO,eAAeE,EAAS,eAAgB,CAC7C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuBsF,CAAa,EAAE,OAC/C,CACF,CAAC,EACD,OAAO,eAAehG,EAAS,6BAA8B,CAC3D,WAAY,GACZ,IAAK,UAAY,CACf,OAAOgG,EAAc,cACvB,CACF,CAAC,EAED,IAAIR,EAAa1F,EAAoB,EAAE,EAEvC,OAAO,eAAeE,EAAS,YAAa,CAC1C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuB8E,CAAU,EAAE,OAC5C,CACF,CAAC,EAED,IAAIf,EAAiB3E,EAAoB,EAAE,EAE3C,OAAO,eAAeE,EAAS,gBAAiB,CAC9C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuB+D,CAAc,EAAE,OAChD,CACF,CAAC,EACD,OAAO,eAAezE,EAAS,8BAA+B,CAC5D,WAAY,GACZ,IAAK,UAAY,CACf,OAAOyE,EAAe,cACxB,CACF,CAAC,EAED,IAAIN,EAAiBrE,EAAoB,EAAE,EAE3C,OAAO,eAAeE,EAAS,gBAAiB,CAC9C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuByD,CAAc,EAAE,OAChD,CACF,CAAC,EACD,OAAO,eAAenE,EAAS,8BAA+B,CAC5D,WAAY,GACZ,IAAK,UAAY,CACf,OAAOmE,EAAe,cACxB,CACF,CAAC,EAED,SAASzD,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAEvF,EAEA,SAAShB,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIwC,EAAW,OAAO,QAAU,SAAUtG,EAAQ,CAAE,QAASuG,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASpC,KAAOqC,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQrC,CAAG,IAAKnE,EAAOmE,CAAG,EAAIqC,EAAOrC,CAAG,GAAS,OAAOnE,GAEnPuF,EAAa3B,EAAoB,CAAC,EAElC4B,EAAchB,EAAuBe,CAAU,EAE/CQ,EAAiBnC,EAAoB,CAAC,EAE1C,SAASY,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAMgE,EAAc,OAAO,aAAa,EAClCqC,EAAsB,OAAO,qBAAqB,EAClDnC,EAAa,OAAO,YAAY,EAChCD,EAAa,OAAO,YAAY,EAQtC,SAASqC,EAAoC,CAAE,UAAAjE,GAAa,CAC1D,MAAMkE,EAAalE,EAAU,OAAO,YAAY,KAAM,GAAIA,EAAU,OAAO,IAAM,mBAEjF,GAAIA,EAAU,KAAM,CAClB,MAAMmE,EAAWnE,EAAU,KAAK,YAAY,KAAM,GAAIA,EAAU,KAAK,IAAM,mBAG3E,OAFoBA,EAAU,OAAO,wBAAwBA,EAAU,IAAI,EAAI,KAAK,4BAG3E,UAAUkE,CAAU,UAAUC,CAAQ,GAEtC,UAAUD,CAAU,WAAWC,CAAQ,EAEpD,KAEI,OAAO,UAAUD,CAAU,6BAE/B,CAMA,MAAME,EAAuB,CAC3B,kBAAmBH,CACrB,EASA,MAAMI,UAAiB3F,EAAY,OAAQ,CAOzC,YAAY4F,EAAa,GAAIC,EAAU,CAAA,EAAI,CACzC,MAAMD,EAAY9E,EAAS,CAAA,EAAI+E,EAAS,CACtC,cAAe/E,EAAS,CAAE,EAAE4E,EAAsBG,EAAQ,eAAiB,EAAE,CAC9E,CAAA,CAAC,EAOF,KAAK,WAAa,KAQlB,KAAK,eAAiB,KAEtB,KAAK5C,CAAW,EAAI,KAAKA,CAAW,EAAE,KAAK,IAAI,EAC/C,KAAKqC,CAAmB,EAAI,KAAKA,CAAmB,EAAE,KAAK,IAAI,EAC/D,KAAKnC,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAKD,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAE7C,KAAK,GAAG,aAAc,KAAKD,CAAW,CAAC,EAAE,GAAG,sBAAuB,KAAKqC,CAAmB,CAAC,EAAE,GAAG,YAAa,KAAKnC,CAAU,CAAC,EAAE,GAAG,YAAa,KAAKD,CAAU,CAAC,CAClK,CAKA,SAAU,CACR,MAAM,QAAO,EAEb,KAAK,IAAI,aAAc,KAAKD,CAAW,CAAC,EAAE,IAAI,sBAAuB,KAAKqC,CAAmB,CAAC,EAAE,IAAI,YAAa,KAAKnC,CAAU,CAAC,EAAE,IAAI,YAAa,KAAKD,CAAU,CAAC,CACtK,CAOA,MAAMjB,EAAS,CACb,OAAO,KAAK,gCAAgCA,EAAQ,UAAU,EAAE,QAAQA,CAAO,CACjF,CAQA,gCAAgC6D,EAAW,CAGzC,MAAO,CAAC,GAFoBA,EAAU,iBAAiB,KAAK,QAAQ,SAAS,CAE/C,EAAE,OAAOC,GAC9BA,IAAiB,KAAK,gBAAkBA,IAAiB,KAAK,QAAUA,EAAa,aAAeD,CAC5G,CACH,CAOA,CAAC7C,CAAW,EAAExH,EAAO,CACnB,KAAK,eAAiBA,EAAM,OAAO,WACnC,KAAK,WAAa,KAAK,MAAMA,EAAM,MAAM,EAEzC,MAAMuK,EAAqB,IAAIzF,EAAe,mBAAmB,CAC/D,UAAW9E,EACX,WAAY,KAAK,WACjB,eAAgB,KAAK,cAC3B,CAAK,EAED,KAAK,QAAQuK,CAAkB,EAE3BA,EAAmB,YACrBvK,EAAM,OAAM,CAEhB,CAOA,CAAC6J,CAAmB,EAAE7J,EAAO,CAC3B,GAAIA,EAAM,WACR,OAGF,KAAM,CAAE,OAAAuF,EAAQ,KAAA4B,EAAM,cAAAuB,CAAa,EAAK1I,EAClCgG,EAAW,KAAK,MAAMT,CAAM,EAE5BiF,EAAoB,IAAI1F,EAAe,kBAAkB,CAC7D,UAAW9E,EACX,aAAcgG,EACd,OAAAT,EACA,KAAA4B,CACN,CAAK,EAID,GAFA,KAAK,QAAQqD,CAAiB,EAE1BA,EAAkB,WACpB,OAGF,MAAMC,EAAW,KAAK,gCAAgC/B,CAAa,EAC7DgC,EAAQC,EAAK,CAAE,OAAApF,EAAQ,KAAA4B,EAAM,cAAAuB,EAAe,SAAA+B,CAAQ,CAAE,EAE5D,GAAI,CAACC,EACH,OAGF,KAAM,CAAE,aAAAE,EAAc,aAAAC,CAAc,EAAGH,EACjCzE,EAAW,KAAK,MAAMjG,EAAM,MAAM,EAElC8K,EAAsB,IAAIhG,EAAe,oBAAoB,CACjE,UAAW9E,EACX,SAAAgG,EACA,SAAAC,EACA,aAAA2E,EACA,aAAAC,CACN,CAAK,EAED,KAAK,QAAQC,CAAmB,CAClC,CAOA,CAACpD,CAAU,EAAE1H,EAAO,CAClB,GAAIA,EAAM,OAASA,EAAM,gBAAkBA,EAAM,OAASA,EAAM,OAC9D,OAGF,KAAM,CAAE,OAAAuF,EAAQ,KAAA4B,EAAM,cAAAuB,CAAa,EAAK1I,EAClCgG,EAAW,KAAK,MAAMT,CAAM,EAE5BiF,EAAoB,IAAI1F,EAAe,kBAAkB,CAC7D,UAAW9E,EACX,aAAcgG,EACd,OAAAT,EACA,KAAA4B,CACN,CAAK,EAID,GAFA,KAAK,QAAQqD,CAAiB,EAE1BA,EAAkB,WACpB,OAGF,MAAMC,EAAW,KAAK,iCAAiC/B,CAAa,EAC9DgC,EAAQC,EAAK,CAAE,OAAApF,EAAQ,KAAA4B,EAAM,cAAAuB,EAAe,SAAA+B,CAAQ,CAAE,EAE5D,GAAI,CAACC,EACH,OAGF,KAAM,CAAE,aAAAE,EAAc,aAAAC,CAAc,EAAGH,EACjCzE,EAAW,KAAK,MAAMV,CAAM,EAE5BuF,EAAsB,IAAIhG,EAAe,oBAAoB,CACjE,UAAW9E,EACX,SAAAgG,EACA,SAAAC,EACA,aAAA2E,EACA,aAAAC,CACN,CAAK,EAED,KAAK,QAAQC,CAAmB,CAClC,CAOA,CAACrD,CAAU,EAAEzH,EAAO,CAClB,MAAM+K,EAAoB,IAAIjG,EAAe,kBAAkB,CAC7D,UAAW9E,EACX,SAAU,KAAK,WACf,SAAU,KAAK,MAAMA,EAAM,MAAM,EACjC,aAAc,KAAK,eACnB,aAAcA,EAAM,OAAO,UACjC,CAAK,EAED,KAAK,QAAQ+K,CAAiB,EAE9B,KAAK,WAAa,KAClB,KAAK,eAAiB,IACxB,CACF,CAEAlI,EAAQ,QAAUqH,EAClB,SAASc,EAAMxE,EAAS,CACtB,OAAO,MAAM,UAAU,QAAQ,KAAKA,EAAQ,WAAW,SAAUA,CAAO,CAC1E,CAEA,SAASmE,EAAK,CAAE,OAAApF,EAAQ,KAAA4B,EAAM,cAAAuB,EAAe,SAAA+B,CAAQ,EAAI,CACvD,MAAMQ,EAAqB,CAACR,EAAS,OAC/BS,EAAqB3F,EAAO,aAAemD,EAC3CyC,EAAgBhE,GAAQ5B,EAAO,aAAe4B,EAAK,WAEzD,OAAI8D,EACKG,EAAyB7F,EAAQmD,CAAa,EAC5CyC,EACFE,EAAoB9F,EAAQ4B,CAAI,EAC9B+D,EACFI,EAAqB/F,EAAQ4B,EAAMuB,CAAa,EAEhD,IAEX,CAEA,SAAS0C,EAAyB7F,EAAQmD,EAAe,CACvD,MAAMkC,EAAerF,EAAO,WAE5B,OAAAmD,EAAc,YAAYnD,CAAM,EAEzB,CAAE,aAAAqF,EAAc,aAAclC,EACvC,CAEA,SAAS2C,EAAoB9F,EAAQ4B,EAAM,CACzC,MAAMnB,EAAWgF,EAAMzF,CAAM,EACvBU,EAAW+E,EAAM7D,CAAI,EAE3B,OAAInB,EAAWC,EACbV,EAAO,WAAW,aAAaA,EAAQ4B,EAAK,kBAAkB,EAE9D5B,EAAO,WAAW,aAAaA,EAAQ4B,CAAI,EAGtC,CAAE,aAAc5B,EAAO,WAAY,aAAcA,EAAO,WACjE,CAEA,SAAS+F,EAAqB/F,EAAQ4B,EAAMuB,EAAe,CACzD,MAAMkC,EAAerF,EAAO,WAE5B,OAAI4B,EACFA,EAAK,WAAW,aAAa5B,EAAQ4B,CAAI,EAGzCuB,EAAc,YAAYnD,CAAM,EAG3B,CAAE,aAAAqF,EAAc,aAAcrF,EAAO,UAAU,CACxD,CAEO,EAEA,SAAS/C,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,kBAAoBA,EAAQ,oBAAsBA,EAAQ,kBAAoBA,EAAQ,mBAAqBA,EAAQ,cAAgB,OAE3I,IAAIY,EAAiBd,EAAoB,CAAC,EAEtCe,EAAkBH,EAAuBE,CAAc,EAE3D,SAASF,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAQ9F,MAAM+H,UAAsB7H,EAAgB,OAAQ,CAQlD,IAAI,WAAY,CACd,OAAO,KAAK,KAAK,SACnB,CACF,CAEAb,EAAQ,cAAgB0I,EAOxBA,EAAc,KAAO,WACrB,MAAMC,UAA2BD,CAAc,CAQ7C,IAAI,YAAa,CACf,OAAO,KAAK,KAAK,UACnB,CAQA,IAAI,gBAAiB,CACnB,OAAO,KAAK,KAAK,cACnB,CACF,CAEA1I,EAAQ,mBAAqB2I,EAO7BA,EAAmB,KAAO,iBAC1BA,EAAmB,WAAa,GAChC,MAAMC,UAA0BF,CAAc,CAQ5C,IAAI,cAAe,CACjB,OAAO,KAAK,KAAK,YACnB,CAQA,IAAI,MAAO,CACT,OAAO,KAAK,KAAK,IACnB,CAQA,IAAI,eAAgB,CAClB,OAAO,KAAK,KAAK,UAAU,aAC7B,CACF,CAEA1I,EAAQ,kBAAoB4I,EAO5BA,EAAkB,KAAO,gBACzBA,EAAkB,WAAa,GAC/B,MAAMC,UAA4BH,CAAc,CAQ9C,IAAI,UAAW,CACb,OAAO,KAAK,KAAK,QACnB,CAQA,IAAI,UAAW,CACb,OAAO,KAAK,KAAK,QACnB,CAQA,IAAI,cAAe,CACjB,OAAO,KAAK,KAAK,YACnB,CAQA,IAAI,cAAe,CACjB,OAAO,KAAK,KAAK,YACnB,CACF,CAEA1I,EAAQ,oBAAsB6I,EAO9BA,EAAoB,KAAO,kBAC3B,MAAMC,UAA0BJ,CAAc,CAQ5C,IAAI,UAAW,CACb,OAAO,KAAK,KAAK,QACnB,CAQA,IAAI,UAAW,CACb,OAAO,KAAK,KAAK,QACnB,CAQA,IAAI,cAAe,CACjB,OAAO,KAAK,KAAK,YACnB,CAQA,IAAI,cAAe,CACjB,OAAO,KAAK,KAAK,YACnB,CACF,CACA1I,EAAQ,kBAAoB8I,EAC5BA,EAAkB,KAAO,eAElB,EAEA,SAASnJ,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIiC,EAAiBnC,EAAoB,CAAC,EAE1C,OAAO,KAAKmC,CAAc,EAAE,QAAQ,SAAU5B,EAAK,CAC7CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAO4B,EAAe5B,CAAG,CAC3B,CACJ,CAAG,CACH,CAAC,EAED,IAAI0I,EAAYjJ,EAAoB,EAAE,EAElCkJ,EAAatI,EAAuBqI,CAAS,EAEjD,SAASrI,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUgJ,EAAW,OAEtB,EAEA,SAASrJ,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIwC,EAAW,OAAO,QAAU,SAAUtG,EAAQ,CAAE,QAASuG,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASpC,KAAOqC,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQrC,CAAG,IAAKnE,EAAOmE,CAAG,EAAIqC,EAAOrC,CAAG,GAAS,OAAOnE,GAEnPuF,EAAa3B,EAAoB,CAAC,EAElC4B,EAAchB,EAAuBe,CAAU,EAE/CS,EAAkBpC,EAAoB,EAAE,EAE5C,SAASY,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAMgE,EAAc,OAAO,aAAa,EAClCE,EAAa,OAAO,YAAY,EAChCD,EAAa,OAAO,YAAY,EAOtC,SAASqE,EAAsC,CAAE,UAAAjG,EAAW,eAAAkG,GAAkB,CAC5E,MAAMhC,EAAalE,EAAU,OAAO,YAAY,KAAM,GAAIA,EAAU,OAAO,IAAM,oBAC3EmE,EAAW+B,EAAe,YAAY,KAAI,GAAMA,EAAe,IAAM,oBAE3E,MAAO,WAAWhC,CAAU,SAASC,CAAQ,EAC/C,CAMA,MAAMC,EAAuB,CAC3B,qBAAsB6B,CACxB,EASA,MAAME,UAAkBzH,EAAY,OAAQ,CAO1C,YAAY4F,EAAa,GAAIC,EAAU,CAAA,EAAI,CACzC,MAAMD,EAAY9E,EAAS,CAAA,EAAI+E,EAAS,CACtC,cAAe/E,EAAS,CAAE,EAAE4E,EAAsBG,EAAQ,eAAiB,EAAE,CAC9E,CAAA,CAAC,EAOF,KAAK,SAAW,KAEhB,KAAK5C,CAAW,EAAI,KAAKA,CAAW,EAAE,KAAK,IAAI,EAC/C,KAAKE,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAKD,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAE7C,KAAK,GAAG,aAAc,KAAKD,CAAW,CAAC,EAAE,GAAG,YAAa,KAAKE,CAAU,CAAC,EAAE,GAAG,YAAa,KAAKD,CAAU,CAAC,CAC7G,CAKA,SAAU,CACR,MAAM,QAAO,EAEb,KAAK,IAAI,aAAc,KAAK,YAAY,EAAE,IAAI,YAAa,KAAK,WAAW,EAAE,IAAI,YAAa,KAAK,WAAW,CAChH,CAOA,CAACD,CAAW,EAAExH,EAAO,CACnB,MAAMiM,EAAsB,IAAIlH,EAAgB,oBAAoB,CAClE,UAAW/E,CACjB,CAAK,EAED,KAAK,QAAQiM,CAAmB,EAE5BA,EAAoB,YACtBjM,EAAM,OAAM,CAEhB,CAOA,CAAC0H,CAAU,EAAE1H,EAAO,CAClB,GAAIA,EAAM,OAASA,EAAM,gBAAkBA,EAAM,OAASA,EAAM,QAAUA,EAAM,SAAQ,EACtF,OAGF,MAAMkM,EAAqB,IAAInH,EAAgB,mBAAmB,CAChE,UAAW/E,EACX,KAAMA,EAAM,KACZ,cAAeA,EAAM,aAC3B,CAAK,EAID,GAFA,KAAK,QAAQkM,CAAkB,EAE3BA,EAAmB,WACrB,OAIE,KAAK,UAAY,KAAK,WAAalM,EAAM,MAC3CmM,EAAK,KAAK,SAAUnM,EAAM,MAAM,EAG9B,KAAK,WAAaA,EAAM,KAC1B,KAAK,SAAW,KAEhB,KAAK,SAAWA,EAAM,KAGxBmM,EAAKnM,EAAM,OAAQA,EAAM,IAAI,EAE7B,MAAMoM,EAAwB,IAAIrH,EAAgB,sBAAsB,CACtE,UAAW/E,EACX,eAAgBA,EAAM,IAC5B,CAAK,EAED,KAAK,QAAQoM,CAAqB,CACpC,CAOA,CAAC3E,CAAU,EAAEzH,EAAO,CAClB,MAAMqM,EAAqB,IAAItH,EAAgB,mBAAmB,CAChE,UAAW/E,CACjB,CAAK,EAED,KAAK,QAAQqM,CAAkB,EAC/B,KAAK,SAAW,IAClB,CACF,CAEAxJ,EAAQ,QAAUmJ,EAClB,SAASM,EAAgBC,EAAU,CACjC,MAAMC,EAAa,SAAS,cAAc,KAAK,EAC/CD,EAASC,CAAU,EACnBA,EAAW,WAAW,YAAYA,CAAU,CAC9C,CAEA,SAASL,EAAK5G,EAAQ4B,EAAM,CAC1B,MAAMsF,EAAatF,EAAK,WAClBuF,EAAenH,EAAO,WAE5B+G,EAAgBE,GAAc,CAC5BE,EAAa,aAAaF,EAAYjH,CAAM,EAC5CkH,EAAW,aAAalH,EAAQ4B,CAAI,EACpCuF,EAAa,aAAavF,EAAMqF,CAAU,CAC9C,CAAG,CACH,CAEO,EAEA,SAAShK,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,mBAAqBA,EAAQ,sBAAwBA,EAAQ,mBAAqBA,EAAQ,oBAAsBA,EAAQ,eAAiB,OAEjJ,IAAIY,EAAiBd,EAAoB,CAAC,EAEtCe,EAAkBH,EAAuBE,CAAc,EAE3D,SAASF,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAQ9F,MAAMmJ,UAAuBjJ,EAAgB,OAAQ,CAQnD,IAAI,WAAY,CACd,OAAO,KAAK,KAAK,SACnB,CACF,CAEAb,EAAQ,eAAiB8J,EAOzBA,EAAe,KAAO,YACtB,MAAMC,UAA4BD,CAAe,CAAC,CAElD9J,EAAQ,oBAAsB+J,EAO9BA,EAAoB,KAAO,kBAC3BA,EAAoB,WAAa,GACjC,MAAMC,UAA2BF,CAAe,CAQ9C,IAAI,MAAO,CACT,OAAO,KAAK,KAAK,IACnB,CAQA,IAAI,eAAgB,CAClB,OAAO,KAAK,KAAK,aACnB,CACF,CAEA9J,EAAQ,mBAAqBgK,EAO7BA,EAAmB,KAAO,iBAC1BA,EAAmB,WAAa,GAChC,MAAMC,UAA8BH,CAAe,CAQjD,IAAI,gBAAiB,CACnB,OAAO,KAAK,KAAK,cACnB,CACF,CAEA9J,EAAQ,sBAAwBiK,EAOhCA,EAAsB,KAAO,oBAC7B,MAAMC,UAA2BJ,CAAe,CAAC,CACjD9J,EAAQ,mBAAqBkK,EAC7BA,EAAmB,KAAO,gBAEnB,EAEA,SAASvK,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIkC,EAAkBpC,EAAoB,EAAE,EAE5C,OAAO,KAAKoC,CAAe,EAAE,QAAQ,SAAU7B,EAAK,CAC9CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAO6B,EAAgB7B,CAAG,CAC5B,CACJ,CAAG,CACH,CAAC,EAED,IAAI8J,EAAarK,EAAoB,EAAE,EAEnCsK,EAAc1J,EAAuByJ,CAAU,EAEnD,SAASzJ,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUoK,EAAY,OAEvB,EAEA,SAASzK,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIwC,EAAW,OAAO,QAAU,SAAUtG,EAAQ,CAAE,QAASuG,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASpC,KAAOqC,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQrC,CAAG,IAAKnE,EAAOmE,CAAG,EAAIqC,EAAOrC,CAAG,GAAS,OAAOnE,GAEnPwJ,EAAS5F,EAAoB,CAAC,EAE9B2B,EAAa3B,EAAoB,CAAC,EAElC4B,EAAchB,EAAuBe,CAAU,EAE/CU,EAAkBrC,EAAoB,EAAE,EAE5C,SAASY,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAMgE,EAAc,OAAO,aAAa,EAClCuB,EAAa,OAAO,YAAY,EAChCtB,EAAa,OAAO,YAAY,EAChCyF,EAAiB,OAAO,gBAAgB,EACxCC,EAA2B,OAAO,0BAA0B,EAC5DC,EAAkB,OAAO,iBAAiB,EAC1CC,EAAe,OAAO,cAAc,EAO1C,SAASC,EAAsC,CAAE,UAAAzH,EAAW,SAAA0H,GAAY,CACtE,MAAMxD,EAAalE,EAAU,OAAO,YAAY,KAAM,GAAIA,EAAU,OAAO,IAAM,oBAC3E2H,EAAeD,EAAS,YAAY,KAAI,GAAMA,EAAS,IAAM,oBAEnE,MAAO,WAAWxD,CAAU,SAASyD,CAAY,EACnD,CAOA,SAASC,EAAuC,CAAE,UAAA5H,EAAW,SAAA0H,GAAY,CACvE,MAAMxD,EAAalE,EAAU,OAAO,YAAY,KAAM,GAAIA,EAAU,OAAO,IAAM,oBAC3E2H,EAAeD,EAAS,YAAY,KAAI,GAAMA,EAAS,IAAM,oBAEnE,MAAO,YAAYxD,CAAU,SAASyD,CAAY,EACpD,CAOA,MAAMvD,EAAuB,CAC3B,oBAAqBqD,EACrB,qBAAsBG,CACxB,EAEMC,EAAiB,CACrB,mBAAoB,6BACpB,qBAAsB,8BACxB,EAEMhI,EAAiB,CACrB,SAAU,sBACZ,EASA,MAAMiI,UAAkBpJ,EAAY,OAAQ,CAO1C,YAAY4F,EAAa,GAAIC,EAAU,CAAA,EAAI,CACzC,MAAMD,EAAY9E,EAAS,CAAA,EAAIK,EAAgB0E,EAAS,CACtD,QAAS/E,EAAS,CAAE,EAAEqI,EAAgBtD,EAAQ,SAAW,EAAE,EAC3D,cAAe/E,EAAS,CAAE,EAAE4E,EAAsBG,EAAQ,eAAiB,EAAE,CAC9E,CAAA,CAAC,EAOF,KAAK,UAAY,KAOjB,KAAK,aAAe,KAOpB,KAAK,gBAAkB,KAEvB,KAAK5C,CAAW,EAAI,KAAKA,CAAW,EAAE,KAAK,IAAI,EAC/C,KAAKuB,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAKtB,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAE7C,KAAK,GAAG,aAAc,KAAKD,CAAW,CAAC,EAAE,GAAG,YAAa,KAAKuB,CAAU,CAAC,EAAE,GAAG,YAAa,KAAKtB,CAAU,CAAC,CAC7G,CAKA,SAAU,CACR,MAAM,QAAO,EAEb,KAAK,IAAI,aAAc,KAAKD,CAAW,CAAC,EAAE,IAAI,YAAa,KAAKuB,CAAU,CAAC,EAAE,IAAI,YAAa,KAAKtB,CAAU,CAAC,CAChH,CAOA,CAACD,CAAW,EAAExH,EAAO,CACnB,GAAIA,EAAM,WACR,OAGF,KAAK,UAAY,CAAC,GAAG,KAAKqN,CAAY,EAAG,CAAA,EACzC,MAAME,KAAehF,EAAO,SAASvI,EAAM,YAAY,OAAQ,KAAK,QAAQ,QAAQ,EAEpF,GAAI,CAACuN,EAAU,CACbvN,EAAM,OAAM,EACZ,MACF,CAEA,MAAM4N,EAAsB,IAAI5I,EAAgB,oBAAoB,CAClE,UAAWhF,EACX,SAAAuN,CACN,CAAK,EAID,GAFA,KAAK,QAAQK,CAAmB,EAE5BA,EAAoB,WAAY,CAClC5N,EAAM,OAAM,EACZ,MACF,CAEA,KAAK,gBAAkBuN,EAEvB,UAAWM,KAAmB,KAAK,UAC7BA,EAAgB,UAAU,SAAS,KAAK,gBAAgB,oBAAoB,CAAC,GAIjFA,EAAgB,UAAU,IAAI,GAAG,KAAK,iBAAiB,kBAAkB,CAAC,CAE9E,CAOA,CAAC9E,CAAU,EAAE/I,EAAO,CAClB,GAAIA,EAAM,WACR,OAGF,MAAMuN,EAAW,KAAKH,CAAe,EAAEpN,EAAM,YAAY,MAAM,EACrCuN,GAAY,CAACA,EAAS,UAAU,SAAS,KAAK,gBAAgB,oBAAoB,CAAC,GAEpF,KAAKL,CAAc,EAAElN,EAAOuN,CAAQ,EAC3D,KAAK,aAAeA,GACV,CAACA,GAAYA,IAAa,KAAK,kBAAoB,KAAK,eAClE,KAAKJ,CAAwB,EAAEnN,CAAK,EACpC,KAAK,aAAe,KAExB,CAOA,CAACyH,CAAU,EAAEzH,EAAO,CAClB,MAAM8N,EAAqB,IAAI9I,EAAgB,mBAAmB,CAChE,UAAWhF,EACX,SAAU,KAAK,cAAgB,KAAK,eAC1C,CAAK,EAED,KAAK,QAAQ8N,CAAkB,EAE/B,MAAMC,EAAkB,KAAK,iBAAiB,oBAAoB,EAElE,UAAWR,KAAY,KAAK,UAC1BA,EAAS,UAAU,OAAO,GAAG,KAAK,iBAAiB,kBAAkB,CAAC,EAGpE,KAAK,cAAgB,KAAK,eAAiB,KAAK,iBAClD,KAAK,gBAAgB,UAAU,OAAO,GAAGQ,CAAe,EAG1D,KAAK,UAAY,KACjB,KAAK,aAAe,KACpB,KAAK,gBAAkB,IACzB,CAQA,CAACb,CAAc,EAAElN,EAAOuN,EAAU,CAChC,MAAMS,EAAwB,IAAIhJ,EAAgB,sBAAsB,CACtE,UAAWhF,EACX,SAAAuN,CACN,CAAK,EAID,GAFA,KAAK,QAAQS,CAAqB,EAE9BA,EAAsB,WACxB,MAAO,GAGT,MAAMD,EAAkB,KAAK,iBAAiB,oBAAoB,EAElE,OAAI,KAAK,cACP,KAAK,aAAa,UAAU,OAAO,GAAGA,CAAe,EAGvDR,EAAS,YAAYvN,EAAM,MAAM,EACjCuN,EAAS,UAAU,IAAI,GAAGQ,CAAe,EAElC,EACT,CAOA,CAACZ,CAAwB,EAAEnN,EAAO,CAChC,MAAMiO,EAAyB,IAAIjJ,EAAgB,uBAAuB,CACxE,UAAWhF,EACX,SAAU,KAAK,YACrB,CAAK,EAED,KAAK,QAAQiO,CAAsB,EAE/B,CAAAA,EAAuB,aAI3B,KAAK,gBAAgB,YAAYjO,EAAM,MAAM,EAC7C,KAAK,aAAa,UAAU,OAAO,GAAG,KAAK,iBAAiB,oBAAoB,CAAC,EACnF,CAQA,CAACoN,CAAe,EAAErO,EAAQ,CACxB,OAAK,KAAK,aAICwJ,EAAO,SAASxJ,EAAQ,KAAK,SAAS,EAHxC,IAIX,CAOA,CAACsO,CAAY,GAAI,CACf,MAAME,EAAW,KAAK,QAAQ,SAE9B,OAAI,OAAOA,GAAa,SACf,SAAS,iBAAiBA,CAAQ,EAChCA,aAAoB,UAAYA,aAAoB,MACtDA,EACE,OAAOA,GAAa,WACtBA,EAAQ,EAER,EAEX,CACF,CACA1K,EAAQ,QAAU8K,CAEX,EAEA,SAASnL,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,mBAAqBA,EAAQ,uBAAyBA,EAAQ,sBAAwBA,EAAQ,oBAAsBA,EAAQ,eAAiB,OAErJ,IAAIY,EAAiBd,EAAoB,CAAC,EAEtCe,EAAkBH,EAAuBE,CAAc,EAE3D,SAASF,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAQ9F,MAAM0K,UAAuBxK,EAAgB,OAAQ,CAQnD,IAAI,WAAY,CACd,OAAO,KAAK,KAAK,SACnB,CACF,CAEAb,EAAQ,eAAiBqL,EAOzBA,EAAe,KAAO,YACtB,MAAMC,UAA4BD,CAAe,CAQ/C,IAAI,UAAW,CACb,OAAO,KAAK,KAAK,QACnB,CACF,CAEArL,EAAQ,oBAAsBsL,EAO9BA,EAAoB,KAAO,kBAC3BA,EAAoB,WAAa,GACjC,MAAMC,UAA8BF,CAAe,CAQjD,IAAI,UAAW,CACb,OAAO,KAAK,KAAK,QACnB,CACF,CAEArL,EAAQ,sBAAwBuL,EAOhCA,EAAsB,KAAO,oBAC7BA,EAAsB,WAAa,GACnC,MAAMC,UAA+BH,CAAe,CAQlD,IAAI,UAAW,CACb,OAAO,KAAK,KAAK,QACnB,CACF,CAEArL,EAAQ,uBAAyBwL,EAOjCA,EAAuB,KAAO,qBAC9BA,EAAuB,WAAa,GACpC,MAAMC,UAA2BJ,CAAe,CAQ9C,IAAI,UAAW,CACb,OAAO,KAAK,KAAK,QACnB,CACF,CACArL,EAAQ,mBAAqByL,EAC7BA,EAAmB,KAAO,iBAC1BA,EAAmB,WAAa,EAEzB,EAEA,SAAS9L,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAImC,EAAkBrC,EAAoB,EAAE,EAE5C,OAAO,KAAKqC,CAAe,EAAE,QAAQ,SAAU9B,EAAK,CAC9CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAO8B,EAAgB9B,CAAG,CAC5B,CACJ,CAAG,CACH,CAAC,EAED,IAAIqL,EAAa5L,EAAoB,EAAE,EAEnC6L,EAAcjL,EAAuBgL,CAAU,EAEnD,SAAShL,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAU2L,EAAY,OAEvB,EAEA,SAAShM,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAMD,MAAM4L,CAAQ,CACZ,aAAc,CACZ,KAAK,UAAY,EACnB,CAOA,GAAGC,KAASC,EAAW,CACrB,OAAK,KAAK,UAAUD,CAAI,IACtB,KAAK,UAAUA,CAAI,EAAI,IAGzB,KAAK,UAAUA,CAAI,EAAE,KAAK,GAAGC,CAAS,EAE/B,IACT,CAOA,IAAID,EAAMnC,EAAU,CAClB,GAAI,CAAC,KAAK,UAAUmC,CAAI,EACtB,OAAO,KAGT,MAAME,EAAO,KAAK,UAAUF,CAAI,EAAE,MAAM,CAAC,EAEzC,QAASpJ,EAAI,EAAGA,EAAIsJ,EAAK,OAAQtJ,IAC3BiH,IAAaqC,EAAKtJ,CAAC,GACrB,KAAK,UAAUoJ,CAAI,EAAE,OAAOpJ,EAAG,CAAC,EAIpC,OAAO,IACT,CAMA,QAAQtF,EAAO,CACb,GAAI,CAAC,KAAK,UAAUA,EAAM,IAAI,EAC5B,OAAO,KAGT,MAAM2O,EAAY,CAAC,GAAG,KAAK,UAAU3O,EAAM,IAAI,CAAC,EAC1C6O,EAAe,CAAA,EAErB,QAASvJ,EAAIqJ,EAAU,OAAS,EAAGrJ,GAAK,EAAGA,IAAK,CAC9C,MAAMiH,EAAWoC,EAAUrJ,CAAC,EAE5B,GAAI,CACFiH,EAASvM,CAAK,CACf,OAAQ8O,EAAO,CACdD,EAAa,KAAKC,CAAK,CACzB,CACF,CAEA,OAAID,EAAa,QAEf,QAAQ,MAAM,6CAA6C7O,EAAM,IAAI,IAAK6O,CAAY,EAIjF,IACT,CACF,CACAhM,EAAQ,QAAU4L,CAEX,EAEA,SAASjM,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIkM,EAAWpM,EAAoB,EAAE,EAEjCqM,EAAYzL,EAAuBwL,CAAQ,EAE/C,SAASxL,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUmM,EAAU,OAErB,EAEA,SAASxM,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,eAAiB,OAEzB,IAAIwC,EAAW,OAAO,QAAU,SAAUtG,EAAQ,CAAE,QAASuG,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASpC,KAAOqC,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQrC,CAAG,IAAKnE,EAAOmE,CAAG,EAAIqC,EAAOrC,CAAG,GAAS,OAAOnE,GAEnPwJ,EAAS5F,EAAoB,CAAC,EAE9ByB,EAAWzB,EAAoB,EAAE,EAEjCoM,EAAWpM,EAAoB,EAAE,EAEjCqM,EAAYzL,EAAuBwL,CAAQ,EAE3C1K,EAAW1B,EAAoB,CAAC,EAEhCwB,EAAkBxB,EAAoB,EAAE,EAExCuB,EAAavB,EAAoB,EAAE,EAEvC,SAASY,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAMgE,EAAc,OAAO,aAAa,EAClCuB,EAAa,OAAO,YAAY,EAChCtB,EAAa,OAAO,YAAY,EAChCwH,EAAiB,OAAO,gBAAgB,EAOxChF,EAAuB,CAC3B,aAAcjK,GAAS,aAAaA,EAAM,OAAO,YAAY,KAAI,GAAMA,EAAM,OAAO,IAAM,mBAAmB,GAC7G,YAAaA,GAAS,YAAYA,EAAM,OAAO,YAAY,KAAI,GAAMA,EAAM,OAAO,IAAM,mBAAmB,EAC7G,EAEM0N,EAAiB,CACrB,qBAAsB,mCACtB,kBAAmB,gCACnB,gBAAiB,2BACjB,mBAAoB,8BACpB,gBAAiB,yBACjB,iBAAkB,kBAClB,iBAAkB,4BAClB,kBAAmB,sBACnB,OAAQ,kBACV,EAEMhI,EAAiB7C,EAAQ,eAAiB,CAC9C,UAAW,oBACX,OAAQ,KACR,MAAO,CAAE,EACT,SAAU,EACV,cAAe,IACf,QAAS,CAAE,EACX,QAAS,CAAE,EACX,QAAS,CACP,QAAS,CAAE,EACX,QAAS,CAAC,CACZ,CACF,EAOA,MAAMqM,CAAU,CAmBd,YAAY/E,EAAa,CAAC,SAAS,IAAI,EAAGC,EAAU,GAAI,CAMtD,GAAID,aAAsB,UAAYA,aAAsB,MAC1D,KAAK,WAAa,CAAC,GAAGA,CAAU,UACvBA,aAAsB,YAC/B,KAAK,WAAa,CAACA,CAAU,MAE7B,OAAM,IAAI,MAAM,8FAA8F,EAGhH,KAAK,QAAU9E,EAAS,CAAA,EAAIK,EAAgB0E,EAAS,CACnD,QAAS/E,EAAS,CAAE,EAAEqI,EAAgBtD,EAAQ,SAAW,EAAE,EAC3D,cAAe/E,EAAS,CAAE,EAAE4E,EAAsBG,EAAQ,eAAiB,EAAE,EAC7E,QAAS,CACP,QAASA,EAAQ,SAAWA,EAAQ,QAAQ,SAAW,CAAE,EACzD,QAASA,EAAQ,SAAWA,EAAQ,QAAQ,SAAW,CAAC,CAC1D,CACN,CAAK,EAOD,KAAK,QAAU,IAAI4E,EAAU,QAO7B,KAAK,SAAW,GAOhB,KAAK,QAAU,GAOf,KAAK,QAAU,GAEf,KAAKxH,CAAW,EAAI,KAAKA,CAAW,EAAE,KAAK,IAAI,EAC/C,KAAKuB,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAKtB,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAKwH,CAAc,EAAI,KAAKA,CAAc,EAAE,KAAK,IAAI,EAErD,SAAS,iBAAiB,aAAc,KAAKzH,CAAW,EAAG,EAAI,EAC/D,SAAS,iBAAiB,YAAa,KAAKuB,CAAU,EAAG,EAAI,EAC7D,SAAS,iBAAiB,YAAa,KAAKtB,CAAU,EAAG,EAAI,EAC7D,SAAS,iBAAiB,gBAAiB,KAAKwH,CAAc,EAAG,EAAI,EAErE,MAAME,EAAiB,OAAO,OAAOD,EAAU,OAAO,EAAE,OAAOE,GAAU,CAAC,KAAK,QAAQ,QAAQ,QAAQ,SAASA,CAAM,CAAC,EACjHC,EAAiB,OAAO,OAAOH,EAAU,OAAO,EAAE,OAAOI,GAAU,CAAC,KAAK,QAAQ,QAAQ,QAAQ,SAASA,CAAM,CAAC,EAEvH,KAAK,UAAc,GAAGH,EAAgB,GAAG,KAAK,QAAQ,OAAQ,EAC9D,KAAK,UAAc,GAAGE,EAAgB,GAAG,KAAK,QAAQ,OAAQ,EAE9D,MAAME,EAA4B,IAAIpL,EAAgB,0BAA0B,CAC9E,UAAW,IACjB,CAAK,EAED,KAAK,GAAG,iBAAkB,CAAC,CAAE,OAAA8D,CAAM,IAAO,KAAK,OAASA,CAAM,EAC9D,KAAK,GAAG,iBAAkB,IAAM,KAAK,OAAS,IAAI,EAElD,KAAK,QAAQsH,CAAyB,CACxC,CAgBA,SAAU,CACR,SAAS,oBAAoB,aAAc,KAAK/H,CAAW,EAAG,EAAI,EAClE,SAAS,oBAAoB,YAAa,KAAKuB,CAAU,EAAG,EAAI,EAChE,SAAS,oBAAoB,YAAa,KAAKtB,CAAU,EAAG,EAAI,EAChE,SAAS,oBAAoB,gBAAiB,KAAKwH,CAAc,EAAG,EAAI,EAExE,MAAMO,EAAwB,IAAIrL,EAAgB,sBAAsB,CACtE,UAAW,IACjB,CAAK,EAED,KAAK,QAAQqL,CAAqB,EAElC,KAAK,aAAa,GAAG,KAAK,QAAQ,IAAIC,GAAUA,EAAO,WAAW,CAAC,EACnE,KAAK,aAAa,GAAG,KAAK,QAAQ,IAAIH,GAAUA,EAAO,WAAW,CAAC,CACrE,CAQA,aAAaI,EAAS,CACpB,MAAMC,EAAgBD,EAAQ,IAAIN,GAAU,IAAIA,EAAO,IAAI,CAAC,EAE5D,OAAAO,EAAc,QAAQF,GAAUA,EAAO,OAAQ,CAAA,EAC/C,KAAK,QAAU,CAAC,GAAG,KAAK,QAAS,GAAGE,CAAa,EAE1C,IACT,CASA,gBAAgBD,EAAS,CAGvB,OAFuB,KAAK,QAAQ,OAAOD,GAAUC,EAAQ,SAASD,EAAO,WAAW,CAAC,EAE1E,QAAQA,GAAUA,EAAO,OAAQ,CAAA,EAChD,KAAK,QAAU,KAAK,QAAQ,OAAOA,GAAU,CAACC,EAAQ,SAASD,EAAO,WAAW,CAAC,EAE3E,IACT,CAQA,aAAaG,EAAS,CACpB,MAAMC,EAAgBD,EAAQ,IAAIE,GAAU,IAAIA,EAAO,KAAK,WAAY,KAAK,OAAO,CAAC,EAErF,OAAAD,EAAc,QAAQP,GAAUA,EAAO,OAAQ,CAAA,EAC/C,KAAK,QAAU,CAAC,GAAG,KAAK,QAAS,GAAGO,CAAa,EAE1C,IACT,CASA,gBAAgBD,EAAS,CAGvB,OAFuB,KAAK,QAAQ,OAAON,GAAUM,EAAQ,SAASN,EAAO,WAAW,CAAC,EAE1E,QAAQA,GAAUA,EAAO,OAAQ,CAAA,EAChD,KAAK,QAAU,KAAK,QAAQ,OAAOA,GAAU,CAACM,EAAQ,SAASN,EAAO,WAAW,CAAC,EAE3E,IACT,CAQA,gBAAgBnF,EAAY,CAC1B,YAAK,WAAa,CAAC,GAAG,KAAK,WAAY,GAAGA,CAAU,EACpD,KAAK,QAAQ,QAAQmF,GAAUA,EAAO,aAAa,GAAGnF,CAAU,CAAC,EAC1D,IACT,CAQA,mBAAmBA,EAAY,CAC7B,YAAK,WAAa,KAAK,WAAW,OAAOE,GAAa,CAACF,EAAW,SAASE,CAAS,CAAC,EACrF,KAAK,QAAQ,QAAQiF,GAAUA,EAAO,gBAAgB,GAAGnF,CAAU,CAAC,EAC7D,IACT,CASA,GAAGuE,KAASC,EAAW,CACrB,YAAK,QAAQ,GAAGD,EAAM,GAAGC,CAAS,EAC3B,IACT,CASA,IAAID,EAAMnC,EAAU,CAClB,YAAK,QAAQ,IAAImC,EAAMnC,CAAQ,EACxB,IACT,CAQA,QAAQvM,EAAO,CACb,YAAK,QAAQ,QAAQA,CAAK,EACnB,IACT,CAOA,gBAAgB8C,EAAM,CACpB,OAAO,KAAK,iBAAiBA,CAAI,EAAE,CAAC,CACtC,CAMA,iBAAiBA,EAAM,CACrB,MAAMiN,EAAa,KAAK,QAAQ,QAAQjN,CAAI,EAE5C,OAAIiN,aAAsB,MACjBA,EACE,OAAOA,GAAe,UAAYA,aAAsB,OAC1D,CAACA,CAAU,EAEX,EAEX,CAMA,YAAa,CACX,MAAO,EAAQ,KAAK,QACtB,CAMA,sBAAuB,CACrB,OAAO,KAAK,WAAW,OAAO,CAACC,EAAS3F,IAC/B,CAAC,GAAG2F,EAAS,GAAG,KAAK,iCAAiC3F,CAAS,CAAC,EACtE,CAAE,CAAA,CACP,CAQA,iCAAiCA,EAAW,CAG1C,MAAO,CAAC,GAFqBA,EAAU,iBAAiB,KAAK,QAAQ,SAAS,CAE/C,EAAE,OAAOC,GAC/BA,IAAiB,KAAK,gBAAkBA,IAAiB,KAAK,MACtE,CACH,CAOA,CAAC9C,CAAW,EAAExH,EAAO,CACnB,MAAMiQ,EAAcC,EAAelQ,CAAK,EAClC,CAAE,OAAAjB,EAAQ,UAAAsL,CAAW,EAAG4F,EAE9B,GAAI,CAAC,KAAK,WAAW,SAAS5F,CAAS,EACrC,OAGF,GAAI,KAAK,QAAQ,QAAUtL,GAAU,IAAKwJ,EAAO,SAASxJ,EAAQ,KAAK,QAAQ,MAAM,EAAG,CACtFkR,EAAY,OAAM,EAClB,MACF,CAMA,GAHA,KAAK,kBAAqB1H,EAAO,SAASxJ,EAAQ,KAAK,QAAQ,SAAS,EACxE,KAAK,gBAAkBsL,EAEnB,CAAC,KAAK,eAAgB,CACxB4F,EAAY,OAAM,EAClB,MACF,CAEI,KAAK,kBAAoB,KAAK,sBAChC,aAAa,KAAK,eAAe,EACjC,KAAK,iBAAiB,UAAU,OAAO,GAAG,KAAK,iBAAiB,eAAe,CAAC,EAChF,KAAK,oBAAoB,UAAU,OAAO,GAAG,KAAK,iBAAiB,kBAAkB,CAAC,GAGxF,KAAK,OAAS,KAAK,eAAe,UAAU,EAAI,EAChD,KAAK,eAAe,WAAW,aAAa,KAAK,OAAQ,KAAK,cAAc,EAC5E,KAAK,eAAe,MAAM,QAAU,OAEpC,MAAMpK,EAAY,IAAI3B,EAAW,eAAe,CAC9C,OAAQ,KAAK,OACb,eAAgB,KAAK,eACrB,gBAAiBmG,EACjB,YAAA4F,CACN,CAAK,EAMD,GAJA,KAAK,QAAQpK,CAAS,EAEtB,KAAK,SAAW,CAACA,EAAU,SAAQ,EAE/BA,EAAU,WAAY,CACxB,KAAK,OAAO,WAAW,YAAY,KAAK,MAAM,EAC9C,KAAK,eAAe,MAAM,QAAU,KACpC,MACF,CAEA,KAAK,eAAe,UAAU,IAAI,GAAG,KAAK,iBAAiB,iBAAiB,CAAC,EAC7E,KAAK,OAAO,UAAU,IAAI,GAAG,KAAK,iBAAiB,iBAAiB,CAAC,EACrE,KAAK,gBAAgB,UAAU,IAAI,GAAG,KAAK,iBAAiB,oBAAoB,CAAC,EACjF,SAAS,KAAK,UAAU,IAAI,GAAG,KAAK,iBAAiB,eAAe,CAAC,EACrEsK,EAAgB,SAAS,KAAM,MAAM,EAErC,sBAAsB,IAAM,CAE1B,MAAMC,EADiBF,EAAelQ,CAAK,EACL,MAAM,CAAE,OAAQ,KAAK,MAAM,CAAE,EAEnE,KAAK+I,CAAU,EAAE1D,EAAS,CAAA,EAAIrF,EAAO,CACnC,OAAQoQ,CACT,CAAA,CAAC,CACR,CAAK,CACH,CAOA,CAACrH,CAAU,EAAE/I,EAAO,CAClB,GAAI,CAAC,KAAK,SACR,OAGF,MAAMiQ,EAAcC,EAAelQ,CAAK,EAClC,CAAE,UAAAqK,CAAW,EAAG4F,EACtB,IAAIlR,EAASkR,EAAY,OAEzB,MAAMI,EAAgB,IAAInM,EAAW,cAAc,CACjD,OAAQ,KAAK,OACb,eAAgB,KAAK,eACrB,gBAAiBmG,EACjB,YAAA4F,CACN,CAAK,EAED,KAAK,QAAQI,CAAa,EAEtBA,EAAc,YAChBJ,EAAY,OAAM,EAGpBlR,KAAawJ,EAAO,SAASxJ,EAAQ,KAAK,QAAQ,SAAS,EAC3D,MAAMuR,KAA6B/H,EAAO,SAAS0H,EAAY,OAAQ,KAAK,UAAU,EAChFvH,EAAgBuH,EAAY,eAAiBK,EAC7CC,EAAqB,KAAK,sBAAwB7H,IAAkB,KAAK,qBACzE8H,EAAqB,KAAK,aAAezR,IAAW,KAAK,YACzD0R,EAAkB/H,GAAiB,KAAK,uBAAyBA,EACjEgI,EAAkBJ,GAA0BvR,GAAU,KAAK,cAAgBA,EAEjF,GAAIyR,EAAoB,CACtB,MAAMG,EAAe,IAAIzM,EAAW,aAAa,CAC/C,OAAQ,KAAK,OACb,eAAgB,KAAK,eACrB,gBAAiBmG,EACjB,YAAA4F,EACA,KAAM,KAAK,YACX,cAAe,KAAK,oBAC5B,CAAO,EAED,KAAK,YAAY,UAAU,OAAO,GAAG,KAAK,iBAAiB,gBAAgB,CAAC,EAC5E,KAAK,YAAc,KAEnB,KAAK,QAAQU,CAAY,CAC3B,CAEA,GAAIJ,EAAoB,CACtB,MAAMK,EAAwB,IAAI1M,EAAW,sBAAsB,CACjE,OAAQ,KAAK,OACb,eAAgB,KAAK,eACrB,gBAAiBmG,EACjB,YAAA4F,EACA,cAAe,KAAK,oBAC5B,CAAO,EAED,KAAK,qBAAqB,UAAU,OAAO,GAAG,KAAK,iBAAiB,gBAAgB,CAAC,EACrF,KAAK,qBAAuB,KAE5B,KAAK,QAAQW,CAAqB,CACpC,CAEA,GAAIH,EAAiB,CACnB/H,EAAc,UAAU,IAAI,GAAG,KAAK,iBAAiB,gBAAgB,CAAC,EAEtE,MAAMmI,EAAyB,IAAI3M,EAAW,uBAAuB,CACnE,OAAQ,KAAK,OACb,eAAgB,KAAK,eACrB,gBAAiBmG,EACjB,YAAA4F,EACA,cAAAvH,CACR,CAAO,EAED,KAAK,qBAAuBA,EAE5B,KAAK,QAAQmI,CAAsB,CACrC,CAEA,GAAIH,EAAiB,CACnB3R,EAAO,UAAU,IAAI,GAAG,KAAK,iBAAiB,gBAAgB,CAAC,EAE/D,MAAM+R,EAAgB,IAAI5M,EAAW,cAAc,CACjD,OAAQ,KAAK,OACb,eAAgB,KAAK,eACrB,gBAAiBmG,EACjB,YAAA4F,EACA,cAAAvH,EACA,KAAM3J,CACd,CAAO,EAED,KAAK,YAAcA,EAEnB,KAAK,QAAQ+R,CAAa,CAC5B,CACF,CAOA,CAACrJ,CAAU,EAAEzH,EAAO,CAClB,GAAI,CAAC,KAAK,SACR,OAGF,KAAK,SAAW,GAEhB,MAAM+Q,EAAgB,IAAI7M,EAAW,cAAc,CACjD,OAAQ,KAAK,OACb,eAAgB,KAAK,eACrB,YAAalE,EAAM,YACnB,gBAAiB,KAAK,eAC5B,CAAK,EAED,KAAK,QAAQ+Q,CAAa,EAE1B,KAAK,OAAO,WAAW,aAAa,KAAK,eAAgB,KAAK,MAAM,EACpE,KAAK,OAAO,WAAW,YAAY,KAAK,MAAM,EAC9C,KAAK,eAAe,MAAM,QAAU,GAEpC,KAAK,OAAO,UAAU,OAAO,GAAG,KAAK,iBAAiB,iBAAiB,CAAC,EACxE,KAAK,eAAe,UAAU,OAAO,GAAG,KAAK,iBAAiB,iBAAiB,CAAC,EAChF,KAAK,eAAe,UAAU,IAAI,GAAG,KAAK,iBAAiB,eAAe,CAAC,EAC3E,KAAK,gBAAgB,UAAU,IAAI,GAAG,KAAK,iBAAiB,kBAAkB,CAAC,EAC/E,KAAK,gBAAgB,UAAU,OAAO,GAAG,KAAK,iBAAiB,oBAAoB,CAAC,EACpF,SAAS,KAAK,UAAU,OAAO,GAAG,KAAK,iBAAiB,eAAe,CAAC,EACxEZ,EAAgB,SAAS,KAAM,EAAE,EAE7B,KAAK,aACP,KAAK,YAAY,UAAU,OAAO,GAAG,KAAK,iBAAiB,gBAAgB,CAAC,EAG1E,KAAK,sBACP,KAAK,qBAAqB,UAAU,OAAO,GAAG,KAAK,iBAAiB,gBAAgB,CAAC,EAGvF,KAAK,iBAAmB,KAAK,eAC7B,KAAK,oBAAsB,KAAK,gBAEhC,KAAK,gBAAkB,WAAW,IAAM,CAClC,KAAK,kBACP,KAAK,iBAAiB,UAAU,OAAO,GAAG,KAAK,iBAAiB,eAAe,CAAC,EAG9E,KAAK,qBACP,KAAK,oBAAoB,UAAU,OAAO,GAAG,KAAK,iBAAiB,kBAAkB,CAAC,EAGxF,KAAK,iBAAmB,KACxB,KAAK,oBAAsB,IACjC,EAAO,KAAK,QAAQ,aAAa,EAE7B,MAAMa,EAAmB,IAAI9M,EAAW,iBAAiB,CACvD,OAAQ,KAAK,OACb,eAAgB,KAAK,eACrB,YAAalE,EAAM,YACnB,gBAAiB,KAAK,eAC5B,CAAK,EAED,KAAK,QAAQgR,CAAgB,EAE7B,KAAK,OAAS,KACd,KAAK,eAAiB,KACtB,KAAK,qBAAuB,KAC5B,KAAK,YAAc,KACnB,KAAK,gBAAkB,IACzB,CAOA,CAAC/B,CAAc,EAAEjP,EAAO,CACtB,GAAI,CAAC,KAAK,SACR,OAGF,MAAMiQ,EAAcC,EAAelQ,CAAK,EAClCuF,EAAS,KAAK,WAAcgD,EAAO,SAAS0H,EAAY,cAAc,OAAQ,KAAK,QAAQ,SAAS,EAEpGgB,EAAoB,IAAI/M,EAAW,kBAAkB,CACzD,YAAA+L,EACA,OAAA1K,EACA,SAAU0K,EAAY,QAC5B,CAAK,EAED,KAAK,QAAQgB,CAAiB,CAChC,CACF,CAEApO,EAAQ,QAAUqM,EAClBA,EAAU,QAAU,CAAE,aAAc9K,EAAS,aAAc,UAAWA,EAAS,UAAW,OAAQA,EAAS,OAAQ,WAAYA,EAAS,YACxI8K,EAAU,QAAU,CAAE,YAAa7K,EAAS,YAAa,YAAaA,EAAS,aAC/E,SAAS6L,EAAelQ,EAAO,CAC7B,OAAOA,EAAM,MACf,CAEA,SAASmQ,EAAgB3J,EAAStJ,EAAO,CACvCsJ,EAAQ,MAAM,iBAAmBtJ,EACjCsJ,EAAQ,MAAM,cAAgBtJ,EAC9BsJ,EAAQ,MAAM,aAAetJ,EAC7BsJ,EAAQ,MAAM,YAActJ,EAC5BsJ,EAAQ,MAAM,WAAatJ,CAC7B,CAEO,EAEA,SAASsF,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAImB,EAAUrB,EAAoB,CAAC,EAE/BsB,EAAWV,EAAuBS,CAAO,EAEzCD,EAAepB,EAAoB,CAAC,EAExC,SAASY,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAM0N,EAAwB,OAAO,uBAAuB,EACtDC,EAAmB,OAAO,kBAAkB,EAC5CC,EAAc,OAAO,aAAa,EAClCC,EAAqB,OAAO,oBAAoB,EAChDC,EAAc,OAAO,aAAa,EAClCC,EAAY,OAAO,WAAW,EAC9BC,EAA2B,OAAO,0BAA0B,EAQlE,MAAMC,UAAyBxN,EAAS,OAAQ,CAO9C,YAAYkG,EAAa,GAAIC,EAAU,CAAA,EAAI,CACzC,MAAMD,EAAYC,CAAO,EAOzB,KAAK,UAAY,GAEjB,KAAK8G,CAAqB,EAAI,KAAKA,CAAqB,EAAE,KAAK,IAAI,EACnE,KAAKC,CAAgB,EAAI,KAAKA,CAAgB,EAAE,KAAK,IAAI,EACzD,KAAKC,CAAW,EAAI,KAAKA,CAAW,EAAE,KAAK,IAAI,EAC/C,KAAKC,CAAkB,EAAI,KAAKA,CAAkB,EAAE,KAAK,IAAI,EAC7D,KAAKC,CAAW,EAAI,KAAKA,CAAW,EAAE,KAAK,IAAI,EAC/C,KAAKC,CAAS,EAAI,KAAKA,CAAS,EAAE,KAAK,IAAI,CAC7C,CAKA,QAAS,CACP,UAAWlH,KAAa,KAAK,WAC3BA,EAAU,iBAAiB,4BAA6B,KAAK6G,CAAqB,EAAG,EAAK,EAC1F7G,EAAU,iBAAiB,uBAAwB,KAAK8G,CAAgB,EAAG,EAAK,EAChF9G,EAAU,iBAAiB,YAAa,KAAK+G,CAAW,EAAG,EAAI,EAC/D/G,EAAU,iBAAiB,0BAA2B,KAAKgH,CAAkB,EAAG,EAAK,EAGvF,SAAS,iBAAiB,YAAa,KAAKC,CAAW,CAAC,EACxD,SAAS,iBAAiB,UAAW,KAAKC,CAAS,CAAC,CACtD,CAKA,QAAS,CACP,UAAWlH,KAAa,KAAK,WAC3BA,EAAU,oBAAoB,4BAA6B,KAAK6G,CAAqB,EAAG,EAAK,EAC7F7G,EAAU,oBAAoB,uBAAwB,KAAK8G,CAAgB,EAAG,EAAK,EACnF9G,EAAU,oBAAoB,YAAa,KAAK+G,CAAW,EAAG,EAAI,EAClE/G,EAAU,oBAAoB,0BAA2B,KAAKgH,CAAkB,EAAG,EAAK,EAG1F,SAAS,oBAAoB,YAAa,KAAKC,CAAW,CAAC,EAC3D,SAAS,oBAAoB,UAAW,KAAKC,CAAS,CAAC,CACzD,CAOA,CAACL,CAAqB,EAAElR,EAAO,CAC7BA,EAAM,eAAc,EACpB,KAAK,UAAY,EACnB,CAOA,CAACmR,CAAgB,EAAEnR,EAAO,CACxB,GAAI,KAAK,SACP,OAGF,MAAMjB,EAAS,SAAS,iBAAiBiB,EAAM,QAASA,EAAM,OAAO,EAC/DqK,EAAYrK,EAAM,cAElB0R,EAAiB,IAAI3N,EAAa,qBAAqB,CAC3D,QAAS/D,EAAM,QACf,QAASA,EAAM,QACf,OAAAjB,EACA,UAAAsL,EACA,cAAerK,CACrB,CAAK,EAED,KAAK,QAAQqK,EAAWqH,CAAc,EAEtC,KAAK,iBAAmBrH,EACxB,KAAK,SAAW,CAACqH,EAAe,SAAQ,EACxC,KAAK,UAAY,EACnB,CAOA,CAACH,CAAS,EAAEvR,EAAO,CACjB,GAAI,CAAC,KAAK,SACR,OAGF,MAAM+Q,EAAgB,IAAIhN,EAAa,oBAAoB,CACzD,QAAS/D,EAAM,QACf,QAASA,EAAM,QACf,OAAQ,KACR,UAAW,KAAK,iBAChB,cAAeA,CACrB,CAAK,EAED,KAAK,QAAQ,KAAK,iBAAkB+Q,CAAa,EAEjD,KAAK,iBAAmB,KACxB,KAAK,SAAW,GAChB,KAAK,UAAY,EACnB,CAOA,CAACK,CAAW,EAAEpR,EAAO,CACd,KAAK,YAMVA,EAAM,gBAAe,EACrBA,EAAM,yBAAwB,EAC9BA,EAAM,eAAc,EACtB,CAOA,CAACsR,CAAW,EAAEtR,EAAO,CACnB,GAAI,CAAC,KAAK,SACR,OAGF,MAAMjB,EAAS,SAAS,iBAAiBiB,EAAM,QAASA,EAAM,OAAO,EAE/DqQ,EAAgB,IAAItM,EAAa,oBAAoB,CACzD,QAAS/D,EAAM,QACf,QAASA,EAAM,QACf,OAAAjB,EACA,UAAW,KAAK,iBAChB,cAAeiB,CACrB,CAAK,EAED,KAAK,QAAQ,KAAK,iBAAkBqQ,CAAa,CACnD,CAOA,CAACgB,CAAkB,EAAErR,EAAO,CAC1B,GAAI,KAAK,SACP,OAGF,MAAMjB,EAASiB,EAAM,OACfqK,EAAYrK,EAAM,cAElBiR,EAAoB,IAAIlN,EAAa,wBAAwB,CACjE,SAAU/D,EAAM,YAChB,QAASA,EAAM,QACf,QAASA,EAAM,QACf,OAAAjB,EACA,UAAAsL,EACA,cAAerK,CACrB,CAAK,EAED,KAAK,QAAQqK,EAAW4G,CAAiB,CAC3C,CAOA,CAACO,CAAwB,EAAExR,EAAO,CAChC,GAAI,CAAC,KAAK,SACR,OAGF,MAAMjB,EAASiB,EAAM,OAEfiR,EAAoB,IAAIlN,EAAa,wBAAwB,CACjE,SAAU/D,EAAM,YAChB,QAASA,EAAM,QACf,QAASA,EAAM,QACf,OAAAjB,EACA,UAAW,KAAK,iBAChB,cAAeiB,CACrB,CAAK,EAED,KAAK,QAAQ,KAAK,iBAAkBiR,CAAiB,CACvD,CACF,CACApO,EAAQ,QAAU4O,CAEX,EAEA,SAASjP,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAI8B,EAAoBhC,EAAoB,EAAE,EAE1CgP,EAAqBpO,EAAuBoB,CAAiB,EAEjE,SAASpB,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAU8O,EAAmB,OAE9B,EAEA,SAASnP,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAI0F,EAAS5F,EAAoB,CAAC,EAE9BqB,EAAUrB,EAAoB,CAAC,EAE/BsB,EAAWV,EAAuBS,CAAO,EAEzCD,EAAepB,EAAoB,CAAC,EAExC,SAASY,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAM4N,EAAc,OAAO,aAAa,EAClCG,EAAY,OAAO,WAAW,EAC9B/J,EAAc,OAAO,aAAa,EAClCE,EAAa,OAAO,YAAY,EAChCkK,EAAY,OAAO,WAAW,EAC9BC,EAAS,OAAO,QAAQ,EACxBC,EAAQ,OAAO,OAAO,EAQ5B,MAAMC,UAAmB9N,EAAS,OAAQ,CAOxC,YAAYkG,EAAa,GAAIC,EAAU,CAAA,EAAI,CACzC,MAAMD,EAAYC,CAAO,EAOzB,KAAK,iBAAmB,KAOxB,KAAK,iBAAmB,KAOxB,KAAK,uBAAyB,KAE9B,KAAKgH,CAAW,EAAI,KAAKA,CAAW,EAAE,KAAK,IAAI,EAC/C,KAAKG,CAAS,EAAI,KAAKA,CAAS,EAAE,KAAK,IAAI,EAC3C,KAAK/J,CAAW,EAAI,KAAKA,CAAW,EAAE,KAAK,IAAI,EAC/C,KAAKE,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAKkK,CAAS,EAAI,KAAKA,CAAS,EAAE,KAAK,IAAI,EAC3C,KAAKC,CAAM,EAAI,KAAKA,CAAM,EAAE,KAAK,IAAI,CACvC,CAKA,QAAS,CACP,SAAS,iBAAiB,YAAa,KAAKT,CAAW,EAAG,EAAI,CAChE,CAKA,QAAS,CACP,SAAS,oBAAoB,YAAa,KAAKA,CAAW,EAAG,EAAI,CACnE,CAOA,CAAC5J,CAAW,EAAExH,EAAO,CAEnBA,EAAM,aAAa,QAAQ,OAAQ,EAAE,EACrCA,EAAM,aAAa,cAAgB,KAAK,QAAQ,KAEhD,MAAMjB,EAAS,SAAS,iBAAiBiB,EAAM,QAASA,EAAM,OAAO,EAGrE,GAFA,KAAK,oBAAuBuI,EAAO,SAASvI,EAAM,OAAQ,KAAK,UAAU,EAErE,CAAC,KAAK,iBACR,OAGF,MAAM0R,EAAiB,IAAI3N,EAAa,qBAAqB,CAC3D,QAAS/D,EAAM,QACf,QAASA,EAAM,QACf,OAAAjB,EACA,UAAW,KAAK,iBAChB,cAAeiB,CACrB,CAAK,EAGD,WAAW,IAAM,CACf,KAAK,QAAQ,KAAK,iBAAkB0R,CAAc,EAE9CA,EAAe,WACjB,KAAK,SAAW,GAEhB,KAAK,SAAW,EAEnB,EAAE,CAAC,CACN,CAOA,CAAChK,CAAU,EAAE1H,EAAO,CAClB,GAAI,CAAC,KAAK,SACR,OAGF,MAAMjB,EAAS,SAAS,iBAAiBiB,EAAM,QAASA,EAAM,OAAO,EAC/DqK,EAAY,KAAK,iBAEjBgG,EAAgB,IAAItM,EAAa,oBAAoB,CACzD,QAAS/D,EAAM,QACf,QAASA,EAAM,QACf,OAAAjB,EACA,UAAAsL,EACA,cAAerK,CACrB,CAAK,EAED,KAAK,QAAQqK,EAAWgG,CAAa,EAEhCA,EAAc,aACjBrQ,EAAM,eAAc,EACpBA,EAAM,aAAa,WAAa,KAAK,QAAQ,KAEjD,CAOA,CAAC4R,CAAS,EAAE5R,EAAO,CACjB,GAAI,CAAC,KAAK,SACR,OAGF,SAAS,oBAAoB,UAAW,KAAKuR,CAAS,EAAG,EAAI,EAE7D,MAAMxS,EAAS,SAAS,iBAAiBiB,EAAM,QAASA,EAAM,OAAO,EAC/DqK,EAAY,KAAK,iBAEjB0G,EAAgB,IAAIhN,EAAa,oBAAoB,CACzD,QAAS/D,EAAM,QACf,QAASA,EAAM,QACf,OAAAjB,EACA,UAAAsL,EACA,cAAerK,CACrB,CAAK,EAED,KAAK,QAAQqK,EAAW0G,CAAa,EAErC,KAAK,SAAW,GAChB,KAAK,WAAa,KAElB,KAAKe,CAAK,GACZ,CAOA,CAACD,CAAM,EAAE7R,EAAO,CAEdA,EAAM,eAAc,CACtB,CAOA,CAACoR,CAAW,EAAEpR,EAAO,CAEnB,GAAIA,EAAM,SAAWA,EAAM,OAAO,MAAQA,EAAM,OAAO,iBACrD,OAGF,MAAMgS,KAA6BzJ,EAAO,SAASvI,EAAM,OAAQwG,GAAWA,EAAQ,SAAS,EAEzFwL,IACFA,EAAuB,UAAY,GACnC,KAAK,uBAAyBA,GAGhC,SAAS,iBAAiB,UAAW,KAAKT,CAAS,EAAG,EAAI,EAC1D,SAAS,iBAAiB,YAAa,KAAK/J,CAAW,EAAG,EAAK,EAC/D,SAAS,iBAAiB,WAAY,KAAKE,CAAU,EAAG,EAAK,EAC7D,SAAS,iBAAiB,UAAW,KAAKkK,CAAS,EAAG,EAAK,EAC3D,SAAS,iBAAiB,OAAQ,KAAKC,CAAM,EAAG,EAAK,EAErD,MAAM9S,KAAawJ,EAAO,SAASvI,EAAM,OAAQ,KAAK,QAAQ,SAAS,EAElEjB,IAIL,KAAK,WAAaiB,EAElB,KAAK,iBAAmB,WAAW,IAAM,CACvCjB,EAAO,UAAY,GACnB,KAAK,iBAAmBA,CAC9B,EAAO,KAAK,MAAM,IAAI,EACpB,CAOA,CAACwS,CAAS,GAAI,CACZ,KAAKO,CAAK,GACZ,CAOA,CAACA,CAAK,GAAI,CACR,aAAa,KAAK,gBAAgB,EAElC,SAAS,oBAAoB,UAAW,KAAKP,CAAS,EAAG,EAAI,EAC7D,SAAS,oBAAoB,YAAa,KAAK/J,CAAW,EAAG,EAAK,EAClE,SAAS,oBAAoB,WAAY,KAAKE,CAAU,EAAG,EAAK,EAChE,SAAS,oBAAoB,UAAW,KAAKkK,CAAS,EAAG,EAAK,EAC9D,SAAS,oBAAoB,OAAQ,KAAKC,CAAM,EAAG,EAAK,EAEpD,KAAK,yBACP,KAAK,uBAAuB,UAAY,GACxC,KAAK,uBAAyB,MAG5B,KAAK,mBACP,KAAK,iBAAiB,UAAY,GAClC,KAAK,iBAAmB,KAE5B,CACF,CACAhP,EAAQ,QAAUkP,CAEX,EAEA,SAASvP,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAI6B,EAAc/B,EAAoB,EAAE,EAEpCsP,EAAe1O,EAAuBmB,CAAW,EAErD,SAASnB,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUoP,EAAa,OAExB,EAEA,SAASzP,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAI0F,EAAS5F,EAAoB,CAAC,EAE9BqB,EAAUrB,EAAoB,CAAC,EAE/BsB,EAAWV,EAAuBS,CAAO,EAEzCD,EAAepB,EAAoB,CAAC,EAExC,SAASY,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAM0O,EAAe,OAAO,cAAc,EACpCC,EAAa,OAAO,YAAY,EAChCC,EAAc,OAAO,aAAa,EAClCC,EAAY,OAAO,WAAW,EAC9BC,EAAmB,OAAO,kBAAkB,EAMlD,IAAIC,EAAmB,GAGvB,OAAO,iBAAiB,YAAavS,GAAS,CACvCuS,GAKLvS,EAAM,eAAc,CACtB,EAAG,CAAE,QAAS,EAAK,CAAE,EAQrB,MAAMwS,UAAoBvO,EAAS,OAAQ,CAOzC,YAAYkG,EAAa,GAAIC,EAAU,CAAA,EAAI,CACzC,MAAMD,EAAYC,CAAO,EAOzB,KAAK,wBAA0B,KAO/B,KAAK,WAAa,KAOlB,KAAK,WAAa,GAOlB,KAAK,MAAQ,KAOb,KAAK,MAAQ,KAEb,KAAK8H,CAAY,EAAI,KAAKA,CAAY,EAAE,KAAK,IAAI,EACjD,KAAKC,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAKC,CAAW,EAAI,KAAKA,CAAW,EAAE,KAAK,IAAI,EAC/C,KAAKC,CAAS,EAAI,KAAKA,CAAS,EAAE,KAAK,IAAI,EAC3C,KAAKC,CAAgB,EAAI,KAAKA,CAAgB,EAAE,KAAK,IAAI,CAC3D,CAKA,QAAS,CACP,SAAS,iBAAiB,aAAc,KAAKJ,CAAY,CAAC,CAC5D,CAKA,QAAS,CACP,SAAS,oBAAoB,aAAc,KAAKA,CAAY,CAAC,CAC/D,CAOA,CAACA,CAAY,EAAElS,EAAO,CACpB,MAAMqK,KAAgB9B,EAAO,SAASvI,EAAM,OAAQ,KAAK,UAAU,EAEnE,GAAI,CAACqK,EACH,OAEF,KAAM,CAAE,SAAAoI,EAAW,GAAM,KAAK,QACxB,CAAE,MAAAC,CAAO,EAAG,KACZ,CAAE,MAAAhU,EAAO,MAAAiU,CAAO,KAAOpK,EAAO,aAAavI,CAAK,EAEtD,OAAO,OAAO,KAAM,CAAE,MAAAtB,EAAO,MAAAiU,CAAO,CAAA,EACpC,KAAK,eAAiB,KAAK,MAC3B,KAAK,WAAa3S,EAClB,KAAK,iBAAmBqK,EAExB,SAAS,iBAAiB,WAAY,KAAK8H,CAAU,CAAC,EACtD,SAAS,iBAAiB,cAAe,KAAKA,CAAU,CAAC,EACzD,SAAS,iBAAiB,YAAa,KAAKG,CAAgB,CAAC,EAC7DjI,EAAU,iBAAiB,cAAeuI,CAAa,EAEnDH,IACFF,EAAmB,IAGrB,KAAK,WAAa,OAAO,WAAW,IAAM,CACxC,KAAKD,CAAgB,EAAE,CAAE,QAAS,CAAC,CAAE,MAAO,KAAK,MAAO,MAAO,KAAK,KAAO,CAAA,CAAG,CAAA,CACpF,EAAOI,EAAM,KAAK,CAChB,CAMA,CAACL,CAAS,GAAI,CACZ,MAAMQ,EAAa,KAAK,WAClBxI,EAAY,KAAK,iBACjByI,KAAYvK,EAAO,aAAasK,CAAU,EAE1CnB,EAAiB,IAAI3N,EAAa,qBAAqB,CAC3D,QAAS+O,EAAM,MACf,QAASA,EAAM,MACf,OAAQD,EAAW,OACnB,UAAAxI,EACA,cAAewI,CACrB,CAAK,EAED,KAAK,QAAQ,KAAK,iBAAkBnB,CAAc,EAElD,KAAK,SAAW,CAACA,EAAe,SAAQ,EAEpC,KAAK,UACP,SAAS,iBAAiB,YAAa,KAAKU,CAAW,CAAC,EAE1DG,EAAmB,KAAK,QAC1B,CAOA,CAACD,CAAgB,EAAEtS,EAAO,CACxB,KAAM,CAAE,SAAAyS,CAAQ,EAAK,KAAK,QACpB,CAAE,WAAAI,EAAY,MAAAH,CAAO,EAAG,KACxBvM,KAAYoC,EAAO,aAAasK,CAAU,EAC1C7C,KAAczH,EAAO,aAAavI,CAAK,EACvC+S,EAAc,KAAK,IAAG,EAAK,KAAK,eAChCC,KAAwBzK,EAAO,UAAUpC,EAAM,MAAOA,EAAM,MAAO6J,EAAQ,MAAOA,EAAQ,KAAK,EAErG,OAAO,OAAO,KAAMA,CAAO,EAE3B,aAAa,KAAK,UAAU,EAExB+C,EAAcL,EAAM,MAEtB,SAAS,oBAAoB,YAAa,KAAKJ,CAAgB,CAAC,EACvDU,GAAqBP,IAC9B,SAAS,oBAAoB,YAAa,KAAKH,CAAgB,CAAC,EAChE,KAAKD,CAAS,IAElB,CAOA,CAACD,CAAW,EAAEpS,EAAO,CACnB,GAAI,CAAC,KAAK,SACR,OAEF,KAAM,CAAE,MAAAtB,EAAO,MAAAiU,CAAO,KAAOpK,EAAO,aAAavI,CAAK,EAChDjB,EAAS,SAAS,iBAAiBL,EAAQ,OAAO,QAASiU,EAAQ,OAAO,OAAO,EAEjFtC,EAAgB,IAAItM,EAAa,oBAAoB,CACzD,QAASrF,EACT,QAASiU,EACT,OAAA5T,EACA,UAAW,KAAK,iBAChB,cAAeiB,CACrB,CAAK,EAED,KAAK,QAAQ,KAAK,iBAAkBqQ,CAAa,CACnD,CAOA,CAAC8B,CAAU,EAAEnS,EAAO,CAYlB,GAXA,aAAa,KAAK,UAAU,EAC5BuS,EAAmB,GAEnB,SAAS,oBAAoB,WAAY,KAAKJ,CAAU,CAAC,EACzD,SAAS,oBAAoB,cAAe,KAAKA,CAAU,CAAC,EAC5D,SAAS,oBAAoB,YAAa,KAAKG,CAAgB,CAAC,EAE5D,KAAK,kBACP,KAAK,iBAAiB,oBAAoB,cAAeM,CAAa,EAGpE,CAAC,KAAK,SACR,OAGF,SAAS,oBAAoB,YAAa,KAAKR,CAAW,CAAC,EAE3D,KAAM,CAAE,MAAA1T,EAAO,MAAAiU,CAAO,KAAOpK,EAAO,aAAavI,CAAK,EAChDjB,EAAS,SAAS,iBAAiBL,EAAQ,OAAO,QAASiU,EAAQ,OAAO,OAAO,EAEvF3S,EAAM,eAAc,EAEpB,MAAM+Q,EAAgB,IAAIhN,EAAa,oBAAoB,CACzD,QAASrF,EACT,QAASiU,EACT,OAAA5T,EACA,UAAW,KAAK,iBAChB,cAAeiB,CACrB,CAAK,EAED,KAAK,QAAQ,KAAK,iBAAkB+Q,CAAa,EAEjD,KAAK,iBAAmB,KACxB,KAAK,SAAW,GAChB,KAAK,WAAa,IACpB,CACF,CAEAlO,EAAQ,QAAU2P,EAClB,SAASI,EAAc5S,EAAO,CAC5BA,EAAM,eAAc,EACpBA,EAAM,gBAAe,CACvB,CAEO,EAEA,SAASwC,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAI4B,EAAe9B,EAAoB,EAAE,EAErCsQ,EAAgB1P,EAAuBkB,CAAY,EAEvD,SAASlB,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUoQ,EAAc,OAEzB,EAEA,SAASzQ,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,wBAA0BA,EAAQ,oBAAsBA,EAAQ,oBAAsBA,EAAQ,qBAAuBA,EAAQ,YAAc,OAEnJ,IAAIY,EAAiBd,EAAoB,CAAC,EAEtCe,EAAkBH,EAAuBE,CAAc,EAE3D,SAASF,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAQ9F,MAAM0P,UAAoBxP,EAAgB,OAAQ,CAOhD,IAAI,eAAgB,CAClB,OAAO,KAAK,KAAK,aACnB,CAQA,IAAI,SAAU,CACZ,OAAO,KAAK,KAAK,OACnB,CAQA,IAAI,SAAU,CACZ,OAAO,KAAK,KAAK,OACnB,CASA,IAAI,QAAS,CACX,OAAO,KAAK,KAAK,MACnB,CAQA,IAAI,WAAY,CACd,OAAO,KAAK,KAAK,SACnB,CAQA,IAAI,UAAW,CACb,OAAO,KAAK,KAAK,QACnB,CACF,CAEAb,EAAQ,YAAcqQ,EAOtB,MAAMC,UAA6BD,CAAY,CAAC,CAEhDrQ,EAAQ,qBAAuBsQ,EAO/BA,EAAqB,KAAO,aAC5B,MAAMC,UAA4BF,CAAY,CAAC,CAE/CrQ,EAAQ,oBAAsBuQ,EAO9BA,EAAoB,KAAO,YAC3B,MAAMC,UAA4BH,CAAY,CAAC,CAE/CrQ,EAAQ,oBAAsBwQ,EAO9BA,EAAoB,KAAO,YAC3B,MAAMC,UAAgCJ,CAAY,CAAC,CACnDrQ,EAAQ,wBAA0ByQ,EAClCA,EAAwB,KAAO,eAExB,EAEA,SAAS9Q,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAI0F,EAAS5F,EAAoB,CAAC,EAE9BqB,EAAUrB,EAAoB,CAAC,EAE/BsB,EAAWV,EAAuBS,CAAO,EAEzCD,EAAepB,EAAoB,CAAC,EAExC,SAASY,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAM+P,EAA6B,OAAO,4BAA4B,EAChEnC,EAAc,OAAO,aAAa,EAClCE,EAAc,OAAO,aAAa,EAClCC,EAAY,OAAO,WAAW,EAC9Bc,EAAY,OAAO,WAAW,EAC9BC,EAAmB,OAAO,kBAAkB,EAQlD,MAAMkB,UAAoBvP,EAAS,OAAQ,CAOzC,YAAYkG,EAAa,GAAIC,EAAU,CAAA,EAAI,CACzC,MAAMD,EAAYC,CAAO,EAOzB,KAAK,iBAAmB,KAOxB,KAAK,MAAQ,KAOb,KAAK,MAAQ,KAEb,KAAKmJ,CAA0B,EAAI,KAAKA,CAA0B,EAAE,KAAK,IAAI,EAC7E,KAAKnC,CAAW,EAAI,KAAKA,CAAW,EAAE,KAAK,IAAI,EAC/C,KAAKE,CAAW,EAAI,KAAKA,CAAW,EAAE,KAAK,IAAI,EAC/C,KAAKC,CAAS,EAAI,KAAKA,CAAS,EAAE,KAAK,IAAI,EAC3C,KAAKc,CAAS,EAAI,KAAKA,CAAS,EAAE,KAAK,IAAI,EAC3C,KAAKC,CAAgB,EAAI,KAAKA,CAAgB,EAAE,KAAK,IAAI,CAC3D,CAKA,QAAS,CACP,SAAS,iBAAiB,YAAa,KAAKlB,CAAW,EAAG,EAAI,CAChE,CAKA,QAAS,CACP,SAAS,oBAAoB,YAAa,KAAKA,CAAW,EAAG,EAAI,CACnE,CAOA,CAACA,CAAW,EAAEpR,EAAO,CACnB,GAAIA,EAAM,SAAW,GAAKA,EAAM,SAAWA,EAAM,QAC/C,OAEF,MAAMqK,KAAgB9B,EAAO,SAASvI,EAAM,OAAQ,KAAK,UAAU,EAEnE,GAAI,CAACqK,EACH,OAGF,KAAM,CAAE,MAAAqI,CAAO,EAAG,KACZ,CAAE,MAAAhU,EAAO,MAAAiU,CAAO,EAAG3S,EAEzB,OAAO,OAAO,KAAM,CAAE,MAAAtB,EAAO,MAAAiU,CAAO,CAAA,EACpC,KAAK,cAAgB,KAAK,MAC1B,KAAK,WAAa3S,EAElB,KAAK,iBAAmBqK,EACxB,SAAS,iBAAiB,UAAW,KAAKkH,CAAS,CAAC,EACpD,SAAS,iBAAiB,YAAakC,CAAsB,EAC7D,SAAS,iBAAiB,YAAa,KAAKnB,CAAgB,CAAC,EAE7D,KAAK,iBAAmB,OAAO,WAAW,IAAM,CAC9C,KAAKA,CAAgB,EAAE,CAAE,MAAO,KAAK,MAAO,MAAO,KAAK,KAAK,CAAE,CACrE,EAAOI,EAAM,KAAK,CAChB,CAMA,CAACL,CAAS,GAAI,CACZ,MAAMQ,EAAa,KAAK,WAClBxI,EAAY,KAAK,iBAEjBqH,EAAiB,IAAI3N,EAAa,qBAAqB,CAC3D,QAAS8O,EAAW,QACpB,QAASA,EAAW,QACpB,OAAQA,EAAW,OACnB,UAAAxI,EACA,cAAewI,CACrB,CAAK,EAED,KAAK,QAAQ,KAAK,iBAAkBnB,CAAc,EAElD,KAAK,SAAW,CAACA,EAAe,SAAQ,EAEpC,KAAK,WACP,SAAS,iBAAiB,cAAe,KAAK6B,CAA0B,EAAG,EAAI,EAC/E,SAAS,iBAAiB,YAAa,KAAKjC,CAAW,CAAC,EAE5D,CAQA,CAACgB,CAAgB,EAAEtS,EAAO,CACxB,KAAM,CAAE,MAAAtB,EAAO,MAAAiU,CAAO,EAAG3S,EACnB,CAAE,SAAAyS,CAAQ,EAAK,KAAK,QACpB,CAAE,WAAAI,EAAY,MAAAH,CAAO,EAAG,KAI9B,GAFA,OAAO,OAAO,KAAM,CAAE,MAAAhU,EAAO,MAAAiU,CAAO,CAAA,EAEhC,CAAC,KAAK,iBACR,OAGF,MAAMI,EAAc,KAAK,IAAG,EAAK,KAAK,cAChCC,KAAwBzK,EAAO,UAAUsK,EAAW,MAAOA,EAAW,MAAOnU,EAAOiU,CAAK,GAAK,EAEpG,aAAa,KAAK,gBAAgB,EAE9BI,EAAcL,EAAM,MAEtB,SAAS,oBAAoB,YAAa,KAAKJ,CAAgB,CAAC,EACvDU,GAAqBP,IAC9B,SAAS,oBAAoB,YAAa,KAAKH,CAAgB,CAAC,EAChE,KAAKD,CAAS,IAElB,CAOA,CAACf,CAAW,EAAEtR,EAAO,CACnB,GAAI,CAAC,KAAK,SACR,OAGF,MAAMjB,EAAS,SAAS,iBAAiBiB,EAAM,QAASA,EAAM,OAAO,EAE/DqQ,EAAgB,IAAItM,EAAa,oBAAoB,CACzD,QAAS/D,EAAM,QACf,QAASA,EAAM,QACf,OAAAjB,EACA,UAAW,KAAK,iBAChB,cAAeiB,CACrB,CAAK,EAED,KAAK,QAAQ,KAAK,iBAAkBqQ,CAAa,CACnD,CAOA,CAACkB,CAAS,EAAEvR,EAAO,CAWjB,GAVA,aAAa,KAAK,gBAAgB,EAE9BA,EAAM,SAAW,IAIrB,SAAS,oBAAoB,UAAW,KAAKuR,CAAS,CAAC,EACvD,SAAS,oBAAoB,YAAakC,CAAsB,EAChE,SAAS,oBAAoB,YAAa,KAAKnB,CAAgB,CAAC,EAE5D,CAAC,KAAK,UACR,OAGF,MAAMvT,EAAS,SAAS,iBAAiBiB,EAAM,QAASA,EAAM,OAAO,EAE/D+Q,EAAgB,IAAIhN,EAAa,oBAAoB,CACzD,QAAS/D,EAAM,QACf,QAASA,EAAM,QACf,OAAAjB,EACA,UAAW,KAAK,iBAChB,cAAeiB,CACrB,CAAK,EAED,KAAK,QAAQ,KAAK,iBAAkB+Q,CAAa,EAEjD,SAAS,oBAAoB,cAAe,KAAKwC,CAA0B,EAAG,EAAI,EAClF,SAAS,oBAAoB,YAAa,KAAKjC,CAAW,CAAC,EAE3D,KAAK,iBAAmB,KACxB,KAAK,SAAW,GAChB,KAAK,WAAa,IACpB,CAOA,CAACiC,CAA0B,EAAEvT,EAAO,CAClCA,EAAM,eAAc,CACtB,CACF,CAEA6C,EAAQ,QAAU2Q,EAClB,SAASC,EAAuBzT,EAAO,CACrCA,EAAM,eAAc,CACtB,CAEO,EAEA,SAASwC,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAI2B,EAAe7B,EAAoB,EAAE,EAErC+Q,EAAgBnQ,EAAuBiB,CAAY,EAEvD,SAASjB,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAU6Q,EAAc,OAEzB,EAEA,SAASlR,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIwC,EAAW,OAAO,QAAU,SAAUtG,EAAQ,CAAE,QAASuG,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASpC,KAAOqC,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQrC,CAAG,IAAKnE,EAAOmE,CAAG,EAAIqC,EAAOrC,CAAG,GAAS,OAAOnE,GAEvP,MAAM4U,EAAe,CACnB,MAAO,EACP,KAAM,EACN,MAAO,GACT,EAOA,MAAM7D,CAAO,CAOX,YAAY3F,EAAa,GAAIC,EAAU,CAAA,EAAI,CAMzC,KAAK,WAAa,CAAC,GAAGD,CAAU,EAOhC,KAAK,QAAU9E,EAAS,CAAE,EAAE+E,CAAO,EAOnC,KAAK,SAAW,GAOhB,KAAK,iBAAmB,KAOxB,KAAK,WAAa,KAOlB,KAAK,MAAQwJ,EAAUxJ,EAAQ,KAAK,CACtC,CAMA,QAAS,CACP,OAAO,IACT,CAMA,QAAS,CACP,OAAO,IACT,CAOA,gBAAgBD,EAAY,CAC1B,KAAK,WAAa,CAAC,GAAG,KAAK,WAAY,GAAGA,CAAU,CACtD,CAOA,mBAAmBA,EAAY,CAC7B,KAAK,WAAa,KAAK,WAAW,OAAOE,GAAa,CAACF,EAAW,SAASE,CAAS,CAAC,CACvF,CAOA,QAAQ7D,EAASyJ,EAAa,CAC5B,MAAMjQ,EAAQ,SAAS,YAAY,OAAO,EAC1C,OAAAA,EAAM,OAASiQ,EACfjQ,EAAM,UAAUiQ,EAAY,KAAM,GAAM,EAAI,EAC5CzJ,EAAQ,cAAcxG,CAAK,EAC3B,KAAK,UAAYiQ,EAEVA,CACT,CACF,CAEApN,EAAQ,QAAUiN,EAMlB,SAAS8D,EAAUC,EAAc,CAC/B,MAAMnB,EAAQ,CAAA,EAEd,GAAImB,IAAiB,OACnB,OAAOxO,EAAS,GAAIsO,CAAY,EAGlC,GAAI,OAAOE,GAAiB,SAAU,CACpC,UAAW3Q,KAAOyQ,EACZA,EAAa,eAAezQ,CAAG,IACjCwP,EAAMxP,CAAG,EAAI2Q,GAGjB,OAAOnB,CACT,CAEA,UAAWxP,KAAOyQ,EACZA,EAAa,eAAezQ,CAAG,IAC7B2Q,EAAa3Q,CAAG,IAAM,OACxBwP,EAAMxP,CAAG,EAAIyQ,EAAazQ,CAAG,EAE7BwP,EAAMxP,CAAG,EAAI2Q,EAAa3Q,CAAG,GAKnC,OAAOwP,CACT,CAEO,EAEA,SAASlQ,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,QAAUiR,EAMlB,SAASA,EAAY9T,EAAQ,GAAI,CAC/B,KAAM,CAAE,QAAA+T,EAAS,eAAAC,CAAgB,EAAGhU,EACpC,OAAO+T,GAAWA,EAAQ,CAAC,GAAKC,GAAkBA,EAAe,CAAC,CACpE,CAEO,EAEA,SAASxR,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIiB,EAAenB,EAAoB,EAAE,EAErCsR,EAAgB1Q,EAAuBO,CAAY,EAEvD,SAASP,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUoR,EAAc,OAEzB,EAEA,SAASzR,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,QAAU4P,EASlB,SAASA,EAASyB,EAAIC,EAAIC,EAAIC,EAAI,CAChC,OAAO,KAAK,MAAMD,EAAKF,IAAO,GAAKG,EAAKF,IAAO,CAAC,CAClD,CAEO,EAEA,SAAS3R,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIgB,EAAYlB,EAAoB,EAAE,EAElC2R,EAAa/Q,EAAuBM,CAAS,EAEjD,SAASN,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUyR,EAAW,OAEtB,EAEA,SAAS9R,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,QAAU0R,EAClB,SAASA,EAA0BhI,EAAU,CAC3C,OAAO,sBAAsB,IAAM,CACjC,sBAAsBA,CAAQ,CAClC,CAAG,CACH,CAEO,EAEA,SAAS/J,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIe,EAA6BjB,EAAoB,EAAE,EAEnD6R,EAA8BjR,EAAuBK,CAA0B,EAEnF,SAASL,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAU2R,EAA4B,OAEvC,EAEA,SAAShS,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,QAAU4R,EAClB,MAAMC,EAAgB,QAAQ,UAAU,SAAW,QAAQ,UAAU,uBAAyB,QAAQ,UAAU,oBAAsB,QAAQ,UAAU,kBAWxJ,SAASD,EAAQjO,EAAStJ,EAAO,CAC/B,GAAI,CAACsJ,EACH,OAAO,KAGT,MAAMmO,EAAWzX,EACXqP,EAAWrP,EACX0X,EAAW1X,EACX2X,EAAgB3X,EAEhB4X,EAAqB,OAAO5X,GAAU,SACtC6X,EAAqB,OAAO7X,GAAU,WACtC8X,EAAqB9X,aAAiB,UAAYA,aAAiB,MACnE+X,EAAoB/X,aAAiB,YAE3C,SAASgY,EAAYC,EAAgB,CACnC,OAAKA,IAEML,EACFJ,EAAc,KAAKS,EAAgBR,CAAQ,EACzCK,EACF,CAAC,GAAGJ,CAAQ,EAAE,SAASO,CAAc,EACnCF,EACFJ,IAAkBM,EAChBJ,EACFxI,EAAS4I,CAAc,EAEvB,KAEX,CAEA,IAAInF,EAAUxJ,EAEd,EAAG,CAGD,GAFAwJ,EAAUA,EAAQ,yBAA2BA,EAAQ,sBAAwBA,EAEzEkF,EAAYlF,CAAO,EACrB,OAAOA,EAGTA,EAAUA,EAAQ,UACtB,OAAWA,GAAWA,IAAY,SAAS,MAAQA,IAAY,UAE7D,OAAO,IACT,CAEO,EAEA,SAASxN,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIc,EAAWhB,EAAoB,EAAE,EAEjCyS,EAAY7R,EAAuBI,CAAQ,EAE/C,SAASJ,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUuS,EAAU,OAErB,EAEA,SAAS5S,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,eAAiBA,EAAQ,OAASA,EAAQ,WAAaA,EAAQ,WAAaA,EAAQ,YAAc,OAE1G,IAAIwC,EAAW,OAAO,QAAU,SAAUtG,EAAQ,CAAE,QAASuG,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASpC,KAAOqC,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQrC,CAAG,IAAKnE,EAAOmE,CAAG,EAAIqC,EAAOrC,CAAG,GAAS,OAAOnE,GAEnPsE,EAAkBV,EAAoB,CAAC,EAEvCW,EAAmBC,EAAuBF,CAAe,EAEzDkF,EAAS5F,EAAoB,CAAC,EAElC,SAASY,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAMgE,EAAc3E,EAAQ,YAAc,OAAO,aAAa,EACxDkG,EAAalG,EAAQ,WAAa,OAAO,YAAY,EACrD4E,EAAa5E,EAAQ,WAAa,OAAO,YAAY,EACrDwS,EAASxS,EAAQ,OAAS,OAAO,QAAQ,EAUzC6C,EAAiB7C,EAAQ,eAAiB,CAC9C,MAAO,EACP,YAAa,GACb,mBAAoB,CAAC,CACvB,EAQA,MAAMyS,UAAmBhS,EAAiB,OAAQ,CAMhD,YAAYsC,EAAW,CACrB,MAAMA,CAAS,EAUf,KAAK,QAAUP,EAAS,CAAA,EAAIK,EAAgB,KAAK,WAAU,CAAE,EAS7D,KAAK,qBAAuB,KAO5B,KAAK,qBAAuB,KAO5B,KAAK,kBAAoB,KAOzB,KAAK,2BAA6B,KAElC,KAAK8B,CAAW,EAAI,KAAKA,CAAW,EAAE,KAAK,IAAI,EAC/C,KAAKuB,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAKtB,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAK4N,CAAM,EAAI,KAAKA,CAAM,EAAE,KAAK,IAAI,CACvC,CAKA,QAAS,CACP,KAAK,UAAU,GAAG,aAAc,KAAK7N,CAAW,CAAC,EAAE,GAAG,YAAa,KAAKuB,CAAU,CAAC,EAAE,GAAG,YAAa,KAAKtB,CAAU,CAAC,CACvH,CAKA,QAAS,CACP,KAAK,UAAU,IAAI,aAAc,KAAKD,CAAW,CAAC,EAAE,IAAI,YAAa,KAAKuB,CAAU,CAAC,EAAE,IAAI,YAAa,KAAKtB,CAAU,CAAC,CAC1H,CAMA,YAAa,CACX,OAAO,KAAK,UAAU,QAAQ,YAAc,CAAA,CAC9C,CAOA,qBAAqB1I,EAAQ,CAC3B,OAAI,KAAK,kCACIwJ,EAAO,SAASxJ,EAAQ,KAAK,QAAQ,kBAAkB,GAAK,SAAS,gBAEzEwW,EAAyBxW,CAAM,CAE1C,CAOA,8BAA+B,CAC7B,OAAe,KAAK,QAAQ,mBAAmB,SAAW,CAC5D,CAOA,CAACyI,CAAW,EAAE3B,EAAW,CACvB,KAAK,2BAA6B,sBAAsB,IAAM,CAC5D,KAAK,kBAAoB,KAAK,qBAAqBA,EAAU,MAAM,CACzE,CAAK,CACH,CAOA,CAACkD,CAAU,EAAElD,EAAW,CAKtB,GAJA,KAAK,2BAA6B,sBAAsB,IAAM,CAC5D,KAAK,kBAAoB,KAAK,qBAAqBA,EAAU,YAAY,MAAM,CACrF,CAAK,EAEG,CAAC,KAAK,kBACR,OAGF,MAAMoK,EAAcpK,EAAU,YACxB2P,EAAe,CAAE,EAAG,EAAG,EAAG,CAAC,EAE7B,iBAAkB,SACpBA,EAAa,EAAI,OAAO,aAAe,SAAS,gBAAgB,WAAa,SAAS,KAAK,WAAa,EACxGA,EAAa,EAAI,OAAO,aAAe,SAAS,gBAAgB,YAAc,SAAS,KAAK,YAAc,GAG5G,KAAK,qBAAuB,CAC1B,QAASvF,EAAY,QAAUuF,EAAa,EAC5C,QAASvF,EAAY,QAAUuF,EAAa,CAClD,EAEI,KAAK,qBAAuB,sBAAsB,KAAKH,CAAM,CAAC,CAChE,CAMA,CAAC5N,CAAU,GAAI,CACb,qBAAqB,KAAK,oBAAoB,EAC9C,qBAAqB,KAAK,0BAA0B,EAEpD,KAAK,kBAAoB,KACzB,KAAK,qBAAuB,KAC5B,KAAK,2BAA6B,KAClC,KAAK,qBAAuB,IAC9B,CAMA,CAAC4N,CAAM,GAAI,CACT,GAAI,CAAC,KAAK,mBAAqB,CAAC,KAAK,qBACnC,OAGF,qBAAqB,KAAK,oBAAoB,EAE9C,KAAM,CAAE,MAAAI,EAAO,YAAAC,GAAgB,KAAK,QAE9BxX,EAAO,KAAK,kBAAkB,sBAAqB,EACnDyX,EAAezX,EAAK,OAAS,OAAO,YAEpC0X,EADY1X,EAAK,IAAM,GACDyX,EAEtBE,EAA2BC,IAC3BC,EAAoB,KAAK,kBACzBtX,EAAU,KAAK,qBAAqB,QACpCuX,EAAU,KAAK,qBAAqB,QAE1C,GAAID,IAAsB,SAAS,MAAQA,IAAsB,SAAS,iBAAmB,CAACH,EAAQ,CACpG,KAAM,CAAE,aAAAK,EAAc,YAAAC,CAAa,EAAGH,EAElC7X,EAAK,IAAM+X,EAAeD,EAAUN,EACtCK,EAAkB,WAAaN,EACtBO,EAAU9X,EAAK,IAAMwX,IAC9BK,EAAkB,WAAaN,GAG7BvX,EAAK,KAAOgY,EAAczX,EAAUiX,EACtCK,EAAkB,YAAcN,EACvBhX,EAAUP,EAAK,KAAOwX,IAC/BK,EAAkB,YAAcN,EAExC,KAAW,CACL,KAAM,CAAE,YAAAU,EAAa,WAAAC,CAAY,EAAG,OAEhCJ,EAAUN,EACZG,EAAyB,WAAaJ,EAC7BU,EAAcH,EAAUN,IACjCG,EAAyB,WAAaJ,GAGpChX,EAAUiX,EACZG,EAAyB,YAAcJ,EAC9BW,EAAa3X,EAAUiX,IAChCG,EAAyB,YAAcJ,EAE3C,CAEA,KAAK,qBAAuB,sBAAsB,KAAKJ,CAAM,CAAC,CAChE,CACF,CAEAxS,EAAQ,QAAUyS,EAOlB,SAASe,EAAY7P,EAAS,CAC5B,MAAM8P,EAAgB,gBAChBC,EAAiB,iBAAiB/P,EAAS,IAAI,EAE/CgQ,EAAWD,EAAe,iBAAiB,UAAU,EAAIA,EAAe,iBAAiB,YAAY,EAAIA,EAAe,iBAAiB,YAAY,EAE3J,OAAOD,EAAc,KAAKE,CAAQ,CACpC,CAQA,SAASC,EAAuBjQ,EAAS,CAEvC,OADiB,iBAAiBA,CAAO,EAAE,iBAAiB,UAAU,IAClD,QACtB,CAQA,SAAS+O,EAAyB/O,EAAS,CACzC,GAAI,CAACA,EACH,OAAOsP,EAA2B,EAGpC,MAAMvU,EAAW,iBAAiBiF,CAAO,EAAE,iBAAiB,UAAU,EAChEkQ,EAAuBnV,IAAa,WAEpCwU,KAAwBxN,EAAO,SAAS/B,EAASmQ,GACjDD,GAAwBD,EAAuBE,CAAM,EAChD,GAEFN,EAAYM,CAAM,CAC1B,EAED,OAAIpV,IAAa,SAAW,CAACwU,EACpBD,EAA2B,EAE3BC,CAEX,CAOA,SAASD,GAA8B,CACrC,OAAO,SAAS,kBAAoB,SAAS,eAC/C,CAEO,EAEA,SAAStT,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,eAAiB,OAEzB,IAAIuC,EAAczC,EAAoB,EAAE,EAEpCiU,EAAerT,EAAuB6B,CAAW,EAErD,SAAS7B,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAU+T,EAAa,QAC/B/T,EAAQ,eAAiBuC,EAAY,cAE9B,EAEA,SAAS5C,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,mBAAqBA,EAAQ,gBAAkBA,EAAQ,oBAAsBA,EAAQ,mBAAqBA,EAAQ,kBAAoBA,EAAQ,YAAc,OAEpK,IAAIY,EAAiBd,EAAoB,CAAC,EAEtCe,EAAkBH,EAAuBE,CAAc,EAE3D,SAASF,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAQ9F,MAAMqT,UAAoBnT,EAAgB,OAAQ,CAOhD,IAAI,QAAS,CACX,OAAO,KAAK,KAAK,MACnB,CAQA,IAAI,gBAAiB,CACnB,OAAO,KAAK,KAAK,cACnB,CAQA,IAAI,iBAAkB,CACpB,OAAO,KAAK,KAAK,eACnB,CAQA,IAAI,aAAc,CAChB,OAAO,KAAK,KAAK,WACnB,CAQA,IAAI,WAAY,CACd,OAAO,KAAK,KAAK,SACnB,CAQA,IAAI,eAAgB,CAClB,OAAI,KAAK,YACA,KAAK,YAAY,cAGnB,IACT,CACF,CAEAb,EAAQ,YAAcgU,EAOtB,MAAMC,UAA0BD,CAAY,CAAC,CAE7ChU,EAAQ,kBAAoBiU,EAO5BA,EAAkB,KAAO,gBACzB,MAAMC,UAA2BF,CAAY,CAQ3C,IAAI,QAAS,CACX,OAAO,KAAK,KAAK,MACnB,CACF,CAEAhU,EAAQ,mBAAqBkU,EAO7BA,EAAmB,KAAO,iBAC1B,MAAMC,UAA4BH,CAAY,CAQ5C,IAAI,QAAS,CACX,OAAO,KAAK,KAAK,MACnB,CACF,CAEAhU,EAAQ,oBAAsBmU,EAO9BA,EAAoB,KAAO,kBAC3B,MAAMC,UAAwBJ,CAAY,CAQxC,IAAI,QAAS,CACX,OAAO,KAAK,KAAK,MACnB,CAOA,IAAI,eAAgB,CAClB,OAAO,KAAK,KAAK,aACnB,CAOA,IAAI,eAAgB,CAClB,OAAO,KAAK,KAAK,aACnB,CACF,CAEAhU,EAAQ,gBAAkBoU,EAO1BA,EAAgB,KAAO,cACvBA,EAAgB,WAAa,GAC7B,MAAMC,UAA2BL,CAAY,CAQ3C,IAAI,QAAS,CACX,OAAO,KAAK,KAAK,MACnB,CACF,CACAhU,EAAQ,mBAAqBqU,EAC7BA,EAAmB,KAAO,iBAC1BA,EAAmB,WAAa,EAEzB,EAEA,SAAS1U,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIsU,EAAexU,EAAoB,EAAE,EAEzC,OAAO,KAAKwU,CAAY,EAAE,QAAQ,SAAUjU,EAAK,CAC3CA,IAAQ,WAAaA,IAAQ,cACjC,OAAO,eAAeL,EAASK,EAAK,CAClC,WAAY,GACZ,IAAK,UAAY,CACf,OAAOiU,EAAajU,CAAG,CACzB,CACJ,CAAG,CACH,CAAC,CAEM,EAEA,SAASV,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,eAAiBA,EAAQ,uBAAyBA,EAAQ,SAAWA,EAAQ,aAAeA,EAAQ,gBAAkBA,EAAQ,WAAaA,EAAQ,WAAaA,EAAQ,YAAc,OAE9L,IAAIwC,EAAW,OAAO,QAAU,SAAUtG,EAAQ,CAAE,QAASuG,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASpC,KAAOqC,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQrC,CAAG,IAAKnE,EAAOmE,CAAG,EAAIqC,EAAOrC,CAAG,GAAS,OAAOnE,GAEnPsE,EAAkBV,EAAoB,CAAC,EAEvCW,EAAmBC,EAAuBF,CAAe,EAEzD8T,EAAexU,EAAoB,EAAE,EAEzC,SAASY,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,SAAS4T,EAAyB5T,EAAK6T,EAAM,CAAE,IAAItY,EAAS,CAAA,EAAI,QAASuG,KAAK9B,EAAW6T,EAAK,QAAQ/R,CAAC,GAAK,GAAkB,OAAO,UAAU,eAAe,KAAK9B,EAAK8B,CAAC,IAAavG,EAAOuG,CAAC,EAAI9B,EAAI8B,CAAC,GAAK,OAAOvG,CAAQ,CAE3N,MAAMyI,EAAc3E,EAAQ,YAAc,OAAO,aAAa,EACxDkG,EAAalG,EAAQ,WAAa,OAAO,YAAY,EACrD4E,EAAa5E,EAAQ,WAAa,OAAO,YAAY,EACrD+E,EAAkB/E,EAAQ,gBAAkB,OAAO,iBAAiB,EACpEyU,EAAezU,EAAQ,aAAe,OAAO,cAAc,EAC3D0U,EAAW1U,EAAQ,SAAW,OAAO,UAAU,EAC/C2U,EAAyB3U,EAAQ,uBAAyB,OAAO,wBAAwB,EAYzF6C,EAAiB7C,EAAQ,eAAiB,CAC9C,oBAAqB,GACrB,MAAO,GACP,MAAO,GACP,cAAe,KACf,cAAe,KACf,WAAY,KACZ,WAAY,IACd,EAQA,MAAM4U,UAAenU,EAAiB,OAAQ,CAM5C,YAAYsC,EAAW,CACrB,MAAMA,CAAS,EAaf,KAAK,QAAUP,EAAS,CAAA,EAAIK,EAAgB,KAAK,WAAU,CAAE,EAQ7D,KAAK,aAAe,CAAE,EAAG,EAAG,EAAG,GAQ/B,KAAK,oBAAsB,CACzB,EAAG,OAAO,QACV,EAAG,OAAO,OAChB,EAEI,KAAK8B,CAAW,EAAI,KAAKA,CAAW,EAAE,KAAK,IAAI,EAC/C,KAAKuB,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAKtB,CAAU,EAAI,KAAKA,CAAU,EAAE,KAAK,IAAI,EAC7C,KAAKG,CAAe,EAAI,KAAKA,CAAe,EAAE,KAAK,IAAI,EACvD,KAAK0P,CAAY,EAAI,KAAKA,CAAY,EAAE,KAAK,IAAI,EACjD,KAAKC,CAAQ,EAAI,KAAKA,CAAQ,EAAE,KAAK,IAAI,CAC3C,CAKA,QAAS,CACP,KAAK,UAAU,GAAG,aAAc,KAAK/P,CAAW,CAAC,EAAE,GAAG,YAAa,KAAKuB,CAAU,CAAC,EAAE,GAAG,YAAa,KAAKtB,CAAU,CAAC,EAAE,GAAG,iBAAkB,KAAKG,CAAe,CAAC,EAAE,GAAG,cAAe,KAAK0P,CAAY,CAAC,CACzM,CAKA,QAAS,CACP,KAAK,UAAU,IAAI,aAAc,KAAK9P,CAAW,CAAC,EAAE,IAAI,YAAa,KAAKuB,CAAU,CAAC,EAAE,IAAI,YAAa,KAAKtB,CAAU,CAAC,EAAE,IAAI,iBAAkB,KAAKG,CAAe,CAAC,EAAE,IAAI,cAAe,KAAK0P,CAAY,CAAC,CAC9M,CAMA,YAAa,CACX,OAAO,KAAK,UAAU,QAAQ,QAAU,CAAA,CAC1C,CAEA,CAAC9P,CAAW,EAAE3B,EAAW,CACvB,GAAIA,EAAU,WACZ,OAGE,iBAAkB,QACpB,SAAS,iBAAiB,SAAU,KAAK0R,CAAQ,EAAG,EAAI,EAG1D,KAAK,oBAAsB,CACzB,EAAG,OAAO,QACV,EAAG,OAAO,OAChB,EAEI,KAAM,CAAE,OAAAhS,EAAQ,eAAAmS,EAAgB,gBAAA5R,EAAiB,YAAAmK,CAAW,EAAKpK,EAGjE,KAAK,sBAAwB,CAC3B,EAAGoK,EAAY,QACf,EAAGA,EAAY,OACrB,EAEI,MAAM0H,EAAoB,IAAIR,EAAa,kBAAkB,CAC3D,OAAA5R,EACA,eAAAmS,EACA,gBAAA5R,EACA,YAAAmK,EACA,UAAApK,CACN,CAAK,EAID,GAFA,KAAK,UAAU,QAAQ8R,CAAiB,EAEpCC,EAAkB3H,CAAW,GAAK0H,EAAkB,SAAQ,EAC9D,OAGF,MAAME,EAAsB,KAAKL,CAAsB,EAAEjS,CAAM,GAAKO,EACpE,KAAK,OAASP,EAAO,UAAU,EAAI,EAEnC,MAAMuS,EAAqB,IAAIX,EAAa,mBAAmB,CAC7D,OAAA5R,EACA,eAAAmS,EACA,gBAAA5R,EACA,YAAAmK,EACA,UAAApK,EACA,OAAQ,KAAK,MACnB,CAAK,EAEKkS,EAAsB,IAAIZ,EAAa,oBAAoB,CAC/D,OAAA5R,EACA,eAAAmS,EACA,gBAAA5R,EACA,YAAAmK,EACA,UAAApK,EACA,OAAQ,KAAK,MACnB,CAAK,EAED,KAAK,UAAU,QAAQiS,CAAkB,EACzCD,EAAoB,YAAY,KAAK,MAAM,EAC3C,KAAK,UAAU,QAAQE,CAAmB,CAC5C,CAEA,CAAChP,CAAU,EAAElD,EAAW,CACtB,GAAI,CAAC,KAAK,QAAUA,EAAU,SAAQ,EACpC,OAGF,KAAM,CAAE,OAAAN,EAAQ,eAAAmS,EAAgB,gBAAA5R,EAAiB,YAAAmK,CAAW,EAAKpK,EAEjE,IAAImS,EAAgB,GAChBC,EAAgB,GAEpB,GAAI,KAAK,QAAQ,YAAc,KAAK,QAAQ,WAAY,CACtD,KAAM,CAAE,EAAGC,EAAO,EAAGC,CAAO,EAAG,KAAK,sBAcpC,GAZI,KAAK,IAAID,EAAQjI,EAAY,OAAO,EAAI,KAAK,QAAQ,WACvD+H,EAAgB,GAEhB,KAAK,sBAAsB,EAAI/H,EAAY,QAGzC,KAAK,IAAIkI,EAAQlI,EAAY,OAAO,EAAI,KAAK,QAAQ,WACvDgI,EAAgB,GAEhB,KAAK,sBAAsB,EAAIhI,EAAY,QAGzC,CAAC+H,GAAiB,CAACC,EACrB,MAEJ,CAEA,MAAMG,EAAkB,IAAIjB,EAAa,gBAAgB,CACvD,OAAA5R,EACA,eAAAmS,EACA,gBAAA5R,EACA,YAAAmK,EACA,UAAApK,EACA,OAAQ,KAAK,OACb,cAAAmS,EACA,cAAAC,CACN,CAAK,EAED,KAAK,UAAU,QAAQG,CAAe,CACxC,CAEA,CAAC3Q,CAAU,EAAE5B,EAAW,CAQtB,GAPI,iBAAkB,QACpB,SAAS,oBAAoB,SAAU,KAAK0R,CAAQ,EAAG,EAAI,EAG7D,KAAK,oBAAsB,CAAE,EAAG,EAAG,EAAG,GACtC,KAAK,aAAe,CAAE,EAAG,EAAG,EAAG,GAE3B,CAAC,KAAK,OACR,OAGF,KAAM,CAAE,OAAAhS,EAAQ,gBAAAO,EAAiB,YAAAmK,CAAW,EAAKpK,EAE3CwS,EAAqB,IAAIlB,EAAa,mBAAmB,CAC7D,OAAA5R,EACA,OAAQ,KAAK,OACb,gBAAAO,EACA,YAAAmK,EACA,UAAApK,CACN,CAAK,EAED,KAAK,UAAU,QAAQwS,CAAkB,EAEpCA,EAAmB,YACtB,KAAK,OAAO,WAAW,YAAY,KAAK,MAAM,CAElD,CAEA,CAACd,CAAQ,GAAI,CACX,KAAK,aAAe,CAClB,EAAG,OAAO,QAAU,KAAK,oBAAoB,EAC7C,EAAG,OAAO,QAAU,KAAK,oBAAoB,CACnD,CACE,CAQA,CAAC3P,CAAe,EAAE,CAAE,OAAAK,EAAQ,OAAA1C,EAAQ,YAAA0K,CAAW,EAAI,CACjD,MAAMqI,EAAgB,KAAK,UAAU,iBAAiB,QAAQ,EAExDC,EAAYC,GAAS,CACzB,GAAI,CAAE,aAAAC,EAAc,SAAAC,EAAU,SAAAC,CAAU,EAAGH,EACvCI,EAAOxB,EAAyBoB,EAAM,CAAC,eAAgB,WAAY,UAAU,CAAC,EAElF,YAAK,aAAeC,EACpB,KAAK,SAAWC,EAChB,KAAK,SAAWC,EAChB,KAAK,WAAaD,EAClB,KAAK,WAAaC,EACXtT,EAAS,CAAE,aAAAoT,EAAc,SAAAC,EAAU,SAAAC,CAAQ,EAAIC,CAAI,CAChE,EAEI3Q,EAAO,MAAM,QAAU,OAEvB,MAAM4Q,EAAe,CACnB,OAAA5Q,EACA,OAAA1C,EACA,YAAA0K,EACA,cAAAqI,EACA,aAAc,KAAK,aACnB,QAAS,KAAK,QACd,cAAe,GACf,cAAe,EACrB,EAEI,OAAO,QAAQ,QAAQO,CAAY,EAElC,KAAKC,CAAuB,EAAE,KAAKC,CAAqB,EAAE,KAAKC,CAAW,EAAE,KAAKC,CAAgB,EAAE,KAAKC,EAAe,CAAE,QAAS,GAAM,CAAC,EAAE,KAAKC,CAAc,EAAE,KAAKZ,CAAQ,CAChL,CAQA,CAACjB,CAAY,EAAE8B,EAAa,CAC1B,GAAIA,EAAY,WACd,OAAO,KAGT,MAAMb,EAAYc,GAAU,CAC1B,GAAI,CAAE,WAAAC,EAAY,WAAAC,CAAU,EAAKF,EAC7BT,EAAOxB,EAAyBiC,EAAO,CAAC,aAAc,YAAY,CAAC,EAEvE,YAAK,WAAaC,EAClB,KAAK,WAAaC,EAEXlU,EAAS,CAAE,WAAAiU,EAAY,WAAAC,CAAY,EAAEX,CAAI,CACtD,EAEUC,EAAe,CACnB,OAAQO,EAAY,OACpB,YAAaA,EAAY,YACzB,aAAc,KAAK,aACnB,QAAS,KAAK,QACd,SAAU,KAAK,SACf,SAAU,KAAK,SACf,aAAc,KAAK,aACnB,cAAeA,EAAY,cAC3B,cAAeA,EAAY,cAC3B,WAAY,KAAK,WACjB,WAAY,KAAK,UACvB,EAEI,OAAO,QAAQ,QAAQP,CAAY,EAAE,KAAKK,EAAe,CAAE,IAAK,EAAI,CAAE,CAAC,EAAE,KAAKX,CAAQ,CACxF,CASA,CAACf,CAAsB,EAAEjS,EAAQ,CAC/B,MAAMiU,EAAW,KAAK,QAAQ,SAE9B,OAAI,OAAOA,GAAa,SACf,SAAS,cAAcA,CAAQ,EAC7BA,aAAoB,YACtBA,EACE,OAAOA,GAAa,WACtBA,EAASjU,CAAM,EAEfA,EAAO,UAElB,CACF,CAEA1C,EAAQ,QAAU4U,EASlB,SAASqB,EAAwBW,EAAO,CACtC,GAAI,CAAE,OAAAlU,CAAM,EAAKkU,EACbb,EAAOxB,EAAyBqC,EAAO,CAAC,QAAQ,CAAC,EAErD,OAAOC,EAAYC,GAAW,CAC5B,MAAMC,EAAarU,EAAO,wBAC1BoU,EAAQtU,EAAS,CAAE,OAAAE,EAAQ,WAAAqU,CAAY,EAAEhB,CAAI,CAAC,CAClD,CAAG,CACH,CAWA,SAASG,EAAsBc,EAAO,CACpC,GAAI,CAAE,YAAA5J,EAAa,WAAA2J,EAAY,QAAAxP,CAAS,EAAGyP,EACvCjB,EAAOxB,EAAyByC,EAAO,CAAC,cAAe,aAAc,SAAS,CAAC,EAEnF,OAAOH,EAAYC,GAAW,CAC5B,MAAMrY,EAAM8I,EAAQ,gBAAkB,KAAO6F,EAAY,QAAU2J,EAAW,IAAMxP,EAAQ,cACtF/L,EAAO+L,EAAQ,gBAAkB,KAAO6F,EAAY,QAAU2J,EAAW,KAAOxP,EAAQ,cAI9FuP,EAAQtU,EAAS,CAAE,YAAA4K,EAAa,WAAA2J,EAAY,aAFvB,CAAE,IAAAtY,EAAK,KAAAjD,GAE8B,QAAA+L,CAAO,EAAIwO,CAAI,CAAC,CAC9E,CAAG,CACH,CAWA,SAASI,EAAYc,EAAO,CAC1B,GAAI,CAAE,OAAA7R,EAAQ,OAAA1C,EAAQ,QAAA6E,CAAS,EAAG0P,EAC9BlB,EAAOxB,EAAyB0C,EAAO,CAAC,SAAU,SAAU,SAAS,CAAC,EAE1E,OAAOJ,EAAYC,GAAW,CAC5B,IAAI1D,EACAC,EAEJ,GAAI9L,EAAQ,oBAAqB,CAC/B,MAAM2P,EAAuB,iBAAiBxU,CAAM,EACpD0Q,EAAe8D,EAAqB,iBAAiB,QAAQ,EAC7D7D,EAAc6D,EAAqB,iBAAiB,OAAO,CAC7D,CAEA9R,EAAO,MAAM,QAAU,KACvBA,EAAO,MAAM,SAAW,QACxBA,EAAO,MAAM,cAAgB,OAC7BA,EAAO,MAAM,IAAM,EACnBA,EAAO,MAAM,KAAO,EACpBA,EAAO,MAAM,OAAS,EAElBmC,EAAQ,sBACVnC,EAAO,MAAM,OAASgO,EACtBhO,EAAO,MAAM,MAAQiO,GAGvByD,EAAQtU,EAAS,CAAE,OAAA4C,EAAQ,OAAA1C,EAAQ,QAAA6E,CAAS,EAAEwO,CAAI,CAAC,CACvD,CAAG,CACH,CAUA,SAASK,EAAiBe,EAAO,CAC/B,GAAI,CAAE,OAAA/R,EAAQ,cAAAqQ,CAAa,EAAK0B,EAC5BpB,EAAOxB,EAAyB4C,EAAO,CAAC,SAAU,eAAe,CAAC,EAEtE,OAAON,EAAYC,GAAW,CAC5B1R,EAAO,UAAU,IAAI,GAAGqQ,CAAa,EACrCqB,EAAQtU,EAAS,CAAE,OAAA4C,EAAQ,cAAAqQ,CAAe,EAAEM,CAAI,CAAC,CACrD,CAAG,CACH,CASA,SAASO,EAAec,EAAO,CAC7B,GAAI,CAAE,OAAAhS,CAAM,EAAKgS,EACbrB,EAAOxB,EAAyB6C,EAAO,CAAC,QAAQ,CAAC,EAErD,OAAOP,EAAYC,GAAW,CAC5B1R,EAAO,gBAAgB,IAAI,EAC3B,OAAOA,EAAO,GACd0R,EAAQtU,EAAS,CAAE,OAAA4C,CAAM,EAAI2Q,CAAI,CAAC,CACtC,CAAG,CACH,CAcA,SAASM,EAAe,CAAE,UAAAgB,EAAY,GAAO,QAAAC,EAAU,EAAO,EAAG,GAAI,CACnE,OAAQC,GAAU,CAChB,GAAI,CACF,OAAAnS,EACA,YAAAgI,EACA,aAAAwI,EACA,SAAAE,EACA,SAAAD,EACA,aAAAlD,EACA,QAAApL,EACA,cAAA4N,EACA,cAAAC,EACA,WAAAqB,EACA,WAAAC,EACN,EAAQa,EACAxB,GAAOxB,EAAyBgD,EAAO,CAAC,SAAU,cAAe,eAAgB,WAAY,WAAY,eAAgB,UAAW,gBAAiB,gBAAiB,aAAc,YAAY,CAAC,EAErM,OAAOV,EAAYC,IAAW,CAC5B,MAAMU,EAAShV,EAAS,CACtB,OAAA4C,EACA,YAAAgI,EACA,aAAAwI,EACA,QAAArO,CACD,EAAEwO,EAAI,EAEP,GAAIH,EAAc,CAChB,MAAM5R,EAAImR,EAAgB,KAAK,OAAO/H,EAAY,QAAUwI,EAAa,KAAOjD,EAAa,IAAMpL,EAAQ,YAAc,EAAE,GAAKA,EAAQ,YAAc,GAAK,KAAK,MAAMkP,CAAU,EAC1KxS,EAAImR,EAAgB,KAAK,OAAOhI,EAAY,QAAUwI,EAAa,IAAMjD,EAAa,IAAMpL,EAAQ,YAAc,EAAE,GAAKA,EAAQ,YAAc,GAAK,KAAK,MAAMmP,EAAU,EAE3KnP,EAAQ,OAASA,EAAQ,OAAS+P,EACpClS,EAAO,MAAM,UAAY,eAAepB,CAAC,OAAOC,CAAC,SACxCsD,EAAQ,OAAS,CAACA,EAAQ,MACnCnC,EAAO,MAAM,UAAY,eAAepB,CAAC,OAAO8R,CAAQ,SAC/CvO,EAAQ,OAAS,CAACA,EAAQ,QACnCnC,EAAO,MAAM,UAAY,eAAeyQ,CAAQ,OAAO5R,CAAC,UAGtDqT,IACFE,EAAO,SAAWxT,EAClBwT,EAAO,SAAWvT,GAGpBuT,EAAO,WAAaxT,EACpBwT,EAAO,WAAavT,CACtB,CAEA6S,GAAQU,CAAM,CACpB,EAAO,CAAE,MAAOH,CAAS,CAAE,CAC3B,CACA,CAUA,SAASR,EAAYnN,EAAU,CAAE,IAAA+N,EAAM,EAAK,EAAK,CAAA,EAAI,CACnD,OAAO,IAAI,QAAQ,CAACX,EAASY,IAAW,CAClCD,EACF,sBAAsB,IAAM,CAC1B/N,EAASoN,EAASY,CAAM,CAChC,CAAO,EAEDhO,EAASoN,EAASY,CAAM,CAE9B,CAAG,CACH,CAMA,SAAS3C,EAAkB3H,EAAa,CACtC,MAAQ,QAAQ,KAAKA,EAAY,cAAc,IAAI,CAErD,CAEO,EAEA,SAASzN,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,eAAiB,OAEzB,IAAIsC,EAAUxC,EAAoB,EAAE,EAEhC6X,EAAWjX,EAAuB4B,CAAO,EAE7C,SAAS5B,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAU2X,EAAS,QAC3B3X,EAAQ,eAAiBsC,EAAQ,cAE1B,EAEA,SAAS3C,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIwC,EAAW,OAAO,QAAU,SAAUtG,EAAQ,CAAE,QAASuG,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASpC,KAAOqC,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQrC,CAAG,IAAKnE,EAAOmE,CAAG,EAAIqC,EAAOrC,CAAG,GAAS,OAAOnE,GAEnPsE,EAAkBV,EAAoB,CAAC,EAEvCW,EAAmBC,EAAuBF,CAAe,EAE7D,SAASE,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAMiX,EAAe,OAAO,cAAc,EACpCC,EAAY,OAAO,WAAW,EAO9BhV,EAAiB,CAAA,EAQvB,MAAMiV,UAAkBrX,EAAiB,OAAQ,CAM/C,YAAYsC,EAAW,CACrB,MAAMA,CAAS,EAOf,KAAK,QAAUP,EAAS,CAAA,EAAIK,EAAgB,KAAK,WAAU,CAAE,EAE7D,KAAK+U,CAAY,EAAI,KAAKA,CAAY,EAAE,KAAK,IAAI,EACjD,KAAKC,CAAS,EAAI,KAAKA,CAAS,EAAE,KAAK,IAAI,CAC7C,CAKA,QAAS,CACP,KAAK,UAAU,GAAG,uBAAwB,KAAKD,CAAY,CAAC,EAAE,GAAG,oBAAqB,KAAKC,CAAS,CAAC,CACvG,CAKA,QAAS,CACP,KAAK,UAAU,IAAI,uBAAwB,KAAKD,CAAY,CAAC,EAAE,IAAI,oBAAqB,KAAKC,CAAS,CAAC,EAGvG,KAAKA,CAAS,GAChB,CAMA,YAAa,CACX,OAAO,KAAK,UAAU,QAAQ,WAAa,CAAA,CAC7C,CAMA,aAAc,CACZ,MAAO,CAAC,GAAG,KAAK,UAAU,WAAY,GAAG,KAAK,UAAU,qBAAoB,CAAE,CAChF,CAMA,CAACD,CAAY,GAAI,CAEf,sBAAsB,IAAM,CAC1B,KAAK,YAAW,EAAG,QAAQjU,GAAWoU,EAAgBpU,CAAO,CAAC,CACpE,CAAK,CACH,CAMA,CAACkU,CAAS,GAAI,CAEZ,sBAAsB,IAAM,CAC1B,KAAK,YAAW,EAAG,QAAQlU,GAAWqU,EAAarU,CAAO,CAAC,CACjE,CAAK,CACH,CACF,CAEA3D,EAAQ,QAAU8X,EAMlB,MAAMG,EAA8B,CAAA,EAQpC,SAASF,EAAgBpU,EAAS,CACG,CAACA,EAAQ,aAAa,UAAU,GAAKA,EAAQ,WAAa,KAG3FsU,EAA4B,KAAKtU,CAAO,EACxCA,EAAQ,SAAW,EAEvB,CAOA,SAASqU,EAAarU,EAAS,CAC7B,MAAMuU,EAA0BD,EAA4B,QAAQtU,CAAO,EAEvEuU,IAA4B,KAC9BvU,EAAQ,SAAW,GACnBsU,EAA4B,OAAOC,EAAyB,CAAC,EAEjE,CAEO,EAEA,SAASvY,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIqC,EAAavC,EAAoB,EAAE,EAEnCqY,EAAczX,EAAuB2B,CAAU,EAEnD,SAAS3B,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUmY,EAAY,OAEvB,EAEA,SAASxY,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAOD,MAAMoY,CAAe,CAMnB,YAAYrV,EAAW,CAMrB,KAAK,UAAYA,CACnB,CAMA,QAAS,CACP,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAMA,QAAS,CACP,MAAM,IAAI,MAAM,iBAAiB,CACnC,CACF,CACA/C,EAAQ,QAAUoY,CAEX,EAEA,SAASzY,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,eAAiB,OAEzB,IAAIwC,EAAW,OAAO,QAAU,SAAUtG,EAAQ,CAAE,QAASuG,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASpC,KAAOqC,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQrC,CAAG,IAAKnE,EAAOmE,CAAG,EAAIqC,EAAOrC,CAAG,GAAS,OAAOnE,GAEnPsE,EAAkBV,EAAoB,CAAC,EAEvCW,EAAmBC,EAAuBF,CAAe,EAE7D,SAASE,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9F,MAAMiX,EAAe,OAAO,cAAc,EACpCC,EAAY,OAAO,WAAW,EAC9BQ,EAAgB,OAAO,eAAe,EACtCC,EAAkB,OAAO,iBAAiB,EAE1CC,EAAgB,gBAChBC,EAAc,cACdC,EAAY,YACZC,EAAO,OAQP7V,EAAiB7C,EAAQ,eAAiB,CAC9C,OAAQ,GACV,EAQA,MAAM2Y,UAAqBlY,EAAiB,OAAQ,CAMlD,YAAYsC,EAAW,CACrB,MAAMA,CAAS,EAOf,KAAK,QAAUP,EAAS,CAAA,EAAIK,EAAgB,KAAK,WAAU,CAAE,EAO7D,KAAK,sBAAwB,KAAK,UAAU,QAE5C,KAAK+U,CAAY,EAAI,KAAKA,CAAY,EAAE,KAAK,IAAI,EACjD,KAAKC,CAAS,EAAI,KAAKA,CAAS,EAAE,KAAK,IAAI,CAC7C,CAKA,QAAS,CACP,KAAK,UAAU,GAAG,uBAAwB,KAAKD,CAAY,CAAC,CAC9D,CAKA,QAAS,CACP,KAAK,UAAU,IAAI,oBAAqB,KAAKC,CAAS,CAAC,CACzD,CAKA,YAAa,CACX,OAAO,KAAK,UAAU,QAAQ,eAAiB,CAAA,CACjD,CAOA,CAACQ,CAAa,EAAElb,EAAO,CACrB,MAAMyb,EAAU,KAAK,QAAQzb,EAAM,IAAI,EAEnCyb,GAAW,OAAOA,GAAY,UAChC,KAAKN,CAAe,EAAEM,CAAO,EAG3BA,GAAW,OAAOA,GAAY,YAChC,KAAKN,CAAe,EAAEM,EAAQzb,CAAK,CAAC,CAExC,CAOA,CAACmb,CAAe,EAAEM,EAAS,CACzBC,EAASD,EAAS,CAAE,OAAQ,KAAK,QAAQ,MAAM,CAAE,CACnD,CAMA,CAAChB,CAAY,GAAI,CAEf,KAAK,UAAU,QAAUza,GAAS,CAChC,GAAI,CACF,KAAKkb,CAAa,EAAElb,CAAK,CACjC,QAAgB,CAER,KAAK,sBAAsB,KAAK,KAAK,UAAWA,CAAK,CACvD,CACN,CACE,CAMA,CAAC0a,CAAS,GAAI,CACZ,KAAK,UAAU,QAAU,KAAK,qBAChC,CACF,CAEA7X,EAAQ,QAAU2Y,EAIlB,MAAMG,EAAaC,IAQnB,SAASF,EAASD,EAAS,CAAE,OAAAI,GAAU,CACrC,MAAMrV,EAAU,SAAS,cAAc,KAAK,EAE5C,OAAAA,EAAQ,YAAciV,EACtBE,EAAW,YAAYnV,CAAO,EAEvB,WAAW,IAAM,CACtBmV,EAAW,YAAYnV,CAAO,CAC/B,EAAEqV,CAAM,CACX,CAMA,SAASD,GAAe,CACtB,MAAMpV,EAAU,SAAS,cAAc,KAAK,EAE5C,OAAAA,EAAQ,aAAa,KAAM,uBAAuB,EAClDA,EAAQ,aAAa4U,EAAe,WAAW,EAC/C5U,EAAQ,aAAa6U,EAAa,MAAM,EACxC7U,EAAQ,aAAa8U,EAAW,WAAW,EAC3C9U,EAAQ,aAAa+U,EAAM,KAAK,EAEhC/U,EAAQ,MAAM,SAAW,QACzBA,EAAQ,MAAM,MAAQ,MACtBA,EAAQ,MAAM,OAAS,MACvBA,EAAQ,MAAM,IAAM,OACpBA,EAAQ,MAAM,SAAW,SAElBA,CACT,CAGA,SAAS,iBAAiB,mBAAoB,IAAM,CAClD,SAAS,KAAK,YAAYmV,CAAU,CACtC,CAAC,CAEM,EAEA,SAASnZ,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,eAAiB,OAEzB,IAAIoC,EAAgBtC,EAAoB,EAAE,EAEtCmZ,EAAiBvY,EAAuB0B,CAAa,EAEzD,SAAS1B,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,QAAUiZ,EAAe,QACjCjZ,EAAQ,eAAiBoC,EAAc,cAEhC,EAEA,SAASzC,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,sBAAwBA,EAAQ,0BAA4BA,EAAQ,eAAiB,OAE7F,IAAIY,EAAiBd,EAAoB,CAAC,EAEtCe,EAAkBH,EAAuBE,CAAc,EAE3D,SAASF,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAQ9F,MAAMuY,UAAuBrY,EAAgB,OAAQ,CAQnD,IAAI,WAAY,CACd,OAAO,KAAK,KAAK,SACnB,CACF,CAEAb,EAAQ,eAAiBkZ,EAOzBA,EAAe,KAAO,YACtB,MAAMC,UAAkCD,CAAe,CAAC,CAExDlZ,EAAQ,0BAA4BmZ,EAOpCA,EAA0B,KAAO,uBACjC,MAAMC,UAA8BF,CAAe,CAAC,CACpDlZ,EAAQ,sBAAwBoZ,EAChCA,EAAsB,KAAO,mBAEtB,EAEA,SAASzZ,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EAED,IAAIwC,EAAW,OAAO,QAAU,SAAUtG,EAAQ,CAAE,QAASuG,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAS,UAAUD,CAAC,EAAG,QAASpC,KAAOqC,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQrC,CAAG,IAAKnE,EAAOmE,CAAG,EAAIqC,EAAOrC,CAAG,GAAS,OAAOnE,GAEvP,MAAMmd,EAAW,OAAO,UAAU,EAUlC,MAAMC,CAAc,CAelB,YAAYC,EAAM,CAChB,KAAKF,CAAQ,EAAI,GACjB,KAAK,KAAOE,CACd,CAgBA,IAAI,MAAO,CACT,OAAO,KAAK,YAAY,IAC1B,CAOA,IAAI,YAAa,CACf,OAAO,KAAK,YAAY,UAC1B,CAMA,QAAS,CACP,KAAKF,CAAQ,EAAI,EACnB,CAOA,UAAW,CACT,MAAO,EAAQ,KAAKA,CAAQ,CAC9B,CAQA,MAAME,EAAM,CACV,OAAO,IAAI,KAAK,YAAY/W,EAAS,CAAE,EAAE,KAAK,KAAM+W,CAAI,CAAC,CAC3D,CACF,CACAvZ,EAAQ,QAAUsZ,EAClBA,EAAc,KAAO,QACrBA,EAAc,WAAa,EAEpB,EAEA,SAAS3Z,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,iBAAmBA,EAAQ,cAAgBA,EAAQ,kBAAoBA,EAAQ,sBAAwBA,EAAQ,uBAAyBA,EAAQ,aAAeA,EAAQ,cAAgBA,EAAQ,cAAgBA,EAAQ,eAAiBA,EAAQ,UAAY,OAEpQ,IAAIY,EAAiBd,EAAoB,CAAC,EAEtCe,EAAkBH,EAAuBE,CAAc,EAE3D,SAASF,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAQ9F,MAAM6Y,UAAkB3Y,EAAgB,OAAQ,CAQ9C,IAAI,QAAS,CACX,OAAO,KAAK,KAAK,MACnB,CAQA,IAAI,gBAAiB,CACnB,OAAO,KAAK,KAAK,cACnB,CAQA,IAAI,QAAS,CACX,OAAO,KAAK,KAAK,MACnB,CAQA,IAAI,iBAAkB,CACpB,OAAO,KAAK,KAAK,eACnB,CAQA,IAAI,aAAc,CAChB,OAAO,KAAK,KAAK,WACnB,CAQA,IAAI,eAAgB,CAClB,OAAI,KAAK,YACA,KAAK,YAAY,cAGnB,IACT,CACF,CAEAb,EAAQ,UAAYwZ,EAOpBA,EAAU,KAAO,OACjB,MAAMC,UAAuBD,CAAU,CAAC,CAExCxZ,EAAQ,eAAiByZ,EAOzBA,EAAe,KAAO,aACtBA,EAAe,WAAa,GAC5B,MAAMC,UAAsBF,CAAU,CAAC,CAEvCxZ,EAAQ,cAAgB0Z,EAOxBA,EAAc,KAAO,YACrB,MAAMC,UAAsBH,CAAU,CAQpC,IAAI,eAAgB,CAClB,OAAO,KAAK,KAAK,aACnB,CAQA,IAAI,MAAO,CACT,OAAO,KAAK,KAAK,IACnB,CACF,CAEAxZ,EAAQ,cAAgB2Z,EAOxBA,EAAc,KAAO,YACrBA,EAAc,WAAa,GAC3B,MAAMC,UAAqBJ,CAAU,CAQnC,IAAI,eAAgB,CAClB,OAAO,KAAK,KAAK,aACnB,CAQA,IAAI,MAAO,CACT,OAAO,KAAK,KAAK,IACnB,CACF,CAEAxZ,EAAQ,aAAe4Z,EAOvBA,EAAa,KAAO,WACpB,MAAMC,UAA+BL,CAAU,CAQ7C,IAAI,eAAgB,CAClB,OAAO,KAAK,KAAK,aACnB,CACF,CAEAxZ,EAAQ,uBAAyB6Z,EAOjCA,EAAuB,KAAO,sBAC9B,MAAMC,UAA8BN,CAAU,CAQ5C,IAAI,eAAgB,CAClB,OAAO,KAAK,KAAK,aACnB,CACF,CAEAxZ,EAAQ,sBAAwB8Z,EAOhCA,EAAsB,KAAO,qBAC7B,MAAMC,UAA0BP,CAAU,CAQxC,IAAI,UAAW,CACb,OAAO,KAAK,KAAK,QACnB,CACF,CAEAxZ,EAAQ,kBAAoB+Z,EAO5BA,EAAkB,KAAO,gBACzB,MAAMC,UAAsBR,CAAU,CAAC,CAEvCxZ,EAAQ,cAAgBga,EAOxBA,EAAc,KAAO,YACrB,MAAMC,UAAyBT,CAAU,CAAC,CAC1CxZ,EAAQ,iBAAmBia,EAC3BA,EAAiB,KAAO,cAEjB,EAEA,SAASta,EAAQK,EAASF,EAAqB,CAKtD,OAAO,eAAeE,EAAS,aAAc,CAC3C,MAAO,EACT,CAAC,EACDA,EAAQ,QAAUA,EAAQ,QAAUA,EAAQ,SAAWA,EAAQ,UAAYA,EAAQ,UAAYA,EAAQ,UAAYA,EAAQ,WAAaA,EAAQ,UAAY,OAE5J,IAAIyB,EAAa3B,EAAoB,CAAC,EAEtC,OAAO,eAAeE,EAAS,YAAa,CAC1C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuBe,CAAU,EAAE,OAC5C,CACF,CAAC,EAED,IAAIiK,EAAa5L,EAAoB,EAAE,EAEvC,OAAO,eAAeE,EAAS,YAAa,CAC1C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuBgL,CAAU,EAAE,OAC5C,CACF,CAAC,EAED,IAAIvB,EAAarK,EAAoB,EAAE,EAEvC,OAAO,eAAeE,EAAS,YAAa,CAC1C,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuByJ,CAAU,EAAE,OAC5C,CACF,CAAC,EAED,IAAIpB,EAAYjJ,EAAoB,EAAE,EAEtC,OAAO,eAAeE,EAAS,WAAY,CACzC,WAAY,GACZ,IAAK,UAAY,CACf,OAAOU,EAAuBqI,CAAS,EAAE,OAC3C,CACF,CAAC,EAED,IAAInI,EAAiBd,EAAoB,CAAC,EAEtCe,EAAkBH,EAAuBE,CAAc,EAEvDJ,EAAkBV,EAAoB,CAAC,EAEvCW,EAAmBC,EAAuBF,CAAe,EAEzDgB,EAAW1B,EAAoB,CAAC,EAEhCoa,EAAUC,EAAwB3Y,CAAQ,EAE1CD,EAAWzB,EAAoB,EAAE,EAEjCsa,EAAUD,EAAwB5Y,CAAQ,EAE9C,SAAS4Y,EAAwBxZ,EAAK,CAAE,GAAIA,GAAOA,EAAI,WAAc,OAAOA,EAAc,IAAI0Z,EAAS,CAAE,EAAE,GAAI1Z,GAAO,KAAQ,QAASN,KAAOM,EAAW,OAAO,UAAU,eAAe,KAAKA,EAAKN,CAAG,IAAGga,EAAOha,CAAG,EAAIM,EAAIN,CAAG,GAAO,OAAAga,EAAO,QAAU1Z,EAAY0Z,CAAU,CAE5Q,SAAS3Z,EAAuBC,EAAK,CAAE,OAAOA,GAAOA,EAAI,WAAaA,EAAM,CAAE,QAASA,CAAK,CAAE,CAE9FX,EAAQ,UAAYa,EAAgB,QACpCb,EAAQ,WAAaS,EAAiB,QACtCT,EAAQ,QAAUka,EAClBla,EAAQ,QAAUoa,CAEX,CACP,CAAU,CACV,CAAC,oQCx8OK,CAAEjhB,KAAAA,CAAK,EAAIC,EAAYC,GAAiB,EACxC,CAAEC,aAAAA,EAAcC,UAAAA,CAAU,EAAIH,EAAYI,IAA4B,EACtE,CAAEC,0BAAAA,CAA0B,EAAIL,EAAYM,IAAiC,EAE7E4gB,EAAmBxgB,IACnBD,EAAsBC,EAAgB,IAAI,EAC1CC,EAAWD,EAAa,EAAK,EAC7BygB,EAAqBzgB,EAAY,CAAA,CAAE,EACrC,IAAAiB,EAEK,SAAAT,EAAyBC,EAAsBC,EAAgC,CAClF,OAAAA,EAAoB,GACpBD,EAAoBjB,EAAae,MAC9B,CAACf,EAAae,KACvB,CAEA,SAASI,EAAwBC,EAAqB,CACpD,MAAO,CAAC,CAACvB,EAAKkB,MAAMM,IAAMC,OAAOF,EAAKG,SAAS,IAAMD,OAAOzB,EAAKkB,MAAMM,EAAE,CAC3E,CACA,SAASG,EAAwBJ,EAAqB,CACpD,OAAOpB,EAAae,OAAUI,EAAwBC,CAAI,GAAKnB,EAAUc,KAC3E,CAES,SAAAoD,EAAQH,EAAcI,EAAoB,CACjD,MAAMC,EAAkBD,EAAKE,IAAKC,GAAMA,EAAEC,GAAG,EACvCC,EAAiBL,EAAKE,IAAKC,GAAMA,EAAElD,EAAE,EACrCqD,EAAYL,EAAgBM,QAAQX,CAAO,EAC3CY,EAAgBF,IAAc,EAAI,KAAOD,EAAeC,EAAY,CAAC,EACrEG,EAAcH,IAAcN,EAAKlB,OAAS,EAAI,KAAOuB,EAAeC,EAAY,CAAC,EACjFI,EAAYC,EAAyB,KAAM,CAC/CC,OAAQH,IAAgB,KAAO,KAAO,QAAQA,CAAW,GACzDI,OAAQL,IAAkB,KAAO,KAAO,QAAQA,CAAa,EAC9D,CAAA,EAAEE,UACHxE,GAAA,EAAuBD,SAAS,CAC9B2D,QAAAA,EACAc,UAAAA,CACF,CAAC,CACH,CAEI,IAAAoc,EACJ,SAASC,GAAqB,CACxBH,EAAiBjgB,QAAU,SAC/BmgB,EAAW,IAAInT,GAAA,SAASiT,EAAiBjgB,MAAMqgB,IAAoB,CACjE3X,UAAW,gBACX4X,OAAQ,8BACR/K,SAAU,EACVxK,OAAQ,CACNwV,oBAAqB,GACrBC,MAAO,EACT,CACF,CAAC,EAEQL,EAAAM,GAAG,aAAe7f,GAAiB,CACpC,MAAAqC,EAAUrC,EAAE4Z,eAAerX,QAAQF,QACnC5C,EAAOP,EAAMmF,mBAAmByb,KAAMld,GAAMA,EAAEC,MAAQR,CAAO,EAC/D,GAAA,CAAC5C,GAAQ,CAACI,EAAwBJ,CAAI,GAAOP,EAAMC,mBAAoB,CACzEa,EAAE+f,OAAO,EACT,MACF,CAEA,MAAMC,EAAehgB,EAAE4Z,eACjBqG,EAAaD,EAAaC,WAChCA,GAAAA,MAAAA,EAAYpc,YAAYmc,GACxBphB,EAAoBQ,MAAQY,EAAE4Z,eAAerX,QAAQF,SAAW,KAChEid,EAAmBlgB,MAAQ,CAAC,GAAG+E,EAA2B/E,KAAK,EAC/DN,EAASM,MAAQ,EACnB,CAAC,EACQmgB,EAAAM,GAAG,iBAAmB7f,GAAM,CACnC,MAAMC,EAAWD,EAAEmK,OACnB,GAAIlK,EAAU,CACZ,MAAMG,EAAOJ,EAAEyH,OAAOtH,cAAc,aAAa,EAAGE,wBAC9CC,EAAUF,EAAK8f,MAAQ9f,EAAKI,MAAQ,EAGpCC,EAAaT,EAAEmS,YAAYxR,QAAUL,EAClCL,EAAAiB,MAAMgf,MAAQzf,EAAa,KACjBX,EAAA,IAAIgB,iBAAiB,IAAM,CACnCb,EAAAiB,MAAMgf,MAAQzf,EAAa,IACtC,CAAC,EACgBX,EAAA0B,QAAQvB,EAAU,CAAEwB,WAAY,GAAMC,gBAAiB,CAAC,OAAO,CAAE,CAAC,CACrF,CACF,CAAC,EACQ6d,EAAAM,GAAG,kBAAoB7f,GAAM,CACpC,MAAM8Q,EAAO,CAAC,GAAGwO,EAAmBlgB,KAAK,EACpC0R,EAAAqP,OAAOngB,EAAEmI,SAAU,EAAG2I,EAAKqP,OAAOngB,EAAEkI,SAAU,CAAC,EAAE,CAAC,CAAC,EACxDoX,EAAmBlgB,MAAQ0R,CAC7B,CAAC,EACQyO,EAAAM,GAAG,YAAa,IAAM,CAC7B1b,EAA2B/E,MAAQkgB,EAAmBlgB,MACtDU,GAAAA,MAAAA,EAAkBsgB,aAClBthB,EAASM,MAAQ,EACnB,CAAC,EACH,CAEA,SAASmE,EAAoB3B,EAA0B,SACrDA,EAAGV,MAAMgf,MAAQte,EAAGW,QAAQ2d,OAAS,GACrCte,EAAGV,MAAMsC,IAAM5B,EAAGW,QAAQiB,KAAO,GACjC5B,EAAGV,MAAMuC,SAAW,WAEd,MAAAC,GAAU9B,EAAAA,EAAG+B,gBAAH/B,YAAAA,EAAkB+B,eAC/B/B,EAAAA,EAAA+B,gBAAA/B,MAAAA,EAAegC,YAAYhC,GAC9B8B,GAAAA,MAAAA,EAASG,YAAYjC,EACvB,CAEA,MAAMuC,EAA6BlF,EAAiB,CAClDmF,KAAM,CACG,MAAA,CAAC,GAAGlF,EAAMmF,kBAAkB,CACrC,EACAC,IAAIC,EAAiB,CACf3F,EAAoBQ,OAAS,OACvBoD,EAAA5D,EAAoBQ,MAAOmF,CAAO,EAC1C3F,EAAoBQ,MAAQ,KAEhC,CACF,CAAC,EAED6E,OAAAA,EAAMnF,EAAU,IAAM,CACfoF,EAAA,WAAYpF,EAASM,KAAK,CACjC,CAAC,EAED6E,EAAMzF,EAA2B,IAAM,CACrC+gB,GAAAA,MAAAA,EAAUc,UACL7hB,EAA0BY,OAChBogB,GAEjB,CAAC,EAED1b,EAAU,IAAM,CACD0b,GACf,CAAC,ixDClIoBc,KAEf,KAAA,CAAEC,QAAAA,EAASC,aAAAA,EAAcC,oBAAAA,EAAqBC,WAAAA,EAAYC,iBAAAA,EAAkBC,gBAAAA,EAAiBC,eAAAA,CAAe,EAChH1iB,EAAYC,EAAA,CAAiB,EACzB,CAAEE,UAAAA,CAAU,EAAIH,EAAYI,IAA4B,EACxD,CAAEuiB,oBAAAA,CAAoB,EAAI3iB,EAAY4iB,IAAkB,EACxD,CAAEC,gBAAAA,CAAgB,EAAI7iB,EAAYM,IAAiC,EACnEwiB,EAAoBtiB,KACpB,CAAEQ,mBAAAA,EAAoBkF,mBAAAA,EAAoB6c,cAAAA,CAAc,EAAI/iB,EAAY8iB,CAAiB,EACzF,CAAEE,aAAAA,CAAiB,EAAAF,EAEnBG,EAAuBniB,EAAkB,IACtC,CAACoiB,EAAWjiB,OAAS,CAACshB,EAAWthB,OAASd,EAAUc,KAC5D,EAEKkiB,EAAWziB,IAGXwiB,EAAaxiB,EAAI,EAAK,EAEtB0iB,EAAyBziB,GAA4B,CACzDuiB,EAAWjiB,MAAQN,EACnBkiB,EAAgB5hB,MAAQN,GAKpB0iB,EAAc3iB,IACd4iB,EAAY5iB,IACZ6iB,EAAY7iB,EAAI,EAAI,EACpB8iB,EAAU9iB,EAAI,EAAK,EACzB,IAAI+iB,EAAyD,KACzDC,EAAuD,KAE3D,MAAMC,EAAsBA,IAAY,CAClCN,EAAYpiB,OAAS,OACvBwiB,EAA4B,IAAIG,qBAAqB,CAAC,CAACC,CAAK,IAAM,CAC5DA,EAAMC,oBAAsB,EAC9BP,EAAUtiB,MAAQ,GAElBsiB,EAAUtiB,MAAQ,EAEtB,CAAC,EACyBwiB,EAAApgB,QAAQggB,EAAYpiB,KAAK,GAGjDqiB,EAAUriB,OAAS,OACrByiB,EAA0B,IAAIE,qBAAqB,CAAC,CAACC,CAAK,IAAM,CAC1DA,EAAMC,oBAAsB,EAC9BN,EAAQviB,MAAQ,GAEhBuiB,EAAQviB,MAAQ,EAEpB,CAAC,EACuByiB,EAAArgB,QAAQigB,EAAUriB,KAAK,IAI7C8iB,EAAaC,GAA0B,CAEvC,IAAA7e,EACA8e,EAEE,MAAAC,EAAiBhe,EAAmBjF,MAAMkjB,UAAW1f,GAAMA,EAAElD,KAAOyiB,EAAUziB,EAAE,EAClF2iB,IAAmB,GAEZ/e,EAAAe,EAAmBjF,MAAM,CAAC,EAAEM,GACxB0iB,EAAA,OAGb9e,EAASe,EAAmBjF,MAAMijB,EAAiB,CAAC,EAAE3iB,GACzC0iB,EAAA/d,EAAmBjF,MAAMijB,CAAc,EAAE3iB,IAExD,KAAM,CAAEyD,UAAAA,CAAU,EAAIC,EAAyB,KAAM,CACnDC,OAAQ,QAAQC,CAAM,GACtBA,OAAQ,QAAQ8e,CAAU,EAC5B,CAAC,EACYjB,EAAA,CACX1f,WAAY,CACV0B,UAAWA,GAAa,MAC1B,CACF,CAAC,GAGGof,EAAYA,IAAY,CAC5B,KAAM,CAAEpf,UAAAA,CAAU,EAAIC,EAAyB,KAAM,CACnDC,OAAQ,KACRC,OAAQ,IACV,CAAC,EACY6d,EAAA,CACX1f,WAAY,CACV0B,UAAWA,GAAa,MAC1B,CACF,CAAC,GAMGqf,EAAiB,GAEjBC,EAAuB5f,GAAmB,CAC9C6f,GAAS,IAAM,CACb,GAAIpB,EAASliB,OAAS,KAAM,OAC5B,MAAMujB,EAAiBziB,SAASC,cAAc,gCAAgC0C,CAAG,IAAI,EACrF,GAAI8f,GAAkB,KAAM,OACtB,MAAAC,EAAwBD,EAAehM,QAAQ,eAAe,EACpE,GAAIiM,GAAyB,KAAM,OAEnC,GAD+BD,EAAetiB,sBAAA,EAAwB6f,MACzCsC,EAAiBtiB,SAAS2iB,KAAKzK,YAAa,CACvE,MAAM0K,EACJF,EAAsBG,WAAaJ,EAAevK,YAAclY,SAAS2iB,KAAKzK,YAAcoK,EAC9FQ,EAAE1B,EAASliB,KAAK,EAAEuJ,QAAQ,CAAEma,WAAAA,GAAc,KAAK,CACjD,CACF,CAAC,GAGG7e,EAAA9E,EAAqB0D,GAAQ,CAC7BA,GAAO,MACT4f,EAAoB5f,CAAG,CAE3B,CAAC,EAEKoB,EAAAid,EAAgBre,GAAQ,CACxBA,GAAO,MACT4f,EAAoB5f,CAAG,CAE3B,CAAC,EAEKoB,EAAA6c,EAAsBmC,GAAW,CAC/B,MAAAC,EAAsBhjB,SAASijB,eAAe,eAAe,EAC/D,GAAA7B,EAASliB,OAAS,MAAQ8jB,GAAuB,KAAM,OAC3D,GAAID,GAAU,KAAM,CAClBC,EAAoBhiB,MAAMV,MAAQ,OAClC,MACF,CACA,MAAM4iB,EAAcljB,SAASijB,eAAe,QAAQF,CAAM,EAAE,EAC5D,GAAIG,GAAe,KAAM,OACnB,MAAAC,EAAiBD,EAAYzM,QAAQ,eAAe,EAC1D,GAAI0M,GAAkB,KAAM,OAEtB,MAAAP,EAAaO,EAAeN,WAAaP,EAC/CU,EAAoBhiB,MAAMV,MAAQ,QAClCwiB,EAAE1B,EAASliB,KAAK,EAAEuJ,QAAQ,CAAEma,WAAAA,GAAc,KAAK,CACjD,CAAC,EAKD,MAAMQ,EAAgBA,IAAY,CAC5BhC,EAASliB,OAAS,MACpB4jB,EAAA1B,EAASliB,KAAK,EAAEuJ,QAAQ,CAAEma,WAAY,GAAK,KAAK,GAG9CS,EAAcA,IAAY,CAC9B,GAAIjC,EAASliB,OAAS,KAAM,OACxB,IAAA0jB,EAAaxB,EAASliB,MAAMokB,YAC5BC,OAAU,QAAqBX,GAAA,IACnCE,EAAE1B,EAASliB,KAAK,EAAEuJ,QAAQ,CAAEma,WAAAA,GAAc,KAAK,GAKjD,IAAIY,EAA4D,KAE1D,MAAAC,EAAuBnD,GAA+B,CACpD,MAAAoD,EAAkB/C,EAAezhB,MAAQ,GAAK,EAC9CykB,EAAgC,GAChCC,EAAwB,GAExBC,EAAM;AAAA;AAAA;AAAA,8CAGgCvD,CAAY,8CAA8CqD,CAA6B,QAAQD,CAAe;AAAA;AAAA;AAAA,8CAG9GpD,CAAY,8CAA8CqD,CAA6B,QAAQC,CAAqB,QAAQF,CAAe;AAAA;AAAA;AAAA;AAAA;AAAA,4CAK7IpD,CAAY,iFAAiFqD,CAA6B,QAAQD,CAAe;AAAA;AAAA;AAAA,4CAGjJpD,CAAY,iFAAiFqD,CAA6B,QAAQC,CAAqB,QAAQF,CAAe;AAAA;AAAA;AAAA,QAIpNF,GAA6B,KAC/BA,EAA0BM,OAAOD,CAAG,EAEpCL,EAA4BO,GAAwBF,CAAG,GAIrD9f,OAAAA,EAAAuc,EAAe0D,GAAoB,CACvCP,EAAoBO,CAAe,CACrC,CAAC,EAIDpgB,EAAU,IAAM,CACd4e,GAAS,IAAM,CACbiB,EAAoBnD,EAAaphB,KAAK,EAClB0iB,GACtB,CAAC,CACH,CAAC,EAEDqC,GAAgB,IAAM,CACpBT,GAAAA,MAAAA,EAA2B1hB,SACC0hB,EAAA,KAE5B9B,GAAAA,MAAAA,EAA2BxB,aACCwB,EAAA,KAE5BC,GAAAA,MAAAA,EAAyBzB,aACCyB,EAAA,IAC5B,CAAC","x_google_ignoreList":[1]}