{"version":3,"file":"carousel.min.js","sources":["https:\/\/edu.grsu.by\/theme\/boost\/amd\/src\/bootstrap\/carousel.js"],"sourcesContent":["\/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): carousel.js\n * Licensed under MIT (https:\/\/github.com\/twbs\/bootstrap\/blob\/master\/LICENSE)\n * --------------------------------------------------------------------------\n *\/\n\nimport $ from 'jquery'\nimport Util from '.\/util'\n\n\/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n *\/\n\nconst NAME = 'carousel'\nconst VERSION = '4.5.0'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 \/\/ KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 \/\/ KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 \/\/ Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true,\n touch : true\n}\n\nconst DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean',\n touch : 'boolean'\n}\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst PointerType = {\n TOUCH : 'touch',\n PEN : 'pen'\n}\n\n\/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n *\/\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n \/\/ Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n \/\/ Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n \/\/ Don't call next when the page isn't visible\n \/\/ or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? DIRECTION_NEXT\n : DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n \/\/ Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax \/ this.touchDeltaX\n\n this.touchDeltaX = 0\n\n \/\/ swipe left\n if (direction > 0) {\n this.prev()\n }\n\n \/\/ swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, (event) => this.pause(event))\n .on(EVENT_MOUSELEAVE, (event) => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = (event) => {\n \/\/ ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n \/\/ If it's a touch-enabled device, mouseenter\/leave are fired as\n \/\/ part of the mouse compatibility events on first tap - the carousel\n \/\/ would stop cycling until user tapped out of it;\n \/\/ here, we listen for touchend, explicitly pause the carousel\n \/\/ (as if it's the second time we tap on it, mouseenter compat event\n \/\/ is NOT fired) and after a timeout (to allow for mouse compatibility\n \/\/ events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, (e) => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, (event) => start(event))\n $(this._element).on(EVENT_POINTERUP, (event) => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, (event) => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, (event) => move(event))\n $(this._element).on(EVENT_TOUCHEND, (event) => end(event))\n }\n }\n\n _keydown(event) {\n if (\/input|textarea\/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n \/\/ Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n \/\/ Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n\/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n *\/\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n\/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n *\/\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n"],"names":["NAME","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","EVENT_DRAG_START","EVENT_LOAD_DATA_API","EVENT_CLICK_DATA_API","PointerType","TOUCH","PEN","Carousel","element","config","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","this","_getConfig","_element","_indicatorsElement","querySelector","_touchSupported","document","documentElement","navigator","maxTouchPoints","_pointerEvent","Boolean","window","PointerEvent","MSPointerEvent","_addEventListeners","each","data","_typeof","action","to","TypeError","ride","cycle","event","selector","Util","getSelectorFromElement","target","hasClass","slideIndex","getAttribute","_jQueryInterface","call","preventDefault","_slide","hidden","is","css","next","triggerTransitionEnd","clearInterval","setInterval","visibilityState","nextWhenVisible","bind","index","activeIndex","_getItemIndex","length","one","_this","direction","off","removeData","typeCheckConfig","absDeltax","Math","abs","prev","on","_this2","_keydown","_addTouchEventListeners","start","_this3","originalEvent","pointerType","toUpperCase","clientX","touches","end","_handleSwipe","clearTimeout","setTimeout","querySelectorAll","e","classList","add","move","test","tagName","which","parentNode","slice","indexOf","activeElement","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","Event","from","trigger","indicators","removeClass","nextIndicator","children","addClass","directionalClassName","orderClassName","activeElementIndex","nextElement","_getItemByDirection","nextElementIndex","isCycling","_triggerSlideEvent","isDefaultPrevented","_setActiveIndicatorElement","slidEvent","reflow","nextElementInterval","parseInt","defaultInterval","transitionDuration","getTransitionDurationFromElement","TRANSITION_END","_this4","emulateTransitionEnd","_dataApiClickHandler","carousels","i","len","$carousel","Constructor","noConflict"],"mappings":"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\/E,iBAAiB,SAAC2C,cAAU+C,IAAI\/C,eAE\/CtB,SAAS2E,UAAUC,IAxPG,uCA0PzB9E,KAAKE,UAAU0D,GAAGnF,kBAAkB,SAAC+C,cAAUwC,MAAMxC,8BACrDxB,KAAKE,UAAU0D,GAAGlF,iBAAiB,SAAC8C,cA1C3B,SAACA,OAERA,MAAM0C,cAAcI,SAAW9C,MAAM0C,cAAcI,QAAQrB,OAAS,EACtEgB,OAAKnE,YAAc,EAEnBmE,OAAKnE,YAAc0B,MAAM0C,cAAcI,QAAQ,GAAGD,QAAUJ,OAAKpE,YAqCnBkF,CAAKvD,8BACnDxB,KAAKE,UAAU0D,GAAGjF,gBAAgB,SAAC6C,cAAU+C,IAAI\/C,oCAIvD,SAASA,WACH,kBAAkBwD,KAAKxD,MAAMI,OAAOqD,gBAIhCzD,MAAM0D,YAtTa,GAwTvB1D,MAAMU,sBACDyB,kBAxTkB,GA2TvBnC,MAAMU,sBACDK,qCAMX,SAAclD,qBACPE,OAASF,SAAWA,QAAQ8F,WAC7B,GAAGC,MAAMnD,KAAK5C,QAAQ8F,WAAWR,iBAhRZ,mBAiRrB,GACG3E,KAAKT,OAAO8F,QAAQhG,4CAG7B,SAAoB+D,UAAWkC,mBACvBC,gBApTiB,SAoTCnC,UAClBoC,gBApTiB,SAoTCpC,UAClBL,YAAkB\/C,KAAKgD,cAAcsC,eACrCG,cAAkBzF,KAAKT,OAAO0D,OAAS,MACrBuC,iBAAmC,IAAhBzC,aACnBwC,iBAAmBxC,cAAgB0C,iBAErCzF,KAAKD,QAAQ9B,YAC1BqH,kBAIHI,WAAa3C,aA\/TI,SA8TLK,WAAgC,EAAI,IACZpD,KAAKT,OAAO0D,cAEhC,IAAfyC,UACH1F,KAAKT,OAAOS,KAAKT,OAAO0D,OAAS,GAAKjD,KAAKT,OAAOmG,6CAGxD,SAAmBC,cAAeC,wBAC1BC,YAAc7F,KAAKgD,cAAc2C,eACjCG,UAAY9F,KAAKgD,cAAchD,KAAKE,SAASE,cA3S1B,0BA4SnB2F,WAAarI,gBAAEsI,MAAM5H,YAAa,CACtCuH,cAAAA,cACAvC,UAAWwC,mBACXK,KAAMH,UACN1E,GAAIyE,wCAGJ7F,KAAKE,UAAUgG,QAAQH,YAElBA,qDAGT,SAA2B1G,YACrBW,KAAKG,mBAAoB,KACrBgG,WAAa,GAAGf,MAAMnD,KAAKjC,KAAKG,mBAAmBwE,iBA3TlC,gCA4TrBwB,YAAYC,YApUa,cAsUrBC,cAAgBrG,KAAKG,mBAAmBmG,SAC5CtG,KAAKgD,cAAc3D,UAGjBgH,mCACAA,eAAeE,SA3UQ,iCAgV\/B,SAAOnD,UAAW\/D,aAQZmH,qBACAC,eACAb,+BATEN,cAAgBtF,KAAKE,SAASE,cAxUX,yBAyUnBsG,mBAAqB1G,KAAKgD,cAAcsC,eACxCqB,YAAgBtH,SAAWiG,eAC\/BtF,KAAK4G,oBAAoBxD,UAAWkC,eAChCuB,iBAAmB7G,KAAKgD,cAAc2D,aACtCG,UAAYnG,QAAQX,KAAKR,cA1WR,SAgXnB4D,WACFoD,qBA1V2B,qBA2V3BC,eA1V2B,qBA2V3Bb,mBAjXqB,SAmXrBY,qBA\/V2B,sBAgW3BC,eA7V2B,qBA8V3Bb,mBApXqB,SAuXnBe,cAAe,mBAAEA,aAAa9E,SAtWL,eAuWtBlC,YAAa,WAIDK,KAAK+G,mBAAmBJ,YAAaf,oBACzCoB,sBAIV1B,eAAkBqB,kBAKlBhH,YAAa,EAEdmH,gBACG9I,aAGFiJ,2BAA2BN,iBAE1BO,UAAYxJ,gBAAEsI,MAAM3H,WAAY,CACpCsH,cAAegB,YACfvD,UAAWwC,mBACXK,KAAMS,mBACNtF,GAAIyF,uBAGF,mBAAE7G,KAAKE,UAAU2B,SAnYQ,SAmYoB,qBAC7C8E,aAAaJ,SAASE,8BAEnBU,OAAOR,iCAEVrB,eAAeiB,SAASC,0CACxBG,aAAaJ,SAASC,0BAElBY,oBAAsBC,SAASV,YAAY5E,aAAa,iBAAkB,IAC5EqF,0BACGrH,QAAQuH,gBAAkBtH,KAAKD,QAAQuH,iBAAmBtH,KAAKD,QAAQlC,cACvEkC,QAAQlC,SAAWuJ,0BAEnBrH,QAAQlC,SAAWmC,KAAKD,QAAQuH,iBAAmBtH,KAAKD,QAAQlC,aAGjE0J,mBAAqB7F,cAAK8F,iCAAiClC,mCAE\/DA,eACCpC,IAAIxB,cAAK+F,gBAAgB,+BACtBd,aACCP,sBAAeI,iCAAwBC,iBACvCF,SA1ZoB,8BA4ZrBjB,eAAec,sBA5ZM,qBA4Z8BK,2BAAkBD,uBAEvEkB,OAAK\/H,YAAa,EAElB+E,YAAW,kBAAM,mBAAEgD,OAAKxH,UAAUgG,QAAQgB,aAAY,MAEvDS,qBAAqBJ,4CAEtBjC,eAAec,YApaU,8BAqazBO,aAAaJ,SAraY,eAuatB5G,YAAa,sBAChBK,KAAKE,UAAUgG,QAAQgB,WAGvBJ,gBACGvF,uNAiFTjB,UAAUsD,GAAG5E,qBA\/ec,gCA+e6BI,SAASwI,0CAEjEhH,QAAQgD,GAAG7E,qBAAqB,mBAC1B8I,UAAY,GAAGzC,MAAMnD,KAAK3B,SAASqE,iBAjfd,2BAkflBmD,EAAI,EAAGC,IAAMF,UAAU5E,OAAQ6E,EAAIC,IAAKD,IAAK,KAC9CE,WAAY,mBAAEH,UAAUC,IAC9B1I,SAAS4C,iBAAiBC,KAAK+F,UAAWA,UAAU\/G,4BAUtDtD,GAAGL,MAAQ8B,SAAS4C,iCACpBrE,GAAGL,MAAM2K,YAAc7I,yBACvBzB,GAAGL,MAAM4K,WAAa,kCACpBvK,GAAGL,MAAQG,mBACN2B,SAAS4C,+BAGH5C"}