{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/util.js","webpack:///../app_common/cartridges/app_common/cartridge/client/default/js/components/security.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/productDetail.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/product/details.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/detail.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/co/client/coClientModalUtils.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/product/wishlist.js","webpack:///../plugin_wishlists/cartridges/plugin_wishlists/cartridge/client/default/js/product/wishlist.js","webpack:///../sswd_base/cartridges/sswd_base/cartridge/client/default/js/util.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/co/coBuyNow.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/base.js","webpack:///../sswd_base/cartridges/sswd_base/cartridge/client/default/js/components/XPostForm.js","webpack:///../app_common/cartridges/app_common/cartridge/client/default/js/components/updateDom.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/components/buyNow.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/thirdParty/swiper.js","webpack:///./node_modules/swiper/swiper-bundle.js","webpack:///../sswd_base/cartridges/sswd_base/cartridge/client/default/js/util/XStringUtils.js","webpack:///./cartridges/app_custom/cartridge/client/default/js/common/cart.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/scrollAnimate.js","webpack:///../app_common/cartridges/app_common/cartridge/client/default/js/components/clicklock.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","include","keys","forEach","getCsrfObject","$","data","processInclude","document","ready","base","detail","encodeHtml","Swiper","arySpinnerCtrl","spinnerCal","target","num","Number","val","createErrorNotification","message","errorHtml","append","setTimeout","remove","swiperProductsThumbnail","breakpoints","0","slidesPerView","768","1200","allowTouchMove","loop","speed","navigation","nextEl","prevEl","thumbs","swiper","exportDetails","extend","quantityChange","on","e","this","timeStamp","type","setInterval","clearInterval","quantity","parseInt","isNaN","addToCart","clickAssortedProducts","event","link","relatedTarget","modal","find","text","attr","show","hide","html","css","dateTimePickerApi","stopImmediatePropagation","url","pid","getPidValue","body","hasClass","addClass","spinner","start","ajax","method","done","success","apiData","shippingDateList","shipping_date_list","sd","ed","checkMap","Map","length","shipping_rate","set","shipping_date","datepicker","language","format","startDate","endDate","disabled","autoclose","clearBtn","maxViewMode","beforeShowDay","date","param","dateStr","dt","getFullYear","getMonth","slice","getDate","rateNum","classes","dateTimePickerFunc","redirectUrl","window","location","href","errorMessage","fail","responseJSON","always","stop","moveProductPurchaseSp","$bundleFooterRow","closest","$productItemContainer","insertAfter","methods","updateAddToCartEnableDisableOtherElements","enableOrDisable","availability","updateAttributesAndDetails","$productContainer","id","empty","attributesHtml","shortDescription","removeClass","longDescription","showSpinner","updateAttribute","response","eq","container","product","updateAddToCart","readyToOrder","available","enable","toArray","every","item","updateAvailability","allAvailable","allReady","resources","info_selectforstock","sizeChart","preventDefault","$prodSizeChart","is","dataType","content","toggleClass","$sizeChart","has","copyProductLink","$temp","select","execCommand","focusChooseBonusProductModal","CONFIRMATION","DEFAULT_ID","BUTTON","OK","CANCEL","RESULT","confirm","modalId","Promise","resolve","reject","$modal","setTabNextFocus","focusParams","keyCode","firstFocusableEl","containerSelector","firstElementSelector","lastFocusableEl","lastElementSelector","nextToLastElementSelector","linkElements","shiftKey","focus","wishlist","displayMessage","$button","msg","csrfError","$messages","$alert","removeAttr","exportWishlist","addToWishlist","async","optionId","optionVal","csrfObject","csrfTokenName","tokenName","csrfTokenValue","token","postdata","error","err","button","status","XStringUtils","postForm","CO_BUY_NOW_RESPONSE_RESULT","CO_BUY_NOW_ACTION_RESULT","CO_BUY_NOW_MODAL","locateModal","$body","prop","parent","detach","appendTo","execBuyNow","buyNowObj","coBuyNowFormData","FormData","originUrl","productId","forceChangeUses","coBuyNowActionUrl","actionResult","actionUrl","formData","responseResult","result","$coBuyNowErrorMessage","doCoBuyNowServiceAction","reBuyNowObj","assign","topPageUrl","focusHelper","$el","getQuantitySelector","quantitySelected","quantitySelectedModal","quantitySelectedPDP","undefined","getQuantitySelected","handleVariantResponse","isVaraint","isChoiceOfBonusProducts","parents","variationAttributes","attrs","msgs","attrsWithSwatches","indexOf","values","attrValue","$attrValue","$swatchButton","selected","siblings","assistiveSelectedText","selectable","processSwatchValues","$attr","resetUrl","processNonSwatchValues","updateAttrs","productType","imgs","carousel","carouselId","alt","index","title","first","createCarousel","images","large","replaceWith","price","promotionsHtml","availabilityValue","availabilityMessages","messages","trigger","attributes","attributeGroup","ID","attribute","label","getAttributesHtml","attributeSelect","selectedValueUrl","optionsHtml","updateOptions","quantities","map","join","updateQuantities","parseHtml","$html","parseHTML","footer","children","chooseBonusProducts","bonusUrl","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","uuid","pliUUID","addToCartUrl","pageSize","labels","selectprods","parsedHtml","renderedTemplate","enterDialogMessage","closeButtonText","getOptions","options","$elOption","urlValue","selectedValueId","JSON","stringify","miniCartReportingUrl","editBonusProducts","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","colorAttribute","selectAttribute","currentTarget","pidsObj","setPids","each","push","qty","childProducts","form","messageType","newBonusDiscountLineItem","handlePostCartAdd","reportingURL","selectBonusProduct","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","removeBonusProduct","$selected","count","enableBonusProductSelection","showMoreBonusProducts","addBonusProductsToCart","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","option","msgSuccess","reload","isMultiPart","urlSearchParams","URLSearchParams","entry","entries","fetch","headers","Accept","credentials","json","ok","Error","refreshArea","$results","selector","$updates","updateDom","getBuyNowObj","pathname","search","isObject$1","obj","constructor","extend$1","src","ssrDocument","activeElement","nodeName","querySelector","querySelectorAll","getElementById","createEvent","createElement","childNodes","style","getElementsByTagName","createElementNS","importNode","hash","host","hostname","origin","protocol","getDocument","doc","ssrWindow","navigator","userAgent","history","CustomEvent","getComputedStyle","getPropertyValue","screen","matchMedia","requestAnimationFrame","callback","clearTimeout","getWindow","win","Dom7","Array","items","super","proto","__proto__","makeReactive","arrayFlat","arr","res","el","isArray","arrayFilter","filter","context","trim","toCreate","tempParent","innerHTML","a","qsa","nodeType","uniqueArray","arrayUnique","fn","Methods","_len","arguments","_key","classNames","split","classList","add","_len2","_key2","_len4","_key4","className","contains","_len3","_key3","toggle","getAttribute","setAttribute","attrName","removeAttribute","transform","transition","duration","transitionDuration","_len5","args","_key5","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","unshift","apply","k","handleEvent","events","j","dom7LiveListeners","proxyListener","addEventListener","dom7Listeners","off","_len6","_key6","handlers","handler","dom7proxy","removeEventListener","splice","_len9","_key9","evt","bubbles","cancelable","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","styles","offsetWidth","parseFloat","outerHeight","offsetHeight","offset","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","props","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","returnIndex","newChild","tempDiv","firstChild","appendChild","prepend","insertBefore","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","parentNode","foundElements","found","removeChild","nextTick","delay","now","Date","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","getComputedStyle$1","WebKitCSSMatrix","webkitTransform","replace","MozTransform","OTransform","MsTransform","msTransform","toString","m41","m42","isObject","isNode","node","HTMLElement","to","noExtend","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","_ref","targetPosition","side","startPosition","translate","time","startTime","params","wrapperEl","scrollSnapType","cancelAnimationFrame","cssModeFrameID","dir","isOutOfBound","current","animate","getTime","progress","Math","max","min","easeProgress","cos","PI","currentPosition","scrollTo","overflow","support","deviceCached","browser","getSupport","smoothScroll","documentElement","touch","DocumentTouch","passiveListener","supportsPassive","opts","gestures","calcSupport","getDevice","overrides","_temp","platform","ua","device","ios","android","screenWidth","width","screenHeight","height","match","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","isSafari","toLowerCase","isWebView","test","calcBrowser","methodName","writable","eventsEmitter","priority","self","eventsListeners","destroyed","onceHandler","__emitterProxy","eventsAnyListeners","eventHandler","transitionEmit","runCallbacks","direction","step","activeIndex","previousIndex","emit","onTouchStart","touchEventsData","touches","enabled","animating","preventInteractionOnTransition","cssMode","loopFix","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","which","isTouched","isMoved","swipingClassHasValue","noSwipingClass","eventPath","composedPath","path","shadowRoot","noSwipingSelector","isTargetShadow","noSwiping","__closestFrom","assignedSlot","getRootNode","closestElement","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","innerWidth","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","updateSize","swipeDirection","threshold","allowThresholdMove","focusableElements","blur","shouldPreventDefault","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchMove","rtlTranslate","rtl","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","isVertical","maxTranslate","minTranslate","diffX","diffY","sqrt","touchAngle","isHorizontal","atan2","abs","touchMoveStopPropagation","nested","stopPropagation","startTranslate","setTransition","$wrapperEl","allowMomentumBounce","grabCursor","allowSlideNext","allowSlidePrev","setGrabCursor","diff","touchRatio","currentTranslate","disableParentSwiper","resistanceRatio","resistance","followFinger","watchSlidesProgress","updateActiveIndex","updateSlidesClasses","updateProgress","setTranslate","onTouchEnd","slidesGrid","touchEndTime","timeDiff","pathTree","updateClickedSlide","lastClickTime","currentPos","stopIndex","groupSize","slidesSizesGrid","slidesPerGroupSkip","slidesPerGroup","increment","rewindFirstIndex","rewindLastIndex","rewind","isBeginning","virtual","slides","isEnd","ratio","longSwipesMs","longSwipes","slideTo","longSwipesRatio","shortSwipes","onResize","setBreakpoint","snapGrid","updateSlides","centeredSlides","autoplay","running","paused","run","watchOverflow","checkOverflow","onClick","preventClicks","preventClicksPropagation","onScroll","newProgress","previousTranslate","translatesDiff","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","passiveListeners","passive","move","end","cancel","updateOnWindowResize","isGridEnabled","grid","rows","defaults","init","initialSlide","resizeObserver","createElements","autoHeight","setWrapperSize","virtualTranslate","effect","breakpointsBase","spaceBetween","slidesPerGroupAuto","centeredSlidesBounds","slidesOffsetBefore","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","simulateTouch","uniqueNavElements","slideToClickedSlide","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","loopedSlidesLimit","loopFillGroupWithBlank","loopPreventsSlide","maxBackfaceHiddenSlides","containerModifierClass","slideClass","slideBlankClass","slideActiveClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","runCallbacksOnInit","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","update","clientWidth","clientHeight","size","getDirectionLabel","getDirectionPropertyValue","swiperSize","wrongRTL","isVirtual","previousSlidesLength","slidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","marginLeft","marginBottom","marginTop","marginRight","gridEnabled","slideSize","initSlides","shouldResetSlideSize","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","paddingLeft","paddingRight","boxSizing","floor","swiperSlideSize","updateWrapperSize","newSlidesGrid","slidesGridItem","_","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","updateSlidesOffset","backFaceHiddenClass","hasClassBackfaceClassAdded","updateAutoHeight","activeSlides","newHeight","getSlideByIndex","visibleSlides","ceil","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","originalProgress","multiplier","wasBeginning","wasEnd","realIndex","activeSlide","nextSlide","prevSlide","emitSlidesClasses","newActiveIndex","previousRealIndex","previousSnapIndex","skip","initialized","slideFound","clickedSlide","clickedIndex","byController","x","y","translateTo","translateBounds","internal","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionStart","initial","indexAsNumber","isFinite","normalizedTranslate","normalizedGrid","normalizedGridNext","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","slideNext","perGroup","slidesPerViewDynamic","_clientLeft","slidePrev","normalize","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","currentSnap","slideToIndex","loopCreate","$selector","blankSlidesNum","blankNode","prependSlides","appendSlides","cloneNode","loopDestroy","moving","isLocked","cursor","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","fill","wasModuleEnabled","isModuleEnabled","disable","directionChanged","needsReLoop","changeDirection","isEnabled","containerEl","currentHeight","innerHeight","points","point","minRatio","substr","sort","b","wasLocked","lastSlideIndex","lastSlideRightEdge","addClasses","suffixes","prefix","resultClasses","prepareClasses","removeClasses","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","complete","Image","onload","onerror","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","swipers","newParams","__modules__","mod","extendParams","once","swiperParams","passedParams","eventName","onAny","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","cls","slideEl","updates","getSlideClasses","view","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","mounted","getWrapperSelector","getWrapper","wrapper","mount","deleteInstance","cleanStyles","deleteProps","newDefaults","installModule","createElementIfNotDefined","checkProps","element","classesToSelector","appendSlide","observer","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","effectInit","overwriteParams","perspective","recreateShadows","getEffectParams","requireUpdateOnVirtual","overwriteParamsResult","_s","slideShadows","effectTarget","effectParams","$slideEl","transformEl","effectVirtualTransitionEnd","allSlides","$transitionEndTarget","eventTriggered","triggerEvents","createShadow","shadowClass","$shadowContainer","$shadowEl","prototypeGroup","protoMethod","use","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","_ref2","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","cssModeTimeout","renderSlide","cache","force","addSlidesBefore","addSlidesAfter","from","previousFrom","previousTo","previousSlidesGrid","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","lazy","load","renderExternal","slidesToRender","renderExternalUpdate","prependIndexes","appendIndexes","numberOfNewSlides","newCache","cachedIndex","$cachedEl","cachedElIndex","handle","kc","charCode","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","altKey","ctrlKey","metaKey","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","timeout","mousewheel","releaseOnEdges","invert","forceToAxis","sensitivity","eventsTarget","thresholdDelta","thresholdTime","lastEventBeforeSnap","lastScrollTime","recentWheelEvents","handleMouseEnter","mouseEntered","handleMouseLeave","animateSlider","newEvent","delta","raw","rtlFactor","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","positions","sign","ignoreWheelEvents","position","sticky","shift","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","releaseScroll","getEl","toggleEl","disabledClass","tagName","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","destroy","hideOnClick","hiddenClass","navigationDisabledClass","targetEl","pagination","clickable","isHidden","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","total","paginationType","firstIndex","midIndex","suffix","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","progressbarDirection","scale","scaleX","scaleY","render","paginationHTML","numberOfBullets","dragStartPos","dragSize","trackSize","divider","dragTimeout","scrollbar","$dragEl","newSize","newPos","opacity","display","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","eventMethod","$swiperEl","dragClass","dragEl","draggable","scrollbarDisabledClass","parallax","setTransform","currentOpacity","currentScale","_swiper","parallaxEl","$parallaxEl","parallaxDuration","zoom","maxRatio","containerClass","zoomedSlideClass","gesturesEnabled","fakeGestureTouched","fakeGestureMoved","isScaling","gesture","slideWidth","slideHeight","$imageEl","$imageWrapEl","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","onGestureStart","scaleStart","onGestureChange","scaleMove","onGestureEnd","scaledWidth","scaledHeight","onTransitionEnd","zoomIn","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","touchAction","zoomOut","zoomToggle","getListeners","activeListenerWithCapture","getSlideSelector","toggleGestures","slideSelector","enableGestures","disableGestures","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","checkInView","loadPrevNext","loadPrevNextAmount","loadOnTransitionStart","scrollingElement","elementClass","loadingClass","loadedClass","preloaderClass","scrollHandlerAttached","initialImageLoaded","loadInSlide","loadInDuplicate","$images","background","$pictureEl","sourceEl","$source","slideOriginalIndex","slideExist","amount","maxIndex","minIndex","checkInViewOnLoad","$scrollElement","isWindow","scrollElementWidth","scrollElementHeight","LinearSpline","binarySearch","guess","array","i1","i3","interpolate","removeSpline","controller","control","spline","inverse","by","_t","controlled","controlledTranslate","setControlledTranslate","getInterpolateFunction","setControlledTransition","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","clicked","liveRegion","notify","notification","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","click","hasPagination","hasClickablePagination","initNavEl","wrapperId","controls","addElControls","handlePointerDown","handlePointerUp","handleFocus","includes","isActive","isVisible","sourceCapabilities","firesTouchEvents","$containerEl","repeat","round","random","live","addElLive","updateNavigation","bulletEl","updatePagination","root","replaceState","keepQuery","paths","slugify","getPathValues","urlOverride","URL","pathArray","part","setHistory","currentState","state","pushState","scrollToSlide","setHistoryPopState","hashNavigation","watchState","onHashChange","newHash","setHash","$activeSlideEl","autoplayResult","reverseDirection","stopOnLastSlide","pause","waitForTransition","onVisibilityChange","visibilityState","onMouseEnter","disableOnInteraction","onMouseLeave","pauseOnMouseEnter","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","currentIndex","thumbsParams","SwiperClass","thumbsSwiperParams","thumbsToActivate","thumbActiveClass","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","minimumVelocity","lastMoveEvent","pop","velocityEvent","distance","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","needsLoopFix","moveDistance","currentSlideSize","slidesNumberEvenToRows","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","groupIndex","slideIndexInGroup","columnsInGroup","order","fadeEffect","crossFade","tx","ty","slideOpacity","cubeEffect","shadow","shadowOffset","shadowScale","createSlideShadows","shadowBefore","shadowAfter","$cubeShadowEl","wrapperRotate","slideAngle","tz","shadowAngle","sin","scale1","scale2","zFactor","flipEffect","limitRotation","rotateY","rotateX","zIndex","coverflowEffect","rotate","stretch","depth","modifier","center","centerOffset","offsetMultiplier","translateZ","slideTransform","$shadowBeforeEl","$shadowAfterEl","creativeEffect","limitProgress","shadowPerProgress","progressMultiplier","getTranslateValue","isCenteredSlides","margin","custom","translateString","rotateString","scaleString","opacityString","shadowOpacity","cardsEffect","perSlideRotate","perSlideOffset","tX","tY","tZ","tXAdd","isSwipeToNext","isSwipeToPrev","subProgress","prevY","factory","str","convertToHyphen","convertToHalfWidthDigit","String","fromCharCode","charCodeAt","convertToPSM","convertToFullWidth","katakanaMap","ガ","ギ","グ","ゲ","ゴ","ザ","ジ","ズ","ゼ","ゾ","ダ","ヂ","ヅ","デ","ド","バ","ビ","ブ","ベ","ボ","パ","ピ","プ","ペ","ポ","ヴ","ヷ","ヺ","ア","イ","ウ","エ","オ","カ","キ","ク","ケ","コ","サ","シ","ス","セ","ソ","タ","チ","ツ","テ","ト","ナ","ニ","ヌ","ネ","ノ","ハ","ヒ","フ","ヘ","ホ","マ","ミ","ム","メ","モ","ヤ","ユ","ヨ","ラ","リ","ル","レ","ロ","ワ","ヲ","ン","ァ","ィ","ゥ","ェ","ォ","ッ","ャ","ュ","ョ","ー","゙","゚","katakanaRegExp","RegExp","char","convertFullWidthKatakanaToHalfWidthKatakana","ガ","ギ","グ","ゲ","ゴ","ザ","ジ","ズ","ゼ","ゾ","ダ","ヂ","ヅ","デ","ド","バ","ビ","ブ","ベ","ボ","パ","ピ","プ","ペ","ポ","ヴ","ヷ","ヺ","ア","イ","ウ","エ","オ","カ","キ","ク","ケ","コ","サ","シ","ス","セ","ソ","タ","チ","ツ","テ","ト","ナ","ニ","ヌ","ネ","ノ","ハ","ヒ","フ","ヘ","ホ","マ","ミ","ム","メ","モ","ヤ","ユ","ヨ","ラ","リ","ル","レ","ロ","ワ","ヲ","ン","ァ","ィ","ゥ","ェ","ォ","ッ","ャ","ュ","ョ","ー","clicklock","getAddrToCartMessages","clickAddFalseToMessageAlert","$addrToCartMessages","messageHtmlStr","$messageHtml","waitForScroll","promise","doAddToCart","$addCartButton","quantityElementDesktop","quantityElementMobile","postDataObj","lock","clickAddToMessageAlert","refreshUrl","refreshProductView","unlock","handleBuyNow","sswd","locked"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,K,iCChFrDhC,EAAOD,QAAU,SAAUkC,GACA,mBAAZA,EACPA,IAC0B,iBAAZA,GACdtB,OAAOuB,KAAKD,GAASE,SAAQ,SAAUX,GACP,mBAAjBS,EAAQT,IACfS,EAAQT,U,gCCyBxBxB,EAAOD,QAAU,CACbqC,cAPJ,WAGI,OArBiBC,EAAE,YAoBGC,KAAK,W,iCC3B/B,MAAMC,EAAiB,EAAQ,GAE/BF,EAAEG,UAAUC,OAAM,WACdF,EAAe,EAAQ,MACvBA,EAAe,EAAQ,KACvBA,EAAe,EAAQ,S,iCCL3B,MAAMG,EAAO,EAAQ,IACfC,EAAS,EAAQ,MACjB,WAACC,GAAc,EAAQ,GACvBC,EAAS,EAAQ,IAcvB,IAAIC,EAAiB,GAOrB,SAASC,IACL,IAAIC,EAASX,EAAES,EAAe,YAE1BG,EAAMC,OAAOF,EAAOG,OAExBF,GAAOH,EAAe,QAClBG,EAAMC,OAAOF,EAAOV,KAAK,QAEzBU,EAAOG,IAAID,OAAOF,EAAOV,KAAK,SACvBY,OAAOF,EAAOV,KAAK,QAAUW,EAEpCD,EAAOG,IAAID,OAAOF,EAAOV,KAAK,SAE9BU,EAAOG,IAAIF,GA8HnB,SAASG,EAAwBC,GAC7B,MAAMC,EACF,yNAKAV,EAAWS,GACX,SAGJhB,EAAE,QAAQkB,OAAO,4CACjBlB,EAAE,yBAAyBkB,OAAOD,GAClCE,YAAW,WACPnB,EAAE,yBAAyBoB,WAC5B,KAyJP,MAAMC,EAA0B,IAAIb,EAAO,6BAA8B,CACrEc,YAAa,CAETC,EAAG,CAECC,cAAe,GAEnBC,IAAK,CAEDD,cAAe,IAEnBE,KAAM,CAEFF,cAAe,KAGvBG,gBAAgB,IAMG,IAAInB,EAAO,mBAAoB,CAClDc,YAAa,CAETC,EAAG,CAECC,cAAe,GAEnBC,IAAK,CAEDD,cAAe,GAEnBE,KAAM,CAEFF,cAAe,IAGvBI,MAAM,EACNC,MAAO,KACPC,WAAY,CACRC,OAAQ,sBACRC,OAAQ,uBAEZC,OAAQ,CACJC,OAAQb,KAiBhB,MAAMc,EAAgBnC,EAAEoC,OAAO,GAAI/B,EAAMC,EAAQ,CAC7C+B,eA9VJ,WAEIrC,EAAE,eAAesC,GAAG,8BAA8B,SAAUC,GACxD,GAAI9B,EAAe,aAAc,OAAO,EAExC,IAAIE,EAASX,EAAEwC,MAAMvC,KAAK,UAO1B,GANAQ,EAAe,WAAaE,EAC5BF,EAAe,cAAgB8B,EAAEE,UAEjChC,EAAe,QAAUI,OAAOb,EAAEwC,MAAMvC,KAAK,QAG9B,UAAXsC,EAAEG,KAGF,OAFAhC,IACAD,EAAiB,IACV,EAIXU,YAAW,WAGFV,EAAe,cAAgBA,EAAe,gBAAkB8B,EAAEE,YACnEhC,EAAe,aAAekC,YAAYjC,EAxDvC,OA0DR,QAIPV,EAAEG,UAAUmC,GAAG,2BAA2B,SAAUC,GAC5C9B,EAAe,eAEfmC,cAAcnC,EAAe,cAC7BA,EAAiB,OAGzBT,EAAE,oBAAoBsC,GAAG,UAAU,SAAUC,GACzC,MAAMM,EAAWC,SAAS9C,EAAEwC,MAAM1B,QAC9BiC,MAAMF,IAAaA,GAAY,IAC/B7C,EAAEwC,MAAM1B,IAAI,OAwTpBkC,UAAW,aACXC,sBAjTJ,WACIjD,EAAE,+BAA+BsC,GAAG,iBAAiB,SAAUY,GAE3D,IAAIC,EAAOnD,EAAEkD,EAAME,eAGfC,EAAQrD,EAAEwC,MAGda,EAAMC,KAAK,gBAAgBC,KAAKJ,EAAKlD,KAAK,SAC1CoD,EAAMC,KAAK,cAAcE,KAAK,MAAOL,EAAKlD,KAAK,aAC/CoD,EAAMC,KAAK,cAAcE,KAAK,MAAOL,EAAKlD,KAAK,aAC/CoD,EAAMC,KAAK,cAAcE,KAAK,QAASL,EAAKlD,KAAK,eACjDoD,EAAMC,KAAK,sBAAsBC,KAAKJ,EAAKlD,KAAK,gBAGhDoD,EAAMC,KAAK,sBAAsBG,OACjCJ,EAAMC,KAAK,4BAA4BG,OACvCJ,EAAMC,KAAK,2BAA2BG,OACtCJ,EAAMC,KAAK,iCAAiCG,OAC5CJ,EAAMC,KAAK,oBAAoBG,OAC/BJ,EAAMC,KAAK,0BAA0BG,OACrCJ,EAAMC,KAAK,8BAA8BG,OACzCJ,EAAMC,KAAK,oCAAoCG,OAGd,OAA7BN,EAAKlD,KAAK,gBACVoD,EAAMC,KAAK,sBAAsBC,KAAK,IACtCF,EACKC,KAAK,sBACLC,KAAKJ,EAAKlD,KAAK,eAAiBoD,EAAMC,KAAK,sBAAsBC,UAEtEF,EAAMC,KAAK,sBAAsBI,OACjCL,EAAMC,KAAK,4BAA4BI,QAEL,KAAlCP,EAAKlD,KAAK,oBACVoD,EAAMC,KAAK,2BAA2BC,KAAKJ,EAAKlD,KAAK,sBAErDoD,EAAMC,KAAK,2BAA2BI,OACtCL,EAAMC,KAAK,iCAAiCI,QAEV,KAAlCP,EAAKlD,KAAK,oBACVoD,EAAMC,KAAK,oBAAoBC,KAAKJ,EAAKlD,KAAK,sBAE9CoD,EAAMC,KAAK,oBAAoBI,OAC/BL,EAAMC,KAAK,0BAA0BI,QAEA,KAArCP,EAAKlD,KAAK,wBACVoD,EAAMC,KAAK,8BAA8BK,KAAKR,EAAKlD,KAAK,wBACxDoD,EAAMC,KAAK,8BAA8BM,IAAI,cAAe,cAE5DP,EAAMC,KAAK,8BAA8BI,OACzCL,EAAMC,KAAK,oCAAoCI,YA8PvDG,kBAlHJ,WACI7D,EAAE,kBAAkBsC,GAAG,SAAS,SAAUY,GAEtCA,EAAMY,2BAEN,MAAMC,EAAM/D,EAAEwC,MAAMvC,KAAK,UACzB,IAAK8D,EACD,OAEJ,MAAMC,EAAM3D,EAAK4D,YAAYjE,EAAEwC,OAGzB0B,EAAOlE,EAAE,QACVkE,EAAKC,SAAS,wBACfD,EAAKE,SAAS,uBAGlBpE,EAAEqE,UAAUC,QACZtE,EAAEuE,KAAK,CACHR,MACAS,OAAQ,MACRvE,KAAM,CACF+D,SAGHS,MAAK,SAAUxE,GACRA,EAAKyE,QA3HzB,SAA4BC,GAExB,IAAIC,EAAmBD,EAAQ1E,KAAK4E,mBAOhCC,EAAK,KACLC,EAAK,KACLC,EAAW,IAAIC,IACnB,IAAK,IAAIrH,EAAI,EAAGA,EAAIgH,EAAiBM,OAAQtH,GAAK,EAEnC,OAAPkH,GAAqD,KAAtCF,EAAiBhH,GAAGuH,gBACnCL,EAAKF,EAAiBhH,IAGgB,KAAtCgH,EAAiBhH,GAAGuH,gBACpBJ,EAAKH,EAAiBhH,IAG1BoH,EAASI,IAAIR,EAAiBhH,GAAGyH,cAAeT,EAAiBhH,GAAGuH,eAI7D,OAAPL,IACAA,EAAKF,EAAiB,IAEf,OAAPG,IACAA,EAAKH,EAAiBA,EAAiBM,OAAS,IAIpDlF,EAAE,kBAAkBsF,WAAW,CAC3BC,SAAU,KACVC,OAAQ,aACRC,UAAWX,EAAGO,cACdK,QAASX,EAAGM,cACZM,UAAU,EACVC,WAAW,EACXC,UAAU,EAGVC,YAAa,EACbC,cAAe,SAAUC,GACrB,IAAIC,EACAC,GAhFIC,EAgFiBH,GA/EtBI,cAGA,KAFF,MAAQD,EAAGE,WAAa,IAAIC,OAAO,GAEvB,KADZ,KAAOH,EAAGI,WAAWD,OAAO,GAHzC,IAAoBH,EAiFR,IAAIK,EAAUxB,EAASvG,IAAIyH,GAmB3B,OAhBID,EADY,KAAZO,EACQ,CACJC,QAAS,YAEc,MAApB5F,OAAO2F,GACN,CACJC,QAAS,SAEN5F,OAAO2F,GAAW,GACjB,CACJC,QAAS,QAGL,CACJA,QAAS,WAGVR,KAKfjG,EAAE,kBAAkBsF,WAAW,QAG/BtF,EAAE,eACGsD,KAAK,SACLhB,GAAG,SAAS,SAAUC,GAEfvC,EAAEwC,MAAM2B,SAAS,aACjB5B,EAAEuB,8BAId9D,EAAE,eACGsD,KAAK,SACLhB,GAAG,SAAS,SAAUC,GAEfvC,EAAEwC,MAAM2B,SAAS,aACjB5B,EAAEuB,8BAmCE4C,CAAmBzG,GAGnBA,EAAK0G,YACLC,OAAOC,SAASC,KAAO7G,EAAK0G,YACrB1G,EAAK8G,cACZhG,EAAwBd,EAAK8G,iBAGpCC,MAAK,SAAU/G,GACZc,EAAwBd,EAAKgH,aAAajG,YAE7CkG,QAAO,WACJlH,EAAEqE,UAAU8C,cA2ExBC,sBAZJ,WACI,MACMC,EADgBrH,EAAE,kBACesH,QAAQ,QACzCC,EAAwBvH,EAAE,sCAChCqH,EAAiBG,YAAYD,MAWjC5J,EAAOD,QAAUyE,G,iCClZjB,IAAI9B,EAAO,EAAQ,IAUnB1C,EAAOD,QAAU,CACb+J,QAAS,CACLC,0CANR,SAAmDC,GAC/C3H,EAAE,6BAA6BwD,KAAK,WAAYmE,KAQhDC,aAAcvH,EAAKuH,aAEnB5E,UAAW3C,EAAK2C,UAEhB6E,2BAA4B,WACxB7H,EAAE,QAAQsC,GAAG,wBAAwB,SAAUC,EAAGtC,GAC9C,IAAI6H,EAAoB9H,EAAE,6BAA+BC,EAAK8H,GAAK,MAEnED,EAAkBxE,KAAK,+CAClB0E,QACArE,KAAK1D,EAAKgI,gBAEXhI,EAAKiI,kBACLJ,EAAkBxE,KAAK,wCAClB6E,YAAY,kBACjBL,EAAkBxE,KAAK,iDAClB0E,QACArE,KAAK1D,EAAKiI,mBAEfJ,EAAkBxE,KAAK,wCAClBc,SAAS,kBAGdnE,EAAKmI,iBACLN,EAAkBxE,KAAK,oCAClB6E,YAAY,kBACjBL,EAAkBxE,KAAK,6CAClB0E,QACArE,KAAK1D,EAAKmI,kBAEfN,EAAkBxE,KAAK,oCAClBc,SAAS,sBAK1BiE,YAAa,WACTrI,EAAE,QAAQsC,GAAG,yDAAyD,WAClEtC,EAAEqE,UAAUC,YAGpBgE,gBAAiB,WACbtI,EAAE,QAAQsC,GAAG,gCAAgC,SAAUC,EAAGgG,GAClDvI,EAAE,iCAAiCkF,QAG5BlF,EAAE,uBAAuBwI,GAAG,IAFnCD,EAASE,UAAUxI,KAAK,MAAOsI,EAAStI,KAAKyI,QAAQX,IACrDQ,EAASE,UAAUnF,KAAK,eAAeC,KAAKgF,EAAStI,KAAKyI,QAAQX,MAKlE/H,EAAE,eAAeuD,KAAKgF,EAAStI,KAAKyI,QAAQX,IAC5C/H,EAAE,uCAAuCC,KAAK,MAAOsI,EAAStI,KAAKyI,QAAQX,SAIvFY,gBAAiB,WACb3I,EAAE,QAAQsC,GAAG,2BAA2B,SAAUC,EAAGgG,GAEjDvI,EAAE,qBAAsBuI,EAAST,mBAAmBtE,KAAK,YACnD+E,EAASG,QAAQE,eAAiBL,EAASG,QAAQG,WAEzD,IAAIC,EAAS9I,EAAE,yBAAyB+I,UAAUC,OAAM,SAAUC,GAC9D,OAAOjJ,EAAEiJ,GAAMhJ,KAAK,cAAgBD,EAAEiJ,GAAMhJ,KAAK,qBAErDtC,EAAOD,QAAQ+J,QAAQC,2CAA2CoB,OAG1EI,mBAAoB,WAChBlJ,EAAE,QAAQsC,GAAG,8BAA8B,SAAUC,EAAGgG,GAQpD,GAPAvI,EAAE,mBAAoBuI,EAAST,mBAC1B7H,KAAK,iBAAkBsI,EAASG,QAAQE,cACxC3I,KAAK,YAAasI,EAASG,QAAQG,WAExC7I,EAAE,oBAAqBuI,EAAST,mBAC3BE,QAAQrE,KAAK4E,EAASvH,SAEvBhB,EAAE,wBAAwBkF,OAAQ,CAClC,IAAIiE,EAAenJ,EAAE,yBAAyB+I,UACzCC,OAAM,SAAUC,GAAQ,OAAOjJ,EAAEiJ,GAAMhJ,KAAK,gBAE7CmJ,EAAWpJ,EAAE,yBAAyB+I,UACrCC,OAAM,SAAUC,GAAQ,OAAOjJ,EAAEiJ,GAAMhJ,KAAK,qBAEjDD,EAAE,wBACGC,KAAK,iBAAkBmJ,GACvBnJ,KAAK,YAAakJ,GAEvBnJ,EAAE,0CAA0CgI,QACvCrE,KAAKyF,EAAWb,EAASvH,QAAUuH,EAASc,UAAUC,0BAIvEC,UAAW,WACPvJ,EAAE,iBAAiBsC,GAAG,SAAS,SAAUC,GACrCA,EAAEiH,iBACF,IAAIzF,EAAM/D,EAAEwC,MAAMgB,KAAK,QACnBiG,EAAiBzJ,EAAEwC,MAAM8E,QAAQ,eAAehE,KAAK,2BACrDmG,EAAeC,GAAG,WAClB1J,EAAEuE,KAAK,CACHR,IAAKA,EACLrB,KAAM,MACNiH,SAAU,OACVjF,QAAS,SAAUzE,GACfwJ,EAAevI,OAAOjB,EAAK2J,YAIvCH,EAAeI,YAAY,aAG/B,IAAIC,EAAa9J,EAAE,2BACnBA,EAAE,QAAQsC,GAAG,oBAAoB,SAAUC,GACnCvC,EAAE,eAAe+J,IAAIxH,EAAE5B,QAAQuE,QAAU,GACzC4E,EAAW3B,YAAY,cAInC6B,gBAAiB,WACbhK,EAAE,QAAQsC,GAAG,QAAS,YAAY,WAC9BY,MAAMsG,iBACN,IAAIS,EAAQjK,EAAE,WACdA,EAAE,QAAQkB,OAAO+I,GACjBA,EAAMnJ,IAAId,EAAE,aAAac,OAAOoJ,SAChC/J,SAASgK,YAAY,QACrBF,EAAM7I,SACNpB,EAAE,sBAAsBwD,KAAK,OAAQ,SACrCxD,EAAE,sBAAsBmI,YAAY,UACpChH,YAAW,WACPnB,EAAE,sBAAsBoE,SAAS,YAClC,SAIXgG,6BAA8B/J,EAAK+J,iC,gCClJvC,MAAMC,EAAe,CAEjBC,WAAY,oBAEZC,OAAQ,CAEJC,GAAI,cAEJC,OAAQ,mBAGZC,OAAQ,CAEJF,GAAI,EAEJC,QAAS,IA2CjB9M,EAAOD,QAAU,CACb2M,eACAM,QAzBJ,SAAiBC,GACb,OAAO,IAAIC,QAAQ,CAACC,EAASC,KAGzB,MAAMC,EAAShL,EAAE,KAAI4K,GAAWP,EAAaC,aAE7CU,EAAO1I,GAAG,gBAAiB,KAEvBwI,EAAQT,EAAaK,OAAOD,UAGhCzK,EAAE,IAAIqK,EAAaE,OAAOC,GAAMQ,GAAQ1I,GAAG,QAAS,KAChDwI,EAAQT,EAAaK,OAAOF,MAGhCxK,EAAE,IAAIqK,EAAaE,OAAOE,OAAUO,GAAQ1I,GAAG,QAAS,KACpDwI,EAAQT,EAAaK,OAAOD,UAGhCO,EAAO3H,MAAM,a,gCCvDrB1F,EAAOD,QAAU,CACbuN,gBAAiB,SAAUC,GAIvB,GAF8C,QAA1BA,EAAYhI,MAAM/D,KADpB,IACqC+L,EAAYhI,MAAMiI,QAEzE,CAIA,IAAIC,EAAmBpL,EAAEkL,EAAYG,kBAAoB,IAAMH,EAAYI,sBACvEC,EAAkBvL,EAAEkL,EAAYG,kBAAoB,IAAMH,EAAYM,qBAE1E,GAAIxL,EAAEkL,EAAYG,kBAAoB,IAAMH,EAAYM,qBAAqB9B,GAAG,eAC5E6B,EAAkBvL,EAAEkL,EAAYG,kBAAoB,IAAMH,EAAYO,2BAClEzL,EAAE,kCAAkCkF,OAAS,GAAG,CAChD,IAAIwG,EAAe1L,EAAEkL,EAAYG,kBAAoB,0BACrDE,EAAkBG,EAAaA,EAAaxG,OAAS,GAIzDgG,EAAYhI,MAAMyI,SACd3L,EAAE,UAAU0J,GAAG0B,KACfG,EAAgBK,QAChBV,EAAYhI,MAAMsG,kBAGlBxJ,EAAE,UAAU0J,GAAG6B,KACfH,EAAiBQ,QACjBV,EAAYhI,MAAMsG,sB,gCC5BlC,MAAMqC,EAAW,EAAQ,KACnB,cAAC9L,GAAiB,EAAQ,IA0ChC,SAAS+L,EAAe7L,EAAM8L,GAE1B/L,EAAEqE,UAAU8C,OAEZ,IAAInG,EAAU,GAMVA,EAFAf,EAAKyE,QAEK1E,EAAE,iDAAiD2D,OA3CrC,aA4CjB1D,EAAK+L,IAEFhM,EAAE,uDAAuD2D,OA7C1C,aA8ClB1D,EAAK+L,IAEFhM,EAAE,uDAAuD2D,OA/C3C,aAgDjB1D,EAAK+L,IAEFhM,EAAE,uDAAuD2D,OAC5D1D,EAAKgM,UAEFjM,EAAE,sDAAsD2D,OAGxD3D,EAAE,wDAAwD2D,OAGxE,IAAIuI,EAAYlM,EAAE,yBACO,IAArBkM,EAAUhH,SACVgH,EAAYlM,EAAE,4CACdA,EAAE,QAAQkB,OAAOgL,IAIrB,MAAMC,EAASnM,EACX,iFAA6EgB,WAEjFkL,EAAUhL,OAAOiL,GAGblM,EAAKyE,UACAqH,EAAQ5H,SAAS,iBAClB4H,EAAQ3H,SAAS,iBAIzBjD,YAAW,WACPgL,EAAO/K,SACP8K,EAAU9K,SACV2K,EAAQK,WAAW,cACpB,KAoEP,MAAMC,EAAiBrM,EAAEoC,OAAO,GAAIyJ,EAAU,CAC1CS,cA1DJ,WACItM,EAAEG,UAAUmC,GAAG,QAAS,qBAAqBiK,eAAgBhK,GACzDA,EAAEiH,iBAGF,IAAIzF,EAAM/D,EAAEwC,MAAMvC,KAAK,QACnB8L,EAAU/L,EAAEwC,MAEZwB,EACAhE,EAAEwC,MAAM8E,QAAQ,mBAAmBhE,KAAK,eAAeK,QACvD3D,EAAEwC,MAAMvC,KAAK,cACbuM,EAAWxM,EAAEwC,MACZ8E,QAAQ,mBACRhE,KAAK,mBACLE,KAAK,kBACNiJ,EAAYzM,EAAEwC,MACb8E,QAAQ,mBACRhE,KAAK,mCACLE,KAAK,iBAIV,GAFAgJ,EAAWA,GAAY,KACvBC,EAAYA,GAAa,MACpB1I,IAAQC,EACT,OAIJhE,EAAEqE,UAAUC,QAEZtE,EAAEwC,MAAMgB,KAAK,YAAY,GAEzB,MAAMkJ,EAAa3M,IACb4M,EAAgBD,EAAWE,UAC3BC,EAAiBH,EAAWI,MAC5BC,EAAW,CACb/I,MACAwI,WACAC,aAEJM,EAASJ,GAAiBE,EAG1B7M,EAAEuE,KAAK,CACHR,IAAKA,EACLrB,KAAM,OACNiH,SAAU,OACV1J,KAAM8M,EACNrI,QAAS,SAAUzE,GACf6L,EAAe7L,EAAM8L,IAEzBiB,MAAO,SAAUC,GACbnB,EAAemB,EAAIhG,cAAgB,GAAI8E,YAUvDpO,EAAOD,QAAU2O,G,gCChKjB,SAASP,EAAe7L,EAAMiN,GAE1B,IAAIC,EADJnN,EAAEqE,UAAU8C,OAGRgG,EADAlN,EAAKyE,QACI,gBAEA,eAGiC,IAA1C1E,EAAE,6BAA6BkF,QAC/BlF,EAAE,QAAQkB,OACV,iDAGJlB,EAAE,6BACGkB,OAAO,iDAAmDiM,EAAS,KAAOlN,EAAK+L,IAAM,UAE1F7K,YAAW,WACPnB,EAAE,6BAA6BoB,SAC/B8L,EAAOd,WAAW,cACnB,KAGPzO,EAAOD,QAAU,CACb4O,cAAe,WACXtM,EAAE,qBAAqBsC,GAAG,SAAS,SAAUC,GACzCA,EAAEiH,iBACF,IAAIzF,EAAM/D,EAAEwC,MAAMvC,KAAK,QACnBiN,EAASlN,EAAEwC,MACXwB,EAAMhE,EAAEwC,MAAM8E,QAAQ,mBAAmBhE,KAAK,eAAeK,OAC7D6I,EAAWxM,EAAEwC,MAAM8E,QAAQ,mBAAmBhE,KAAK,mBAAmBE,KAAK,kBAC3EiJ,EAAYzM,EAAEwC,MAAM8E,QAAQ,mBAAmBhE,KAAK,mCAAmCE,KAAK,iBAChGgJ,EAAWA,GAAY,KACvBC,EAAYA,GAAa,KACpB1I,GAAQC,IAIbhE,EAAEqE,UAAUC,QACZtE,EAAEwC,MAAMgB,KAAK,YAAY,GACzBxD,EAAEuE,KAAK,CACHR,IAAKA,EACLrB,KAAM,OACNiH,SAAU,OACV1J,KAAM,CACF+D,IAAKA,EACLwI,SAAUA,EACVC,UAAWA,GAEf/H,QAAS,SAAUzE,GACf6L,EAAe7L,EAAMiN,IAEzBF,MAAO,SAAUC,GACbnB,EAAemB,EAAKC,a,+BC3DxC,MAAME,EAAe,EAAQ,GAE7BzP,EAAOD,QAAU,CACb0P,iB,gCCEJ,MAAM,aAAC/C,EAAY,QAAEM,GAAW,EAAQ,IAClC0C,EAAW,EAAQ,IACnB,cAACtN,GAAiB,EAAQ,IAG1BuN,EAEa,cAFbA,EAIE,KAJFA,EAMK,QANLA,EAQW,YARXA,EAUW,aAIXC,EAES,WAFTA,EAIa,cAJbA,EAME,KANFA,EAQK,QARLA,EAUW,YAVXA,EAYc,eAZdA,EAcc,eAddA,EAgBO,UAIPC,EAEK,qBAFLA,EAIW,yBAJXA,EAMW,0BAUjB,SAASC,EAAY7C,GACjB,MAAMI,EAAShL,EAAE,IAAI4K,GACrB,GAAsB,IAAlBI,EAAO9F,OACP,OAEJ,MAAMwI,EAAQ1N,EAAEG,SAAS+D,MACLwJ,EAAMC,KAAK,aACf3C,EAAO4C,SACOD,KAAK,YAQnC3C,EAAO6C,SAASC,SAASJ,GA2P7B/P,EAAOD,QAAU,CACbqQ,WA5DJxB,eAAewB,EAAWC,GAEtB,MAAMtB,EAAa3M,IACb4M,EAAgBD,EAAWE,UAC3BC,EAAiBH,EAAWI,MAG5BmB,EAAmB,IAAIC,SAC7BD,EAAiB/M,OAAO,YAAa8M,EAAUG,WAAa,IAC5DF,EAAiB/M,OAAO,YAAa8M,EAAUI,WAAa,IAC5DH,EAAiB/M,OAAO,WAAY8M,EAAUnL,UAAY,IAC1DoL,EAAiB/M,OACb,mBAC8B,IAA9B8M,EAAUK,gBAA2B,OAAS,SAElDJ,EAAiB/M,OAAOyL,EAAeE,GAGvC,MACMyB,EADqBtO,EAAE,sBACgBC,KAAK,QAE5C,SAACsI,EAAQ,aAAEgG,SAxIrBhC,eAAuCiC,EAAWC,GAC9C,IAAIlG,EACAgG,EACJ,IAII,GAHAvO,EAAEqE,UAAUC,QAEZiE,QAAiB8E,EAASmB,EAAWC,GACjClG,EAAS0D,UAETsC,EAAehB,MACZ,CACH,MAAMmB,EAAiBnG,EAASoG,OAChC,GAAID,IAAmBpB,EAEnBiB,EAAehB,OACZ,GAAImB,IAAmBpB,EAE1BiB,EAAehB,OACZ,GAAImB,IAAmBpB,EAAkC,CAE5D,MAAM1C,EAAU4C,EAChBC,EAAY7C,GAEZ,MAAM5J,EAAUuH,EAASvH,QACnBgK,EAAShL,EAAE,IAAI4K,GAEfgE,EAAwB5O,EAAE,IADD,uBAC+BgL,GACxDoC,EAAe,EAAQ,GAAkBA,aAC/CwB,EAAsBrL,KAAK,GAAG6J,EAAa7M,WAAWS,UAEhD2J,EAAQC,GACd2D,EAAehB,OACZ,GAAImB,IAAmBpB,EAAwC,CAGlE,MAAM1C,EAAU4C,EAChBC,EAAY7C,SACND,EAAQC,GACd2D,EAAehB,OACZ,GAAImB,IAAmBpB,EAAwC,CAGlE,MAAM1C,EAAU4C,EAChBC,EAAY7C,GAIR2D,QAHwB5D,EAAQC,KACdP,EAAaK,OAAOF,GAEvB+C,EAGAA,OAInBgB,EAAehB,GAGzB,MAAON,GACL1E,EAAW,KACXgG,EAAehB,EACjB,QACEvN,EAAEqE,UAAU8C,OAEhB,MAAO,CACHoB,WACAgG,gBAuEmCM,CACnCP,EACAL,GAGJ,GAAIM,IAAiBhB,EAAyC,CAG1D,MAAMuB,EAAc,GAKpB,OAJAxQ,OAAOyQ,OAAOD,EAAad,GAC3Bc,EAAYT,iBAAkB,aAExBN,EAAWe,GAGrB,IAAInI,EACJ,GACI4H,IAAiBhB,GACjBgB,IAAiBhB,GACjBgB,IAAiBhB,EAIjB5G,EAAc4B,EAAS5B,gBACpB,CAEH,MACMqI,EADgBhP,EAAE,iBACSC,KAAK,mBAEtC0G,EAAc4B,EAAS4F,WAAaa,GAAc,KAElDrI,IAEA3G,EAAEqE,UAAUC,QACZsC,OAAOC,SAASC,KAAOH,M,gCCpU/B,IAAIsI,EAAc,EAAQ,IAO1B,SAAShL,EAAYiL,GAWjB,OARIlP,EAAE,mBAAmBmE,SAAS,UAAYnE,EAAE,gBAAgBkF,OACtDlF,EAAEkP,GAAK5H,QAAQ,kBAAkBhE,KAAK,sBAAsBrD,KAAK,OAChED,EAAE,uBAAuBkF,QAAUlF,EAAE,gBAAgBkF,OACtDlF,EAAEkP,GAAK5H,QAAQ,mBAAmBhE,KAAK,eAAeC,OAEtDvD,EAAE,uCAAuCC,KAAK,OAW5D,SAASkP,EAAoBD,GACzB,IAAIE,EACJ,GAAIF,GAAOlP,EAAE,cAAckF,OACvBkK,EAAmBpP,EAAEkP,GAAK5H,QAAQ,mBAAmBhE,KAAK,yBACvD,GAAI4L,GAAOlP,EAAE,mBAAmBkF,OAAQ,CAC3C,IAAImK,EAAwBrP,EAAEkP,GAAK5H,QAAQ,iBAAiBhE,KAAK,oBAC7DgM,EAAsBtP,EAAEkP,GAAK5H,QAAQ,kBAAkBhE,KAAK,oBAE5D8L,OADgCG,IAAhCF,EAAsBvO,MACHwO,EAEAD,OAGvBD,EAAmBpP,EAAE,oBAEzB,OAAOoP,EAQX,SAASI,EAAoBN,GACzB,OAAOC,EAAoBD,GAAKpO,MAiNpC,SAAS2O,EAAsBlH,EAAUT,GACrC,IAEI4H,EAFAC,EACA7H,EAAkB8H,QAAQ,gCAAgC1K,OAAS,GAEnEqD,EAASG,QAAQmH,uBAlIzB,SAAqBC,EAAOhI,EAAmBiI,GAE3C,IAAIC,EAAoB,CAAC,SAEzBF,EAAMhQ,SAAQ,SAAU0D,GAChBwM,EAAkBC,QAAQzM,EAAKuE,KAAO,EAvElD,SAA6BvE,EAAMsE,EAAmBiI,GAClDvM,EAAK0M,OAAOpQ,SAAQ,SAAUqQ,GAC1B,IAAIC,EAAatI,EAAkBxE,KAAK,eAAiBE,EAAKuE,GAAK,wBAC/DoI,EAAUtR,MAAQ,MAClBwR,EAAgBD,EAAWxC,SAE3BuC,EAAUG,UACVF,EAAWhM,SAAS,YACpBgM,EAAWG,SAAS,4BAA4BhN,KAAKwM,EAAKS,yBAE1DJ,EAAWjI,YAAY,YACvBiI,EAAWG,SAAS,4BAA4BvI,SAGhDmI,EAAUpM,IACVsM,EAAc7M,KAAK,WAAY2M,EAAUpM,KAEzCsM,EAAcjE,WAAW,YAI7BgE,EAAWjI,YAAY,2BAEvBiI,EAAWhM,SAAS+L,EAAUM,WAAa,aAAe,mBAiDtDC,CAAoBlN,EAAMsE,EAAmBiI,GAhCzD,SAAgCvM,EAAMsE,GAClC,IAAI6I,EAAQ,eAAiBnN,EAAKuE,GAAK,KAClBD,EAAkBxE,KAAKqN,EAAQ,YAAcnN,EAAKuE,GAAK,iBAC7DvE,KAAK,QAASA,EAAKoN,UAElCpN,EAAK0M,OAAOpQ,SAAQ,SAAUqQ,GAC1B,IAAIC,EAAatI,EACZxE,KAAKqN,EAAQ,sBAAwBR,EAAUtR,MAAQ,MAC5DuR,EAAW5M,KAAK,QAAS2M,EAAUpM,KAC9BqI,WAAW,YAEX+D,EAAUM,YACXL,EAAW5M,KAAK,YAAY,MAsB5BqN,CAAuBrN,EAAMsE,MA2HjCgJ,CAAYvI,EAASG,QAAQmH,oBAAqB/H,EAAmBS,EAASc,WAC9EqG,EAA6C,YAAjCnH,EAASG,QAAQqI,YACzBpB,GAA2BD,IAC3B5H,EAAkB8F,OAAO,uBACpB3N,KAAK,MAAOsI,EAASG,QAAQX,IAElCD,EAAkB8F,OAAO,uBACpB3N,KAAK,iBAAkBsI,EAASG,QAAQE,gBA1CzD,SAAwBoI,EAAMlJ,GAC1B,IAAImJ,EAAWnJ,EAAkBxE,KAAK,aACtCtD,EAAEiR,GAAUA,SAAS,WACrB,IAAIC,EAAalR,EAAEiR,GAAUzN,KAAK,MAClCxD,EAAEiR,GAAUjJ,QAAQ9G,OAAO,iIAAmIgQ,EAAa,gHAAkHlR,EAAEiR,GAAUhR,KAAK,QAAU,sDAAwDiR,EAAa,gHAAkHlR,EAAEiR,GAAUhR,KAAK,QAAU,eAC1gB,IAAK,IAAIrC,EAAI,EAAGA,EAAIoT,EAAK9L,OAAQtH,IAC7BoC,EAAE,wCAA0CgR,EAAKpT,GAAGmG,IAAM,oCAAsCiN,EAAKpT,GAAGuT,IAAM,iBAAmBrO,SAASkO,EAAKpT,GAAGwT,MAAO,IAAM,YAAcJ,EAAKpT,GAAGyT,MAAQ,+BAA+BvD,SAAS9N,EAAEiR,GAAU3N,KAAK,oBACtPtD,EAAE,qBAAuBkR,EAAa,oBAAsBtT,EAAI,oBAAoBkQ,SAAS9N,EAAEiR,GAAU3N,KAAK,yBAElHtD,EAAEA,EAAEiR,GAAU3N,KAAK,mBAAmBgO,QAAQlN,SAAS,UACvDpE,EAAEA,EAAEiR,GAAU3N,KAAK,8BAA8BgO,QAAQlN,SAAS,UAC9C,IAAhB4M,EAAK9L,QACLlF,EAAEA,EAAEiR,GAAU3N,KAAK,wDAAwDuK,SAE/E7N,EAAEiR,GAAUA,WACZjR,EAAEA,EAAEiR,GAAU3N,KAAK,yBAAyBE,KAAK,eAAe,GAiChE+N,CADuBhJ,EAASG,QAAQ8I,OAAOC,MACd3J,GAG5B6H,KACoB3P,EAAE,iBAAkB8H,GAAmB5C,OACtDlF,EAAE,iBAAkB8H,GACpB9H,EAAE,mBACO0R,YAAYnJ,EAASG,QAAQiJ,MAAMhO,OAItDmE,EAAkBxE,KAAK,eAAe0E,QAAQrE,KAAK4E,EAASG,QAAQkJ,gBAvIxE,SAA4BrJ,EAAUT,GAClC,IAAI+J,EAAoB,GACpBC,EAAuBvJ,EAASG,QAAQd,aAAamK,SACpDxJ,EAASG,QAAQE,aAGlBkJ,EAAqBhS,SAAQ,SAAUkB,GACnC6Q,GAAqB,YAAc7Q,EAAU,iBAHjD6Q,EAAoB,YAActJ,EAASc,UAAUC,oBAAsB,cAO/EtJ,EAAE8H,GAAmBkK,QAAQ,6BAA8B,CACvDtJ,QAASH,EAASG,QAClBZ,kBAAmBA,EACnB9G,QAAS6Q,EACTxI,UAAWd,EAASc,YA0HxBH,CAAmBX,EAAUT,GAEzB6H,GACoB7H,EAAkBxE,KAAK,yBAC7B0O,QAAQ,kCAAmC,CACrDtJ,QAASH,EAASG,QAASZ,kBAAmBA,IAIlD9H,EAAE,oFAAoFgS,QAAQ,0BAA2B,CACrHtJ,QAASH,EAASG,QAASZ,kBAAmBA,IAC/CkK,QAAQ,uBAAwBzJ,EAASG,SAIhDZ,EAAkBxE,KAAK,oBAAoB0E,QACtCrE,KAhIT,SAA2BsO,GACvB,IAAKA,EACD,MAAO,GAGX,IAAItO,EAAO,GAWX,OATAsO,EAAWnS,SAAQ,SAAUoS,GACC,mBAAtBA,EAAeC,IACfD,EAAeD,WAAWnS,SAAQ,SAAUsS,GACxCzO,GAAQ,iCAAmCyO,EAAUC,MAAQ,KACvDD,EAAUvT,MAAQ,eAK7B8E,EAgHG2O,CAAkB/J,EAASG,QAAQuJ,aAkCjD,SAASM,EAAgBC,EAAkB1K,GACnC0K,IACAxS,EAAE,QAAQgS,QAAQ,gCACd,CAAEjO,IAAKyO,EAAkB/J,UAAWX,IAExC9H,EAAEuE,KAAK,CACHR,IAAKyO,EACLhO,OAAQ,MACRE,QAAS,SAAUzE,GACfwP,EAAsBxP,EAAM6H,GAlI5C,SAAuB2K,EAAa3K,GAEhCA,EAAkBxE,KAAK,oBAAoB0E,QAAQrE,KAAK8O,GAiI5CC,CAAczS,EAAKyI,QAAQ+J,YAAa3K,GA3BxD,SAA0B6K,EAAY7K,GAClC,GAAIA,EAAkB8F,OAAO,uBAAuB1I,QAAU,EAAG,CAC7D,IAAIuN,EAAcE,EAAWC,KAAI,SAAU/P,GACvC,IAAIyN,EAAWzN,EAASyN,SAAW,aAAe,GAClD,MAAO,kBAAoBzN,EAAShE,MAAQ,gBAAkBgE,EAASkB,IAAM,IACzEuM,EAAW,IAAMzN,EAAShE,MAAQ,eACvCgU,KAAK,IACR1D,EAAoBrH,GAAmBE,QAAQrE,KAAK8O,IAqB5CK,CAAiB7S,EAAKyI,QAAQiK,WAAY7K,GAC1C9H,EAAE,QAAQgS,QAAQ,+BACd,CAAE/R,KAAMA,EAAMwI,UAAWX,IAC7B9H,EAAEqE,UAAU8C,QAEhB6F,MAAO,WACHhN,EAAEqE,UAAU8C,WAqB5B,SAAS4L,EAAUpP,GACf,IAAIqP,EAAQhT,EAAE,SAASkB,OAAOlB,EAAEiT,UAAUtP,IAK1C,MAAO,CAAEO,KAHE8O,EAAM1P,KAAK,4BAGD4P,OAFRF,EAAM1P,KAAK,iBAAiB6P,YAU7C,SAASC,EAAoBnT,GAMzB,IAAIoT,EALJrT,EAAE,eAAeqE,UAAUC,QAEkB,IAAzCtE,EAAE,4BAA4BkF,QAC9BlF,EAAE,4BAA4BoB,SAI9BiS,EADApT,EAAKqT,qBACMrT,EAAKsT,yBAELtT,EAAKuT,yBAGpB,IAAIC,EAAa,0NAIUxT,EAAKyT,cAJf,eAKKzT,EAAK0T,KALV,kBAMQ1T,EAAK2T,QANb,uBAOa3T,EAAK4T,aAPlB,qCASS5T,EAAK6T,SATd,kBAUQ7T,EAAKsT,yBAVb,+BAWqBtT,EAAKqT,qBAX1B,wGAearT,EAAK8T,OAAOC,YAfzB,0QA0BjBhU,EAAE,QAAQkB,OAAOuS,GACjBzT,EAAE,eAAeqE,UAAUC,QAE3BtE,EAAEuE,KAAK,CACHR,IAAKsP,EACL7O,OAAQ,MACRmF,SAAU,OACVjF,QAAS,SAAU6D,GACf,IAAI0L,EAAalB,EAAUxK,EAAS2L,kBACpClU,EAAE,wCAAwCgI,QAC1ChI,EAAE,2CAA2CuD,KAAKgF,EAAS4L,oBAC3DnU,EAAE,0DAA0DuD,KAAKgF,EAAS6L,iBAC1EpU,EAAE,wCAAwC2D,KAAKsQ,EAAW/P,MAC1DlE,EAAE,0CAA0C2D,KAAKsQ,EAAWf,QAC5DlT,EAAE,4BAA4BqD,MAAM,QACpCrD,EAAEqE,UAAU8C,QAEhB6F,MAAO,WACHhN,EAAEqE,UAAU8C,UA2DxB,SAASkN,EAAWvM,GAChB,IAAIwM,EAAUxM,EACTxE,KAAK,mBACLsP,KAAI,WACD,IAAI2B,EAAYvU,EAAEwC,MAAMc,KAAK,mBACzBkR,EAAWD,EAAUzT,MACrB2T,EAAkBF,EAAUjR,KAAK,iBAAmBkR,EAAW,MAC9DvU,KAAK,YACV,MAAO,CACHuM,SAAUxM,EAAEwC,MAAMvC,KAAK,aACvBwU,gBAAiBA,MAEtB1L,UAEP,OAAO2L,KAAKC,UAAUL,GAQ1B,SAASM,EAAqB7Q,GACtBA,GACA/D,EAAEuE,KAAK,CACHR,IAAKA,EACLS,OAAQ,MACRE,QAAS,aAGTsI,MAAO,eAOnBrP,EAAOD,QAAU,CACb6U,gBAAiBA,EACjB9K,QAAS,CACLoN,kBAAmB,SAAU5U,GACzBmT,EAAoBnT,KAI5BmK,6BAA8B,WAC1BpK,EAAE,QAAQsC,GAAG,iBAAkB,4BAA4B,WACvDtC,EAAE,4BAA4BuQ,WAAW/M,KAAK,cAAe,QAC7DxD,EAAE,mCAAmC4L,YAI7CkJ,iCAAkC,WAC9B9U,EAAE,QAAQsC,GAAG,kBAAmB,4BAA4B,WACxDtC,EAAE,4BAA4BuQ,WAAW/M,KAAK,cAAe,aAIrEuR,iCAAkC,WAC9B/U,EAAE,QAAQsC,GAAG,UAAW,4BAA4B,SAAUC,GAC1D,IAAI2I,EAAc,CACdhI,MAAOX,EACP8I,kBAAmB,2BACnBC,qBAAsB,SACtBE,oBAAqB,uBAEzByD,EAAYhE,gBAAgBC,OAIpC8J,eAAgB,WACZhV,EAAEG,UAAUmC,GAAG,QAAS,8BAA8B,SAAUC,GAG5D,GAFAA,EAAEiH,kBAEExJ,EAAEwC,MAAMgB,KAAK,YAAjB,CAGA,IAAIsE,EAAoB9H,EAAEwC,MAAM8E,QAAQ,aACnCQ,EAAkB5C,SACnB4C,EAAoB9H,EAAEwC,MAAM8E,QAAQ,oBAGxCiL,EAAgBvS,EAAEwC,MAAMgB,KAAK,YAAasE,QAIlDmN,gBAAiB,WACbjV,EAAEG,UAAUmC,GAAG,SAAU,6CAA6C,SAAUC,GAC5EA,EAAEiH,iBAEF,IAAI1B,EAAoB9H,EAAEwC,MAAM8E,QAAQ,aACnCQ,EAAkB5C,SACnB4C,EAAoB9H,EAAEwC,MAAM8E,QAAQ,oBAExCiL,EAAgBhQ,EAAE2S,cAAcrW,MAAOiJ,OAI/CF,aAAc,WACV5H,EAAEG,UAAUmC,GAAG,SAAU,oBAAoB,SAAUC,GACnDA,EAAEiH,iBAEF,IAAI1B,EAAoB9H,EAAEwC,MAAM8E,QAAQ,mBACnCQ,EAAkB5C,SACnB4C,EAAoB9H,EAAEwC,MAAM8E,QAAQ,kBAAkBhE,KAAK,uBAGV,IAAjDtD,EAAE,gBAAiB8H,GAAmB5C,QACtCqN,EAAgBvS,EAAEuC,EAAE2S,eAAe5R,KAAK,mBAAmBrD,KAAK,OAC5D6H,OAKhB9E,UAAW,WACPhD,EAAEG,UAAUmC,GAAG,QAAS,iDAAiD,WACrE,IAAIuR,EACA7P,EACAmR,EACAC,EAEJpV,EAAE,QAAQgS,QAAQ,0BAA2BxP,MAEzCxC,EAAE,cAAckF,QAAUlF,EAAEwC,MAAM2B,SAAS,wBAC3CiR,EAAU,GAEVpV,EAAE,mBAAmBqV,MAAK,WACjBrV,EAAEwC,MAAM2B,SAAS,uBAClBiR,EAAQE,KAAK,CACTtR,IAAKhE,EAAEwC,MAAMc,KAAK,eAAeC,OACjCgS,IAAKvV,EAAEwC,MAAMc,KAAK,oBAAoBxC,MACtCwT,QAASD,EAAWrU,EAAEwC,YAIlC2S,EAAUT,KAAKC,UAAUS,IAG7BpR,EAAMC,EAAYjE,EAAEwC,OAEpB,IAAIsF,EAAoB9H,EAAEwC,MAAM8E,QAAQ,mBACnCQ,EAAkB5C,SACnB4C,EAAoB9H,EAAEwC,MAAM8E,QAAQ,sBAAsBhE,KAAK,oBAGnEuQ,EA5RD7T,EAAE,oBAAoBc,MA8RrB,IApKJ0U,EAoKQC,EAAO,CACPzR,IAAKA,EACLmR,QAASA,EACTK,eAvKRA,EAAgB,GACpBxV,EAAE,gBAAgBqV,MAAK,WACnBG,EAAcF,KAAK,CACftR,IAAKhE,EAAEwC,MAAMc,KAAK,eAAeC,OACjCV,SAAUC,SAAS9C,EAAEwC,MAAMc,KAAK,kBAAkBrD,KAAK,YAAa,SAIrEuV,EAActQ,OAASwP,KAAKC,UAAUa,GAAiB,IAgKlD3S,SAAU2M,EAAoBxP,EAAEwC,QAG/BxC,EAAE,gBAAgBkF,SACnBuQ,EAAKnB,QAAUD,EAAWvM,IAG9B9H,EAAEwC,MAAMwP,QAAQ,0BAA2ByD,GACvC5B,GACA7T,EAAEuE,KAAK,CACHR,IAAK8P,EACLrP,OAAQ,OACRvE,KAAMwV,EACN/Q,QAAS,SAAUzE,IAtNvC,SAA2BsI,GACvBvI,EAAE,aAAagS,QAAQ,eAAgBzJ,GACvC,IAAImN,EAAcnN,EAASyE,MAAQ,eAAiB,gBAEhDzE,EAASoN,0BACoD,IAA1DrX,OAAOuB,KAAK0I,EAASoN,0BAA0BzQ,OAClDkO,EAAoB7K,EAASoN,2BAEa,IAAtC3V,EAAE,yBAAyBkF,QAC3BlF,EAAE,QAAQkB,OACN,4CAIRlB,EAAE,yBAAyBkB,OACvB,qBAAuBwU,EAAc,kDACnCnN,EAASvH,QACT,UAGNG,YAAW,WACPnB,EAAE,wBAAwBoB,WAC3B,MAiMawU,CAAkB3V,GAClBD,EAAE,QAAQgS,QAAQ,yBAA0B/R,GAC5CD,EAAEqE,UAAU8C,OACZyN,EAAqB3U,EAAK4V,eAE9B7I,MAAO,WACHhN,EAAEqE,UAAU8C,cAMhC2O,mBAAoB,WAChB9V,EAAEG,UAAUmC,GAAG,QAAS,yBAAyB,WAC7C,IAAIyT,EAAwB/V,EAAEwC,MAAMoN,QAAQ,4BACxC5L,EAAMhE,EAAEwC,MAAMvC,KAAK,OACnB+V,EAAUhW,EAAE,gCAAgCC,KAAK,aACjDgW,EAAenT,SAASiT,EAAsBzS,KAAK,0BAA0BxC,MAAO,IACpFoV,EAAW,EACflW,EAAEqV,KAAKrV,EAAE,oEAAoE,WACzEkW,GAAYlW,EAAEwC,MAAMvC,KAAK,UAE7BiW,GAAYD,EACZ,IAAIE,EAAWJ,EAAsBzS,KAAK,mBAAmBrD,KAAK,aAC9DmW,EAAUL,EAAsBzS,KAAK,mCAAmCrD,KAAK,WACjF,GAAIiW,GAAYF,EAAS,CACrB,IAAIK,EAA2B,2CAEdrS,EAFc,cAGdiS,EAHc,oBAIRE,GAAY,IAJJ,iCAKKC,GAAW,IALhB,sDAQ7BL,EAAsBzS,KAAK,iBAAiBK,OARf,sFAa/B3D,EAAE,qDAAqDkB,OAAOmV,GAC9DrW,EAAE,sBAAsB2D,KAAKuS,GAC7BlW,EAAE,2CAA2CmI,YAAY,qBAEzDnI,EAAE,2CAA2CoE,SAAS,oBAIlEkS,mBAAoB,WAChBtW,EAAEG,UAAUmC,GAAG,QAAS,iBAAiB,WACrCtC,EAAEwC,MAAMpB,SACR,IAAImV,EAAYvW,EAAE,mEACdwW,EAAQ,EACRD,EAAUrR,QACVqR,EAAUlB,MAAK,WACXmB,GAAS1T,SAAS9C,EAAEwC,MAAMvC,KAAK,OAAQ,OAI/CD,EAAE,sBAAsB2D,KAAK6S,GAC7BxW,EAAE,2CAA2CmI,YAAY,oBAGjEsO,4BAA6B,WACzBzW,EAAE,QAAQsC,GAAG,mCAAmC,SAAUC,EAAGgG,GACzDvI,EAAE,8BAA+BuI,EAAST,mBAAmBtE,KAAK,YAC5D+E,EAASG,QAAQE,eAAiBL,EAASG,QAAQG,WACzD,IAAI7E,EAAMuE,EAASG,QAAQX,GAC3B/H,EAAE,8BAA+BuI,EAAST,mBAAmB7H,KAAK,MAAO+D,OAGjF0S,sBAAuB,WACnB1W,EAAEG,UAAUmC,GAAG,QAAS,6BAA6B,WACjD,IAAIyB,EAAM/D,EAAEwC,MAAMvC,KAAK,OACvBD,EAAE,kBAAkBqE,UAAUC,QAC9BtE,EAAEuE,KAAK,CACHR,IAAKA,EACLS,OAAQ,MACRE,QAAS,SAAUf,GACf,IAAIsQ,EAAalB,EAAUpP,GAC3B3D,EAAE,eAAekB,OAAO+S,EAAW/P,MACnClE,EAAE,mCAAmCoB,SACrCpB,EAAE,kBAAkBqE,UAAU8C,QAElC6F,MAAO,WACHhN,EAAE,kBAAkBqE,UAAU8C,cAK9CwP,uBAAwB,WACpB3W,EAAEG,UAAUmC,GAAG,QAAS,uBAAuB,WAC3C,IAAIsU,EAA6B5W,EAAE,8CAC/B6W,EAAc,SACd9S,EAAM/D,EAAE,gCAAgCC,KAAK,gBAC7C6W,EAAa,CACbC,cAAe,IAGnB/W,EAAEqV,KAAKuB,GAA4B,WAC/B,IAAII,EACAlU,SAAS9C,EAAEwC,MACNvC,KAAK,OAAQ,IAElBgX,EAAS,KACTD,EAAY,IACRhX,EAAEwC,MAAMvC,KAAK,aAAeD,EAAEwC,MAAMvC,KAAK,4BACzCgX,EAAS,IACFzK,SAAWxM,EAAEwC,MAAMvC,KAAK,YAC/BgX,EAAO7I,UAAYpO,EAAEwC,MAAMvC,KAAK,OAChCgX,EAAOxC,gBAAkBzU,EAAEwC,MAAMvC,KAAK,0BAE1C6W,EAAWC,cAAczB,KAAK,CAC1BtR,IAAKhE,EAAEwC,MAAMvC,KAAK,OAClBsV,IAAKyB,EACL1C,QAAS,CAAC2C,KAEdH,EAAWZ,SAAWpT,SAAS9C,EAAE,sBAAsB2D,OAAQ,QAKvEkT,GADAA,GADAA,GAAenC,KAAKC,UAAUmC,IACF,SAAW9W,EAAE,gCAAgCC,KAAK,SAClD,YAAcD,EAAE,gCAAgCC,KAAK,WACjFD,EAAEqE,UAAUC,QACZtE,EAAEuE,KAAK,CACHR,IAAKA,EAAM8S,EACXrS,OAAQ,OACRE,QAAS,SAAUzE,GACfD,EAAEqE,UAAU8C,OACRlH,EAAK+M,OACLhN,EAAE,4BAA4BqD,MAAM,QACM,IAAtCrD,EAAE,yBAAyBkF,QAC3BlF,EAAE,QAAQkB,OAAO,4CAErBlB,EAAE,yBAAyBkB,OACvB,gFAEEjB,EAAK8G,aAAe,UAE1B5F,YAAW,WACPnB,EAAE,wBAAwBoB,WAC3B,OAEHpB,EAAE,uCAAuC2D,KAAK1D,GAC9CD,EAAE,yBAAyBmI,YAAY,kBACvCnI,EAAE,4BAA4BqD,MAAM,QAEM,IAAtCrD,EAAE,yBAAyBkF,QAC3BlF,EAAE,QAAQkB,OAAO,4CAErBlB,EAAE,sBAAsB2D,KAAK1D,EAAKiW,UAClClW,EAAE,yBAAyBkB,OACvB,iFAEEjB,EAAKiX,WAAa,UAExB/V,YAAW,WACPnB,EAAE,wBAAwBoB,SACtBpB,EAAE,cAAckF,QAChB2B,SAASsQ,WAEd,QAGXnK,MAAO,WACHhN,EAAEqE,UAAU8C,cAM5BlD,YAAaA,EACbuL,oBAAqBA,EACrBoF,qBAAsBA,I,+BCvzB1BjX,EAAOD,QAAU6O,MAAOxI,EAAK0K,EAAU2I,KACnC,IAAIlT,EACJ,IAAoB,IAAhBkT,EACAlT,EAAOuK,MACJ,CACH,MAAM4I,EAAkB,IAAIC,gBAE5B,IAAK,MAAMC,KAAS9I,EAAS+I,UAAW,CACpC,MAAMrY,EAAMoY,EAAM,GACZ1Y,EAAQ0Y,EAAM,GACpBF,EAAgBnW,OAAO/B,EAAKN,GAEhCqF,EAAOmT,EAEX,MAAM9O,QAAiBkP,MAAM1T,EAAK,CAC9BS,OAAQ,OACRkT,QAAS,CACLC,OAAQ,mBACR,gBAAiB,WACjB,mBAAoB,kBAExBzT,OACA0T,YAAa,gBAEX3X,QAAasI,EAASsP,OAC5B,IAAKtP,EAASuP,GAAI,CACd,GAAI7X,EAAK0G,YACL,OAAO1G,EAGX,MAAM,IAAI8X,MAAMxP,EAAS4E,QAE7B,OAAOlN,I,gCC5BXtC,EAAOD,QAPP,SAAsB6K,EAASyP,IAZ/B,SAAmBC,EAAUC,GACzB,IAAIC,EAAWF,EAAS3U,KAAK4U,GAC7BlY,EAAEkY,GAAUlQ,QAAQrE,KAAKwU,EAASxU,QAclCyU,CAHwBpY,EAAEuI,GACTyP,K,gCCYrBra,EAAOD,QAAU,CACb2a,aAbJ,SAAsBjK,EAAWvL,GAS7B,MANkB,CACdsL,UAFc,GAAGvH,OAAOC,SAASyR,WAAW1R,OAAOC,SAAS0R,SAG5DnK,YACAvL,WACAwL,iBAAiB,M,mBC7BzB1Q,EAAOD,QAAU,EAAQ,K,mBCa0CC,EAAOD,QAGjE,WAAe,aAepB,SAAS8a,EAAWC,GAClB,OAAe,OAARA,GAA+B,iBAARA,GAAoB,gBAAiBA,GAAOA,EAAIC,cAAgBpa,OAGhG,SAASqa,EAAShY,EAAQiY,QACT,IAAXjY,IACFA,EAAS,SAGC,IAARiY,IACFA,EAAM,IAGRta,OAAOuB,KAAK+Y,GAAK9Y,QAAQX,SACI,IAAhBwB,EAAOxB,GAAsBwB,EAAOxB,GAAOyZ,EAAIzZ,GAAcqZ,EAAWI,EAAIzZ,KAASqZ,EAAW7X,EAAOxB,KAASb,OAAOuB,KAAK+Y,EAAIzZ,IAAM+F,OAAS,GACxJyT,EAAShY,EAAOxB,GAAMyZ,EAAIzZ,MAKhC,MAAM0Z,EAAc,CAClB3U,KAAM,GAEN,qBAEA,wBAEA4U,cAAe,CACb,SAEAC,SAAU,IAGZC,cAAa,IACJ,KAGTC,iBAAgB,IACP,GAGTC,eAAc,IACL,KAGTC,YAAW,KACF,CACL,gBAKJC,cAAa,KACJ,CACLjG,SAAU,GACVkG,WAAY,GACZC,MAAO,GAEP,iBAEAC,qBAAoB,IACX,KAMbC,gBAAe,KACN,IAGTC,WAAU,IACD,KAGT5S,SAAU,CACR6S,KAAM,GACNC,KAAM,GACNC,SAAU,GACV9S,KAAM,GACN+S,OAAQ,GACRvB,SAAU,GACVwB,SAAU,GACVvB,OAAQ,KAIZ,SAASwB,IACP,MAAMC,EAA0B,oBAAb7Z,SAA2BA,SAAW,GAEzD,OADAwY,EAASqB,EAAKnB,GACPmB,EAGT,MAAMC,EAAY,CAChB9Z,SAAU0Y,EACVqB,UAAW,CACTC,UAAW,IAEbtT,SAAU,CACR6S,KAAM,GACNC,KAAM,GACNC,SAAU,GACV9S,KAAM,GACN+S,OAAQ,GACRvB,SAAU,GACVwB,SAAU,GACVvB,OAAQ,IAEV6B,QAAS,CACP,iBAEA,cAEA,OAEA,UAGFC,YAAa,WACX,OAAO7X,MAGT,qBAEA,wBAEA8X,iBAAgB,KACP,CACLC,iBAAgB,IACP,KAMb,UAEA,SAEAC,OAAQ,GAER,eAEA,iBAEAC,WAAU,KACD,IAGTC,sBAAsBC,GACM,oBAAfxZ,YACTwZ,IACO,MAGFxZ,WAAWwZ,EAAU,GAG9B,qBAAqB5S,GACO,oBAAf5G,YAIXyZ,aAAa7S,KAKjB,SAAS8S,IACP,MAAMC,EAAwB,oBAAXlU,OAAyBA,OAAS,GAErD,OADA+R,EAASmC,EAAKb,GACPa,EA8BT,MAAMC,UAAaC,MACjB,YAAYC,GACW,iBAAVA,EACTC,MAAMD,IAENC,SAAUD,GAAS,IAnBzB,SAAsBxC,GACpB,MAAM0C,EAAQ1C,EAAI2C,UAClB9c,OAAOC,eAAeka,EAAK,YAAa,CACtCha,IAAG,IACM0c,EAGT,IAAItc,GACFsc,EAAMC,UAAYvc,KAYlBwc,CAAa7Y,QAMnB,SAAS8Y,EAAUC,QACL,IAARA,IACFA,EAAM,IAGR,MAAMC,EAAM,GAQZ,OAPAD,EAAIzb,QAAQ2b,IACNT,MAAMU,QAAQD,GAChBD,EAAIlG,QAAQgG,EAAUG,IAEtBD,EAAIlG,KAAKmG,KAGND,EAGT,SAASG,EAAYJ,EAAKZ,GACxB,OAAOK,MAAMxb,UAAUoc,OAAO7d,KAAKwd,EAAKZ,GA6B1C,SAAS3a,EAAEkY,EAAU2D,GACnB,MAAMjV,EAASiU,IACT1a,EAAW4Z,IACjB,IAAIwB,EAAM,GAEV,IAAKM,GAAW3D,aAAoB6C,EAClC,OAAO7C,EAGT,IAAKA,EACH,OAAO,IAAI6C,EAAKQ,GAGlB,GAAwB,iBAAbrD,EAAuB,CAChC,MAAMvU,EAAOuU,EAAS4D,OAEtB,GAAInY,EAAKsM,QAAQ,MAAQ,GAAKtM,EAAKsM,QAAQ,MAAQ,EAAG,CACpD,IAAI8L,EAAW,MACa,IAAxBpY,EAAKsM,QAAQ,SAAc8L,EAAW,MACd,IAAxBpY,EAAKsM,QAAQ,SAAc8L,EAAW,SACd,IAAxBpY,EAAKsM,QAAQ,QAAwC,IAAxBtM,EAAKsM,QAAQ,SAAc8L,EAAW,MACxC,IAA3BpY,EAAKsM,QAAQ,YAAiB8L,EAAW,SACb,IAA5BpY,EAAKsM,QAAQ,aAAkB8L,EAAW,UAC9C,MAAMC,EAAa7b,EAASiZ,cAAc2C,GAC1CC,EAAWC,UAAYtY,EAEvB,IAAK,IAAI/F,EAAI,EAAGA,EAAIoe,EAAW3C,WAAWnU,OAAQtH,GAAK,EACrD2d,EAAIjG,KAAK0G,EAAW3C,WAAWzb,SAGjC2d,EA7CN,SAAarD,EAAU2D,GACrB,GAAwB,iBAAb3D,EACT,MAAO,CAACA,GAGV,MAAMgE,EAAI,GACJV,EAAMK,EAAQ5C,iBAAiBf,GAErC,IAAK,IAAIta,EAAI,EAAGA,EAAI4d,EAAItW,OAAQtH,GAAK,EACnCse,EAAE5G,KAAKkG,EAAI5d,IAGb,OAAOse,EAiCGC,CAAIjE,EAAS4D,OAAQD,GAAW1b,QAGnC,GAAI+X,EAASkE,UAAYlE,IAAatR,GAAUsR,IAAa/X,EAClEob,EAAIjG,KAAK4C,QACJ,GAAI8C,MAAMU,QAAQxD,GAAW,CAClC,GAAIA,aAAoB6C,EAAM,OAAO7C,EACrCqD,EAAMrD,EAGR,OAAO,IAAI6C,EAlEb,SAAqBQ,GACnB,MAAMc,EAAc,GAEpB,IAAK,IAAIze,EAAI,EAAGA,EAAI2d,EAAIrW,OAAQtH,GAAK,GACE,IAAjCye,EAAYpM,QAAQsL,EAAI3d,KAAYye,EAAY/G,KAAKiG,EAAI3d,IAG/D,OAAOye,EA2DSC,CAAYf,IAG9Bvb,EAAEuc,GAAKxB,EAAKvb,UA4qBZ,MAAMgd,EAAU,CACdpY,SA3qBF,WACE,IAAK,IAAIqY,EAAOC,UAAUxX,OAAQuB,EAAU,IAAIuU,MAAMyB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAClFlW,EAAQkW,GAAQD,UAAUC,GAG5B,MAAMC,EAAatB,EAAU7U,EAAQmM,IAAI3U,GAAKA,EAAE4e,MAAM,OAItD,OAHAra,KAAK1C,QAAQ2b,IACXA,EAAGqB,UAAUC,OAAOH,KAEfpa,MAmqBP2F,YAhqBF,WACE,IAAK,IAAI6U,EAAQN,UAAUxX,OAAQuB,EAAU,IAAIuU,MAAMgC,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACvFxW,EAAQwW,GAASP,UAAUO,GAG7B,MAAML,EAAatB,EAAU7U,EAAQmM,IAAI3U,GAAKA,EAAE4e,MAAM,OAItD,OAHAra,KAAK1C,QAAQ2b,IACXA,EAAGqB,UAAU1b,UAAUwb,KAElBpa,MAwpBP2B,SAxoBF,WACE,IAAK,IAAI+Y,EAAQR,UAAUxX,OAAQuB,EAAU,IAAIuU,MAAMkC,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACvF1W,EAAQ0W,GAAST,UAAUS,GAG7B,MAAMP,EAAatB,EAAU7U,EAAQmM,IAAI3U,GAAKA,EAAE4e,MAAM,OACtD,OAAOlB,EAAYnZ,KAAMiZ,GAChBmB,EAAWhB,OAAOwB,GAAa3B,EAAGqB,UAAUO,SAASD,IAAYlY,OAAS,GAChFA,OAAS,GAioBZ2E,YAtpBF,WACE,IAAK,IAAIyT,EAAQZ,UAAUxX,OAAQuB,EAAU,IAAIuU,MAAMsC,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACvF9W,EAAQ8W,GAASb,UAAUa,GAG7B,MAAMX,EAAatB,EAAU7U,EAAQmM,IAAI3U,GAAKA,EAAE4e,MAAM,OACtDra,KAAK1C,QAAQ2b,IACXmB,EAAW9c,QAAQsd,IACjB3B,EAAGqB,UAAUU,OAAOJ,QA+oBxB5Z,KA/nBF,SAAcsM,EAAOjR,GACnB,GAAyB,IAArB6d,UAAUxX,QAAiC,iBAAV4K,EAEnC,OAAItN,KAAK,GAAWA,KAAK,GAAGib,aAAa3N,QACzC,EAIF,IAAK,IAAIlS,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EACpC,GAAyB,IAArB8e,UAAUxX,OAEZ1C,KAAK5E,GAAG8f,aAAa5N,EAAOjR,QAG5B,IAAK,MAAM8e,KAAY7N,EACrBtN,KAAK5E,GAAG+f,GAAY7N,EAAM6N,GAC1Bnb,KAAK5E,GAAG8f,aAAaC,EAAU7N,EAAM6N,IAK3C,OAAOnb,MA2mBP4J,WAxmBF,SAAoB5I,GAClB,IAAK,IAAI5F,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EACpC4E,KAAK5E,GAAGggB,gBAAgBpa,GAG1B,OAAOhB,MAomBPqb,UAjmBF,SAAmBA,GACjB,IAAK,IAAIjgB,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EACpC4E,KAAK5E,GAAG0b,MAAMuE,UAAYA,EAG5B,OAAOrb,MA6lBPsb,WA1lBF,SAAsBC,GACpB,IAAK,IAAIngB,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EACpC4E,KAAK5E,GAAG0b,MAAM0E,mBAAyC,iBAAbD,EAA2BA,EAAH,KAAkBA,EAGtF,OAAOvb,MAslBPF,GAnlBF,WACE,IAAK,IAAI2b,EAAQvB,UAAUxX,OAAQgZ,EAAO,IAAIlD,MAAMiD,GAAQE,EAAQ,EAAGA,EAAQF,EAAOE,IACpFD,EAAKC,GAASzB,UAAUyB,GAG1B,IAAKC,EAAWC,EAAgBC,EAAUC,GAAWL,EASrD,SAASM,EAAgBjc,GACvB,MAAM5B,EAAS4B,EAAE5B,OACjB,IAAKA,EAAQ,OACb,MAAM8d,EAAYlc,EAAE5B,OAAO+d,eAAiB,GAM5C,GAJID,EAAUxO,QAAQ1N,GAAK,GACzBkc,EAAUE,QAAQpc,GAGhBvC,EAAEW,GAAQ+I,GAAG2U,GAAiBC,EAASM,MAAMje,EAAQ8d,OAAgB,CACvE,MAAM7O,EAAU5P,EAAEW,GAAQiP,UAE1B,IAAK,IAAIiP,EAAI,EAAGA,EAAIjP,EAAQ1K,OAAQ2Z,GAAK,EACnC7e,EAAE4P,EAAQiP,IAAInV,GAAG2U,IAAiBC,EAASM,MAAMhP,EAAQiP,GAAIJ,IAKvE,SAASK,EAAYvc,GACnB,MAAMkc,EAAYlc,GAAKA,EAAE5B,QAAS4B,EAAE5B,OAAO+d,eAAsB,GAE7DD,EAAUxO,QAAQ1N,GAAK,GACzBkc,EAAUE,QAAQpc,GAGpB+b,EAASM,MAAMpc,KAAMic,GAhCA,mBAAZP,EAAK,MACbE,EAAWE,EAAUC,GAAWL,EACjCG,OAAiB9O,GAGdgP,IAASA,GAAU,GA8BxB,MAAMQ,EAASX,EAAUvB,MAAM,KAC/B,IAAImC,EAEJ,IAAK,IAAIphB,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EAAG,CACvC,MAAM6d,EAAKjZ,KAAK5E,GAEhB,GAAKygB,EAaH,IAAKW,EAAI,EAAGA,EAAID,EAAO7Z,OAAQ8Z,GAAK,EAAG,CACrC,MAAM9b,EAAQ6b,EAAOC,GAChBvD,EAAGwD,oBAAmBxD,EAAGwD,kBAAoB,IAC7CxD,EAAGwD,kBAAkB/b,KAAQuY,EAAGwD,kBAAkB/b,GAAS,IAChEuY,EAAGwD,kBAAkB/b,GAAOoS,KAAK,CAC/BgJ,WACAY,cAAeV,IAEjB/C,EAAG0D,iBAAiBjc,EAAOsb,EAAiBD,QApB9C,IAAKS,EAAI,EAAGA,EAAID,EAAO7Z,OAAQ8Z,GAAK,EAAG,CACrC,MAAM9b,EAAQ6b,EAAOC,GAChBvD,EAAG2D,gBAAe3D,EAAG2D,cAAgB,IACrC3D,EAAG2D,cAAclc,KAAQuY,EAAG2D,cAAclc,GAAS,IACxDuY,EAAG2D,cAAclc,GAAOoS,KAAK,CAC3BgJ,WACAY,cAAeJ,IAEjBrD,EAAG0D,iBAAiBjc,EAAO4b,EAAaP,IAiB9C,OAAO/b,MA0gBP6c,IAvgBF,WACE,IAAK,IAAIC,EAAQ5C,UAAUxX,OAAQgZ,EAAO,IAAIlD,MAAMsE,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFrB,EAAKqB,GAAS7C,UAAU6C,GAG1B,IAAKnB,EAAWC,EAAgBC,EAAUC,GAAWL,EAE9B,mBAAZA,EAAK,MACbE,EAAWE,EAAUC,GAAWL,EACjCG,OAAiB9O,GAGdgP,IAASA,GAAU,GACxB,MAAMQ,EAASX,EAAUvB,MAAM,KAE/B,IAAK,IAAIjf,EAAI,EAAGA,EAAImhB,EAAO7Z,OAAQtH,GAAK,EAAG,CACzC,MAAMsF,EAAQ6b,EAAOnhB,GAErB,IAAK,IAAIohB,EAAI,EAAGA,EAAIxc,KAAK0C,OAAQ8Z,GAAK,EAAG,CACvC,MAAMvD,EAAKjZ,KAAKwc,GAChB,IAAIQ,EAQJ,IANKnB,GAAkB5C,EAAG2D,cACxBI,EAAW/D,EAAG2D,cAAclc,GACnBmb,GAAkB5C,EAAGwD,oBAC9BO,EAAW/D,EAAGwD,kBAAkB/b,IAG9Bsc,GAAYA,EAASta,OACvB,IAAK,IAAI2Z,EAAIW,EAASta,OAAS,EAAG2Z,GAAK,EAAGA,GAAK,EAAG,CAChD,MAAMY,EAAUD,EAASX,GAErBP,GAAYmB,EAAQnB,WAAaA,GAG1BA,GAAYmB,EAAQnB,UAAYmB,EAAQnB,SAASoB,WAAaD,EAAQnB,SAASoB,YAAcpB,GAFtG7C,EAAGkE,oBAAoBzc,EAAOuc,EAAQP,cAAeX,GACrDiB,EAASI,OAAOf,EAAG,IAITP,IACV7C,EAAGkE,oBAAoBzc,EAAOuc,EAAQP,cAAeX,GACrDiB,EAASI,OAAOf,EAAG,MAO7B,OAAOrc,MAydPwP,QAtdF,WACE,MAAMpL,EAASiU,IAEf,IAAK,IAAIgF,EAAQnD,UAAUxX,OAAQgZ,EAAO,IAAIlD,MAAM6E,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpF5B,EAAK4B,GAASpD,UAAUoD,GAG1B,MAAMf,EAASb,EAAK,GAAGrB,MAAM,KACvB4B,EAAYP,EAAK,GAEvB,IAAK,IAAItgB,EAAI,EAAGA,EAAImhB,EAAO7Z,OAAQtH,GAAK,EAAG,CACzC,MAAMsF,EAAQ6b,EAAOnhB,GAErB,IAAK,IAAIohB,EAAI,EAAGA,EAAIxc,KAAK0C,OAAQ8Z,GAAK,EAAG,CACvC,MAAMvD,EAAKjZ,KAAKwc,GAEhB,GAAIpY,EAAOyT,YAAa,CACtB,MAAM0F,EAAM,IAAInZ,EAAOyT,YAAYnX,EAAO,CACxC5C,OAAQme,EACRuB,SAAS,EACTC,YAAY,IAEdxE,EAAGiD,cAAgBR,EAAKtC,OAAO,CAAC3b,EAAMigB,IAAcA,EAAY,GAChEzE,EAAG0E,cAAcJ,GACjBtE,EAAGiD,cAAgB,UACZjD,EAAGiD,gBAKhB,OAAOlc,MAybP4d,cAtbF,SAAyBzF,GACvB,MAAM0F,EAAM7d,KAYZ,OAJImY,GACF0F,EAAI/d,GAAG,iBAPT,SAASge,EAAa/d,GAChBA,EAAE5B,SAAW6B,OACjBmY,EAAS5c,KAAKyE,KAAMD,GACpB8d,EAAIhB,IAAI,gBAAiBiB,OAOpB9d,MA0aP+d,WAvaF,SAAoBC,GAClB,GAAIhe,KAAK0C,OAAS,EAAG,CACnB,GAAIsb,EAAgB,CAClB,MAAMC,EAASje,KAAKie,SACpB,OAAOje,KAAK,GAAGke,YAAcC,WAAWF,EAAOlG,iBAAiB,iBAAmBoG,WAAWF,EAAOlG,iBAAiB,gBAGxH,OAAO/X,KAAK,GAAGke,YAGjB,OAAO,MA8ZPE,YA3ZF,SAAqBJ,GACnB,GAAIhe,KAAK0C,OAAS,EAAG,CACnB,GAAIsb,EAAgB,CAClB,MAAMC,EAASje,KAAKie,SACpB,OAAOje,KAAK,GAAGqe,aAAeF,WAAWF,EAAOlG,iBAAiB,eAAiBoG,WAAWF,EAAOlG,iBAAiB,kBAGvH,OAAO/X,KAAK,GAAGqe,aAGjB,OAAO,MAkZPJ,OA3XF,WACE,MAAM7Z,EAASiU,IACf,OAAIrY,KAAK,GAAWoE,EAAO0T,iBAAiB9X,KAAK,GAAI,MAC9C,IAyXPse,OAhZF,WACE,GAAIte,KAAK0C,OAAS,EAAG,CACnB,MAAM0B,EAASiU,IACT1a,EAAW4Z,IACX0B,EAAKjZ,KAAK,GACVue,EAAMtF,EAAGuF,wBACT9c,EAAO/D,EAAS+D,KAChB+c,EAAYxF,EAAGwF,WAAa/c,EAAK+c,WAAa,EAC9CC,EAAazF,EAAGyF,YAAchd,EAAKgd,YAAc,EACjDC,EAAY1F,IAAO7U,EAASA,EAAOwa,QAAU3F,EAAG0F,UAChDE,EAAa5F,IAAO7U,EAASA,EAAO0a,QAAU7F,EAAG4F,WACvD,MAAO,CACLE,IAAKR,EAAIQ,IAAMJ,EAAYF,EAC3BO,KAAMT,EAAIS,KAAOH,EAAaH,GAIlC,OAAO,MAgYPtd,IAvXF,SAAa6d,EAAO5iB,GAClB,MAAM+H,EAASiU,IACf,IAAIjd,EAEJ,GAAyB,IAArB8e,UAAUxX,OAAc,CAC1B,GAAqB,iBAAVuc,EAGJ,CAEL,IAAK7jB,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EAChC,IAAK,MAAM+P,KAAQ8T,EACjBjf,KAAK5E,GAAG0b,MAAM3L,GAAQ8T,EAAM9T,GAIhC,OAAOnL,KATP,GAAIA,KAAK,GAAI,OAAOoE,EAAO0T,iBAAiB9X,KAAK,GAAI,MAAM+X,iBAAiBkH,GAahF,GAAyB,IAArB/E,UAAUxX,QAAiC,iBAAVuc,EAAoB,CAEvD,IAAK7jB,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EAChC4E,KAAK5E,GAAG0b,MAAMmI,GAAS5iB,EAGzB,OAAO2D,KAGT,OAAOA,MA2VP6S,KAxVF,SAAcsF,GACZ,OAAKA,GACLnY,KAAK1C,QAAQ,CAAC2b,EAAIrK,KAChBuJ,EAASiE,MAAMnD,EAAI,CAACA,EAAIrK,MAEnB5O,MAJeA,MAwVtBmB,KA5UF,SAAcA,GACZ,QAAoB,IAATA,EACT,OAAOnB,KAAK,GAAKA,KAAK,GAAGyZ,UAAY,KAGvC,IAAK,IAAIre,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EACpC4E,KAAK5E,GAAGqe,UAAYtY,EAGtB,OAAOnB,MAoUPe,KAjUF,SAAcA,GACZ,QAAoB,IAATA,EACT,OAAOf,KAAK,GAAKA,KAAK,GAAGkf,YAAY5F,OAAS,KAGhD,IAAK,IAAIle,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EACpC4E,KAAK5E,GAAG8jB,YAAcne,EAGxB,OAAOf,MAyTPkH,GAtTF,SAAYwO,GACV,MAAMtR,EAASiU,IACT1a,EAAW4Z,IACX0B,EAAKjZ,KAAK,GAChB,IAAImf,EACA/jB,EACJ,IAAK6d,QAA0B,IAAbvD,EAA0B,OAAO,EAEnD,GAAwB,iBAAbA,EAAuB,CAChC,GAAIuD,EAAGmG,QAAS,OAAOnG,EAAGmG,QAAQ1J,GAClC,GAAIuD,EAAGoG,sBAAuB,OAAOpG,EAAGoG,sBAAsB3J,GAC9D,GAAIuD,EAAGqG,kBAAmB,OAAOrG,EAAGqG,kBAAkB5J,GAGtD,IAFAyJ,EAAc3hB,EAAEkY,GAEXta,EAAI,EAAGA,EAAI+jB,EAAYzc,OAAQtH,GAAK,EACvC,GAAI+jB,EAAY/jB,KAAO6d,EAAI,OAAO,EAGpC,OAAO,EAGT,GAAIvD,IAAa/X,EACf,OAAOsb,IAAOtb,EAGhB,GAAI+X,IAAatR,EACf,OAAO6U,IAAO7U,EAGhB,GAAIsR,EAASkE,UAAYlE,aAAoB6C,EAAM,CAGjD,IAFA4G,EAAczJ,EAASkE,SAAW,CAAClE,GAAYA,EAE1Cta,EAAI,EAAGA,EAAI+jB,EAAYzc,OAAQtH,GAAK,EACvC,GAAI+jB,EAAY/jB,KAAO6d,EAAI,OAAO,EAGpC,OAAO,EAGT,OAAO,GAgRPrK,MA7QF,WACE,IACIxT,EADAmkB,EAAQvf,KAAK,GAGjB,GAAIuf,EAAO,CAGT,IAFAnkB,EAAI,EAEuC,QAAnCmkB,EAAQA,EAAMC,kBACG,IAAnBD,EAAM3F,WAAgBxe,GAAK,GAGjC,OAAOA,IAmQT4K,GA7PF,SAAY4I,GACV,QAAqB,IAAVA,EAAuB,OAAO5O,KACzC,MAAM0C,EAAS1C,KAAK0C,OAEpB,GAAIkM,EAAQlM,EAAS,EACnB,OAAOlF,EAAE,IAGX,GAAIoR,EAAQ,EAAG,CACb,MAAM6Q,EAAc/c,EAASkM,EAC7B,OAA4BpR,EAAxBiiB,EAAc,EAAY,GACrB,CAACzf,KAAKyf,KAGjB,OAAOjiB,EAAE,CAACwC,KAAK4O,MAgPflQ,OA7OF,WACE,IAAIghB,EACJ,MAAM/hB,EAAW4Z,IAEjB,IAAK,IAAI8E,EAAI,EAAGA,EAAInC,UAAUxX,OAAQ2Z,GAAK,EAAG,CAC5CqD,EAAWrD,EAAI,GAAKnC,UAAUxX,QAAU2Z,OAAItP,EAAYmN,UAAUmC,GAElE,IAAK,IAAIjhB,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EACpC,GAAwB,iBAAbskB,EAAuB,CAChC,MAAMC,EAAUhiB,EAASiZ,cAAc,OAGvC,IAFA+I,EAAQlG,UAAYiG,EAEbC,EAAQC,YACb5f,KAAK5E,GAAGykB,YAAYF,EAAQC,iBAEzB,GAAIF,aAAoBnH,EAC7B,IAAK,IAAIiE,EAAI,EAAGA,EAAIkD,EAAShd,OAAQ8Z,GAAK,EACxCxc,KAAK5E,GAAGykB,YAAYH,EAASlD,SAG/Bxc,KAAK5E,GAAGykB,YAAYH,GAK1B,OAAO1f,MAqNP8f,QAlNF,SAAiBJ,GACf,MAAM/hB,EAAW4Z,IACjB,IAAInc,EACAohB,EAEJ,IAAKphB,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EAChC,GAAwB,iBAAbskB,EAAuB,CAChC,MAAMC,EAAUhiB,EAASiZ,cAAc,OAGvC,IAFA+I,EAAQlG,UAAYiG,EAEflD,EAAImD,EAAQ9I,WAAWnU,OAAS,EAAG8Z,GAAK,EAAGA,GAAK,EACnDxc,KAAK5E,GAAG2kB,aAAaJ,EAAQ9I,WAAW2F,GAAIxc,KAAK5E,GAAGyb,WAAW,SAE5D,GAAI6I,aAAoBnH,EAC7B,IAAKiE,EAAI,EAAGA,EAAIkD,EAAShd,OAAQ8Z,GAAK,EACpCxc,KAAK5E,GAAG2kB,aAAaL,EAASlD,GAAIxc,KAAK5E,GAAGyb,WAAW,SAGvD7W,KAAK5E,GAAG2kB,aAAaL,EAAU1f,KAAK5E,GAAGyb,WAAW,IAItD,OAAO7W,MA6LPggB,KA1LF,SAActK,GACZ,OAAI1V,KAAK0C,OAAS,EACZgT,EACE1V,KAAK,GAAGigB,oBAAsBziB,EAAEwC,KAAK,GAAGigB,oBAAoB/Y,GAAGwO,GAC1DlY,EAAE,CAACwC,KAAK,GAAGigB,qBAGbziB,EAAE,IAGPwC,KAAK,GAAGigB,mBAA2BziB,EAAE,CAACwC,KAAK,GAAGigB,qBAC3CziB,EAAE,IAGJA,EAAE,KA6KT0iB,QA1KF,SAAiBxK,GACf,MAAMyK,EAAU,GAChB,IAAIlH,EAAKjZ,KAAK,GACd,IAAKiZ,EAAI,OAAOzb,EAAE,IAElB,KAAOyb,EAAGgH,oBAAoB,CAC5B,MAAMD,EAAO/G,EAAGgH,mBAEZvK,EACElY,EAAEwiB,GAAM9Y,GAAGwO,IAAWyK,EAAQrN,KAAKkN,GAClCG,EAAQrN,KAAKkN,GAEpB/G,EAAK+G,EAGP,OAAOxiB,EAAE2iB,IA4JTC,KAzJF,SAAc1K,GACZ,GAAI1V,KAAK0C,OAAS,EAAG,CACnB,MAAMuW,EAAKjZ,KAAK,GAEhB,OAAI0V,EACEuD,EAAGoH,wBAA0B7iB,EAAEyb,EAAGoH,wBAAwBnZ,GAAGwO,GACxDlY,EAAE,CAACyb,EAAGoH,yBAGR7iB,EAAE,IAGPyb,EAAGoH,uBAA+B7iB,EAAE,CAACyb,EAAGoH,yBACrC7iB,EAAE,IAGX,OAAOA,EAAE,KA0IT8iB,QAvIF,SAAiB5K,GACf,MAAM6K,EAAU,GAChB,IAAItH,EAAKjZ,KAAK,GACd,IAAKiZ,EAAI,OAAOzb,EAAE,IAElB,KAAOyb,EAAGoH,wBAAwB,CAChC,MAAMD,EAAOnH,EAAGoH,uBAEZ3K,EACElY,EAAE4iB,GAAMlZ,GAAGwO,IAAW6K,EAAQzN,KAAKsN,GAClCG,EAAQzN,KAAKsN,GAEpBnH,EAAKmH,EAGP,OAAO5iB,EAAE+iB,IAyHTnV,OAtHF,SAAgBsK,GACd,MAAMtI,EAAU,GAEhB,IAAK,IAAIhS,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EACT,OAAvB4E,KAAK5E,GAAGolB,aACN9K,EACElY,EAAEwC,KAAK5E,GAAGolB,YAAYtZ,GAAGwO,IAAWtI,EAAQ0F,KAAK9S,KAAK5E,GAAGolB,YAE7DpT,EAAQ0F,KAAK9S,KAAK5E,GAAGolB,aAK3B,OAAOhjB,EAAE4P,IA0GTA,QAvGF,SAAiBsI,GACf,MAAMtI,EAAU,GAEhB,IAAK,IAAIhS,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EAAG,CACvC,IAAIgQ,EAASpL,KAAK5E,GAAGolB,WAErB,KAAOpV,GACDsK,EACElY,EAAE4N,GAAQlE,GAAGwO,IAAWtI,EAAQ0F,KAAK1H,GAEzCgC,EAAQ0F,KAAK1H,GAGfA,EAASA,EAAOoV,WAIpB,OAAOhjB,EAAE4P,IAuFTtI,QApFF,SAAiB4Q,GACf,IAAI5Q,EAAU9E,KAEd,YAAwB,IAAb0V,EACFlY,EAAE,KAGNsH,EAAQoC,GAAGwO,KACd5Q,EAAUA,EAAQsI,QAAQsI,GAAU1P,GAAG,IAGlClB,IA0EPhE,KAvEF,SAAc4U,GACZ,MAAM+K,EAAgB,GAEtB,IAAK,IAAIrlB,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EAAG,CACvC,MAAMslB,EAAQ1gB,KAAK5E,GAAGqb,iBAAiBf,GAEvC,IAAK,IAAI8G,EAAI,EAAGA,EAAIkE,EAAMhe,OAAQ8Z,GAAK,EACrCiE,EAAc3N,KAAK4N,EAAMlE,IAI7B,OAAOhf,EAAEijB,IA6DT9P,SA1DF,SAAkB+E,GAChB,MAAM/E,EAAW,GAEjB,IAAK,IAAIvV,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EAAG,CACvC,MAAMyb,EAAa7W,KAAK5E,GAAGuV,SAE3B,IAAK,IAAI6L,EAAI,EAAGA,EAAI3F,EAAWnU,OAAQ8Z,GAAK,EACrC9G,IAAYlY,EAAEqZ,EAAW2F,IAAItV,GAAGwO,IACnC/E,EAASmC,KAAK+D,EAAW2F,IAK/B,OAAOhf,EAAEmT,IA8CTyI,OAjWF,SAAgBjB,GAEd,OAAO3a,EADQ2b,EAAYnZ,KAAMmY,KAiWjCvZ,OA5CF,WACE,IAAK,IAAIxD,EAAI,EAAGA,EAAI4E,KAAK0C,OAAQtH,GAAK,EAChC4E,KAAK5E,GAAGolB,YAAYxgB,KAAK5E,GAAGolB,WAAWG,YAAY3gB,KAAK5E,IAG9D,OAAO4E,OA+DT,SAAS4gB,EAASzI,EAAU0I,GAK1B,YAJc,IAAVA,IACFA,EAAQ,GAGHliB,WAAWwZ,EAAU0I,GAG9B,SAASC,IACP,OAAOC,KAAKD,MAsBd,SAASE,EAAa/H,EAAIgI,QACX,IAATA,IACFA,EAAO,KAGT,MAAM7c,EAASiU,IACf,IAAI6I,EACAC,EACAC,EACJ,MAAMC,EA5BR,SAA4BpI,GAC1B,MAAM7U,EAASiU,IACf,IAAIvB,EAcJ,OAZI1S,EAAO0T,mBACThB,EAAQ1S,EAAO0T,iBAAiBmB,EAAI,QAGjCnC,GAASmC,EAAGqI,eACfxK,EAAQmC,EAAGqI,cAGRxK,IACHA,EAAQmC,EAAGnC,OAGNA,EAYUyK,CAAmBtI,GA+BpC,OA7BI7U,EAAOod,iBACTL,EAAeE,EAAShG,WAAagG,EAASI,gBAE1CN,EAAa9G,MAAM,KAAK3X,OAAS,IACnCye,EAAeA,EAAa9G,MAAM,MAAMjK,IAAIsJ,GAAKA,EAAEgI,QAAQ,IAAK,MAAMrR,KAAK,OAK7E+Q,EAAkB,IAAIhd,EAAOod,gBAAiC,SAAjBL,EAA0B,GAAKA,KAE5EC,EAAkBC,EAASM,cAAgBN,EAASO,YAAcP,EAASQ,aAAeR,EAASS,aAAeT,EAAShG,WAAagG,EAAStJ,iBAAiB,aAAa2J,QAAQ,aAAc,sBACrMR,EAASE,EAAgBW,WAAW1H,MAAM,MAG/B,MAAT4G,IAE0BE,EAAxB/c,EAAOod,gBAAgCJ,EAAgBY,IAChC,KAAlBd,EAAOxe,OAA8Byb,WAAW+C,EAAO,KAC5C/C,WAAW+C,EAAO,KAG3B,MAATD,IAE0BE,EAAxB/c,EAAOod,gBAAgCJ,EAAgBa,IAChC,KAAlBf,EAAOxe,OAA8Byb,WAAW+C,EAAO,KAC5C/C,WAAW+C,EAAO,KAGjCC,GAAgB,EAGzB,SAASe,EAASrmB,GAChB,MAAoB,iBAANA,GAAwB,OAANA,GAAcA,EAAEqa,aAAkE,WAAnDpa,OAAOkB,UAAU+kB,SAASxmB,KAAKM,GAAGiI,MAAM,GAAI,GAG7G,SAASqe,EAAOC,GAEd,MAAsB,oBAAXhe,aAAwD,IAAvBA,OAAOie,YAC1CD,aAAgBC,YAGlBD,IAA2B,IAAlBA,EAAKxI,UAAoC,KAAlBwI,EAAKxI,UAG9C,SAASha,IACP,MAAM0iB,EAAKxmB,OAAOoe,UAAUxX,QAAU,OAAIqK,EAAYmN,UAAU,IAC1DqI,EAAW,CAAC,YAAa,cAAe,aAE9C,IAAK,IAAInnB,EAAI,EAAGA,EAAI8e,UAAUxX,OAAQtH,GAAK,EAAG,CAC5C,MAAMonB,EAAapnB,EAAI,GAAK8e,UAAUxX,QAAUtH,OAAI2R,EAAYmN,UAAU9e,GAE1E,GAAIonB,UAAoDL,EAAOK,GAAa,CAC1E,MAAMC,EAAY3mB,OAAOuB,KAAKvB,OAAO0mB,IAAapJ,OAAOzc,GAAO4lB,EAAS9U,QAAQ9Q,GAAO,GAExF,IAAK,IAAI+lB,EAAY,EAAGC,EAAMF,EAAU/f,OAAQggB,EAAYC,EAAKD,GAAa,EAAG,CAC/E,MAAME,EAAUH,EAAUC,GACpBG,EAAO/mB,OAAOgnB,yBAAyBN,EAAYI,QAE5C7V,IAAT8V,GAAsBA,EAAK7mB,aACzBkmB,EAASI,EAAGM,KAAaV,EAASM,EAAWI,IAC3CJ,EAAWI,GAASG,WACtBT,EAAGM,GAAWJ,EAAWI,GAEzBhjB,EAAO0iB,EAAGM,GAAUJ,EAAWI,KAEvBV,EAASI,EAAGM,KAAaV,EAASM,EAAWI,KACvDN,EAAGM,GAAW,GAEVJ,EAAWI,GAASG,WACtBT,EAAGM,GAAWJ,EAAWI,GAEzBhjB,EAAO0iB,EAAGM,GAAUJ,EAAWI,KAGjCN,EAAGM,GAAWJ,EAAWI,MAOnC,OAAON,EAGT,SAASU,EAAe/J,EAAIgK,EAASC,GACnCjK,EAAGnC,MAAMqM,YAAYF,EAASC,GAGhC,SAASE,EAAqBC,GAC5B,IAAI,OACF3jB,EAAM,eACN4jB,EAAc,KACdC,GACEF,EACJ,MAAMjf,EAASiU,IACTmL,GAAiB9jB,EAAO+jB,UAC9B,IACIC,EADAC,EAAY,KAEhB,MAAMpI,EAAW7b,EAAOkkB,OAAOvkB,MAC/BK,EAAOmkB,UAAU/M,MAAMgN,eAAiB,OACxC1f,EAAO2f,qBAAqBrkB,EAAOskB,gBACnC,MAAMC,EAAMX,EAAiBE,EAAgB,OAAS,OAEhDU,EAAe,CAACC,EAAShmB,IACd,SAAR8lB,GAAkBE,GAAWhmB,GAAkB,SAAR8lB,GAAkBE,GAAWhmB,EAGvEimB,EAAU,KACdV,GAAO,IAAI3C,MAAOsD,UAEA,OAAdV,IACFA,EAAYD,GAGd,MAAMY,EAAWC,KAAKC,IAAID,KAAKE,KAAKf,EAAOC,GAAapI,EAAU,GAAI,GAChEmJ,EAAe,GAAMH,KAAKI,IAAIL,EAAWC,KAAKK,IAAM,EAC1D,IAAIC,EAAkBrB,EAAgBkB,GAAgBpB,EAAiBE,GAUvE,GARIU,EAAaW,EAAiBvB,KAChCuB,EAAkBvB,GAGpB5jB,EAAOmkB,UAAUiB,SAAS,CACxB,CAACvB,GAAOsB,IAGNX,EAAaW,EAAiBvB,GAUhC,OATA5jB,EAAOmkB,UAAU/M,MAAMiO,SAAW,SAClCrlB,EAAOmkB,UAAU/M,MAAMgN,eAAiB,GACxCnlB,WAAW,KACTe,EAAOmkB,UAAU/M,MAAMiO,SAAW,GAClCrlB,EAAOmkB,UAAUiB,SAAS,CACxB,CAACvB,GAAOsB,WAGZzgB,EAAO2f,qBAAqBrkB,EAAOskB,gBAIrCtkB,EAAOskB,eAAiB5f,EAAO8T,sBAAsBkM,IAGvDA,IAGF,IAAIY,EAuCAC,EA2DAC,EAnEJ,SAASC,IAKP,OAJKH,IACHA,EA/BJ,WACE,MAAM5gB,EAASiU,IACT1a,EAAW4Z,IACjB,MAAO,CACL6N,aAAcznB,EAAS0nB,iBAAmB,mBAAoB1nB,EAAS0nB,gBAAgBvO,MACvFwO,SAAU,iBAAkBlhB,GAAUA,EAAOmhB,eAAiB5nB,aAAoByG,EAAOmhB,eACzFC,gBAAiB,WACf,IAAIC,GAAkB,EAEtB,IACE,MAAMC,EAAO5pB,OAAOC,eAAe,GAAI,UAAW,CAEhD,MACE0pB,GAAkB,KAItBrhB,EAAOuY,iBAAiB,sBAAuB,KAAM+I,GACrD,MAAO3lB,IAGT,OAAO0lB,EAfQ,GAiBjBE,SACS,mBAAoBvhB,GAOnBwhB,IAGLZ,EAkDT,SAASa,EAAUC,GASjB,YARkB,IAAdA,IACFA,EAAY,IAGTb,IACHA,EAnDJ,SAAoBc,GAClB,IAAI,UACFpO,QACY,IAAVoO,EAAmB,GAAKA,EAC5B,MAAMf,EAAUG,IACV/gB,EAASiU,IACT2N,EAAW5hB,EAAOsT,UAAUsO,SAC5BC,EAAKtO,GAAavT,EAAOsT,UAAUC,UACnCuO,EAAS,CACbC,KAAK,EACLC,SAAS,GAELC,EAAcjiB,EAAO4T,OAAOsO,MAC5BC,EAAeniB,EAAO4T,OAAOwO,OAC7BJ,EAAUH,EAAGQ,MAAM,+BAEzB,IAAIC,EAAOT,EAAGQ,MAAM,wBACpB,MAAME,EAAOV,EAAGQ,MAAM,2BAChBG,GAAUF,GAAQT,EAAGQ,MAAM,8BAC3BI,EAAuB,UAAbb,EAChB,IAAIc,EAAqB,aAAbd,EAsBZ,OAlBKU,GAAQI,GAAS9B,EAAQM,OAFV,CAAC,YAAa,YAAa,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAExG7X,QAAQ,GAAG4Y,KAAeE,MAAmB,IAC9FG,EAAOT,EAAGQ,MAAM,uBACXC,IAAMA,EAAO,CAAC,EAAG,EAAG,WACzBI,GAAQ,GAINV,IAAYS,IACdX,EAAOa,GAAK,UACZb,EAAOE,SAAU,IAGfM,GAAQE,GAAUD,KACpBT,EAAOa,GAAK,MACZb,EAAOC,KAAM,GAIRD,EASUc,CAAWlB,IAGrBb,EAmBT,SAASgC,IAKP,OAJK/B,IACHA,EAhBJ,WACE,MAAM9gB,EAASiU,IAOf,MAAO,CACL6O,SANF,WACE,MAAMjB,EAAK7hB,EAAOsT,UAAUC,UAAUwP,cACtC,OAAOlB,EAAGxY,QAAQ,WAAa,GAAKwY,EAAGxY,QAAQ,UAAY,GAAKwY,EAAGxY,QAAQ,WAAa,EAI9EyZ,GACVE,UAAW,+CAA+CC,KAAKjjB,EAAOsT,UAAUC,YAMtE2P,IAGLpC,EAzUTppB,OAAOuB,KAAK2c,GAAS1c,QAAQiqB,IAC3BzrB,OAAOC,eAAeyB,EAAEuc,GAAIwN,EAAY,CACtClrB,MAAO2d,EAAQuN,GACfC,UAAU,MAued,IAAIC,EAAgB,CAClB,GAAGlL,EAAQU,EAASyK,GAClB,MAAMC,EAAO3nB,KACb,IAAK2nB,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,GAAuB,mBAAZ1K,EAAwB,OAAO0K,EAC1C,MAAM3lB,EAAS0lB,EAAW,UAAY,OAKtC,OAJAnL,EAAOlC,MAAM,KAAK/c,QAAQoD,IACnBinB,EAAKC,gBAAgBlnB,KAAQinB,EAAKC,gBAAgBlnB,GAAS,IAChEinB,EAAKC,gBAAgBlnB,GAAOsB,GAAQib,KAE/B0K,GAGT,KAAKpL,EAAQU,EAASyK,GACpB,MAAMC,EAAO3nB,KACb,IAAK2nB,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,GAAuB,mBAAZ1K,EAAwB,OAAO0K,EAE1C,SAASG,IACPH,EAAK9K,IAAIN,EAAQuL,GAEbA,EAAYC,uBACPD,EAAYC,eAGrB,IAAK,IAAI9N,EAAOC,UAAUxX,OAAQgZ,EAAO,IAAIlD,MAAMyB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/EuB,EAAKvB,GAAQD,UAAUC,GAGzB8C,EAAQb,MAAMuL,EAAMjM,GAItB,OADAoM,EAAYC,eAAiB9K,EACtB0K,EAAK7nB,GAAGyc,EAAQuL,EAAaJ,IAGtC,MAAMzK,EAASyK,GACb,MAAMC,EAAO3nB,KACb,IAAK2nB,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,GAAuB,mBAAZ1K,EAAwB,OAAO0K,EAC1C,MAAM3lB,EAAS0lB,EAAW,UAAY,OAMtC,OAJIC,EAAKK,mBAAmBva,QAAQwP,GAAW,GAC7C0K,EAAKK,mBAAmBhmB,GAAQib,GAG3B0K,GAGT,OAAO1K,GACL,MAAM0K,EAAO3nB,KACb,IAAK2nB,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,IAAKA,EAAKK,mBAAoB,OAAOL,EACrC,MAAM/Y,EAAQ+Y,EAAKK,mBAAmBva,QAAQwP,GAM9C,OAJIrO,GAAS,GACX+Y,EAAKK,mBAAmB5K,OAAOxO,EAAO,GAGjC+Y,GAGT,IAAIpL,EAAQU,GACV,MAAM0K,EAAO3nB,KACb,OAAK2nB,EAAKC,iBAAmBD,EAAKE,UAAkBF,EAC/CA,EAAKC,iBACVrL,EAAOlC,MAAM,KAAK/c,QAAQoD,SACD,IAAZuc,EACT0K,EAAKC,gBAAgBlnB,GAAS,GACrBinB,EAAKC,gBAAgBlnB,IAC9BinB,EAAKC,gBAAgBlnB,GAAOpD,QAAQ,CAAC2qB,EAAcrZ,MAC7CqZ,IAAiBhL,GAAWgL,EAAaF,gBAAkBE,EAAaF,iBAAmB9K,IAC7F0K,EAAKC,gBAAgBlnB,GAAO0c,OAAOxO,EAAO,OAK3C+Y,GAZ2BA,GAepC,OACE,MAAMA,EAAO3nB,KACb,IAAK2nB,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,IAAKA,EAAKC,gBAAiB,OAAOD,EAClC,IAAIpL,EACA9e,EACA4b,EAEJ,IAAK,IAAImB,EAAQN,UAAUxX,OAAQgZ,EAAO,IAAIlD,MAAMgC,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFiB,EAAKjB,GAASP,UAAUO,GA4B1B,MAzBuB,iBAAZiB,EAAK,IAAmBlD,MAAMU,QAAQwC,EAAK,KACpDa,EAASb,EAAK,GACdje,EAAOie,EAAK5X,MAAM,EAAG4X,EAAKhZ,QAC1B2W,EAAUsO,IAEVpL,EAASb,EAAK,GAAGa,OACjB9e,EAAOie,EAAK,GAAGje,KACf4b,EAAUqC,EAAK,GAAGrC,SAAWsO,GAG/BlqB,EAAK0e,QAAQ9C,IACOb,MAAMU,QAAQqD,GAAUA,EAASA,EAAOlC,MAAM,MACtD/c,QAAQoD,IACdinB,EAAKK,oBAAsBL,EAAKK,mBAAmBtlB,QACrDilB,EAAKK,mBAAmB1qB,QAAQ2qB,IAC9BA,EAAa7L,MAAM/C,EAAS,CAAC3Y,KAAUjD,MAIvCkqB,EAAKC,iBAAmBD,EAAKC,gBAAgBlnB,IAC/CinB,EAAKC,gBAAgBlnB,GAAOpD,QAAQ2qB,IAClCA,EAAa7L,MAAM/C,EAAS5b,OAI3BkqB,IAu4BX,SAASO,EAAe7E,GACtB,IAAI,OACF3jB,EAAM,aACNyoB,EAAY,UACZC,EAAS,KACTC,GACEhF,EACJ,MAAM,YACJiF,EAAW,cACXC,GACE7oB,EACJ,IAAIukB,EAAMmE,EAQV,GANKnE,IAC8BA,EAA7BqE,EAAcC,EAAqB,OAAgBD,EAAcC,EAAqB,OAAkB,SAG9G7oB,EAAO8oB,KAAK,aAAaH,GAErBF,GAAgBG,IAAgBC,EAAe,CACjD,GAAY,UAARtE,EAEF,YADAvkB,EAAO8oB,KAAK,uBAAuBH,GAIrC3oB,EAAO8oB,KAAK,wBAAwBH,GAExB,SAARpE,EACFvkB,EAAO8oB,KAAK,sBAAsBH,GAElC3oB,EAAO8oB,KAAK,sBAAsBH,IA4pBxC,SAASI,EAAa/nB,GACpB,MAAMhB,EAASM,KACTrC,EAAW4Z,IACXnT,EAASiU,IACT5a,EAAOiC,EAAOgpB,iBACd,OACJ9E,EAAM,QACN+E,EAAO,QACPC,GACElpB,EACJ,IAAKkpB,EAAS,OAEd,GAAIlpB,EAAOmpB,WAAajF,EAAOkF,+BAC7B,QAGGppB,EAAOmpB,WAAajF,EAAOmF,SAAWnF,EAAOxkB,MAChDM,EAAOspB,UAGT,IAAIjpB,EAAIW,EACJX,EAAEkpB,gBAAelpB,EAAIA,EAAEkpB,eAC3B,IAAIC,EAAY1rB,EAAEuC,EAAE5B,QAEpB,GAAiC,YAA7BylB,EAAOuF,oBACJD,EAAUpkB,QAAQpF,EAAOmkB,WAAWnhB,OAAQ,OAInD,GADAjF,EAAK2rB,aAA0B,eAAXrpB,EAAEG,MACjBzC,EAAK2rB,cAAgB,UAAWrpB,GAAiB,IAAZA,EAAEspB,MAAa,OACzD,IAAK5rB,EAAK2rB,cAAgB,WAAYrpB,GAAKA,EAAE2K,OAAS,EAAG,OACzD,GAAIjN,EAAK6rB,WAAa7rB,EAAK8rB,QAAS,OAEpC,MAAMC,IAAyB5F,EAAO6F,gBAA4C,KAA1B7F,EAAO6F,eAEzDC,EAAYhpB,EAAMipB,aAAejpB,EAAMipB,eAAiBjpB,EAAMkpB,KAEhEJ,GAAwBzpB,EAAE5B,QAAU4B,EAAE5B,OAAO0rB,YAAcH,IAC7DR,EAAY1rB,EAAEksB,EAAU,KAG1B,MAAMI,EAAoBlG,EAAOkG,kBAAoBlG,EAAOkG,kBAAoB,IAAIlG,EAAO6F,eACrFM,KAAoBhqB,EAAE5B,SAAU4B,EAAE5B,OAAO0rB,YAE/C,GAAIjG,EAAOoG,YAAcD,EAhE3B,SAAwBrU,EAAU7X,GAiBhC,YAhBa,IAATA,IACFA,EAAOmC,MAGT,SAASiqB,EAAchR,GACrB,IAAKA,GAAMA,IAAO1B,KAAiB0B,IAAOZ,IAAa,OAAO,KAC1DY,EAAGiR,eAAcjR,EAAKA,EAAGiR,cAC7B,MAAMxJ,EAAQzH,EAAGnU,QAAQ4Q,GAEzB,OAAKgL,GAAUzH,EAAGkR,YAIXzJ,GAASuJ,EAAchR,EAAGkR,cAAchT,MAHtC,KAMJ8S,CAAcpsB,GA+CqBusB,CAAeN,EAAmBZ,EAAU,IAAMA,EAAUpkB,QAAQglB,GAAmB,IAE/H,YADApqB,EAAO2qB,YAAa,GAItB,GAAIzG,EAAO0G,eACJpB,EAAUpkB,QAAQ8e,EAAO0G,cAAc,GAAI,OAGlD3B,EAAQ4B,SAAsB,eAAXxqB,EAAEG,KAAwBH,EAAEyqB,cAAc,GAAGC,MAAQ1qB,EAAE0qB,MAC1E9B,EAAQ+B,SAAsB,eAAX3qB,EAAEG,KAAwBH,EAAEyqB,cAAc,GAAGG,MAAQ5qB,EAAE4qB,MAC1E,MAAMC,EAASjC,EAAQ4B,SACjBM,EAASlC,EAAQ+B,SAEjBI,EAAqBlH,EAAOkH,oBAAsBlH,EAAOmH,sBACzDC,EAAqBpH,EAAOoH,oBAAsBpH,EAAOqH,sBAE/D,GAAIH,IAAuBF,GAAUI,GAAsBJ,GAAUxmB,EAAO8mB,WAAaF,GAAqB,CAC5G,GAA2B,YAAvBF,EAGF,OAFApqB,EAAMsG,iBAqBV,GAfAlL,OAAOyQ,OAAO9O,EAAM,CAClB6rB,WAAW,EACXC,SAAS,EACT4B,qBAAqB,EACrBC,iBAAare,EACbse,iBAAate,IAEf4b,EAAQiC,OAASA,EACjBjC,EAAQkC,OAASA,EACjBptB,EAAK6tB,eAAiBxK,IACtBphB,EAAO2qB,YAAa,EACpB3qB,EAAO6rB,aACP7rB,EAAO8rB,oBAAiBze,EACpB6W,EAAO6H,UAAY,IAAGhuB,EAAKiuB,oBAAqB,GAErC,eAAX3rB,EAAEG,KAAuB,CAC3B,IAAI8G,GAAiB,EAEjBkiB,EAAUhiB,GAAGzJ,EAAKkuB,qBACpB3kB,GAAiB,EAEa,WAA1BkiB,EAAU,GAAG3S,WACf9Y,EAAK6rB,WAAY,IAIjB3rB,EAAS2Y,eAAiB9Y,EAAEG,EAAS2Y,eAAepP,GAAGzJ,EAAKkuB,oBAAsBhuB,EAAS2Y,gBAAkB4S,EAAU,IACzHvrB,EAAS2Y,cAAcsV,OAGzB,MAAMC,EAAuB7kB,GAAkBtH,EAAOP,gBAAkBykB,EAAOkI,0BAE1ElI,EAAOmI,gCAAiCF,GAA0B3C,EAAU,GAAG8C,mBAClFjsB,EAAEiH,iBAIFtH,EAAOkkB,OAAOqI,UAAYvsB,EAAOkkB,OAAOqI,SAASrD,SAAWlpB,EAAOusB,UAAYvsB,EAAOmpB,YAAcjF,EAAOmF,SAC7GrpB,EAAOusB,SAASxD,eAGlB/oB,EAAO8oB,KAAK,aAAczoB,GAG5B,SAASmsB,EAAYxrB,GACnB,MAAM/C,EAAW4Z,IACX7X,EAASM,KACTvC,EAAOiC,EAAOgpB,iBACd,OACJ9E,EAAM,QACN+E,EACAwD,aAAcC,EAAG,QACjBxD,GACElpB,EACJ,IAAKkpB,EAAS,OACd,IAAI7oB,EAAIW,EAGR,GAFIX,EAAEkpB,gBAAelpB,EAAIA,EAAEkpB,gBAEtBxrB,EAAK6rB,UAKR,YAJI7rB,EAAK4tB,aAAe5tB,EAAK2tB,aAC3B1rB,EAAO8oB,KAAK,oBAAqBzoB,IAMrC,GAAItC,EAAK2rB,cAA2B,cAAXrpB,EAAEG,KAAsB,OACjD,MAAMmsB,EAAyB,cAAXtsB,EAAEG,MAAwBH,EAAEyqB,gBAAkBzqB,EAAEyqB,cAAc,IAAMzqB,EAAEusB,eAAe,IACnG7B,EAAmB,cAAX1qB,EAAEG,KAAuBmsB,EAAY5B,MAAQ1qB,EAAE0qB,MACvDE,EAAmB,cAAX5qB,EAAEG,KAAuBmsB,EAAY1B,MAAQ5qB,EAAE4qB,MAE7D,GAAI5qB,EAAEwsB,wBAGJ,OAFA5D,EAAQiC,OAASH,OACjB9B,EAAQkC,OAASF,GAInB,IAAKjrB,EAAOP,eAeV,OAdK3B,EAAEuC,EAAE5B,QAAQ+I,GAAGzJ,EAAKkuB,qBACvBjsB,EAAO2qB,YAAa,QAGlB5sB,EAAK6rB,YACPxtB,OAAOyQ,OAAOoc,EAAS,CACrBiC,OAAQH,EACRI,OAAQF,EACRJ,SAAUE,EACVC,SAAUC,IAEZltB,EAAK6tB,eAAiBxK,MAM1B,GAAIrjB,EAAK2rB,cAAgBxF,EAAO4I,sBAAwB5I,EAAOxkB,KAC7D,GAAIM,EAAO+sB,cAET,GAAI9B,EAAQhC,EAAQkC,QAAUnrB,EAAO+jB,WAAa/jB,EAAOgtB,gBAAkB/B,EAAQhC,EAAQkC,QAAUnrB,EAAO+jB,WAAa/jB,EAAOitB,eAG9H,OAFAlvB,EAAK6rB,WAAY,OACjB7rB,EAAK8rB,SAAU,QAGZ,GAAIkB,EAAQ9B,EAAQiC,QAAUlrB,EAAO+jB,WAAa/jB,EAAOgtB,gBAAkBjC,EAAQ9B,EAAQiC,QAAUlrB,EAAO+jB,WAAa/jB,EAAOitB,eACrI,OAIJ,GAAIlvB,EAAK2rB,cAAgBzrB,EAAS2Y,eAC5BvW,EAAE5B,SAAWR,EAAS2Y,eAAiB9Y,EAAEuC,EAAE5B,QAAQ+I,GAAGzJ,EAAKkuB,mBAG7D,OAFAluB,EAAK8rB,SAAU,OACf7pB,EAAO2qB,YAAa,GASxB,GAJI5sB,EAAK0tB,qBACPzrB,EAAO8oB,KAAK,YAAazoB,GAGvBA,EAAEyqB,eAAiBzqB,EAAEyqB,cAAc9nB,OAAS,EAAG,OACnDimB,EAAQ4B,SAAWE,EACnB9B,EAAQ+B,SAAWC,EACnB,MAAMiC,EAAQjE,EAAQ4B,SAAW5B,EAAQiC,OACnCiC,EAAQlE,EAAQ+B,SAAW/B,EAAQkC,OACzC,GAAInrB,EAAOkkB,OAAO6H,WAAalH,KAAKuI,KAAKF,GAAS,EAAIC,GAAS,GAAKntB,EAAOkkB,OAAO6H,UAAW,OAE7F,QAAgC,IAArBhuB,EAAK2tB,YAA6B,CAC3C,IAAI2B,EAEArtB,EAAOstB,gBAAkBrE,EAAQ+B,WAAa/B,EAAQkC,QAAUnrB,EAAO+sB,cAAgB9D,EAAQ4B,WAAa5B,EAAQiC,OACtHntB,EAAK2tB,aAAc,EAGfwB,EAAQA,EAAQC,EAAQA,GAAS,KACnCE,EAA4D,IAA/CxI,KAAK0I,MAAM1I,KAAK2I,IAAIL,GAAQtI,KAAK2I,IAAIN,IAAgBrI,KAAKK,GACvEnnB,EAAK2tB,YAAc1rB,EAAOstB,eAAiBD,EAAanJ,EAAOmJ,WAAa,GAAKA,EAAanJ,EAAOmJ,YAe3G,GAVItvB,EAAK2tB,aACP1rB,EAAO8oB,KAAK,oBAAqBzoB,QAGH,IAArBtC,EAAK4tB,cACV1C,EAAQ4B,WAAa5B,EAAQiC,QAAUjC,EAAQ+B,WAAa/B,EAAQkC,SACtEptB,EAAK4tB,aAAc,IAInB5tB,EAAK2tB,YAEP,YADA3tB,EAAK6rB,WAAY,GAInB,IAAK7rB,EAAK4tB,YACR,OAGF3rB,EAAO2qB,YAAa,GAEfzG,EAAOmF,SAAWhpB,EAAE0d,YACvB1d,EAAEiH,iBAGA4c,EAAOuJ,2BAA6BvJ,EAAOwJ,QAC7CrtB,EAAEstB,kBAGC5vB,EAAK8rB,UACJ3F,EAAOxkB,OAASwkB,EAAOmF,SACzBrpB,EAAOspB,UAGTvrB,EAAK6vB,eAAiB5tB,EAAOshB,eAC7BthB,EAAO6tB,cAAc,GAEjB7tB,EAAOmpB,WACTnpB,EAAO8tB,WAAWhe,QAAQ,qCAG5B/R,EAAKgwB,qBAAsB,GAEvB7J,EAAO8J,aAAyC,IAA1BhuB,EAAOiuB,iBAAqD,IAA1BjuB,EAAOkuB,gBACjEluB,EAAOmuB,eAAc,GAGvBnuB,EAAO8oB,KAAK,kBAAmBzoB,IAGjCL,EAAO8oB,KAAK,aAAczoB,GAC1BtC,EAAK8rB,SAAU,EACf,IAAIuE,EAAOpuB,EAAOstB,eAAiBJ,EAAQC,EAC3ClE,EAAQmF,KAAOA,EACfA,GAAQlK,EAAOmK,WACX3B,IAAK0B,GAAQA,GACjBpuB,EAAO8rB,eAAiBsC,EAAO,EAAI,OAAS,OAC5CrwB,EAAKuwB,iBAAmBF,EAAOrwB,EAAK6vB,eACpC,IAAIW,GAAsB,EACtBC,EAAkBtK,EAAOsK,gBAgC7B,GA9BItK,EAAO4I,sBACT0B,EAAkB,GAGhBJ,EAAO,GAAKrwB,EAAKuwB,iBAAmBtuB,EAAOitB,gBAC7CsB,GAAsB,EAClBrK,EAAOuK,aAAY1wB,EAAKuwB,iBAAmBtuB,EAAOitB,eAAiB,IAAMjtB,EAAOitB,eAAiBlvB,EAAK6vB,eAAiBQ,IAASI,IAC3HJ,EAAO,GAAKrwB,EAAKuwB,iBAAmBtuB,EAAOgtB,iBACpDuB,GAAsB,EAClBrK,EAAOuK,aAAY1wB,EAAKuwB,iBAAmBtuB,EAAOgtB,eAAiB,GAAKhtB,EAAOgtB,eAAiBjvB,EAAK6vB,eAAiBQ,IAASI,IAGjID,IACFluB,EAAEwsB,yBAA0B,IAIzB7sB,EAAOiuB,gBAA4C,SAA1BjuB,EAAO8rB,gBAA6B/tB,EAAKuwB,iBAAmBvwB,EAAK6vB,iBAC7F7vB,EAAKuwB,iBAAmBvwB,EAAK6vB,iBAG1B5tB,EAAOkuB,gBAA4C,SAA1BluB,EAAO8rB,gBAA6B/tB,EAAKuwB,iBAAmBvwB,EAAK6vB,iBAC7F7vB,EAAKuwB,iBAAmBvwB,EAAK6vB,gBAG1B5tB,EAAOkuB,gBAAmBluB,EAAOiuB,iBACpClwB,EAAKuwB,iBAAmBvwB,EAAK6vB,gBAI3B1J,EAAO6H,UAAY,EAAG,CACxB,KAAIlH,KAAK2I,IAAIY,GAAQlK,EAAO6H,WAAahuB,EAAKiuB,oBAW5C,YADAjuB,EAAKuwB,iBAAmBvwB,EAAK6vB,gBAT7B,IAAK7vB,EAAKiuB,mBAMR,OALAjuB,EAAKiuB,oBAAqB,EAC1B/C,EAAQiC,OAASjC,EAAQ4B,SACzB5B,EAAQkC,OAASlC,EAAQ+B,SACzBjtB,EAAKuwB,iBAAmBvwB,EAAK6vB,oBAC7B3E,EAAQmF,KAAOpuB,EAAOstB,eAAiBrE,EAAQ4B,SAAW5B,EAAQiC,OAASjC,EAAQ+B,SAAW/B,EAAQkC,QASvGjH,EAAOwK,eAAgBxK,EAAOmF,WAE/BnF,EAAOqI,UAAYrI,EAAOqI,SAASrD,SAAWlpB,EAAOusB,UAAYrI,EAAOyK,uBAC1E3uB,EAAO4uB,oBACP5uB,EAAO6uB,uBAGL7uB,EAAOkkB,OAAOqI,UAAYrI,EAAOqI,SAASrD,SAAWlpB,EAAOusB,UAC9DvsB,EAAOusB,SAASC,cAIlBxsB,EAAO8uB,eAAe/wB,EAAKuwB,kBAE3BtuB,EAAO+uB,aAAahxB,EAAKuwB,mBAG3B,SAASU,EAAWhuB,GAClB,MAAMhB,EAASM,KACTvC,EAAOiC,EAAOgpB,iBACd,OACJ9E,EAAM,QACN+E,EACAwD,aAAcC,EAAG,WACjBuC,EAAU,QACV/F,GACElpB,EACJ,IAAKkpB,EAAS,OACd,IAAI7oB,EAAIW,EASR,GARIX,EAAEkpB,gBAAelpB,EAAIA,EAAEkpB,eAEvBxrB,EAAK0tB,qBACPzrB,EAAO8oB,KAAK,WAAYzoB,GAG1BtC,EAAK0tB,qBAAsB,GAEtB1tB,EAAK6rB,UAOR,OANI7rB,EAAK8rB,SAAW3F,EAAO8J,YACzBhuB,EAAOmuB,eAAc,GAGvBpwB,EAAK8rB,SAAU,OACf9rB,EAAK4tB,aAAc,GAKjBzH,EAAO8J,YAAcjwB,EAAK8rB,SAAW9rB,EAAK6rB,aAAwC,IAA1B5pB,EAAOiuB,iBAAqD,IAA1BjuB,EAAOkuB,iBACnGluB,EAAOmuB,eAAc,GAIvB,MAAMe,EAAe9N,IACf+N,EAAWD,EAAenxB,EAAK6tB,eAErC,GAAI5rB,EAAO2qB,WAAY,CACrB,MAAMyE,EAAW/uB,EAAE6pB,MAAQ7pB,EAAE4pB,cAAgB5pB,EAAE4pB,eAC/CjqB,EAAOqvB,mBAAmBD,GAAYA,EAAS,IAAM/uB,EAAE5B,QACvDuB,EAAO8oB,KAAK,YAAazoB,GAErB8uB,EAAW,KAAOD,EAAenxB,EAAKuxB,cAAgB,KACxDtvB,EAAO8oB,KAAK,wBAAyBzoB,GASzC,GALAtC,EAAKuxB,cAAgBlO,IACrBF,EAAS,KACFlhB,EAAOmoB,YAAWnoB,EAAO2qB,YAAa,MAGxC5sB,EAAK6rB,YAAc7rB,EAAK8rB,UAAY7pB,EAAO8rB,gBAAmC,IAAjB7C,EAAQmF,MAAcrwB,EAAKuwB,mBAAqBvwB,EAAK6vB,eAIrH,OAHA7vB,EAAK6rB,WAAY,EACjB7rB,EAAK8rB,SAAU,OACf9rB,EAAK4tB,aAAc,GAOrB,IAAI4D,EAQJ,GAXAxxB,EAAK6rB,WAAY,EACjB7rB,EAAK8rB,SAAU,EACf9rB,EAAK4tB,aAAc,EAIjB4D,EADErL,EAAOwK,aACIhC,EAAM1sB,EAAO+jB,WAAa/jB,EAAO+jB,WAEhChmB,EAAKuwB,iBAGjBpK,EAAOmF,QACT,OAGF,GAAIrpB,EAAOkkB,OAAOqI,UAAYrI,EAAOqI,SAASrD,QAI5C,YAHAlpB,EAAOusB,SAASyC,WAAW,CACzBO,eAMJ,IAAIC,EAAY,EACZC,EAAYzvB,EAAO0vB,gBAAgB,GAEvC,IAAK,IAAIh0B,EAAI,EAAGA,EAAIuzB,EAAWjsB,OAAQtH,GAAKA,EAAIwoB,EAAOyL,mBAAqB,EAAIzL,EAAO0L,eAAgB,CACrG,MAAMC,EAAYn0B,EAAIwoB,EAAOyL,mBAAqB,EAAI,EAAIzL,EAAO0L,oBAExB,IAA9BX,EAAWvzB,EAAIm0B,GACpBN,GAAcN,EAAWvzB,IAAM6zB,EAAaN,EAAWvzB,EAAIm0B,KAC7DL,EAAY9zB,EACZ+zB,EAAYR,EAAWvzB,EAAIm0B,GAAaZ,EAAWvzB,IAE5C6zB,GAAcN,EAAWvzB,KAClC8zB,EAAY9zB,EACZ+zB,EAAYR,EAAWA,EAAWjsB,OAAS,GAAKisB,EAAWA,EAAWjsB,OAAS,IAInF,IAAI8sB,EAAmB,KACnBC,EAAkB,KAElB7L,EAAO8L,SACLhwB,EAAOiwB,YACTF,EAAkB/vB,EAAOkkB,OAAOgM,SAAWlwB,EAAOkkB,OAAOgM,QAAQhH,SAAWlpB,EAAOkwB,QAAUlwB,EAAOkwB,QAAQC,OAAOntB,OAAS,EAAIhD,EAAOmwB,OAAOntB,OAAS,EAC9IhD,EAAOowB,QAChBN,EAAmB,IAKvB,MAAMO,GAASd,EAAaN,EAAWO,IAAcC,EAC/CI,EAAYL,EAAYtL,EAAOyL,mBAAqB,EAAI,EAAIzL,EAAO0L,eAEzE,GAAIT,EAAWjL,EAAOoM,aAAc,CAElC,IAAKpM,EAAOqM,WAEV,YADAvwB,EAAOwwB,QAAQxwB,EAAO4oB,aAIM,SAA1B5oB,EAAO8rB,iBACLuE,GAASnM,EAAOuM,gBAAiBzwB,EAAOwwB,QAAQtM,EAAO8L,QAAUhwB,EAAOowB,MAAQN,EAAmBN,EAAYK,GAAgB7vB,EAAOwwB,QAAQhB,IAGtH,SAA1BxvB,EAAO8rB,iBACLuE,EAAQ,EAAInM,EAAOuM,gBACrBzwB,EAAOwwB,QAAQhB,EAAYK,GACE,OAApBE,GAA4BM,EAAQ,GAAKxL,KAAK2I,IAAI6C,GAASnM,EAAOuM,gBAC3EzwB,EAAOwwB,QAAQT,GAEf/vB,EAAOwwB,QAAQhB,QAGd,CAEL,IAAKtL,EAAOwM,YAEV,YADA1wB,EAAOwwB,QAAQxwB,EAAO4oB,cAIE5oB,EAAOJ,YAAeS,EAAE5B,SAAWuB,EAAOJ,WAAWC,QAAUQ,EAAE5B,SAAWuB,EAAOJ,WAAWE,QAGxF,SAA1BE,EAAO8rB,gBACT9rB,EAAOwwB,QAA6B,OAArBV,EAA4BA,EAAmBN,EAAYK,GAG9C,SAA1B7vB,EAAO8rB,gBACT9rB,EAAOwwB,QAA4B,OAApBT,EAA2BA,EAAkBP,IAErDnvB,EAAE5B,SAAWuB,EAAOJ,WAAWC,OACxCG,EAAOwwB,QAAQhB,EAAYK,GAE3B7vB,EAAOwwB,QAAQhB,IAKrB,SAASmB,IACP,MAAM3wB,EAASM,MACT,OACJ4jB,EAAM,GACN3K,GACEvZ,EACJ,GAAIuZ,GAAyB,IAAnBA,EAAGiF,YAAmB,OAE5B0F,EAAO9kB,aACTY,EAAO4wB,gBAIT,MAAM,eACJ3C,EAAc,eACdC,EAAc,SACd2C,GACE7wB,EAEJA,EAAOiuB,gBAAiB,EACxBjuB,EAAOkuB,gBAAiB,EACxBluB,EAAO6rB,aACP7rB,EAAO8wB,eACP9wB,EAAO6uB,uBAEuB,SAAzB3K,EAAO5kB,eAA4B4kB,EAAO5kB,cAAgB,IAAMU,EAAOowB,QAAUpwB,EAAOiwB,cAAgBjwB,EAAOkkB,OAAO6M,eACzH/wB,EAAOwwB,QAAQxwB,EAAOmwB,OAAOntB,OAAS,EAAG,GAAG,GAAO,GAEnDhD,EAAOwwB,QAAQxwB,EAAO4oB,YAAa,GAAG,GAAO,GAG3C5oB,EAAOgxB,UAAYhxB,EAAOgxB,SAASC,SAAWjxB,EAAOgxB,SAASE,QAChElxB,EAAOgxB,SAASG,MAIlBnxB,EAAOkuB,eAAiBA,EACxBluB,EAAOiuB,eAAiBA,EAEpBjuB,EAAOkkB,OAAOkN,eAAiBP,IAAa7wB,EAAO6wB,UACrD7wB,EAAOqxB,gBAIX,SAASC,EAAQjxB,GACf,MAAML,EAASM,KACVN,EAAOkpB,UAEPlpB,EAAO2qB,aACN3qB,EAAOkkB,OAAOqN,eAAelxB,EAAEiH,iBAE/BtH,EAAOkkB,OAAOsN,0BAA4BxxB,EAAOmpB,YACnD9oB,EAAEstB,kBACFttB,EAAEuB,8BAKR,SAAS6vB,IACP,MAAMzxB,EAASM,MACT,UACJ6jB,EAAS,aACTsI,EAAY,QACZvD,GACElpB,EACJ,IAAKkpB,EAAS,OAad,IAAIwI,EAZJ1xB,EAAO2xB,kBAAoB3xB,EAAO+jB,UAE9B/jB,EAAOstB,eACTttB,EAAO+jB,WAAaI,EAAUhF,WAE9Bnf,EAAO+jB,WAAaI,EAAUlF,UAIP,IAArBjf,EAAO+jB,YAAiB/jB,EAAO+jB,UAAY,GAC/C/jB,EAAO4uB,oBACP5uB,EAAO6uB,sBAEP,MAAM+C,EAAiB5xB,EAAOgtB,eAAiBhtB,EAAOitB,eAGpDyE,EADqB,IAAnBE,EACY,GAEC5xB,EAAO+jB,UAAY/jB,EAAOitB,gBAAkB2E,EAGzDF,IAAgB1xB,EAAO4kB,UACzB5kB,EAAO8uB,eAAerC,GAAgBzsB,EAAO+jB,UAAY/jB,EAAO+jB,WAGlE/jB,EAAO8oB,KAAK,eAAgB9oB,EAAO+jB,WAAW,GAGhD,IAAI8N,GAAqB,EAEzB,SAASC,KAET,MAAMjV,EAAS,CAAC7c,EAAQsC,KACtB,MAAMrE,EAAW4Z,KACX,OACJqM,EAAM,YACN6N,EAAW,GACXxY,EAAE,UACF4K,EAAS,OACTqC,EAAM,QACNlB,GACEtlB,EACEqc,IAAY6H,EAAOwJ,OACnBsE,EAAuB,OAAX1vB,EAAkB,mBAAqB,sBACnD2vB,EAAe3vB,EAErB,GAAKgjB,EAAQM,MAIN,CACL,MAAME,IAAwC,eAAtBiM,EAAY3vB,QAA0BkjB,EAAQQ,kBAAmB5B,EAAOgO,mBAAmB,CACjHC,SAAS,EACT9V,SAAS,GAEX9C,EAAGyY,GAAWD,EAAY3vB,MAAOpC,EAAO+oB,aAAcjD,GACtDvM,EAAGyY,GAAWD,EAAYK,KAAMpyB,EAAOwsB,YAAalH,EAAQQ,gBAAkB,CAC5EqM,SAAS,EACT9V,WACEA,GACJ9C,EAAGyY,GAAWD,EAAYM,IAAKryB,EAAOgvB,WAAYlJ,GAE9CiM,EAAYO,QACd/Y,EAAGyY,GAAWD,EAAYO,OAAQtyB,EAAOgvB,WAAYlJ,QAhBvDvM,EAAGyY,GAAWD,EAAY3vB,MAAOpC,EAAO+oB,cAAc,GACtD9qB,EAAS+zB,GAAWD,EAAYK,KAAMpyB,EAAOwsB,YAAanQ,GAC1Dpe,EAAS+zB,GAAWD,EAAYM,IAAKryB,EAAOgvB,YAAY,IAmBtD9K,EAAOqN,eAAiBrN,EAAOsN,2BACjCjY,EAAGyY,GAAW,QAAShyB,EAAOsxB,SAAS,GAGrCpN,EAAOmF,SACTlF,EAAU6N,GAAW,SAAUhyB,EAAOyxB,UAIpCvN,EAAOqO,qBACTvyB,EAAOiyB,GAAczL,EAAOC,KAAOD,EAAOE,QAAU,0CAA4C,wBAAyBiK,GAAU,GAEnI3wB,EAAOiyB,GAAc,iBAAkBtB,GAAU,IAuC/C6B,EAAgB,CAACxyB,EAAQkkB,IACtBlkB,EAAOyyB,MAAQvO,EAAOuO,MAAQvO,EAAOuO,KAAKC,KAAO,EA0S1D,IAIIC,EAAW,CACbC,MAAM,EACNlK,UAAW,aACXe,kBAAmB,UACnBoJ,aAAc,EACdlzB,MAAO,IACP0pB,SAAS,EACTkJ,sBAAsB,EACtBO,gBAAgB,EAChBpF,QAAQ,EACRqF,gBAAgB,EAChB7J,SAAS,EACT+C,kBAAmB,wDAEnBrF,MAAO,KACPE,OAAQ,KAERsC,gCAAgC,EAEhCnR,UAAW,KACXpW,IAAK,KAELupB,oBAAoB,EACpBE,mBAAoB,GAEpB0H,YAAY,EAEZC,gBAAgB,EAEhBC,kBAAkB,EAElBC,OAAQ,QAGR/zB,iBAAaiO,EACb+lB,gBAAiB,SAEjBC,aAAc,EACd/zB,cAAe,EACfswB,eAAgB,EAChBD,mBAAoB,EACpB2D,oBAAoB,EACpBvC,gBAAgB,EAChBwC,sBAAsB,EACtBC,mBAAoB,EAEpBC,kBAAmB,EAEnBC,qBAAqB,EACrBC,0BAA0B,EAE1BvC,eAAe,EAEfwC,cAAc,EAEdvF,WAAY,EACZhB,WAAY,GACZwG,eAAe,EACfnD,aAAa,EACbH,YAAY,EACZE,gBAAiB,GACjBH,aAAc,IACd5B,cAAc,EACdjvB,gBAAgB,EAChBssB,UAAW,EACX0B,0BAA0B,EAC1BrB,0BAA0B,EAC1BC,+BAA+B,EAC/BS,qBAAqB,EAErBgH,mBAAmB,EAEnBrF,YAAY,EACZD,gBAAiB,IAEjBG,qBAAqB,EAErBX,YAAY,EAEZuD,eAAe,EACfC,0BAA0B,EAC1BuC,qBAAqB,EAErBC,eAAe,EACfC,qBAAqB,EAErBv0B,MAAM,EACNw0B,qBAAsB,EACtBC,aAAc,KACdC,mBAAmB,EACnBC,wBAAwB,EACxBC,mBAAmB,EAEnBtE,QAAQ,EAER9B,gBAAgB,EAChBD,gBAAgB,EAChBrD,aAAc,KAEdN,WAAW,EACXP,eAAgB,oBAChBK,kBAAmB,KAEnB8H,kBAAkB,EAClBqC,wBAAyB,GAEzBC,uBAAwB,UAExBC,WAAY,eACZC,gBAAiB,+BACjBC,iBAAkB,sBAClBC,0BAA2B,gCAC3BC,kBAAmB,uBACnBC,oBAAqB,yBACrBC,eAAgB,oBAChBC,wBAAyB,8BACzBC,eAAgB,oBAChBC,wBAAyB,8BACzBC,aAAc,iBAEdC,oBAAoB,EAEpBC,cAAc,GAGhB,SAASC,EAAmBpR,EAAQqR,GAClC,OAAO,SAAsBhf,QACf,IAARA,IACFA,EAAM,IAGR,MAAMif,EAAkBp5B,OAAOuB,KAAK4Y,GAAK,GACnCkf,EAAelf,EAAIif,GAEG,iBAAjBC,GAA8C,OAAjBA,GAKpC,CAAC,aAAc,aAAc,aAAa1nB,QAAQynB,IAAoB,IAAiC,IAA5BtR,EAAOsR,KACpFtR,EAAOsR,GAAmB,CACxBE,MAAM,IAIJF,KAAmBtR,GAAU,YAAauR,IAKhB,IAA5BvR,EAAOsR,KACTtR,EAAOsR,GAAmB,CACxBtM,SAAS,IAI0B,iBAA5BhF,EAAOsR,IAAmC,YAAatR,EAAOsR,KACvEtR,EAAOsR,GAAiBtM,SAAU,GAG/BhF,EAAOsR,KAAkBtR,EAAOsR,GAAmB,CACtDtM,SAAS,IAEXhpB,EAAOq1B,EAAkBhf,IAjBvBrW,EAAOq1B,EAAkBhf,IAXzBrW,EAAOq1B,EAAkBhf,IAiC/B,MAAMof,EAAa,CACjB5N,gBACA6N,OAjhEW,CACX/J,WA7qBF,WACE,MAAM7rB,EAASM,KACf,IAAIsmB,EACAE,EACJ,MAAM9Z,EAAMhN,EAAOgN,IAGjB4Z,OADiC,IAAxB5mB,EAAOkkB,OAAO0C,OAAiD,OAAxB5mB,EAAOkkB,OAAO0C,MACtD5mB,EAAOkkB,OAAO0C,MAEd5Z,EAAI,GAAG6oB,YAIf/O,OADkC,IAAzB9mB,EAAOkkB,OAAO4C,QAAmD,OAAzB9mB,EAAOkkB,OAAO4C,OACtD9mB,EAAOkkB,OAAO4C,OAEd9Z,EAAI,GAAG8oB,aAGJ,IAAVlP,GAAe5mB,EAAOstB,gBAA6B,IAAXxG,GAAgB9mB,EAAO+sB,eAKnEnG,EAAQA,EAAQhmB,SAASoM,EAAItL,IAAI,iBAAmB,EAAG,IAAMd,SAASoM,EAAItL,IAAI,kBAAoB,EAAG,IACrGolB,EAASA,EAASlmB,SAASoM,EAAItL,IAAI,gBAAkB,EAAG,IAAMd,SAASoM,EAAItL,IAAI,mBAAqB,EAAG,IACnG/C,OAAOkC,MAAM+lB,KAAQA,EAAQ,GAC7BjoB,OAAOkC,MAAMimB,KAASA,EAAS,GACnC1qB,OAAOyQ,OAAO7M,EAAQ,CACpB4mB,QACAE,SACAiP,KAAM/1B,EAAOstB,eAAiB1G,EAAQE,MAgpBxCgK,aA5oBF,WACE,MAAM9wB,EAASM,KAEf,SAAS01B,EAAkB34B,GACzB,OAAI2C,EAAOstB,eACFjwB,EAIF,CACL,MAAS,SACT,aAAc,cACd,iBAAkB,eAClB,cAAe,aACf,eAAgB,gBAChB,eAAgB,cAChB,gBAAiB,iBACjB,YAAe,gBACfA,GAGJ,SAAS44B,EAA0BvT,EAAMvS,GACvC,OAAOsO,WAAWiE,EAAKrK,iBAAiB2d,EAAkB7lB,KAAW,GAGvE,MAAM+T,EAASlkB,EAAOkkB,QAChB,WACJ4J,EACAiI,KAAMG,EACNzJ,aAAcC,EAAG,SACjByJ,GACEn2B,EACEo2B,EAAYp2B,EAAOkwB,SAAWhM,EAAOgM,QAAQhH,QAC7CmN,EAAuBD,EAAYp2B,EAAOkwB,QAAQC,OAAOntB,OAAShD,EAAOmwB,OAAOntB,OAChFmtB,EAASrC,EAAW7c,SAAS,IAAIjR,EAAOkkB,OAAOuQ,YAC/C6B,EAAeF,EAAYp2B,EAAOkwB,QAAQC,OAAOntB,OAASmtB,EAAOntB,OACvE,IAAI6tB,EAAW,GACf,MAAM5B,EAAa,GACbS,EAAkB,GACxB,IAAI6G,EAAerS,EAAOsP,mBAEE,mBAAjB+C,IACTA,EAAerS,EAAOsP,mBAAmB33B,KAAKmE,IAGhD,IAAIw2B,EAActS,EAAOuP,kBAEE,mBAAhB+C,IACTA,EAActS,EAAOuP,kBAAkB53B,KAAKmE,IAG9C,MAAMy2B,EAAyBz2B,EAAO6wB,SAAS7tB,OACzC0zB,EAA2B12B,EAAOivB,WAAWjsB,OACnD,IAAIqwB,EAAenP,EAAOmP,aACtBsD,GAAiBJ,EACjBK,EAAgB,EAChB1nB,EAAQ,EAEZ,QAA0B,IAAfgnB,EACT,OAG0B,iBAAjB7C,GAA6BA,EAAatlB,QAAQ,MAAQ,IACnEslB,EAAe5U,WAAW4U,EAAarR,QAAQ,IAAK,KAAO,IAAMkU,GAGnEl2B,EAAO62B,aAAexD,EAElB3G,EAAKyD,EAAOzuB,IAAI,CAClBo1B,WAAY,GACZC,aAAc,GACdC,UAAW,KACL7G,EAAOzuB,IAAI,CACjBu1B,YAAa,GACbF,aAAc,GACdC,UAAW,KAGT9S,EAAO6M,gBAAkB7M,EAAOmF,UAClC/F,EAAetjB,EAAOmkB,UAAW,kCAAmC,IACpEb,EAAetjB,EAAOmkB,UAAW,iCAAkC,KAGrE,MAAM+S,EAAchT,EAAOuO,MAAQvO,EAAOuO,KAAKC,KAAO,GAAK1yB,EAAOyyB,KAOlE,IAAI0E,EALAD,GACFl3B,EAAOyyB,KAAK2E,WAAWd,GAKzB,MAAMe,EAAgD,SAAzBnT,EAAO5kB,eAA4B4kB,EAAO9kB,aAAehD,OAAOuB,KAAKumB,EAAO9kB,aAAasa,OAAOzc,QACnE,IAA1CinB,EAAO9kB,YAAYnC,GAAKqC,eACrC0D,OAAS,EAEZ,IAAK,IAAItH,EAAI,EAAGA,EAAI46B,EAAc56B,GAAK,EAAG,CACxCy7B,EAAY,EACZ,MAAMG,EAAQnH,EAAO7pB,GAAG5K,GAMxB,GAJIw7B,GACFl3B,EAAOyyB,KAAK8E,YAAY77B,EAAG47B,EAAOhB,EAAcN,GAGrB,SAAzBsB,EAAM51B,IAAI,WAAd,CAEA,GAA6B,SAAzBwiB,EAAO5kB,cAA0B,CAC/B+3B,IACFlH,EAAOz0B,GAAG0b,MAAM4e,EAAkB,UAAY,IAGhD,MAAMwB,EAAcpf,iBAAiBkf,EAAM,IACrCG,EAAmBH,EAAM,GAAGlgB,MAAMuE,UAClC+b,EAAyBJ,EAAM,GAAGlgB,MAAM2K,gBAU9C,GARI0V,IACFH,EAAM,GAAGlgB,MAAMuE,UAAY,QAGzB+b,IACFJ,EAAM,GAAGlgB,MAAM2K,gBAAkB,QAG/BmC,EAAO0P,aACTuD,EAAYn3B,EAAOstB,eAAiBgK,EAAMjZ,YAAW,GAAQiZ,EAAM5Y,aAAY,OAC1E,CAEL,MAAMkI,EAAQqP,EAA0BuB,EAAa,SAC/CG,EAAc1B,EAA0BuB,EAAa,gBACrDI,EAAe3B,EAA0BuB,EAAa,iBACtDV,EAAab,EAA0BuB,EAAa,eACpDP,EAAchB,EAA0BuB,EAAa,gBACrDK,EAAYL,EAAYnf,iBAAiB,cAE/C,GAAIwf,GAA2B,eAAdA,EACfV,EAAYvQ,EAAQkQ,EAAaG,MAC5B,CACL,MAAM,YACJpB,EAAW,YACXrX,GACE8Y,EAAM,GACVH,EAAYvQ,EAAQ+Q,EAAcC,EAAed,EAAaG,GAAezY,EAAcqX,IAI3F4B,IACFH,EAAM,GAAGlgB,MAAMuE,UAAY8b,GAGzBC,IACFJ,EAAM,GAAGlgB,MAAM2K,gBAAkB2V,GAG/BxT,EAAO0P,eAAcuD,EAAYtS,KAAKiT,MAAMX,SAEhDA,GAAajB,GAAchS,EAAO5kB,cAAgB,GAAK+zB,GAAgBnP,EAAO5kB,cAC1E4kB,EAAO0P,eAAcuD,EAAYtS,KAAKiT,MAAMX,IAE5ChH,EAAOz0B,KACTy0B,EAAOz0B,GAAG0b,MAAM4e,EAAkB,UAAemB,EAAH,MAI9ChH,EAAOz0B,KACTy0B,EAAOz0B,GAAGq8B,gBAAkBZ,GAG9BzH,EAAgBtc,KAAK+jB,GAEjBjT,EAAO6M,gBACT4F,EAAgBA,EAAgBQ,EAAY,EAAIP,EAAgB,EAAIvD,EAC9C,IAAlBuD,GAA6B,IAANl7B,IAASi7B,EAAgBA,EAAgBT,EAAa,EAAI7C,GAC3E,IAAN33B,IAASi7B,EAAgBA,EAAgBT,EAAa,EAAI7C,GAC1DxO,KAAK2I,IAAImJ,GAAiB,OAAUA,EAAgB,GACpDzS,EAAO0P,eAAc+C,EAAgB9R,KAAKiT,MAAMnB,IAChDznB,EAAQgV,EAAO0L,gBAAmB,GAAGiB,EAASzd,KAAKujB,GACvD1H,EAAW7b,KAAKujB,KAEZzS,EAAO0P,eAAc+C,EAAgB9R,KAAKiT,MAAMnB,KAC/CznB,EAAQ2V,KAAKE,IAAI/kB,EAAOkkB,OAAOyL,mBAAoBzgB,IAAUlP,EAAOkkB,OAAO0L,gBAAmB,GAAGiB,EAASzd,KAAKujB,GACpH1H,EAAW7b,KAAKujB,GAChBA,EAAgBA,EAAgBQ,EAAY9D,GAG9CrzB,EAAO62B,aAAeM,EAAY9D,EAClCuD,EAAgBO,EAChBjoB,GAAS,GAsBX,GAnBAlP,EAAO62B,YAAchS,KAAKC,IAAI9kB,EAAO62B,YAAaX,GAAcM,EAE5D9J,GAAOyJ,IAA+B,UAAlBjS,EAAOiP,QAAwC,cAAlBjP,EAAOiP,SAC1DrF,EAAWpsB,IAAI,CACbklB,MAAU5mB,EAAO62B,YAAc3S,EAAOmP,aAA/B,OAIPnP,EAAO+O,gBACTnF,EAAWpsB,IAAI,CACb,CAACs0B,EAAkB,UAAch2B,EAAO62B,YAAc3S,EAAOmP,aAA/B,OAI9B6D,GACFl3B,EAAOyyB,KAAKuF,kBAAkBb,EAAWtG,EAAUmF,IAIhD9R,EAAO6M,eAAgB,CAC1B,MAAMkH,EAAgB,GAEtB,IAAK,IAAIv8B,EAAI,EAAGA,EAAIm1B,EAAS7tB,OAAQtH,GAAK,EAAG,CAC3C,IAAIw8B,EAAiBrH,EAASn1B,GAC1BwoB,EAAO0P,eAAcsE,EAAiBrT,KAAKiT,MAAMI,IAEjDrH,EAASn1B,IAAMsE,EAAO62B,YAAcX,GACtC+B,EAAc7kB,KAAK8kB,GAIvBrH,EAAWoH,EAEPpT,KAAKiT,MAAM93B,EAAO62B,YAAcX,GAAcrR,KAAKiT,MAAMjH,EAASA,EAAS7tB,OAAS,IAAM,GAC5F6tB,EAASzd,KAAKpT,EAAO62B,YAAcX,GAMvC,GAFwB,IAApBrF,EAAS7tB,SAAc6tB,EAAW,CAAC,IAEX,IAAxB3M,EAAOmP,aAAoB,CAC7B,MAAMp2B,EAAM+C,EAAOstB,gBAAkBZ,EAAM,aAAesJ,EAAkB,eAC5E7F,EAAOzW,OAAO,CAACye,EAAGC,KACXlU,EAAOmF,SAER+O,IAAejI,EAAOntB,OAAS,GAKlCtB,IAAI,CACL,CAACzE,GAASo2B,EAAH,OAIX,GAAInP,EAAO6M,gBAAkB7M,EAAOqP,qBAAsB,CACxD,IAAI8E,EAAgB,EACpB3I,EAAgB9xB,QAAQ06B,IACtBD,GAAiBC,GAAkBpU,EAAOmP,aAAenP,EAAOmP,aAAe,KAEjFgF,GAAiBnU,EAAOmP,aACxB,MAAMkF,EAAUF,EAAgBnC,EAChCrF,EAAWA,EAASngB,IAAI8nB,GAClBA,EAAO,GAAWjC,EAClBiC,EAAOD,EAAgBA,EAAU/B,EAC9BgC,GAIX,GAAItU,EAAOyP,yBAA0B,CACnC,IAAI0E,EAAgB,EAMpB,GALA3I,EAAgB9xB,QAAQ06B,IACtBD,GAAiBC,GAAkBpU,EAAOmP,aAAenP,EAAOmP,aAAe,KAEjFgF,GAAiBnU,EAAOmP,aAEpBgF,EAAgBnC,EAAY,CAC9B,MAAMuC,GAAmBvC,EAAamC,GAAiB,EACvDxH,EAASjzB,QAAQ,CAAC46B,EAAME,KACtB7H,EAAS6H,GAAaF,EAAOC,IAE/BxJ,EAAWrxB,QAAQ,CAAC46B,EAAME,KACxBzJ,EAAWyJ,GAAaF,EAAOC,KAYrC,GAPAr8B,OAAOyQ,OAAO7M,EAAQ,CACpBmwB,SACAU,WACA5B,aACAS,oBAGExL,EAAO6M,gBAAkB7M,EAAOmF,UAAYnF,EAAOqP,qBAAsB,CAC3EjQ,EAAetjB,EAAOmkB,UAAW,mCAAuC0M,EAAS,GAAb,MACpEvN,EAAetjB,EAAOmkB,UAAW,iCAAqCnkB,EAAO+1B,KAAO,EAAIrG,EAAgBA,EAAgB1sB,OAAS,GAAK,EAAnE,MACnE,MAAM21B,GAAiB34B,EAAO6wB,SAAS,GACjC+H,GAAmB54B,EAAOivB,WAAW,GAC3CjvB,EAAO6wB,SAAW7wB,EAAO6wB,SAASngB,IAAImoB,GAAKA,EAAIF,GAC/C34B,EAAOivB,WAAajvB,EAAOivB,WAAWve,IAAImoB,GAAKA,EAAID,GAoBrD,GAjBItC,IAAiBD,GACnBr2B,EAAO8oB,KAAK,sBAGV+H,EAAS7tB,SAAWyzB,IAClBz2B,EAAOkkB,OAAOkN,eAAepxB,EAAOqxB,gBACxCrxB,EAAO8oB,KAAK,yBAGVmG,EAAWjsB,SAAW0zB,GACxB12B,EAAO8oB,KAAK,0BAGV5E,EAAOyK,qBACT3uB,EAAO84B,uBAGJ1C,GAAclS,EAAOmF,SAA8B,UAAlBnF,EAAOiP,QAAwC,SAAlBjP,EAAOiP,QAAoB,CAC5F,MAAM4F,EAAyB7U,EAAOsQ,uBAAV,kBACtBwE,EAA6Bh5B,EAAOgN,IAAI/K,SAAS82B,GAEnDzC,GAAgBpS,EAAOqQ,wBACpByE,GAA4Bh5B,EAAOgN,IAAI9K,SAAS62B,GAC5CC,GACTh5B,EAAOgN,IAAI/G,YAAY8yB,KAkV3BE,iBA7UF,SAA0Bt5B,GACxB,MAAMK,EAASM,KACT44B,EAAe,GACf9C,EAAYp2B,EAAOkwB,SAAWlwB,EAAOkkB,OAAOgM,QAAQhH,QAC1D,IACIxtB,EADAy9B,EAAY,EAGK,iBAAVx5B,EACTK,EAAO6tB,cAAcluB,IACF,IAAVA,GACTK,EAAO6tB,cAAc7tB,EAAOkkB,OAAOvkB,OAGrC,MAAMy5B,EAAkBlqB,GAClBknB,EACKp2B,EAAOmwB,OAAOzW,OAAOH,GAAM3Y,SAAS2Y,EAAGgC,aAAa,2BAA4B,MAAQrM,GAAO,GAGjGlP,EAAOmwB,OAAO7pB,GAAG4I,GAAO,GAIjC,GAAoC,SAAhClP,EAAOkkB,OAAO5kB,eAA4BU,EAAOkkB,OAAO5kB,cAAgB,EAC1E,GAAIU,EAAOkkB,OAAO6M,gBACf/wB,EAAOq5B,eAAiBv7B,EAAE,KAAKqV,KAAKmkB,IACnC4B,EAAa9lB,KAAKkkB,UAGpB,IAAK57B,EAAI,EAAGA,EAAImpB,KAAKyU,KAAKt5B,EAAOkkB,OAAO5kB,eAAgB5D,GAAK,EAAG,CAC9D,MAAMwT,EAAQlP,EAAO4oB,YAAcltB,EACnC,GAAIwT,EAAQlP,EAAOmwB,OAAOntB,SAAWozB,EAAW,MAChD8C,EAAa9lB,KAAKgmB,EAAgBlqB,SAItCgqB,EAAa9lB,KAAKgmB,EAAgBp5B,EAAO4oB,cAI3C,IAAKltB,EAAI,EAAGA,EAAIw9B,EAAal2B,OAAQtH,GAAK,EACxC,QAA+B,IAApBw9B,EAAax9B,GAAoB,CAC1C,MAAMorB,EAASoS,EAAax9B,GAAGijB,aAC/Bwa,EAAYrS,EAASqS,EAAYrS,EAASqS,GAK1CA,GAA2B,IAAdA,IAAiBn5B,EAAO8tB,WAAWpsB,IAAI,SAAay3B,EAAH,OA+RlEL,mBA5RF,WACE,MAAM94B,EAASM,KACT6vB,EAASnwB,EAAOmwB,OAEtB,IAAK,IAAIz0B,EAAI,EAAGA,EAAIy0B,EAAOntB,OAAQtH,GAAK,EACtCy0B,EAAOz0B,GAAG69B,kBAAoBv5B,EAAOstB,eAAiB6C,EAAOz0B,GAAG89B,WAAarJ,EAAOz0B,GAAG+9B,WAwRzFC,qBApRF,SAA8B3V,QACV,IAAdA,IACFA,EAAYzjB,MAAQA,KAAKyjB,WAAa,GAGxC,MAAM/jB,EAASM,KACT4jB,EAASlkB,EAAOkkB,QAChB,OACJiM,EACA1D,aAAcC,EAAG,SACjBmE,GACE7wB,EACJ,GAAsB,IAAlBmwB,EAAOntB,OAAc,YACkB,IAAhCmtB,EAAO,GAAGoJ,mBAAmCv5B,EAAO84B,qBAC/D,IAAIa,GAAgB5V,EAChB2I,IAAKiN,EAAe5V,GAExBoM,EAAOlqB,YAAYie,EAAO2Q,mBAC1B70B,EAAO45B,qBAAuB,GAC9B55B,EAAOq5B,cAAgB,GAEvB,IAAK,IAAI39B,EAAI,EAAGA,EAAIy0B,EAAOntB,OAAQtH,GAAK,EAAG,CACzC,MAAM47B,EAAQnH,EAAOz0B,GACrB,IAAIm+B,EAAcvC,EAAMiC,kBAEpBrV,EAAOmF,SAAWnF,EAAO6M,iBAC3B8I,GAAe1J,EAAO,GAAGoJ,mBAG3B,MAAMO,GAAiBH,GAAgBzV,EAAO6M,eAAiB/wB,EAAOitB,eAAiB,GAAK4M,IAAgBvC,EAAMS,gBAAkB7T,EAAOmP,cACrI0G,GAAyBJ,EAAe9I,EAAS,IAAM3M,EAAO6M,eAAiB/wB,EAAOitB,eAAiB,GAAK4M,IAAgBvC,EAAMS,gBAAkB7T,EAAOmP,cAC3J2G,IAAgBL,EAAeE,GAC/BI,EAAaD,EAAch6B,EAAO0vB,gBAAgBh0B,IACtCs+B,GAAe,GAAKA,EAAch6B,EAAO+1B,KAAO,GAAKkE,EAAa,GAAKA,GAAcj6B,EAAO+1B,MAAQiE,GAAe,GAAKC,GAAcj6B,EAAO+1B,QAG7J/1B,EAAOq5B,cAAcjmB,KAAKkkB,GAC1Bt3B,EAAO45B,qBAAqBxmB,KAAK1X,GACjCy0B,EAAO7pB,GAAG5K,GAAGwG,SAASgiB,EAAO2Q,oBAG/ByC,EAAM1S,SAAW8H,GAAOoN,EAAgBA,EACxCxC,EAAM4C,iBAAmBxN,GAAOqN,EAAwBA,EAG1D/5B,EAAOq5B,cAAgBv7B,EAAEkC,EAAOq5B,gBAwOhCvK,eArOF,SAAwB/K,GACtB,MAAM/jB,EAASM,KAEf,QAAyB,IAAdyjB,EAA2B,CACpC,MAAMoW,EAAan6B,EAAOysB,cAAgB,EAAI,EAE9C1I,EAAY/jB,GAAUA,EAAO+jB,WAAa/jB,EAAO+jB,UAAYoW,GAAc,EAG7E,MAAMjW,EAASlkB,EAAOkkB,OAChB0N,EAAiB5xB,EAAOgtB,eAAiBhtB,EAAOitB,eACtD,IAAI,SACFrI,EAAQ,YACRqL,EAAW,MACXG,GACEpwB,EACJ,MAAMo6B,EAAenK,EACfoK,EAASjK,EAEQ,IAAnBwB,GACFhN,EAAW,EACXqL,GAAc,EACdG,GAAQ,IAERxL,GAAYb,EAAY/jB,EAAOitB,gBAAkB2E,EACjD3B,EAAcrL,GAAY,EAC1BwL,EAAQxL,GAAY,GAGtBxoB,OAAOyQ,OAAO7M,EAAQ,CACpB4kB,WACAqL,cACAG,WAEElM,EAAOyK,qBAAuBzK,EAAO6M,gBAAkB7M,EAAO8O,aAAYhzB,EAAO05B,qBAAqB3V,GAEtGkM,IAAgBmK,GAClBp6B,EAAO8oB,KAAK,yBAGVsH,IAAUiK,GACZr6B,EAAO8oB,KAAK,oBAGVsR,IAAiBnK,GAAeoK,IAAWjK,IAC7CpwB,EAAO8oB,KAAK,YAGd9oB,EAAO8oB,KAAK,WAAYlE,IAsLxBiK,oBAnLF,WACE,MAAM7uB,EAASM,MACT,OACJ6vB,EAAM,OACNjM,EAAM,WACN4J,EAAU,YACVlF,EAAW,UACX0R,GACEt6B,EACEo2B,EAAYp2B,EAAOkwB,SAAWhM,EAAOgM,QAAQhH,QAEnD,IAAIqR,EADJpK,EAAOlqB,YAAY,GAAGie,EAAOyQ,oBAAoBzQ,EAAO6Q,kBAAkB7Q,EAAO+Q,kBAAkB/Q,EAAO0Q,6BAA6B1Q,EAAO8Q,2BAA2B9Q,EAAOgR,2BAI9KqF,EADEnE,EACYp2B,EAAO8tB,WAAW1sB,KAAK,IAAI8iB,EAAOuQ,uCAAuC7L,OAEzEuH,EAAO7pB,GAAGsiB,GAI1B2R,EAAYr4B,SAASgiB,EAAOyQ,kBAExBzQ,EAAOxkB,OAEL66B,EAAYt4B,SAASiiB,EAAO4Q,qBAC9BhH,EAAW7c,SAAS,IAAIiT,EAAOuQ,mBAAmBvQ,EAAO4Q,iDAAiDwF,OAAep4B,SAASgiB,EAAO0Q,2BAEzI9G,EAAW7c,SAAS,IAAIiT,EAAOuQ,cAAcvQ,EAAO4Q,gDAAgDwF,OAAep4B,SAASgiB,EAAO0Q,4BAKvI,IAAI4F,EAAYD,EAAY/Z,QAAQ,IAAI0D,EAAOuQ,YAAcnuB,GAAG,GAAGpE,SAASgiB,EAAO6Q,gBAE/E7Q,EAAOxkB,MAA6B,IAArB86B,EAAUx3B,SAC3Bw3B,EAAYrK,EAAO7pB,GAAG,GACtBk0B,EAAUt4B,SAASgiB,EAAO6Q,iBAI5B,IAAI0F,EAAYF,EAAY3Z,QAAQ,IAAIsD,EAAOuQ,YAAcnuB,GAAG,GAAGpE,SAASgiB,EAAO+Q,gBAE/E/Q,EAAOxkB,MAA6B,IAArB+6B,EAAUz3B,SAC3By3B,EAAYtK,EAAO7pB,IAAI,GACvBm0B,EAAUv4B,SAASgiB,EAAO+Q,iBAGxB/Q,EAAOxkB,OAEL86B,EAAUv4B,SAASiiB,EAAO4Q,qBAC5BhH,EAAW7c,SAAS,IAAIiT,EAAOuQ,mBAAmBvQ,EAAO4Q,iDAAiD0F,EAAUl5B,KAAK,gCAAgCY,SAASgiB,EAAO8Q,yBAEzKlH,EAAW7c,SAAS,IAAIiT,EAAOuQ,cAAcvQ,EAAO4Q,gDAAgD0F,EAAUl5B,KAAK,gCAAgCY,SAASgiB,EAAO8Q,yBAGjKyF,EAAUx4B,SAASiiB,EAAO4Q,qBAC5BhH,EAAW7c,SAAS,IAAIiT,EAAOuQ,mBAAmBvQ,EAAO4Q,iDAAiD2F,EAAUn5B,KAAK,gCAAgCY,SAASgiB,EAAOgR,yBAEzKpH,EAAW7c,SAAS,IAAIiT,EAAOuQ,cAAcvQ,EAAO4Q,gDAAgD2F,EAAUn5B,KAAK,gCAAgCY,SAASgiB,EAAOgR,0BAIvKl1B,EAAO06B,qBAsHP9L,kBAnHF,SAA2B+L,GACzB,MAAM36B,EAASM,KACTyjB,EAAY/jB,EAAOysB,aAAezsB,EAAO+jB,WAAa/jB,EAAO+jB,WAC7D,WACJkL,EAAU,SACV4B,EAAQ,OACR3M,EACA0E,YAAaC,EACbyR,UAAWM,EACXlC,UAAWmC,GACT76B,EACJ,IACI04B,EADA9P,EAAc+R,EAGlB,QAA2B,IAAhB/R,EAA6B,CACtC,IAAK,IAAIltB,EAAI,EAAGA,EAAIuzB,EAAWjsB,OAAQtH,GAAK,OACT,IAAtBuzB,EAAWvzB,EAAI,GACpBqoB,GAAakL,EAAWvzB,IAAMqoB,EAAYkL,EAAWvzB,EAAI,IAAMuzB,EAAWvzB,EAAI,GAAKuzB,EAAWvzB,IAAM,EACtGktB,EAAcltB,EACLqoB,GAAakL,EAAWvzB,IAAMqoB,EAAYkL,EAAWvzB,EAAI,KAClEktB,EAAcltB,EAAI,GAEXqoB,GAAakL,EAAWvzB,KACjCktB,EAAcltB,GAKdwoB,EAAOwP,sBACL9K,EAAc,QAA4B,IAAhBA,KAA6BA,EAAc,GAI7E,GAAIiI,EAAS9iB,QAAQgW,IAAc,EACjC2U,EAAY7H,EAAS9iB,QAAQgW,OACxB,CACL,MAAM+W,EAAOjW,KAAKE,IAAIb,EAAOyL,mBAAoB/G,GACjD8P,EAAYoC,EAAOjW,KAAKiT,OAAOlP,EAAckS,GAAQ5W,EAAO0L,gBAK9D,GAFI8I,GAAa7H,EAAS7tB,SAAQ01B,EAAY7H,EAAS7tB,OAAS,GAE5D4lB,IAAgBC,EAMlB,YALI6P,IAAcmC,IAChB76B,EAAO04B,UAAYA,EACnB14B,EAAO8oB,KAAK,qBAOhB,MAAMwR,EAAY15B,SAASZ,EAAOmwB,OAAO7pB,GAAGsiB,GAAatnB,KAAK,4BAA8BsnB,EAAa,IACzGxsB,OAAOyQ,OAAO7M,EAAQ,CACpB04B,YACA4B,YACAzR,gBACAD,gBAEF5oB,EAAO8oB,KAAK,qBACZ9oB,EAAO8oB,KAAK,mBAER8R,IAAsBN,GACxBt6B,EAAO8oB,KAAK,oBAGV9oB,EAAO+6B,aAAe/6B,EAAOkkB,OAAOkR,qBACtCp1B,EAAO8oB,KAAK,gBAiDduG,mBA7CF,SAA4BhvB,GAC1B,MAAML,EAASM,KACT4jB,EAASlkB,EAAOkkB,OAChBoT,EAAQx5B,EAAEuC,GAAG+E,QAAQ,IAAI8e,EAAOuQ,YAAc,GACpD,IACI2D,EADA4C,GAAa,EAGjB,GAAI1D,EACF,IAAK,IAAI57B,EAAI,EAAGA,EAAIsE,EAAOmwB,OAAOntB,OAAQtH,GAAK,EAC7C,GAAIsE,EAAOmwB,OAAOz0B,KAAO47B,EAAO,CAC9B0D,GAAa,EACb5C,EAAa18B,EACb,MAKN,IAAI47B,IAAS0D,EAWX,OAFAh7B,EAAOi7B,kBAAe5tB,OACtBrN,EAAOk7B,kBAAe7tB,GATtBrN,EAAOi7B,aAAe3D,EAElBt3B,EAAOkwB,SAAWlwB,EAAOkkB,OAAOgM,QAAQhH,QAC1ClpB,EAAOk7B,aAAet6B,SAAS9C,EAAEw5B,GAAOh2B,KAAK,2BAA4B,IAEzEtB,EAAOk7B,aAAe9C,EAQtBlU,EAAO6P,0BAA+C1mB,IAAxBrN,EAAOk7B,cAA8Bl7B,EAAOk7B,eAAiBl7B,EAAO4oB,aACpG5oB,EAAO+zB,wBAshEThQ,UA90Dc,CACdzC,aAzLF,SAA4BC,QACb,IAATA,IACFA,EAAOjhB,KAAKgtB,eAAiB,IAAM,KAGrC,MACM,OACJpJ,EACAuI,aAAcC,EAAG,UACjB3I,EAAS,WACT+J,GALaxtB,KAQf,GAAI4jB,EAAOgP,iBACT,OAAOxG,GAAO3I,EAAYA,EAG5B,GAAIG,EAAOmF,QACT,OAAOtF,EAGT,IAAIuK,EAAmBhN,EAAawM,EAAW,GAAIvM,GAEnD,OADImL,IAAK4B,GAAoBA,GACtBA,GAAoB,GAmK3BS,aAhKF,SAAsBhL,EAAWoX,GAC/B,MAAMn7B,EAASM,MAEbmsB,aAAcC,EAAG,OACjBxI,EAAM,WACN4J,EAAU,UACV3J,EAAS,SACTS,GACE5kB,EACJ,IAwBI0xB,EAxBA0J,EAAI,EACJC,EAAI,EAGJr7B,EAAOstB,eACT8N,EAAI1O,GAAO3I,EAAYA,EAEvBsX,EAAItX,EAGFG,EAAO0P,eACTwH,EAAIvW,KAAKiT,MAAMsD,GACfC,EAAIxW,KAAKiT,MAAMuD,IAGbnX,EAAOmF,QACTlF,EAAUnkB,EAAOstB,eAAiB,aAAe,aAAettB,EAAOstB,gBAAkB8N,GAAKC,EACpFnX,EAAOgP,kBACjBpF,EAAWnS,UAAU,eAAeyf,QAAQC,aAG9Cr7B,EAAO2xB,kBAAoB3xB,EAAO+jB,UAClC/jB,EAAO+jB,UAAY/jB,EAAOstB,eAAiB8N,EAAIC,EAG/C,MAAMzJ,EAAiB5xB,EAAOgtB,eAAiBhtB,EAAOitB,eAGpDyE,EADqB,IAAnBE,EACY,GAEC7N,EAAY/jB,EAAOitB,gBAAkB2E,EAGlDF,IAAgB9M,GAClB5kB,EAAO8uB,eAAe/K,GAGxB/jB,EAAO8oB,KAAK,eAAgB9oB,EAAO+jB,UAAWoX,IAmH9ClO,aAhHF,WACE,OAAQ3sB,KAAKuwB,SAAS,IAgHtB7D,aA7GF,WACE,OAAQ1sB,KAAKuwB,SAASvwB,KAAKuwB,SAAS7tB,OAAS,IA6G7Cs4B,YA1GF,SAAqBvX,EAAWpkB,EAAO8oB,EAAc8S,EAAiBC,QAClD,IAAdzX,IACFA,EAAY,QAGA,IAAVpkB,IACFA,EAAQW,KAAK4jB,OAAOvkB,YAGD,IAAjB8oB,IACFA,GAAe,QAGO,IAApB8S,IACFA,GAAkB,GAGpB,MAAMv7B,EAASM,MACT,OACJ4jB,EAAM,UACNC,GACEnkB,EAEJ,GAAIA,EAAOmpB,WAAajF,EAAOkF,+BAC7B,OAAO,EAGT,MAAM6D,EAAejtB,EAAOitB,eACtBD,EAAehtB,EAAOgtB,eAC5B,IAAIyO,EAKJ,GAJiDA,EAA7CF,GAAmBxX,EAAYkJ,EAA6BA,EAAsBsO,GAAmBxX,EAAYiJ,EAA6BA,EAAiCjJ,EAEnL/jB,EAAO8uB,eAAe2M,GAElBvX,EAAOmF,QAAS,CAClB,MAAMqS,EAAM17B,EAAOstB,eAEnB,GAAc,IAAV3tB,EACFwkB,EAAUuX,EAAM,aAAe,cAAgBD,MAC1C,CACL,IAAKz7B,EAAOslB,QAAQI,aAMlB,OALAhC,EAAqB,CACnB1jB,SACA4jB,gBAAiB6X,EACjB5X,KAAM6X,EAAM,OAAS,SAEhB,EAGTvX,EAAUiB,SAAS,CACjB,CAACsW,EAAM,OAAS,QAASD,EACzBE,SAAU,WAId,OAAO,EA2CT,OAxCc,IAAVh8B,GACFK,EAAO6tB,cAAc,GACrB7tB,EAAO+uB,aAAa0M,GAEhBhT,IACFzoB,EAAO8oB,KAAK,wBAAyBnpB,EAAO67B,GAC5Cx7B,EAAO8oB,KAAK,oBAGd9oB,EAAO6tB,cAAcluB,GACrBK,EAAO+uB,aAAa0M,GAEhBhT,IACFzoB,EAAO8oB,KAAK,wBAAyBnpB,EAAO67B,GAC5Cx7B,EAAO8oB,KAAK,oBAGT9oB,EAAOmpB,YACVnpB,EAAOmpB,WAAY,EAEdnpB,EAAO47B,oCACV57B,EAAO47B,kCAAoC,SAAuBv7B,GAC3DL,IAAUA,EAAOmoB,WAClB9nB,EAAE5B,SAAW6B,OACjBN,EAAO8tB,WAAW,GAAGrQ,oBAAoB,gBAAiBzd,EAAO47B,mCACjE57B,EAAO8tB,WAAW,GAAGrQ,oBAAoB,sBAAuBzd,EAAO47B,mCACvE57B,EAAO47B,kCAAoC,YACpC57B,EAAO47B,kCAEVnT,GACFzoB,EAAO8oB,KAAK,oBAKlB9oB,EAAO8tB,WAAW,GAAG7Q,iBAAiB,gBAAiBjd,EAAO47B,mCAC9D57B,EAAO8tB,WAAW,GAAG7Q,iBAAiB,sBAAuBjd,EAAO47B,sCAIjE,IAk1DPhgB,WA/uDe,CACfiS,cAzFF,SAAuBhS,EAAUsf,GAC/B,MAAMn7B,EAASM,KAEVN,EAAOkkB,OAAOmF,SACjBrpB,EAAO8tB,WAAWlS,WAAWC,GAG/B7b,EAAO8oB,KAAK,gBAAiBjN,EAAUsf,IAmFvCU,gBA7CF,SAAyBpT,EAAcC,QAChB,IAAjBD,IACFA,GAAe,GAGjB,MAAMzoB,EAASM,MACT,OACJ4jB,GACElkB,EACAkkB,EAAOmF,UAEPnF,EAAO8O,YACThzB,EAAOi5B,mBAGTzQ,EAAe,CACbxoB,SACAyoB,eACAC,YACAC,KAAM,YA2BRzK,cAvBF,SAAuBuK,EAAcC,QACd,IAAjBD,IACFA,GAAe,GAGjB,MACM,OACJvE,GAFa5jB,UAIR6oB,WAAY,EACfjF,EAAOmF,UALI/oB,KAMRutB,cAAc,GACrBrF,EAAe,CACbxoB,OARaM,KASbmoB,eACAC,YACAC,KAAM,WAovDR2O,MA3yCU,CACV9G,QAhcF,SAAiBthB,EAAOvP,EAAO8oB,EAAc+S,EAAUM,GAarD,QAZc,IAAV5sB,IACFA,EAAQ,QAGI,IAAVvP,IACFA,EAAQW,KAAK4jB,OAAOvkB,YAGD,IAAjB8oB,IACFA,GAAe,GAGI,iBAAVvZ,GAAuC,iBAAVA,EACtC,MAAM,IAAI2G,MAAM,kFAAkF3G,aAGpG,GAAqB,iBAAVA,EAAoB,CAK7B,MAAM6sB,EAAgBn7B,SAASsO,EAAO,IAStC,IAFsB8sB,SAASD,GAG7B,MAAM,IAAIlmB,MAAM,sEAAsE3G,aAKxFA,EAAQ6sB,EAGV,MAAM/7B,EAASM,KACf,IAAI83B,EAAalpB,EACbkpB,EAAa,IAAGA,EAAa,GACjC,MAAM,OACJlU,EAAM,SACN2M,EAAQ,WACR5B,EAAU,cACVpG,EAAa,YACbD,EACA6D,aAAcC,EAAG,UACjBvI,EAAS,QACT+E,GACElpB,EAEJ,GAAIA,EAAOmpB,WAAajF,EAAOkF,iCAAmCF,IAAYsS,IAAaM,EACzF,OAAO,EAGT,MAAMhB,EAAOjW,KAAKE,IAAI/kB,EAAOkkB,OAAOyL,mBAAoByI,GACxD,IAAIM,EAAYoC,EAAOjW,KAAKiT,OAAOM,EAAa0C,GAAQ96B,EAAOkkB,OAAO0L,gBAClE8I,GAAa7H,EAAS7tB,SAAQ01B,EAAY7H,EAAS7tB,OAAS,GAChE,MAAM+gB,GAAa8M,EAAS6H,GAE5B,GAAIxU,EAAOwP,oBACT,IAAK,IAAIh4B,EAAI,EAAGA,EAAIuzB,EAAWjsB,OAAQtH,GAAK,EAAG,CAC7C,MAAMugC,GAAuBpX,KAAKiT,MAAkB,IAAZ/T,GAClCmY,EAAiBrX,KAAKiT,MAAsB,IAAhB7I,EAAWvzB,IACvCygC,EAAqBtX,KAAKiT,MAA0B,IAApB7I,EAAWvzB,EAAI,SAEpB,IAAtBuzB,EAAWvzB,EAAI,GACpBugC,GAAuBC,GAAkBD,EAAsBE,GAAsBA,EAAqBD,GAAkB,EAC9H9D,EAAa18B,EACJugC,GAAuBC,GAAkBD,EAAsBE,IACxE/D,EAAa18B,EAAI,GAEVugC,GAAuBC,IAChC9D,EAAa18B,GAMnB,GAAIsE,EAAO+6B,aAAe3C,IAAexP,EAAa,CACpD,IAAK5oB,EAAOiuB,gBAAkBlK,EAAY/jB,EAAO+jB,WAAaA,EAAY/jB,EAAOitB,eAC/E,OAAO,EAGT,IAAKjtB,EAAOkuB,gBAAkBnK,EAAY/jB,EAAO+jB,WAAaA,EAAY/jB,EAAOgtB,iBAC1EpE,GAAe,KAAOwP,EAAY,OAAO,EAUlD,IAAI1P,EAGJ,GATI0P,KAAgBvP,GAAiB,IAAMJ,GACzCzoB,EAAO8oB,KAAK,0BAId9oB,EAAO8uB,eAAe/K,GAEQ2E,EAA1B0P,EAAaxP,EAAyB,OAAgBwP,EAAaxP,EAAyB,OAAwB,QAEpH8D,IAAQ3I,IAAc/jB,EAAO+jB,YAAc2I,GAAO3I,IAAc/jB,EAAO+jB,UAkBzE,OAjBA/jB,EAAO4uB,kBAAkBwJ,GAErBlU,EAAO8O,YACThzB,EAAOi5B,mBAGTj5B,EAAO6uB,sBAEe,UAAlB3K,EAAOiP,QACTnzB,EAAO+uB,aAAahL,GAGJ,UAAd2E,IACF1oB,EAAO67B,gBAAgBpT,EAAcC,GACrC1oB,EAAOke,cAAcuK,EAAcC,KAG9B,EAGT,GAAIxE,EAAOmF,QAAS,CAClB,MAAMqS,EAAM17B,EAAOstB,eACb1wB,EAAI8vB,EAAM3I,GAAaA,EAE7B,GAAc,IAAVpkB,EAAa,CACf,MAAMy2B,EAAYp2B,EAAOkwB,SAAWlwB,EAAOkkB,OAAOgM,QAAQhH,QAEtDkN,IACFp2B,EAAOmkB,UAAU/M,MAAMgN,eAAiB,OACxCpkB,EAAOo8B,mBAAoB,GAG7BjY,EAAUuX,EAAM,aAAe,aAAe9+B,EAE1Cw5B,GACF5d,sBAAsB,KACpBxY,EAAOmkB,UAAU/M,MAAMgN,eAAiB,GACxCpkB,EAAOq8B,yBAA0B,QAGhC,CACL,IAAKr8B,EAAOslB,QAAQI,aAMlB,OALAhC,EAAqB,CACnB1jB,SACA4jB,eAAgBhnB,EAChBinB,KAAM6X,EAAM,OAAS,SAEhB,EAGTvX,EAAUiB,SAAS,CACjB,CAACsW,EAAM,OAAS,OAAQ9+B,EACxB++B,SAAU,WAId,OAAO,EA+BT,OA5BA37B,EAAO6tB,cAAcluB,GACrBK,EAAO+uB,aAAahL,GACpB/jB,EAAO4uB,kBAAkBwJ,GACzBp4B,EAAO6uB,sBACP7uB,EAAO8oB,KAAK,wBAAyBnpB,EAAO67B,GAC5Cx7B,EAAO67B,gBAAgBpT,EAAcC,GAEvB,IAAV/oB,EACFK,EAAOke,cAAcuK,EAAcC,GACzB1oB,EAAOmpB,YACjBnpB,EAAOmpB,WAAY,EAEdnpB,EAAOs8B,gCACVt8B,EAAOs8B,8BAAgC,SAAuBj8B,GACvDL,IAAUA,EAAOmoB,WAClB9nB,EAAE5B,SAAW6B,OACjBN,EAAO8tB,WAAW,GAAGrQ,oBAAoB,gBAAiBzd,EAAOs8B,+BACjEt8B,EAAO8tB,WAAW,GAAGrQ,oBAAoB,sBAAuBzd,EAAOs8B,+BACvEt8B,EAAOs8B,8BAAgC,YAChCt8B,EAAOs8B,8BACdt8B,EAAOke,cAAcuK,EAAcC,MAIvC1oB,EAAO8tB,WAAW,GAAG7Q,iBAAiB,gBAAiBjd,EAAOs8B,+BAC9Dt8B,EAAO8tB,WAAW,GAAG7Q,iBAAiB,sBAAuBjd,EAAOs8B,iCAG/D,GAoQPC,YAjQF,SAAqBrtB,EAAOvP,EAAO8oB,EAAc+S,GAa/C,QAZc,IAAVtsB,IACFA,EAAQ,QAGI,IAAVvP,IACFA,EAAQW,KAAK4jB,OAAOvkB,YAGD,IAAjB8oB,IACFA,GAAe,GAGI,iBAAVvZ,EAAoB,CAK7B,MAAM6sB,EAAgBn7B,SAASsO,EAAO,IAStC,IAFsB8sB,SAASD,GAG7B,MAAM,IAAIlmB,MAAM,sEAAsE3G,aAKxFA,EAAQ6sB,EAGV,MAAM/7B,EAASM,KACf,IAAIk8B,EAAWttB,EAMf,OAJIlP,EAAOkkB,OAAOxkB,OAChB88B,GAAYx8B,EAAOm0B,cAGdn0B,EAAOwwB,QAAQgM,EAAU78B,EAAO8oB,EAAc+S,IAuNrDiB,UAnNF,SAAmB98B,EAAO8oB,EAAc+S,QACxB,IAAV77B,IACFA,EAAQW,KAAK4jB,OAAOvkB,YAGD,IAAjB8oB,IACFA,GAAe,GAGjB,MAAMzoB,EAASM,MACT,UACJ6oB,EAAS,QACTD,EAAO,OACPhF,GACElkB,EACJ,IAAKkpB,EAAS,OAAOlpB,EACrB,IAAI08B,EAAWxY,EAAO0L,eAEO,SAAzB1L,EAAO5kB,eAAsD,IAA1B4kB,EAAO0L,gBAAwB1L,EAAOoP,qBAC3EoJ,EAAW7X,KAAKC,IAAI9kB,EAAO28B,qBAAqB,WAAW,GAAO,IAGpE,MAAM9M,EAAY7vB,EAAO4oB,YAAc1E,EAAOyL,mBAAqB,EAAI+M,EAEvE,GAAIxY,EAAOxkB,KAAM,CACf,GAAIypB,GAAajF,EAAOoQ,kBAAmB,OAAO,EAClDt0B,EAAOspB,UAEPtpB,EAAO48B,YAAc58B,EAAO8tB,WAAW,GAAG9O,WAG5C,OAAIkF,EAAO8L,QAAUhwB,EAAOowB,MACnBpwB,EAAOwwB,QAAQ,EAAG7wB,EAAO8oB,EAAc+S,GAGzCx7B,EAAOwwB,QAAQxwB,EAAO4oB,YAAciH,EAAWlwB,EAAO8oB,EAAc+S,IAiL3EqB,UA7KF,SAAmBl9B,EAAO8oB,EAAc+S,QACxB,IAAV77B,IACFA,EAAQW,KAAK4jB,OAAOvkB,YAGD,IAAjB8oB,IACFA,GAAe,GAGjB,MAAMzoB,EAASM,MACT,OACJ4jB,EAAM,UACNiF,EAAS,SACT0H,EAAQ,WACR5B,EAAU,aACVxC,EAAY,QACZvD,GACElpB,EACJ,IAAKkpB,EAAS,OAAOlpB,EAErB,GAAIkkB,EAAOxkB,KAAM,CACf,GAAIypB,GAAajF,EAAOoQ,kBAAmB,OAAO,EAClDt0B,EAAOspB,UAEPtpB,EAAO48B,YAAc58B,EAAO8tB,WAAW,GAAG9O,WAK5C,SAAS8d,EAAUl+B,GACjB,OAAIA,EAAM,GAAWimB,KAAKiT,MAAMjT,KAAK2I,IAAI5uB,IAClCimB,KAAKiT,MAAMl5B,GAGpB,MAAMq9B,EAAsBa,EAPVrQ,EAAezsB,EAAO+jB,WAAa/jB,EAAO+jB,WAQtDgZ,EAAqBlM,EAASngB,IAAI9R,GAAOk+B,EAAUl+B,IACzD,IAAIo+B,EAAWnM,EAASkM,EAAmBhvB,QAAQkuB,GAAuB,GAE1E,QAAwB,IAAbe,GAA4B9Y,EAAOmF,QAAS,CACrD,IAAI4T,EACJpM,EAASjzB,QAAQ,CAAC46B,EAAME,KAClBuD,GAAuBzD,IAEzByE,EAAgBvE,UAIS,IAAlBuE,IACTD,EAAWnM,EAASoM,EAAgB,EAAIA,EAAgB,EAAIA,IAIhE,IAAIC,EAAY,EAYhB,QAVwB,IAAbF,IACTE,EAAYjO,EAAWlhB,QAAQivB,GAC3BE,EAAY,IAAGA,EAAYl9B,EAAO4oB,YAAc,GAEvB,SAAzB1E,EAAO5kB,eAAsD,IAA1B4kB,EAAO0L,gBAAwB1L,EAAOoP,qBAC3E4J,EAAYA,EAAYl9B,EAAO28B,qBAAqB,YAAY,GAAQ,EACxEO,EAAYrY,KAAKC,IAAIoY,EAAW,KAIhChZ,EAAO8L,QAAUhwB,EAAOiwB,YAAa,CACvC,MAAMkN,EAAYn9B,EAAOkkB,OAAOgM,SAAWlwB,EAAOkkB,OAAOgM,QAAQhH,SAAWlpB,EAAOkwB,QAAUlwB,EAAOkwB,QAAQC,OAAOntB,OAAS,EAAIhD,EAAOmwB,OAAOntB,OAAS,EACvJ,OAAOhD,EAAOwwB,QAAQ2M,EAAWx9B,EAAO8oB,EAAc+S,GAGxD,OAAOx7B,EAAOwwB,QAAQ0M,EAAWv9B,EAAO8oB,EAAc+S,IAyGtD4B,WArGF,SAAoBz9B,EAAO8oB,EAAc+S,GAUvC,YATc,IAAV77B,IACFA,EAAQW,KAAK4jB,OAAOvkB,YAGD,IAAjB8oB,IACFA,GAAe,GAGFnoB,KACDkwB,QADClwB,KACcsoB,YAAajpB,EAAO8oB,EAAc+S,IA4F/D6B,eAxFF,SAAwB19B,EAAO8oB,EAAc+S,EAAUzP,QACvC,IAAVpsB,IACFA,EAAQW,KAAK4jB,OAAOvkB,YAGD,IAAjB8oB,IACFA,GAAe,QAGC,IAAdsD,IACFA,EAAY,IAGd,MAAM/rB,EAASM,KACf,IAAI4O,EAAQlP,EAAO4oB,YACnB,MAAMkS,EAAOjW,KAAKE,IAAI/kB,EAAOkkB,OAAOyL,mBAAoBzgB,GAClDwpB,EAAYoC,EAAOjW,KAAKiT,OAAO5oB,EAAQ4rB,GAAQ96B,EAAOkkB,OAAO0L,gBAC7D7L,EAAY/jB,EAAOysB,aAAezsB,EAAO+jB,WAAa/jB,EAAO+jB,UAEnE,GAAIA,GAAa/jB,EAAO6wB,SAAS6H,GAAY,CAG3C,MAAM4E,EAAct9B,EAAO6wB,SAAS6H,GAGhC3U,EAAYuZ,GAFCt9B,EAAO6wB,SAAS6H,EAAY,GAEH4E,GAAevR,IACvD7c,GAASlP,EAAOkkB,OAAO0L,oBAEpB,CAGL,MAAMoN,EAAWh9B,EAAO6wB,SAAS6H,EAAY,GAGzC3U,EAAYiZ,IAFIh9B,EAAO6wB,SAAS6H,GAEOsE,GAAYjR,IACrD7c,GAASlP,EAAOkkB,OAAO0L,gBAM3B,OAFA1gB,EAAQ2V,KAAKC,IAAI5V,EAAO,GACxBA,EAAQ2V,KAAKE,IAAI7V,EAAOlP,EAAOivB,WAAWjsB,OAAS,GAC5ChD,EAAOwwB,QAAQthB,EAAOvP,EAAO8oB,EAAc+S,IAgDlDzH,oBA7CF,WACE,MAAM/zB,EAASM,MACT,OACJ4jB,EAAM,WACN4J,GACE9tB,EACEV,EAAyC,SAAzB4kB,EAAO5kB,cAA2BU,EAAO28B,uBAAyBzY,EAAO5kB,cAC/F,IACIg7B,EADAiD,EAAev9B,EAAOk7B,aAG1B,GAAIhX,EAAOxkB,KAAM,CACf,GAAIM,EAAOmpB,UAAW,OACtBmR,EAAY15B,SAAS9C,EAAEkC,EAAOi7B,cAAc35B,KAAK,2BAA4B,IAEzE4iB,EAAO6M,eACLwM,EAAev9B,EAAOm0B,aAAe70B,EAAgB,GAAKi+B,EAAev9B,EAAOmwB,OAAOntB,OAAShD,EAAOm0B,aAAe70B,EAAgB,GACxIU,EAAOspB,UACPiU,EAAezP,EAAW7c,SAAS,IAAIiT,EAAOuQ,uCAAuC6F,YAAoBpW,EAAO4Q,wBAAwBxuB,GAAG,GAAG4I,QAC9IgS,EAAS,KACPlhB,EAAOwwB,QAAQ+M,MAGjBv9B,EAAOwwB,QAAQ+M,GAERA,EAAev9B,EAAOmwB,OAAOntB,OAAS1D,GAC/CU,EAAOspB,UACPiU,EAAezP,EAAW7c,SAAS,IAAIiT,EAAOuQ,uCAAuC6F,YAAoBpW,EAAO4Q,wBAAwBxuB,GAAG,GAAG4I,QAC9IgS,EAAS,KACPlhB,EAAOwwB,QAAQ+M,MAGjBv9B,EAAOwwB,QAAQ+M,QAGjBv9B,EAAOwwB,QAAQ+M,KAgzCjB79B,KAtrCS,CACT89B,WA7GF,WACE,MAAMx9B,EAASM,KACTrC,EAAW4Z,KACX,OACJqM,EAAM,WACN4J,GACE9tB,EAEEy9B,EAAY3P,EAAW7c,WAAWjO,OAAS,EAAIlF,EAAEgwB,EAAW7c,WAAW,GAAG6P,YAAcgN,EAC9F2P,EAAUxsB,SAAS,IAAIiT,EAAOuQ,cAAcvQ,EAAO4Q,uBAAuB51B,SAC1E,IAAIixB,EAASsN,EAAUxsB,SAAS,IAAIiT,EAAOuQ,YAE3C,GAAIvQ,EAAOmQ,uBAAwB,CACjC,MAAMqJ,EAAiBxZ,EAAO0L,eAAiBO,EAAOntB,OAASkhB,EAAO0L,eAEtE,GAAI8N,IAAmBxZ,EAAO0L,eAAgB,CAC5C,IAAK,IAAIl0B,EAAI,EAAGA,EAAIgiC,EAAgBhiC,GAAK,EAAG,CAC1C,MAAMiiC,EAAY7/B,EAAEG,EAASiZ,cAAc,QAAQhV,SAAS,GAAGgiB,EAAOuQ,cAAcvQ,EAAOwQ,mBAC3F+I,EAAUz+B,OAAO2+B,GAGnBxN,EAASsN,EAAUxsB,SAAS,IAAIiT,EAAOuQ,aAId,SAAzBvQ,EAAO5kB,eAA6B4kB,EAAOiQ,eAAcjQ,EAAOiQ,aAAehE,EAAOntB,QAC1FhD,EAAOm0B,aAAetP,KAAKyU,KAAK7a,WAAWyF,EAAOiQ,cAAgBjQ,EAAO5kB,cAAe,KACxFU,EAAOm0B,cAAgBjQ,EAAOgQ,qBAE1Bl0B,EAAOm0B,aAAehE,EAAOntB,QAAUhD,EAAOkkB,OAAOkQ,oBACvDp0B,EAAOm0B,aAAehE,EAAOntB,QAG/B,MAAM46B,EAAgB,GAChBC,EAAe,GACrB1N,EAAOhd,KAAK,CAACoG,EAAIrK,KACDpR,EAAEyb,GACVjY,KAAK,0BAA2B4N,KAGxC,IAAK,IAAIxT,EAAI,EAAGA,EAAIsE,EAAOm0B,aAAcz4B,GAAK,EAAG,CAC/C,MAAMwT,EAAQxT,EAAImpB,KAAKiT,MAAMp8B,EAAIy0B,EAAOntB,QAAUmtB,EAAOntB,OACzD66B,EAAazqB,KAAK+c,EAAO7pB,GAAG4I,GAAO,IACnC0uB,EAAcnhB,QAAQ0T,EAAO7pB,GAAG6pB,EAAOntB,OAASkM,EAAQ,GAAG,IAG7D,IAAK,IAAIxT,EAAI,EAAGA,EAAImiC,EAAa76B,OAAQtH,GAAK,EAC5C+hC,EAAUz+B,OAAOlB,EAAE+/B,EAAaniC,GAAGoiC,WAAU,IAAO57B,SAASgiB,EAAO4Q,sBAGtE,IAAK,IAAIp5B,EAAIkiC,EAAc56B,OAAS,EAAGtH,GAAK,EAAGA,GAAK,EAClD+hC,EAAUrd,QAAQtiB,EAAE8/B,EAAcliC,GAAGoiC,WAAU,IAAO57B,SAASgiB,EAAO4Q,uBA2DxExL,QAvDF,WACE,MAAMtpB,EAASM,KACfN,EAAO8oB,KAAK,iBACZ,MAAM,YACJF,EAAW,OACXuH,EAAM,aACNgE,EAAY,eACZjG,EAAc,eACdD,EAAc,SACd4C,EACApE,aAAcC,GACZ1sB,EACJ,IAAIw8B,EACJx8B,EAAOkuB,gBAAiB,EACxBluB,EAAOiuB,gBAAiB,EACxB,MACMG,GADiByC,EAASjI,GACH5oB,EAAOshB,eAEhCsH,EAAcuL,GAChBqI,EAAWrM,EAAOntB,OAAwB,EAAfmxB,EAAmBvL,EAC9C4T,GAAYrI,EACSn0B,EAAOwwB,QAAQgM,EAAU,GAAG,GAAO,IAE3B,IAATpO,GAClBpuB,EAAO+uB,cAAcrC,GAAO1sB,EAAO+jB,UAAY/jB,EAAO+jB,WAAaqK,IAE5DxF,GAAeuH,EAAOntB,OAASmxB,IAExCqI,GAAYrM,EAAOntB,OAAS4lB,EAAcuL,EAC1CqI,GAAYrI,EACSn0B,EAAOwwB,QAAQgM,EAAU,GAAG,GAAO,IAE3B,IAATpO,GAClBpuB,EAAO+uB,cAAcrC,GAAO1sB,EAAO+jB,UAAY/jB,EAAO+jB,WAAaqK,IAIvEpuB,EAAOkuB,eAAiBA,EACxBluB,EAAOiuB,eAAiBA,EACxBjuB,EAAO8oB,KAAK,YAiBZiV,YAdF,WACE,MACM,WACJjQ,EAAU,OACV5J,EAAM,OACNiM,GAJa7vB,KAMfwtB,EAAW7c,SAAS,IAAIiT,EAAOuQ,cAAcvQ,EAAO4Q,wBAAwB5Q,EAAOuQ,cAAcvQ,EAAOwQ,mBAAmBx1B,SAC3HixB,EAAOjmB,WAAW,6BA0rClB8jB,WA/pCe,CACfG,cAnBF,SAAuB6P,GAErB,GADe19B,KACJglB,QAAQM,QADJtlB,KACqB4jB,OAAO2P,eAD5BvzB,KACoD4jB,OAAOkN,eAD3D9wB,KACmF29B,UADnF39B,KACsG4jB,OAAOmF,QAAS,OACrI,MAAM9P,EAAyC,cAFhCjZ,KAEG4jB,OAAOuF,kBAFVnpB,KAEqDiZ,GAFrDjZ,KAEiE6jB,UAChF5K,EAAGnC,MAAM8mB,OAAS,OAClB3kB,EAAGnC,MAAM8mB,OAASF,EAAS,WAAa,QAexCG,gBAZF,WACiB79B,KAEJglB,QAAQM,OAFJtlB,KAEoB4jB,OAAOkN,eAF3B9wB,KAEmD29B,UAFnD39B,KAEsE4jB,OAAOmF,UAF7E/oB,KAM4B,cAN5BA,KAMD4jB,OAAOuF,kBAAoC,KAAO,aAAarS,MAAM8mB,OAAS,MAmqC5FrhB,OApea,CACbuhB,aA/BF,WACE,MAAMp+B,EAASM,KACTrC,EAAW4Z,KACX,OACJqM,EAAM,QACNoB,GACEtlB,EACJA,EAAO+oB,aAAeA,EAAa7rB,KAAK8C,GACxCA,EAAOwsB,YAAcA,EAAYtvB,KAAK8C,GACtCA,EAAOgvB,WAAaA,EAAW9xB,KAAK8C,GAEhCkkB,EAAOmF,UACTrpB,EAAOyxB,SAAWA,EAASv0B,KAAK8C,IAGlCA,EAAOsxB,QAAUA,EAAQp0B,KAAK8C,GAE1BslB,EAAQM,QAAUiM,IACpB5zB,EAASgf,iBAAiB,aAAc6U,GACxCD,GAAqB,GAGvBhV,EAAO7c,EAAQ,OAUfq+B,aAPF,WAEExhB,EADevc,KACA,SAweflB,YAhWgB,CAChBwxB,cA7HF,WACE,MAAM5wB,EAASM,MACT,YACJsoB,EAAW,YACXmS,EAAW,aACX5G,EAAe,EAAC,OAChBjQ,EAAM,IACNlX,GACEhN,EACEZ,EAAc8kB,EAAO9kB,YAC3B,IAAKA,GAAeA,GAAmD,IAApChD,OAAOuB,KAAKyB,GAAa4D,OAAc,OAE1E,MAAMs7B,EAAat+B,EAAOu+B,cAAcn/B,EAAaY,EAAOkkB,OAAOkP,gBAAiBpzB,EAAOuZ,IAC3F,IAAK+kB,GAAct+B,EAAOw+B,oBAAsBF,EAAY,OAC5D,MACMG,GADuBH,KAAcl/B,EAAcA,EAAYk/B,QAAcjxB,IAClCrN,EAAO0+B,eAClDC,EAAcnM,EAAcxyB,EAAQkkB,GACpC0a,EAAapM,EAAcxyB,EAAQy+B,GACnCI,EAAa3a,EAAOgF,QAEtByV,IAAgBC,GAClB5xB,EAAI/G,YAAY,GAAGie,EAAOsQ,8BAA8BtQ,EAAOsQ,qCAC/Dx0B,EAAO8+B,yBACGH,GAAeC,IACzB5xB,EAAI9K,SAAYgiB,EAAOsQ,uBAAV,SAETiK,EAAiBhM,KAAKsM,MAAuC,WAA/BN,EAAiBhM,KAAKsM,OAAsBN,EAAiBhM,KAAKsM,MAA6B,WAArB7a,EAAOuO,KAAKsM,OACtH/xB,EAAI9K,SAAYgiB,EAAOsQ,uBAAV,eAGfx0B,EAAO8+B,wBAIT,CAAC,aAAc,aAAc,aAAalhC,QAAQ6N,IAChD,MAAMuzB,EAAmB9a,EAAOzY,IAASyY,EAAOzY,GAAMyd,QAChD+V,EAAkBR,EAAiBhzB,IAASgzB,EAAiBhzB,GAAMyd,QAErE8V,IAAqBC,GACvBj/B,EAAOyL,GAAMyzB,WAGVF,GAAoBC,GACvBj/B,EAAOyL,GAAM7E,WAGjB,MAAMu4B,EAAmBV,EAAiB/V,WAAa+V,EAAiB/V,YAAcxE,EAAOwE,UACvF0W,EAAclb,EAAOxkB,OAAS++B,EAAiBn/B,gBAAkB4kB,EAAO5kB,eAAiB6/B,GAE3FA,GAAoBpE,GACtB/6B,EAAOq/B,kBAGTn/B,EAAOF,EAAOkkB,OAAQua,GACtB,MAAMa,EAAYt/B,EAAOkkB,OAAOgF,QAChC9sB,OAAOyQ,OAAO7M,EAAQ,CACpBP,eAAgBO,EAAOkkB,OAAOzkB,eAC9BwuB,eAAgBjuB,EAAOkkB,OAAO+J,eAC9BC,eAAgBluB,EAAOkkB,OAAOgK,iBAG5B2Q,IAAeS,EACjBt/B,EAAOk/B,WACGL,GAAcS,GACxBt/B,EAAO4G,SAGT5G,EAAOw+B,kBAAoBF,EAC3Bt+B,EAAO8oB,KAAK,oBAAqB2V,GAE7BW,GAAerE,IACjB/6B,EAAO+9B,cACP/9B,EAAOw9B,aACPx9B,EAAO8wB,eACP9wB,EAAOwwB,QAAQ5H,EAAcuL,EAAen0B,EAAOm0B,aAAc,GAAG,IAGtEn0B,EAAO8oB,KAAK,aAAc2V,IAiD1BF,cA9CF,SAAuBn/B,EAAajB,EAAMohC,GAKxC,QAJa,IAATphC,IACFA,EAAO,WAGJiB,GAAwB,cAATjB,IAAyBohC,EAAa,OAC1D,IAAIjB,GAAa,EACjB,MAAM55B,EAASiU,IACT6mB,EAAyB,WAATrhC,EAAoBuG,EAAO+6B,YAAcF,EAAYzJ,aACrE4J,EAAStjC,OAAOuB,KAAKyB,GAAasR,IAAIivB,IAC1C,GAAqB,iBAAVA,GAA6C,IAAvBA,EAAM5xB,QAAQ,KAAY,CACzD,MAAM6xB,EAAWnhB,WAAWkhB,EAAME,OAAO,IAEzC,MAAO,CACLljC,MAFY6iC,EAAgBI,EAG5BD,SAIJ,MAAO,CACLhjC,MAAOgjC,EACPA,WAGJD,EAAOI,KAAK,CAAC9lB,EAAG+lB,IAAMn/B,SAASoZ,EAAErd,MAAO,IAAMiE,SAASm/B,EAAEpjC,MAAO,KAEhE,IAAK,IAAIjB,EAAI,EAAGA,EAAIgkC,EAAO18B,OAAQtH,GAAK,EAAG,CACzC,MAAM,MACJikC,EAAK,MACLhjC,GACE+iC,EAAOhkC,GAEE,WAATyC,EACEuG,EAAO6T,WAAW,eAAe5b,QAAY+iB,UAC/C4e,EAAaqB,GAENhjC,GAAS4iC,EAAY1J,cAC9ByI,EAAaqB,GAIjB,OAAOrB,GAAc,QAoWrBjN,cAtLoB,CACpBA,cApCF,WACE,MAAMrxB,EAASM,MAEb29B,SAAU+B,EAAS,OACnB9b,GACElkB,GACE,mBACJwzB,GACEtP,EAEJ,GAAIsP,EAAoB,CACtB,MAAMyM,EAAiBjgC,EAAOmwB,OAAOntB,OAAS,EACxCk9B,EAAqBlgC,EAAOivB,WAAWgR,GAAkBjgC,EAAO0vB,gBAAgBuQ,GAAuC,EAArBzM,EACxGxzB,EAAOi+B,SAAWj+B,EAAO+1B,KAAOmK,OAEhClgC,EAAOi+B,SAAsC,IAA3Bj+B,EAAO6wB,SAAS7tB,QAGN,IAA1BkhB,EAAO+J,iBACTjuB,EAAOiuB,gBAAkBjuB,EAAOi+B,WAGJ,IAA1B/Z,EAAOgK,iBACTluB,EAAOkuB,gBAAkBluB,EAAOi+B,UAG9B+B,GAAaA,IAAchgC,EAAOi+B,WACpCj+B,EAAOowB,OAAQ,GAGb4P,IAAchgC,EAAOi+B,UACvBj+B,EAAO8oB,KAAK9oB,EAAOi+B,SAAW,OAAS,YA2LzC15B,QA5RY,CACZ47B,WAlDF,WACE,MACM,WACJzlB,EAAU,OACVwJ,EAAM,IACNwI,EAAG,IACH1f,EAAG,OACHwZ,EAAM,QACNlB,GAPahlB,KAUT8/B,EA3BR,SAAwB9qB,EAAS+qB,GAC/B,MAAMC,EAAgB,GAYtB,OAXAhrB,EAAQ1X,QAAQmJ,IACM,iBAATA,EACT3K,OAAOuB,KAAKoJ,GAAMnJ,QAAQ8c,IACpB3T,EAAK2T,IACP4lB,EAAcltB,KAAKitB,EAAS3lB,KAGP,iBAAT3T,GAChBu5B,EAAcltB,KAAKitB,EAASt5B,KAGzBu5B,EAcUC,CAAe,CAAC,cAAerc,EAAOwE,UAAW,CAChE,kBAAmBpD,EAAQM,OAC1B,CACD,YAbatlB,KAaO4jB,OAAOqI,UAAYrI,EAAOqI,SAASrD,SACtD,CACD,WAAchF,EAAO8O,YACpB,CACD,IAAOtG,GACN,CACD,KAAQxI,EAAOuO,MAAQvO,EAAOuO,KAAKC,KAAO,GACzC,CACD,cAAexO,EAAOuO,MAAQvO,EAAOuO,KAAKC,KAAO,GAA0B,WAArBxO,EAAOuO,KAAKsM,MACjE,CACD,QAAWvY,EAAOE,SACjB,CACD,IAAOF,EAAOC,KACb,CACD,WAAYvC,EAAOmF,SAClB,CACD,SAAYnF,EAAOmF,SAAWnF,EAAO6M,gBACpC,CACD,iBAAkB7M,EAAOyK,sBACvBzK,EAAOsQ,wBACX9Z,EAAWtH,QAAQgtB,GACnBpzB,EAAI9K,SAAS,IAAIwY,GAAY/J,KAAK,MAlCnBrQ,KAmCRw+B,wBAeP0B,cAZF,WACE,MACM,IACJxzB,EAAG,WACH0N,GAHapa,KAKf0M,EAAI/G,YAAYyU,EAAW/J,KAAK,MALjBrQ,KAMRw+B,yBAgSPxvB,OAhOW,CACXmxB,UAzDF,SAAmBC,EAAShqB,EAAKiqB,EAAQC,EAAOC,EAAkBpoB,GAChE,MAAM/T,EAASiU,IACf,IAAImoB,EAEJ,SAASC,IACHtoB,GAAUA,IAGE3a,EAAE4iC,GAASh1B,OAAO,WAAW,IAE3Bg1B,EAAQM,UAAaH,EAsBvCE,IArBIrqB,GACFoqB,EAAQ,IAAIp8B,EAAOu8B,MACnBH,EAAMI,OAASH,EACfD,EAAMK,QAAUJ,EAEZH,IACFE,EAAMF,MAAQA,GAGZD,IACFG,EAAMH,OAASA,GAGbjqB,IACFoqB,EAAMpqB,IAAMA,IAGdqqB,KA8BJ/M,cAtBF,WACE,MAAMh0B,EAASM,KAGf,SAASygC,IACH,MAAO/gC,GAA8CA,IAAUA,EAAOmoB,iBAC9C9a,IAAxBrN,EAAOohC,eAA4BphC,EAAOohC,cAAgB,GAE1DphC,EAAOohC,eAAiBphC,EAAOqhC,aAAar+B,SAC1ChD,EAAOkkB,OAAO+P,qBAAqBj0B,EAAO41B,SAC9C51B,EAAO8oB,KAAK,iBARhB9oB,EAAOqhC,aAAerhC,EAAOgN,IAAI5L,KAAK,OAYtC,IAAK,IAAI1F,EAAI,EAAGA,EAAIsE,EAAOqhC,aAAar+B,OAAQtH,GAAK,EAAG,CACtD,MAAMglC,EAAU1gC,EAAOqhC,aAAa3lC,GACpCsE,EAAOygC,UAAUC,EAASA,EAAQY,YAAcZ,EAAQnlB,aAAa,OAAQmlB,EAAQC,QAAUD,EAAQnlB,aAAa,UAAWmlB,EAAQE,OAASF,EAAQnlB,aAAa,UAAU,EAAMwlB,OAsOnLQ,EAAmB,GAEzB,MAAMjjC,EACJ,cACE,IAAIib,EACA2K,EAEJ,IAAK,IAAI3J,EAAOC,UAAUxX,OAAQgZ,EAAO,IAAIlD,MAAMyB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/EuB,EAAKvB,GAAQD,UAAUC,GAazB,GAVoB,IAAhBuB,EAAKhZ,QAAgBgZ,EAAK,GAAGxF,aAAwE,WAAzDpa,OAAOkB,UAAU+kB,SAASxmB,KAAKmgB,EAAK,IAAI5X,MAAM,GAAI,GAChG8f,EAASlI,EAAK,IAEbzC,EAAI2K,GAAUlI,EAGZkI,IAAQA,EAAS,IACtBA,EAAShkB,EAAO,GAAIgkB,GAChB3K,IAAO2K,EAAO3K,KAAI2K,EAAO3K,GAAKA,GAE9B2K,EAAO3K,IAAMzb,EAAEomB,EAAO3K,IAAIvW,OAAS,EAAG,CACxC,MAAMw+B,EAAU,GAQhB,OAPA1jC,EAAEomB,EAAO3K,IAAIpG,KAAKosB,IAChB,MAAMkC,EAAYvhC,EAAO,GAAIgkB,EAAQ,CACnC3K,GAAIgmB,IAENiC,EAAQpuB,KAAK,IAAI9U,EAAOmjC,MAGnBD,EAIT,MAAMxhC,EAASM,KACfN,EAAOqjB,YAAa,EACpBrjB,EAAOslB,QAAUG,IACjBzlB,EAAOwmB,OAASL,EAAU,CACxBlO,UAAWiM,EAAOjM,YAEpBjY,EAAOwlB,QAAU+B,IACjBvnB,EAAOkoB,gBAAkB,GACzBloB,EAAOsoB,mBAAqB,GAC5BtoB,EAAOpE,QAAU,IAAIoE,EAAO0hC,aAExBxd,EAAOtoB,SAAWkd,MAAMU,QAAQ0K,EAAOtoB,UACzCoE,EAAOpE,QAAQwX,QAAQ8Q,EAAOtoB,SAGhC,MAAM25B,EAAmB,GACzBv1B,EAAOpE,QAAQgC,QAAQ+jC,IACrBA,EAAI,CACF3hC,SACA4hC,aAActM,EAAmBpR,EAAQqR,GACzCn1B,GAAIJ,EAAOI,GAAGlD,KAAK8C,GACnB6hC,KAAM7hC,EAAO6hC,KAAK3kC,KAAK8C,GACvBmd,IAAKnd,EAAOmd,IAAIjgB,KAAK8C,GACrB8oB,KAAM9oB,EAAO8oB,KAAK5rB,KAAK8C,OAI3B,MAAM8hC,EAAe5hC,EAAO,GAAIyyB,EAAU4C,GAkH1C,OAhHAv1B,EAAOkkB,OAAShkB,EAAO,GAAI4hC,EAAcP,EAAkBrd,GAC3DlkB,EAAO0+B,eAAiBx+B,EAAO,GAAIF,EAAOkkB,QAC1ClkB,EAAO+hC,aAAe7hC,EAAO,GAAIgkB,GAE7BlkB,EAAOkkB,QAAUlkB,EAAOkkB,OAAO9jB,IACjChE,OAAOuB,KAAKqC,EAAOkkB,OAAO9jB,IAAIxC,QAAQokC,IACpChiC,EAAOI,GAAG4hC,EAAWhiC,EAAOkkB,OAAO9jB,GAAG4hC,MAItChiC,EAAOkkB,QAAUlkB,EAAOkkB,OAAO+d,OACjCjiC,EAAOiiC,MAAMjiC,EAAOkkB,OAAO+d,OAI7BjiC,EAAOlC,EAAIA,EAEX1B,OAAOyQ,OAAO7M,EAAQ,CACpBkpB,QAASlpB,EAAOkkB,OAAOgF,QACvB3P,KAEAmB,WAAY,GAEZyV,OAAQryB,IACRmxB,WAAY,GACZ4B,SAAU,GACVnB,gBAAiB,GAGjBpC,aAAY,IACyB,eAA5BttB,EAAOkkB,OAAOwE,UAGvBqE,WAAU,IAC2B,aAA5B/sB,EAAOkkB,OAAOwE,UAIvBE,YAAa,EACb0R,UAAW,EAEXrK,aAAa,EACbG,OAAO,EAEPrM,UAAW,EACX4N,kBAAmB,EACnB/M,SAAU,EACVsd,SAAU,EACV/Y,WAAW,EAEX8E,eAAgBjuB,EAAOkkB,OAAO+J,eAC9BC,eAAgBluB,EAAOkkB,OAAOgK,eAE9B6D,YAAa,WACX,MAAMnM,EAAQ,CAAC,aAAc,YAAa,WAAY,eAChDuc,EAAU,CAAC,cAAe,cAAe,aAY/C,OAXAniC,EAAOoiC,iBAAmB,CACxBhgC,MAAOwjB,EAAM,GACbwM,KAAMxM,EAAM,GACZyM,IAAKzM,EAAM,GACX0M,OAAQ1M,EAAM,IAEhB5lB,EAAOqiC,mBAAqB,CAC1BjgC,MAAO+/B,EAAQ,GACf/P,KAAM+P,EAAQ,GACd9P,IAAK8P,EAAQ,IAERniC,EAAOslB,QAAQM,QAAU5lB,EAAOkkB,OAAO2P,cAAgB7zB,EAAOoiC,iBAAmBpiC,EAAOqiC,mBAdpF,GAgBbrZ,gBAAiB,CACfY,eAAWvc,EACXwc,aAASxc,EACToe,yBAAqBpe,EACrBue,oBAAgBve,EAChBqe,iBAAare,EACbihB,sBAAkBjhB,EAClBugB,oBAAgBvgB,EAChB2e,wBAAoB3e,EAEpB4e,kBAAmBjsB,EAAOkkB,OAAO+H,kBAEjCqD,cAAelO,IACfkhB,kBAAcj1B,EAEdk1B,WAAY,GACZxU,yBAAqB1gB,EACrBqc,kBAAcrc,EACdse,iBAAate,GAGfsd,YAAY,EAEZlrB,eAAgBO,EAAOkkB,OAAOzkB,eAC9BwpB,QAAS,CACPiC,OAAQ,EACRC,OAAQ,EACRN,SAAU,EACVG,SAAU,EACVoD,KAAM,GAGRiT,aAAc,GACdD,aAAc,IAEhBphC,EAAO8oB,KAAK,WAER9oB,EAAOkkB,OAAO0O,MAChB5yB,EAAO4yB,OAKF5yB,EAGT,SACE,MAAMA,EAASM,KACXN,EAAOkpB,UACXlpB,EAAOkpB,SAAU,EAEblpB,EAAOkkB,OAAO8J,YAChBhuB,EAAOmuB,gBAGTnuB,EAAO8oB,KAAK,WAGd,UACE,MAAM9oB,EAASM,KACVN,EAAOkpB,UACZlpB,EAAOkpB,SAAU,EAEblpB,EAAOkkB,OAAO8J,YAChBhuB,EAAOm+B,kBAGTn+B,EAAO8oB,KAAK,YAGd,YAAYlE,EAAUjlB,GAEpBilB,EAAWC,KAAKE,IAAIF,KAAKC,IAAIF,EAAU,GAAI,GAC3C,MAAMG,EAFSzkB,KAEI2sB,eAEbxI,GAJSnkB,KAGI0sB,eACIjI,GAAOH,EAAWG,EAJ1BzkB,KAKRg7B,YAAY7W,OAA0B,IAAV9kB,EAAwB,EAAIA,GALhDW,KAMRsuB,oBANQtuB,KAORuuB,sBAGT,uBACE,MAAM7uB,EAASM,KACf,IAAKN,EAAOkkB,OAAOmR,eAAiBr1B,EAAOuZ,GAAI,OAC/C,MAAMipB,EAAMxiC,EAAOuZ,GAAG2B,UAAUP,MAAM,KAAKjB,OAAOwB,GACT,IAAhCA,EAAUnN,QAAQ,WAA+E,IAA5DmN,EAAUnN,QAAQ/N,EAAOkkB,OAAOsQ,yBAE9Ex0B,EAAO8oB,KAAK,oBAAqB0Z,EAAI7xB,KAAK,MAG5C,gBAAgB8xB,GACd,MAAMziC,EAASM,KACf,OAAIN,EAAOmoB,UAAkB,GACtBsa,EAAQvnB,UAAUP,MAAM,KAAKjB,OAAOwB,GACI,IAAtCA,EAAUnN,QAAQ,iBAAyE,IAAhDmN,EAAUnN,QAAQ/N,EAAOkkB,OAAOuQ,aACjF9jB,KAAK,KAGV,oBACE,MAAM3Q,EAASM,KACf,IAAKN,EAAOkkB,OAAOmR,eAAiBr1B,EAAOuZ,GAAI,OAC/C,MAAMmpB,EAAU,GAChB1iC,EAAOmwB,OAAOhd,KAAKsvB,IACjB,MAAM/nB,EAAa1a,EAAO2iC,gBAAgBF,GAC1CC,EAAQtvB,KAAK,CACXqvB,UACA/nB,eAEF1a,EAAO8oB,KAAK,cAAe2Z,EAAS/nB,KAEtC1a,EAAO8oB,KAAK,gBAAiB4Z,GAG/B,qBAAqBE,EAAMC,QACZ,IAATD,IACFA,EAAO,gBAGK,IAAVC,IACFA,GAAQ,GAGV,MACM,OACJ3e,EAAM,OACNiM,EAAM,WACNlB,EAAU,gBACVS,EACAqG,KAAMG,EAAU,YAChBtN,GAPatoB,KASf,IAAIwiC,EAAM,EAEV,GAAI5e,EAAO6M,eAAgB,CACzB,IACIgS,EADA5L,EAAYhH,EAAOvH,GAAamP,gBAGpC,IAAK,IAAIr8B,EAAIktB,EAAc,EAAGltB,EAAIy0B,EAAOntB,OAAQtH,GAAK,EAChDy0B,EAAOz0B,KAAOqnC,IAChB5L,GAAahH,EAAOz0B,GAAGq8B,gBACvB+K,GAAO,EACH3L,EAAYjB,IAAY6M,GAAY,IAI5C,IAAK,IAAIrnC,EAAIktB,EAAc,EAAGltB,GAAK,EAAGA,GAAK,EACrCy0B,EAAOz0B,KAAOqnC,IAChB5L,GAAahH,EAAOz0B,GAAGq8B,gBACvB+K,GAAO,EACH3L,EAAYjB,IAAY6M,GAAY,SAK5C,GAAa,YAATH,EACF,IAAK,IAAIlnC,EAAIktB,EAAc,EAAGltB,EAAIy0B,EAAOntB,OAAQtH,GAAK,GAChCmnC,EAAQ5T,EAAWvzB,GAAKg0B,EAAgBh0B,GAAKuzB,EAAWrG,GAAesN,EAAajH,EAAWvzB,GAAKuzB,EAAWrG,GAAesN,KAGhJ4M,GAAO,QAKX,IAAK,IAAIpnC,EAAIktB,EAAc,EAAGltB,GAAK,EAAGA,GAAK,EACrBuzB,EAAWrG,GAAeqG,EAAWvzB,GAAKw6B,IAG5D4M,GAAO,GAMf,OAAOA,EAGT,SACE,MAAM9iC,EAASM,KACf,IAAKN,GAAUA,EAAOmoB,UAAW,OACjC,MAAM,SACJ0I,EAAQ,OACR3M,GACElkB,EAWJ,SAAS+uB,IACP,MAAMiU,EAAiBhjC,EAAOysB,cAAmC,EAApBzsB,EAAO+jB,UAAiB/jB,EAAO+jB,UACtE0X,EAAe5W,KAAKE,IAAIF,KAAKC,IAAIke,EAAgBhjC,EAAOgtB,gBAAiBhtB,EAAOitB,gBACtFjtB,EAAO+uB,aAAa0M,GACpBz7B,EAAO4uB,oBACP5uB,EAAO6uB,sBAGT,IAAIoU,EAjBA/e,EAAO9kB,aACTY,EAAO4wB,gBAGT5wB,EAAO6rB,aACP7rB,EAAO8wB,eACP9wB,EAAO8uB,iBACP9uB,EAAO6uB,sBAYH7uB,EAAOkkB,OAAOqI,UAAYvsB,EAAOkkB,OAAOqI,SAASrD,SACnD6F,IAEI/uB,EAAOkkB,OAAO8O,YAChBhzB,EAAOi5B,qBAIPgK,GADmC,SAAhCjjC,EAAOkkB,OAAO5kB,eAA4BU,EAAOkkB,OAAO5kB,cAAgB,IAAMU,EAAOowB,QAAUpwB,EAAOkkB,OAAO6M,eACnG/wB,EAAOwwB,QAAQxwB,EAAOmwB,OAAOntB,OAAS,EAAG,GAAG,GAAO,GAEnDhD,EAAOwwB,QAAQxwB,EAAO4oB,YAAa,GAAG,GAAO,GAGvDqa,GACHlU,KAIA7K,EAAOkN,eAAiBP,IAAa7wB,EAAO6wB,UAC9C7wB,EAAOqxB,gBAGTrxB,EAAO8oB,KAAK,UAGd,gBAAgBoa,EAAcC,QACT,IAAfA,IACFA,GAAa,GAGf,MAAMnjC,EAASM,KACT8iC,EAAmBpjC,EAAOkkB,OAAOwE,UAOvC,OALKwa,IAEHA,EAAoC,eAArBE,EAAoC,WAAa,cAG9DF,IAAiBE,GAAqC,eAAjBF,GAAkD,aAAjBA,IAI1EljC,EAAOgN,IAAI/G,YAAY,GAAGjG,EAAOkkB,OAAOsQ,yBAAyB4O,KAAoBlhC,SAAS,GAAGlC,EAAOkkB,OAAOsQ,yBAAyB0O,KACxIljC,EAAO8+B,uBACP9+B,EAAOkkB,OAAOwE,UAAYwa,EAC1BljC,EAAOmwB,OAAOhd,KAAKsvB,IACI,aAAjBS,EACFT,EAAQrrB,MAAMwP,MAAQ,GAEtB6b,EAAQrrB,MAAM0P,OAAS,KAG3B9mB,EAAO8oB,KAAK,mBACRqa,GAAYnjC,EAAO41B,UAdd51B,EAkBX,wBAAwB0oB,GACtB,MAAM1oB,EAASM,KACXN,EAAO0sB,KAAqB,QAAdhE,IAAwB1oB,EAAO0sB,KAAqB,QAAdhE,IACxD1oB,EAAO0sB,IAAoB,QAAdhE,EACb1oB,EAAOysB,aAA2C,eAA5BzsB,EAAOkkB,OAAOwE,WAA8B1oB,EAAO0sB,IAErE1sB,EAAO0sB,KACT1sB,EAAOgN,IAAI9K,SAAYlC,EAAOkkB,OAAOsQ,uBAAjB,OACpBx0B,EAAOuZ,GAAGgL,IAAM,QAEhBvkB,EAAOgN,IAAI/G,YAAejG,EAAOkkB,OAAOsQ,uBAAjB,OACvBx0B,EAAOuZ,GAAGgL,IAAM,OAGlBvkB,EAAO41B,UAGT,MAAMrc,GACJ,MAAMvZ,EAASM,KACf,GAAIN,EAAOqjC,QAAS,OAAO,EAE3B,MAAMr2B,EAAMlP,EAAEyb,GAAMvZ,EAAOkkB,OAAO3K,IAGlC,KAFAA,EAAKvM,EAAI,IAGP,OAAO,EAGTuM,EAAGvZ,OAASA,EAEZ,MAAMsjC,EAAqB,IAClB,KAAKtjC,EAAOkkB,OAAOiR,cAAgB,IAAIvb,OAAOe,MAAM,KAAKhK,KAAK,KAoBvE,IAAImd,EAjBe,MACjB,GAAIvU,GAAMA,EAAG4Q,YAAc5Q,EAAG4Q,WAAWrT,cAAe,CACtD,MAAMwC,EAAMxb,EAAEyb,EAAG4Q,WAAWrT,cAAcwsB,MAI1C,OAFAhqB,EAAIrI,SAAWmB,GAAWpF,EAAIiE,SAASmB,GAEhCkH,EAGT,OAAKtM,EAAIiE,SAIFjE,EAAIiE,SAASqyB,KAHXxlC,EAAEkP,GAAKiE,SAASqyB,MAOVC,GAEjB,GAA0B,IAAtBzV,EAAW9qB,QAAgBhD,EAAOkkB,OAAO6O,eAAgB,CAC3D,MACMyQ,EADW3rB,IACQX,cAAc,OACvC4W,EAAahwB,EAAE0lC,GACfA,EAAQtoB,UAAYlb,EAAOkkB,OAAOiR,aAClCnoB,EAAIhO,OAAOwkC,GACXx2B,EAAIiE,SAAS,IAAIjR,EAAOkkB,OAAOuQ,YAActhB,KAAKsvB,IAChD3U,EAAW9uB,OAAOyjC,KAetB,OAXArmC,OAAOyQ,OAAO7M,EAAQ,CACpBgN,MACAuM,KACAuU,aACA3J,UAAW2J,EAAW,GACtBuV,SAAS,EAET3W,IAA8B,QAAzBnT,EAAGgL,IAAIkD,eAAoD,QAAzBza,EAAItL,IAAI,aAC/C+qB,aAA0C,eAA5BzsB,EAAOkkB,OAAOwE,YAAwD,QAAzBnP,EAAGgL,IAAIkD,eAAoD,QAAzBza,EAAItL,IAAI,cACrGy0B,SAAwC,gBAA9BrI,EAAWpsB,IAAI,cAEpB,EAGT,KAAK6X,GACH,MAAMvZ,EAASM,KACf,OAAIN,EAAO+6B,cAEK,IADA/6B,EAAOyjC,MAAMlqB,KAE7BvZ,EAAO8oB,KAAK,cAER9oB,EAAOkkB,OAAO9kB,aAChBY,EAAO4wB,gBAIT5wB,EAAOmgC,aAEHngC,EAAOkkB,OAAOxkB,MAChBM,EAAOw9B,aAITx9B,EAAO6rB,aAEP7rB,EAAO8wB,eAEH9wB,EAAOkkB,OAAOkN,eAChBpxB,EAAOqxB,gBAILrxB,EAAOkkB,OAAO8J,YAAchuB,EAAOkpB,SACrClpB,EAAOmuB,gBAGLnuB,EAAOkkB,OAAO8P,eAChBh0B,EAAOg0B,gBAILh0B,EAAOkkB,OAAOxkB,KAChBM,EAAOwwB,QAAQxwB,EAAOkkB,OAAO2O,aAAe7yB,EAAOm0B,aAAc,EAAGn0B,EAAOkkB,OAAOkR,oBAAoB,GAAO,GAE7Gp1B,EAAOwwB,QAAQxwB,EAAOkkB,OAAO2O,aAAc,EAAG7yB,EAAOkkB,OAAOkR,oBAAoB,GAAO,GAIzFp1B,EAAOo+B,eAEPp+B,EAAO+6B,aAAc,EAErB/6B,EAAO8oB,KAAK,QACZ9oB,EAAO8oB,KAAK,cA/CmB9oB,EAmDjC,QAAQ0jC,EAAgBC,QACC,IAAnBD,IACFA,GAAiB,QAGC,IAAhBC,IACFA,GAAc,GAGhB,MAAM3jC,EAASM,MACT,OACJ4jB,EAAM,IACNlX,EAAG,WACH8gB,EAAU,OACVqC,GACEnwB,EAEJ,YAA6B,IAAlBA,EAAOkkB,QAA0BlkB,EAAOmoB,YAInDnoB,EAAO8oB,KAAK,iBAEZ9oB,EAAO+6B,aAAc,EAErB/6B,EAAOq+B,eAEHna,EAAOxkB,MACTM,EAAO+9B,cAIL4F,IACF3jC,EAAOwgC,gBACPxzB,EAAI9C,WAAW,SACf4jB,EAAW5jB,WAAW,SAElBimB,GAAUA,EAAOntB,QACnBmtB,EAAOlqB,YAAY,CAACie,EAAO2Q,kBAAmB3Q,EAAOyQ,iBAAkBzQ,EAAO6Q,eAAgB7Q,EAAO+Q,gBAAgBtkB,KAAK,MAAMzG,WAAW,SAASA,WAAW,4BAInKlK,EAAO8oB,KAAK,WAEZ1sB,OAAOuB,KAAKqC,EAAOkoB,iBAAiBtqB,QAAQokC,IAC1ChiC,EAAOmd,IAAI6kB,MAGU,IAAnB0B,IACF1jC,EAAOgN,IAAI,GAAGhN,OAAS,KAn2H7B,SAAqBuW,GACnB,MAAMnZ,EAASmZ,EACfna,OAAOuB,KAAKP,GAAQQ,QAAQX,IAC1B,IACEG,EAAOH,GAAO,KACd,MAAOoD,IAGT,WACSjD,EAAOH,GACd,MAAOoD,OA01HPujC,CAAY5jC,IAGdA,EAAOmoB,WAAY,GAnCV,KAuCX,sBAAsB0b,GACpB3jC,EAAOqhC,EAAkBsC,GAG3B,8BACE,OAAOtC,EAGT,sBACE,OAAO5O,EAGT,qBAAqBgP,GACdrjC,EAAOhB,UAAUokC,cAAapjC,EAAOhB,UAAUokC,YAAc,IAClE,MAAM9lC,EAAU0C,EAAOhB,UAAUokC,YAEd,mBAARC,GAAsB/lC,EAAQmS,QAAQ4zB,GAAO,GACtD/lC,EAAQwX,KAAKuuB,GAIjB,WAAWlmC,GACT,OAAIqd,MAAMU,QAAQ/d,IAChBA,EAAOmC,QAAQ9B,GAAKwC,EAAOwlC,cAAchoC,IAClCwC,IAGTA,EAAOwlC,cAAcroC,GACd6C,IA61BX,SAASylC,EAA0B/jC,EAAQ0+B,EAAgBxa,EAAQ8f,GACjE,MAAM/lC,EAAW4Z,IAmBjB,OAjBI7X,EAAOkkB,OAAO6O,gBAChB32B,OAAOuB,KAAKqmC,GAAYpmC,QAAQX,IAC9B,IAAKinB,EAAOjnB,KAAwB,IAAhBinB,EAAOwR,KAAe,CACxC,IAAIuO,EAAUjkC,EAAOgN,IAAIiE,SAAS,IAAI+yB,EAAW/mC,IAAQ,GAEpDgnC,IACHA,EAAUhmC,EAASiZ,cAAc,OACjC+sB,EAAQ/oB,UAAY8oB,EAAW/mC,GAC/B+C,EAAOgN,IAAIhO,OAAOilC,IAGpB/f,EAAOjnB,GAAOgnC,EACdvF,EAAezhC,GAAOgnC,KAKrB/f,EAkNT,SAASggB,EAAkB3/B,GAKzB,YAJgB,IAAZA,IACFA,EAAU,IAGL,IAAIA,EAAQqV,OAAOoI,QAAQ,cAAe,QACpDA,QAAQ,KAAM,KA84Gb,SAASmiB,EAAYhU,GACnB,MAAMnwB,EAASM,MACT,WACJwtB,EAAU,OACV5J,GACElkB,EAMJ,GAJIkkB,EAAOxkB,MACTM,EAAO+9B,cAGa,iBAAX5N,GAAuB,WAAYA,EAC5C,IAAK,IAAIz0B,EAAI,EAAGA,EAAIy0B,EAAOntB,OAAQtH,GAAK,EAClCy0B,EAAOz0B,IAAIoyB,EAAW9uB,OAAOmxB,EAAOz0B,SAG1CoyB,EAAW9uB,OAAOmxB,GAGhBjM,EAAOxkB,MACTM,EAAOw9B,aAGJtZ,EAAOkgB,UACVpkC,EAAO41B,SAIX,SAASyO,EAAalU,GACpB,MAAMnwB,EAASM,MACT,OACJ4jB,EAAM,WACN4J,EAAU,YACVlF,GACE5oB,EAEAkkB,EAAOxkB,MACTM,EAAO+9B,cAGT,IAAIpD,EAAiB/R,EAAc,EAEnC,GAAsB,iBAAXuH,GAAuB,WAAYA,EAAQ,CACpD,IAAK,IAAIz0B,EAAI,EAAGA,EAAIy0B,EAAOntB,OAAQtH,GAAK,EAClCy0B,EAAOz0B,IAAIoyB,EAAW1N,QAAQ+P,EAAOz0B,IAG3Ci/B,EAAiB/R,EAAcuH,EAAOntB,YAEtC8qB,EAAW1N,QAAQ+P,GAGjBjM,EAAOxkB,MACTM,EAAOw9B,aAGJtZ,EAAOkgB,UACVpkC,EAAO41B,SAGT51B,EAAOwwB,QAAQmK,EAAgB,GAAG,GAGpC,SAAS2J,EAASp1B,EAAOihB,GACvB,MAAMnwB,EAASM,MACT,WACJwtB,EAAU,OACV5J,EAAM,YACN0E,GACE5oB,EACJ,IAAIukC,EAAoB3b,EAEpB1E,EAAOxkB,OACT6kC,GAAqBvkC,EAAOm0B,aAC5Bn0B,EAAO+9B,cACP/9B,EAAOmwB,OAASrC,EAAW7c,SAAS,IAAIiT,EAAOuQ,aAGjD,MAAM+P,EAAaxkC,EAAOmwB,OAAOntB,OAEjC,GAAIkM,GAAS,EAEX,YADAlP,EAAOqkC,aAAalU,GAItB,GAAIjhB,GAASs1B,EAEX,YADAxkC,EAAOmkC,YAAYhU,GAIrB,IAAIwK,EAAiB4J,EAAoBr1B,EAAQq1B,EAAoB,EAAIA,EACzE,MAAME,EAAe,GAErB,IAAK,IAAI/oC,EAAI8oC,EAAa,EAAG9oC,GAAKwT,EAAOxT,GAAK,EAAG,CAC/C,MAAMgpC,EAAe1kC,EAAOmwB,OAAO7pB,GAAG5K,GACtCgpC,EAAaxlC,SACbulC,EAAahoB,QAAQioB,GAGvB,GAAsB,iBAAXvU,GAAuB,WAAYA,EAAQ,CACpD,IAAK,IAAIz0B,EAAI,EAAGA,EAAIy0B,EAAOntB,OAAQtH,GAAK,EAClCy0B,EAAOz0B,IAAIoyB,EAAW9uB,OAAOmxB,EAAOz0B,IAG1Ci/B,EAAiB4J,EAAoBr1B,EAAQq1B,EAAoBpU,EAAOntB,OAASuhC,OAEjFzW,EAAW9uB,OAAOmxB,GAGpB,IAAK,IAAIz0B,EAAI,EAAGA,EAAI+oC,EAAazhC,OAAQtH,GAAK,EAC5CoyB,EAAW9uB,OAAOylC,EAAa/oC,IAG7BwoB,EAAOxkB,MACTM,EAAOw9B,aAGJtZ,EAAOkgB,UACVpkC,EAAO41B,SAGL1R,EAAOxkB,KACTM,EAAOwwB,QAAQmK,EAAiB36B,EAAOm0B,aAAc,GAAG,GAExDn0B,EAAOwwB,QAAQmK,EAAgB,GAAG,GAItC,SAASgK,EAAYC,GACnB,MAAM5kC,EAASM,MACT,OACJ4jB,EAAM,WACN4J,EAAU,YACVlF,GACE5oB,EACJ,IAAIukC,EAAoB3b,EAEpB1E,EAAOxkB,OACT6kC,GAAqBvkC,EAAOm0B,aAC5Bn0B,EAAO+9B,cACP/9B,EAAOmwB,OAASrC,EAAW7c,SAAS,IAAIiT,EAAOuQ,aAGjD,IACIoQ,EADAlK,EAAiB4J,EAGrB,GAA6B,iBAAlBK,GAA8B,WAAYA,EAAe,CAClE,IAAK,IAAIlpC,EAAI,EAAGA,EAAIkpC,EAAc5hC,OAAQtH,GAAK,EAC7CmpC,EAAgBD,EAAclpC,GAC1BsE,EAAOmwB,OAAO0U,IAAgB7kC,EAAOmwB,OAAO7pB,GAAGu+B,GAAe3lC,SAC9D2lC,EAAgBlK,IAAgBA,GAAkB,GAGxDA,EAAiB9V,KAAKC,IAAI6V,EAAgB,QAE1CkK,EAAgBD,EACZ5kC,EAAOmwB,OAAO0U,IAAgB7kC,EAAOmwB,OAAO7pB,GAAGu+B,GAAe3lC,SAC9D2lC,EAAgBlK,IAAgBA,GAAkB,GACtDA,EAAiB9V,KAAKC,IAAI6V,EAAgB,GAGxCzW,EAAOxkB,MACTM,EAAOw9B,aAGJtZ,EAAOkgB,UACVpkC,EAAO41B,SAGL1R,EAAOxkB,KACTM,EAAOwwB,QAAQmK,EAAiB36B,EAAOm0B,aAAc,GAAG,GAExDn0B,EAAOwwB,QAAQmK,EAAgB,GAAG,GAItC,SAASmK,IACP,MAAM9kC,EAASM,KACTskC,EAAgB,GAEtB,IAAK,IAAIlpC,EAAI,EAAGA,EAAIsE,EAAOmwB,OAAOntB,OAAQtH,GAAK,EAC7CkpC,EAAcxxB,KAAK1X,GAGrBsE,EAAO2kC,YAAYC,GAgBrB,SAASG,EAAW7gB,GAClB,MAAM,OACJiP,EAAM,OACNnzB,EAAM,GACNI,EAAE,aACF2uB,EAAY,cACZlB,EAAa,gBACbmX,EAAe,YACfC,EAAW,gBACXC,EAAe,gBACfC,GACEjhB,EAmCJ,IAAIkhB,EAlCJhlC,EAAG,aAAc,KACf,GAAIJ,EAAOkkB,OAAOiP,SAAWA,EAAQ,OACrCnzB,EAAO0a,WAAWtH,KAAK,GAAGpT,EAAOkkB,OAAOsQ,yBAAyBrB,KAE7D8R,GAAeA,KACjBjlC,EAAO0a,WAAWtH,KAAQpT,EAAOkkB,OAAOsQ,uBAAjB,MAGzB,MAAM6Q,EAAwBL,EAAkBA,IAAoB,GACpE5oC,OAAOyQ,OAAO7M,EAAOkkB,OAAQmhB,GAC7BjpC,OAAOyQ,OAAO7M,EAAO0+B,eAAgB2G,KAEvCjlC,EAAG,eAAgB,KACbJ,EAAOkkB,OAAOiP,SAAWA,GAC7BpE,MAEF3uB,EAAG,gBAAiB,CAACklC,EAAIzpB,KACnB7b,EAAOkkB,OAAOiP,SAAWA,GAC7BtF,EAAchS,KAEhBzb,EAAG,gBAAiB,KAClB,GAAIJ,EAAOkkB,OAAOiP,SAAWA,GAEzB+R,EAAiB,CACnB,IAAKC,IAAoBA,IAAkBI,aAAc,OAEzDvlC,EAAOmwB,OAAOhd,KAAKsvB,IACAziC,EAAOlC,EAAE2kC,GACjBrhC,KAAK,gHAAgHlC,WAGhIgmC,OAIJ9kC,EAAG,gBAAiB,KACdJ,EAAOkkB,OAAOiP,SAAWA,IAExBnzB,EAAOmwB,OAAOntB,SACjBoiC,GAAyB,GAG3B5sB,sBAAsB,KAChB4sB,GAA0BplC,EAAOmwB,QAAUnwB,EAAOmwB,OAAOntB,SAC3D+rB,IACAqW,GAAyB,QAMjC,SAASI,EAAaC,EAAcC,GAClC,OAAID,EAAaE,YACRD,EAAStkC,KAAKqkC,EAAaE,aAAajkC,IAAI,CACjD,sBAAuB,SACvB,8BAA+B,WAI5BgkC,EAGT,SAASE,EAA2BjiB,GAClC,IAAI,OACF3jB,EAAM,SACN6b,EAAQ,YACR8pB,EAAW,UACXE,GACEliB,EACJ,MAAM,OACJwM,EAAM,YACNvH,EAAW,WACXkF,GACE9tB,EAEJ,GAAIA,EAAOkkB,OAAOgP,kBAAiC,IAAbrX,EAAgB,CACpD,IACIiqB,EADAC,GAAiB,EAInBD,EADED,EACqBF,EAAcxV,EAAO/uB,KAAKukC,GAAexV,EAEzCwV,EAAcxV,EAAO7pB,GAAGsiB,GAAaxnB,KAAKukC,GAAexV,EAAO7pB,GAAGsiB,GAG5Fkd,EAAqB5nB,cAAc,KACjC,GAAI6nB,EAAgB,OACpB,IAAK/lC,GAAUA,EAAOmoB,UAAW,OACjC4d,GAAiB,EACjB/lC,EAAOmpB,WAAY,EACnB,MAAM6c,EAAgB,CAAC,sBAAuB,iBAE9C,IAAK,IAAItqC,EAAI,EAAGA,EAAIsqC,EAAchjC,OAAQtH,GAAK,EAC7CoyB,EAAWhe,QAAQk2B,EAActqC,OA8QzC,SAASuqC,EAAa/hB,EAAQwhB,EAAU7hB,GACtC,MAAMqiB,EAAc,uBAAsBriB,EAAO,IAAIA,EAAS,IACxDsiB,EAAmBjiB,EAAOyhB,YAAcD,EAAStkC,KAAK8iB,EAAOyhB,aAAeD,EAClF,IAAIU,EAAYD,EAAiBl1B,SAAS,IAAIi1B,GAO9C,OALKE,EAAUpjC,SACbojC,EAAYtoC,EAAE,kCAAkC+lB,EAAO,IAAIA,EAAS,cACpEsiB,EAAiBnnC,OAAOonC,IAGnBA,EA3hKThqC,OAAOuB,KAAKg4B,GAAY/3B,QAAQyoC,IAC9BjqC,OAAOuB,KAAKg4B,EAAW0Q,IAAiBzoC,QAAQ0oC,IAC9ChoC,EAAOhB,UAAUgpC,GAAe3Q,EAAW0Q,GAAgBC,OAG/DhoC,EAAOioC,IAAI,CA5kHX,SAAgB5iB,GACd,IAAI,OACF3jB,EAAM,GACNI,EAAE,KACF0oB,GACEnF,EACJ,MAAMjf,EAASiU,IACf,IAAIyrB,EAAW,KACXoC,EAAiB,KAErB,MAAMC,EAAgB,KACfzmC,IAAUA,EAAOmoB,WAAcnoB,EAAO+6B,cAC3CjS,EAAK,gBACLA,EAAK,YA2CD4d,EAA2B,KAC1B1mC,IAAUA,EAAOmoB,WAAcnoB,EAAO+6B,aAC3CjS,EAAK,sBAGP1oB,EAAG,OAAQ,KACLJ,EAAOkkB,OAAO4O,qBAAmD,IAA1BpuB,EAAOiiC,eA7C7C3mC,IAAUA,EAAOmoB,WAAcnoB,EAAO+6B,cAC3CqJ,EAAW,IAAIuC,eAAerxB,IAC5BkxB,EAAiB9hC,EAAO8T,sBAAsB,KAC5C,MAAM,MACJoO,EAAK,OACLE,GACE9mB,EACJ,IAAI4mC,EAAWhgB,EACXuS,EAAYrS,EAChBxR,EAAQ1X,QAAQipC,IACd,IAAI,eACFC,EAAc,YACdC,EAAW,OACXtoC,GACEooC,EACApoC,GAAUA,IAAWuB,EAAOuZ,KAChCqtB,EAAWG,EAAcA,EAAYngB,OAASkgB,EAAe,IAAMA,GAAgBE,WACnF7N,EAAY4N,EAAcA,EAAYjgB,QAAUggB,EAAe,IAAMA,GAAgBG,aAGnFL,IAAahgB,GAASuS,IAAcrS,GACtC2f,QAINrC,EAAS8C,QAAQlnC,EAAOuZ,MAyBxB7U,EAAOuY,iBAAiB,SAAUwpB,GAClC/hC,EAAOuY,iBAAiB,oBAAqBypB,MAE/CtmC,EAAG,UAAW,KAxBRomC,GACF9hC,EAAO2f,qBAAqBmiB,GAG1BpC,GAAYA,EAAS+C,WAAannC,EAAOuZ,KAC3C6qB,EAAS+C,UAAUnnC,EAAOuZ,IAC1B6qB,EAAW,MAoBb1/B,EAAO+Y,oBAAoB,SAAUgpB,GACrC/hC,EAAO+Y,oBAAoB,oBAAqBipB,MAIpD,SAAkB/iB,GAChB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,EAAE,KACF0oB,GACEnF,EACJ,MAAMyjB,EAAY,GACZ1iC,EAASiU,IAET0uB,EAAS,SAAU5oC,EAAQ2T,QACf,IAAZA,IACFA,EAAU,IAGZ,MACMgyB,EAAW,IADI1/B,EAAO4iC,kBAAoB5iC,EAAO6iC,wBACrBC,IAIhC,GAAyB,IAArBA,EAAUxkC,OAEZ,YADA8lB,EAAK,iBAAkB0e,EAAU,IAInC,MAAMC,EAAiB,WACrB3e,EAAK,iBAAkB0e,EAAU,KAG/B9iC,EAAO8T,sBACT9T,EAAO8T,sBAAsBivB,GAE7B/iC,EAAOzF,WAAWwoC,EAAgB,KAGtCrD,EAAS8C,QAAQzoC,EAAQ,CACvBsR,gBAA0C,IAAvBqC,EAAQrC,YAAoCqC,EAAQrC,WACvE23B,eAAwC,IAAtBt1B,EAAQs1B,WAAmCt1B,EAAQs1B,UACrEC,mBAAgD,IAA1Bv1B,EAAQu1B,eAAuCv1B,EAAQu1B,gBAE/EP,EAAUh0B,KAAKgxB,IA+BjBxC,EAAa,CACXwC,UAAU,EACVwD,gBAAgB,EAChBC,sBAAsB,IAExBznC,EAAG,OAjCU,KACX,GAAKJ,EAAOkkB,OAAOkgB,SAAnB,CAEA,GAAIpkC,EAAOkkB,OAAO0jB,eAAgB,CAChC,MAAME,EAAmB9nC,EAAOgN,IAAIU,UAEpC,IAAK,IAAIhS,EAAI,EAAGA,EAAIosC,EAAiB9kC,OAAQtH,GAAK,EAChD2rC,EAAOS,EAAiBpsC,IAK5B2rC,EAAOrnC,EAAOgN,IAAI,GAAI,CACpB06B,UAAW1nC,EAAOkkB,OAAO2jB,uBAG3BR,EAAOrnC,EAAO8tB,WAAW,GAAI,CAC3B/d,YAAY,OAiBhB3P,EAAG,UAba,KACdgnC,EAAUxpC,QAAQwmC,IAChBA,EAAS2D,eAEXX,EAAU1pB,OAAO,EAAG0pB,EAAUpkC,aA28RlC,MAAMpH,EAAU,CA9gLhB,SAAiB+nB,GACf,IAkBIqkB,GAlBA,OACFhoC,EAAM,aACN4hC,EAAY,GACZxhC,EAAE,KACF0oB,GACEnF,EAuBJ,SAASskB,EAAY3Q,EAAOpoB,GAC1B,MAAMgV,EAASlkB,EAAOkkB,OAAOgM,QAE7B,GAAIhM,EAAOgkB,OAASloC,EAAOkwB,QAAQgY,MAAMh5B,GACvC,OAAOlP,EAAOkwB,QAAQgY,MAAMh5B,GAG9B,MAAMw2B,EAAWxhB,EAAO+jB,YAAcnqC,EAAEomB,EAAO+jB,YAAYpsC,KAAKmE,EAAQs3B,EAAOpoB,IAAUpR,EAAE,eAAekC,EAAOkkB,OAAOuQ,wCAAwCvlB,MAAUooB,WAG1K,OAFKoO,EAASpkC,KAAK,4BAA4BokC,EAASpkC,KAAK,0BAA2B4N,GACpFgV,EAAOgkB,QAAOloC,EAAOkwB,QAAQgY,MAAMh5B,GAASw2B,GACzCA,EAGT,SAAS9P,EAAOuS,GACd,MAAM,cACJ7oC,EAAa,eACbswB,EAAc,eACdmB,GACE/wB,EAAOkkB,QACL,gBACJkkB,EAAe,eACfC,GACEroC,EAAOkkB,OAAOgM,SAEhBoY,KAAMC,EACN3lB,GAAI4lB,EAAU,OACdrY,EACAlB,WAAYwZ,EACZ7pB,OAAQ8pB,GACN1oC,EAAOkwB,QAENlwB,EAAOkkB,OAAOmF,SACjBrpB,EAAO4uB,oBAGT,MAAMhG,EAAc5oB,EAAO4oB,aAAe,EAC1C,IAAI+f,EAEAC,EACAC,EAFqBF,EAArB3oC,EAAOysB,aAA2B,QAA0BzsB,EAAOstB,eAAiB,OAAS,MAI7FyD,GACF6X,EAAc/jB,KAAKiT,MAAMx4B,EAAgB,GAAKswB,EAAiByY,EAC/DQ,EAAehkB,KAAKiT,MAAMx4B,EAAgB,GAAKswB,EAAiBwY,IAEhEQ,EAActpC,GAAiBswB,EAAiB,GAAKyY,EACrDQ,EAAejZ,EAAiBwY,GAGlC,MAAME,EAAOzjB,KAAKC,KAAK8D,GAAe,GAAKigB,EAAc,GACnDjmB,EAAKiC,KAAKE,KAAK6D,GAAe,GAAKggB,EAAazY,EAAOntB,OAAS,GAChE4b,GAAU5e,EAAOivB,WAAWqZ,IAAS,IAAMtoC,EAAOivB,WAAW,IAAM,GAQzE,SAAS6Z,IACP9oC,EAAO8wB,eACP9wB,EAAO8uB,iBACP9uB,EAAO6uB,sBAEH7uB,EAAO+oC,MAAQ/oC,EAAOkkB,OAAO6kB,KAAK7f,SACpClpB,EAAO+oC,KAAKC,OAGdlgB,EAAK,iBAGP,GAnBA1sB,OAAOyQ,OAAO7M,EAAOkwB,QAAS,CAC5BoY,OACA1lB,KACAhE,SACAqQ,WAAYjvB,EAAOivB,aAejBsZ,IAAiBD,GAAQE,IAAe5lB,IAAOulB,EAOjD,OANInoC,EAAOivB,aAAewZ,GAAsB7pB,IAAW8pB,GACzD1oC,EAAOmwB,OAAOzuB,IAAIinC,EAAe/pB,EAAH,MAGhC5e,EAAO8uB,sBACPhG,EAAK,iBAIP,GAAI9oB,EAAOkkB,OAAOgM,QAAQ+Y,eAsBxB,OArBAjpC,EAAOkkB,OAAOgM,QAAQ+Y,eAAeptC,KAAKmE,EAAQ,CAChD4e,SACA0pB,OACA1lB,KACAuN,OAAQ,WACN,MAAM+Y,EAAiB,GAEvB,IAAK,IAAIxtC,EAAI4sC,EAAM5sC,GAAKknB,EAAIlnB,GAAK,EAC/BwtC,EAAe91B,KAAK+c,EAAOz0B,IAG7B,OAAOwtC,EAPD,UAWNlpC,EAAOkkB,OAAOgM,QAAQiZ,qBACxBL,IAEAhgB,EAAK,kBAMT,MAAMsgB,EAAiB,GACjBC,EAAgB,GAEtB,GAAIlB,EACFnoC,EAAO8tB,WAAW1sB,KAAK,IAAIpB,EAAOkkB,OAAOuQ,YAAcv1B,cAEvD,IAAK,IAAIxD,EAAI6sC,EAAc7sC,GAAK8sC,EAAY9sC,GAAK,GAC3CA,EAAI4sC,GAAQ5sC,EAAIknB,IAClB5iB,EAAO8tB,WAAW1sB,KAAK,IAAIpB,EAAOkkB,OAAOuQ,uCAAuC/4B,OAAOwD,SAK7F,IAAK,IAAIxD,EAAI,EAAGA,EAAIy0B,EAAOntB,OAAQtH,GAAK,EAClCA,GAAK4sC,GAAQ5sC,GAAKknB,SACM,IAAf4lB,GAA8BL,EACvCkB,EAAcj2B,KAAK1X,IAEfA,EAAI8sC,GAAYa,EAAcj2B,KAAK1X,GACnCA,EAAI6sC,GAAca,EAAeh2B,KAAK1X,KAKhD2tC,EAAczrC,QAAQsR,IACpBlP,EAAO8tB,WAAW9uB,OAAOipC,EAAY9X,EAAOjhB,GAAQA,MAEtDk6B,EAAetJ,KAAK,CAAC9lB,EAAG+lB,IAAMA,EAAI/lB,GAAGpc,QAAQsR,IAC3ClP,EAAO8tB,WAAW1N,QAAQ6nB,EAAY9X,EAAOjhB,GAAQA,MAEvDlP,EAAO8tB,WAAW7c,SAAS,iBAAiBvP,IAAIinC,EAAe/pB,EAAH,MAC5DkqB,IA/JFlH,EAAa,CACX1R,QAAS,CACPhH,SAAS,EACTiH,OAAQ,GACR+X,OAAO,EACPD,YAAa,KACbgB,eAAgB,KAChBE,sBAAsB,EACtBf,gBAAiB,EACjBC,eAAgB,KAIpBroC,EAAOkwB,QAAU,CACfgY,MAAO,GACPI,UAAMj7B,EACNuV,QAAIvV,EACJ8iB,OAAQ,GACRvR,OAAQ,EACRqQ,WAAY,IAwOd7uB,EAAG,aAAc,KACVJ,EAAOkkB,OAAOgM,QAAQhH,UAC3BlpB,EAAOkwB,QAAQC,OAASnwB,EAAOkkB,OAAOgM,QAAQC,OAC9CnwB,EAAO0a,WAAWtH,KAAQpT,EAAOkkB,OAAOsQ,uBAAjB,WACvBx0B,EAAOkkB,OAAOyK,qBAAsB,EACpC3uB,EAAO0+B,eAAe/P,qBAAsB,EAEvC3uB,EAAOkkB,OAAO2O,cACjB+C,OAGJx1B,EAAG,eAAgB,KACZJ,EAAOkkB,OAAOgM,QAAQhH,UAEvBlpB,EAAOkkB,OAAOmF,UAAYrpB,EAAOo8B,mBACnC1jB,aAAasvB,GACbA,EAAiB/oC,WAAW,KAC1B22B,KACC,MAEHA,OAGJx1B,EAAG,qBAAsB,KAClBJ,EAAOkkB,OAAOgM,QAAQhH,SAEvBlpB,EAAOkkB,OAAOmF,SAChB/F,EAAetjB,EAAOmkB,UAAW,wBAA4BnkB,EAAO62B,YAAV,QAG9Dz6B,OAAOyQ,OAAO7M,EAAOkwB,QAAS,CAC5BiU,YAxHF,SAAqBhU,GACnB,GAAsB,iBAAXA,GAAuB,WAAYA,EAC5C,IAAK,IAAIz0B,EAAI,EAAGA,EAAIy0B,EAAOntB,OAAQtH,GAAK,EAClCy0B,EAAOz0B,IAAIsE,EAAOkwB,QAAQC,OAAO/c,KAAK+c,EAAOz0B,SAGnDsE,EAAOkwB,QAAQC,OAAO/c,KAAK+c,GAG7ByF,GAAO,IAgHPyO,aA7GF,SAAsBlU,GACpB,MAAMvH,EAAc5oB,EAAO4oB,YAC3B,IAAI+R,EAAiB/R,EAAc,EAC/B0gB,EAAoB,EAExB,GAAIxwB,MAAMU,QAAQ2W,GAAS,CACzB,IAAK,IAAIz0B,EAAI,EAAGA,EAAIy0B,EAAOntB,OAAQtH,GAAK,EAClCy0B,EAAOz0B,IAAIsE,EAAOkwB,QAAQC,OAAO1T,QAAQ0T,EAAOz0B,IAGtDi/B,EAAiB/R,EAAcuH,EAAOntB,OACtCsmC,EAAoBnZ,EAAOntB,YAE3BhD,EAAOkwB,QAAQC,OAAO1T,QAAQ0T,GAGhC,GAAInwB,EAAOkkB,OAAOgM,QAAQgY,MAAO,CAC/B,MAAMA,EAAQloC,EAAOkwB,QAAQgY,MACvBqB,EAAW,GACjBntC,OAAOuB,KAAKuqC,GAAOtqC,QAAQ4rC,IACzB,MAAMC,EAAYvB,EAAMsB,GAClBE,EAAgBD,EAAUnoC,KAAK,2BAEjCooC,GACFD,EAAUnoC,KAAK,0BAA2BV,SAAS8oC,EAAe,IAAMJ,GAG1EC,EAAS3oC,SAAS4oC,EAAa,IAAMF,GAAqBG,IAE5DzpC,EAAOkwB,QAAQgY,MAAQqB,EAGzB3T,GAAO,GACP51B,EAAOwwB,QAAQmK,EAAgB,IA6E/BgK,YA1EF,SAAqBC,GACnB,GAAI,MAAOA,EAAyD,OACpE,IAAIhc,EAAc5oB,EAAO4oB,YAEzB,GAAI9P,MAAMU,QAAQorB,GAChB,IAAK,IAAIlpC,EAAIkpC,EAAc5hC,OAAS,EAAGtH,GAAK,EAAGA,GAAK,EAClDsE,EAAOkwB,QAAQC,OAAOzS,OAAOknB,EAAclpC,GAAI,GAE3CsE,EAAOkkB,OAAOgM,QAAQgY,cACjBloC,EAAOkwB,QAAQgY,MAAMtD,EAAclpC,IAGxCkpC,EAAclpC,GAAKktB,IAAaA,GAAe,GACnDA,EAAc/D,KAAKC,IAAI8D,EAAa,QAGtC5oB,EAAOkwB,QAAQC,OAAOzS,OAAOknB,EAAe,GAExC5kC,EAAOkkB,OAAOgM,QAAQgY,cACjBloC,EAAOkwB,QAAQgY,MAAMtD,GAG1BA,EAAgBhc,IAAaA,GAAe,GAChDA,EAAc/D,KAAKC,IAAI8D,EAAa,GAGtCgN,GAAO,GACP51B,EAAOwwB,QAAQ5H,EAAa,IAgD5Bkc,gBA7CF,WACE9kC,EAAOkwB,QAAQC,OAAS,GAEpBnwB,EAAOkkB,OAAOgM,QAAQgY,QACxBloC,EAAOkwB,QAAQgY,MAAQ,IAGzBtS,GAAO,GACP51B,EAAOwwB,QAAQ,EAAG,IAsClBoF,YAKJ,SAAkBjS,GAChB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,EAAE,KACF0oB,GACEnF,EACJ,MAAM1lB,EAAW4Z,IACXnT,EAASiU,IAYf,SAASgxB,EAAO3oC,GACd,IAAKhB,EAAOkpB,QAAS,OACrB,MACEuD,aAAcC,GACZ1sB,EACJ,IAAIK,EAAIW,EACJX,EAAEkpB,gBAAelpB,EAAIA,EAAEkpB,eAE3B,MAAMqgB,EAAKvpC,EAAE4I,SAAW5I,EAAEwpC,SACpBC,EAAa9pC,EAAOkkB,OAAO6lB,SAASD,WACpCE,EAAWF,GAAqB,KAAPF,EACzBK,EAAaH,GAAqB,KAAPF,EAC3BM,EAAqB,KAAPN,EACdO,EAAsB,KAAPP,EACfQ,EAAmB,KAAPR,EACZS,EAAqB,KAAPT,EAEpB,IAAK5pC,EAAOiuB,iBAAmBjuB,EAAOstB,gBAAkB6c,GAAgBnqC,EAAO+sB,cAAgBsd,GAAeJ,GAC5G,OAAO,EAGT,IAAKjqC,EAAOkuB,iBAAmBluB,EAAOstB,gBAAkB4c,GAAelqC,EAAO+sB,cAAgBqd,GAAaJ,GACzG,OAAO,EAGT,KAAI3pC,EAAEoJ,UAAYpJ,EAAEiqC,QAAUjqC,EAAEkqC,SAAWlqC,EAAEmqC,SAIzCvsC,EAAS2Y,eAAiB3Y,EAAS2Y,cAAcC,WAA+D,UAAlD5Y,EAAS2Y,cAAcC,SAAS4Q,eAA+E,aAAlDxpB,EAAS2Y,cAAcC,SAAS4Q,gBAA/J,CAIA,GAAIznB,EAAOkkB,OAAO6lB,SAASU,iBAAmBT,GAAYC,GAAcC,GAAeC,GAAgBC,GAAaC,GAAc,CAChI,IAAIK,GAAS,EAEb,GAAI1qC,EAAOgN,IAAIU,QAAQ,IAAI1N,EAAOkkB,OAAOuQ,YAAczxB,OAAS,GAAyE,IAApEhD,EAAOgN,IAAIU,QAAQ,IAAI1N,EAAOkkB,OAAOyQ,kBAAoB3xB,OAC5H,OAGF,MAAMgK,EAAMhN,EAAOgN,IACb29B,EAAc39B,EAAI,GAAG6oB,YACrB+U,EAAe59B,EAAI,GAAG8oB,aACtB+U,EAAcnmC,EAAO8mB,WACrBsf,EAAepmC,EAAO+6B,YACtBsL,EAAe/qC,EAAOgN,IAAI4R,SAC5B8N,IAAKqe,EAAazrB,MAAQtf,EAAOgN,IAAI,GAAGmS,YAC5C,MAAM6rB,EAAc,CAAC,CAACD,EAAazrB,KAAMyrB,EAAa1rB,KAAM,CAAC0rB,EAAazrB,KAAOqrB,EAAaI,EAAa1rB,KAAM,CAAC0rB,EAAazrB,KAAMyrB,EAAa1rB,IAAMurB,GAAe,CAACG,EAAazrB,KAAOqrB,EAAaI,EAAa1rB,IAAMurB,IAE5N,IAAK,IAAIlvC,EAAI,EAAGA,EAAIsvC,EAAYhoC,OAAQtH,GAAK,EAAG,CAC9C,MAAMikC,EAAQqL,EAAYtvC,GAE1B,GAAIikC,EAAM,IAAM,GAAKA,EAAM,IAAMkL,GAAelL,EAAM,IAAM,GAAKA,EAAM,IAAMmL,EAAc,CACzF,GAAiB,IAAbnL,EAAM,IAAyB,IAAbA,EAAM,GAAU,SAEtC+K,GAAS,GAIb,IAAKA,EAAQ,OAGX1qC,EAAOstB,iBACL0c,GAAYC,GAAcC,GAAeC,KACvC9pC,EAAEiH,eAAgBjH,EAAEiH,iBAAsBjH,EAAE4qC,aAAc,KAG3DhB,GAAcE,KAAkBzd,IAAQsd,GAAYE,IAAgBxd,IAAK1sB,EAAOy8B,cAChFuN,GAAYE,KAAiBxd,IAAQud,GAAcE,IAAiBzd,IAAK1sB,EAAO68B,eAEjFmN,GAAYC,GAAcG,GAAaC,KACrChqC,EAAEiH,eAAgBjH,EAAEiH,iBAAsBjH,EAAE4qC,aAAc,IAG5DhB,GAAcI,IAAarqC,EAAOy8B,aAClCuN,GAAYI,IAAWpqC,EAAO68B,aAGpC/T,EAAK,WAAY8gB,IAInB,SAAShjC,IACH5G,EAAO+pC,SAAS7gB,UACpBprB,EAAEG,GAAUmC,GAAG,UAAWupC,GAC1B3pC,EAAO+pC,SAAS7gB,SAAU,GAG5B,SAASgW,IACFl/B,EAAO+pC,SAAS7gB,UACrBprB,EAAEG,GAAUkf,IAAI,UAAWwsB,GAC3B3pC,EAAO+pC,SAAS7gB,SAAU,GAtG5BlpB,EAAO+pC,SAAW,CAChB7gB,SAAS,GAEX0Y,EAAa,CACXmI,SAAU,CACR7gB,SAAS,EACTuhB,gBAAgB,EAChBX,YAAY,KAkGhB1pC,EAAG,OAAQ,KACLJ,EAAOkkB,OAAO6lB,SAAS7gB,SACzBtiB,MAGJxG,EAAG,UAAW,KACRJ,EAAO+pC,SAAS7gB,SAClBgW,MAGJ9iC,OAAOyQ,OAAO7M,EAAO+pC,SAAU,CAC7BnjC,SACAs4B,aAKJ,SAAoBvb,GAClB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,EAAE,KACF0oB,GACEnF,EACJ,MAAMjf,EAASiU,IAgBf,IAAIuyB,EAfJtJ,EAAa,CACXuJ,WAAY,CACVjiB,SAAS,EACTkiB,gBAAgB,EAChBC,QAAQ,EACRC,aAAa,EACbC,YAAa,EACbC,aAAc,YACdC,eAAgB,KAChBC,cAAe,QAGnB1rC,EAAOmrC,WAAa,CAClBjiB,SAAS,GAGX,IACIyiB,EADAC,EAAiBxqB,IAErB,MAAMyqB,EAAoB,GAkF1B,SAASC,IACF9rC,EAAOkpB,UACZlpB,EAAO+rC,cAAe,GAGxB,SAASC,IACFhsC,EAAOkpB,UACZlpB,EAAO+rC,cAAe,GAGxB,SAASE,EAAcC,GACrB,QAAIlsC,EAAOkkB,OAAOinB,WAAWM,gBAAkBS,EAASC,MAAQnsC,EAAOkkB,OAAOinB,WAAWM,gBAKrFzrC,EAAOkkB,OAAOinB,WAAWO,eAAiBtqB,IAAQwqB,EAAiB5rC,EAAOkkB,OAAOinB,WAAWO,iBAQ5FQ,EAASC,OAAS,GAAK/qB,IAAQwqB,EAAiB,MAiBhDM,EAASxjB,UAAY,EACjB1oB,EAAOowB,QAASpwB,EAAOkkB,OAAOxkB,MAAUM,EAAOmpB,YACnDnpB,EAAOy8B,YACP3T,EAAK,SAAUojB,EAASE,MAEfpsC,EAAOiwB,cAAejwB,EAAOkkB,OAAOxkB,MAAUM,EAAOmpB,YAChEnpB,EAAO68B,YACP/T,EAAK,SAAUojB,EAASE,MAI1BR,GAAiB,IAAIlnC,EAAO2c,MAAOsD,UAE5B,IAmBT,SAASglB,EAAO3oC,GACd,IAAIX,EAAIW,EACJutB,GAAsB,EAC1B,IAAKvuB,EAAOkpB,QAAS,OACrB,MAAMhF,EAASlkB,EAAOkkB,OAAOinB,WAEzBnrC,EAAOkkB,OAAOmF,SAChBhpB,EAAEiH,iBAGJ,IAAI7I,EAASuB,EAAOgN,IAMpB,GAJ8C,cAA1ChN,EAAOkkB,OAAOinB,WAAWK,eAC3B/sC,EAASX,EAAEkC,EAAOkkB,OAAOinB,WAAWK,gBAGjCxrC,EAAO+rC,eAAiBttC,EAAO,GAAG0c,SAAS9a,EAAE5B,UAAYylB,EAAOknB,eAAgB,OAAO,EACxF/qC,EAAEkpB,gBAAelpB,EAAIA,EAAEkpB,eAE3B,IAAI4iB,EAAQ,EACZ,MAAME,EAAYrsC,EAAOysB,cAAgB,EAAI,EACvC1uB,EA9KR,SAAmBsC,GAKjB,IAAIisC,EAAK,EACLC,EAAK,EAELC,EAAK,EACLC,EAAK,EA+DT,MA5DI,WAAYpsC,IACdksC,EAAKlsC,EAAEjC,QAGL,eAAgBiC,IAClBksC,GAAMlsC,EAAEqsC,WAAa,KAGnB,gBAAiBrsC,IACnBksC,GAAMlsC,EAAEssC,YAAc,KAGpB,gBAAiBtsC,IACnBisC,GAAMjsC,EAAEusC,YAAc,KAIpB,SAAUvsC,GAAKA,EAAEkhB,OAASlhB,EAAEwsC,kBAC9BP,EAAKC,EACLA,EAAK,GAGPC,EAhCmB,GAgCdF,EACLG,EAjCmB,GAiCdF,EAED,WAAYlsC,IACdosC,EAAKpsC,EAAEysC,QAGL,WAAYzsC,IACdmsC,EAAKnsC,EAAE0sC,QAGL1sC,EAAEoJ,WAAa+iC,IAEjBA,EAAKC,EACLA,EAAK,IAGFD,GAAMC,IAAOpsC,EAAE2sC,YACE,IAAhB3sC,EAAE2sC,WAEJR,GAnDgB,GAoDhBC,GApDgB,KAuDhBD,GAtDgB,IAuDhBC,GAvDgB,MA4DhBD,IAAOF,IACTA,EAAKE,EAAK,GAAK,EAAI,GAGjBC,IAAOF,IACTA,EAAKE,EAAK,GAAK,EAAI,GAGd,CACLQ,MAAOX,EACPY,MAAOX,EACPY,OAAQX,EACRY,OAAQX,GAkGG3P,CAAUz8B,GAEvB,GAAI6jB,EAAOonB,YACT,GAAItrC,EAAOstB,eAAgB,CACzB,KAAIzI,KAAK2I,IAAIzvB,EAAKovC,QAAUtoB,KAAK2I,IAAIzvB,EAAKqvC,SAA+C,OAAO,EAA7CjB,GAASpuC,EAAKovC,OAASd,MACrE,MAAIxnB,KAAK2I,IAAIzvB,EAAKqvC,QAAUvoB,KAAK2I,IAAIzvB,EAAKovC,SAAmC,OAAO,EAAjChB,GAASpuC,EAAKqvC,YAExEjB,EAAQtnB,KAAK2I,IAAIzvB,EAAKovC,QAAUtoB,KAAK2I,IAAIzvB,EAAKqvC,SAAWrvC,EAAKovC,OAASd,GAAatuC,EAAKqvC,OAG3F,GAAc,IAAVjB,EAAa,OAAO,EACpBjoB,EAAOmnB,SAAQc,GAASA,GAE5B,IAAIkB,EAAYrtC,EAAOshB,eAAiB6qB,EAAQjoB,EAAOqnB,YAavD,GAZI8B,GAAartC,EAAOitB,iBAAgBogB,EAAYrtC,EAAOitB,gBACvDogB,GAAartC,EAAOgtB,iBAAgBqgB,EAAYrtC,EAAOgtB,gBAQ3DuB,IAAsBvuB,EAAOkkB,OAAOxkB,QAAgB2tC,IAAcrtC,EAAOitB,gBAAkBogB,IAAcrtC,EAAOgtB,gBAC5GuB,GAAuBvuB,EAAOkkB,OAAOwJ,QAAQrtB,EAAEstB,kBAE9C3tB,EAAOkkB,OAAOqI,UAAavsB,EAAOkkB,OAAOqI,SAASrD,QAkChD,CAML,MAAMgjB,EAAW,CACfloB,KAAM5C,IACN+qB,MAAOtnB,KAAK2I,IAAI2e,GAChBzjB,UAAW7D,KAAKyoB,KAAKnB,IAEjBoB,EAAoB5B,GAAuBO,EAASloB,KAAO2nB,EAAoB3nB,KAAO,KAAOkoB,EAASC,OAASR,EAAoBQ,OAASD,EAASxjB,YAAcijB,EAAoBjjB,UAE7L,IAAK6kB,EAAmB,CACtB5B,OAAsBt+B,EAElBrN,EAAOkkB,OAAOxkB,MAChBM,EAAOspB,UAGT,IAAIkkB,EAAWxtC,EAAOshB,eAAiB6qB,EAAQjoB,EAAOqnB,YACtD,MAAMnR,EAAep6B,EAAOiwB,YACtBoK,EAASr6B,EAAOowB,MAatB,GAZIod,GAAYxtC,EAAOitB,iBAAgBugB,EAAWxtC,EAAOitB,gBACrDugB,GAAYxtC,EAAOgtB,iBAAgBwgB,EAAWxtC,EAAOgtB,gBACzDhtB,EAAO6tB,cAAc,GACrB7tB,EAAO+uB,aAAaye,GACpBxtC,EAAO8uB,iBACP9uB,EAAO4uB,oBACP5uB,EAAO6uB,wBAEFuL,GAAgBp6B,EAAOiwB,cAAgBoK,GAAUr6B,EAAOowB,QAC3DpwB,EAAO6uB,sBAGL7uB,EAAOkkB,OAAOqI,SAASkhB,OAAQ,CAYjC/0B,aAAawyB,GACbA,OAAU79B,EAENw+B,EAAkB7oC,QAAU,IAC9B6oC,EAAkB6B,QAGpB,MAAMC,EAAY9B,EAAkB7oC,OAAS6oC,EAAkBA,EAAkB7oC,OAAS,QAAKqK,EACzFugC,EAAa/B,EAAkB,GAGrC,GAFAA,EAAkBz4B,KAAK84B,GAEnByB,IAAczB,EAASC,MAAQwB,EAAUxB,OAASD,EAASxjB,YAAcilB,EAAUjlB,WAErFmjB,EAAkBnuB,OAAO,QACpB,GAAImuB,EAAkB7oC,QAAU,IAAMkpC,EAASloB,KAAO4pB,EAAW5pB,KAAO,KAAO4pB,EAAWzB,MAAQD,EAASC,OAAS,GAAKD,EAASC,OAAS,EAAG,CAOnJ,MAAM0B,EAAkB1B,EAAQ,EAAI,GAAM,GAC1CR,EAAsBO,EACtBL,EAAkBnuB,OAAO,GACzBwtB,EAAUhqB,EAAS,KACjBlhB,EAAOq9B,eAAer9B,EAAOkkB,OAAOvkB,OAAO,OAAM0N,EAAWwgC,IAC3D,GAGA3C,IAIHA,EAAUhqB,EAAS,KAEjByqB,EAAsBO,EACtBL,EAAkBnuB,OAAO,GACzB1d,EAAOq9B,eAAer9B,EAAOkkB,OAAOvkB,OAAO,OAAM0N,EAHzB,KAIvB,MASP,GAJKkgC,GAAmBzkB,EAAK,SAAUzoB,GAEnCL,EAAOkkB,OAAO8M,UAAYhxB,EAAOkkB,OAAO4pB,8BAA8B9tC,EAAOgxB,SAAS/rB,OAEtFuoC,IAAaxtC,EAAOitB,gBAAkBugB,IAAaxtC,EAAOgtB,eAAgB,OAAO,OAhIzB,CAE9D,MAAMkf,EAAW,CACfloB,KAAM5C,IACN+qB,MAAOtnB,KAAK2I,IAAI2e,GAChBzjB,UAAW7D,KAAKyoB,KAAKnB,GACrBC,IAAKprC,GAGH6qC,EAAkB7oC,QAAU,GAC9B6oC,EAAkB6B,QAGpB,MAAMC,EAAY9B,EAAkB7oC,OAAS6oC,EAAkBA,EAAkB7oC,OAAS,QAAKqK,EAkB/F,GAjBAw+B,EAAkBz4B,KAAK84B,GAOnByB,GACEzB,EAASxjB,YAAcilB,EAAUjlB,WAAawjB,EAASC,MAAQwB,EAAUxB,OAASD,EAASloB,KAAO2pB,EAAU3pB,KAAO,MACrHioB,EAAcC,GAGhBD,EAAcC,GAzFpB,SAAuBA,GACrB,MAAMhoB,EAASlkB,EAAOkkB,OAAOinB,WAE7B,GAAIe,EAASxjB,UAAY,GACvB,GAAI1oB,EAAOowB,QAAUpwB,EAAOkkB,OAAOxkB,MAAQwkB,EAAOknB,eAEhD,OAAO,OAEJ,GAAIprC,EAAOiwB,cAAgBjwB,EAAOkkB,OAAOxkB,MAAQwkB,EAAOknB,eAE7D,OAAO,EAGT,OAAO,EAiFD2C,CAAc7B,GAChB,OAAO,EAqGX,OADI7rC,EAAEiH,eAAgBjH,EAAEiH,iBAAsBjH,EAAE4qC,aAAc,GACvD,EAGT,SAASpuB,EAAOva,GACd,IAAI7D,EAASuB,EAAOgN,IAE0B,cAA1ChN,EAAOkkB,OAAOinB,WAAWK,eAC3B/sC,EAASX,EAAEkC,EAAOkkB,OAAOinB,WAAWK,eAGtC/sC,EAAO6D,GAAQ,aAAcwpC,GAC7BrtC,EAAO6D,GAAQ,aAAc0pC,GAC7BvtC,EAAO6D,GAAQ,QAASqnC,GAG1B,SAAS/iC,IACP,OAAI5G,EAAOkkB,OAAOmF,SAChBrpB,EAAOmkB,UAAU1G,oBAAoB,QAASksB,IACvC,IAGL3pC,EAAOmrC,WAAWjiB,UACtBrM,EAAO,MACP7c,EAAOmrC,WAAWjiB,SAAU,GACrB,GAGT,SAASgW,IACP,OAAIl/B,EAAOkkB,OAAOmF,SAChBrpB,EAAOmkB,UAAUlH,iBAAiBjc,MAAO2oC,IAClC,KAGJ3pC,EAAOmrC,WAAWjiB,UACvBrM,EAAO,OACP7c,EAAOmrC,WAAWjiB,SAAU,GACrB,GAGT9oB,EAAG,OAAQ,MACJJ,EAAOkkB,OAAOinB,WAAWjiB,SAAWlpB,EAAOkkB,OAAOmF,SACrD6V,IAGEl/B,EAAOkkB,OAAOinB,WAAWjiB,SAAStiB,MAExCxG,EAAG,UAAW,KACRJ,EAAOkkB,OAAOmF,SAChBziB,IAGE5G,EAAOmrC,WAAWjiB,SAASgW,MAEjC9iC,OAAOyQ,OAAO7M,EAAOmrC,WAAY,CAC/BvkC,SACAs4B,aA2BJ,SAAoBvb,GAClB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,EAAE,KACF0oB,GACEnF,EAmBJ,SAASqqB,EAAMz0B,GACb,IAAIvM,EAUJ,OARIuM,IACFvM,EAAMlP,EAAEyb,GAEJvZ,EAAOkkB,OAAO4P,mBAAmC,iBAAPva,GAAmBvM,EAAIhK,OAAS,GAAoC,IAA/BhD,EAAOgN,IAAI5L,KAAKmY,GAAIvW,SACrGgK,EAAMhN,EAAOgN,IAAI5L,KAAKmY,KAInBvM,EAGT,SAASihC,EAASjhC,EAAKvJ,GACrB,MAAMygB,EAASlkB,EAAOkkB,OAAOtkB,WAEzBoN,GAAOA,EAAIhK,OAAS,IACtBgK,EAAIvJ,EAAW,WAAa,eAAeygB,EAAOgqB,eAC9ClhC,EAAI,IAAyB,WAAnBA,EAAI,GAAGmhC,UAAsBnhC,EAAI,GAAGvJ,SAAWA,GAEzDzD,EAAOkkB,OAAOkN,eAAiBpxB,EAAOkpB,SACxClc,EAAIhN,EAAOi+B,SAAW,WAAa,eAAe/Z,EAAOkqB,YAK/D,SAASxY,IAEP,GAAI51B,EAAOkkB,OAAOxkB,KAAM,OACxB,MAAM,QACJ2uC,EAAO,QACPC,GACEtuC,EAAOJ,WACXquC,EAASK,EAAStuC,EAAOiwB,cAAgBjwB,EAAOkkB,OAAO8L,QACvDie,EAASI,EAASruC,EAAOowB,QAAUpwB,EAAOkkB,OAAO8L,QAGnD,SAASue,EAAYluC,GACnBA,EAAEiH,mBACEtH,EAAOiwB,aAAgBjwB,EAAOkkB,OAAOxkB,MAASM,EAAOkkB,OAAO8L,UAChEhwB,EAAO68B,YACP/T,EAAK,mBAGP,SAAS0lB,EAAYnuC,GACnBA,EAAEiH,mBACEtH,EAAOowB,OAAUpwB,EAAOkkB,OAAOxkB,MAASM,EAAOkkB,OAAO8L,UAC1DhwB,EAAOy8B,YACP3T,EAAK,mBAGP,SAAS8J,IACP,MAAM1O,EAASlkB,EAAOkkB,OAAOtkB,WAK7B,GAJAI,EAAOkkB,OAAOtkB,WAAamkC,EAA0B/jC,EAAQA,EAAO0+B,eAAe9+B,WAAYI,EAAOkkB,OAAOtkB,WAAY,CACvHC,OAAQ,qBACRC,OAAQ,wBAEJokB,EAAOrkB,SAAUqkB,EAAOpkB,OAAS,OACvC,MAAMuuC,EAAUL,EAAM9pB,EAAOrkB,QACvByuC,EAAUN,EAAM9pB,EAAOpkB,QAEzBuuC,GAAWA,EAAQrrC,OAAS,GAC9BqrC,EAAQjuC,GAAG,QAASouC,GAGlBF,GAAWA,EAAQtrC,OAAS,GAC9BsrC,EAAQluC,GAAG,QAASmuC,GAGtBnyC,OAAOyQ,OAAO7M,EAAOJ,WAAY,CAC/ByuC,UACAxuC,OAAQwuC,GAAWA,EAAQ,GAC3BC,UACAxuC,OAAQwuC,GAAWA,EAAQ,KAGxBtuC,EAAOkpB,UACNmlB,GAASA,EAAQnsC,SAASgiB,EAAOkqB,WACjCE,GAASA,EAAQpsC,SAASgiB,EAAOkqB,YAIzC,SAASK,IACP,MAAM,QACJJ,EAAO,QACPC,GACEtuC,EAAOJ,WAEPyuC,GAAWA,EAAQrrC,SACrBqrC,EAAQlxB,IAAI,QAASqxB,GACrBH,EAAQpoC,YAAYjG,EAAOkkB,OAAOtkB,WAAWsuC,gBAG3CI,GAAWA,EAAQtrC,SACrBsrC,EAAQnxB,IAAI,QAASoxB,GACrBD,EAAQroC,YAAYjG,EAAOkkB,OAAOtkB,WAAWsuC,gBAlHjDtM,EAAa,CACXhiC,WAAY,CACVC,OAAQ,KACRC,OAAQ,KACR4uC,aAAa,EACbR,cAAe,yBACfS,YAAa,uBACbP,UAAW,qBACXQ,wBAAyB,gCAG7B5uC,EAAOJ,WAAa,CAClBC,OAAQ,KACRwuC,QAAS,KACTvuC,OAAQ,KACRwuC,QAAS,MAuGXluC,EAAG,OAAQ,MACgC,IAArCJ,EAAOkkB,OAAOtkB,WAAWspB,QAE3BgW,KAEAtM,IACAgD,OAGJx1B,EAAG,8BAA+B,KAChCw1B,MAEFx1B,EAAG,UAAW,KACZquC,MAEFruC,EAAG,iBAAkB,KACnB,MAAM,QACJiuC,EAAO,QACPC,GACEtuC,EAAOJ,WAEPyuC,GACFA,EAAQruC,EAAOkpB,QAAU,cAAgB,YAAYlpB,EAAOkkB,OAAOtkB,WAAWwuC,WAG5EE,GACFA,EAAQtuC,EAAOkpB,QAAU,cAAgB,YAAYlpB,EAAOkkB,OAAOtkB,WAAWwuC,aAGlFhuC,EAAG,QAAS,CAACklC,EAAIjlC,KACf,MAAM,QACJguC,EAAO,QACPC,GACEtuC,EAAOJ,WACLivC,EAAWxuC,EAAE5B,OAEnB,GAAIuB,EAAOkkB,OAAOtkB,WAAW8uC,cAAgB5wC,EAAE+wC,GAAUrnC,GAAG8mC,KAAaxwC,EAAE+wC,GAAUrnC,GAAG6mC,GAAU,CAChG,GAAIruC,EAAO8uC,YAAc9uC,EAAOkkB,OAAO4qB,YAAc9uC,EAAOkkB,OAAO4qB,WAAWC,YAAc/uC,EAAO8uC,WAAWv1B,KAAOs1B,GAAY7uC,EAAO8uC,WAAWv1B,GAAG4B,SAAS0zB,IAAY,OAC3K,IAAIG,EAEAX,EACFW,EAAWX,EAAQpsC,SAASjC,EAAOkkB,OAAOtkB,WAAW+uC,aAC5CL,IACTU,EAAWV,EAAQrsC,SAASjC,EAAOkkB,OAAOtkB,WAAW+uC,cAIrD7lB,GADe,IAAbkmB,EACG,iBAEA,kBAGHX,GACFA,EAAQ1mC,YAAY3H,EAAOkkB,OAAOtkB,WAAW+uC,aAG3CL,GACFA,EAAQ3mC,YAAY3H,EAAOkkB,OAAOtkB,WAAW+uC,gBAKnD,MAMMzP,EAAU,KACdl/B,EAAOgN,IAAI9K,SAASlC,EAAOkkB,OAAOtkB,WAAWgvC,yBAC7CH,KAGFryC,OAAOyQ,OAAO7M,EAAOJ,WAAY,CAC/BgH,OAZa,KACb5G,EAAOgN,IAAI/G,YAAYjG,EAAOkkB,OAAOtkB,WAAWgvC,yBAChDhc,IACAgD,KAUAsJ,UACAtJ,SACAhD,OACA6b,aAaJ,SAAoB9qB,GAClB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,EAAE,KACF0oB,GACEnF,EACJ,MAAMsrB,EAAM,oBAsCZ,IAAIC,EArCJtN,EAAa,CACXkN,WAAY,CACVv1B,GAAI,KACJ41B,cAAe,OACfJ,WAAW,EACXL,aAAa,EACbU,aAAc,KACdC,kBAAmB,KACnBC,eAAgB,KAChBC,aAAc,KACdC,qBAAqB,EACrBhvC,KAAM,UAENivC,gBAAgB,EAChBC,mBAAoB,EACpBC,sBAAuBC,GAAUA,EACjCC,oBAAqBD,GAAUA,EAC/BE,YAAgBb,EAAH,UACbc,kBAAsBd,EAAH,iBACnBe,cAAkBf,EAAH,IACfgB,aAAiBhB,EAAH,WACdiB,WAAejB,EAAH,SACZN,YAAgBM,EAAH,UACbkB,qBAAyBlB,EAAH,oBACtBmB,yBAA6BnB,EAAH,wBAC1BoB,eAAmBpB,EAAH,aAChBb,UAAca,EAAH,QACXqB,gBAAoBrB,EAAH,cACjBsB,cAAkBtB,EAAH,YACfuB,wBAA4BvB,EAAH,eAG7BjvC,EAAO8uC,WAAa,CAClBv1B,GAAI,KACJvM,IAAK,KACLyjC,QAAS,IAGX,IAAIC,EAAqB,EAEzB,SAASC,IACP,OAAQ3wC,EAAOkkB,OAAO4qB,WAAWv1B,KAAOvZ,EAAO8uC,WAAWv1B,KAAOvZ,EAAO8uC,WAAW9hC,KAAwC,IAAjChN,EAAO8uC,WAAW9hC,IAAIhK,OAGlH,SAAS4tC,EAAeC,EAAWrD,GACjC,MAAM,kBACJuC,GACE/vC,EAAOkkB,OAAO4qB,WAClB+B,EAAUrD,KAAYtrC,SAAS,GAAG6tC,KAAqBvC,KAAYA,KAAYtrC,SAAS,GAAG6tC,KAAqBvC,KAAYA,KAG9H,SAAS5X,IAEP,MAAMlJ,EAAM1sB,EAAO0sB,IACbxI,EAASlkB,EAAOkkB,OAAO4qB,WAC7B,GAAI6B,IAAwB,OAC5B,MAAMra,EAAet2B,EAAOkwB,SAAWlwB,EAAOkkB,OAAOgM,QAAQhH,QAAUlpB,EAAOkwB,QAAQC,OAAOntB,OAAShD,EAAOmwB,OAAOntB,OAC9GgK,EAAMhN,EAAO8uC,WAAW9hC,IAE9B,IAAIyX,EACJ,MAAMqsB,EAAQ9wC,EAAOkkB,OAAOxkB,KAAOmlB,KAAKyU,MAAMhD,EAAqC,EAAtBt2B,EAAOm0B,cAAoBn0B,EAAOkkB,OAAO0L,gBAAkB5vB,EAAO6wB,SAAS7tB,OAkBxI,GAhBIhD,EAAOkkB,OAAOxkB,MAChB+kB,EAAUI,KAAKyU,MAAMt5B,EAAO4oB,YAAc5oB,EAAOm0B,cAAgBn0B,EAAOkkB,OAAO0L,gBAE3EnL,EAAU6R,EAAe,EAA0B,EAAtBt2B,EAAOm0B,eACtC1P,GAAW6R,EAAqC,EAAtBt2B,EAAOm0B,cAG/B1P,EAAUqsB,EAAQ,IAAGrsB,GAAWqsB,GAChCrsB,EAAU,GAAsC,YAAjCzkB,EAAOkkB,OAAO6sB,iBAA8BtsB,EAAUqsB,EAAQrsB,IAEjFA,OADqC,IAArBzkB,EAAO04B,UACb14B,EAAO04B,UAEP14B,EAAO4oB,aAAe,EAId,YAAhB1E,EAAO1jB,MAAsBR,EAAO8uC,WAAW2B,SAAWzwC,EAAO8uC,WAAW2B,QAAQztC,OAAS,EAAG,CAClG,MAAMytC,EAAUzwC,EAAO8uC,WAAW2B,QAClC,IAAIO,EACA7T,EACA8T,EAuBJ,GArBI/sB,EAAOurB,iBACTP,EAAauB,EAAQnqC,GAAG,GAAGtG,EAAOstB,eAAiB,aAAe,gBAAe,GACjFtgB,EAAItL,IAAI1B,EAAOstB,eAAiB,QAAU,SAAa4hB,GAAchrB,EAAOwrB,mBAAqB,GAA7C,MAEhDxrB,EAAOwrB,mBAAqB,QAA8BriC,IAAzBrN,EAAO6oB,gBAC1C6nB,GAAsBjsB,GAAWzkB,EAAO6oB,cAAgB7oB,EAAOm0B,cAAgB,GAE3Euc,EAAqBxsB,EAAOwrB,mBAAqB,EACnDgB,EAAqBxsB,EAAOwrB,mBAAqB,EACxCgB,EAAqB,IAC9BA,EAAqB,IAIzBM,EAAansB,KAAKC,IAAIL,EAAUisB,EAAoB,GACpDvT,EAAY6T,GAAcnsB,KAAKE,IAAI0rB,EAAQztC,OAAQkhB,EAAOwrB,oBAAsB,GAChFuB,GAAY9T,EAAY6T,GAAc,GAGxCP,EAAQxqC,YAAY,CAAC,GAAI,QAAS,aAAc,QAAS,aAAc,SAASyK,IAAIwgC,GAAU,GAAGhtB,EAAO6rB,oBAAoBmB,KAAUvgC,KAAK,MAEvI3D,EAAIhK,OAAS,EACfytC,EAAQt9B,KAAKg+B,IACX,MAAMC,EAAUtzC,EAAEqzC,GACZE,EAAcD,EAAQliC,QAExBmiC,IAAgB5sB,GAClB2sB,EAAQlvC,SAASgiB,EAAO6rB,mBAGtB7rB,EAAOurB,iBACL4B,GAAeL,GAAcK,GAAelU,GAC9CiU,EAAQlvC,SAAYgiB,EAAO6rB,kBAAV,SAGfsB,IAAgBL,GAClBJ,EAAeQ,EAAS,QAGtBC,IAAgBlU,GAClByT,EAAeQ,EAAS,eAIzB,CACL,MAAMA,EAAUX,EAAQnqC,GAAGme,GACrB4sB,EAAcD,EAAQliC,QAG5B,GAFAkiC,EAAQlvC,SAASgiB,EAAO6rB,mBAEpB7rB,EAAOurB,eAAgB,CACzB,MAAM6B,EAAwBb,EAAQnqC,GAAG0qC,GACnCO,EAAuBd,EAAQnqC,GAAG62B,GAExC,IAAK,IAAIzhC,EAAIs1C,EAAYt1C,GAAKyhC,EAAWzhC,GAAK,EAC5C+0C,EAAQnqC,GAAG5K,GAAGwG,SAAYgiB,EAAO6rB,kBAAV,SAGzB,GAAI/vC,EAAOkkB,OAAOxkB,KAChB,GAAI2xC,GAAeZ,EAAQztC,OAAQ,CACjC,IAAK,IAAItH,EAAIwoB,EAAOwrB,mBAAoBh0C,GAAK,EAAGA,GAAK,EACnD+0C,EAAQnqC,GAAGmqC,EAAQztC,OAAStH,GAAGwG,SAAYgiB,EAAO6rB,kBAAV,SAG1CU,EAAQnqC,GAAGmqC,EAAQztC,OAASkhB,EAAOwrB,mBAAqB,GAAGxtC,SAAYgiB,EAAO6rB,kBAAV,cAEpEa,EAAeU,EAAuB,QACtCV,EAAeW,EAAsB,aAGvCX,EAAeU,EAAuB,QACtCV,EAAeW,EAAsB,SAK3C,GAAIrtB,EAAOurB,eAAgB,CACzB,MAAM+B,EAAuB3sB,KAAKE,IAAI0rB,EAAQztC,OAAQkhB,EAAOwrB,mBAAqB,GAC5E+B,GAAiBvC,EAAasC,EAAuBtC,GAAc,EAAI+B,EAAW/B,EAClFvG,EAAajc,EAAM,QAAU,OACnC+jB,EAAQ/uC,IAAI1B,EAAOstB,eAAiBqb,EAAa,MAAU8I,EAAH,OAS5D,GALoB,aAAhBvtB,EAAO1jB,OACTwM,EAAI5L,KAAK8iC,EAAkBhgB,EAAO+rB,eAAe5uC,KAAK6iB,EAAOyrB,sBAAsBlrB,EAAU,IAC7FzX,EAAI5L,KAAK8iC,EAAkBhgB,EAAOgsB,aAAa7uC,KAAK6iB,EAAO2rB,oBAAoBiB,KAG7D,gBAAhB5sB,EAAO1jB,KAAwB,CACjC,IAAIkxC,EAGFA,EADExtB,EAAOsrB,oBACcxvC,EAAOstB,eAAiB,WAAa,aAErCttB,EAAOstB,eAAiB,aAAe,WAGhE,MAAMqkB,GAASltB,EAAU,GAAKqsB,EAC9B,IAAIc,EAAS,EACTC,EAAS,EAEgB,eAAzBH,EACFE,EAASD,EAETE,EAASF,EAGX3kC,EAAI5L,KAAK8iC,EAAkBhgB,EAAOisB,uBAAuBx0B,UAAU,6BAA6Bi2B,aAAkBC,MAAWj2B,WAAW5b,EAAOkkB,OAAOvkB,OAGpI,WAAhBukB,EAAO1jB,MAAqB0jB,EAAOqrB,cACrCviC,EAAIvL,KAAKyiB,EAAOqrB,aAAavvC,EAAQykB,EAAU,EAAGqsB,IAClDhoB,EAAK,mBAAoB9b,EAAI,KAE7B8b,EAAK,mBAAoB9b,EAAI,IAG3BhN,EAAOkkB,OAAOkN,eAAiBpxB,EAAOkpB,SACxClc,EAAIhN,EAAOi+B,SAAW,WAAa,eAAe/Z,EAAOkqB,WAI7D,SAAS0D,IAEP,MAAM5tB,EAASlkB,EAAOkkB,OAAO4qB,WAC7B,GAAI6B,IAAwB,OAC5B,MAAMra,EAAet2B,EAAOkwB,SAAWlwB,EAAOkkB,OAAOgM,QAAQhH,QAAUlpB,EAAOkwB,QAAQC,OAAOntB,OAAShD,EAAOmwB,OAAOntB,OAC9GgK,EAAMhN,EAAO8uC,WAAW9hC,IAC9B,IAAI+kC,EAAiB,GAErB,GAAoB,YAAhB7tB,EAAO1jB,KAAoB,CAC7B,IAAIwxC,EAAkBhyC,EAAOkkB,OAAOxkB,KAAOmlB,KAAKyU,MAAMhD,EAAqC,EAAtBt2B,EAAOm0B,cAAoBn0B,EAAOkkB,OAAO0L,gBAAkB5vB,EAAO6wB,SAAS7tB,OAE5IhD,EAAOkkB,OAAOqI,UAAYvsB,EAAOkkB,OAAOqI,SAASrD,UAAYlpB,EAAOkkB,OAAOxkB,MAAQsyC,EAAkB1b,IACvG0b,EAAkB1b,GAGpB,IAAK,IAAI56B,EAAI,EAAGA,EAAIs2C,EAAiBt2C,GAAK,EACpCwoB,EAAOkrB,aACT2C,GAAkB7tB,EAAOkrB,aAAavzC,KAAKmE,EAAQtE,EAAGwoB,EAAO4rB,aAE7DiC,GAAkB,IAAI7tB,EAAOirB,wBAAwBjrB,EAAO4rB,kBAAkB5rB,EAAOirB,iBAIzFniC,EAAIvL,KAAKswC,GACT/xC,EAAO8uC,WAAW2B,QAAUzjC,EAAI5L,KAAK8iC,EAAkBhgB,EAAO4rB,cAG5C,aAAhB5rB,EAAO1jB,OAEPuxC,EADE7tB,EAAOorB,eACQprB,EAAOorB,eAAezzC,KAAKmE,EAAQkkB,EAAO+rB,aAAc/rB,EAAOgsB,YAE/D,gBAAgBhsB,EAAO+rB,wCAAkD/rB,EAAOgsB,sBAGnGljC,EAAIvL,KAAKswC,IAGS,gBAAhB7tB,EAAO1jB,OAEPuxC,EADE7tB,EAAOmrB,kBACQnrB,EAAOmrB,kBAAkBxzC,KAAKmE,EAAQkkB,EAAOisB,sBAE7C,gBAAgBjsB,EAAOisB,gCAG1CnjC,EAAIvL,KAAKswC,IAGS,WAAhB7tB,EAAO1jB,MACTsoB,EAAK,mBAAoB9oB,EAAO8uC,WAAW9hC,IAAI,IAInD,SAAS4lB,IACP5yB,EAAOkkB,OAAO4qB,WAAa/K,EAA0B/jC,EAAQA,EAAO0+B,eAAeoQ,WAAY9uC,EAAOkkB,OAAO4qB,WAAY,CACvHv1B,GAAI,sBAEN,MAAM2K,EAASlkB,EAAOkkB,OAAO4qB,WAC7B,IAAK5qB,EAAO3K,GAAI,OAChB,IAAIvM,EAAMlP,EAAEomB,EAAO3K,IACA,IAAfvM,EAAIhK,SAEJhD,EAAOkkB,OAAO4P,mBAA0C,iBAAd5P,EAAO3K,IAAmBvM,EAAIhK,OAAS,IACnFgK,EAAMhN,EAAOgN,IAAI5L,KAAK8iB,EAAO3K,IAEzBvM,EAAIhK,OAAS,IACfgK,EAAMA,EAAI0M,OAAOH,GACXzb,EAAEyb,GAAI7L,QAAQ,WAAW,KAAO1N,EAAOuZ,MAM7B,YAAhB2K,EAAO1jB,MAAsB0jB,EAAO6qB,WACtC/hC,EAAI9K,SAASgiB,EAAOmsB,gBAGtBrjC,EAAI9K,SAASgiB,EAAO8rB,cAAgB9rB,EAAO1jB,MAC3CwM,EAAI9K,SAASlC,EAAOstB,eAAiBpJ,EAAOosB,gBAAkBpsB,EAAOqsB,eAEjD,YAAhBrsB,EAAO1jB,MAAsB0jB,EAAOurB,iBACtCziC,EAAI9K,SAAS,GAAGgiB,EAAO8rB,gBAAgB9rB,EAAO1jB,gBAC9CkwC,EAAqB,EAEjBxsB,EAAOwrB,mBAAqB,IAC9BxrB,EAAOwrB,mBAAqB,IAIZ,gBAAhBxrB,EAAO1jB,MAA0B0jB,EAAOsrB,qBAC1CxiC,EAAI9K,SAASgiB,EAAOksB,0BAGlBlsB,EAAO6qB,WACT/hC,EAAI5M,GAAG,QAAS8jC,EAAkBhgB,EAAO4rB,cAAc,SAAiBzvC,GACtEA,EAAEiH,iBACF,IAAI4H,EAAQpR,EAAEwC,MAAM4O,QAAUlP,EAAOkkB,OAAO0L,eACxC5vB,EAAOkkB,OAAOxkB,OAAMwP,GAASlP,EAAOm0B,cACxCn0B,EAAOwwB,QAAQthB,MAInB9S,OAAOyQ,OAAO7M,EAAO8uC,WAAY,CAC/B9hC,MACAuM,GAAIvM,EAAI,KAGLhN,EAAOkpB,SACVlc,EAAI9K,SAASgiB,EAAOkqB,YAIxB,SAASK,IACP,MAAMvqB,EAASlkB,EAAOkkB,OAAO4qB,WAC7B,GAAI6B,IAAwB,OAC5B,MAAM3jC,EAAMhN,EAAO8uC,WAAW9hC,IAC9BA,EAAI/G,YAAYie,EAAOyqB,aACvB3hC,EAAI/G,YAAYie,EAAO8rB,cAAgB9rB,EAAO1jB,MAC9CwM,EAAI/G,YAAYjG,EAAOstB,eAAiBpJ,EAAOosB,gBAAkBpsB,EAAOqsB,eACpEvwC,EAAO8uC,WAAW2B,SAAWzwC,EAAO8uC,WAAW2B,QAAQxqC,aAAajG,EAAO8uC,WAAW2B,QAAQxqC,YAAYie,EAAO6rB,mBAEjH7rB,EAAO6qB,WACT/hC,EAAImQ,IAAI,QAAS+mB,EAAkBhgB,EAAO4rB,cAI9C1vC,EAAG,OAAQ,MACgC,IAArCJ,EAAOkkB,OAAO4qB,WAAW5lB,QAE3BgW,KAEAtM,IACAkf,IACAlc,OAGJx1B,EAAG,oBAAqB,MAClBJ,EAAOkkB,OAAOxkB,WAEqB,IAArBM,EAAO04B,YADvB9C,MAKJx1B,EAAG,kBAAmB,KACfJ,EAAOkkB,OAAOxkB,MACjBk2B,MAGJx1B,EAAG,qBAAsB,KACnBJ,EAAOkkB,OAAOxkB,OAChBoyC,IACAlc,OAGJx1B,EAAG,uBAAwB,KACpBJ,EAAOkkB,OAAOxkB,OACjBoyC,IACAlc,OAGJx1B,EAAG,UAAW,KACZquC,MAEFruC,EAAG,iBAAkB,KACnB,MAAM,IACJ4M,GACEhN,EAAO8uC,WAEP9hC,GACFA,EAAIhN,EAAOkpB,QAAU,cAAgB,YAAYlpB,EAAOkkB,OAAO4qB,WAAWV,aAG9EhuC,EAAG,cAAe,KAChBw1B,MAEFx1B,EAAG,QAAS,CAACklC,EAAIjlC,KACf,MAAMwuC,EAAWxuC,EAAE5B,QACb,IACJuO,GACEhN,EAAO8uC,WAEX,GAAI9uC,EAAOkkB,OAAO4qB,WAAWv1B,IAAMvZ,EAAOkkB,OAAO4qB,WAAWJ,aAAe1hC,GAAOA,EAAIhK,OAAS,IAAMlF,EAAE+wC,GAAU5sC,SAASjC,EAAOkkB,OAAO4qB,WAAWgB,aAAc,CAC/J,GAAI9vC,EAAOJ,aAAeI,EAAOJ,WAAWC,QAAUgvC,IAAa7uC,EAAOJ,WAAWC,QAAUG,EAAOJ,WAAWE,QAAU+uC,IAAa7uC,EAAOJ,WAAWE,QAAS,OACnK,MAAMkvC,EAAWhiC,EAAI/K,SAASjC,EAAOkkB,OAAO4qB,WAAWH,aAGrD7lB,GADe,IAAbkmB,EACG,iBAEA,kBAGPhiC,EAAIrF,YAAY3H,EAAOkkB,OAAO4qB,WAAWH,gBAI7C,MAYMzP,EAAU,KACdl/B,EAAOgN,IAAI9K,SAASlC,EAAOkkB,OAAO4qB,WAAW0B,yBAEzCxwC,EAAO8uC,WAAW9hC,KACpBhN,EAAO8uC,WAAW9hC,IAAI9K,SAASlC,EAAOkkB,OAAO4qB,WAAW0B,yBAG1D/B,KAGFryC,OAAOyQ,OAAO7M,EAAO8uC,WAAY,CAC/BloC,OAvBa,KACb5G,EAAOgN,IAAI/G,YAAYjG,EAAOkkB,OAAO4qB,WAAW0B,yBAE5CxwC,EAAO8uC,WAAW9hC,KACpBhN,EAAO8uC,WAAW9hC,IAAI/G,YAAYjG,EAAOkkB,OAAO4qB,WAAW0B,yBAG7D5d,IACAkf,IACAlc,KAeAsJ,UACA4S,SACAlc,SACAhD,OACA6b,aAIJ,SAAmB9qB,GACjB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,EAAE,KACF0oB,GACEnF,EACJ,MAAM1lB,EAAW4Z,IACjB,IAGIo6B,EACAC,EACAC,EACAC,EANAxoB,GAAY,EACZshB,EAAU,KACVmH,EAAc,KA0BlB,SAAStjB,IACP,IAAK/uB,EAAOkkB,OAAOouB,UAAU/4B,KAAOvZ,EAAOsyC,UAAU/4B,GAAI,OACzD,MAAM,UACJ+4B,EACA7lB,aAAcC,EAAG,SACjB9H,GACE5kB,GACE,QACJuyC,EAAO,IACPvlC,GACEslC,EACEpuB,EAASlkB,EAAOkkB,OAAOouB,UAC7B,IAAIE,EAAUN,EACVO,GAAUN,EAAYD,GAAYttB,EAElC8H,GACF+lB,GAAUA,EAENA,EAAS,GACXD,EAAUN,EAAWO,EACrBA,EAAS,IACCA,EAASP,EAAWC,IAC9BK,EAAUL,EAAYM,IAEfA,EAAS,GAClBD,EAAUN,EAAWO,EACrBA,EAAS,GACAA,EAASP,EAAWC,IAC7BK,EAAUL,EAAYM,GAGpBzyC,EAAOstB,gBACTilB,EAAQ52B,UAAU,eAAe82B,cACjCF,EAAQ,GAAGn7B,MAAMwP,MAAW4rB,EAAH,OAEzBD,EAAQ52B,UAAU,oBAAoB82B,WACtCF,EAAQ,GAAGn7B,MAAM0P,OAAY0rB,EAAH,MAGxBtuB,EAAO1iB,OACTkX,aAAawyB,GACbl+B,EAAI,GAAGoK,MAAMs7B,QAAU,EACvBxH,EAAUjsC,WAAW,KACnB+N,EAAI,GAAGoK,MAAMs7B,QAAU,EACvB1lC,EAAI4O,WAAW,MACd,MASP,SAASiQ,IACP,IAAK7rB,EAAOkkB,OAAOouB,UAAU/4B,KAAOvZ,EAAOsyC,UAAU/4B,GAAI,OACzD,MAAM,UACJ+4B,GACEtyC,GACE,QACJuyC,EAAO,IACPvlC,GACEslC,EACJC,EAAQ,GAAGn7B,MAAMwP,MAAQ,GACzB2rB,EAAQ,GAAGn7B,MAAM0P,OAAS,GAC1BqrB,EAAYnyC,EAAOstB,eAAiBtgB,EAAI,GAAGwR,YAAcxR,EAAI,GAAG2R,aAChEyzB,EAAUpyC,EAAO+1B,MAAQ/1B,EAAO62B,YAAc72B,EAAOkkB,OAAOsP,oBAAsBxzB,EAAOkkB,OAAO6M,eAAiB/wB,EAAO6wB,SAAS,GAAK,IAGpIqhB,EADuC,SAArClyC,EAAOkkB,OAAOouB,UAAUJ,SACfC,EAAYC,EAEZxxC,SAASZ,EAAOkkB,OAAOouB,UAAUJ,SAAU,IAGpDlyC,EAAOstB,eACTilB,EAAQ,GAAGn7B,MAAMwP,MAAWsrB,EAAH,KAEzBK,EAAQ,GAAGn7B,MAAM0P,OAAYorB,EAAH,KAI1BllC,EAAI,GAAGoK,MAAMu7B,QADXP,GAAW,EACU,OAEA,GAGrBpyC,EAAOkkB,OAAOouB,UAAU9wC,OAC1BwL,EAAI,GAAGoK,MAAMs7B,QAAU,GAGrB1yC,EAAOkkB,OAAOkN,eAAiBpxB,EAAOkpB,SACxCopB,EAAUtlC,IAAIhN,EAAOi+B,SAAW,WAAa,eAAej+B,EAAOkkB,OAAOouB,UAAUlE,WAIxF,SAASwE,EAAmBvyC,GAC1B,OAAIL,EAAOstB,eACS,eAAXjtB,EAAEG,MAAoC,cAAXH,EAAEG,KAAuBH,EAAEyqB,cAAc,GAAG+nB,QAAUxyC,EAAEwyC,QAG1E,eAAXxyC,EAAEG,MAAoC,cAAXH,EAAEG,KAAuBH,EAAEyqB,cAAc,GAAGgoB,QAAUzyC,EAAEyyC,QAG5F,SAASC,EAAgB1yC,GACvB,MAAM,UACJiyC,EACA7lB,aAAcC,GACZ1sB,GACE,IACJgN,GACEslC,EACJ,IAAIU,EACJA,GAAiBJ,EAAmBvyC,GAAK2M,EAAI4R,SAAS5e,EAAOstB,eAAiB,OAAS,QAA2B,OAAjB2kB,EAAwBA,EAAeC,EAAW,KAAOC,EAAYD,GACtKc,EAAgBnuB,KAAKC,IAAID,KAAKE,IAAIiuB,EAAe,GAAI,GAEjDtmB,IACFsmB,EAAgB,EAAIA,GAGtB,MAAMxF,EAAWxtC,EAAOitB,gBAAkBjtB,EAAOgtB,eAAiBhtB,EAAOitB,gBAAkB+lB,EAC3FhzC,EAAO8uB,eAAe0e,GACtBxtC,EAAO+uB,aAAaye,GACpBxtC,EAAO4uB,oBACP5uB,EAAO6uB,sBAGT,SAASokB,EAAY5yC,GACnB,MAAM6jB,EAASlkB,EAAOkkB,OAAOouB,WACvB,UACJA,EAAS,WACTxkB,GACE9tB,GACE,IACJgN,EAAG,QACHulC,GACED,EACJ1oB,GAAY,EACZqoB,EAAe5xC,EAAE5B,SAAW8zC,EAAQ,IAAMlyC,EAAE5B,SAAW8zC,EAAUK,EAAmBvyC,GAAKA,EAAE5B,OAAOqgB,wBAAwB9e,EAAOstB,eAAiB,OAAS,OAAS,KACpKjtB,EAAEiH,iBACFjH,EAAEstB,kBACFG,EAAWlS,WAAW,KACtB22B,EAAQ32B,WAAW,KACnBm3B,EAAgB1yC,GAChBqY,aAAa25B,GACbrlC,EAAI4O,WAAW,GAEXsI,EAAO1iB,MACTwL,EAAItL,IAAI,UAAW,GAGjB1B,EAAOkkB,OAAOmF,SAChBrpB,EAAO8tB,WAAWpsB,IAAI,mBAAoB,QAG5ConB,EAAK,qBAAsBzoB,GAG7B,SAAS6yC,EAAW7yC,GAClB,MAAM,UACJiyC,EAAS,WACTxkB,GACE9tB,GACE,IACJgN,EAAG,QACHulC,GACED,EACC1oB,IACDvpB,EAAEiH,eAAgBjH,EAAEiH,iBAAsBjH,EAAE4qC,aAAc,EAC9D8H,EAAgB1yC,GAChBytB,EAAWlS,WAAW,GACtB5O,EAAI4O,WAAW,GACf22B,EAAQ32B,WAAW,GACnBkN,EAAK,oBAAqBzoB,IAG5B,SAAS8yC,EAAU9yC,GACjB,MAAM6jB,EAASlkB,EAAOkkB,OAAOouB,WACvB,UACJA,EAAS,WACTxkB,GACE9tB,GACE,IACJgN,GACEslC,EACC1oB,IACLA,GAAY,EAER5pB,EAAOkkB,OAAOmF,UAChBrpB,EAAO8tB,WAAWpsB,IAAI,mBAAoB,IAC1CosB,EAAWlS,WAAW,KAGpBsI,EAAO1iB,OACTkX,aAAa25B,GACbA,EAAcnxB,EAAS,KACrBlU,EAAItL,IAAI,UAAW,GACnBsL,EAAI4O,WAAW,MACd,MAGLkN,EAAK,mBAAoBzoB,GAErB6jB,EAAOkvB,eACTpzC,EAAOq9B,kBAIX,SAASxgB,EAAOva,GACd,MAAM,UACJgwC,EAAS,iBACTlQ,EAAgB,mBAChBC,EAAkB,OAClBne,EAAM,QACNoB,GACEtlB,EACEgN,EAAMslC,EAAUtlC,IACtB,IAAKA,EAAK,OACV,MAAMvO,EAASuO,EAAI,GACbqmC,KAAiB/tB,EAAQQ,kBAAmB5B,EAAOgO,mBAAmB,CAC1EC,SAAS,EACT9V,SAAS,GAELyJ,KAAkBR,EAAQQ,kBAAmB5B,EAAOgO,mBAAmB,CAC3EC,SAAS,EACT9V,SAAS,GAEX,IAAK5d,EAAQ,OACb,MAAM60C,EAAyB,OAAXhxC,EAAkB,mBAAqB,sBAEtDgjB,EAAQM,OAKXnnB,EAAO60C,GAAalR,EAAiBhgC,MAAO6wC,EAAaI,GACzD50C,EAAO60C,GAAalR,EAAiBhQ,KAAM8gB,EAAYG,GACvD50C,EAAO60C,GAAalR,EAAiB/P,IAAK8gB,EAAWrtB,KANrDrnB,EAAO60C,GAAajR,EAAmBjgC,MAAO6wC,EAAaI,GAC3Dp1C,EAASq1C,GAAajR,EAAmBjQ,KAAM8gB,EAAYG,GAC3Dp1C,EAASq1C,GAAajR,EAAmBhQ,IAAK8gB,EAAWrtB,IAkB7D,SAAS8M,IACP,MAAM,UACJ0f,EACAtlC,IAAKumC,GACHvzC,EACJA,EAAOkkB,OAAOouB,UAAYvO,EAA0B/jC,EAAQA,EAAO0+B,eAAe4T,UAAWtyC,EAAOkkB,OAAOouB,UAAW,CACpH/4B,GAAI,qBAEN,MAAM2K,EAASlkB,EAAOkkB,OAAOouB,UAC7B,IAAKpuB,EAAO3K,GAAI,OAChB,IAAIvM,EAAMlP,EAAEomB,EAAO3K,IAEfvZ,EAAOkkB,OAAO4P,mBAA0C,iBAAd5P,EAAO3K,IAAmBvM,EAAIhK,OAAS,GAA0C,IAArCuwC,EAAUnyC,KAAK8iB,EAAO3K,IAAIvW,SAClHgK,EAAMumC,EAAUnyC,KAAK8iB,EAAO3K,KAG9BvM,EAAI9K,SAASlC,EAAOstB,eAAiBpJ,EAAOosB,gBAAkBpsB,EAAOqsB,eACrE,IAAIgC,EAAUvlC,EAAI5L,KAAK,IAAIpB,EAAOkkB,OAAOouB,UAAUkB,WAE5B,IAAnBjB,EAAQvvC,SACVuvC,EAAUz0C,EAAE,eAAekC,EAAOkkB,OAAOouB,UAAUkB,qBACnDxmC,EAAIhO,OAAOuzC,IAGbn2C,OAAOyQ,OAAOylC,EAAW,CACvBtlC,MACAuM,GAAIvM,EAAI,GACRulC,UACAkB,OAAQlB,EAAQ,KAGdruB,EAAOwvB,WAxCN1zC,EAAOkkB,OAAOouB,UAAU/4B,IAAOvZ,EAAOsyC,UAAU/4B,IACrDsD,EAAO,MA2CH7P,GACFA,EAAIhN,EAAOkpB,QAAU,cAAgB,YAAYlpB,EAAOkkB,OAAOouB,UAAUlE,WAI7E,SAASK,IACP,MAAMvqB,EAASlkB,EAAOkkB,OAAOouB,UACvBtlC,EAAMhN,EAAOsyC,UAAUtlC,IAEzBA,GACFA,EAAI/G,YAAYjG,EAAOstB,eAAiBpJ,EAAOosB,gBAAkBpsB,EAAOqsB,eAjDrEvwC,EAAOkkB,OAAOouB,UAAU/4B,IAAOvZ,EAAOsyC,UAAU/4B,IACrDsD,EAAO,OA5QT+kB,EAAa,CACX0Q,UAAW,CACT/4B,GAAI,KACJ24B,SAAU,OACV1wC,MAAM,EACNkyC,WAAW,EACXN,eAAe,EACfhF,UAAW,wBACXoF,UAAW,wBACXG,uBAAwB,4BACxBrD,gBAAiB,8BACjBC,cAAe,+BAGnBvwC,EAAOsyC,UAAY,CACjB/4B,GAAI,KACJk6B,OAAQ,KACRzmC,IAAK,KACLulC,QAAS,MAgTXnyC,EAAG,OAAQ,MAC+B,IAApCJ,EAAOkkB,OAAOouB,UAAUppB,QAE1BgW,KAEAtM,IACA/G,IACAkD,OAGJ3uB,EAAG,2CAA4C,KAC7CyrB,MAEFzrB,EAAG,eAAgB,KACjB2uB,MAEF3uB,EAAG,gBAAiB,CAACklC,EAAIzpB,MA5QzB,SAAuBA,GAChB7b,EAAOkkB,OAAOouB,UAAU/4B,IAAOvZ,EAAOsyC,UAAU/4B,IACrDvZ,EAAOsyC,UAAUC,QAAQ32B,WAAWC,GA2QpCgS,CAAchS,KAEhBzb,EAAG,iBAAkB,KACnB,MAAM,IACJ4M,GACEhN,EAAOsyC,UAEPtlC,GACFA,EAAIhN,EAAOkpB,QAAU,cAAgB,YAAYlpB,EAAOkkB,OAAOouB,UAAUlE,aAG7EhuC,EAAG,UAAW,KACZquC,MAGF,MAYMvP,EAAU,KACdl/B,EAAOgN,IAAI9K,SAASlC,EAAOkkB,OAAOouB,UAAUqB,wBAExC3zC,EAAOsyC,UAAUtlC,KACnBhN,EAAOsyC,UAAUtlC,IAAI9K,SAASlC,EAAOkkB,OAAOouB,UAAUqB,wBAGxDlF,KAGFryC,OAAOyQ,OAAO7M,EAAOsyC,UAAW,CAC9B1rC,OAvBa,KACb5G,EAAOgN,IAAI/G,YAAYjG,EAAOkkB,OAAOouB,UAAUqB,wBAE3C3zC,EAAOsyC,UAAUtlC,KACnBhN,EAAOsyC,UAAUtlC,IAAI/G,YAAYjG,EAAOkkB,OAAOouB,UAAUqB,wBAG3D/gB,IACA/G,IACAkD,KAeAmQ,UACArT,aACAkD,eACA6D,OACA6b,aAIJ,SAAkB9qB,GAChB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,GACEujB,EACJie,EAAa,CACXgS,SAAU,CACR1qB,SAAS,KAIb,MAAM2qB,EAAe,CAACt6B,EAAIqL,KACxB,MAAM,IACJ8H,GACE1sB,EACEgN,EAAMlP,EAAEyb,GACR8yB,EAAY3f,GAAO,EAAI,EACvBlvB,EAAIwP,EAAI1L,KAAK,yBAA2B,IAC9C,IAAI85B,EAAIpuB,EAAI1L,KAAK,0BACb+5B,EAAIruB,EAAI1L,KAAK,0BACjB,MAAMqwC,EAAQ3kC,EAAI1L,KAAK,8BACjBoxC,EAAU1lC,EAAI1L,KAAK,gCAyBzB,GAvBI85B,GAAKC,GACPD,EAAIA,GAAK,IACTC,EAAIA,GAAK,KACAr7B,EAAOstB,gBAChB8N,EAAI59B,EACJ69B,EAAI,MAEJA,EAAI79B,EACJ49B,EAAI,KAIJA,EADEA,EAAErtB,QAAQ,MAAQ,EACbnN,SAASw6B,EAAG,IAAMxW,EAAWynB,EAAhC,IAEGjR,EAAIxW,EAAWynB,EAAlB,KAIJhR,EADEA,EAAEttB,QAAQ,MAAQ,EACbnN,SAASy6B,EAAG,IAAMzW,EAArB,IAEGyW,EAAIzW,EAAP,KAGF,MAAO8tB,EAA6C,CACtD,MAAMoB,EAAiBpB,GAAWA,EAAU,IAAM,EAAI7tB,KAAK2I,IAAI5I,IAC/D5X,EAAI,GAAGoK,MAAMs7B,QAAUoB,EAGzB,GAAI,MAAOnC,EACT3kC,EAAI2O,UAAU,eAAeyf,MAAMC,eAC9B,CACL,MAAM0Y,EAAepC,GAASA,EAAQ,IAAM,EAAI9sB,KAAK2I,IAAI5I,IACzD5X,EAAI2O,UAAU,eAAeyf,MAAMC,iBAAiB0Y,QAIlDhlB,EAAe,KACnB,MAAM,IACJ/hB,EAAG,OACHmjB,EAAM,SACNvL,EAAQ,SACRiM,GACE7wB,EACJgN,EAAIiE,SAAS,4IAA4IkC,KAAKoG,IAC5Js6B,EAAat6B,EAAIqL,KAEnBuL,EAAOhd,KAAK,CAACsvB,EAASrK,KACpB,IAAI0B,EAAgB2I,EAAQ7d,SAExB5kB,EAAOkkB,OAAO0L,eAAiB,GAAqC,SAAhC5vB,EAAOkkB,OAAO5kB,gBACpDw6B,GAAiBjV,KAAKyU,KAAKlB,EAAa,GAAKxT,GAAYiM,EAAS7tB,OAAS,IAG7E82B,EAAgBjV,KAAKE,IAAIF,KAAKC,IAAIgV,GAAgB,GAAI,GACtDh8B,EAAE2kC,GAASrhC,KAAK,4IAA4I+R,KAAKoG,IAC/Js6B,EAAat6B,EAAIugB,QAqBvB15B,EAAG,aAAc,KACVJ,EAAOkkB,OAAO0vB,SAAS1qB,UAC5BlpB,EAAOkkB,OAAOyK,qBAAsB,EACpC3uB,EAAO0+B,eAAe/P,qBAAsB,KAE9CvuB,EAAG,OAAQ,KACJJ,EAAOkkB,OAAO0vB,SAAS1qB,SAC5B6F,MAEF3uB,EAAG,eAAgB,KACZJ,EAAOkkB,OAAO0vB,SAAS1qB,SAC5B6F,MAEF3uB,EAAG,gBAAiB,CAAC4zC,EAASn4B,KACvB7b,EAAOkkB,OAAO0vB,SAAS1qB,SA9BR,SAAUrN,QACb,IAAbA,IACFA,EAAW7b,EAAOkkB,OAAOvkB,OAG3B,MAAM,IACJqN,GACEhN,EACJgN,EAAI5L,KAAK,4IAA4I+R,KAAK8gC,IACxJ,MAAMC,EAAcp2C,EAAEm2C,GACtB,IAAIE,EAAmBvzC,SAASszC,EAAY5yC,KAAK,iCAAkC,KAAOua,EACzE,IAAbA,IAAgBs4B,EAAmB,GACvCD,EAAYt4B,WAAWu4B,KAmBzBtmB,CAAchS,MAIlB,SAAc8H,GACZ,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,EAAE,KACF0oB,GACEnF,EACJ,MAAMjf,EAASiU,IACfipB,EAAa,CACXwS,KAAM,CACJlrB,SAAS,EACTmrB,SAAU,EACVzU,SAAU,EACVtkB,QAAQ,EACRg5B,eAAgB,wBAChBC,iBAAkB,yBAGtBv0C,EAAOo0C,KAAO,CACZlrB,SAAS,GAEX,IAEIsrB,EACAC,EACAC,EAJAX,EAAe,EACfY,GAAY,EAIhB,MAAMC,EAAU,CACdlP,cAAUr4B,EACVwnC,gBAAYxnC,EACZynC,iBAAaznC,EACb0nC,cAAU1nC,EACV2nC,kBAAc3nC,EACdgnC,SAAU,GAENvT,EAAQ,CACZlX,eAAWvc,EACXwc,aAASxc,EACTwd,cAAUxd,EACV2d,cAAU3d,EACV4nC,UAAM5nC,EACN6nC,UAAM7nC,EACN8nC,UAAM9nC,EACN+nC,UAAM/nC,EACNuZ,WAAOvZ,EACPyZ,YAAQzZ,EACR6d,YAAQ7d,EACR8d,YAAQ9d,EACRgoC,aAAc,GACdC,eAAgB,IAEZpT,EAAW,CACf9G,OAAG/tB,EACHguB,OAAGhuB,EACHkoC,mBAAeloC,EACfmoC,mBAAenoC,EACfooC,cAAUpoC,GAEZ,IAAIskC,EAAQ,EAkBZ,SAAS+D,EAA0Br1C,GACjC,GAAIA,EAAEyqB,cAAc9nB,OAAS,EAAG,OAAO,EACvC,MAAM2yC,EAAKt1C,EAAEyqB,cAAc,GAAGC,MACxB6qB,EAAKv1C,EAAEyqB,cAAc,GAAGG,MACxB4qB,EAAKx1C,EAAEyqB,cAAc,GAAGC,MACxB+qB,EAAKz1C,EAAEyqB,cAAc,GAAGG,MAE9B,OADiBpG,KAAKuI,MAAMyoB,EAAKF,IAAO,GAAKG,EAAKF,IAAO,GAK3D,SAASG,EAAe11C,GACtB,MAAMilB,EAAUtlB,EAAOslB,QACjBpB,EAASlkB,EAAOkkB,OAAOkwB,KAI7B,GAHAK,GAAqB,EACrBC,GAAmB,GAEdpvB,EAAQW,SAAU,CACrB,GAAe,eAAX5lB,EAAEG,MAAoC,eAAXH,EAAEG,MAAyBH,EAAEyqB,cAAc9nB,OAAS,EACjF,OAGFyxC,GAAqB,EACrBG,EAAQoB,WAAaN,EAA0Br1C,GAG5Cu0C,EAAQlP,UAAakP,EAAQlP,SAAS1iC,SACzC4xC,EAAQlP,SAAW5nC,EAAEuC,EAAE5B,QAAQ2G,QAAQ,IAAIpF,EAAOkkB,OAAOuQ,YACzB,IAA5BmgB,EAAQlP,SAAS1iC,SAAc4xC,EAAQlP,SAAW1lC,EAAOmwB,OAAO7pB,GAAGtG,EAAO4oB,cAC9EgsB,EAAQG,SAAWH,EAAQlP,SAAStkC,KAAK,IAAI8iB,EAAOowB,gBAAkBhuC,GAAG,GAAGlF,KAAK,kDAAkDkF,GAAG,GACtIsuC,EAAQI,aAAeJ,EAAQG,SAASrpC,OAAO,IAAIwY,EAAOowB,gBAC1DM,EAAQP,SAAWO,EAAQI,aAAa1zC,KAAK,qBAAuB4iB,EAAOmwB,SAEvC,IAAhCO,EAAQI,aAAahyC,SAMvB4xC,EAAQG,UACVH,EAAQG,SAASn5B,WAAW,GAG9B+4B,GAAY,GATRC,EAAQG,cAAW1nC,EAYzB,SAAS4oC,EAAgB51C,GACvB,MAAMilB,EAAUtlB,EAAOslB,QACjBpB,EAASlkB,EAAOkkB,OAAOkwB,KACvBA,EAAOp0C,EAAOo0C,KAEpB,IAAK9uB,EAAQW,SAAU,CACrB,GAAe,cAAX5lB,EAAEG,MAAmC,cAAXH,EAAEG,MAAwBH,EAAEyqB,cAAc9nB,OAAS,EAC/E,OAGF0xC,GAAmB,EACnBE,EAAQsB,UAAYR,EAA0Br1C,GAG3Cu0C,EAAQG,UAAwC,IAA5BH,EAAQG,SAAS/xC,QAKtCsiB,EAAQW,SACVmuB,EAAKzC,MAAQtxC,EAAEsxC,MAAQoC,EAEvBK,EAAKzC,MAAQiD,EAAQsB,UAAYtB,EAAQoB,WAAajC,EAGpDK,EAAKzC,MAAQiD,EAAQP,WACvBD,EAAKzC,MAAQiD,EAAQP,SAAW,GAAKD,EAAKzC,MAAQiD,EAAQP,SAAW,IAAM,IAGzED,EAAKzC,MAAQztB,EAAO0b,WACtBwU,EAAKzC,MAAQztB,EAAO0b,SAAW,GAAK1b,EAAO0b,SAAWwU,EAAKzC,MAAQ,IAAM,IAG3EiD,EAAQG,SAASp5B,UAAU,4BAA4By4B,EAAKzC,WAlB3C,kBAAXtxC,EAAEG,MAA0Bu1C,EAAe11C,GAqBnD,SAAS81C,EAAa91C,GACpB,MAAMmmB,EAASxmB,EAAOwmB,OAChBlB,EAAUtlB,EAAOslB,QACjBpB,EAASlkB,EAAOkkB,OAAOkwB,KACvBA,EAAOp0C,EAAOo0C,KAEpB,IAAK9uB,EAAQW,SAAU,CACrB,IAAKwuB,IAAuBC,EAC1B,OAGF,GAAe,aAAXr0C,EAAEG,MAAkC,aAAXH,EAAEG,MAAuBH,EAAEusB,eAAe5pB,OAAS,IAAMwjB,EAAOE,QAC3F,OAGF+tB,GAAqB,EACrBC,GAAmB,EAGhBE,EAAQG,UAAwC,IAA5BH,EAAQG,SAAS/xC,SAC1CoxC,EAAKzC,MAAQ9sB,KAAKC,IAAID,KAAKE,IAAIqvB,EAAKzC,MAAOiD,EAAQP,UAAWnwB,EAAO0b,UACrEgV,EAAQG,SAASn5B,WAAW5b,EAAOkkB,OAAOvkB,OAAOgc,UAAU,4BAA4By4B,EAAKzC,UAC5FoC,EAAeK,EAAKzC,MACpBgD,GAAY,EACO,IAAfP,EAAKzC,QAAaiD,EAAQlP,cAAWr4B,IAa3C,SAASmf,EAAYnsB,GACnB,MAAM+zC,EAAOp0C,EAAOo0C,KACpB,IAAKQ,EAAQG,UAAwC,IAA5BH,EAAQG,SAAS/xC,OAAc,OAExD,GADAhD,EAAO2qB,YAAa,GACfmW,EAAMlX,YAAcgrB,EAAQlP,SAAU,OAEtC5E,EAAMjX,UACTiX,EAAMla,MAAQguB,EAAQG,SAAS,GAAGv2B,YAClCsiB,EAAMha,OAAS8tB,EAAQG,SAAS,GAAGp2B,aACnCmiB,EAAM5V,OAAS5J,EAAaszB,EAAQI,aAAa,GAAI,MAAQ,EAC7DlU,EAAM3V,OAAS7J,EAAaszB,EAAQI,aAAa,GAAI,MAAQ,EAC7DJ,EAAQC,WAAaD,EAAQlP,SAAS,GAAGlnB,YACzCo2B,EAAQE,YAAcF,EAAQlP,SAAS,GAAG/mB,aAC1Ci2B,EAAQI,aAAap5B,WAAW,IAIlC,MAAMw6B,EAActV,EAAMla,MAAQwtB,EAAKzC,MACjC0E,EAAevV,EAAMha,OAASstB,EAAKzC,MACzC,KAAIyE,EAAcxB,EAAQC,YAAcwB,EAAezB,EAAQE,aAA/D,CAQA,GAPAhU,EAAMmU,KAAOpwB,KAAKE,IAAI6vB,EAAQC,WAAa,EAAIuB,EAAc,EAAG,GAChEtV,EAAMqU,MAAQrU,EAAMmU,KACpBnU,EAAMoU,KAAOrwB,KAAKE,IAAI6vB,EAAQE,YAAc,EAAIuB,EAAe,EAAG,GAClEvV,EAAMsU,MAAQtU,EAAMoU,KACpBpU,EAAMwU,eAAela,EAAe,cAAX/6B,EAAEG,KAAuBH,EAAEyqB,cAAc,GAAGC,MAAQ1qB,EAAE0qB,MAC/E+V,EAAMwU,eAAeja,EAAe,cAAXh7B,EAAEG,KAAuBH,EAAEyqB,cAAc,GAAGG,MAAQ5qB,EAAE4qB,OAE1E6V,EAAMjX,UAAY8qB,EAAW,CAChC,GAAI30C,EAAOstB,iBAAmBzI,KAAKiT,MAAMgJ,EAAMmU,QAAUpwB,KAAKiT,MAAMgJ,EAAM5V,SAAW4V,EAAMwU,eAAela,EAAI0F,EAAMuU,aAAaja,GAAKvW,KAAKiT,MAAMgJ,EAAMqU,QAAUtwB,KAAKiT,MAAMgJ,EAAM5V,SAAW4V,EAAMwU,eAAela,EAAI0F,EAAMuU,aAAaja,GAEvO,YADA0F,EAAMlX,WAAY,GAIpB,IAAK5pB,EAAOstB,iBAAmBzI,KAAKiT,MAAMgJ,EAAMoU,QAAUrwB,KAAKiT,MAAMgJ,EAAM3V,SAAW2V,EAAMwU,eAAeja,EAAIyF,EAAMuU,aAAaha,GAAKxW,KAAKiT,MAAMgJ,EAAMsU,QAAUvwB,KAAKiT,MAAMgJ,EAAM3V,SAAW2V,EAAMwU,eAAeja,EAAIyF,EAAMuU,aAAaha,GAExO,YADAyF,EAAMlX,WAAY,GAKlBvpB,EAAE0d,YACJ1d,EAAEiH,iBAGJjH,EAAEstB,kBACFmT,EAAMjX,SAAU,EAChBiX,EAAMjW,SAAWiW,EAAMwU,eAAela,EAAI0F,EAAMuU,aAAaja,EAAI0F,EAAM5V,OACvE4V,EAAM9V,SAAW8V,EAAMwU,eAAeja,EAAIyF,EAAMuU,aAAaha,EAAIyF,EAAM3V,OAEnE2V,EAAMjW,SAAWiW,EAAMmU,OACzBnU,EAAMjW,SAAWiW,EAAMmU,KAAO,GAAKnU,EAAMmU,KAAOnU,EAAMjW,SAAW,IAAM,IAGrEiW,EAAMjW,SAAWiW,EAAMqU,OACzBrU,EAAMjW,SAAWiW,EAAMqU,KAAO,GAAKrU,EAAMjW,SAAWiW,EAAMqU,KAAO,IAAM,IAGrErU,EAAM9V,SAAW8V,EAAMoU,OACzBpU,EAAM9V,SAAW8V,EAAMoU,KAAO,GAAKpU,EAAMoU,KAAOpU,EAAM9V,SAAW,IAAM,IAGrE8V,EAAM9V,SAAW8V,EAAMsU,OACzBtU,EAAM9V,SAAW8V,EAAMsU,KAAO,GAAKtU,EAAM9V,SAAW8V,EAAMsU,KAAO,IAAM,IAIpElT,EAASqT,gBAAerT,EAASqT,cAAgBzU,EAAMwU,eAAela,GACtE8G,EAASsT,gBAAetT,EAASsT,cAAgB1U,EAAMwU,eAAeja,GACtE6G,EAASuT,WAAUvT,EAASuT,SAAWp0B,KAAKD,OACjD8gB,EAAS9G,GAAK0F,EAAMwU,eAAela,EAAI8G,EAASqT,gBAAkBl0B,KAAKD,MAAQ8gB,EAASuT,UAAY,EACpGvT,EAAS7G,GAAKyF,EAAMwU,eAAeja,EAAI6G,EAASsT,gBAAkBn0B,KAAKD,MAAQ8gB,EAASuT,UAAY,EAChG5wB,KAAK2I,IAAIsT,EAAMwU,eAAela,EAAI8G,EAASqT,eAAiB,IAAGrT,EAAS9G,EAAI,GAC5EvW,KAAK2I,IAAIsT,EAAMwU,eAAeja,EAAI6G,EAASsT,eAAiB,IAAGtT,EAAS7G,EAAI,GAChF6G,EAASqT,cAAgBzU,EAAMwU,eAAela,EAC9C8G,EAASsT,cAAgB1U,EAAMwU,eAAeja,EAC9C6G,EAASuT,SAAWp0B,KAAKD,MACzBwzB,EAAQI,aAAar5B,UAAU,eAAemlB,EAAMjW,eAAeiW,EAAM9V,kBAuC3E,SAASsrB,IACP,MAAMlC,EAAOp0C,EAAOo0C,KAEhBQ,EAAQlP,UAAY1lC,EAAO6oB,gBAAkB7oB,EAAO4oB,cAClDgsB,EAAQG,UACVH,EAAQG,SAASp5B,UAAU,+BAGzBi5B,EAAQI,cACVJ,EAAQI,aAAar5B,UAAU,sBAGjCy4B,EAAKzC,MAAQ,EACboC,EAAe,EACfa,EAAQlP,cAAWr4B,EACnBunC,EAAQG,cAAW1nC,EACnBunC,EAAQI,kBAAe3nC,GAI3B,SAASkpC,EAAOl2C,GACd,MAAM+zC,EAAOp0C,EAAOo0C,KACdlwB,EAASlkB,EAAOkkB,OAAOkwB,KAmB7B,GAjBKQ,EAAQlP,WACPrlC,GAAKA,EAAE5B,SACTm2C,EAAQlP,SAAW5nC,EAAEuC,EAAE5B,QAAQ2G,QAAQ,IAAIpF,EAAOkkB,OAAOuQ,aAGtDmgB,EAAQlP,WACP1lC,EAAOkkB,OAAOgM,SAAWlwB,EAAOkkB,OAAOgM,QAAQhH,SAAWlpB,EAAOkwB,QACnE0kB,EAAQlP,SAAW1lC,EAAO8tB,WAAW7c,SAAS,IAAIjR,EAAOkkB,OAAOyQ,kBAEhEigB,EAAQlP,SAAW1lC,EAAOmwB,OAAO7pB,GAAGtG,EAAO4oB,cAI/CgsB,EAAQG,SAAWH,EAAQlP,SAAStkC,KAAK,IAAI8iB,EAAOowB,gBAAkBhuC,GAAG,GAAGlF,KAAK,kDAAkDkF,GAAG,GACtIsuC,EAAQI,aAAeJ,EAAQG,SAASrpC,OAAO,IAAIwY,EAAOowB,kBAGvDM,EAAQG,UAAwC,IAA5BH,EAAQG,SAAS/xC,SAAiB4xC,EAAQI,cAAgD,IAAhCJ,EAAQI,aAAahyC,OAAc,OAQtH,IAAIwzC,EACAC,EACAC,EACAC,EACAzpB,EACAC,EACAypB,EACAC,EACAC,EACAC,EACAX,EACAC,EACAW,EACAC,EACAC,EACAC,EACAtC,EACAC,EAvBA90C,EAAOkkB,OAAOmF,UAChBrpB,EAAOmkB,UAAU/M,MAAMiO,SAAW,SAClCrlB,EAAOmkB,UAAU/M,MAAMggC,YAAc,QAGvCxC,EAAQlP,SAASxjC,SAAS,GAAGgiB,EAAOqwB,uBAoBA,IAAzBzT,EAAMuU,aAAaja,GAAqB/6B,GACjDm2C,EAAoB,aAAXn2C,EAAEG,KAAsBH,EAAEusB,eAAe,GAAG7B,MAAQ1qB,EAAE0qB,MAC/D0rB,EAAoB,aAAXp2C,EAAEG,KAAsBH,EAAEusB,eAAe,GAAG3B,MAAQ5qB,EAAE4qB,QAE/DurB,EAAS1V,EAAMuU,aAAaja,EAC5Bqb,EAAS3V,EAAMuU,aAAaha,GAG9B+Y,EAAKzC,MAAQiD,EAAQI,aAAa1zC,KAAK,qBAAuB4iB,EAAOmwB,SACrEN,EAAea,EAAQI,aAAa1zC,KAAK,qBAAuB4iB,EAAOmwB,SAEnEh0C,GACFw0C,EAAaD,EAAQlP,SAAS,GAAGlnB,YACjCs2B,EAAcF,EAAQlP,SAAS,GAAG/mB,aAClC+3B,EAAU9B,EAAQlP,SAAS9mB,SAASU,KAAO5a,EAAO0a,QAClDu3B,EAAU/B,EAAQlP,SAAS9mB,SAASS,IAAM3a,EAAOwa,QACjDgO,EAAQwpB,EAAU7B,EAAa,EAAI2B,EACnCrpB,EAAQwpB,EAAU7B,EAAc,EAAI2B,EACpCK,EAAalC,EAAQG,SAAS,GAAGv2B,YACjCu4B,EAAcnC,EAAQG,SAAS,GAAGp2B,aAClCy3B,EAAcU,EAAa1C,EAAKzC,MAChC0E,EAAeU,EAAc3C,EAAKzC,MAClCqF,EAAgBnyB,KAAKE,IAAI8vB,EAAa,EAAIuB,EAAc,EAAG,GAC3Da,EAAgBpyB,KAAKE,IAAI+vB,EAAc,EAAIuB,EAAe,EAAG,GAC7Da,GAAiBF,EACjBG,GAAiBF,EACjBL,EAAa1pB,EAAQknB,EAAKzC,MAC1BkF,EAAa1pB,EAAQinB,EAAKzC,MAEtBiF,EAAaI,IACfJ,EAAaI,GAGXJ,EAAaM,IACfN,EAAaM,GAGXL,EAAaI,IACfJ,EAAaI,GAGXJ,EAAaM,IACfN,EAAaM,KAGfP,EAAa,EACbC,EAAa,GAGfjC,EAAQI,aAAap5B,WAAW,KAAKD,UAAU,eAAei7B,QAAiBC,UAC/EjC,EAAQG,SAASn5B,WAAW,KAAKD,UAAU,4BAA4By4B,EAAKzC,UAG9E,SAAS0F,IACP,MAAMjD,EAAOp0C,EAAOo0C,KACdlwB,EAASlkB,EAAOkkB,OAAOkwB,KAExBQ,EAAQlP,WACP1lC,EAAOkkB,OAAOgM,SAAWlwB,EAAOkkB,OAAOgM,QAAQhH,SAAWlpB,EAAOkwB,QACnE0kB,EAAQlP,SAAW1lC,EAAO8tB,WAAW7c,SAAS,IAAIjR,EAAOkkB,OAAOyQ,kBAEhEigB,EAAQlP,SAAW1lC,EAAOmwB,OAAO7pB,GAAGtG,EAAO4oB,aAG7CgsB,EAAQG,SAAWH,EAAQlP,SAAStkC,KAAK,IAAI8iB,EAAOowB,gBAAkBhuC,GAAG,GAAGlF,KAAK,kDAAkDkF,GAAG,GACtIsuC,EAAQI,aAAeJ,EAAQG,SAASrpC,OAAO,IAAIwY,EAAOowB,iBAGvDM,EAAQG,UAAwC,IAA5BH,EAAQG,SAAS/xC,QAAiB4xC,EAAQI,cAAgD,IAAhCJ,EAAQI,aAAahyC,SAEpGhD,EAAOkkB,OAAOmF,UAChBrpB,EAAOmkB,UAAU/M,MAAMiO,SAAW,GAClCrlB,EAAOmkB,UAAU/M,MAAMggC,YAAc,IAGvChD,EAAKzC,MAAQ,EACboC,EAAe,EACfa,EAAQI,aAAap5B,WAAW,KAAKD,UAAU,sBAC/Ci5B,EAAQG,SAASn5B,WAAW,KAAKD,UAAU,+BAC3Ci5B,EAAQlP,SAASz/B,YAAY,GAAGie,EAAOqwB,kBACvCK,EAAQlP,cAAWr4B,GAIrB,SAASiqC,EAAWj3C,GAClB,MAAM+zC,EAAOp0C,EAAOo0C,KAEhBA,EAAKzC,OAAwB,IAAfyC,EAAKzC,MAErB0F,IAGAd,EAAOl2C,GAIX,SAASk3C,IACP,MAAMjyB,EAAUtlB,EAAOslB,QASvB,MAAO,CACLQ,kBATmD,eAA7B9lB,EAAO+xB,YAAY3vB,QAA0BkjB,EAAQQ,kBAAmB9lB,EAAOkkB,OAAOgO,mBAAmB,CAC/HC,SAAS,EACT9V,SAAS,GAQTm7B,2BANgClyB,EAAQQ,iBAAkB,CAC1DqM,SAAS,EACT9V,SAAS,IAQb,SAASo7B,IACP,MAAO,IAAIz3C,EAAOkkB,OAAOuQ,WAG3B,SAASijB,EAAep1C,GACtB,MAAM,gBACJwjB,GACEyxB,IACEI,EAAgBF,IACtBz3C,EAAO8tB,WAAWxrB,GAAQ,eAAgBq1C,EAAe5B,EAAgBjwB,GACzE9lB,EAAO8tB,WAAWxrB,GAAQ,gBAAiBq1C,EAAe1B,EAAiBnwB,GAC3E9lB,EAAO8tB,WAAWxrB,GAAQ,aAAcq1C,EAAexB,EAAcrwB,GAGvE,SAAS8xB,IACHpD,IACJA,GAAkB,EAClBkD,EAAe,OAGjB,SAASG,IACFrD,IACLA,GAAkB,EAClBkD,EAAe,QAIjB,SAAS9wC,IACP,MAAMwtC,EAAOp0C,EAAOo0C,KACpB,GAAIA,EAAKlrB,QAAS,OAClBkrB,EAAKlrB,SAAU,EACf,MAAM5D,EAAUtlB,EAAOslB,SACjB,gBACJQ,EAAe,0BACf0xB,GACED,IACEI,EAAgBF,IAElBnyB,EAAQW,UACVjmB,EAAO8tB,WAAW1tB,GAAGJ,EAAO+xB,YAAY3vB,MAAOw1C,EAAgB9xB,GAC/D9lB,EAAO8tB,WAAW1tB,GAAGJ,EAAO+xB,YAAYM,IAAKwlB,EAAiB/xB,IACxB,eAA7B9lB,EAAO+xB,YAAY3vB,QAC5BpC,EAAO8tB,WAAW1tB,GAAGJ,EAAO+xB,YAAY3vB,MAAOu1C,EAAe5B,EAAgBjwB,GAC9E9lB,EAAO8tB,WAAW1tB,GAAGJ,EAAO+xB,YAAYK,KAAMulB,EAAe1B,EAAiBuB,GAC9Ex3C,EAAO8tB,WAAW1tB,GAAGJ,EAAO+xB,YAAYM,IAAKslB,EAAexB,EAAcrwB,GAEtE9lB,EAAO+xB,YAAYO,QACrBtyB,EAAO8tB,WAAW1tB,GAAGJ,EAAO+xB,YAAYO,OAAQqlB,EAAexB,EAAcrwB,IAKjF9lB,EAAO8tB,WAAW1tB,GAAGJ,EAAO+xB,YAAYK,KAAM,IAAIpyB,EAAOkkB,OAAOkwB,KAAKE,eAAkB9nB,EAAagrB,GAGtG,SAAStY,IACP,MAAMkV,EAAOp0C,EAAOo0C,KACpB,IAAKA,EAAKlrB,QAAS,OACnB,MAAM5D,EAAUtlB,EAAOslB,QACvB8uB,EAAKlrB,SAAU,EACf,MAAM,gBACJpD,EAAe,0BACf0xB,GACED,IACEI,EAAgBF,IAElBnyB,EAAQW,UACVjmB,EAAO8tB,WAAW3Q,IAAInd,EAAO+xB,YAAY3vB,MAAOw1C,EAAgB9xB,GAChE9lB,EAAO8tB,WAAW3Q,IAAInd,EAAO+xB,YAAYM,IAAKwlB,EAAiB/xB,IACzB,eAA7B9lB,EAAO+xB,YAAY3vB,QAC5BpC,EAAO8tB,WAAW3Q,IAAInd,EAAO+xB,YAAY3vB,MAAOu1C,EAAe5B,EAAgBjwB,GAC/E9lB,EAAO8tB,WAAW3Q,IAAInd,EAAO+xB,YAAYK,KAAMulB,EAAe1B,EAAiBuB,GAC/Ex3C,EAAO8tB,WAAW3Q,IAAInd,EAAO+xB,YAAYM,IAAKslB,EAAexB,EAAcrwB,GAEvE9lB,EAAO+xB,YAAYO,QACrBtyB,EAAO8tB,WAAW3Q,IAAInd,EAAO+xB,YAAYO,OAAQqlB,EAAexB,EAAcrwB,IAKlF9lB,EAAO8tB,WAAW3Q,IAAInd,EAAO+xB,YAAYK,KAAM,IAAIpyB,EAAOkkB,OAAOkwB,KAAKE,eAAkB9nB,EAAagrB,GA9fvGp7C,OAAOC,eAAe2D,EAAOo0C,KAAM,QAAS,CAC1C73C,IAAG,IACMo1C,EAGT,IAAIh1C,GACF,GAAIg1C,IAAUh1C,EAAO,CACnB,MAAM+jC,EAAUkU,EAAQG,SAAWH,EAAQG,SAAS,QAAK1nC,EACnDo1B,EAAUmS,EAAQlP,SAAWkP,EAAQlP,SAAS,QAAKr4B,EACzDyb,EAAK,aAAcnsB,EAAO+jC,EAAS+B,GAGrCkP,EAAQh1C,KAqfZyD,EAAG,OAAQ,KACLJ,EAAOkkB,OAAOkwB,KAAKlrB,SACrBtiB,MAGJxG,EAAG,UAAW,KACZ8+B,MAEF9+B,EAAG,aAAc,CAACklC,EAAIjlC,KACfL,EAAOo0C,KAAKlrB,SA5YnB,SAAsB7oB,GACpB,MAAMmmB,EAASxmB,EAAOwmB,OACjBouB,EAAQG,UAAwC,IAA5BH,EAAQG,SAAS/xC,SACtC89B,EAAMlX,YACNpD,EAAOE,SAAWrmB,EAAE0d,YAAY1d,EAAEiH,iBACtCw5B,EAAMlX,WAAY,EAClBkX,EAAMuU,aAAaja,EAAe,eAAX/6B,EAAEG,KAAwBH,EAAEyqB,cAAc,GAAGC,MAAQ1qB,EAAE0qB,MAC9E+V,EAAMuU,aAAaha,EAAe,eAAXh7B,EAAEG,KAAwBH,EAAEyqB,cAAc,GAAGG,MAAQ5qB,EAAE4qB,QAsY9ElC,CAAa1oB,KAEfD,EAAG,WAAY,CAACklC,EAAIjlC,KACbL,EAAOo0C,KAAKlrB,SAxTnB,WACE,MAAMkrB,EAAOp0C,EAAOo0C,KACpB,IAAKQ,EAAQG,UAAwC,IAA5BH,EAAQG,SAAS/xC,OAAc,OAExD,IAAK89B,EAAMlX,YAAckX,EAAMjX,QAG7B,OAFAiX,EAAMlX,WAAY,OAClBkX,EAAMjX,SAAU,GAIlBiX,EAAMlX,WAAY,EAClBkX,EAAMjX,SAAU,EAChB,IAAIiuB,EAAoB,IACpBC,EAAoB,IACxB,MAAMC,EAAoB9V,EAAS9G,EAAI0c,EACjCG,EAAenX,EAAMjW,SAAWmtB,EAChCE,EAAoBhW,EAAS7G,EAAI0c,EACjCI,EAAerX,EAAM9V,SAAWktB,EAEnB,IAAfhW,EAAS9G,IAAS0c,EAAoBjzB,KAAK2I,KAAKyqB,EAAenX,EAAMjW,UAAYqX,EAAS9G,IAC3E,IAAf8G,EAAS7G,IAAS0c,EAAoBlzB,KAAK2I,KAAK2qB,EAAerX,EAAM9V,UAAYkX,EAAS7G,IAC9F,MAAM+c,EAAmBvzB,KAAKC,IAAIgzB,EAAmBC,GACrDjX,EAAMjW,SAAWotB,EACjBnX,EAAM9V,SAAWmtB,EAEjB,MAAM/B,EAActV,EAAMla,MAAQwtB,EAAKzC,MACjC0E,EAAevV,EAAMha,OAASstB,EAAKzC,MACzC7Q,EAAMmU,KAAOpwB,KAAKE,IAAI6vB,EAAQC,WAAa,EAAIuB,EAAc,EAAG,GAChEtV,EAAMqU,MAAQrU,EAAMmU,KACpBnU,EAAMoU,KAAOrwB,KAAKE,IAAI6vB,EAAQE,YAAc,EAAIuB,EAAe,EAAG,GAClEvV,EAAMsU,MAAQtU,EAAMoU,KACpBpU,EAAMjW,SAAWhG,KAAKC,IAAID,KAAKE,IAAI+b,EAAMjW,SAAUiW,EAAMqU,MAAOrU,EAAMmU,MACtEnU,EAAM9V,SAAWnG,KAAKC,IAAID,KAAKE,IAAI+b,EAAM9V,SAAU8V,EAAMsU,MAAOtU,EAAMoU,MACtEN,EAAQI,aAAap5B,WAAWw8B,GAAkBz8B,UAAU,eAAemlB,EAAMjW,eAAeiW,EAAM9V,iBAwRtGgE,KAEF5uB,EAAG,YAAa,CAACklC,EAAIjlC,MACdL,EAAOmpB,WAAanpB,EAAOkkB,OAAOkwB,KAAKlrB,SAAWlpB,EAAOo0C,KAAKlrB,SAAWlpB,EAAOkkB,OAAOkwB,KAAK94B,QAC/Fg8B,EAAWj3C,KAGfD,EAAG,gBAAiB,KACdJ,EAAOo0C,KAAKlrB,SAAWlpB,EAAOkkB,OAAOkwB,KAAKlrB,SAC5CotB,MAGJl2C,EAAG,cAAe,KACZJ,EAAOo0C,KAAKlrB,SAAWlpB,EAAOkkB,OAAOkwB,KAAKlrB,SAAWlpB,EAAOkkB,OAAOmF,SACrEitB,MAGJl6C,OAAOyQ,OAAO7M,EAAOo0C,KAAM,CACzBxtC,SACAs4B,UACAmZ,GAAI9B,EACJ+B,IAAKjB,EACL/7B,OAAQg8B,KAIZ,SAAc3zB,GACZ,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,EAAE,KACF0oB,GACEnF,EACJie,EAAa,CACXmH,KAAM,CACJwP,aAAa,EACbrvB,SAAS,EACTsvB,cAAc,EACdC,mBAAoB,EACpBC,uBAAuB,EACvBC,iBAAkB,GAClBC,aAAc,cACdC,aAAc,sBACdC,YAAa,qBACbC,eAAgB,2BAGpB/4C,EAAO+oC,KAAO,GACd,IAAIiQ,GAAwB,EACxBC,GAAqB,EAEzB,SAASC,EAAYhqC,EAAOiqC,QACF,IAApBA,IACFA,GAAkB,GAGpB,MAAMj1B,EAASlkB,EAAOkkB,OAAO6kB,KAC7B,QAAqB,IAAV75B,EAAuB,OAClC,GAA6B,IAAzBlP,EAAOmwB,OAAOntB,OAAc,OAChC,MACM0iC,EADY1lC,EAAOkwB,SAAWlwB,EAAOkkB,OAAOgM,QAAQhH,QAC7BlpB,EAAO8tB,WAAW7c,SAAS,IAAIjR,EAAOkkB,OAAOuQ,uCAAuCvlB,OAAalP,EAAOmwB,OAAO7pB,GAAG4I,GACzIkqC,EAAU1T,EAAStkC,KAAK,IAAI8iB,EAAO00B,qBAAqB10B,EAAO40B,qBAAqB50B,EAAO20B,kBAE7FnT,EAASzjC,SAASiiB,EAAO00B,eAAkBlT,EAASzjC,SAASiiB,EAAO40B,cAAiBpT,EAASzjC,SAASiiB,EAAO20B,eAChHO,EAAQhmC,KAAKsyB,EAAS,IAGD,IAAnB0T,EAAQp2C,QACZo2C,EAAQjmC,KAAKutB,IACX,MAAMqU,EAAWj3C,EAAE4iC,GACnBqU,EAAS7yC,SAASgiB,EAAO20B,cACzB,MAAMQ,EAAatE,EAASzzC,KAAK,mBAC3BoV,EAAMq+B,EAASzzC,KAAK,YACpBq/B,EAASoU,EAASzzC,KAAK,eACvBs/B,EAAQmU,EAASzzC,KAAK,cACtBg4C,EAAavE,EAASrpC,OAAO,WACnC1L,EAAOygC,UAAUsU,EAAS,GAAIr+B,GAAO2iC,EAAY1Y,EAAQC,GAAO,EAAO,KACrE,GAAI,MAAO5gC,GAA8CA,KAAUA,GAAWA,EAAOkkB,UAAUlkB,EAAOmoB,UAAtG,CAoCA,GAlCIkxB,GACFtE,EAASrzC,IAAI,mBAAoB,QAAQ23C,OACzCtE,EAAS7qC,WAAW,qBAEhBy2B,IACFoU,EAASzzC,KAAK,SAAUq/B,GACxBoU,EAAS7qC,WAAW,gBAGlB02B,IACFmU,EAASzzC,KAAK,QAASs/B,GACvBmU,EAAS7qC,WAAW,eAGlBovC,EAAWt2C,QACbs2C,EAAWroC,SAAS,UAAUkC,KAAKomC,IACjC,MAAMC,EAAU17C,EAAEy7C,GAEdC,EAAQl4C,KAAK,iBACfk4C,EAAQl4C,KAAK,SAAUk4C,EAAQl4C,KAAK,gBACpCk4C,EAAQtvC,WAAW,kBAKrBwM,IACFq+B,EAASzzC,KAAK,MAAOoV,GACrBq+B,EAAS7qC,WAAW,cAIxB6qC,EAAS7yC,SAASgiB,EAAO40B,aAAa7yC,YAAYie,EAAO20B,cACzDnT,EAAStkC,KAAK,IAAI8iB,EAAO60B,gBAAkB75C,SAEvCc,EAAOkkB,OAAOxkB,MAAQy5C,EAAiB,CACzC,MAAMM,EAAqB/T,EAASpkC,KAAK,2BAErCokC,EAASzjC,SAASjC,EAAOkkB,OAAO4Q,qBAElCokB,EADsBl5C,EAAO8tB,WAAW7c,SAAS,6BAA6BwoC,YAA6Bz5C,EAAOkkB,OAAO4Q,wBAC/F5lB,SAAS,GAGnCgqC,EADwBl5C,EAAO8tB,WAAW7c,SAAS,IAAIjR,EAAOkkB,OAAO4Q,gDAAgD2kB,OACzFvqC,SAAS,GAIzC4Z,EAAK,iBAAkB4c,EAAS,GAAIqP,EAAS,IAEzC/0C,EAAOkkB,OAAO8O,YAChBhzB,EAAOi5B,sBAGXnQ,EAAK,gBAAiB4c,EAAS,GAAIqP,EAAS,MAIhD,SAAS/L,IACP,MAAM,WACJlb,EACA5J,OAAQ4d,EAAY,OACpB3R,EAAM,YACNvH,GACE5oB,EACEo2B,EAAYp2B,EAAOkwB,SAAW4R,EAAa5R,QAAQhH,QACnDhF,EAAS4d,EAAaiH,KAC5B,IAAIzpC,EAAgBwiC,EAAaxiC,cAMjC,SAASo6C,EAAWxqC,GAClB,GAAIknB,GACF,GAAItI,EAAW7c,SAAS,IAAI6wB,EAAarN,uCAAuCvlB,OAAWlM,OACzF,OAAO,OAEJ,GAAImtB,EAAOjhB,GAAQ,OAAO,EAEjC,OAAO,EAGT,SAASkpB,EAAWqK,GAClB,OAAIrM,EACKt4B,EAAE2kC,GAASnhC,KAAK,2BAGlBxD,EAAE2kC,GAASvzB,QAKpB,GAxBsB,SAAlB5P,IACFA,EAAgB,GAqBb25C,IAAoBA,GAAqB,GAE1Cj5C,EAAOkkB,OAAOyK,oBAChBb,EAAW7c,SAAS,IAAI6wB,EAAajN,mBAAqB1hB,KAAKsvB,IAE7DyW,EADc9iB,EAAYt4B,EAAE2kC,GAASnhC,KAAK,2BAA6BxD,EAAE2kC,GAASvzB,gBAG/E,GAAI5P,EAAgB,EACzB,IAAK,IAAI5D,EAAIktB,EAAaltB,EAAIktB,EAActpB,EAAe5D,GAAK,EAC1Dg+C,EAAWh+C,IAAIw9C,EAAYx9C,QAGjCw9C,EAAYtwB,GAGd,GAAI1E,EAAOs0B,aACT,GAAIl5C,EAAgB,GAAK4kB,EAAOu0B,oBAAsBv0B,EAAOu0B,mBAAqB,EAAG,CACnF,MAAMkB,EAASz1B,EAAOu0B,mBAChB3V,EAAMje,KAAKyU,KAAKh6B,GAChBs6C,EAAW/0B,KAAKE,IAAI6D,EAAcka,EAAMje,KAAKC,IAAI60B,EAAQ7W,GAAM3S,EAAOntB,QACtE62C,EAAWh1B,KAAKC,IAAI8D,EAAc/D,KAAKC,IAAIge,EAAK6W,GAAS,GAE/D,IAAK,IAAIj+C,EAAIktB,EAAcka,EAAKpnC,EAAIk+C,EAAUl+C,GAAK,EAC7Cg+C,EAAWh+C,IAAIw9C,EAAYx9C,GAIjC,IAAK,IAAIA,EAAIm+C,EAAUn+C,EAAIktB,EAAaltB,GAAK,EACvCg+C,EAAWh+C,IAAIw9C,EAAYx9C,OAE5B,CACL,MAAM8+B,EAAY1M,EAAW7c,SAAS,IAAI6wB,EAAa/M,gBACnDyF,EAAUx3B,OAAS,GAAGk2C,EAAY9gB,EAAWoC,IACjD,MAAMC,EAAY3M,EAAW7c,SAAS,IAAI6wB,EAAa7M,gBACnDwF,EAAUz3B,OAAS,GAAGk2C,EAAY9gB,EAAWqC,KAKvD,SAASqf,IACP,MAAMp1C,EAASiU,IACf,IAAK3Y,GAAUA,EAAOmoB,UAAW,OACjC,MAAM4xB,EAAiB/5C,EAAOkkB,OAAO6kB,KAAK4P,iBAAmB76C,EAAEkC,EAAOkkB,OAAO6kB,KAAK4P,kBAAoB76C,EAAE4G,GAClGs1C,EAAWD,EAAe,KAAOr1C,EACjCu1C,EAAqBD,EAAWt1C,EAAO8mB,WAAauuB,EAAe,GAAGv7B,YACtE07B,EAAsBF,EAAWt1C,EAAO+6B,YAAcsa,EAAe,GAAGp7B,aACxEosB,EAAe/qC,EAAOgN,IAAI4R,UAE9B6N,aAAcC,GACZ1sB,EACJ,IAAI0qC,GAAS,EACThe,IAAKqe,EAAazrB,MAAQtf,EAAOgN,IAAI,GAAGmS,YAC5C,MAAM6rB,EAAc,CAAC,CAACD,EAAazrB,KAAMyrB,EAAa1rB,KAAM,CAAC0rB,EAAazrB,KAAOtf,EAAO4mB,MAAOmkB,EAAa1rB,KAAM,CAAC0rB,EAAazrB,KAAMyrB,EAAa1rB,IAAMrf,EAAO8mB,QAAS,CAACikB,EAAazrB,KAAOtf,EAAO4mB,MAAOmkB,EAAa1rB,IAAMrf,EAAO8mB,SAEtO,IAAK,IAAIprB,EAAI,EAAGA,EAAIsvC,EAAYhoC,OAAQtH,GAAK,EAAG,CAC9C,MAAMikC,EAAQqL,EAAYtvC,GAE1B,GAAIikC,EAAM,IAAM,GAAKA,EAAM,IAAMsa,GAAsBta,EAAM,IAAM,GAAKA,EAAM,IAAMua,EAAqB,CACvG,GAAiB,IAAbva,EAAM,IAAyB,IAAbA,EAAM,GAAU,SAEtC+K,GAAS,GAIb,MAAM5kB,IAA+C,eAA7B9lB,EAAO+xB,YAAY3vB,QAA0BpC,EAAOslB,QAAQQ,kBAAmB9lB,EAAOkkB,OAAOgO,mBAAmB,CACtIC,SAAS,EACT9V,SAAS,GAGPquB,GACF1B,IACA+Q,EAAe58B,IAAI,SAAU28B,EAAmBh0B,IACtCkzB,IACVA,GAAwB,EACxBe,EAAe35C,GAAG,SAAU05C,EAAmBh0B,IAInD1lB,EAAG,aAAc,KACXJ,EAAOkkB,OAAO6kB,KAAK7f,SAAWlpB,EAAOkkB,OAAO8P,gBAC9Ch0B,EAAOkkB,OAAO8P,eAAgB,KAGlC5zB,EAAG,OAAQ,KACLJ,EAAOkkB,OAAO6kB,KAAK7f,UACjBlpB,EAAOkkB,OAAO6kB,KAAKwP,YACrBuB,IAEA9Q,OAIN5oC,EAAG,SAAU,KACPJ,EAAOkkB,OAAOqI,UAAYvsB,EAAOkkB,OAAOqI,SAASrD,UAAYlpB,EAAOkkB,OAAOqI,SAASkhB,QACtFzE,MAGJ5oC,EAAG,sDAAuD,KACpDJ,EAAOkkB,OAAO6kB,KAAK7f,UACjBlpB,EAAOkkB,OAAO6kB,KAAKwP,YACrBuB,IAEA9Q,OAIN5oC,EAAG,kBAAmB,KAChBJ,EAAOkkB,OAAO6kB,KAAK7f,UACjBlpB,EAAOkkB,OAAO6kB,KAAK2P,wBAA0B14C,EAAOkkB,OAAO6kB,KAAK2P,wBAA0BO,KACxFj5C,EAAOkkB,OAAO6kB,KAAKwP,YACrBuB,IAEA9Q,OAKR5oC,EAAG,gBAAiB,KACdJ,EAAOkkB,OAAO6kB,KAAK7f,UAAYlpB,EAAOkkB,OAAO6kB,KAAK2P,wBAChD14C,EAAOkkB,OAAO6kB,KAAKwP,YACrBuB,IAEA9Q,OAIN5oC,EAAG,cAAe,KAChB,MAAM,KACJ2oC,EAAI,QACJ1f,EAAO,oBACPsF,EAAmB,oBACnB7B,EAAmB,gBACnB0B,GACExuB,EAAOkkB,OAEP6kB,EAAK7f,UAAYG,GAAWsF,IAAwB7B,GAA2C,IAApB0B,KAC7Ewa,MAGJ5oC,EAAG,UAAW,KACPJ,EAAOgN,KACZhN,EAAOgN,IAAI5L,KAAK,IAAIpB,EAAOkkB,OAAO6kB,KAAK8P,cAAgB5yC,YAAYjG,EAAOkkB,OAAO6kB,KAAK8P,gBAExFz8C,OAAOyQ,OAAO7M,EAAO+oC,KAAM,CACzBC,OACAkQ,iBAKJ,SAAoBv1B,GAClB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,GACEujB,EAaJ,SAASw2B,EAAa/e,EAAGC,GACvB,MAAM+e,EAAe,WACnB,IAAIR,EACAC,EACAQ,EACJ,MAAO,CAACC,EAAO17C,KAIb,IAHAi7C,GAAY,EACZD,EAAWU,EAAMt3C,OAEV42C,EAAWC,EAAW,GAC3BQ,EAAQT,EAAWC,GAAY,EAE3BS,EAAMD,IAAUz7C,EAClBi7C,EAAWQ,EAEXT,EAAWS,EAIf,OAAOT,GAlBU,GA4BrB,IAAIW,EACAC,EAYJ,OAnBAl6C,KAAK86B,EAAIA,EACT96B,KAAK+6B,EAAIA,EACT/6B,KAAK68B,UAAY/B,EAAEp4B,OAAS,EAO5B1C,KAAKm6C,YAAc,SAAqB5E,GACtC,OAAKA,GAEL2E,EAAKJ,EAAa95C,KAAK86B,EAAGya,GAC1B0E,EAAKC,EAAK,GAGF3E,EAAKv1C,KAAK86B,EAAEmf,KAAQj6C,KAAK+6B,EAAEmf,GAAMl6C,KAAK+6B,EAAEkf,KAAQj6C,KAAK86B,EAAEof,GAAMl6C,KAAK86B,EAAEmf,IAAOj6C,KAAK+6B,EAAEkf,IAN1E,GASXj6C,KAgGT,SAASo6C,IACF16C,EAAO26C,WAAWC,SAEnB56C,EAAO26C,WAAWE,SACpB76C,EAAO26C,WAAWE,YAASxtC,SACpBrN,EAAO26C,WAAWE,QA3J7BjZ,EAAa,CACX+Y,WAAY,CACVC,aAASvtC,EACTytC,SAAS,EACTC,GAAI,WAIR/6C,EAAO26C,WAAa,CAClBC,aAASvtC,GAsJXjN,EAAG,aAAc,KACfJ,EAAO26C,WAAWC,QAAU56C,EAAOkkB,OAAOy2B,WAAWC,UAEvDx6C,EAAG,SAAU,KACXs6C,MAEFt6C,EAAG,SAAU,KACXs6C,MAEFt6C,EAAG,iBAAkB,KACnBs6C,MAEFt6C,EAAG,eAAgB,CAACklC,EAAIvhB,EAAWoX,KAC5Bn7B,EAAO26C,WAAWC,SACvB56C,EAAO26C,WAAW5rB,aAAahL,EAAWoX,KAE5C/6B,EAAG,gBAAiB,CAACklC,EAAIzpB,EAAUsf,KAC5Bn7B,EAAO26C,WAAWC,SACvB56C,EAAO26C,WAAW9sB,cAAchS,EAAUsf,KAE5C/+B,OAAOyQ,OAAO7M,EAAO26C,WAAY,CAC/B5rB,aApHF,SAAsBisB,EAAI7f,GACxB,MAAM8f,EAAaj7C,EAAO26C,WAAWC,QACrC,IAAIzgB,EACA+gB,EACJ,MAAM58C,EAAS0B,EAAOwW,YAEtB,SAAS2kC,EAAuBp/C,GAK9B,MAAMgoB,EAAY/jB,EAAOysB,cAAgBzsB,EAAO+jB,UAAY/jB,EAAO+jB,UAE/B,UAAhC/jB,EAAOkkB,OAAOy2B,WAAWI,KAnBjC,SAAgCh/C,GACzBiE,EAAO26C,WAAWE,SACrB76C,EAAO26C,WAAWE,OAAS76C,EAAOkkB,OAAOxkB,KAAO,IAAIy6C,EAAan6C,EAAOivB,WAAYlzB,EAAEkzB,YAAc,IAAIkrB,EAAan6C,EAAO6wB,SAAU90B,EAAE80B,WAkBtIuqB,CAAuBr/C,GAGvBm/C,GAAuBl7C,EAAO26C,WAAWE,OAAOJ,aAAa12B,IAG1Dm3B,GAAuD,cAAhCl7C,EAAOkkB,OAAOy2B,WAAWI,KACnD5gB,GAAcp+B,EAAEixB,eAAiBjxB,EAAEkxB,iBAAmBjtB,EAAOgtB,eAAiBhtB,EAAOitB,gBACrFiuB,GAAuBn3B,EAAY/jB,EAAOitB,gBAAkBkN,EAAap+B,EAAEkxB,gBAGzEjtB,EAAOkkB,OAAOy2B,WAAWG,UAC3BI,EAAsBn/C,EAAEixB,eAAiBkuB,GAG3Cn/C,EAAE+yB,eAAeosB,GACjBn/C,EAAEgzB,aAAamsB,EAAqBl7C,GACpCjE,EAAE6yB,oBACF7yB,EAAE8yB,sBAGJ,GAAI/V,MAAMU,QAAQyhC,GAChB,IAAK,IAAIv/C,EAAI,EAAGA,EAAIu/C,EAAWj4C,OAAQtH,GAAK,EACtCu/C,EAAWv/C,KAAOy/B,GAAgB8f,EAAWv/C,aAAc4C,GAC7D68C,EAAuBF,EAAWv/C,SAG7Bu/C,aAAsB38C,GAAU68B,IAAiB8f,GAC1DE,EAAuBF,IA2EzBptB,cAvEF,SAAuBhS,EAAUsf,GAC/B,MAAM78B,EAAS0B,EAAOwW,YAChBykC,EAAaj7C,EAAO26C,WAAWC,QACrC,IAAIl/C,EAEJ,SAAS2/C,EAAwBt/C,GAC/BA,EAAE8xB,cAAchS,EAAU7b,GAET,IAAb6b,IACF9f,EAAE8/B,kBAEE9/B,EAAEmoB,OAAO8O,YACX9R,EAAS,KACPnlB,EAAEk9B,qBAINl9B,EAAE+xB,WAAW5P,cAAc,KACpB+8B,IAEDl/C,EAAEmoB,OAAOxkB,MAAwC,UAAhCM,EAAOkkB,OAAOy2B,WAAWI,IAC5Ch/C,EAAEutB,UAGJvtB,EAAEmiB,oBAKR,GAAIpF,MAAMU,QAAQyhC,GAChB,IAAKv/C,EAAI,EAAGA,EAAIu/C,EAAWj4C,OAAQtH,GAAK,EAClCu/C,EAAWv/C,KAAOy/B,GAAgB8f,EAAWv/C,aAAc4C,GAC7D+8C,EAAwBJ,EAAWv/C,SAG9Bu/C,aAAsB38C,GAAU68B,IAAiB8f,GAC1DI,EAAwBJ,OAuC9B,SAAct3B,GACZ,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,GACEujB,EACJie,EAAa,CACX0Z,KAAM,CACJpyB,SAAS,EACTqyB,kBAAmB,sBACnBC,iBAAkB,iBAClBC,iBAAkB,aAClBC,kBAAmB,0BACnBC,iBAAkB,yBAClBC,wBAAyB,wBACzBC,kBAAmB,+BACnBC,iBAAkB,KAClBC,gCAAiC,KACjCC,2BAA4B,KAC5BC,UAAW,QACXp2C,GAAI,QAGR7F,EAAOs7C,KAAO,CACZY,SAAS,GAEX,IAAIC,EAAa,KAEjB,SAASC,EAAOt9C,GACd,MAAMu9C,EAAeF,EACO,IAAxBE,EAAar5C,SACjBq5C,EAAa56C,KAAK,IAClB46C,EAAa56C,KAAK3C,IAapB,SAASw9C,EAAgBtvC,GACvBA,EAAI1L,KAAK,WAAY,KAGvB,SAASi7C,EAAmBvvC,GAC1BA,EAAI1L,KAAK,WAAY,MAGvB,SAASk7C,EAAUxvC,EAAKyvC,GACtBzvC,EAAI1L,KAAK,OAAQm7C,GAGnB,SAASC,EAAqB1vC,EAAK2vC,GACjC3vC,EAAI1L,KAAK,uBAAwBq7C,GAOnC,SAASC,EAAW5vC,EAAKmD,GACvBnD,EAAI1L,KAAK,aAAc6O,GAWzB,SAAS0sC,EAAU7vC,GACjBA,EAAI1L,KAAK,iBAAiB,GAG5B,SAASw7C,EAAS9vC,GAChBA,EAAI1L,KAAK,iBAAiB,GAG5B,SAASy7C,EAAkB18C,GACzB,GAAkB,KAAdA,EAAE4I,SAAgC,KAAd5I,EAAE4I,QAAgB,OAC1C,MAAMib,EAASlkB,EAAOkkB,OAAOo3B,KACvB9xB,EAAY1rB,EAAEuC,EAAE5B,QAElBuB,EAAOJ,YAAcI,EAAOJ,WAAWyuC,SAAW7kB,EAAUhiB,GAAGxH,EAAOJ,WAAWyuC,WAC7EruC,EAAOowB,QAAUpwB,EAAOkkB,OAAOxkB,MACnCM,EAAOy8B,YAGLz8B,EAAOowB,MACTgsB,EAAOl4B,EAAOy3B,kBAEdS,EAAOl4B,EAAOu3B,mBAIdz7C,EAAOJ,YAAcI,EAAOJ,WAAW0uC,SAAW9kB,EAAUhiB,GAAGxH,EAAOJ,WAAW0uC,WAC7EtuC,EAAOiwB,cAAgBjwB,EAAOkkB,OAAOxkB,MACzCM,EAAO68B,YAGL78B,EAAOiwB,YACTmsB,EAAOl4B,EAAOw3B,mBAEdU,EAAOl4B,EAAOs3B,mBAIdx7C,EAAO8uC,YAActlB,EAAUhiB,GAAG08B,EAAkBlkC,EAAOkkB,OAAO4qB,WAAWgB,eAC/EtmB,EAAU,GAAGwzB,QAgCjB,SAASC,IACP,OAAOj9C,EAAO8uC,YAAc9uC,EAAO8uC,WAAW2B,SAAWzwC,EAAO8uC,WAAW2B,QAAQztC,OAGrF,SAASk6C,IACP,OAAOD,KAAmBj9C,EAAOkkB,OAAO4qB,WAAWC,UA0BrD,MAAMoO,EAAY,CAACnwC,EAAKowC,EAAWt+C,KACjCw9C,EAAgBtvC,GAEO,WAAnBA,EAAI,GAAGmhC,UACTqO,EAAUxvC,EAAK,UACfA,EAAI5M,GAAG,UAAW28C,IAGpBH,EAAW5vC,EAAKlO,GA7HlB,SAAuBkO,EAAKqwC,GAC1BrwC,EAAI1L,KAAK,gBAAiB+7C,GA6H1BC,CAActwC,EAAKowC,IAGfG,EAAoB,KACxBv9C,EAAOs7C,KAAKY,SAAU,GAGlBsB,EAAkB,KACtBhlC,sBAAsB,KACpBA,sBAAsB,KACfxY,EAAOmoB,YACVnoB,EAAOs7C,KAAKY,SAAU,QAMxBuB,EAAcp9C,IAClB,GAAIL,EAAOs7C,KAAKY,QAAS,OACzB,MAAMzZ,EAAUpiC,EAAE5B,OAAO2G,QAAQ,IAAIpF,EAAOkkB,OAAOuQ,YACnD,IAAKgO,IAAYziC,EAAOmwB,OAAOutB,SAASjb,GAAU,OAClD,MAAMkb,EAAW39C,EAAOmwB,OAAOpiB,QAAQ00B,KAAaziC,EAAO4oB,YACrDg1B,EAAY59C,EAAOkkB,OAAOyK,qBAAuB3uB,EAAOq5B,eAAiBr5B,EAAOq5B,cAAcqkB,SAASjb,GACzGkb,GAAYC,GACZv9C,EAAEw9C,oBAAsBx9C,EAAEw9C,mBAAmBC,mBAE7C99C,EAAOstB,eACTttB,EAAOuZ,GAAG4F,WAAa,EAEvBnf,EAAOuZ,GAAG0F,UAAY,EAGxBjf,EAAOwwB,QAAQxwB,EAAOmwB,OAAOpiB,QAAQ00B,GAAU,KAG3CrL,EAAa,KACjB,MAAMlT,EAASlkB,EAAOkkB,OAAOo3B,KAEzBp3B,EAAO83B,4BACTU,EAAqB5+C,EAAEkC,EAAOmwB,QAASjM,EAAO83B,4BAG5C93B,EAAO+3B,WACTO,EAAU1+C,EAAEkC,EAAOmwB,QAASjM,EAAO+3B,WAGrC,MAAM3lB,EAAet2B,EAAOkkB,OAAOxkB,KAAOM,EAAOmwB,OAAOzW,OAAOH,IAAOA,EAAGqB,UAAUO,SAASnb,EAAOkkB,OAAO4Q,sBAAsB9xB,OAAShD,EAAOmwB,OAAOntB,OAEnJkhB,EAAO23B,mBACT77C,EAAOmwB,OAAOhd,KAAK,CAACsvB,EAASvzB,KAC3B,MAAMw2B,EAAW5nC,EAAE2kC,GACbrK,EAAap4B,EAAOkkB,OAAOxkB,KAAOkB,SAAS8kC,EAASpkC,KAAK,2BAA4B,IAAM4N,EAEjG0tC,EAAWlX,EADcxhB,EAAO23B,kBAAkB75B,QAAQ,gBAAiBoW,EAAa,GAAGpW,QAAQ,uBAAwBsU,OAM3H1D,EAAO,KACX,MAAM1O,EAASlkB,EAAOkkB,OAAOo3B,KAC7Bt7C,EAAOgN,IAAIhO,OAAOm9C,GAElB,MAAM4B,EAAe/9C,EAAOgN,IAExBkX,EAAO63B,iCACTW,EAAqBqB,EAAc75B,EAAO63B,iCAGxC73B,EAAO43B,kBACTc,EAAWmB,EAAc75B,EAAO43B,kBAIlC,MAAMhuB,EAAa9tB,EAAO8tB,WACpBsvB,EAAYl5B,EAAOre,IAAMioB,EAAWxsB,KAAK,OAAS,wBAjO3C,KADUy0B,EAkOmE,MAhOxFA,EAAO,IAKF,IAAIioB,OAAOjoB,GAAM/T,QAAQ,KAFb,IAAM6C,KAAKo5B,MAAM,GAAKp5B,KAAKq5B,UAAU77B,SAAS,MALnE,IAAyB0T,EAmOvB,MAAMooB,EAAOn+C,EAAOkkB,OAAO8M,UAAYhxB,EAAOkkB,OAAO8M,SAAS9H,QAAU,MAAQ,SAjMlF,IAAsBrjB,EAuMpB,IAAIwoC,EACAC,EAxMgBzoC,EAkMAu3C,EAAZtvB,EAjMJxsB,KAAK,KAAMuE,GAGjB,SAAmBmH,EAAKmxC,GACtBnxC,EAAI1L,KAAK,YAAa68C,GA8LtBC,CAAUtwB,EAAYqwB,GAEtB/mB,IAKIp3B,EAAOJ,YAAcI,EAAOJ,WAAWyuC,UACzCA,EAAUruC,EAAOJ,WAAWyuC,SAG1BruC,EAAOJ,YAAcI,EAAOJ,WAAW0uC,UACzCA,EAAUtuC,EAAOJ,WAAW0uC,SAG1BD,GAAWA,EAAQrrC,QACrBm6C,EAAU9O,EAAS+O,EAAWl5B,EAAOu3B,kBAGnCnN,GAAWA,EAAQtrC,QACrBm6C,EAAU7O,EAAS8O,EAAWl5B,EAAOs3B,kBAInC0B,KACFl9C,EAAO8uC,WAAW9hC,IAAI5M,GAAG,UAAW8jC,EAAkBlkC,EAAOkkB,OAAO4qB,WAAWgB,aAAciN,GAI/F/8C,EAAOgN,IAAI5M,GAAG,QAASq9C,GAAa,GACpCz9C,EAAOgN,IAAI5M,GAAG,cAAem9C,GAAmB,GAChDv9C,EAAOgN,IAAI5M,GAAG,YAAao9C,GAAiB,IAmC9Cp9C,EAAG,aAAc,KACf+7C,EAAar+C,EAAE,gBAAgBkC,EAAOkkB,OAAOo3B,KAAKC,yEAEpDn7C,EAAG,YAAa,KACTJ,EAAOkkB,OAAOo3B,KAAKpyB,SACxB0J,MAEFxyB,EAAG,iEAAkE,KAC9DJ,EAAOkkB,OAAOo3B,KAAKpyB,SACxBkO,MAEFh3B,EAAG,wCAAyC,KACrCJ,EAAOkkB,OAAOo3B,KAAKpyB,SA/N1B,WACE,GAAIlpB,EAAOkkB,OAAOxkB,MAAQM,EAAOkkB,OAAO8L,SAAWhwB,EAAOJ,WAAY,OACtE,MAAM,QACJyuC,EAAO,QACPC,GACEtuC,EAAOJ,WAEP0uC,GAAWA,EAAQtrC,OAAS,IAC1BhD,EAAOiwB,aACT4sB,EAAUvO,GACViO,EAAmBjO,KAEnBwO,EAASxO,GACTgO,EAAgBhO,KAIhBD,GAAWA,EAAQrrC,OAAS,IAC1BhD,EAAOowB,OACTysB,EAAUxO,GACVkO,EAAmBlO,KAEnByO,EAASzO,GACTiO,EAAgBjO,KAyMpBgQ,KAEFj+C,EAAG,mBAAoB,KAChBJ,EAAOkkB,OAAOo3B,KAAKpyB,SA/L1B,WACE,MAAMhF,EAASlkB,EAAOkkB,OAAOo3B,KACxB2B,KACLj9C,EAAO8uC,WAAW2B,QAAQt9B,KAAKmrC,IAC7B,MAAMzN,EAAY/yC,EAAEwgD,GAEhBt+C,EAAOkkB,OAAO4qB,WAAWC,YAC3BuN,EAAgBzL,GAEX7wC,EAAOkkB,OAAO4qB,WAAWM,eAC5BoN,EAAU3L,EAAW,UACrB+L,EAAW/L,EAAW3sB,EAAO03B,wBAAwB55B,QAAQ,gBAAiB6uB,EAAU3hC,QAAU,MAIlG2hC,EAAUrpC,GAAG,IAAIxH,EAAOkkB,OAAO4qB,WAAWiB,mBAC5Cc,EAAUvvC,KAAK,eAAgB,QAE/BuvC,EAAU3mC,WAAW,kBA8KzBq0C,KAEFn+C,EAAG,UAAW,KACPJ,EAAOkkB,OAAOo3B,KAAKpyB,SApD1B,WAEE,IAAImlB,EACAC,EAFA6N,GAAcA,EAAWn5C,OAAS,GAAGm5C,EAAWj9C,SAIhDc,EAAOJ,YAAcI,EAAOJ,WAAWyuC,UACzCA,EAAUruC,EAAOJ,WAAWyuC,SAG1BruC,EAAOJ,YAAcI,EAAOJ,WAAW0uC,UACzCA,EAAUtuC,EAAOJ,WAAW0uC,SAG1BD,GACFA,EAAQlxB,IAAI,UAAW4/B,GAGrBzO,GACFA,EAAQnxB,IAAI,UAAW4/B,GAIrBG,KACFl9C,EAAO8uC,WAAW9hC,IAAImQ,IAAI,UAAW+mB,EAAkBlkC,EAAOkkB,OAAO4qB,WAAWgB,aAAciN,GAIhG/8C,EAAOgN,IAAImQ,IAAI,QAASsgC,GAAa,GACrCz9C,EAAOgN,IAAImQ,IAAI,cAAeogC,GAAmB,GACjDv9C,EAAOgN,IAAImQ,IAAI,YAAaqgC,GAAiB,GAwB7C/O,MAIJ,SAAiB9qB,GACf,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,GACEujB,EACJie,EAAa,CACX1pB,QAAS,CACPgR,SAAS,EACTs1B,KAAM,GACNC,cAAc,EACdxhD,IAAK,SACLyhD,WAAW,KAGf,IAAI3jB,GAAc,EACd4jB,EAAQ,GAEZ,MAAMC,EAAUv9C,GACPA,EAAKghB,WAAWL,QAAQ,OAAQ,KAAKA,QAAQ,WAAY,IAAIA,QAAQ,OAAQ,KAAKA,QAAQ,MAAO,IAAIA,QAAQ,MAAO,IAGvH68B,EAAgBC,IACpB,MAAMp6C,EAASiU,IACf,IAAIhU,EAGFA,EADEm6C,EACS,IAAIC,IAAID,GAERp6C,EAAOC,SAGpB,MAAMq6C,EAAYr6C,EAASyR,SAAShS,MAAM,GAAGuW,MAAM,KAAKjB,OAAOulC,GAAiB,KAATA,GACjEnO,EAAQkO,EAAUh8C,OAGxB,MAAO,CACL/F,IAHU+hD,EAAUlO,EAAQ,GAI5Bn0C,MAHYqiD,EAAUlO,EAAQ,KAO5BoO,EAAa,CAACjiD,EAAKiS,KACvB,MAAMxK,EAASiU,IACf,IAAKoiB,IAAgB/6B,EAAOkkB,OAAOhM,QAAQgR,QAAS,OACpD,IAAIvkB,EAGFA,EADE3E,EAAOkkB,OAAOriB,IACL,IAAIk9C,IAAI/+C,EAAOkkB,OAAOriB,KAEtB6C,EAAOC,SAGpB,MAAM2yB,EAAQt3B,EAAOmwB,OAAO7pB,GAAG4I,GAC/B,IAAIvS,EAAQiiD,EAAQtnB,EAAMh2B,KAAK,iBAE/B,GAAItB,EAAOkkB,OAAOhM,QAAQsmC,KAAKx7C,OAAS,EAAG,CACzC,IAAIw7C,EAAOx+C,EAAOkkB,OAAOhM,QAAQsmC,KACH,MAA1BA,EAAKA,EAAKx7C,OAAS,KAAYw7C,EAAOA,EAAKp6C,MAAM,EAAGo6C,EAAKx7C,OAAS,IACtErG,EAAQ,GAAG6hD,KAAQvhD,KAAON,SAChBgI,EAASyR,SAASsnC,SAASzgD,KACrCN,EAAQ,GAAGM,KAAON,KAGhBqD,EAAOkkB,OAAOhM,QAAQwmC,YACxB/hD,GAASgI,EAAS0R,QAGpB,MAAM8oC,EAAez6C,EAAOwT,QAAQknC,MAEhCD,GAAgBA,EAAaxiD,QAAUA,IAIvCqD,EAAOkkB,OAAOhM,QAAQumC,aACxB/5C,EAAOwT,QAAQumC,aAAa,CAC1B9hD,SACC,KAAMA,GAET+H,EAAOwT,QAAQmnC,UAAU,CACvB1iD,SACC,KAAMA,KAIP2iD,EAAgB,CAAC3/C,EAAOhD,EAAO8rB,KACnC,GAAI9rB,EACF,IAAK,IAAIjB,EAAI,EAAGsH,EAAShD,EAAOmwB,OAAOntB,OAAQtH,EAAIsH,EAAQtH,GAAK,EAAG,CACjE,MAAM47B,EAAQt3B,EAAOmwB,OAAO7pB,GAAG5K,GAG/B,GAFqBkjD,EAAQtnB,EAAMh2B,KAAK,mBAEnB3E,IAAU26B,EAAMr1B,SAASjC,EAAOkkB,OAAO4Q,qBAAsB,CAChF,MAAM5lB,EAAQooB,EAAMpoB,QACpBlP,EAAOwwB,QAAQthB,EAAOvP,EAAO8oB,SAIjCzoB,EAAOwwB,QAAQ,EAAG7wB,EAAO8oB,IAIvB82B,EAAqB,KACzBZ,EAAQE,EAAc7+C,EAAOkkB,OAAOriB,KACpCy9C,EAAct/C,EAAOkkB,OAAOvkB,MAAOg/C,EAAMhiD,OAAO,IA+BlDyD,EAAG,OAAQ,KACLJ,EAAOkkB,OAAOhM,QAAQgR,SA7Bf,MACX,MAAMxkB,EAASiU,IACf,GAAK3Y,EAAOkkB,OAAOhM,QAAnB,CAEA,IAAKxT,EAAOwT,UAAYxT,EAAOwT,QAAQmnC,UAGrC,OAFAr/C,EAAOkkB,OAAOhM,QAAQgR,SAAU,OAChClpB,EAAOkkB,OAAOs7B,eAAet2B,SAAU,GAIzC6R,GAAc,EACd4jB,EAAQE,EAAc7+C,EAAOkkB,OAAOriB,MAC/B88C,EAAM1hD,KAAQ0hD,EAAMhiD,SACzB2iD,EAAc,EAAGX,EAAMhiD,MAAOqD,EAAOkkB,OAAOkR,oBAEvCp1B,EAAOkkB,OAAOhM,QAAQumC,cACzB/5C,EAAOuY,iBAAiB,WAAYsiC,MAcpC3sB,KAGJxyB,EAAG,UAAW,KACRJ,EAAOkkB,OAAOhM,QAAQgR,SAdZ,MACd,MAAMxkB,EAASiU,IAEV3Y,EAAOkkB,OAAOhM,QAAQumC,cACzB/5C,EAAO+Y,oBAAoB,WAAY8hC,IAWvC9Q,KAGJruC,EAAG,2CAA4C,KACzC26B,GACFmkB,EAAWl/C,EAAOkkB,OAAOhM,QAAQjb,IAAK+C,EAAO4oB,eAGjDxoB,EAAG,cAAe,KACZ26B,GAAe/6B,EAAOkkB,OAAOmF,SAC/B61B,EAAWl/C,EAAOkkB,OAAOhM,QAAQjb,IAAK+C,EAAO4oB,gBAKnD,SAAwBjF,GACtB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,KACZ9Y,EAAI,GACJ1oB,GACEujB,EACAoX,GAAc,EAClB,MAAM98B,EAAW4Z,IACXnT,EAASiU,IACfipB,EAAa,CACX4d,eAAgB,CACdt2B,SAAS,EACTu1B,cAAc,EACdgB,YAAY,KAIhB,MAAMC,EAAe,KACnB52B,EAAK,cACL,MAAM62B,EAAU1hD,EAAS0G,SAAS6S,KAAKwK,QAAQ,IAAK,IAGpD,GAAI29B,IAFoB3/C,EAAOmwB,OAAO7pB,GAAGtG,EAAO4oB,aAAatnB,KAAK,aAEjC,CAC/B,MAAMk7B,EAAWx8B,EAAO8tB,WAAW7c,SAAS,IAAIjR,EAAOkkB,OAAOuQ,yBAAyBkrB,OAAazwC,QACpG,QAAwB,IAAbstB,EAA0B,OACrCx8B,EAAOwwB,QAAQgM,KAIbojB,EAAU,KACd,GAAK7kB,GAAgB/6B,EAAOkkB,OAAOs7B,eAAet2B,QAElD,GAAIlpB,EAAOkkB,OAAOs7B,eAAef,cAAgB/5C,EAAOwT,SAAWxT,EAAOwT,QAAQumC,aAChF/5C,EAAOwT,QAAQumC,aAAa,KAAM,KAAM,IAAIz+C,EAAOmwB,OAAO7pB,GAAGtG,EAAO4oB,aAAatnB,KAAK,cAAkB,IACxGwnB,EAAK,eACA,CACL,MAAMwO,EAAQt3B,EAAOmwB,OAAO7pB,GAAGtG,EAAO4oB,aAChCpR,EAAO8f,EAAMh2B,KAAK,cAAgBg2B,EAAMh2B,KAAK,gBACnDrD,EAAS0G,SAAS6S,KAAOA,GAAQ,GACjCsR,EAAK,aAkCT1oB,EAAG,OAAQ,KACLJ,EAAOkkB,OAAOs7B,eAAet2B,SA/BtB,MACX,IAAKlpB,EAAOkkB,OAAOs7B,eAAet2B,SAAWlpB,EAAOkkB,OAAOhM,SAAWlY,EAAOkkB,OAAOhM,QAAQgR,QAAS,OACrG6R,GAAc,EACd,MAAMvjB,EAAOvZ,EAAS0G,SAAS6S,KAAKwK,QAAQ,IAAK,IAEjD,GAAIxK,EAAM,CACR,MAAM7X,EAAQ,EAEd,IAAK,IAAIjE,EAAI,EAAGsH,EAAShD,EAAOmwB,OAAOntB,OAAQtH,EAAIsH,EAAQtH,GAAK,EAAG,CACjE,MAAM47B,EAAQt3B,EAAOmwB,OAAO7pB,GAAG5K,GAG/B,IAFkB47B,EAAMh2B,KAAK,cAAgBg2B,EAAMh2B,KAAK,mBAEtCkW,IAAS8f,EAAMr1B,SAASjC,EAAOkkB,OAAO4Q,qBAAsB,CAC5E,MAAM5lB,EAAQooB,EAAMpoB,QACpBlP,EAAOwwB,QAAQthB,EAAOvP,EAAOK,EAAOkkB,OAAOkR,oBAAoB,KAKjEp1B,EAAOkkB,OAAOs7B,eAAeC,YAC/B3hD,EAAE4G,GAAQtE,GAAG,aAAcs/C,IAY3B9sB,KAGJxyB,EAAG,UAAW,KACRJ,EAAOkkB,OAAOs7B,eAAet2B,SAX7BlpB,EAAOkkB,OAAOs7B,eAAeC,YAC/B3hD,EAAE4G,GAAQyY,IAAI,aAAcuiC,KAchCt/C,EAAG,2CAA4C,KACzC26B,GACF6kB,MAGJx/C,EAAG,cAAe,KACZ26B,GAAe/6B,EAAOkkB,OAAOmF,SAC/Bu2B,OAMN,SAAkBj8B,GAChB,IAMIunB,GANA,OACFlrC,EAAM,aACN4hC,EAAY,GACZxhC,EAAE,KACF0oB,GACEnF,EAkBJ,SAASwN,IACP,IAAKnxB,EAAO+1B,KAGV,OAFA/1B,EAAOgxB,SAASC,SAAU,OAC1BjxB,EAAOgxB,SAASE,QAAS,GAI3B,MAAM2uB,EAAiB7/C,EAAOmwB,OAAO7pB,GAAGtG,EAAO4oB,aAC/C,IAAIzH,EAAQnhB,EAAOkkB,OAAO8M,SAAS7P,MAE/B0+B,EAAev+C,KAAK,0BACtB6f,EAAQ0+B,EAAev+C,KAAK,yBAA2BtB,EAAOkkB,OAAO8M,SAAS7P,OAGhFzI,aAAawyB,GACbA,EAAUhqB,EAAS,KACjB,IAAI4+B,EAEA9/C,EAAOkkB,OAAO8M,SAAS+uB,iBACrB//C,EAAOkkB,OAAOxkB,MAChBM,EAAOspB,UACPw2B,EAAiB9/C,EAAO68B,UAAU78B,EAAOkkB,OAAOvkB,OAAO,GAAM,GAC7DmpB,EAAK,aACK9oB,EAAOiwB,YAGPjwB,EAAOkkB,OAAO8M,SAASgvB,gBAIjC/6C,KAHA66C,EAAiB9/C,EAAOwwB,QAAQxwB,EAAOmwB,OAAOntB,OAAS,EAAGhD,EAAOkkB,OAAOvkB,OAAO,GAAM,GACrFmpB,EAAK,cAJLg3B,EAAiB9/C,EAAO68B,UAAU78B,EAAOkkB,OAAOvkB,OAAO,GAAM,GAC7DmpB,EAAK,aAOE9oB,EAAOkkB,OAAOxkB,MACvBM,EAAOspB,UACPw2B,EAAiB9/C,EAAOy8B,UAAUz8B,EAAOkkB,OAAOvkB,OAAO,GAAM,GAC7DmpB,EAAK,aACK9oB,EAAOowB,MAGPpwB,EAAOkkB,OAAO8M,SAASgvB,gBAIjC/6C,KAHA66C,EAAiB9/C,EAAOwwB,QAAQ,EAAGxwB,EAAOkkB,OAAOvkB,OAAO,GAAM,GAC9DmpB,EAAK,cAJLg3B,EAAiB9/C,EAAOy8B,UAAUz8B,EAAOkkB,OAAOvkB,OAAO,GAAM,GAC7DmpB,EAAK,cAQH9oB,EAAOkkB,OAAOmF,SAAWrpB,EAAOgxB,SAASC,UAA2C,IAAnB6uB,IAAf3uB,KAGrDhQ,GAGL,SAAS/e,IACP,YAAuB,IAAZ8oC,IACPlrC,EAAOgxB,SAASC,UACpBjxB,EAAOgxB,SAASC,SAAU,EAC1BnI,EAAK,iBACLqI,KACO,GAGT,SAASlsB,IACP,QAAKjF,EAAOgxB,SAASC,cACE,IAAZia,IAEPA,IACFxyB,aAAawyB,GACbA,OAAU79B,GAGZrN,EAAOgxB,SAASC,SAAU,EAC1BnI,EAAK,iBACE,GAGT,SAASm3B,EAAMtgD,GACRK,EAAOgxB,SAASC,UACjBjxB,EAAOgxB,SAASE,SAChBga,GAASxyB,aAAawyB,GAC1BlrC,EAAOgxB,SAASE,QAAS,EAEX,IAAVvxB,GAAgBK,EAAOkkB,OAAO8M,SAASkvB,kBAIzC,CAAC,gBAAiB,uBAAuBtiD,QAAQoD,IAC/ChB,EAAO8tB,WAAW,GAAG7Q,iBAAiBjc,EAAOs1C,MAJ/Ct2C,EAAOgxB,SAASE,QAAS,EACzBC,OAQJ,SAASgvB,IACP,MAAMliD,EAAW4Z,IAEgB,WAA7B5Z,EAASmiD,iBAAgCpgD,EAAOgxB,SAASC,SAC3DgvB,IAG+B,YAA7BhiD,EAASmiD,iBAAiCpgD,EAAOgxB,SAASE,SAC5DC,IACAnxB,EAAOgxB,SAASE,QAAS,GAI7B,SAASolB,EAAgBj2C,GAClBL,IAAUA,EAAOmoB,WAAcnoB,EAAO8tB,YACvCztB,EAAE5B,SAAWuB,EAAO8tB,WAAW,KACnC,CAAC,gBAAiB,uBAAuBlwB,QAAQoD,IAC/ChB,EAAO8tB,WAAW,GAAGrQ,oBAAoBzc,EAAOs1C,KAElDt2C,EAAOgxB,SAASE,QAAS,EAEpBlxB,EAAOgxB,SAASC,QAGnBE,IAFAlsB,KAMJ,SAASo7C,IACHrgD,EAAOkkB,OAAO8M,SAASsvB,qBACzBr7C,KAEA6jB,EAAK,iBACLm3B,KAGF,CAAC,gBAAiB,uBAAuBriD,QAAQoD,IAC/ChB,EAAO8tB,WAAW,GAAGrQ,oBAAoBzc,EAAOs1C,KAIpD,SAASiK,IACHvgD,EAAOkkB,OAAO8M,SAASsvB,uBAI3BtgD,EAAOgxB,SAASE,QAAS,EACzBpI,EAAK,kBACLqI,KA3JFnxB,EAAOgxB,SAAW,CAChBC,SAAS,EACTC,QAAQ,GAEV0Q,EAAa,CACX5Q,SAAU,CACR9H,SAAS,EACT/H,MAAO,IACP++B,mBAAmB,EACnBI,sBAAsB,EACtBN,iBAAiB,EACjBD,kBAAkB,EAClBS,mBAAmB,KA8JvBpgD,EAAG,OAAQ,KACLJ,EAAOkkB,OAAO8M,SAAS9H,UACzB9mB,IACiByV,IACRoF,iBAAiB,mBAAoBkjC,GAf5CngD,EAAOkkB,OAAO8M,SAASwvB,oBACzBxgD,EAAOgN,IAAI5M,GAAG,aAAcigD,GAC5BrgD,EAAOgN,IAAI5M,GAAG,aAAcmgD,OAiBhCngD,EAAG,wBAAyB,CAACklC,EAAI3lC,EAAO67B,KAClCx7B,EAAOgxB,SAASC,UACduK,IAAax7B,EAAOkkB,OAAO8M,SAASsvB,qBACtCtgD,EAAOgxB,SAASivB,MAAMtgD,GAEtBsF,OAIN7E,EAAG,kBAAmB,KAChBJ,EAAOgxB,SAASC,UACdjxB,EAAOkkB,OAAO8M,SAASsvB,qBACzBr7C,IAEAg7C,OAIN7/C,EAAG,WAAY,KACTJ,EAAOkkB,OAAOmF,SAAWrpB,EAAOgxB,SAASE,SAAWlxB,EAAOkkB,OAAO8M,SAASsvB,sBAC7EnvB,MAGJ/wB,EAAG,UAAW,KAnCZJ,EAAOgN,IAAImQ,IAAI,aAAckjC,GAC7BrgD,EAAOgN,IAAImQ,IAAI,aAAcojC,GAqCzBvgD,EAAOgxB,SAASC,SAClBhsB,IAGe4S,IACR4F,oBAAoB,mBAAoB0iC,KAEnD/jD,OAAOyQ,OAAO7M,EAAOgxB,SAAU,CAC7BivB,QACA9uB,MACA/uB,QACA6C,UAIJ,SAAe0e,GACb,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,GACEujB,EACJie,EAAa,CACX7hC,OAAQ,CACNC,OAAQ,KACRygD,sBAAsB,EACtBC,iBAAkB,EAClBC,sBAAuB,4BACvBC,qBAAsB,mBAG1B,IAAI7lB,GAAc,EACd8lB,GAAgB,EAKpB,SAASC,IACP,MAAMC,EAAe/gD,EAAOD,OAAOC,OACnC,IAAK+gD,GAAgBA,EAAa54B,UAAW,OAC7C,MAAM+S,EAAe6lB,EAAa7lB,aAC5BD,EAAe8lB,EAAa9lB,aAClC,GAAIA,GAAgBn9B,EAAEm9B,GAAch5B,SAASjC,EAAOkkB,OAAOnkB,OAAO4gD,uBAAwB,OAC1F,GAAI,MAAOzlB,EAAuD,OAClE,IAAIqC,EAQJ,GALEA,EADEwjB,EAAa78B,OAAOxkB,KACPkB,SAAS9C,EAAEijD,EAAa9lB,cAAc35B,KAAK,2BAA4B,IAEvE45B,EAGbl7B,EAAOkkB,OAAOxkB,KAAM,CACtB,IAAIshD,EAAehhD,EAAO4oB,YAEtB5oB,EAAOmwB,OAAO7pB,GAAG06C,GAAc/+C,SAASjC,EAAOkkB,OAAO4Q,uBACxD90B,EAAOspB,UAEPtpB,EAAO48B,YAAc58B,EAAO8tB,WAAW,GAAG9O,WAC1CgiC,EAAehhD,EAAO4oB,aAGxB,MAAMsU,EAAYl9B,EAAOmwB,OAAO7pB,GAAG06C,GAAcpgC,QAAQ,6BAA6B2c,OAAkBj3B,GAAG,GAAG4I,QACxG8T,EAAYhjB,EAAOmwB,OAAO7pB,GAAG06C,GAAcxgC,QAAQ,6BAA6B+c,OAAkBj3B,GAAG,GAAG4I,QACxEquB,OAAb,IAAdL,EAA0Cla,OAAwC,IAAdA,EAA0Cka,EAAmBla,EAAYg+B,EAAeA,EAAe9jB,EAA0Bla,EAA8Bka,EAGhPl9B,EAAOwwB,QAAQ+M,GAGjB,SAAS3K,IACP,MACE7yB,OAAQkhD,GACNjhD,EAAOkkB,OACX,GAAI6W,EAAa,OAAO,EACxBA,GAAc,EACd,MAAMmmB,EAAclhD,EAAOwW,YAE3B,GAAIyqC,EAAajhD,kBAAkBkhD,EACjClhD,EAAOD,OAAOC,OAASihD,EAAajhD,OACpC5D,OAAOyQ,OAAO7M,EAAOD,OAAOC,OAAO0+B,eAAgB,CACjD/P,qBAAqB,EACrBoF,qBAAqB,IAEvB33B,OAAOyQ,OAAO7M,EAAOD,OAAOC,OAAOkkB,OAAQ,CACzCyK,qBAAqB,EACrBoF,qBAAqB,SAElB,GAAIvR,EAASy+B,EAAajhD,QAAS,CACxC,MAAMmhD,EAAqB/kD,OAAOyQ,OAAO,GAAIo0C,EAAajhD,QAC1D5D,OAAOyQ,OAAOs0C,EAAoB,CAChCxyB,qBAAqB,EACrBoF,qBAAqB,IAEvB/zB,EAAOD,OAAOC,OAAS,IAAIkhD,EAAYC,GACvCN,GAAgB,EAKlB,OAFA7gD,EAAOD,OAAOC,OAAOgN,IAAI9K,SAASlC,EAAOkkB,OAAOnkB,OAAO6gD,sBACvD5gD,EAAOD,OAAOC,OAAOI,GAAG,MAAO0gD,IACxB,EAGT,SAASlrB,EAAOkG,GACd,MAAMilB,EAAe/gD,EAAOD,OAAOC,OACnC,IAAK+gD,GAAgBA,EAAa54B,UAAW,OAC7C,MAAM7oB,EAAsD,SAAtCyhD,EAAa78B,OAAO5kB,cAA2ByhD,EAAapkB,uBAAyBokB,EAAa78B,OAAO5kB,cAE/H,IAAI8hD,EAAmB,EACvB,MAAMC,EAAmBrhD,EAAOkkB,OAAOnkB,OAAO4gD,sBAa9C,GAXI3gD,EAAOkkB,OAAO5kB,cAAgB,IAAMU,EAAOkkB,OAAO6M,iBACpDqwB,EAAmBphD,EAAOkkB,OAAO5kB,eAG9BU,EAAOkkB,OAAOnkB,OAAO0gD,uBACxBW,EAAmB,GAGrBA,EAAmBv8B,KAAKiT,MAAMspB,GAC9BL,EAAa5wB,OAAOlqB,YAAYo7C,GAE5BN,EAAa78B,OAAOxkB,MAAQqhD,EAAa78B,OAAOgM,SAAW6wB,EAAa78B,OAAOgM,QAAQhH,QACzF,IAAK,IAAIxtB,EAAI,EAAGA,EAAI0lD,EAAkB1lD,GAAK,EACzCqlD,EAAajzB,WAAW7c,SAAS,6BAA6BjR,EAAOs6B,UAAY5+B,OAAOwG,SAASm/C,QAGnG,IAAK,IAAI3lD,EAAI,EAAGA,EAAI0lD,EAAkB1lD,GAAK,EACzCqlD,EAAa5wB,OAAO7pB,GAAGtG,EAAOs6B,UAAY5+B,GAAGwG,SAASm/C,GAI1D,MAAMX,EAAmB1gD,EAAOkkB,OAAOnkB,OAAO2gD,iBACxCY,EAAYZ,IAAqBK,EAAa78B,OAAOxkB,KAE3D,GAAIM,EAAOs6B,YAAcymB,EAAazmB,WAAagnB,EAAW,CAC5D,IACIC,EACA74B,EAFA84B,EAAqBT,EAAan4B,YAItC,GAAIm4B,EAAa78B,OAAOxkB,KAAM,CACxBqhD,EAAa5wB,OAAO7pB,GAAGk7C,GAAoBv/C,SAAS8+C,EAAa78B,OAAO4Q,uBAC1EisB,EAAaz3B,UAEby3B,EAAankB,YAAcmkB,EAAajzB,WAAW,GAAG9O,WACtDwiC,EAAqBT,EAAan4B,aAIpC,MAAM64B,EAAkBV,EAAa5wB,OAAO7pB,GAAGk7C,GAAoB5gC,QAAQ,6BAA6B5gB,EAAOs6B,eAAeh0B,GAAG,GAAG4I,QAC9HwyC,EAAkBX,EAAa5wB,OAAO7pB,GAAGk7C,GAAoBhhC,QAAQ,6BAA6BxgB,EAAOs6B,eAAeh0B,GAAG,GAAG4I,QAGlIqyC,OAD6B,IAApBE,EACQC,OACmB,IAApBA,EACCD,EACRC,EAAkBF,GAAuBA,EAAqBC,EACtDV,EAAa78B,OAAO0L,eAAiB,EAAI8xB,EAAkBF,EACnEE,EAAkBF,EAAqBA,EAAqBC,EACpDC,EAEAD,EAGnB/4B,EAAY1oB,EAAO4oB,YAAc5oB,EAAO6oB,cAAgB,OAAS,YAEjE04B,EAAiBvhD,EAAOs6B,UACxB5R,EAAY64B,EAAiBvhD,EAAO6oB,cAAgB,OAAS,OAG3Dy4B,IACFC,GAAgC,SAAd74B,EAAuBg4B,GAAoB,EAAIA,GAG/DK,EAAannB,sBAAwBmnB,EAAannB,qBAAqB7rB,QAAQwzC,GAAkB,IAC/FR,EAAa78B,OAAO6M,eAEpBwwB,EADEA,EAAiBC,EACFD,EAAiB18B,KAAKiT,MAAMx4B,EAAgB,GAAK,EAEjDiiD,EAAiB18B,KAAKiT,MAAMx4B,EAAgB,GAAK,EAE3DiiD,EAAiBC,GAAsBT,EAAa78B,OAAO0L,eAEtEmxB,EAAavwB,QAAQ+wB,EAAgBzlB,EAAU,OAAIzuB,KAtJzDrN,EAAOD,OAAS,CACdC,OAAQ,MA0JVI,EAAG,aAAc,KACf,MAAM,OACJL,GACEC,EAAOkkB,OACNnkB,GAAWA,EAAOC,SACvB4yB,IACAgD,GAAO,MAETx1B,EAAG,2CAA4C,KAC7Cw1B,MAEFx1B,EAAG,gBAAiB,CAACklC,EAAIzpB,KACvB,MAAMklC,EAAe/gD,EAAOD,OAAOC,OAC9B+gD,IAAgBA,EAAa54B,WAClC44B,EAAalzB,cAAchS,KAE7Bzb,EAAG,gBAAiB,KAClB,MAAM2gD,EAAe/gD,EAAOD,OAAOC,OAC9B+gD,IAAgBA,EAAa54B,WAE9B04B,GACFE,EAAatS,YAGjBryC,OAAOyQ,OAAO7M,EAAOD,OAAQ,CAC3B6yB,OACAgD,YAIJ,SAAkBjS,GAChB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,KACZ9Y,EAAI,KACJ+Y,GACEle,EACJie,EAAa,CACXrV,SAAU,CACRrD,SAAS,EACTy4B,UAAU,EACVC,cAAe,EACfC,gBAAgB,EAChBC,oBAAqB,EACrBC,sBAAuB,EACvBtU,QAAQ,EACRuU,gBAAiB,OAyOrB5lD,OAAOyQ,OAAO7M,EAAQ,CACpBusB,SAAU,CACRxD,aAvOJ,WACE,MAAMhF,EAAY/jB,EAAOshB,eACzBthB,EAAO+uB,aAAahL,GACpB/jB,EAAO6tB,cAAc,GACrB7tB,EAAOgpB,gBAAgBuZ,WAAWv/B,OAAS,EAC3ChD,EAAOusB,SAASyC,WAAW,CACzBO,WAAYvvB,EAAO0sB,IAAM1sB,EAAO+jB,WAAa/jB,EAAO+jB,aAkOpDyI,YA9NJ,WACE,MACExD,gBAAiBjrB,EAAI,QACrBkrB,GACEjpB,EAE2B,IAA3BjC,EAAKwkC,WAAWv/B,QAClBjF,EAAKwkC,WAAWnvB,KAAK,CACnBo6B,SAAUvkB,EAAQjpB,EAAOstB,eAAiB,SAAW,UACrDtJ,KAAMjmB,EAAK6tB,iBAIf7tB,EAAKwkC,WAAWnvB,KAAK,CACnBo6B,SAAUvkB,EAAQjpB,EAAOstB,eAAiB,WAAa,YACvDtJ,KAAM5C,OAgNN4N,WA5MJ,SAAoB6X,GAClB,IAAI,WACFtX,GACEsX,EACJ,MAAM,OACJ3iB,EAAM,WACN4J,EACArB,aAAcC,EAAG,SACjBmE,EACA7H,gBAAiBjrB,GACfiC,EAGEmvB,EADe/N,IACWrjB,EAAK6tB,eAErC,GAAI2D,GAAcvvB,EAAOitB,eACvBjtB,EAAOwwB,QAAQxwB,EAAO4oB,kBAIxB,GAAI2G,GAAcvvB,EAAOgtB,eACnBhtB,EAAOmwB,OAAOntB,OAAS6tB,EAAS7tB,OAClChD,EAAOwwB,QAAQK,EAAS7tB,OAAS,GAEjChD,EAAOwwB,QAAQxwB,EAAOmwB,OAAOntB,OAAS,OAJ1C,CAUA,GAAIkhB,EAAOqI,SAASo1B,SAAU,CAC5B,GAAI5jD,EAAKwkC,WAAWv/B,OAAS,EAAG,CAC9B,MAAMi/C,EAAgBlkD,EAAKwkC,WAAW2f,MAChCC,EAAgBpkD,EAAKwkC,WAAW2f,MAChCE,EAAWH,EAAczU,SAAW2U,EAAc3U,SAClDxpB,EAAOi+B,EAAcj+B,KAAOm+B,EAAcn+B,KAChDhkB,EAAOkiC,SAAWkgB,EAAWp+B,EAC7BhkB,EAAOkiC,UAAY,EAEfrd,KAAK2I,IAAIxtB,EAAOkiC,UAAYhe,EAAOqI,SAASy1B,kBAC9ChiD,EAAOkiC,SAAW,IAKhBle,EAAO,KAAO5C,IAAQ6gC,EAAcj+B,KAAO,OAC7ChkB,EAAOkiC,SAAW,QAGpBliC,EAAOkiC,SAAW,EAGpBliC,EAAOkiC,UAAYhe,EAAOqI,SAASw1B,sBACnChkD,EAAKwkC,WAAWv/B,OAAS,EACzB,IAAIo1C,EAAmB,IAAOl0B,EAAOqI,SAASq1B,cAC9C,MAAMS,EAAmBriD,EAAOkiC,SAAWkW,EAC3C,IAAIkK,EAActiD,EAAO+jB,UAAYs+B,EACjC31B,IAAK41B,GAAeA,GACxB,IACIC,EADAC,GAAW,EAEf,MAAMC,EAA2C,GAA5B59B,KAAK2I,IAAIxtB,EAAOkiC,UAAiBhe,EAAOqI,SAASu1B,oBACtE,IAAIY,EAEJ,GAAIJ,EAActiD,EAAOgtB,eACnB9I,EAAOqI,SAASs1B,gBACdS,EAActiD,EAAOgtB,gBAAkBy1B,IACzCH,EAActiD,EAAOgtB,eAAiBy1B,GAGxCF,EAAsBviD,EAAOgtB,eAC7Bw1B,GAAW,EACXzkD,EAAKgwB,qBAAsB,GAE3Bu0B,EAActiD,EAAOgtB,eAGnB9I,EAAOxkB,MAAQwkB,EAAO6M,iBAAgB2xB,GAAe,QACpD,GAAIJ,EAActiD,EAAOitB,eAC1B/I,EAAOqI,SAASs1B,gBACdS,EAActiD,EAAOitB,eAAiBw1B,IACxCH,EAActiD,EAAOitB,eAAiBw1B,GAGxCF,EAAsBviD,EAAOitB,eAC7Bu1B,GAAW,EACXzkD,EAAKgwB,qBAAsB,GAE3Bu0B,EAActiD,EAAOitB,eAGnB/I,EAAOxkB,MAAQwkB,EAAO6M,iBAAgB2xB,GAAe,QACpD,GAAIx+B,EAAOqI,SAASkhB,OAAQ,CACjC,IAAIjT,EAEJ,IAAK,IAAI1d,EAAI,EAAGA,EAAI+T,EAAS7tB,OAAQ8Z,GAAK,EACxC,GAAI+T,EAAS/T,IAAMwlC,EAAa,CAC9B9nB,EAAY1d,EACZ,MAKFwlC,EADEz9B,KAAK2I,IAAIqD,EAAS2J,GAAa8nB,GAAez9B,KAAK2I,IAAIqD,EAAS2J,EAAY,GAAK8nB,IAA0C,SAA1BtiD,EAAO8rB,eAC5F+E,EAAS2J,GAET3J,EAAS2J,EAAY,GAGrC8nB,GAAeA,EAUjB,GAPII,GACF7gB,EAAK,gBAAiB,KACpB7hC,EAAOspB,YAKa,IAApBtpB,EAAOkiC,UAOT,GALEkW,EADE1rB,EACiB7H,KAAK2I,MAAM80B,EAActiD,EAAO+jB,WAAa/jB,EAAOkiC,UAEpDrd,KAAK2I,KAAK80B,EAActiD,EAAO+jB,WAAa/jB,EAAOkiC,UAGpEhe,EAAOqI,SAASkhB,OAAQ,CAQ1B,MAAMkV,EAAe99B,KAAK2I,KAAKd,GAAO41B,EAAcA,GAAetiD,EAAO+jB,WACpE6+B,EAAmB5iD,EAAO0vB,gBAAgB1vB,EAAO4oB,aAGrDwvB,EADEuK,EAAeC,EACE1+B,EAAOvkB,MACjBgjD,EAAe,EAAIC,EACM,IAAf1+B,EAAOvkB,MAEQ,IAAfukB,EAAOvkB,YAGzB,GAAIukB,EAAOqI,SAASkhB,OAEzB,YADAztC,EAAOq9B,iBAILnZ,EAAOqI,SAASs1B,gBAAkBW,GACpCxiD,EAAO8uB,eAAeyzB,GACtBviD,EAAO6tB,cAAcuqB,GACrBp4C,EAAO+uB,aAAauzB,GACpBtiD,EAAO67B,iBAAgB,EAAM77B,EAAO8rB,gBACpC9rB,EAAOmpB,WAAY,EACnB2E,EAAW5P,cAAc,KAClBle,IAAUA,EAAOmoB,WAAcpqB,EAAKgwB,sBACzCjF,EAAK,kBACL9oB,EAAO6tB,cAAc3J,EAAOvkB,OAC5BV,WAAW,KACTe,EAAO+uB,aAAawzB,GACpBz0B,EAAW5P,cAAc,KAClBle,IAAUA,EAAOmoB,WACtBnoB,EAAOke,mBAER,OAEIle,EAAOkiC,UAChBpZ,EAAK,8BACL9oB,EAAO8uB,eAAewzB,GACtBtiD,EAAO6tB,cAAcuqB,GACrBp4C,EAAO+uB,aAAauzB,GACpBtiD,EAAO67B,iBAAgB,EAAM77B,EAAO8rB,gBAE/B9rB,EAAOmpB,YACVnpB,EAAOmpB,WAAY,EACnB2E,EAAW5P,cAAc,KAClBle,IAAUA,EAAOmoB,WACtBnoB,EAAOke,oBAIXle,EAAO8uB,eAAewzB,GAGxBtiD,EAAO4uB,oBACP5uB,EAAO6uB,0BACF,IAAI3K,EAAOqI,SAASkhB,OAEzB,YADAztC,EAAOq9B,iBAEEnZ,EAAOqI,UAChBzD,EAAK,gCAGF5E,EAAOqI,SAASo1B,UAAYxyB,GAAYjL,EAAOoM,gBAClDtwB,EAAO8uB,iBACP9uB,EAAO4uB,oBACP5uB,EAAO6uB,6BAab,SAAclL,GACZ,IAUIk/B,EACAC,EACAC,GAZA,OACF/iD,EAAM,aACN4hC,GACEje,EACJie,EAAa,CACXnP,KAAM,CACJC,KAAM,EACNqM,KAAM,YAuGV/+B,EAAOyyB,KAAO,CACZ2E,WAjGiBd,IACjB,MAAM,cACJh3B,GACEU,EAAOkkB,QACL,KACJwO,EAAI,KACJqM,GACE/+B,EAAOkkB,OAAOuO,KAClBqwB,EAAeD,EAAyBnwB,EACxCqwB,EAAiBl+B,KAAKiT,MAAMxB,EAAe5D,GAGzCmwB,EADEh+B,KAAKiT,MAAMxB,EAAe5D,KAAU4D,EAAe5D,EAC5B4D,EAEAzR,KAAKyU,KAAKhD,EAAe5D,GAAQA,EAGtC,SAAlBpzB,GAAqC,QAATy/B,IAC9B8jB,EAAyBh+B,KAAKC,IAAI+9B,EAAwBvjD,EAAgBozB,KAgF5E6E,YA5EkB,CAAC77B,EAAG47B,EAAOhB,EAAcN,KAC3C,MAAM,eACJpG,EAAc,aACdyD,GACErzB,EAAOkkB,QACL,KACJwO,EAAI,KACJqM,GACE/+B,EAAOkkB,OAAOuO,KAElB,IAAIuwB,EACAC,EACAC,EAEJ,GAAa,QAATnkB,GAAkBnP,EAAiB,EAAG,CACxC,MAAMuzB,EAAat+B,KAAKiT,MAAMp8B,GAAKk0B,EAAiB8C,IAC9C0wB,EAAoB1nD,EAAIg3B,EAAO9C,EAAiBuzB,EAChDE,EAAgC,IAAfF,EAAmBvzB,EAAiB/K,KAAKE,IAAIF,KAAKyU,MAAMhD,EAAe6sB,EAAazwB,EAAO9C,GAAkB8C,GAAO9C,GAC3IszB,EAAMr+B,KAAKiT,MAAMsrB,EAAoBC,GACrCJ,EAASG,EAAoBF,EAAMG,EAAiBF,EAAavzB,EACjEozB,EAAqBC,EAASC,EAAML,EAAyBnwB,EAC7D4E,EAAM51B,IAAI,CACR,gBAAiBshD,EACjBM,MAAON,QAES,WAATjkB,GACTkkB,EAASp+B,KAAKiT,MAAMp8B,EAAIg3B,GACxBwwB,EAAMxnD,EAAIunD,EAASvwB,GAEfuwB,EAASF,GAAkBE,IAAWF,GAAkBG,IAAQxwB,EAAO,KACzEwwB,GAAO,EAEHA,GAAOxwB,IACTwwB,EAAM,EACND,GAAU,MAIdC,EAAMr+B,KAAKiT,MAAMp8B,EAAIonD,GACrBG,EAASvnD,EAAIwnD,EAAMJ,GAGrBxrB,EAAM51B,IAAIs0B,EAAkB,cAAuB,IAARktB,EAAY7vB,GAAmBA,EAAH,KAAsB,KAmC7F2E,kBAhCwB,CAACb,EAAWtG,EAAUmF,KAC9C,MAAM,aACJ3C,EAAY,eACZtC,EAAc,aACd6C,GACE5zB,EAAOkkB,QACL,KACJwO,GACE1yB,EAAOkkB,OAAOuO,KAOlB,GANAzyB,EAAO62B,aAAeM,EAAY9D,GAAgBwvB,EAClD7iD,EAAO62B,YAAchS,KAAKyU,KAAKt5B,EAAO62B,YAAcnE,GAAQW,EAC5DrzB,EAAO8tB,WAAWpsB,IAAI,CACpB,CAACs0B,EAAkB,UAAch2B,EAAO62B,YAAcxD,EAAxB,OAG5BtC,EAAgB,CAClBF,EAASnT,OAAO,EAAGmT,EAAS7tB,QAC5B,MAAMi1B,EAAgB,GAEtB,IAAK,IAAIv8B,EAAI,EAAGA,EAAIm1B,EAAS7tB,OAAQtH,GAAK,EAAG,CAC3C,IAAIw8B,EAAiBrH,EAASn1B,GAC1Bk4B,IAAcsE,EAAiBrT,KAAKiT,MAAMI,IAC1CrH,EAASn1B,GAAKsE,EAAO62B,YAAchG,EAAS,IAAIoH,EAAc7kB,KAAK8kB,GAGzErH,EAASzd,QAAQ6kB,OAsMvB,SAAsBtU,GACpB,IAAI,OACF3jB,GACE2jB,EACJvnB,OAAOyQ,OAAO7M,EAAQ,CACpBmkC,YAAaA,EAAYjnC,KAAK8C,GAC9BqkC,aAAcA,EAAannC,KAAK8C,GAChCskC,SAAUA,EAASpnC,KAAK8C,GACxB2kC,YAAaA,EAAYznC,KAAK8C,GAC9B8kC,gBAAiBA,EAAgB5nC,KAAK8C,MAmH1C,SAAoB2jB,GAClB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,GACEujB,EACJie,EAAa,CACX2hB,WAAY,CACVC,WAAW,EACX7d,YAAa,QA4CjBZ,EAAW,CACT5R,OAAQ,OACRnzB,SACAI,KACA2uB,aA5CmB,KACnB,MAAM,OACJoB,GACEnwB,EACEkkB,EAASlkB,EAAOkkB,OAAOq/B,WAE7B,IAAK,IAAI7nD,EAAI,EAAGA,EAAIy0B,EAAOntB,OAAQtH,GAAK,EAAG,CACzC,MAAMgqC,EAAW1lC,EAAOmwB,OAAO7pB,GAAG5K,GAElC,IAAI+nD,GADW/d,EAAS,GAAGnM,kBAEtBv5B,EAAOkkB,OAAOgP,mBAAkBuwB,GAAMzjD,EAAO+jB,WAClD,IAAI2/B,EAAK,EAEJ1jD,EAAOstB,iBACVo2B,EAAKD,EACLA,EAAK,GAGP,MAAME,EAAe3jD,EAAOkkB,OAAOq/B,WAAWC,UAAY3+B,KAAKC,IAAI,EAAID,KAAK2I,IAAIkY,EAAS,GAAG9gB,UAAW,GAAK,EAAIC,KAAKE,IAAIF,KAAKC,IAAI4gB,EAAS,GAAG9gB,UAAW,GAAI,GAC3I4gB,EAAathB,EAAQwhB,GAC7BhkC,IAAI,CACZgxC,QAASiR,IACRhoC,UAAU,eAAe8nC,QAASC,eAuBvC71B,cAnBoBhS,IACpB,MAAM,YACJ8pB,GACE3lC,EAAOkkB,OAAOq/B,YACU5d,EAAc3lC,EAAOmwB,OAAO/uB,KAAKukC,GAAe3lC,EAAOmwB,QAC/DvU,WAAWC,GAC/B+pB,EAA2B,CACzB5lC,SACA6b,WACA8pB,cACAE,WAAW,KAUbb,gBAAiB,KAAM,CACrB1lC,cAAe,EACfswB,eAAgB,EAChBjB,qBAAqB,EACrB0E,aAAc,EACdH,kBAAmBlzB,EAAOkkB,OAAOmF,aAKvC,SAAoB1F,GAClB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,GACEujB,EACJie,EAAa,CACXgiB,WAAY,CACVre,cAAc,EACdse,QAAQ,EACRC,aAAc,GACdC,YAAa,OAIjB,MAAMC,EAAqB,CAACte,EAAU9gB,EAAU0I,KAC9C,IAAI22B,EAAe32B,EAAeoY,EAAStkC,KAAK,6BAA+BskC,EAAStkC,KAAK,4BACzF8iD,EAAc52B,EAAeoY,EAAStkC,KAAK,8BAAgCskC,EAAStkC,KAAK,+BAEjE,IAAxB6iD,EAAajhD,SACfihD,EAAenmD,EAAE,mCAAmCwvB,EAAe,OAAS,iBAC5EoY,EAAS1mC,OAAOilD,IAGS,IAAvBC,EAAYlhD,SACdkhD,EAAcpmD,EAAE,mCAAmCwvB,EAAe,QAAU,oBAC5EoY,EAAS1mC,OAAOklD,IAGdD,EAAajhD,SAAQihD,EAAa,GAAG7sC,MAAMs7B,QAAU7tB,KAAKC,KAAKF,EAAU,IACzEs/B,EAAYlhD,SAAQkhD,EAAY,GAAG9sC,MAAMs7B,QAAU7tB,KAAKC,IAAIF,EAAU,KAgJ5EmgB,EAAW,CACT5R,OAAQ,OACRnzB,SACAI,KACA2uB,aAxImB,KACnB,MAAM,IACJ/hB,EAAG,WACH8gB,EAAU,OACVqC,EACAvJ,MAAO+jB,EACP7jB,OAAQ8jB,EACRne,aAAcC,EACdqJ,KAAMG,EAAU,QAChB1Q,GACExlB,EACEkkB,EAASlkB,EAAOkkB,OAAO0/B,WACvBt2B,EAAettB,EAAOstB,eACtB8I,EAAYp2B,EAAOkwB,SAAWlwB,EAAOkkB,OAAOgM,QAAQhH,QAC1D,IACIi7B,EADAC,EAAgB,EAGhBlgC,EAAO2/B,SACLv2B,GACF62B,EAAgBr2B,EAAW1sB,KAAK,uBAEH,IAAzB+iD,EAAcnhD,SAChBmhD,EAAgBrmD,EAAE,0CAClBgwB,EAAW9uB,OAAOmlD,IAGpBA,EAAcziD,IAAI,CAChBolB,OAAW6jB,EAAH,SAGVwZ,EAAgBn3C,EAAI5L,KAAK,uBAEI,IAAzB+iD,EAAcnhD,SAChBmhD,EAAgBrmD,EAAE,0CAClBkP,EAAIhO,OAAOmlD,MAKjB,IAAK,IAAIzoD,EAAI,EAAGA,EAAIy0B,EAAOntB,OAAQtH,GAAK,EAAG,CACzC,MAAMgqC,EAAWvV,EAAO7pB,GAAG5K,GAC3B,IAAI08B,EAAa18B,EAEb06B,IACFgC,EAAax3B,SAAS8kC,EAASpkC,KAAK,2BAA4B,KAGlE,IAAI+iD,EAA0B,GAAbjsB,EACb6lB,EAAQp5B,KAAKiT,MAAMusB,EAAa,KAEhC33B,IACF23B,GAAcA,EACdpG,EAAQp5B,KAAKiT,OAAOusB,EAAa,MAGnC,MAAMz/B,EAAWC,KAAKC,IAAID,KAAKE,IAAI2gB,EAAS,GAAG9gB,SAAU,IAAK,GAC9D,IAAI6+B,EAAK,EACLC,EAAK,EACLY,EAAK,EAELlsB,EAAa,GAAM,GACrBqrB,EAAc,GAARxF,EAAY/nB,EAClBouB,EAAK,IACKlsB,EAAa,GAAK,GAAM,GAClCqrB,EAAK,EACLa,EAAc,GAARrG,EAAY/nB,IACRkC,EAAa,GAAK,GAAM,GAClCqrB,EAAKvtB,EAAqB,EAAR+nB,EAAY/nB,EAC9BouB,EAAKpuB,IACKkC,EAAa,GAAK,GAAM,IAClCqrB,GAAMvtB,EACNouB,EAAK,EAAIpuB,EAA0B,EAAbA,EAAiB+nB,GAGrCvxB,IACF+2B,GAAMA,GAGHn2B,IACHo2B,EAAKD,EACLA,EAAK,GAGP,MAAM9nC,EAAY,WAAW2R,EAAe,GAAK+2B,iBAA0B/2B,EAAe+2B,EAAa,qBAAqBZ,QAASC,QAASY,OAE1I1/B,GAAY,GAAKA,GAAY,IAC/Bw/B,EAA6B,GAAbhsB,EAA6B,GAAXxT,EAC9B8H,IAAK03B,EAA8B,IAAbhsB,EAA6B,GAAXxT,IAG9C8gB,EAAS/pB,UAAUA,GAEfuI,EAAOqhB,cACTye,EAAmBte,EAAU9gB,EAAU0I,GAS3C,GALAQ,EAAWpsB,IAAI,CACb,2BAA4B,YAAYw0B,EAAa,MACrD,mBAAoB,YAAYA,EAAa,QAG3ChS,EAAO2/B,OACT,GAAIv2B,EACF62B,EAAcxoC,UAAU,oBAAoBgvB,EAAc,EAAIzmB,EAAO4/B,oBAAoBnZ,EAAc,2CAA2CzmB,EAAO6/B,oBACpJ,CACL,MAAMQ,EAAc1/B,KAAK2I,IAAI42B,GAA4D,GAA3Cv/B,KAAKiT,MAAMjT,KAAK2I,IAAI42B,GAAiB,IAC7EjqB,EAAa,KAAOtV,KAAK2/B,IAAkB,EAAdD,EAAkB1/B,KAAKK,GAAK,KAAO,EAAIL,KAAKI,IAAkB,EAAds/B,EAAkB1/B,KAAKK,GAAK,KAAO,GAChHu/B,EAASvgC,EAAO6/B,YAChBW,EAASxgC,EAAO6/B,YAAc5pB,EAC9Bvb,EAASsF,EAAO4/B,aACtBK,EAAcxoC,UAAU,WAAW8oC,SAAcC,uBAA4B9Z,EAAe,EAAIhsB,SAAcgsB,EAAe,EAAI8Z,wBAIrI,MAAMC,EAAUn/B,EAAQgC,UAAYhC,EAAQkC,WAAawO,EAAa,EAAI,EAC1EpI,EAAWnS,UAAU,qBAAqBgpC,gBAAsB3kD,EAAOstB,eAAiB,EAAI82B,iBAA6BpkD,EAAOstB,gBAAkB82B,EAAgB,SAClKt2B,EAAW,GAAG1W,MAAMqM,YAAY,4BAAgCkhC,EAAH,OAoB7D92B,cAjBoBhS,IACpB,MAAM,IACJ7O,EAAG,OACHmjB,GACEnwB,EACJmwB,EAAOvU,WAAWC,GAAUza,KAAK,gHAAgHwa,WAAWC,GAExJ7b,EAAOkkB,OAAO0/B,WAAWC,SAAW7jD,EAAOstB,gBAC7CtgB,EAAI5L,KAAK,uBAAuBwa,WAAWC,IAU7CqpB,gBAnJsB,KAEtB,MAAM5X,EAAettB,EAAOstB,eAC5BttB,EAAOmwB,OAAOhd,KAAKsvB,IACjB,MAAM7d,EAAWC,KAAKC,IAAID,KAAKE,IAAI0d,EAAQ7d,SAAU,IAAK,GAC1Do/B,EAAmBlmD,EAAE2kC,GAAU7d,EAAU0I,MA+I3C6X,gBAAiB,IAAMnlC,EAAOkkB,OAAO0/B,WACrC3e,YAAa,KAAM,EACnBD,gBAAiB,KAAM,CACrB1lC,cAAe,EACfswB,eAAgB,EAChBjB,qBAAqB,EACrBH,gBAAiB,EACjB6E,aAAc,EACdtC,gBAAgB,EAChBmC,kBAAkB,OAkBxB,SAAoBvP,GAClB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,GACEujB,EACJie,EAAa,CACXgjB,WAAY,CACVrf,cAAc,EACdsf,eAAe,EACflf,YAAa,QAIjB,MAAMqe,EAAqB,CAACte,EAAU9gB,EAAUV,KAC9C,IAAI+/B,EAAejkD,EAAOstB,eAAiBoY,EAAStkC,KAAK,6BAA+BskC,EAAStkC,KAAK,4BAClG8iD,EAAclkD,EAAOstB,eAAiBoY,EAAStkC,KAAK,8BAAgCskC,EAAStkC,KAAK,+BAE1E,IAAxB6iD,EAAajhD,SACfihD,EAAehe,EAAa/hB,EAAQwhB,EAAU1lC,EAAOstB,eAAiB,OAAS,QAGtD,IAAvB42B,EAAYlhD,SACdkhD,EAAcje,EAAa/hB,EAAQwhB,EAAU1lC,EAAOstB,eAAiB,QAAU,WAG7E22B,EAAajhD,SAAQihD,EAAa,GAAG7sC,MAAMs7B,QAAU7tB,KAAKC,KAAKF,EAAU,IACzEs/B,EAAYlhD,SAAQkhD,EAAY,GAAG9sC,MAAMs7B,QAAU7tB,KAAKC,IAAIF,EAAU,KA0E5EmgB,EAAW,CACT5R,OAAQ,OACRnzB,SACAI,KACA2uB,aA5DmB,KACnB,MAAM,OACJoB,EACA1D,aAAcC,GACZ1sB,EACEkkB,EAASlkB,EAAOkkB,OAAO0gC,WAE7B,IAAK,IAAIlpD,EAAI,EAAGA,EAAIy0B,EAAOntB,OAAQtH,GAAK,EAAG,CACzC,MAAMgqC,EAAWvV,EAAO7pB,GAAG5K,GAC3B,IAAIkpB,EAAW8gB,EAAS,GAAG9gB,SAEvB5kB,EAAOkkB,OAAO0gC,WAAWC,gBAC3BjgC,EAAWC,KAAKC,IAAID,KAAKE,IAAI2gB,EAAS,GAAG9gB,SAAU,IAAK,IAG1D,MAAMhG,EAAS8mB,EAAS,GAAGnM,kBAE3B,IAAIurB,GADY,IAAMlgC,EAElBmgC,EAAU,EACVtB,EAAKzjD,EAAOkkB,OAAOmF,SAAWzK,EAAS5e,EAAO+jB,WAAanF,EAC3D8kC,EAAK,EAEJ1jD,EAAOstB,eAKDZ,IACTo4B,GAAWA,IALXpB,EAAKD,EACLA,EAAK,EACLsB,GAAWD,EACXA,EAAU,GAKZpf,EAAS,GAAGtuB,MAAM4tC,QAAUngC,KAAK2I,IAAI3I,KAAKo5B,MAAMr5B,IAAauL,EAAOntB,OAEhEkhB,EAAOqhB,cACTye,EAAmBte,EAAU9gB,EAAUV,GAGzC,MAAMvI,EAAY,eAAe8nC,QAASC,qBAAsBqB,iBAAuBD,QACrEtf,EAAathB,EAAQwhB,GAC7B/pB,UAAUA,KAsBtBkS,cAlBoBhS,IACpB,MAAM,YACJ8pB,GACE3lC,EAAOkkB,OAAO0gC,YACUjf,EAAc3lC,EAAOmwB,OAAO/uB,KAAKukC,GAAe3lC,EAAOmwB,QAC/DvU,WAAWC,GAAUza,KAAK,gHAAgHwa,WAAWC,GACzK+pB,EAA2B,CACzB5lC,SACA6b,WACA8pB,iBAUFT,gBA7EsB,KAEtB,MAAMhhB,EAASlkB,EAAOkkB,OAAO0gC,WAC7B5kD,EAAOmwB,OAAOhd,KAAKsvB,IACjB,MAAMiD,EAAW5nC,EAAE2kC,GACnB,IAAI7d,EAAW8gB,EAAS,GAAG9gB,SAEvB5kB,EAAOkkB,OAAO0gC,WAAWC,gBAC3BjgC,EAAWC,KAAKC,IAAID,KAAKE,IAAI0d,EAAQ7d,SAAU,IAAK,IAGtDo/B,EAAmBte,EAAU9gB,EAAUV,MAmEzCihB,gBAAiB,IAAMnlC,EAAOkkB,OAAO0gC,WACrC3f,YAAa,KAAM,EACnBD,gBAAiB,KAAM,CACrB1lC,cAAe,EACfswB,eAAgB,EAChBjB,qBAAqB,EACrB0E,aAAc,EACdH,kBAAmBlzB,EAAOkkB,OAAOmF,aAKvC,SAAyB1F,GACvB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,GACEujB,EACJie,EAAa,CACXqjB,gBAAiB,CACfC,OAAQ,GACRC,QAAS,EACTC,MAAO,IACPzT,MAAO,EACP0T,SAAU,EACV9f,cAAc,EACdI,YAAa,QA4EjBZ,EAAW,CACT5R,OAAQ,YACRnzB,SACAI,KACA2uB,aA5EmB,KACnB,MACEnI,MAAO+jB,EACP7jB,OAAQ8jB,EAAY,OACpBza,EAAM,gBACNT,GACE1vB,EACEkkB,EAASlkB,EAAOkkB,OAAO+gC,gBACvB33B,EAAettB,EAAOstB,eACtB3R,EAAY3b,EAAO+jB,UACnBuhC,EAASh4B,EAA4Bqd,EAAc,EAA1BhvB,EAA2CivB,EAAe,EAA3BjvB,EACxDupC,EAAS53B,EAAepJ,EAAOghC,QAAUhhC,EAAOghC,OAChDnhC,EAAYG,EAAOkhC,MAEzB,IAAK,IAAI1pD,EAAI,EAAGsH,EAASmtB,EAAOntB,OAAQtH,EAAIsH,EAAQtH,GAAK,EAAG,CAC1D,MAAMgqC,EAAWvV,EAAO7pB,GAAG5K,GACrBy7B,EAAYzH,EAAgBh0B,GAE5B6pD,GAAgBD,EADF5f,EAAS,GAAGnM,kBACapC,EAAY,GAAKA,EACxDquB,EAA8C,mBAApBthC,EAAOmhC,SAA0BnhC,EAAOmhC,SAASE,GAAgBA,EAAerhC,EAAOmhC,SACvH,IAAIP,EAAUx3B,EAAe43B,EAASM,EAAmB,EACrDT,EAAUz3B,EAAe,EAAI43B,EAASM,EAEtCC,GAAc1hC,EAAYc,KAAK2I,IAAIg4B,GACnCL,EAAUjhC,EAAOihC,QAEE,iBAAZA,IAAkD,IAA1BA,EAAQp3C,QAAQ,OACjDo3C,EAAU1mC,WAAWyF,EAAOihC,SAAW,IAAMhuB,GAG/C,IAAI0f,EAAavpB,EAAe,EAAI63B,EAAUK,EAC1C5O,EAAatpB,EAAe63B,EAAUK,EAAmB,EACzD7T,EAAQ,GAAK,EAAIztB,EAAOytB,OAAS9sB,KAAK2I,IAAIg4B,GAE1C3gC,KAAK2I,IAAIopB,GAAc,OAAOA,EAAa,GAC3C/xB,KAAK2I,IAAIqpB,GAAc,OAAOA,EAAa,GAC3ChyB,KAAK2I,IAAIi4B,GAAc,OAAOA,EAAa,GAC3C5gC,KAAK2I,IAAIs3B,GAAW,OAAOA,EAAU,GACrCjgC,KAAK2I,IAAIu3B,GAAW,OAAOA,EAAU,GACrClgC,KAAK2I,IAAImkB,GAAS,OAAOA,EAAQ,GACrC,MAAM+T,EAAiB,eAAe9O,OAAgBC,OAAgB4O,iBAA0BV,iBAAuBD,eAAqBnT,KAK5I,GAJkBnM,EAAathB,EAAQwhB,GAC7B/pB,UAAU+pC,GACpBhgB,EAAS,GAAGtuB,MAAM4tC,OAAmD,EAAzCngC,KAAK2I,IAAI3I,KAAKo5B,MAAMuH,IAE5CthC,EAAOqhB,aAAc,CAEvB,IAAIogB,EAAkBr4B,EAAeoY,EAAStkC,KAAK,6BAA+BskC,EAAStkC,KAAK,4BAC5FwkD,EAAiBt4B,EAAeoY,EAAStkC,KAAK,8BAAgCskC,EAAStkC,KAAK,+BAEjE,IAA3BukD,EAAgB3iD,SAClB2iD,EAAkB1f,EAAa/hB,EAAQwhB,EAAUpY,EAAe,OAAS,QAG7C,IAA1Bs4B,EAAe5iD,SACjB4iD,EAAiB3f,EAAa/hB,EAAQwhB,EAAUpY,EAAe,QAAU,WAGvEq4B,EAAgB3iD,SAAQ2iD,EAAgB,GAAGvuC,MAAMs7B,QAAU8S,EAAmB,EAAIA,EAAmB,GACrGI,EAAe5iD,SAAQ4iD,EAAe,GAAGxuC,MAAMs7B,SAAW8S,EAAmB,GAAKA,EAAmB,MAkB7G33B,cAboBhS,IACpB,MAAM,YACJ8pB,GACE3lC,EAAOkkB,OAAO+gC,iBACUtf,EAAc3lC,EAAOmwB,OAAO/uB,KAAKukC,GAAe3lC,EAAOmwB,QAC/DvU,WAAWC,GAAUza,KAAK,gHAAgHwa,WAAWC,IASzKopB,YAAa,KAAM,EACnBD,gBAAiB,KAAM,CACrBrW,qBAAqB,OAK3B,SAAwBhL,GACtB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,GACEujB,EACJie,EAAa,CACXikB,eAAgB,CACdlgB,YAAa,KACbmgB,cAAe,EACfC,mBAAmB,EACnBC,mBAAoB,EACpB/gB,aAAa,EACbvkB,KAAM,CACJqD,UAAW,CAAC,EAAG,EAAG,GAClBmhC,OAAQ,CAAC,EAAG,EAAG,GACfxS,QAAS,EACTf,MAAO,GAETrxB,KAAM,CACJyD,UAAW,CAAC,EAAG,EAAG,GAClBmhC,OAAQ,CAAC,EAAG,EAAG,GACfxS,QAAS,EACTf,MAAO,MAKb,MAAMsU,EAAoBtpD,GACH,iBAAVA,EAA2BA,EAC5BA,EAAH,KA4GTooC,EAAW,CACT5R,OAAQ,WACRnzB,SACAI,KACA2uB,aA7GmB,KACnB,MAAM,OACJoB,EAAM,WACNrC,EAAU,gBACV4B,GACE1vB,EACEkkB,EAASlkB,EAAOkkB,OAAO2hC,gBAE3BG,mBAAoB7rB,GAClBjW,EACEgiC,EAAmBlmD,EAAOkkB,OAAO6M,eAEvC,GAAIm1B,EAAkB,CACpB,MAAMC,EAASz2B,EAAgB,GAAK,EAAI1vB,EAAOkkB,OAAOsP,oBAAsB,EAC5E1F,EAAWnS,UAAU,yBAAyBwqC,SAGhD,IAAK,IAAIzqD,EAAI,EAAGA,EAAIy0B,EAAOntB,OAAQtH,GAAK,EAAG,CACzC,MAAMgqC,EAAWvV,EAAO7pB,GAAG5K,GACrBo+B,EAAgB4L,EAAS,GAAG9gB,SAC5BA,EAAWC,KAAKE,IAAIF,KAAKC,IAAI4gB,EAAS,GAAG9gB,UAAWV,EAAO4hC,eAAgB5hC,EAAO4hC,eACxF,IAAI5rB,EAAmBtV,EAElBshC,IACHhsB,EAAmBrV,KAAKE,IAAIF,KAAKC,IAAI4gB,EAAS,GAAGxL,kBAAmBhW,EAAO4hC,eAAgB5hC,EAAO4hC,gBAGpG,MAAMlnC,EAAS8mB,EAAS,GAAGnM,kBACrB38B,EAAI,CAACoD,EAAOkkB,OAAOmF,SAAWzK,EAAS5e,EAAO+jB,WAAanF,EAAQ,EAAG,GACtEpiB,EAAI,CAAC,EAAG,EAAG,GACjB,IAAI4pD,GAAS,EAERpmD,EAAOstB,iBACV1wB,EAAE,GAAKA,EAAE,GACTA,EAAE,GAAK,GAGT,IAAImB,EAAO,CACTgmB,UAAW,CAAC,EAAG,EAAG,GAClBmhC,OAAQ,CAAC,EAAG,EAAG,GACfvT,MAAO,EACPe,QAAS,GAGP9tB,EAAW,GACb7mB,EAAOmmB,EAAO5D,KACd8lC,GAAS,GACAxhC,EAAW,IACpB7mB,EAAOmmB,EAAOxD,KACd0lC,GAAS,GAIXxpD,EAAEgB,QAAQ,CAACjB,EAAOuS,KAChBtS,EAAEsS,GAAS,QAAQvS,UAAcspD,EAAkBloD,EAAKgmB,UAAU7U,SAAa2V,KAAK2I,IAAI5I,EAAWuV,SAGrG39B,EAAEoB,QAAQ,CAACjB,EAAOuS,KAChB1S,EAAE0S,GAASnR,EAAKmnD,OAAOh2C,GAAS2V,KAAK2I,IAAI5I,EAAWuV,KAEtDuL,EAAS,GAAGtuB,MAAM4tC,QAAUngC,KAAK2I,IAAI3I,KAAKo5B,MAAMnkB,IAAkB3J,EAAOntB,OACzE,MAAMqjD,EAAkBzpD,EAAE+T,KAAK,MACzB21C,EAAe,WAAW9pD,EAAE,kBAAkBA,EAAE,kBAAkBA,EAAE,SACpE+pD,EAAcrsB,EAAmB,EAAI,SAAS,GAAK,EAAIn8B,EAAK4zC,OAASzX,EAAmBC,KAAgB,SAAS,GAAK,EAAIp8B,EAAK4zC,OAASzX,EAAmBC,KAC3JqsB,EAAgBtsB,EAAmB,EAAI,GAAK,EAAIn8B,EAAK20C,SAAWxY,EAAmBC,EAAa,GAAK,EAAIp8B,EAAK20C,SAAWxY,EAAmBC,EAC5Ixe,EAAY,eAAe0qC,MAAoBC,KAAgBC,IAErE,GAAIH,GAAUroD,EAAK8lD,SAAWuC,EAAQ,CACpC,IAAIhgB,EAAYV,EAASz0B,SAAS,wBAMlC,GAJyB,IAArBm1B,EAAUpjC,QAAgBjF,EAAK8lD,SACjCzd,EAAYH,EAAa/hB,EAAQwhB,IAG/BU,EAAUpjC,OAAQ,CACpB,MAAMyjD,EAAgBviC,EAAO6hC,kBAAoBnhC,GAAY,EAAIV,EAAO4hC,eAAiBlhC,EACzFwhB,EAAU,GAAGhvB,MAAMs7B,QAAU7tB,KAAKE,IAAIF,KAAKC,IAAID,KAAK2I,IAAIi5B,GAAgB,GAAI,IAIhF,MAAMj9B,EAAYgc,EAAathB,EAAQwhB,GACvClc,EAAU7N,UAAUA,GAAWja,IAAI,CACjCgxC,QAAS8T,IAGPzoD,EAAK4Z,QACP6R,EAAU9nB,IAAI,mBAAoB3D,EAAK4Z,UAwB3CkW,cAnBoBhS,IACpB,MAAM,YACJ8pB,GACE3lC,EAAOkkB,OAAO2hC,gBACUlgB,EAAc3lC,EAAOmwB,OAAO/uB,KAAKukC,GAAe3lC,EAAOmwB,QAC/DvU,WAAWC,GAAUza,KAAK,wBAAwBwa,WAAWC,GACjF+pB,EAA2B,CACzB5lC,SACA6b,WACA8pB,cACAE,WAAW,KAUbZ,YAAa,IAAMjlC,EAAOkkB,OAAO2hC,eAAe5gB,YAChDD,gBAAiB,KAAM,CACrBrW,qBAAqB,EACrBuE,kBAAmBlzB,EAAOkkB,OAAOmF,aAKvC,SAAqB1F,GACnB,IAAI,OACF3jB,EAAM,aACN4hC,EAAY,GACZxhC,GACEujB,EACJie,EAAa,CACX8kB,YAAa,CACXnhB,cAAc,EACdI,YAAa,KACbuf,QAAQ,EACRyB,eAAgB,EAChBC,eAAgB,KAqGpB7hB,EAAW,CACT5R,OAAQ,QACRnzB,SACAI,KACA2uB,aArGmB,KACnB,MAAM,OACJoB,EAAM,YACNvH,GACE5oB,EACEkkB,EAASlkB,EAAOkkB,OAAOwiC,aACvB,eACJ94B,EAAc,UACdhE,GACE5pB,EAAOgpB,gBACLsF,EAAmBtuB,EAAO+jB,UAEhC,IAAK,IAAIroB,EAAI,EAAGA,EAAIy0B,EAAOntB,OAAQtH,GAAK,EAAG,CACzC,MAAMgqC,EAAWvV,EAAO7pB,GAAG5K,GACrBo+B,EAAgB4L,EAAS,GAAG9gB,SAC5BA,EAAWC,KAAKE,IAAIF,KAAKC,IAAIgV,GAAgB,GAAI,GACvD,IAAIlb,EAAS8mB,EAAS,GAAGnM,kBAErBv5B,EAAOkkB,OAAO6M,iBAAmB/wB,EAAOkkB,OAAOmF,SACjDrpB,EAAO8tB,WAAWnS,UAAU,cAAc3b,EAAOitB,qBAG/CjtB,EAAOkkB,OAAO6M,gBAAkB/wB,EAAOkkB,OAAOmF,UAChDzK,GAAUuR,EAAO,GAAGoJ,mBAGtB,IAAIstB,EAAK7mD,EAAOkkB,OAAOmF,SAAWzK,EAAS5e,EAAO+jB,WAAanF,EAC3DkoC,EAAK,EACT,MAAMC,GAAM,IAAMliC,KAAK2I,IAAI5I,GAC3B,IAAI+sB,EAAQ,EACRuT,GAAUhhC,EAAOyiC,eAAiB/hC,EAClCoiC,EAAQ9iC,EAAO0iC,eAAsC,IAArB/hC,KAAK2I,IAAI5I,GAC7C,MAAMwT,EAAap4B,EAAOkwB,SAAWlwB,EAAOkkB,OAAOgM,QAAQhH,QAAUlpB,EAAOkwB,QAAQoY,KAAO5sC,EAAIA,EACzFurD,GAAiB7uB,IAAexP,GAAewP,IAAexP,EAAc,IAAMhE,EAAW,GAAKA,EAAW,IAAMgF,GAAa5pB,EAAOkkB,OAAOmF,UAAYiF,EAAmBV,EAC7Ks5B,GAAiB9uB,IAAexP,GAAewP,IAAexP,EAAc,IAAMhE,EAAW,GAAKA,GAAY,IAAMgF,GAAa5pB,EAAOkkB,OAAOmF,UAAYiF,EAAmBV,EAEpL,GAAIq5B,GAAiBC,EAAe,CAClC,MAAMC,GAAe,EAAItiC,KAAK2I,KAAK3I,KAAK2I,IAAI5I,GAAY,IAAO,MAAS,GACxEsgC,IAAW,GAAKtgC,EAAWuiC,EAC3BxV,IAAU,GAAMwV,EAChBH,GAAS,GAAKG,EACdL,GAAS,GAAKK,EAActiC,KAAK2I,IAAI5I,GAAhC,IAaP,GAVIA,EAAW,EAEbiiC,EAAK,QAAQA,UAAWG,EAAQniC,KAAK2I,IAAI5I,QAChCA,EAAW,EAEpBiiC,EAAK,QAAQA,WAAYG,EAAQniC,KAAK2I,IAAI5I,QAE1CiiC,GAAK,MAGF7mD,EAAOstB,eAAgB,CAC1B,MAAM85B,EAAQN,EACdA,EAAKD,EACLA,EAAKO,EAGP,MAAMb,EAAc3hC,EAAW,EAAI,IAAG,GAAK,EAAI+sB,GAAS/sB,GAAa,IAAG,GAAK,EAAI+sB,GAAS/sB,GACpFjJ,EAAY,yBACNkrC,MAAOC,MAAOC,yBAClB7iC,EAAOghC,OAASA,EAAS,wBAC3BqB,aAGN,GAAIriC,EAAOqhB,aAAc,CAEvB,IAAIa,EAAYV,EAAStkC,KAAK,wBAEL,IAArBglC,EAAUpjC,SACZojC,EAAYH,EAAa/hB,EAAQwhB,IAG/BU,EAAUpjC,SAAQojC,EAAU,GAAGhvB,MAAMs7B,QAAU7tB,KAAKE,IAAIF,KAAKC,KAAKD,KAAK2I,IAAI5I,GAAY,IAAO,GAAK,GAAI,IAG7G8gB,EAAS,GAAGtuB,MAAM4tC,QAAUngC,KAAK2I,IAAI3I,KAAKo5B,MAAMnkB,IAAkB3J,EAAOntB,OACvDwiC,EAAathB,EAAQwhB,GAC7B/pB,UAAUA,KAsBtBkS,cAlBoBhS,IACpB,MAAM,YACJ8pB,GACE3lC,EAAOkkB,OAAOwiC,aACU/gB,EAAc3lC,EAAOmwB,OAAO/uB,KAAKukC,GAAe3lC,EAAOmwB,QAC/DvU,WAAWC,GAAUza,KAAK,wBAAwBwa,WAAWC,GACjF+pB,EAA2B,CACzB5lC,SACA6b,WACA8pB,iBAUFV,YAAa,KAAM,EACnBD,gBAAiB,KAAM,CACrBrW,qBAAqB,EACrBuE,kBAAmBlzB,EAAOkkB,OAAOmF,cASvC,OAFA/qB,EAAOioC,IAAI3qC,GAEJ0C,EA77UyE+oD,I,+BC0UpF5rD,EAAOD,QAAU,CACb6C,WAhVJ,SAAoBipD,GAChB,OAAKA,EAGWA,EAAItlC,QAAQ,YAAc+E,IACpB,CACd,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,SACL,IAAK,UAEQA,KAXVugC,GA+UXC,gBA7SJ,SAAyBD,GACrB,OAAKA,EAGaA,EAAItlC,QAAQ,4DAA6D,KAFhFslC,GA4SXE,wBA/RJ,SAAiCF,GAC7B,OAAKA,EAGaA,EAAItlC,QAAQ,mBAAqBvkB,GACxCgqD,OAAOC,aAAajqD,EAAEkqD,WAAW,GAAK,QAHtCL,GA8RXM,aAnQJ,SAAsBN,GAClB,OAAKA,EAGaA,EAAItlC,QAClB,4DACA,KAJOslC,GAkQXO,mBAxOJ,SAA4BP,GACxB,IAAKA,EACD,OAAOA,EAEX,MAAMQ,EAAc,CAChBC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,KAAI,IACJC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACL,IAAK,IACLC,IAAG,IACH,IAAK,IACL,IAAK,IACL,IAAK,IACLC,IAAG,IACHC,IAAG,KAEDC,EAAiB,IAAIC,OAAO,MAAMlxD,OAAOuB,KAAKmqD,GAAan3C,KAAK,QAAS,KAY/E,OAXkB22C,EACbxqB,YACA9a,QAAQqrC,GAAgB,SAAUE,GAC/B,OAAOzF,EAAYyF,IAASA,KAE/BvrC,QAAQ,uCAAuC,SAAUurC,GACtD,OAAO9F,OAAOC,aAAa6F,EAAK5F,WAAW,GAAK,UAEnD3lC,QAAQ,UAAW,KACnBA,QAAQ,UAAW,KACnBA,QAAQ,UAAW,MA6HxBwrC,4CA9GJ,SAAqDlG,GACjD,IAAKA,EACD,OAAOA,EAEX,MAAMQ,EAAc,CAChB2F,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACL,IAAK,IACLC,IAAG,IACH,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAEHvF,EAAiB,IAAIC,OAAO,MAAMlxD,OAAOuB,KAAKmqD,GAAan3C,KAAK,QAAS,KAI/E,OAHkB22C,EAAIxqB,YAAY9a,QAAQqrC,GAAgB,SAAUE,GAChE,OAAOzF,EAAYyF,IAASA,Q,gCChVpC,MAAMsF,EAAY,EAAQ,GACpB38C,EAAY,EAAQ,KACpB,cAACrY,GAAiB,EAAQ,KAC1B,WAACQ,GAAc,EAAQ,GAiB7B,SAASy0D,IAEL,OAD4Bh1D,EAAE,gCAsClC,SAASi1D,EAA4BjoD,GAEjC,MAAMkoD,EAAsBF,IACtBG,EAAiBn1D,EAAE,6BAA8Bk1D,GAAqBvxD,OAGtEyxD,EAAep1D,EAAEm1D,GAEvB,IAAIn0D,EACAga,MAAMU,QAAQ1O,IAAUA,EAAM9H,OAAS,EAClB,IAAjB8H,EAAM9H,OACNlE,EAAU,GAAGT,EAAWyM,EAAM,KAE9BhM,EAAU,OACVgM,EAAMlN,QAASyC,IACXvB,GAAW,OAAOT,EAAWgC,YAEjCvB,GAAW,SAGfA,EAAUk0D,EAAoBj1D,KAAK,uBAGvCm1D,EAAa9xD,KAAK,oBAAoBK,KAAK3C,GAG3C,MAAM0M,EAAQ1N,EAAE,QACVkM,EAAYlM,EAAE,4CACdmM,EAASnM,EACX,iFAAiFo1D,EAAaznD,KAC1F,sBAGRzB,EAAUhL,OAAOiL,GACjBuB,EAAMxM,OAAOgL,GACb/K,YAAW,WACPgL,EAAO/K,SACP8K,EAAU9K,WACX,KAQP,SAASi0D,IACL,OAAO,IAAIxqD,QAASC,IAChB,EAAQ,EAAR,GAGA9K,EAAE,cAAcs1D,UAAU7wD,KAAKqG,KAwDvCyB,eAAegpD,EAAYhzD,GACvB,IAAKA,EACD,OAIJ,MAAMizD,EAAiBx1D,EAAEuC,EAAE2S,eACrB9G,EAAYonD,EAAev1D,KAAK,OAGhCw1D,EAAyBD,EAC1BluD,QAAQ,QACRsb,OACAtf,KAAK,kCACJoyD,EAAwBF,EACzBluD,QAAQ,QACRhE,KAAK,kCAEV,IAAIT,EAEA4yD,EAAuBvwD,OACvBrC,EAAW4yD,EAAuB30D,MAC3B40D,EAAsBxwD,SAC7BrC,EAAW6yD,EAAsB50D,OAIrC+B,EAAWA,GAAY,EAGvB,IAAI8yD,EAAc,CACdvnD,UAAWA,EAAYA,EAAY,GAAK,GACxCvL,SAAUC,SAASD,EAAU,KAIjC,MAAMgR,EA/LC7T,EAAE,oBAAoBc,MAiMvB4L,EAAa3M,IACb4M,EAAgBD,EAAWE,UAC3BC,EAAiBH,EAAWI,MAG5B2B,EAAW,IAAIP,SACrBO,EAASvN,OAAO,MAAOy0D,EAAYvnD,WACnCK,EAASvN,OAAO,WAAYy0D,EAAY9yD,UACxC4L,EAASvN,OAAOyL,EAAeE,GAE/B,MAAMQ,EAAW,EAAQ,GAEzB,aADqBA,EAASwG,EAAcpF,GAsHhD9Q,EAAOD,QAAU,CACbsF,UA9GJ,WACIhD,EAAE,QAAQsC,GAAG,QAAS,gDAAiDiK,MAAOhK,IAhFlF,IAA8BwB,EAkFtB,GAAKgxD,EAAUa,OAIf,IAEI51D,EAAE,QAAQgS,QAAQ,0BAA2BxP,MAG7C,MAAMmM,QAAe4mD,EAAYhzD,GAGjC,GAAIoM,EAAOjK,QAAS,CAChB,MAAMzE,EAAO0O,EAAO1O,MAhNpC,SAAgCA,GAC5BD,EAAE,aAAagS,QAAQ,eAAgB/R,GAGvC,MAAMi1D,EAAsBF,IACtBh0D,EAAUhB,EAAE,8BAA+Bk1D,GAAqBvxD,OAGhE+J,EAAQ1N,EAAE,QACVkM,EAAYlM,EAAE,4CACdmM,EAASnM,EACX,iFAAiFgB,WAErFkL,EAAUhL,OAAOiL,GACjBuB,EAAMxM,OAAOgL,GACb/K,YAAW,WACPgL,EAAO/K,SACP8K,EAAU9K,WACX,KAgMSy0D,CAAuB51D,GACvBD,EAAE,QAAQgS,QAAQ,yBAA0B/R,GAC5C,MAAM4V,EAAe5V,EAAK4V,cAnGZ9R,EAoGO8R,IAhGjC7V,EAAEuE,KAAK,CACHR,MACAS,OAAQ,MACRE,QAAS,aAGTsI,MAAO,mBA2FI,CAIH,IAAIA,EACJ,SAHMqoD,IAGF1mD,EAAO3B,MACPA,EAAQ2B,EAAO3B,WACZ,GAAI2B,EAAO1C,UAAW,CAEzBe,EAAQ,CADoBgoD,IACC/0D,KAAK,0BAC/B,CAEH+M,EAAQ,CADoBgoD,IACC/0D,KAAK,wBAEtCg1D,EAA4BjoD,GAE5B,MAAMwoD,EAAiBx1D,EAAEuC,EAAE2S,eACrB4gD,EAAaN,EAAev1D,KAAK,gBA7IvD,SAA4B8D,EAAKiU,GAC7BhY,EAAEuE,KAAK,CACHR,IAAKA,EACLS,OAAQ,MACRE,QAAS,SAAU6D,GAEf6P,EAAU7P,EAAUyP,IAExBhL,MAAO,WAGHpG,OAAOC,SAASC,KAAO/C,KAsInBgyD,CAAmBD,EAHCN,EAAev1D,KAAK,kBAK9C,MAAOgN,SAECooD,IAINJ,EADc,CADcD,IACO/0D,KAAK,yBAE1C,QAEED,EAAEqE,UAAU8C,OAEZ4tD,EAAUiB,aAuDlBT,cACAU,aA9CJ,WAEIj2D,EAAE,eAAesC,GAAG,QAASiK,MAAOrJ,IAEhC,GADAA,EAAMsG,iBACDurD,EAAUa,OAGf,IAEI,MAAMJ,EAAiBx1D,EAAEkD,EAAMgS,eACzB9G,EAAYonD,EAAev1D,KAAK,OAGhCw1D,EAAyBD,EAC1BluD,QAAQ,QACRsb,OACAtf,KAAK,kCACJoyD,EAAwBF,EACzBluD,QAAQ,QACRhE,KAAK,kCAEV,IAAIT,EAEA4yD,EAAuBvwD,OACvBrC,EAAW4yD,EAAuB30D,MAC3B40D,EAAsBxwD,SAC7BrC,EAAW6yD,EAAsB50D,OAIrC+B,EAAWA,GAAY,EAGvB,MAAM,aAACwV,GAAgB,EAAQ,KACzB,WAACtK,GAAc,EAAQ,IACvBC,EAAYqK,EAAajK,EAAWvL,SACpCkL,EAAWC,GACnB,QACE+mD,EAAUiB,e,+BCxUtBr4D,EAAOD,QAAU,SAAUyoC,GACvB,IAAIuJ,EAAWvJ,GAAWA,EAAQjhC,OAASihC,EAAQrlB,SAASS,IAAM,EAClEvhB,EAAE,cAAc4mB,QAAQ,CACpBzF,UAAWuuB,GACZ,KACEvJ,GACDnmC,EAAE,cAAc4L,U,+BCkBxBhF,OAAOsvD,KAAO,CAEVnB,UAAW,CAEPoB,QAAQ,IA2BhBx4D,EAAOD,QAAU,CACbk4D,KAnBJ,WACI,OAAIhvD,OAAOsvD,KAAKnB,UAAUoB,SAG1BvvD,OAAOsvD,KAAKnB,UAAUoB,QAAS,GACxB,IAePH,OAPJ,WAEI,OADApvD,OAAOsvD,KAAKnB,UAAUoB,QAAS,GACxB","file":"default\\js\\productDetail.js","sourcesContent":[" \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 = 150);\n","'use strict';\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n","'use strict';\n\n/**\n * セキュリティーに関する処理に必要な情報を格納するためのタグを取得して返す。\n * 「components/security.isml」がインクルードされていることを前提とする。\n *\n * @returns {JQuery} idが\"secInfo\"のspanタグを表すjQueryオブジェクト\n */\nfunction getSecInfo() {\n const $secInfo = $('#secInfo');\n return $secInfo;\n}\n\n/**\n * CSRFトークンを含むオブジェクトを返す。\n *\n * @returns {object} CSRFトークンを含むオブジェクト\n * - tokenName: 'CSRFトークン名'\n * - token: 'CSRFトークン値'\n * 例:\n * ```js\n * {\n * tokenName: 'csrf_token',\n * token: 'lSb3zUKYcM2Q3TXQiqrtvQvEENcg7eJ5lgqUMw-2k5ZiQLpFENIUsd4LUAWEKF7BboUkovZ8F-1tBBgZNqYG6ulLL7Epkta2GRc_9IpCvRaS_soWu0TRWMm83-hkOSjq5_wdtQ5zifwS_qaYRtE9A9YfmnWmmz_7gx7U21PWEX4TV3Sme44='\n * }\n * ```\n */\nfunction getCsrfObject() {\n const $secInfo = getSecInfo();\n const csrf = $secInfo.data('csrf');\n return csrf;\n}\n\nmodule.exports = {\n getCsrfObject,\n};\n","'use strict';\n\nconst processInclude = require('base/util');\n\n$(document).ready(function () {\n processInclude(require('./product/details'));\n processInclude(require('./common/cart'));\n processInclude(require('./product/wishlist'));\n});\n","'use strict';\n\nconst base = require('base/product/base');\nconst detail = require('base/product/detail');\nconst {encodeHtml} = require('sswd_base/util/XStringUtils');\nconst Swiper = require('../thirdParty/swiper');\n\n/**\n * 変動スピード\n *\n * @protected\n * @constant {number}\n */\nconst SPIN_SPEED = 20;\n\n/**\n * スピナーコントロール用配列\n * グローバルに使用するため定義\n */\nlet arySpinnerCtrl = [];\n\n/**\n * 変動計算する関数。\n * スピナー値の最大値や最小値を超えないように制御\n *\n */\nfunction spinnerCal() {\n let target = $(arySpinnerCtrl['.target']);\n // 現在の値を取得\n let num = Number(target.val());\n // 数量を加算\n num += arySpinnerCtrl['.cal'];\n if (num > Number(target.data('max'))) {\n // 最大値を超える場合、最大値をセット\n target.val(Number(target.data('max')));\n } else if (Number(target.data('min')) > num) {\n // 最大値を超える場合、最大値をセット\n target.val(Number(target.data('min')));\n } else {\n target.val(num);\n }\n}\n\n/**\n * 数量変更スピナー\n */\nfunction quantityChange() {\n // 数量変更ボタン長押し時\n $('.btnspinner').on('touchstart mousedown click', function (e) {\n if (arySpinnerCtrl['.interval']) return false;\n // 入力フィールドを示すオブジェクトを取得\n let target = $(this).data('target');\n arySpinnerCtrl['.target'] = target;\n arySpinnerCtrl['.timestamp'] = e.timeStamp;\n // 数量の増減値を格納\n arySpinnerCtrl['.cal'] = Number($(this).data('cal'));\n\n // クリックは単一の処理に留める\n if (e.type === 'click') {\n spinnerCal(arySpinnerCtrl);\n arySpinnerCtrl = [];\n return false;\n }\n\n // 長押し時の処理\n setTimeout(function () {\n // インターバル未実行中 + 長押しのイベントタイプスタンプ一致時に計算処理\n // 長押しから500ミリ秒後に処理が実行される\n if (!arySpinnerCtrl['.interval'] && arySpinnerCtrl['.timestamp'] === e.timeStamp) {\n arySpinnerCtrl['.interval'] = setInterval(spinnerCal, SPIN_SPEED);\n }\n }, 500);\n });\n\n // 長押し解除時 画面スクロールも解除に含む\n $(document).on('touchend mouseup scroll', function (e) {\n if (arySpinnerCtrl['.interval']) {\n // スピナーの変動を停止するために値をクリア\n clearInterval(arySpinnerCtrl['.interval']);\n arySpinnerCtrl = [];\n }\n });\n $('.quantity-select').on('change', function (e) {\n const quantity = parseInt($(this).val());\n if (isNaN(quantity) || quantity <= 0) {\n $(this).val(1);\n }\n });\n}\n\n/**\n * 構成品選択時のモーダル実行\n */\nfunction clickAssortedProducts() {\n $('#requestProductDetailsModal').on('show.bs.modal', function (event) {\n // モーダルを呼び出すときに使われたボタンを取得\n let link = $(event.relatedTarget);\n\n // モーダルを取得\n let modal = $(this);\n\n // 取得した構成品情報で上書きする\n modal.find('#modal-title').text(link.data('name'));\n modal.find('#modal-img').attr('src', link.data('imageurl'));\n modal.find('#modal-img').attr('alt', link.data('imagealt'));\n modal.find('#modal-img').attr('title', link.data('imagetitle'));\n modal.find('#modal-description').text(link.data('description'));\n\n // 初期化\n modal.find('#modal-storagedays').show();\n modal.find('#modal-label-storagedays').show();\n modal.find('#modal-internalCapacity').show();\n modal.find('#modal-label-internalCapacity').show();\n modal.find('#modal-allergies').show();\n modal.find('#modal-label-allergies').show();\n modal.find('#modal-nutritionalContents').show();\n modal.find('#modal-label-nutritionalContents').show();\n\n // 値がないものを項目ごと表示しない\n if (link.data('storagedays') !== null) {\n modal.find('#modal-storagedays').text('');\n modal\n .find('#modal-storagedays')\n .text(link.data('storagedays') + modal.find('#modal-storagedays').text());\n } else {\n modal.find('#modal-storagedays').hide();\n modal.find('#modal-label-storagedays').hide();\n }\n if (link.data('internalcapacity') !== '') {\n modal.find('#modal-internalCapacity').text(link.data('internalcapacity'));\n } else {\n modal.find('#modal-internalCapacity').hide();\n modal.find('#modal-label-internalCapacity').hide();\n }\n if (link.data('strjoinallergies') !== '') {\n modal.find('#modal-allergies').text(link.data('strjoinallergies'));\n } else {\n modal.find('#modal-allergies').hide();\n modal.find('#modal-label-allergies').hide();\n }\n if (link.data('nutritionalcontents') !== '') {\n modal.find('#modal-nutritionalContents').html(link.data('nutritionalcontents'));\n modal.find('#modal-nutritionalContents').css('white-space', 'pre-line');\n } else {\n modal.find('#modal-nutritionalContents').hide();\n modal.find('#modal-label-nutritionalContents').hide();\n }\n });\n}\n\n/**\n * 日付をYYYY/MM/DD形式で返却します\n * @param {date} dt 日付\n * @returns {string} YYYY/MM/DD日付\n */\nfunction formatDate(dt) {\n let y = dt.getFullYear();\n let m = ('00' + (dt.getMonth() + 1)).slice(-2);\n let d = ('00' + dt.getDate()).slice(-2);\n return y + '/' + m + '/' + d;\n}\n/**\n * エラーメッセージを表示するポップアップを作成する\n * @param {Object} message - エラーメッセージ\n */\nfunction createErrorNotification(message) {\n const errorHtml =\n '
' +\n '' +\n encodeHtml(message) +\n '
';\n\n // カートメッセージのCSSを利用\n $('body').append('
');\n $('.add-to-cart-messages').append(errorHtml);\n setTimeout(function () {\n $('.add-to-cart-messages').remove();\n }, 5e3);\n}\n\n/**\n * 出荷予定日情報をDateTimePickerに設定します。\n * @param {object} apiData 出荷予定日情報\n * @returns エラーの場合はpopアップ表示を行い終了\n */\nfunction dateTimePickerFunc(apiData) {\n // 出荷予定日カレンダー情報の取得\n let shippingDateList = apiData.data.shipping_date_list;\n\n //  ○:50%未満\n //  △:50%以上\n //  ×:100%\n //  -(グレーアウト):空白(値無し)\n\n let sd = null;\n let ed = null;\n let checkMap = new Map();\n for (let i = 0; i < shippingDateList.length; i += 1) {\n // 選択可能開始日付の判定\n if (sd === null && shippingDateList[i].shipping_rate !== '') {\n sd = shippingDateList[i];\n }\n // 選択可能終了日付の判定\n if (shippingDateList[i].shipping_rate !== '') {\n ed = shippingDateList[i];\n }\n // 〇△×判定用\n checkMap.set(shippingDateList[i].shipping_date, shippingDateList[i].shipping_rate);\n }\n\n // 選択可能開始日・終了日が存在しない場合、\n if (sd === null) {\n sd = shippingDateList[0];\n }\n if (ed === null) {\n ed = shippingDateList[shippingDateList.length - 1];\n }\n\n // dataPickerの設定\n $('#shipping-date').datepicker({\n language: 'ja', // 日本語化\n format: 'yyyy/mm/dd', // 日付表示をyyyy/mm/ddにフォーマット\n startDate: sd.shipping_date, // 選択可能な開始日付\n endDate: ed.shipping_date, // 選択可能な終了日付\n disabled: false, // 日付を選択させない\n autoclose: true, // 選択後閉じる\n clearBtn: false, // クリアボタン表示\n // datesDisabled: disableArray ,// 選択不可にする日付配列\n // container: '#picker-container',// ピッカーを追加させる一時的な場所\n maxViewMode: 0, // 日時のみ選択可能\n beforeShowDay: function (date) {\n let param;\n let dateStr = formatDate(date);\n let rateNum = checkMap.get(dateStr);\n\n if (rateNum === '') {\n param = {\n classes: 'disabled', // -にするCSSのクラス名\n };\n } else if (Number(rateNum) === 100) {\n param = {\n classes: 'batsu', // ×にするCSSのクラス名\n };\n } else if (Number(rateNum) < 50) {\n param = {\n classes: 'maru', // ○にするCSSのクラス名\n };\n } else {\n param = {\n classes: 'sankaku', // △にするCSSのクラス名\n };\n }\n return param;\n },\n });\n\n // datepickerを表示\n $('#shipping-date').datepicker('show');\n\n // nextを制御\n $('.datepicker')\n .find('.next')\n .on('click', function (e) {\n // 非活性クラスがある場合次月に遷移しない\n if ($(this).hasClass('disabled')) {\n e.stopImmediatePropagation();\n }\n });\n // prevを制御\n $('.datepicker')\n .find('.prev')\n .on('click', function (e) {\n // 非活性クラスがある場合前月に遷移しない\n if ($(this).hasClass('disabled')) {\n e.stopImmediatePropagation();\n }\n });\n}\n\n/**\n * 出荷予定日取得APIから出荷予定日情報を取得しDateTimePickerを表示します。\n */\nfunction dateTimePickerApi() {\n $('#shipping-date').on('click', function (event) {\n // DatatimePickerの表示を抑制\n event.stopImmediatePropagation();\n\n const url = $(this).data('apiurl');\n if (!url) {\n return;\n }\n const pid = base.getPidValue($(this));\n\n // bodyにcssを追加\n const body = $('body');\n if (!body.hasClass('product-detail-page')) {\n body.addClass('product-detail-page');\n }\n\n $.spinner().start();\n $.ajax({\n url,\n method: 'GET',\n data: {\n pid,\n },\n })\n .done(function (data) {\n if (data.success) {\n dateTimePickerFunc(data);\n return;\n }\n if (data.redirectUrl) {\n window.location.href = data.redirectUrl;\n } else if (data.errorMessage) {\n createErrorNotification(data.errorMessage);\n }\n })\n .fail(function (data) {\n createErrorNotification(data.responseJSON.message);\n })\n .always(function () {\n $.spinner().stop();\n });\n });\n}\n\n/**\n * Swiperスクリプト:サムネイル操作\n */\nconst swiperProductsThumbnail = new Swiper('.swiper_products_thumbnail', {\n breakpoints: {\n // ブレークポイント\n 0: {\n // 画面幅0px以上で適用\n slidesPerView: 6,\n },\n 768: {\n // 画面幅769px以上で適用\n slidesPerView: 12,\n },\n 1200: {\n // 画面幅1200px以上で適用\n slidesPerView: 12,\n },\n },\n allowTouchMove: false,\n});\n\n/**\n * Swiperスクリプト:商品スライド\n */\nconst swiperProducts = new Swiper('.swiper_products', {\n breakpoints: {\n // ブレークポイント\n 0: {\n // 画面幅0px以上で適用\n slidesPerView: 1,\n },\n 768: {\n // 画面幅769px以上で適用\n slidesPerView: 1,\n },\n 1200: {\n // 画面幅1200px以上で適用\n slidesPerView: 1,\n },\n },\n loop: true, // ループさせる\n speed: 1500, // 少しゆっくり(デフォルトは300)\n navigation: {\n nextEl: '.swiper-button-next',\n prevEl: '.swiper-button-prev',\n },\n thumbs: {\n swiper: swiperProductsThumbnail,\n },\n});\n\n/**\n * 購入エリア(SP)を適切な位置に移動する。\n * これは、リモートインクルード('Product-IncludePurchase')が出力した時点では、本来の位置に購入エリア(SP)が存在しないことによる。\n *\n * @returns {void}\n */\nfunction moveProductPurchaseSp() {\n const $bundleFooter = $('.bundle-footer');\n const $bundleFooterRow = $bundleFooter.closest('.row');\n const $productItemContainer = $('.container.product-detail.set-item');\n $bundleFooterRow.insertAfter($productItemContainer);\n}\n\nconst exportDetails = $.extend({}, base, detail, {\n quantityChange,\n addToCart: function () {}, // addToCartを共通化。base側の処理がコールされないように処理を無効化。\n clickAssortedProducts,\n dateTimePickerApi,\n moveProductPurchaseSp,\n});\n\nmodule.exports = exportDetails;\n","'use strict';\nvar base = require('./base');\n\n/**\n * Enable/disable UI elements\n * @param {boolean} enableOrDisable - true or false\n */\nfunction updateAddToCartEnableDisableOtherElements(enableOrDisable) {\n $('button.add-to-cart-global').attr('disabled', enableOrDisable);\n}\n\nmodule.exports = {\n methods: {\n updateAddToCartEnableDisableOtherElements: updateAddToCartEnableDisableOtherElements\n },\n\n availability: base.availability,\n\n addToCart: base.addToCart,\n\n updateAttributesAndDetails: function () {\n $('body').on('product:statusUpdate', function (e, data) {\n var $productContainer = $('.product-detail[data-pid=\"' + data.id + '\"]');\n\n $productContainer.find('.description-and-detail .product-attributes')\n .empty()\n .html(data.attributesHtml);\n\n if (data.shortDescription) {\n $productContainer.find('.description-and-detail .description')\n .removeClass('hidden-xl-down');\n $productContainer.find('.description-and-detail .description .content')\n .empty()\n .html(data.shortDescription);\n } else {\n $productContainer.find('.description-and-detail .description')\n .addClass('hidden-xl-down');\n }\n\n if (data.longDescription) {\n $productContainer.find('.description-and-detail .details')\n .removeClass('hidden-xl-down');\n $productContainer.find('.description-and-detail .details .content')\n .empty()\n .html(data.longDescription);\n } else {\n $productContainer.find('.description-and-detail .details')\n .addClass('hidden-xl-down');\n }\n });\n },\n\n showSpinner: function () {\n $('body').on('product:beforeAddToCart product:beforeAttributeSelect', function () {\n $.spinner().start();\n });\n },\n updateAttribute: function () {\n $('body').on('product:afterAttributeSelect', function (e, response) {\n if ($('.product-detail>.bundle-items').length) {\n response.container.data('pid', response.data.product.id);\n response.container.find('.product-id').text(response.data.product.id);\n } else if ($('.product-set-detail').eq(0)) {\n response.container.data('pid', response.data.product.id);\n response.container.find('.product-id').text(response.data.product.id);\n } else {\n $('.product-id').text(response.data.product.id);\n $('.product-detail:not(\".bundle-item\")').data('pid', response.data.product.id);\n }\n });\n },\n updateAddToCart: function () {\n $('body').on('product:updateAddToCart', function (e, response) {\n // update local add to cart (for sets)\n $('button.add-to-cart', response.$productContainer).attr('disabled',\n (!response.product.readyToOrder || !response.product.available));\n\n var enable = $('.product-availability').toArray().every(function (item) {\n return $(item).data('available') && $(item).data('ready-to-order');\n });\n module.exports.methods.updateAddToCartEnableDisableOtherElements(!enable);\n });\n },\n updateAvailability: function () {\n $('body').on('product:updateAvailability', function (e, response) {\n $('div.availability', response.$productContainer)\n .data('ready-to-order', response.product.readyToOrder)\n .data('available', response.product.available);\n\n $('.availability-msg', response.$productContainer)\n .empty().html(response.message);\n\n if ($('.global-availability').length) {\n var allAvailable = $('.product-availability').toArray()\n .every(function (item) { return $(item).data('available'); });\n\n var allReady = $('.product-availability').toArray()\n .every(function (item) { return $(item).data('ready-to-order'); });\n\n $('.global-availability')\n .data('ready-to-order', allReady)\n .data('available', allAvailable);\n\n $('.global-availability .availability-msg').empty()\n .html(allReady ? response.message : response.resources.info_selectforstock);\n }\n });\n },\n sizeChart: function () {\n $('.size-chart a').on('click', function (e) {\n e.preventDefault();\n var url = $(this).attr('href');\n var $prodSizeChart = $(this).closest('.size-chart').find('.size-chart-collapsible');\n if ($prodSizeChart.is(':empty')) {\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n $prodSizeChart.append(data.content);\n }\n });\n }\n $prodSizeChart.toggleClass('active');\n });\n\n var $sizeChart = $('.size-chart-collapsible');\n $('body').on('click touchstart', function (e) {\n if ($('.size-chart').has(e.target).length <= 0) {\n $sizeChart.removeClass('active');\n }\n });\n },\n copyProductLink: function () {\n $('body').on('click', '#fa-link', function () {\n event.preventDefault();\n var $temp = $('');\n $('body').append($temp);\n $temp.val($('#shareUrl').val()).select();\n document.execCommand('copy');\n $temp.remove();\n $('.copy-link-message').attr('role', 'alert');\n $('.copy-link-message').removeClass('d-none');\n setTimeout(function () {\n $('.copy-link-message').addClass('d-none');\n }, 3000);\n });\n },\n\n focusChooseBonusProductModal: base.focusChooseBonusProductModal()\n};\n","'use strict';\n\n/** @type {object} 確認ダイアログ */\nconst CONFIRMATION = {\n /** @type {string} デフォルトのモーダルID */\n DEFAULT_ID: 'confirmationModal',\n /** @type {object} 確認ダイアログ内のボタン */\n BUTTON: {\n /** @type {string} ボタン「OK」のクラス名 */\n OK: 'co-modal-ok',\n /** @type {string} ボタン「CANCEL」のクラス名 */\n CANCEL: 'co-modal-cancel',\n },\n /** @type {object} 確認ダイアログ結果 */\n RESULT: {\n /** @type {number} OK */\n OK: 0,\n /** @type {number} CANCEL */\n CANCEL: -1,\n },\n};\n\n/**\n * 確認ダイアログ(モーダル)を表示し、押されたボタンが何であるかを返す。\n * なお、ページ内に確認ダイアログのHTMLが含まれていること。\n *\n * (参考)/co/coUses/coUsesModal.isml\n * (確認ダイアログのHTMLの前提)\n * - OKボタンのclassが「co-modal-ok」である\n * - CANCELボタンのclassが「co-modal-cancel」である\n *\n * 本関数は、条件に応じて確認ダイアログを表示したい場合に利用することを想定。\n * そのため、特定のボタン要素にモーダル用のデータ属性を用いて表示をトグルする用途では利用しないこと。\n * (例)「data-target=\"#confirmationModal\" data-toggle=\"modal\"」\n *\n * @param {string|undefined} modalId - 確認ダイアログ(モーダル)の要素ID。指定しない場合(undefined時)のデフォルトは「confirmationModal」。\n * @returns {Promise} CONFIRMATION.RESULT.OK または CONFIRMATION.RESULT.CANCEL\n */\nfunction confirm(modalId) {\n return new Promise((resolve, reject) => {\n /* eslint no-unused-vars: [\"error\", { \"args\": \"none\" }] */\n // モーダルを取得する\n const $modal = $(`#${modalId || CONFIRMATION.DEFAULT_ID}`);\n // モーダルがクローズした場合の処理\n $modal.on('hide.bs.modal', () => {\n // XXX これは、ボタンが押されずにモーダルがクローズした場合の処理。ボタンが押された場合はすでにresolve済みとなる。\n resolve(CONFIRMATION.RESULT.CANCEL);\n });\n // OKボタンが押された場合の処理\n $(`.${CONFIRMATION.BUTTON.OK}`, $modal).on('click', () => {\n resolve(CONFIRMATION.RESULT.OK);\n });\n // CANCELボタンが押された場合の処理\n $(`.${CONFIRMATION.BUTTON.CANCEL}`, $modal).on('click', () => {\n resolve(CONFIRMATION.RESULT.CANCEL);\n });\n // モーダルを表示する\n $modal.modal('show');\n });\n}\n\nmodule.exports = {\n CONFIRMATION,\n confirm,\n};\n","'use strict';\n\nmodule.exports = {\n setTabNextFocus: function (focusParams) {\n var KEYCODE_TAB = 9;\n var isTabPressed = (focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB);\n\n if (!isTabPressed) {\n return;\n }\n\n var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\n var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\n\n if ($(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled')) {\n lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\n if ($('.product-quickview.product-set').length > 0) {\n var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\n lastFocusableEl = linkElements[linkElements.length - 1];\n }\n }\n\n if (focusParams.event.shiftKey) /* shift + tab */ {\n if ($(':focus').is(firstFocusableEl)) {\n lastFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n } else /* tab */ {\n if ($(':focus').is(lastFocusableEl)) { // eslint-disable-line\n firstFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n }\n }\n};\n","'use strict';\n\nconst wishlist = require('wishlist/product/wishlist');\nconst {getCsrfObject} = require('app_common/components/security');\n\n/**\n * お気に入り登録時のAJAX通信の結果区分\n *\n * @protected\n * @constant {string}\n * @author SCSK 中村勝紀\n */\nconst AJAX_RESPONSE_ERR_EXIST = 'errExist';\nconst AJAX_RESPONSE_ERR_AT_MAX = 'errAtMax';\nconst AJAX_RESPONSE_ERR_OTHER = 'errOther';\n\n/**\n * お気に入り登録時のメッセージ表示コントロール\n *\n * @param {object} data お気に入り登録Ajaxサービスを呼び出した結果\n * (登録成功時)\n * ```js\n * {\n * success: true,\n * pid: '<商品ID>',\n * msg: '<メッセージID'>\n * }\n * ```\n * (登録失敗時)\n * ```js\n * {\n * error: true,\n * pid: '<商品ID>',\n * msg: '<メッセージID>'\n * }\n * ```\n * - 「商品ID」は、お気に入り登録時に送信した商品IDに該当する。\n * -「メッセージID」は以下で定義するいずれかに該当する。\n * - AJAX_RESPONSE_ERR_EXIST\n * - AJAX_RESPONSE_ERR_AT_MAX\n * - AJAX_RESPONSE_ERR_OTHER\n * @param {jQuery} $button - 「お気に入りに追加」ボタンを表すjQueryオブジェクト\n * @returns {void}\n * @author SCSK 中村勝紀\n */\nfunction displayMessage(data, $button) {\n // スピナー画面停止\n $.spinner().stop();\n\n let message = '';\n let status = 'alert-success';\n\n // AJAXの結果で表示するメッセージを調整\n if (data.success) {\n // お気に入りに追加できた場合\n message = $('.add-to-wishlist-popup .add-to-wishlist-first').html();\n } else if (data.msg === AJAX_RESPONSE_ERR_EXIST) {\n // すでに登録されていた場合\n message = $('.add-to-wishlist-popup .add-to-wishlist-error-exist').html();\n } else if (data.msg === AJAX_RESPONSE_ERR_AT_MAX) {\n // 上限に達している場合\n message = $('.add-to-wishlist-popup .add-to-wishlist-error-atmax').html();\n } else if (data.msg === AJAX_RESPONSE_ERR_OTHER) {\n // 他のエラーが発生した場合\n message = $('.add-to-wishlist-popup .add-to-wishlist-error-other').html();\n } else if (data.csrfError) {\n // CSRFトークンエラーの場合\n message = $('.add-to-wishlist-popup .add-to-wishlist-error-csrf').html();\n } else {\n // 予期せぬエラーの場合\n message = $('.add-to-wishlist-popup .add-to-wishlist-error-system').html();\n }\n\n let $messages = $('.add-to-cart-messages');\n if ($messages.length === 0) {\n $messages = $('
');\n $('body').append($messages);\n }\n\n // クラス追加\n const $alert = $(\n `
${message}
`\n );\n $messages.append($alert);\n\n // アイコンCSS\n if (data.success) {\n if (!$button.hasClass('tny-heart-on')) {\n $button.addClass('tny-heart-on');\n }\n }\n // タイムアウトセット(5秒)\n setTimeout(function () {\n $alert.remove();\n $messages.remove();\n $button.removeAttr('disabled');\n }, 5000);\n}\n\n/**\n * お気に入りに追加\n * plugin_wishlistから移植\n * AJAX通信後の処理のみ改修\n *\n * @returns {void}\n * @author 中村勝紀\n */\nfunction addToWishlist() {\n $(document).on('click', '.add-to-wish-list', async function (e) {\n e.preventDefault();\n\n // htmlから情報取得\n let url = $(this).data('href');\n let $button = $(this);\n // TODO:pidの取り方についてtaneya-store(商品系機能)と調整が必要\n let pid =\n $(this).closest('.product-detail').find('.product-id').html() ||\n $(this).data('product-id');\n let optionId = $(this)\n .closest('.product-detail')\n .find('.product-option')\n .attr('data-option-id');\n let optionVal = $(this)\n .closest('.product-detail')\n .find('.options-select option:selected')\n .attr('data-value-id');\n\n optionId = optionId || null;\n optionVal = optionVal || null;\n if (!url || !pid) {\n return;\n }\n\n // スピナー画面のスタート\n $.spinner().start();\n\n $(this).attr('disabled', true);\n\n const csrfObject = getCsrfObject();\n const csrfTokenName = csrfObject.tokenName;\n const csrfTokenValue = csrfObject.token;\n const postdata = {\n pid,\n optionId,\n optionVal,\n };\n postdata[csrfTokenName] = csrfTokenValue;\n\n // AJAX通信\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: postdata,\n success: function (data) {\n displayMessage(data, $button);\n },\n error: function (err) {\n displayMessage(err.responseJSON || {}, $button);\n },\n });\n });\n}\n\nconst exportWishlist = $.extend({}, wishlist, {\n addToWishlist,\n});\n\nmodule.exports = exportWishlist;\n","'use strict';\n\n\n/**\n * appends params to a url\n * @param {string} data - data returned from the server's ajax call\n * @param {Object} button - button that was clicked to add a product to the wishlist\n */\nfunction displayMessage(data, button) {\n $.spinner().stop();\n var status;\n if (data.success) {\n status = 'alert-success';\n } else {\n status = 'alert-danger';\n }\n\n if ($('.add-to-wishlist-messages').length === 0) {\n $('body').append(\n '
'\n );\n }\n $('.add-to-wishlist-messages')\n .append('
' + data.msg + '
');\n\n setTimeout(function () {\n $('.add-to-wishlist-messages').remove();\n button.removeAttr('disabled');\n }, 5000);\n}\n\nmodule.exports = {\n addToWishlist: function () {\n $('.add-to-wish-list').on('click', function (e) {\n e.preventDefault();\n var url = $(this).data('href');\n var button = $(this);\n var pid = $(this).closest('.product-detail').find('.product-id').html();\n var optionId = $(this).closest('.product-detail').find('.product-option').attr('data-option-id');\n var optionVal = $(this).closest('.product-detail').find('.options-select option:selected').attr('data-value-id');\n optionId = optionId || null;\n optionVal = optionVal || null;\n if (!url || !pid) {\n return;\n }\n\n $.spinner().start();\n $(this).attr('disabled', true);\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: {\n pid: pid,\n optionId: optionId,\n optionVal: optionVal\n },\n success: function (data) {\n displayMessage(data, button);\n },\n error: function (err) {\n displayMessage(err, button);\n }\n });\n });\n }\n};\n","'use strict';\n\nconst XStringUtils = require('./util/XStringUtils');\n\nmodule.exports = {\n XStringUtils,\n};","'use strict';\n\n/*\n * 「すぐ購入」用のクライアントJS。\n * 「co/coBuyNow/coBuyNowParts.isml」をインクルードした画面上で機能する。\n */\n\nconst {CONFIRMATION, confirm} = require('./client/coClientModalUtils');\nconst postForm = require('sswd_base/components/XPostForm');\nconst {getCsrfObject} = require('app_common/components/security');\n\n/** @type {object} 「すぐ購入」サービスのレスポンス結果 */\nconst CO_BUY_NOW_RESPONSE_RESULT = {\n /** @type {string} 未ログインの場合 */\n NOT_LOGGED_IN: 'notLoggedIn',\n /** @type {string} 「すぐ購入」が可能である場合 */\n OK: 'ok',\n /** @type {string} エラーが発生した場合 */\n ERROR: 'error',\n /** @type {string} 商品が購入不可である場合 */\n CAN_NOT_BUY: 'canNotBuy',\n /** @type {string} 用途を「ご自宅用」に変更する必要がある場合 */\n CHANGE_USES: 'changeUses',\n};\n\n/** @type {object} 「すぐ購入」サービスのレスポンスを処理した結果 */\nconst CO_BUY_NOW_ACTION_RESULT = {\n /** @type {string} CSRFトークンチェックでエラーが発生した場合 */\n CSRF_FAIL: 'csrfFail',\n /** @type {string} 未ログインの場合 */\n NOT_LOGGED_IN: 'notLoggedIn',\n /** @type {string} 「すぐ購入」が可能である場合 */\n OK: 'ok',\n /** @type {string} エラーが発生した場合 */\n ERROR: 'error',\n /** @type {string} 商品が購入不可である場合 */\n CAN_NOT_BUY: 'canNotBuy',\n /** @type {string} 用途を「ご自宅用」に変更することが承認された場合 */\n CHANGE_USES_OK: 'changeUsesOk',\n /** @type {string} 用途を「ご自宅用」に変更することが承認されなかった場合 */\n CHANGE_USES_NG: 'changeUsesNg',\n /** @type {string} 不明な状態 */\n UNKNOWN: 'unknown',\n};\n\n/** @type {object} 「すぐ購入」用のモーダルダイアログ */\nconst CO_BUY_NOW_MODAL = {\n /** @type {string} エラーが発生した場合のダイアログのID */\n ERROR: 'coBuyNowErrorModal',\n /** @type {string} 商品が購入不可である場合のダイアログのID */\n CAN_NOT_BUY: 'coBuyNowCanNotBuyModal',\n /** @type {string} 用途を変更する場合のダイアログのID */\n CHANGE_USES: 'coBuyNowChangeUsesModal',\n};\n\n/**\n * モーダルの位置を適切な位置に移動する。\n * モーダルが特定の要素内に配置されている場合に、ボタンを押せないケースが生じるのを防ぐことが目的。\n *\n * @param {string} modalId - モーダルのID 例: `'coBuyNowErrorModal'`\n * @returns {void}\n */\nfunction locateModal(modalId) {\n const $modal = $(`#${modalId}`);\n if ($modal.length === 0) {\n return;\n }\n const $body = $(document.body);\n const bodyTagName = $body.prop('tagName');\n const $parent = $modal.parent();\n const parentTagName = $parent.prop('tagName');\n if (bodyTagName === parentTagName) {\n // --- タグ名が同じ場合(どちらもBODYの場合)\n // すでにbody直下にモーダルが存在するとみなし、何もしない\n return;\n }\n // --- タグ名が異なる場合\n // body直下にモーダルを移動する\n $modal.detach().appendTo($body);\n}\n\n/**\n * POST送信を実行し、その結果を含むオブジェクトを返す。\n *\n * @param {string} actionUrl 「すぐ購入」サービスのURL\n * @param {FormData} formData 「すぐ購入」サービスに送信するフォームデータ\n * @param {boolean} フォームデータ内にCSRFトークンが存在するか否か\n * @returns {object} POST送信を実行した結果を表すオブジェクト\n * (例) CSRFトークンチェックでエラーが発生した場合(「CSRF-AjaxFail」が返すレスポンスに該当)\n * ```js\n * {\n * response: {\n * csrfError: true,\n * redirectUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/CSRF-Fail', // CSRFエラー画面のURLがセットされる\n * },\n * actionResult: 'csrfFail', // 「CO_BUY_NOW_ACTION_RESULT.CSRF_FAIL」に該当\n * }\n * ```\n * (例) 未ログインの場合(CO_BUY_NOW_RESPONSE_RESULT.NOT_LOGGED_IN)\n * ```js\n * {\n * response: {\n * result: 'notLoggedIn', // 「CO_BUY_NOW_RESPONSE_RESULT.NOT_LOGGED_ID」に該当\n * redirectUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Login-Show?rurl=102', // ログイン画面のURLがセットされる\n * originUrl: null, // nullとなる\n * },\n * actionResult: 'notLoggedIn', // 「CO_BUY_NOW_ACTION_RESULT.NOT_LOGGED_ID」に該当\n * }\n * ```\n * (例) 「すぐ購入」が可能である場合(CO_BUY_NOW_RESPONSE_RESULT.OK)\n * ```js\n * {\n * response: {\n * result: 'ok', // 「CO_BUY_NOW_RESPONSE_RESULT.OK」に該当\n * redirectUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Co-Start?stage=confirmation', // チェックアウト画面のURLがセットされる\n * originUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Product-Show?pid=12567', // 元画面のURLがセットされる\n * },\n * actionResult: 'ok', // 「CO_BUY_NOW_ACTION_RESULT.OK」に該当\n * }\n * ```\n * (例) エラーが発生した場合 (CO_BUY_NOW_RESPONSE_RESULT.ERROR)\n * ```js\n * {\n * response: {\n * result: 'error', // 「CO_BUY_NOW_RESPONSE_RESULT.ERROR」に該当\n * redirectUrl: null, // nullとなる\n * originUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Product-Show?pid=12567', // 元画面のURLがセットされる\n * message: 'エラーが発生しました。', // エラーメッセージがセットされる\n * },\n * actionResult: 'error', // 「CO_BUY_NOW_ACTION_RESULT.ERROR」に該当\n * }\n * ```\n * (例) 商品が購入不可である場合 (CO_BUY_NOW_RESPONSE_RESULT.CAN_NOT_BUY)\n * ```js\n * {\n * response: {\n * result: 'canNotBuy', // 「CO_BUY_NOW_RESPONSE_RESULT.CAN_NOT_BUY」に該当\n * redirectUrl: null, // nullとなる\n * originUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Product-Show?pid=12567', // 「originUrl」を元に作成したURLがセットされる\n * },\n * actionResult: 'canNotBuy', // 「CO_BUY_NOW_ACTION_RESULT.CAN_NOT_BUY」に該当\n * }\n * ```\n * (例) 用途を「ご自宅用」に変更する必要がある場合 (CO_BUY_NOW_RESPONSE_RESULT.CHANGE_USES)\n * ```js\n * {\n * response: {\n * result: 'changeUses', // 「CO_BUY_NOW_RESPONSE_RESULT.CHANGE_USES」に該当\n * redirectUrl: null, // nullとなる\n * originUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Product-Show?pid=12567', // 「originUrl」を元に作成したURLがセットされる\n * },\n * actionResult: 'changeUsesOk', // 「CO_BUY_NOW_ACTION_RESULT.CHANGE_USES_OK」に該当。「CO_BUY_NOW_ACTION_RESULT.CHANGE_USES_NG」の場合は「changeUsesNg」となる。\n * }\n * ```\n */\nasync function doCoBuyNowServiceAction(actionUrl, formData) {\n let response;\n let actionResult;\n try {\n $.spinner().start();\n // 「すぐ購入」サービスを呼び出す\n response = await postForm(actionUrl, formData);\n if (response.csrfError) {\n // --- 「CSRF-AjaxFail」によってCSRFエラーが返された場合\n actionResult = CO_BUY_NOW_ACTION_RESULT.CSRF_FAIL;\n } else {\n const responseResult = response.result;\n if (responseResult === CO_BUY_NOW_RESPONSE_RESULT.NOT_LOGGED_IN) {\n // --- 「notLoggedIn」の場合\n actionResult = CO_BUY_NOW_ACTION_RESULT.NOT_LOGGED_IN;\n } else if (responseResult === CO_BUY_NOW_RESPONSE_RESULT.OK) {\n // --- 「ok」の場合\n actionResult = CO_BUY_NOW_ACTION_RESULT.OK;\n } else if (responseResult === CO_BUY_NOW_RESPONSE_RESULT.ERROR) {\n // --- 「error」の場合\n const modalId = CO_BUY_NOW_MODAL.ERROR;\n locateModal(modalId);\n // エラーメッセージをセットする\n const message = response.message;\n const $modal = $(`#${modalId}`);\n const coBuyNowErrorMessageId = 'coBuyNowErrorMessage';\n const $coBuyNowErrorMessage = $(`#${coBuyNowErrorMessageId}`, $modal);\n const XStringUtils = require('sswd_base/util').XStringUtils;\n $coBuyNowErrorMessage.text(`${XStringUtils.encodeHtml(message)}`);\n // ダイアログを表示する\n await confirm(modalId);\n actionResult = CO_BUY_NOW_ACTION_RESULT.ERROR;\n } else if (responseResult === CO_BUY_NOW_RESPONSE_RESULT.CAN_NOT_BUY) {\n // --- 「canNotBuy」の場合\n // ダイアログを表示する\n const modalId = CO_BUY_NOW_MODAL.CAN_NOT_BUY;\n locateModal(modalId);\n await confirm(modalId);\n actionResult = CO_BUY_NOW_ACTION_RESULT.CAN_NOT_BUY;\n } else if (responseResult === CO_BUY_NOW_RESPONSE_RESULT.CHANGE_USES) {\n // --- 「changeUses」の場合\n // ダイアログを表示する\n const modalId = CO_BUY_NOW_MODAL.CHANGE_USES;\n locateModal(modalId);\n const confirmResult = await confirm(modalId);\n if (confirmResult === CONFIRMATION.RESULT.OK) {\n // --- OKボタンが押された場合\n actionResult = CO_BUY_NOW_ACTION_RESULT.CHANGE_USES_OK;\n } else {\n // --- OKボタンが押されなかった場合\n actionResult = CO_BUY_NOW_ACTION_RESULT.CHANGE_USES_NG;\n }\n } else {\n // --- どの条件にも合致しなかった場合\n actionResult = CO_BUY_NOW_ACTION_RESULT.UNKNOWN;\n }\n }\n } catch (err) {\n response = null;\n actionResult = CO_BUY_NOW_ACTION_RESULT.UNKNOWN;\n } finally {\n $.spinner().stop();\n }\n return {\n response,\n actionResult,\n };\n}\n\n/**\n * 「すぐ購入」のAjaxサービスを呼び出し、その結果に応じた処理を実行する。\n *\n * - 結果が「CSRFトークンチェックエラー」の場合\n * - CSRFエラー画面に遷移する。\n * - 結果が「未ログイン」の場合\n * - 「ログイン」画面に遷移する。\n * - 結果が「正常」の場合\n * - 「お支払い方法」または「ご注文内容確認」画面に遷移する。\n * - 結果が「エラー」の場合\n * - モーダルダイアログ「co/coBuyNow/coBuyNowErrorModal.isml」の内容を表示する。\n * - モーダルダイアログを閉じると、「originUrl」の画面に遷移する。\n * - 結果が「商品が購入不可である」の場合\n * - モーダルダイアログ「co/coBuyNow/coBuyNowCanNotBuyModal.isml」を表示する。\n * - モーダルダイアログを閉じると、「originUrl」の画面に遷移する。\n * - 結果が「用途変更」の場合\n * - モーダルダイアログ「co/coBuyNow/coBuyNowChangeUsesModal.isml」を表示する。\n * - 用途変更を許可した場合\n * - 「forceChangeUses」を「true」にして再度「すぐ購入」のAjaxサービスを呼び出す。\n * - 用途変更を許可しなかった場合\n * - ここで終了する。\n *\n * @param {object} buyNowObj - 「すぐ購入」のAjaxサービスに送信するデータを含むオブジェクト。フォーム定義「coBuyNow.xml」に対応する。\n * - `originUrl`: <「すぐ購入」アクション発生元の画面のURL。「/」始まりとする。>\n * - `productId`: <カートに追加する商品のID>\n * - `quantity`: <カートに追加する商品の数量>\n * - `forceChangeUses`: <用途を強制的に変更するか否か>\n * (例) productIdおよびquantityが送信された場合\n * ```js\n * {\n * originUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Product-Show?pid=12567',\n * productId: '12567',\n * quantity: 2,\n * forceChangeUses: false,\n * }\n * (例) queryString, productId, quantityが送信されなかった場合(値はnullとなる)\n * ```js\n * {\n * originUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Product-Show?pid=12567',\n * productId: null,\n * quantity: null,\n * forceChangeUses: false,\n * }\n * ```\n * @returns {void}\n */\nasync function execBuyNow(buyNowObj) {\n // CSRFトークンを取得する\n const csrfObject = getCsrfObject();\n const csrfTokenName = csrfObject.tokenName;\n const csrfTokenValue = csrfObject.token;\n\n // 「すぐ購入」用のFormDataを作成する\n const coBuyNowFormData = new FormData();\n coBuyNowFormData.append('originUrl', buyNowObj.originUrl || '');\n coBuyNowFormData.append('productId', buyNowObj.productId || '');\n coBuyNowFormData.append('quantity', buyNowObj.quantity || '');\n coBuyNowFormData.append(\n 'forceChangeUses',\n buyNowObj.forceChangeUses === true ? 'true' : 'false'\n );\n coBuyNowFormData.append(csrfTokenName, csrfTokenValue);\n\n // 「すぐ購入」フォームの送信先のURLを取得する\n const $coBuyNowPartsInfo = $('#coBuyNowPartsInfo');\n const coBuyNowActionUrl = $coBuyNowPartsInfo.data('url');\n // 「すぐ購入」サービスを呼び出す\n const {response, actionResult} = await doCoBuyNowServiceAction(\n coBuyNowActionUrl,\n coBuyNowFormData\n );\n\n if (actionResult === CO_BUY_NOW_ACTION_RESULT.CHANGE_USES_OK) {\n // --- 「用途を「ご自宅用」に変更することが承認された場合\n // forceChangeUsesをtrueに設定したbuyNowObを新たに作成する\n const reBuyNowObj = {};\n Object.assign(reBuyNowObj, buyNowObj);\n reBuyNowObj.forceChangeUses = true;\n // 本関数を再度呼び出す\n await execBuyNow(reBuyNowObj);\n return;\n }\n let redirectUrl;\n if (\n actionResult === CO_BUY_NOW_ACTION_RESULT.CSRF_FAIL ||\n actionResult === CO_BUY_NOW_ACTION_RESULT.NOT_LOGGED_IN ||\n actionResult === CO_BUY_NOW_ACTION_RESULT.OK\n ) {\n // --- 未ログインまたは「すぐ購入」が可能である場合\n // redirectUrlのURLに移動する\n redirectUrl = response.redirectUrl;\n } else {\n // --- それ以外の場合\n const $coBuyNowInfo = $('#coBuyNowInfo');\n const topPageUrl = $coBuyNowInfo.data('co-top-page-url');\n // 元の画面が存在する場合はそこに、存在しない場合はトップに移動する\n redirectUrl = response.originUrl || topPageUrl || null;\n }\n if (redirectUrl) {\n // 遷移が完了するまで、スピナーは表示したままとする\n $.spinner().start();\n window.location.href = redirectUrl;\n }\n}\n\nmodule.exports = {\n execBuyNow,\n};\n","'use strict';\nvar focusHelper = require('../components/focus');\n\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nfunction getPidValue($el) {\n var pid;\n\n if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\n } else if ($('.product-set-detail').length || $('.product-set').length) {\n pid = $($el).closest('.product-detail').find('.product-id').text();\n } else {\n pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n }\n\n return pid;\n}\n\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nfunction getQuantitySelector($el) {\n var quantitySelected;\n if ($el && $('.set-items').length) {\n quantitySelected = $($el).closest('.product-detail').find('.quantity-select');\n } else if ($el && $('.product-bundle').length) {\n var quantitySelectedModal = $($el).closest('.modal-footer').find('.quantity-select');\n var quantitySelectedPDP = $($el).closest('.bundle-footer').find('.quantity-select');\n if (quantitySelectedModal.val() === undefined) {\n quantitySelected = quantitySelectedPDP;\n } else {\n quantitySelected = quantitySelectedModal;\n }\n } else {\n quantitySelected = $('.quantity-select');\n }\n return quantitySelected;\n}\n\n/**\n * Retrieves the value associated with the Quantity pull-down menu\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {string} - value found in the quantity input\n */\nfunction getQuantitySelected($el) {\n return getQuantitySelector($el).val();\n}\n\n/**\n * Process the attribute values for an attribute that has image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction processSwatchValues(attr, $productContainer, msgs) {\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' +\n attrValue.value + '\"]');\n var $swatchButton = $attrValue.parent();\n\n if (attrValue.selected) {\n $attrValue.addClass('selected');\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n } else {\n $attrValue.removeClass('selected');\n $attrValue.siblings('.selected-assistive-text').empty();\n }\n\n if (attrValue.url) {\n $swatchButton.attr('data-url', attrValue.url);\n } else {\n $swatchButton.removeAttr('data-url');\n }\n\n // Disable if not selectable\n $attrValue.removeClass('selectable unselectable');\n\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\n });\n}\n\n/**\n * Process attribute values associated with an attribute that does not have image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction processNonSwatchValues(attr, $productContainer) {\n var $attr = '[data-attr=\"' + attr.id + '\"]';\n var $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\n $defaultOption.attr('value', attr.resetUrl);\n\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer\n .find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\n $attrValue.attr('value', attrValue.url)\n .removeAttr('disabled');\n\n if (!attrValue.selectable) {\n $attrValue.attr('disabled', true);\n }\n });\n}\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image\n * swatches or not\n *\n * @param {Object} attrs - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction updateAttrs(attrs, $productContainer, msgs) {\n // Currently, the only attribute type that has image swatches is Color.\n var attrsWithSwatches = ['color'];\n\n attrs.forEach(function (attr) {\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\n processSwatchValues(attr, $productContainer, msgs);\n } else {\n processNonSwatchValues(attr, $productContainer);\n }\n });\n}\n\n/**\n * Updates the availability status in the Product Detail Page\n *\n * @param {Object} response - Ajax response object after an\n * attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateAvailability(response, $productContainer) {\n var availabilityValue = '';\n var availabilityMessages = response.product.availability.messages;\n if (!response.product.readyToOrder) {\n availabilityValue = '
  • ' + response.resources.info_selectforstock + '
  • ';\n } else {\n availabilityMessages.forEach(function (message) {\n availabilityValue += '
  • ' + message + '
  • ';\n });\n }\n\n $($productContainer).trigger('product:updateAvailability', {\n product: response.product,\n $productContainer: $productContainer,\n message: availabilityValue,\n resources: response.resources\n });\n}\n\n/**\n * Generates html for product attributes section\n *\n * @param {array} attributes - list of attributes\n * @return {string} - Compiled HTML\n */\nfunction getAttributesHtml(attributes) {\n if (!attributes) {\n return '';\n }\n\n var html = '';\n\n attributes.forEach(function (attributeGroup) {\n if (attributeGroup.ID === 'mainAttributes') {\n attributeGroup.attributes.forEach(function (attribute) {\n html += '
    ' + attribute.label + ': '\n + attribute.value + '
    ';\n });\n }\n });\n\n return html;\n}\n\n/**\n * @typedef UpdatedOptionValue\n * @type Object\n * @property {string} id - Option value ID for look up\n * @property {string} url - Updated option value selection URL\n */\n\n/**\n * @typedef OptionSelectionResponse\n * @type Object\n * @property {string} priceHtml - Updated price HTML code\n * @property {Object} options - Updated Options\n * @property {string} options.id - Option ID\n * @property {UpdatedOptionValue[]} options.values - Option values\n */\n\n/**\n * Updates DOM using post-option selection Ajax response\n *\n * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction updateOptions(optionsHtml, $productContainer) {\n\t// Update options\n $productContainer.find('.product-options').empty().html(optionsHtml);\n}\n\n/**\n * Dynamically creates Bootstrap carousel from response containing images\n * @param {Object[]} imgs - Array of large product images,along with related information\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction createCarousel(imgs, $productContainer) {\n var carousel = $productContainer.find('.carousel');\n $(carousel).carousel('dispose');\n var carouselId = $(carousel).attr('id');\n $(carousel).empty().append('
      ' + $(carousel).data('prev') + '' + $(carousel).data('next') + '');\n for (var i = 0; i < imgs.length; i++) {\n $('
      \"'
      ').appendTo($(carousel).find('.carousel-inner'));\n $('
    1. ').appendTo($(carousel).find('.carousel-indicators'));\n }\n $($(carousel).find('.carousel-item')).first().addClass('active');\n $($(carousel).find('.carousel-indicators > li')).first().addClass('active');\n if (imgs.length === 1) {\n $($(carousel).find('.carousel-indicators, a[class^=\"carousel-control-\"]')).detach();\n }\n $(carousel).carousel();\n $($(carousel).find('.carousel-indicators')).attr('aria-hidden', true);\n}\n\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {Object[]} response.product.images - Product images\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n * attributes have been selected. Used partially to\n * determine whether the Add to Cart button can be enabled\n * @param {jQuery} $productContainer - DOM element for a given product.\n */\nfunction handleVariantResponse(response, $productContainer) {\n var isChoiceOfBonusProducts =\n $productContainer.parents('.choose-bonus-product-dialog').length > 0;\n var isVaraint;\n if (response.product.variationAttributes) {\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n isVaraint = response.product.productType === 'variant';\n if (isChoiceOfBonusProducts && isVaraint) {\n $productContainer.parent('.bonus-product-item')\n .data('pid', response.product.id);\n\n $productContainer.parent('.bonus-product-item')\n .data('ready-to-order', response.product.readyToOrder);\n }\n }\n\n // Update primary images\n var primaryImageUrls = response.product.images.large;\n createCarousel(primaryImageUrls, $productContainer);\n\n // Update pricing\n if (!isChoiceOfBonusProducts) {\n var $priceSelector = $('.prices .price', $productContainer).length\n ? $('.prices .price', $productContainer)\n : $('.prices .price');\n $priceSelector.replaceWith(response.product.price.html);\n }\n\n // Update promotions\n $productContainer.find('.promotions').empty().html(response.product.promotionsHtml);\n\n updateAvailability(response, $productContainer);\n\n if (isChoiceOfBonusProducts) {\n var $selectButton = $productContainer.find('.select-bonus-product');\n $selectButton.trigger('bonusproduct:updateSelectButton', {\n product: response.product, $productContainer: $productContainer\n });\n } else {\n // Enable \"Add to Cart\" button if all required attributes have been selected\n $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n product: response.product, $productContainer: $productContainer\n }).trigger('product:statusUpdate', response.product);\n }\n\n // Update attributes\n $productContainer.find('.main-attributes').empty()\n .html(getAttributesHtml(response.product.attributes));\n}\n\n/**\n * @typespec UpdatedQuantity\n * @type Object\n * @property {boolean} selected - Whether the quantity has been selected\n * @property {string} value - The number of products to purchase\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\n * etc.\n */\n\n/**\n * Updates the quantity DOM elements post Ajax call\n * @param {UpdatedQuantity[]} quantities -\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateQuantities(quantities, $productContainer) {\n if ($productContainer.parent('.bonus-product-item').length <= 0) {\n var optionsHtml = quantities.map(function (quantity) {\n var selected = quantity.selected ? ' selected ' : '';\n return '';\n }).join('');\n getQuantitySelector($productContainer).empty().html(optionsHtml);\n }\n}\n\n/**\n * updates the product view when a product attribute is selected or deselected or when\n * changing quantity\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction attributeSelect(selectedValueUrl, $productContainer) {\n if (selectedValueUrl) {\n $('body').trigger('product:beforeAttributeSelect',\n { url: selectedValueUrl, container: $productContainer });\n\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: function (data) {\n handleVariantResponse(data, $productContainer);\n updateOptions(data.product.optionsHtml, $productContainer);\n updateQuantities(data.product.quantities, $productContainer);\n $('body').trigger('product:afterAttributeSelect',\n { data: data, container: $productContainer });\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @return {string} - The provided URL to use when adding a product to the cart\n */\nfunction getAddToCartUrl() {\n return $('.add-to-cart-url').val();\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseHtml(html) {\n var $html = $('
      ').append($.parseHTML(html));\n\n var body = $html.find('.choice-of-bonus-product');\n var footer = $html.find('.modal-footer').children();\n\n return { body: body, footer: footer };\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @param {Object} data - data object used to fill in dynamic portions of the html\n */\nfunction chooseBonusProducts(data) {\n $('.modal-body').spinner().start();\n\n if ($('#chooseBonusProductModal').length !== 0) {\n $('#chooseBonusProductModal').remove();\n }\n var bonusUrl;\n if (data.bonusChoiceRuleBased) {\n bonusUrl = data.showProductsUrlRuleBased;\n } else {\n bonusUrl = data.showProductsUrlListBased;\n }\n\n var htmlString = ''\n + '
      '\n + ''\n + '
      '\n + ''\n + '
      '\n + '
      '\n + ' ' + data.labels.selectprods + ''\n + ' '\n + '
      '\n + '
      '\n + '
      '\n + '
      '\n + '
      '\n + '
      ';\n $('body').append(htmlString);\n $('.modal-body').spinner().start();\n\n $.ajax({\n url: bonusUrl,\n method: 'GET',\n dataType: 'json',\n success: function (response) {\n var parsedHtml = parseHtml(response.renderedTemplate);\n $('#chooseBonusProductModal .modal-body').empty();\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\n $('#chooseBonusProductModal').modal('show');\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\nfunction handlePostCartAdd(response) {\n $('.minicart').trigger('count:update', response);\n var messageType = response.error ? 'alert-danger' : 'alert-success';\n // show add to cart toast\n if (response.newBonusDiscountLineItem\n && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n chooseBonusProducts(response.newBonusDiscountLineItem);\n } else {\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append(\n '
      '\n );\n }\n\n $('.add-to-cart-messages').append(\n '
      '\n + response.message\n + '
      '\n );\n\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n }, 5000);\n }\n}\n\n/**\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\n * items with their selected variants\n *\n * @return {string[]} - List of selected bundle product item ID's\n */\nfunction getChildProducts() {\n var childProducts = [];\n $('.bundle-item').each(function () {\n childProducts.push({\n pid: $(this).find('.product-id').text(),\n quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\n });\n });\n\n return childProducts.length ? JSON.stringify(childProducts) : [];\n}\n\n/**\n * Retrieve product options\n *\n * @param {jQuery} $productContainer - DOM element for current product\n * @return {string} - Product options and their selected values\n */\nfunction getOptions($productContainer) {\n var options = $productContainer\n .find('.product-option')\n .map(function () {\n var $elOption = $(this).find('.options-select');\n var urlValue = $elOption.val();\n var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\n .data('value-id');\n return {\n optionId: $(this).data('option-id'),\n selectedValueId: selectedValueId\n };\n }).toArray();\n\n return JSON.stringify(options);\n}\n\n/**\n * Makes a call to the server to report the event of adding an item to the cart\n *\n * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false\n */\nfunction miniCartReportingUrl(url) {\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function () {\n // reporting urls hit on the server\n },\n error: function () {\n // no reporting urls hit on the server\n }\n });\n }\n}\n\nmodule.exports = {\n attributeSelect: attributeSelect,\n methods: {\n editBonusProducts: function (data) {\n chooseBonusProducts(data);\n }\n },\n\n focusChooseBonusProductModal: function () {\n $('body').on('shown.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'true');\n $('#chooseBonusProductModal .close').focus();\n });\n },\n\n onClosingChooseBonusProductModal: function () {\n $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'false');\n });\n },\n\n trapChooseBonusProductModalFocus: function () {\n $('body').on('keydown', '#chooseBonusProductModal', function (e) {\n var focusParams = {\n event: e,\n containerSelector: '#chooseBonusProductModal',\n firstElementSelector: '.close',\n lastElementSelector: '.add-bonus-products'\n };\n focusHelper.setTabNextFocus(focusParams);\n });\n },\n\n colorAttribute: function () {\n $(document).on('click', '[data-attr=\"color\"] button', function (e) {\n e.preventDefault();\n\n if ($(this).attr('disabled')) {\n return;\n }\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n\n attributeSelect($(this).attr('data-url'), $productContainer);\n });\n },\n\n selectAttribute: function () {\n $(document).on('change', 'select[class*=\"select-\"], .options-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n attributeSelect(e.currentTarget.value, $productContainer);\n });\n },\n\n availability: function () {\n $(document).on('change', '.quantity-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.modal-content').find('.product-quickview');\n }\n\n if ($('.bundle-items', $productContainer).length === 0) {\n attributeSelect($(e.currentTarget).find('option:selected').data('url'),\n $productContainer);\n }\n });\n },\n\n addToCart: function () {\n $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function () {\n var addToCartUrl;\n var pid;\n var pidsObj;\n var setPids;\n\n $('body').trigger('product:beforeAddToCart', this);\n\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n setPids = [];\n\n $('.product-detail').each(function () {\n if (!$(this).hasClass('product-set-detail')) {\n setPids.push({\n pid: $(this).find('.product-id').text(),\n qty: $(this).find('.quantity-select').val(),\n options: getOptions($(this))\n });\n }\n });\n pidsObj = JSON.stringify(setPids);\n }\n\n pid = getPidValue($(this));\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n }\n\n addToCartUrl = getAddToCartUrl();\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n quantity: getQuantitySelected($(this))\n };\n\n if (!$('.bundle-item').length) {\n form.options = getOptions($productContainer);\n }\n\n $(this).trigger('updateAddToCartFormData', form);\n if (addToCartUrl) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: function (data) {\n handlePostCartAdd(data);\n $('body').trigger('product:afterAddToCart', data);\n $.spinner().stop();\n miniCartReportingUrl(data.reportingURL);\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n });\n },\n selectBonusProduct: function () {\n $(document).on('click', '.select-bonus-product', function () {\n var $choiceOfBonusProduct = $(this).parents('.choice-of-bonus-product');\n var pid = $(this).data('pid');\n var maxPids = $('.choose-bonus-product-dialog').data('total-qty');\n var submittedQty = parseInt($choiceOfBonusProduct.find('.bonus-quantity-select').val(), 10);\n var totalQty = 0;\n $.each($('#chooseBonusProductModal .selected-bonus-products .selected-pid'), function () {\n totalQty += $(this).data('qty');\n });\n totalQty += submittedQty;\n var optionID = $choiceOfBonusProduct.find('.product-option').data('option-id');\n var valueId = $choiceOfBonusProduct.find('.options-select option:selected').data('valueId');\n if (totalQty <= maxPids) {\n var selectedBonusProductHtml = ''\n + '
      '\n + '
      '\n + $choiceOfBonusProduct.find('.product-name').html()\n + '
      '\n + '
      '\n + '
      '\n ;\n $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\n $('.pre-cart-products').html(totalQty);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n } else {\n $('.selected-bonus-products .bonus-summary').addClass('alert-danger');\n }\n });\n },\n removeBonusProduct: function () {\n $(document).on('click', '.selected-pid', function () {\n $(this).remove();\n var $selected = $('#chooseBonusProductModal .selected-bonus-products .selected-pid');\n var count = 0;\n if ($selected.length) {\n $selected.each(function () {\n count += parseInt($(this).data('qty'), 10);\n });\n }\n\n $('.pre-cart-products').html(count);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n });\n },\n enableBonusProductSelection: function () {\n $('body').on('bonusproduct:updateSelectButton', function (e, response) {\n $('button.select-bonus-product', response.$productContainer).attr('disabled',\n (!response.product.readyToOrder || !response.product.available));\n var pid = response.product.id;\n $('button.select-bonus-product', response.$productContainer).data('pid', pid);\n });\n },\n showMoreBonusProducts: function () {\n $(document).on('click', '.show-more-bonus-products', function () {\n var url = $(this).data('url');\n $('.modal-content').spinner().start();\n $.ajax({\n url: url,\n method: 'GET',\n success: function (html) {\n var parsedHtml = parseHtml(html);\n $('.modal-body').append(parsedHtml.body);\n $('.show-more-bonus-products:first').remove();\n $('.modal-content').spinner().stop();\n },\n error: function () {\n $('.modal-content').spinner().stop();\n }\n });\n });\n },\n addBonusProductsToCart: function () {\n $(document).on('click', '.add-bonus-products', function () {\n var $readyToOrderBonusProducts = $('.choose-bonus-product-dialog .selected-pid');\n var queryString = '?pids=';\n var url = $('.choose-bonus-product-dialog').data('addtocarturl');\n var pidsObject = {\n bonusProducts: []\n };\n\n $.each($readyToOrderBonusProducts, function () {\n var qtyOption =\n parseInt($(this)\n .data('qty'), 10);\n\n var option = null;\n if (qtyOption > 0) {\n if ($(this).data('optionid') && $(this).data('option-selected-value')) {\n option = {};\n option.optionId = $(this).data('optionid');\n option.productId = $(this).data('pid');\n option.selectedValueId = $(this).data('option-selected-value');\n }\n pidsObject.bonusProducts.push({\n pid: $(this).data('pid'),\n qty: qtyOption,\n options: [option]\n });\n pidsObject.totalQty = parseInt($('.pre-cart-products').html(), 10);\n }\n });\n queryString += JSON.stringify(pidsObject);\n queryString = queryString + '&uuid=' + $('.choose-bonus-product-dialog').data('uuid');\n queryString = queryString + '&pliuuid=' + $('.choose-bonus-product-dialog').data('pliuuid');\n $.spinner().start();\n $.ajax({\n url: url + queryString,\n method: 'POST',\n success: function (data) {\n $.spinner().stop();\n if (data.error) {\n $('#chooseBonusProductModal').modal('hide');\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('
      ');\n }\n $('.add-to-cart-messages').append(\n '
      '\n + data.errorMessage + '
      '\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n }, 3000);\n } else {\n $('.configure-bonus-product-attributes').html(data);\n $('.bonus-products-step2').removeClass('hidden-xl-down');\n $('#chooseBonusProductModal').modal('hide');\n\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('
      ');\n }\n $('.minicart-quantity').html(data.totalQty);\n $('.add-to-cart-messages').append(\n '
      '\n + data.msgSuccess + '
      '\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n if ($('.cart-page').length) {\n location.reload();\n }\n }, 1500);\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n\n getPidValue: getPidValue,\n getQuantitySelected: getQuantitySelected,\n miniCartReportingUrl: miniCartReportingUrl\n};\n","'use strict';\n\n/**\n * Ajaxでフォームデータ(FormData)をPOST送信し、そのレスポンスデータを返す。\n *\n * 通信時にエラーが発生し、かつリダイレクト情報(redirectUrl)が存在する場合はErrorをスローせず、正常時と同様にレスポンスデータを返す。\n * このとき、redirectUrlにはエラー画面のURLがセットされていることを想定している。\n * 利用側はredirectUrlを適切にハンドリングする。\n * ```js\n * window.location.href = data.redirectUrl;\n * ```\n *\n * 一方で、通信時にエラーが発生し、かつリダイレクト情報(redirectUrl)が存在しない場合はErrorをスローする。\n * 利用側はErrorを適切にハンドリング(キャッチ)する。\n *\n * @param {string} url - フォームデータ(FormData)送信先のURL\n * @param {object} formData - フォームデータ(FormData)\n * @param {boolean} [isMultiPart=false] - `enctype`を`'multipart/form-data'`とするか否か。\n * - `true`の場合: 引数のFormDataをそのまま送信する。結果、`enctype`は`'multipart/form-data'`となる。\n * - `false`の場合: 引数のFormDataをURLSearchParamsに変換して送信する。結果、`enctype`は`'application/x-www-form-urlencoded'`となる。\n * @returns {object} レスポンスのJSONに相当するJavaScriptオブジェクト\n * @throws {Error} 通信時にエラーが発生した、かつリダイレクト情報が存在しない場合\n */\nmodule.exports = async (url, formData, isMultiPart) => {\n let body;\n if (isMultiPart === true) {\n body = formData;\n } else {\n const urlSearchParams = new URLSearchParams();\n // eslint-disable-next-line no-restricted-syntax\n for (const entry of formData.entries()) {\n const key = entry[0];\n const value = entry[1];\n urlSearchParams.append(key, value);\n }\n body = urlSearchParams;\n }\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Cache-Control': 'no-cache',\n 'X-Requested-With': 'XMLHttpRequest',\n },\n body,\n credentials: 'same-origin',\n });\n const data = await response.json();\n if (!response.ok) {\n if (data.redirectUrl) {\n return data;\n }\n // ステータスコード(500など)を含めてエラーをスローする\n throw new Error(response.status);\n }\n return data;\n};\n","'use strict';\n\n/**\n * Ajaxの結果でDOM要素を更新する\n *\n * @param {object} $results - jQuery DOM element\n * @param {string} selector - DOM element to look up in the $results\n */\nfunction updateDom($results, selector) {\n let $updates = $results.find(selector);\n $(selector).empty().html($updates.html());\n}\n\n/**\n * Ajaxの結果を解析し、選択したDOM要素を更新する\n *\n * @param {string} response - Ajax response HTML code\n * @param {string} refreshArea - 更新部分を指定するクラス名\n * @returns {undefined}\n */\nfunction parseResults(response,refreshArea) {\n const $parsedResponse = $(response);\n const selector = refreshArea;\n\n updateDom($parsedResponse, selector);\n}\n\nmodule.exports = parseResults;\n","'use strict';\n\n/**\n * 「すぐ購入」に関するオブジェクトを作成して返す。\n * このオブジェクトは、co/coBuyNow#execBuyNowのパラメーターとして利用する。\n *\n * @param {(string|null)} productId - カートに追加する商品のID。追加しない場合はnullとする。 例: `'12567'`\n * @param {(number|null)} quantity - カートに追加する商品の数量。追加しない場合はnullとする。 例: `2`\n * @returns {object} buyNowObj - 「すぐ購入」のAjaxサービスに送信するデータを含むオブジェクト。フォーム定義「coBuyNow.xml」に対応する。\n * - `originUrl`: <「すぐ購入」アクション発生元の画面のURL。「/」始まりとする。>\n * - `productId`: <カートに追加する商品のID>\n * - `quantity`: <カートに追加する商品の数量>\n * - `forceChangeUses`: <用途を強制的に変更するか否か>\n * ```js\n * {\n * originUrl: '/on/demandware.store/Sites-taneya-Site/ja_JP/Product-Show?pid=12567',\n * productId: '12567',\n * quantity: 2,\n * forceChangeUses: false,\n * }\n * ```\n */\nfunction getBuyNowObj(productId, quantity) {\n // 「すぐ購入」アクション発生元の画面のURL\n const originUrl = `${window.location.pathname}${window.location.search}`;\n const buyNowObj = {\n originUrl,\n productId,\n quantity,\n forceChangeUses: false, // 「用途を強制的に変更する」オプションは「false」とする\n };\n return buyNowObj;\n}\n\nmodule.exports = {\n getBuyNowObj,\n};\n","module.exports = require('swiper/swiper-bundle.js');\n","/**\n * Swiper 8.4.7\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2023 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: January 30, 2023\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Swiper = factory());\n})(this, (function () { 'use strict';\n\n /**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n\n /* eslint-disable no-param-reassign */\n function isObject$1(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n }\n\n function extend$1(target, src) {\n if (target === void 0) {\n target = {};\n }\n\n if (src === void 0) {\n src = {};\n }\n\n Object.keys(src).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject$1(src[key]) && isObject$1(target[key]) && Object.keys(src[key]).length > 0) {\n extend$1(target[key], src[key]);\n }\n });\n }\n\n const ssrDocument = {\n body: {},\n\n addEventListener() {},\n\n removeEventListener() {},\n\n activeElement: {\n blur() {},\n\n nodeName: ''\n },\n\n querySelector() {\n return null;\n },\n\n querySelectorAll() {\n return [];\n },\n\n getElementById() {\n return null;\n },\n\n createEvent() {\n return {\n initEvent() {}\n\n };\n },\n\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n\n setAttribute() {},\n\n getElementsByTagName() {\n return [];\n }\n\n };\n },\n\n createElementNS() {\n return {};\n },\n\n importNode() {\n return null;\n },\n\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n };\n\n function getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend$1(doc, ssrDocument);\n return doc;\n }\n\n const ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n\n pushState() {},\n\n go() {},\n\n back() {}\n\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n\n addEventListener() {},\n\n removeEventListener() {},\n\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n\n };\n },\n\n Image() {},\n\n Date() {},\n\n screen: {},\n\n setTimeout() {},\n\n clearTimeout() {},\n\n matchMedia() {\n return {};\n },\n\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n\n return setTimeout(callback, 0);\n },\n\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n\n clearTimeout(id);\n }\n\n };\n\n function getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend$1(win, ssrWindow);\n return win;\n }\n\n /**\n * Dom7 4.0.4\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2022, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: January 11, 2022\n */\n /* eslint-disable no-proto */\n\n function makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n }\n\n class Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n }\n\n function arrayFlat(arr) {\n if (arr === void 0) {\n arr = [];\n }\n\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n }\n\n function arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n }\n\n function arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n }\n\n\n function qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n }\n\n function $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(' c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n }\n\n function removeClass() {\n for (var _len2 = arguments.length, classes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n classes[_key2] = arguments[_key2];\n }\n\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n }\n\n function toggleClass() {\n for (var _len3 = arguments.length, classes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n classes[_key3] = arguments[_key3];\n }\n\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n }\n\n function hasClass() {\n for (var _len4 = arguments.length, classes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n classes[_key4] = arguments[_key4];\n }\n\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n }\n\n function attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n }\n\n function removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n }\n\n function transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n }\n\n function transition$1(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n }\n\n function on() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n }\n\n function off() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n }\n\n function trigger() {\n const window = getWindow();\n\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n }\n\n function transitionEnd$1(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n }\n\n function outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n }\n\n function outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n }\n\n function offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n }\n\n function styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n }\n\n function css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n }\n\n function each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n }\n\n function filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n }\n\n function html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n }\n\n function text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n }\n\n function is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n }\n\n function index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n }\n\n function eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n }\n\n function append() {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < arguments.length; k += 1) {\n newChild = k < 0 || arguments.length <= k ? undefined : arguments[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n }\n\n function prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n }\n\n function next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n }\n\n function nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n }\n\n function prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n }\n\n function prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n }\n\n function parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n }\n\n function parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n }\n\n function closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n }\n\n function find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n }\n\n function children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n }\n\n function remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n }\n\n const Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition: transition$1,\n on,\n off,\n trigger,\n transitionEnd: transitionEnd$1,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n };\n Object.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n });\n\n function deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n }\n\n function nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n\n return setTimeout(callback, delay);\n }\n\n function now() {\n return Date.now();\n }\n\n function getComputedStyle$1(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n }\n\n function getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle$1(el);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n }\n\n function isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n }\n\n function isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n }\n\n function extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n }\n\n function setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n }\n\n function animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n }\n\n let support;\n\n function calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n }\n\n function getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n }\n\n let deviceCached;\n\n function calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n }\n\n function getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n }\n\n let browser;\n\n function calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n }\n\n function getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n }\n\n function Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n }\n\n function Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n }\n\n /* eslint-disable no-underscore-dangle */\n var eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n\n function onceHandler() {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n };\n\n function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n }\n\n function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.$el.hasClass(backFaceHiddenClass);\n\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.$el.addClass(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.$el.removeClass(backFaceHiddenClass);\n }\n }\n }\n\n function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || $([])).each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n }\n\n function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n }\n\n function updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n }\n\n function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n }\n\n function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n }\n\n function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n }\n\n function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n }\n\n var update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n };\n\n function getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n }\n\n function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n }\n\n function minTranslate() {\n return -this.snapGrid[0];\n }\n\n function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n }\n\n function translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n }\n\n var translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n };\n\n function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n }\n\n function transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n }\n\n function transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n }\n\n function transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n }\n\n var transition = {\n setTransition,\n transitionStart,\n transitionEnd\n };\n\n function slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex]; // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n } // Update progress\n\n\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n\n return true;\n }\n\n function slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideNext(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slidePrev(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideReset(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideToClosest(speed, runCallbacks, internal, threshold) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (threshold === void 0) {\n threshold = 0.5;\n }\n\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n }\n\n function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n\n var slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n };\n\n function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length && swiper.params.loopedSlidesLimit) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < swiper.loopedSlides; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlides.push(slides.eq(index)[0]);\n prependSlides.unshift(slides.eq(slides.length - index - 1)[0]);\n }\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n }\n\n function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n }\n\n function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n }\n\n var loop = {\n loopCreate,\n loopFix,\n loopDestroy\n };\n\n function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n }\n\n function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n }\n\n var grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n };\n\n function closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n\n if (!found && !el.getRootNode) {\n return null;\n }\n\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n }\n\n function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ''; // eslint-disable-next-line\n\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n $targetEl = $(eventPath[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, $targetEl[0]) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n\n if ($targetEl.is(data.focusableElements)) {\n preventDefault = false;\n\n if ($targetEl[0].nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n\n swiper.emit('touchStart', e);\n }\n\n function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n if (!$(e.target).is(data.focusableElements)) {\n swiper.allowClick = false;\n }\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n }\n\n function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n }\n\n function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n }\n\n function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n }\n\n function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n }\n\n let dummyEventAttached = false;\n\n function dummyEventListener() {}\n\n const events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n };\n\n function attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n }\n\n function detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n }\n\n var events$1 = {\n attachEvents,\n detachEvents\n };\n\n const isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n };\n\n function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n } // Toggle navigation, pagination, scrollbar\n\n\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n }\n\n function getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n }\n\n var breakpoints = {\n setBreakpoint,\n getBreakpoint\n };\n\n function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n }\n\n function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n }\n\n function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n }\n\n var classes = {\n addClasses,\n removeClasses\n };\n\n function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n }\n\n function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n }\n\n var images = {\n loadImage,\n preloadImages\n };\n\n function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n }\n\n var checkOverflow$1 = {\n checkOverflow\n };\n\n var defaults = {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopedSlidesLimit: true,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n };\n\n function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n }\n\n /* eslint no-param-reassign: \"off\" */\n const prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes,\n images\n };\n const extendedDefaults = {};\n\n class Swiper {\n constructor() {\n let el;\n let params;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n }); // eslint-disable-next-line no-constructor-return\n\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n // eslint-disable-next-line no-constructor-return\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n\n if (exact === void 0) {\n exact = false;\n }\n\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n\n if (swiper.rtl) {\n swiper.$el.addClass(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n\n swiper.update();\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n if (!$el.children) {\n return $($el).children(getWrapperSelector());\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n }\n\n Object.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n });\n Swiper.use([Resize, Observer]);\n\n function Virtual(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0\n }\n });\n let cssModeTimeout;\n swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: []\n };\n\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n\n const $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $(`
      ${slide}
      `);\n if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n if (params.cache) swiper.virtual.cache[index] = $slideEl;\n return $slideEl;\n }\n\n function update(force) {\n const {\n slidesPerView,\n slidesPerGroup,\n centeredSlides\n } = swiper.params;\n const {\n addSlidesBefore,\n addSlidesAfter\n } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n offset: previousOffset\n } = swiper.virtual;\n\n if (!swiper.params.cssMode) {\n swiper.updateActiveIndex();\n }\n\n const activeIndex = swiper.activeIndex || 0;\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n let slidesAfter;\n let slidesBefore;\n\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = slidesPerGroup + addSlidesBefore;\n }\n\n const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n Object.assign(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid\n });\n\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n\n emit('virtualUpdate');\n }\n\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.css(offsetProp, `${offset}px`);\n }\n\n swiper.updateProgress();\n emit('virtualUpdate');\n return;\n }\n\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\n from,\n to,\n slides: function getSlides() {\n const slidesToRender = [];\n\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n\n return slidesToRender;\n }()\n });\n\n if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n } else {\n emit('virtualUpdate');\n }\n\n return;\n }\n\n const prependIndexes = [];\n const appendIndexes = [];\n\n if (force) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`).remove();\n }\n }\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n if (i >= from && i <= to) {\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(i);\n } else {\n if (i > previousTo) appendIndexes.push(i);\n if (i < previousFrom) prependIndexes.push(i);\n }\n }\n }\n\n appendIndexes.forEach(index => {\n swiper.$wrapperEl.append(renderSlide(slides[index], index));\n });\n prependIndexes.sort((a, b) => b - a).forEach(index => {\n swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n onRendered();\n }\n\n function appendSlide(slides) {\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n\n update(true);\n }\n\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach(cachedIndex => {\n const $cachedEl = cache[cachedIndex];\n const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n\n if (cachedElIndex) {\n $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\n }\n\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\n\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n swiper.virtual.slides.splice(slidesIndexes, 1);\n\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n\n function removeAllSlides() {\n swiper.virtual.slides = [];\n\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n\n update(true);\n swiper.slideTo(0, 0);\n }\n\n on('beforeInit', () => {\n if (!swiper.params.virtual.enabled) return;\n swiper.virtual.slides = swiper.params.virtual.slides;\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n\n if (!swiper.params.initialSlide) {\n update();\n }\n });\n on('setTranslate', () => {\n if (!swiper.params.virtual.enabled) return;\n\n if (swiper.params.cssMode && !swiper._immediateVirtual) {\n clearTimeout(cssModeTimeout);\n cssModeTimeout = setTimeout(() => {\n update();\n }, 100);\n } else {\n update();\n }\n });\n on('init update resize', () => {\n if (!swiper.params.virtual.enabled) return;\n\n if (swiper.params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n }\n });\n Object.assign(swiper.virtual, {\n appendSlide,\n prependSlide,\n removeSlide,\n removeAllSlides,\n update\n });\n }\n\n /* eslint-disable consistent-return */\n function Keyboard(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40; // Directions locks\n\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false; // Check that swiper should be inside of visible area of window\n\n if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n\n const $el = swiper.$el;\n const swiperWidth = $el[0].clientWidth;\n const swiperHeight = $el[0].clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n if (!inView) return undefined;\n }\n\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n\n emit('keyPress', kc);\n return undefined;\n }\n\n function enable() {\n if (swiper.keyboard.enabled) return;\n $(document).on('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n\n function disable() {\n if (!swiper.keyboard.enabled) return;\n $(document).off('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n }\n\n /* eslint-disable consistent-return */\n function Mousewheel(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n // Legacy\n\n if ('detail' in e) {\n sY = e.detail;\n }\n\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n } // side scrolling on FF with DOMMouseScroll\n\n\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n } // Fall-back if spin cannot be determined\n\n\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n } // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n\n\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n } // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n\n\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n } // If you got here is because an animation has been triggered so store the current time\n\n\n lastScrollTime = new window.Date().getTime(); // Return false as a default\n\n return false;\n }\n\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n\n return false;\n }\n\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n const params = swiper.params.mousewheel;\n\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n\n let target = swiper.$el;\n\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n\n if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n\n if (delta === 0) return true;\n if (params.invert) delta = -delta; // Get the scroll positions\n\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n }; // Keep the most recent events\n\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent); // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n } // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n\n\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n } // Emit event\n\n\n if (!ignoreWheelEvents) emit('scroll', e); // Stop autoplay\n\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions\n\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n\n function events(method) {\n let target = swiper.$el;\n\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n\n target[method]('mouseenter', handleMouseEnter);\n target[method]('mouseleave', handleMouseLeave);\n target[method]('wheel', handle);\n }\n\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n\n if (swiper.mousewheel.enabled) return false;\n events('on');\n swiper.mousewheel.enabled = true;\n return true;\n }\n\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n\n if (!swiper.mousewheel.enabled) return false;\n events('off');\n swiper.mousewheel.enabled = false;\n return true;\n }\n\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n }\n\n function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n }\n\n function Navigation(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.navigation.navigationDisabledClass);\n init();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.navigation.navigationDisabledClass);\n destroy();\n };\n\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n }\n\n function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n }\n\n function Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n }\n\n function setSideBullets($bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el; // Current/Total\n\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n } // Types\n\n\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0);\n\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n\n bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n if ($el.length > 1) {\n bullets.each(bullet => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n\n if (params.type === 'progressbar') {\n let progressbarDirection;\n\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n\n $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\">`;\n }\n }\n\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n if ($el.length > 1) {\n $el = $el.filter(el => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0]\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.pagination;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const {\n $el\n } = swiper.pagination;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n\n if (swiper.pagination.$el) {\n swiper.pagination.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n }\n\n init();\n render();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n\n if (swiper.pagination.$el) {\n swiper.pagination.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n }\n\n destroy();\n };\n\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n }\n\n function Scrollbar(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null,\n $el: null,\n $dragEl: null\n };\n\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl,\n progress\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n\n if (rtl) {\n newPos = -newPos;\n\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n\n if (params.hide) {\n clearTimeout(timeout);\n $el[0].style.opacity = 1;\n timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n }\n\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n }\n\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function getPointerPosition(e) {\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n }\n\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n }\n\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n $el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n setDragPosition(e);\n clearTimeout(dragTimeout);\n $el.transition(0);\n\n if (params.hide) {\n $el.css('opacity', 1);\n }\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n\n emit('scrollbarDragStart', e);\n }\n\n function onDragMove(e) {\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n emit('scrollbarDragMove', e);\n }\n\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n\n emit('scrollbarDragEnd', e);\n\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n\n function events(method) {\n const {\n scrollbar,\n touchEventsTouch,\n touchEventsDesktop,\n params,\n support\n } = swiper;\n const $el = scrollbar.$el;\n if (!$el) return;\n const target = $el[0];\n const activeListener = support.passiveListener && params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\n if (!support.touch) {\n target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n } else {\n target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n }\n }\n\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n\n function init() {\n const {\n scrollbar,\n $el: $swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let $el = $(params.el);\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n\n if ($dragEl.length === 0) {\n $dragEl = $(`
      `);\n $el.append($dragEl);\n }\n\n Object.assign(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0]\n });\n\n if (params.draggable) {\n enableDraggable();\n }\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.scrollbar;\n const $el = swiper.scrollbar.$el;\n\n if ($el) {\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n }\n\n disableDraggable();\n }\n\n on('init', () => {\n if (swiper.params.scrollbar.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.scrollbar;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass);\n\n if (swiper.scrollbar.$el) {\n swiper.scrollbar.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n\n init();\n updateSize();\n setTranslate();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass);\n\n if (swiper.scrollbar.$el) {\n swiper.scrollbar.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n\n destroy();\n };\n\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy\n });\n }\n\n function Parallax(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n parallax: {\n enabled: false\n }\n });\n\n const setTransform = (el, progress) => {\n const {\n rtl\n } = swiper;\n const $el = $(el);\n const rtlFactor = rtl ? -1 : 1;\n const p = $el.attr('data-swiper-parallax') || '0';\n let x = $el.attr('data-swiper-parallax-x');\n let y = $el.attr('data-swiper-parallax-y');\n const scale = $el.attr('data-swiper-parallax-scale');\n const opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n $el[0].style.opacity = currentOpacity;\n }\n\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform(`translate3d(${x}, ${y}, 0px)`);\n } else {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n }\n };\n\n const setTranslate = () => {\n const {\n $el,\n slides,\n progress,\n snapGrid\n } = swiper;\n $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, progress);\n });\n slides.each((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, slideProgress);\n });\n });\n };\n\n const setTransition = function (duration) {\n if (duration === void 0) {\n duration = swiper.params.speed;\n }\n\n const {\n $el\n } = swiper;\n $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(parallaxEl => {\n const $parallaxEl = $(parallaxEl);\n let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\n };\n\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n }\n\n function Zoom(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n });\n swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let gesturesEnabled;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const gesture = {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.$imageEl ? gesture.$imageEl[0] : undefined;\n const slideEl = gesture.$slideEl ? gesture.$slideEl[0] : undefined;\n emit('zoomChange', value, imageEl, slideEl);\n }\n\n scale = value;\n }\n\n });\n\n function getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) return 1;\n const x1 = e.targetTouches[0].pageX;\n const y1 = e.targetTouches[0].pageY;\n const x2 = e.targetTouches[1].pageX;\n const y2 = e.targetTouches[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n } // Events\n\n\n function onGestureStart(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n\n if (!support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n\n if (gesture.$imageEl) {\n gesture.$imageEl.transition(0);\n }\n\n isScaling = true;\n }\n\n function onGestureChange(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n if (e.type === 'gesturechange') onGestureStart(e);\n return;\n }\n\n if (support.gestures) {\n zoom.scale = e.scale * currentScale;\n } else {\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n }\n\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n\n gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function onGestureEnd(e) {\n const device = swiper.device;\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {\n return;\n }\n\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n }\n\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n }\n\n function onTouchMove(e) {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) return;\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n } // Define if we need image drag\n\n\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!image.isMoved && !isScaling) {\n if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n image.isTouched = false;\n return;\n }\n\n if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n image.isTouched = false;\n return;\n }\n }\n\n if (e.cancelable) {\n e.preventDefault();\n }\n\n e.stopPropagation();\n image.isMoved = true;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n } // Velocity\n\n\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY; // Fix duration\n\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY; // Define if we need image drag\n\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n if (gesture.$imageEl) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n }\n\n if (gesture.$imageWrapEl) {\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n }\n\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (e && e.target) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n }\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n\n gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left + window.scrollX;\n offsetY = gesture.$slideEl.offset().top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n\n gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n gesture.$slideEl = undefined;\n } // Toggle Zoom\n\n\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n\n function getListeners() {\n const support = swiper.support;\n const passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = support.passiveListener ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n function getSlideSelector() {\n return `.${swiper.params.slideClass}`;\n }\n\n function toggleGestures(method) {\n const {\n passiveListener\n } = getListeners();\n const slideSelector = getSlideSelector();\n swiper.$wrapperEl[method]('gesturestart', slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl[method]('gesturechange', slideSelector, onGestureChange, passiveListener);\n swiper.$wrapperEl[method]('gestureend', slideSelector, onGestureEnd, passiveListener);\n }\n\n function enableGestures() {\n if (gesturesEnabled) return;\n gesturesEnabled = true;\n toggleGestures('on');\n }\n\n function disableGestures() {\n if (!gesturesEnabled) return;\n gesturesEnabled = false;\n toggleGestures('off');\n } // Attach/Detach Events\n\n\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const support = swiper.support;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.on(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n const support = swiper.support;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.off(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd();\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n }\n\n function Lazy(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n lazy: {\n checkInView: false,\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n scrollingElement: '',\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader'\n }\n });\n swiper.lazy = {};\n let scrollHandlerAttached = false;\n let initialImageLoaded = false;\n\n function loadInSlide(index, loadInDuplicate) {\n if (loadInDuplicate === void 0) {\n loadInDuplicate = true;\n }\n\n const params = swiper.params.lazy;\n if (typeof index === 'undefined') return;\n if (swiper.slides.length === 0) return;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n const $slideEl = isVirtual ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`) : swiper.slides.eq(index);\n const $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n\n if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n $images.push($slideEl[0]);\n }\n\n if ($images.length === 0) return;\n $images.each(imageEl => {\n const $imageEl = $(imageEl);\n $imageEl.addClass(params.loadingClass);\n const background = $imageEl.attr('data-background');\n const src = $imageEl.attr('data-src');\n const srcset = $imageEl.attr('data-srcset');\n const sizes = $imageEl.attr('data-sizes');\n const $pictureEl = $imageEl.parent('picture');\n swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;\n\n if (background) {\n $imageEl.css('background-image', `url(\"${background}\")`);\n $imageEl.removeAttr('data-background');\n } else {\n if (srcset) {\n $imageEl.attr('srcset', srcset);\n $imageEl.removeAttr('data-srcset');\n }\n\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n\n if ($pictureEl.length) {\n $pictureEl.children('source').each(sourceEl => {\n const $source = $(sourceEl);\n\n if ($source.attr('data-srcset')) {\n $source.attr('srcset', $source.attr('data-srcset'));\n $source.removeAttr('data-srcset');\n }\n });\n }\n\n if (src) {\n $imageEl.attr('src', src);\n $imageEl.removeAttr('data-src');\n }\n }\n\n $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n $slideEl.find(`.${params.preloaderClass}`).remove();\n\n if (swiper.params.loop && loadInDuplicate) {\n const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n loadInSlide(originalSlide.index(), false);\n } else {\n const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n loadInSlide(duplicatedSlide.index(), false);\n }\n }\n\n emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n });\n emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n }\n\n function load() {\n const {\n $wrapperEl,\n params: swiperParams,\n slides,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n const params = swiperParams.lazy;\n let slidesPerView = swiperParams.slidesPerView;\n\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n\n function slideExist(index) {\n if (isVirtual) {\n if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`).length) {\n return true;\n }\n } else if (slides[index]) return true;\n\n return false;\n }\n\n function slideIndex(slideEl) {\n if (isVirtual) {\n return $(slideEl).attr('data-swiper-slide-index');\n }\n\n return $(slideEl).index();\n }\n\n if (!initialImageLoaded) initialImageLoaded = true;\n\n if (swiper.params.watchSlidesProgress) {\n $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each(slideEl => {\n const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n loadInSlide(index);\n });\n } else if (slidesPerView > 1) {\n for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n loadInSlide(activeIndex);\n }\n\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {\n const amount = params.loadPrevNextAmount;\n const spv = Math.ceil(slidesPerView);\n const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides\n\n for (let i = activeIndex + spv; i < maxIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n } // Prev Slides\n\n\n for (let i = minIndex; i < activeIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n if (nextSlide.length > 0) loadInSlide(slideIndex(nextSlide));\n const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n if (prevSlide.length > 0) loadInSlide(slideIndex(prevSlide));\n }\n }\n }\n\n function checkInViewOnLoad() {\n const window = getWindow();\n if (!swiper || swiper.destroyed) return;\n const $scrollElement = swiper.params.lazy.scrollingElement ? $(swiper.params.lazy.scrollingElement) : $(window);\n const isWindow = $scrollElement[0] === window;\n const scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;\n const scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;\n const swiperOffset = swiper.$el.offset();\n const {\n rtlTranslate: rtl\n } = swiper;\n let inView = false;\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n const passiveListener = swiper.touchEvents.start === 'touchstart' && swiper.support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n\n if (inView) {\n load();\n $scrollElement.off('scroll', checkInViewOnLoad, passiveListener);\n } else if (!scrollHandlerAttached) {\n scrollHandlerAttached = true;\n $scrollElement.on('scroll', checkInViewOnLoad, passiveListener);\n }\n }\n\n on('beforeInit', () => {\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n });\n on('init', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('scroll', () => {\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.freeMode.sticky) {\n load();\n }\n });\n on('scrollbarDragMove resize _freeModeNoMomentumRelease', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('transitionStart', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !initialImageLoaded) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n }\n });\n on('transitionEnd', () => {\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('slideChange', () => {\n const {\n lazy,\n cssMode,\n watchSlidesProgress,\n touchReleaseOnEdges,\n resistanceRatio\n } = swiper.params;\n\n if (lazy.enabled && (cssMode || watchSlidesProgress && (touchReleaseOnEdges || resistanceRatio === 0))) {\n load();\n }\n });\n on('destroy', () => {\n if (!swiper.$el) return;\n swiper.$el.find(`.${swiper.params.lazy.loadingClass}`).removeClass(swiper.params.lazy.loadingClass);\n });\n Object.assign(swiper.lazy, {\n load,\n loadInSlide\n });\n }\n\n /* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n function Controller(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n\n }\n });\n swiper.controller = {\n control: undefined\n };\n\n function LinearSpline(x, y) {\n const binarySearch = function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n\n return maxIndex;\n };\n }();\n\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n\n let i1;\n let i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n\n return this;\n } // xxx: for now i will just save one spline function to to\n\n\n function getInterpolateFunction(c) {\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n }\n\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n }\n\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n\n if (duration !== 0) {\n c.transitionStart();\n\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n\n c.$wrapperEl.transitionEnd(() => {\n if (!controlled) return;\n\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n\n c.transitionEnd();\n });\n }\n }\n\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n\n function removeSpline() {\n if (!swiper.controller.control) return;\n\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n\n on('beforeInit', () => {\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition\n });\n }\n\n function A11y(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null\n }\n });\n swiper.a11y = {\n clicked: false\n };\n let liveRegion = null;\n\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n }\n\n function getRandomNumber(size) {\n if (size === void 0) {\n size = 16;\n }\n\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n\n function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n }\n\n function makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n }\n\n function addElRole($el, role) {\n $el.attr('role', role);\n }\n\n function addElRoleDescription($el, description) {\n $el.attr('aria-roledescription', description);\n }\n\n function addElControls($el, controls) {\n $el.attr('aria-controls', controls);\n }\n\n function addElLabel($el, label) {\n $el.attr('aria-label', label);\n }\n\n function addElId($el, id) {\n $el.attr('id', id);\n }\n\n function addElLive($el, live) {\n $el.attr('aria-live', live);\n }\n\n function disableEl($el) {\n $el.attr('aria-disabled', true);\n }\n\n function enableEl($el) {\n $el.attr('aria-disabled', false);\n }\n\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const $targetEl = $(e.target);\n\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n\n if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {\n $targetEl[0].click();\n }\n }\n\n function updateNavigation() {\n if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n disableEl($prevEl);\n makeElNotFocusable($prevEl);\n } else {\n enableEl($prevEl);\n makeElFocusable($prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n disableEl($nextEl);\n makeElNotFocusable($nextEl);\n } else {\n enableEl($nextEl);\n makeElFocusable($nextEl);\n }\n }\n }\n\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.each(bulletEl => {\n const $bulletEl = $(bulletEl);\n\n if (swiper.params.pagination.clickable) {\n makeElFocusable($bulletEl);\n\n if (!swiper.params.pagination.renderBullet) {\n addElRole($bulletEl, 'button');\n addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n }\n }\n\n if ($bulletEl.is(`.${swiper.params.pagination.bulletActiveClass}`)) {\n $bulletEl.attr('aria-current', 'true');\n } else {\n $bulletEl.removeAttr('aria-current');\n }\n });\n }\n\n const initNavEl = ($el, wrapperId, message) => {\n makeElFocusable($el);\n\n if ($el[0].tagName !== 'BUTTON') {\n addElRole($el, 'button');\n $el.on('keydown', onEnterOrSpaceKey);\n }\n\n addElLabel($el, message);\n addElControls($el, wrapperId);\n };\n\n const handlePointerDown = () => {\n swiper.a11y.clicked = true;\n };\n\n const handlePointerUp = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (!swiper.destroyed) {\n swiper.a11y.clicked = false;\n }\n });\n });\n };\n\n const handleFocus = e => {\n if (swiper.a11y.clicked) return;\n const slideEl = e.target.closest(`.${swiper.params.slideClass}`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n if (isActive || isVisible) return;\n if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;\n\n if (swiper.isHorizontal()) {\n swiper.el.scrollLeft = 0;\n } else {\n swiper.el.scrollTop = 0;\n }\n\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n };\n\n const initSlides = () => {\n const params = swiper.params.a11y;\n\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n }\n\n if (params.slideRole) {\n addElRole($(swiper.slides), params.slideRole);\n }\n\n const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length;\n\n if (params.slideLabelMessage) {\n swiper.slides.each((slideEl, index) => {\n const $slideEl = $(slideEl);\n const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel($slideEl, ariaLabelMessage);\n });\n }\n };\n\n const init = () => {\n const params = swiper.params.a11y;\n swiper.$el.append(liveRegion); // Container\n\n const $containerEl = swiper.$el;\n\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n }\n\n if (params.containerMessage) {\n addElLabel($containerEl, params.containerMessage);\n } // Wrapper\n\n\n const $wrapperEl = swiper.$wrapperEl;\n const wrapperId = params.id || $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId($wrapperEl, wrapperId);\n addElLive($wrapperEl, live); // Slide\n\n initSlides(); // Navigation\n\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl && $nextEl.length) {\n initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n }\n\n if ($prevEl && $prevEl.length) {\n initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n } // Tab focus\n\n\n swiper.$el.on('focus', handleFocus, true);\n swiper.$el.on('pointerdown', handlePointerDown, true);\n swiper.$el.on('pointerup', handlePointerUp, true);\n };\n\n function destroy() {\n if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl) {\n $nextEl.off('keydown', onEnterOrSpaceKey);\n }\n\n if ($prevEl) {\n $prevEl.off('keydown', onEnterOrSpaceKey);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n } // Tab focus\n\n\n swiper.$el.off('focus', handleFocus, true);\n swiper.$el.off('pointerdown', handlePointerDown, true);\n swiper.$el.off('pointerup', handlePointerUp, true);\n }\n\n on('beforeInit', () => {\n liveRegion = $(``);\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n });\n on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n if (!swiper.params.a11y.enabled) return;\n initSlides();\n });\n on('fromEdge toEdge afterInit lock unlock', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n }\n\n function History(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides',\n keepQuery: false\n }\n });\n let initialized = false;\n let paths = {};\n\n const slugify = text => {\n return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n };\n\n const getPathValues = urlOverride => {\n const window = getWindow();\n let location;\n\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n\n const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return {\n key,\n value\n };\n };\n\n const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n\n const slide = swiper.slides.eq(index);\n let value = slugify(slide.attr('data-history'));\n\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key}/${value}`;\n } else if (!location.pathname.includes(key)) {\n value = `${key}/${value}`;\n }\n\n if (swiper.params.history.keepQuery) {\n value += location.search;\n }\n\n const currentState = window.history.state;\n\n if (currentState && currentState.value === value) {\n return;\n }\n\n if (swiper.params.history.replaceState) {\n window.history.replaceState({\n value\n }, null, value);\n } else {\n window.history.pushState({\n value\n }, null, value);\n }\n };\n\n const scrollToSlide = (speed, value, runCallbacks) => {\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHistory = slugify(slide.attr('data-history'));\n\n if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, paths.value, false);\n };\n\n const init = () => {\n const window = getWindow();\n if (!swiper.params.history) return;\n\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) return;\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n\n const destroy = () => {\n const window = getWindow();\n\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\n };\n\n on('init', () => {\n if (swiper.params.history.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.history.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n }\n\n function HashNavigation(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n on\n } = _ref;\n let initialized = false;\n const document = getDocument();\n const window = getWindow();\n extendParams({\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false\n }\n });\n\n const onHashChange = () => {\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`).index();\n if (typeof newIndex === 'undefined') return;\n swiper.slideTo(newIndex);\n }\n };\n\n const setHash = () => {\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n\n if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, `#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || '');\n emit('hashSet');\n } else {\n const slide = swiper.slides.eq(swiper.activeIndex);\n const hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n emit('hashSet');\n }\n };\n\n const init = () => {\n if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n initialized = true;\n const hash = document.location.hash.replace('#', '');\n\n if (hash) {\n const speed = 0;\n\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n\n if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n\n if (swiper.params.hashNavigation.watchState) {\n $(window).on('hashchange', onHashChange);\n }\n };\n\n const destroy = () => {\n if (swiper.params.hashNavigation.watchState) {\n $(window).off('hashchange', onHashChange);\n }\n };\n\n on('init', () => {\n if (swiper.params.hashNavigation.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.hashNavigation.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHash();\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHash();\n }\n });\n }\n\n /* eslint no-underscore-dangle: \"off\" */\n function Autoplay(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n let timeout;\n swiper.autoplay = {\n running: false,\n paused: false\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n\n function run() {\n if (!swiper.size) {\n swiper.autoplay.running = false;\n swiper.autoplay.paused = false;\n return;\n }\n\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n\n clearTimeout(timeout);\n timeout = nextTick(() => {\n let autoplayResult;\n\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isBeginning) {\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isEnd) {\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n\n if (swiper.params.cssMode && swiper.autoplay.running) run();else if (autoplayResult === false) {\n run();\n }\n }, delay);\n }\n\n function start() {\n if (typeof timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n emit('autoplayStart');\n run();\n return true;\n }\n\n function stop() {\n if (!swiper.autoplay.running) return false;\n if (typeof timeout === 'undefined') return false;\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n swiper.autoplay.running = false;\n emit('autoplayStop');\n return true;\n }\n\n function pause(speed) {\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (timeout) clearTimeout(timeout);\n swiper.autoplay.paused = true;\n\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n run();\n } else {\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd);\n });\n }\n }\n\n function onVisibilityChange() {\n const document = getDocument();\n\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n pause();\n }\n\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n run();\n swiper.autoplay.paused = false;\n }\n }\n\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== swiper.$wrapperEl[0]) return;\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n swiper.autoplay.paused = false;\n\n if (!swiper.autoplay.running) {\n stop();\n } else {\n run();\n }\n }\n\n function onMouseEnter() {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n emit('autoplayPause');\n pause();\n }\n\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n }\n\n function onMouseLeave() {\n if (swiper.params.autoplay.disableOnInteraction) {\n return;\n }\n\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n run();\n }\n\n function attachMouseEvents() {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.$el.on('mouseenter', onMouseEnter);\n swiper.$el.on('mouseleave', onMouseLeave);\n }\n }\n\n function detachMouseEvents() {\n swiper.$el.off('mouseenter', onMouseEnter);\n swiper.$el.off('mouseleave', onMouseLeave);\n }\n\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n start();\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n attachMouseEvents();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n stop();\n }\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n }\n });\n on('touchEnd', () => {\n if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n run();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n\n if (swiper.autoplay.running) {\n stop();\n }\n\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n Object.assign(swiper.autoplay, {\n pause,\n run,\n start,\n stop\n });\n }\n\n function Thumb(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n\n const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;\n }\n\n swiper.slideTo(slideToIndex);\n }\n\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView; // Activate thumbs\n\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n\n if (thumbsSwiper.params.loop) {\n if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n thumbsSwiper.loopFix(); // eslint-disable-next-line\n\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n } // Find actual thumbs index to slide to\n\n\n const prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n const nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n\n if (typeof prevThumbsIndex === 'undefined') {\n newThumbsIndex = nextThumbsIndex;\n } else if (typeof nextThumbsIndex === 'undefined') {\n newThumbsIndex = prevThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = nextThumbsIndex;\n } else {\n newThumbsIndex = prevThumbsIndex;\n }\n\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ;\n\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n init();\n update(true);\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n }\n\n function freeMode(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n once\n } = _ref;\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n\n function onTouchStart() {\n const translate = swiper.getTranslate();\n swiper.setTranslate(translate);\n swiper.setTransition(0);\n swiper.touchEventsData.velocities.length = 0;\n swiper.freeMode.onTouchEnd({\n currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n });\n }\n\n function onTouchMove() {\n const {\n touchEventsData: data,\n touches\n } = swiper; // Velocity\n\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n\n function onTouchEnd(_ref2) {\n let {\n currentPos\n } = _ref2;\n const {\n params,\n $wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper; // Time diff\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n\n return;\n }\n\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n } // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n\n\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n\n newPosition = -newPosition;\n }\n\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n } // Fix duration\n\n\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n\n Object.assign(swiper, {\n freeMode: {\n onTouchStart,\n onTouchMove,\n onTouchEnd\n }\n });\n }\n\n function Grid(_ref) {\n let {\n swiper,\n extendParams\n } = _ref;\n extendParams({\n grid: {\n rows: 1,\n fill: 'column'\n }\n });\n let slidesNumberEvenToRows;\n let slidesPerRow;\n let numFullColumns;\n\n const initSlides = slidesLength => {\n const {\n slidesPerView\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid;\n slidesPerRow = slidesNumberEvenToRows / rows;\n numFullColumns = Math.floor(slidesLength / rows);\n\n if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n }\n\n if (slidesPerView !== 'auto' && fill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n }\n };\n\n const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\n const {\n slidesPerGroup,\n spaceBetween\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid; // Set slides order\n\n let newSlideOrderIndex;\n let column;\n let row;\n\n if (fill === 'row' && slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;\n slide.css({\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex\n });\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n\n if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n row += 1;\n\n if (row >= rows) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n\n slide.css(getDirectionLabel('margin-top'), row !== 0 ? spaceBetween && `${spaceBetween}px` : '');\n };\n\n const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n const {\n spaceBetween,\n centeredSlides,\n roundLengths\n } = swiper.params;\n const {\n rows\n } = swiper.params.grid;\n swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n swiper.$wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + spaceBetween}px`\n });\n\n if (centeredSlides) {\n snapGrid.splice(0, snapGrid.length);\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n\n snapGrid.push(...newSlidesGrid);\n }\n };\n\n swiper.grid = {\n initSlides,\n updateSlide,\n updateWrapperSize\n };\n }\n\n function appendSlide(slides) {\n const swiper = this;\n const {\n $wrapperEl,\n params\n } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n } else {\n $wrapperEl.append(slides);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n }\n\n function prependSlide(slides) {\n const swiper = this;\n const {\n params,\n $wrapperEl,\n activeIndex\n } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n let newActiveIndex = activeIndex + 1;\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.prepend(slides[i]);\n }\n\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n\n swiper.slideTo(newActiveIndex, 0, false);\n }\n\n function addSlide(index, slides) {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n\n const baseLength = swiper.slides.length;\n\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n const slidesBuffer = [];\n\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n $wrapperEl.append(slidesBuffer[i]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n }\n\n function removeSlide(slidesIndexes) {\n const swiper = this;\n const {\n params,\n $wrapperEl,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n }\n\n function removeAllSlides() {\n const swiper = this;\n const slidesIndexes = [];\n\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n\n swiper.removeSlide(slidesIndexes);\n }\n\n function Manipulation(_ref) {\n let {\n swiper\n } = _ref;\n Object.assign(swiper, {\n appendSlide: appendSlide.bind(swiper),\n prependSlide: prependSlide.bind(swiper),\n addSlide: addSlide.bind(swiper),\n removeSlide: removeSlide.bind(swiper),\n removeAllSlides: removeAllSlides.bind(swiper)\n });\n }\n\n function effectInit(params) {\n const {\n effect,\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams,\n perspective,\n recreateShadows,\n getEffectParams\n } = params;\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n on('transitionEnd', () => {\n if (swiper.params.effect !== effect) return;\n\n if (recreateShadows) {\n if (!getEffectParams || !getEffectParams().slideShadows) return; // remove shadows\n\n swiper.slides.each(slideEl => {\n const $slideEl = swiper.$(slideEl);\n $slideEl.find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').remove();\n }); // create new one\n\n recreateShadows();\n }\n });\n let requireUpdateOnVirtual;\n on('virtualUpdate', () => {\n if (swiper.params.effect !== effect) return;\n\n if (!swiper.slides.length) {\n requireUpdateOnVirtual = true;\n }\n\n requestAnimationFrame(() => {\n if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n setTranslate();\n requireUpdateOnVirtual = false;\n }\n });\n });\n }\n\n function effectTarget(effectParams, $slideEl) {\n if (effectParams.transformEl) {\n return $slideEl.find(effectParams.transformEl).css({\n 'backface-visibility': 'hidden',\n '-webkit-backface-visibility': 'hidden'\n });\n }\n\n return $slideEl;\n }\n\n function effectVirtualTransitionEnd(_ref) {\n let {\n swiper,\n duration,\n transformEl,\n allSlides\n } = _ref;\n const {\n slides,\n activeIndex,\n $wrapperEl\n } = swiper;\n\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let $transitionEndTarget;\n\n if (allSlides) {\n $transitionEndTarget = transformEl ? slides.find(transformEl) : slides;\n } else {\n $transitionEndTarget = transformEl ? slides.eq(activeIndex).find(transformEl) : slides.eq(activeIndex);\n }\n\n $transitionEndTarget.transitionEnd(() => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n\n for (let i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n }\n\n function EffectFade(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n fadeEffect: {\n crossFade: false,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n slides\n } = swiper;\n const params = swiper.params.fadeEffect;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = swiper.slides.eq(i);\n const offset = $slideEl[0].swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n\n const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.css({\n opacity: slideOpacity\n }).transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.fadeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides: true\n });\n };\n\n effectInit({\n effect: 'fade',\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n function EffectCube(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n }\n });\n\n const createSlideShadows = ($slideEl, progress, isHorizontal) => {\n let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if (shadowBefore.length === 0) {\n shadowBefore = $(`
      `);\n $slideEl.append(shadowBefore);\n }\n\n if (shadowAfter.length === 0) {\n shadowAfter = $(`
      `);\n $slideEl.append(shadowAfter);\n }\n\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n };\n\n const recreateShadows = () => {\n // create new ones\n const isHorizontal = swiper.isHorizontal();\n swiper.slides.each(slideEl => {\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n createSlideShadows($(slideEl), progress, isHorizontal);\n });\n };\n\n const setTranslate = () => {\n const {\n $el,\n $wrapperEl,\n slides,\n width: swiperWidth,\n height: swiperHeight,\n rtlTranslate: rtl,\n size: swiperSize,\n browser\n } = swiper;\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let $cubeShadowEl;\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('
      ');\n $wrapperEl.append($cubeShadowEl);\n }\n\n $cubeShadowEl.css({\n height: `${swiperWidth}px`\n });\n } else {\n $cubeShadowEl = $el.find('.swiper-cube-shadow');\n\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('
      ');\n $el.append($cubeShadowEl);\n }\n }\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let slideIndex = i;\n\n if (isVirtual) {\n slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n }\n\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n\n const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + round * 4 * swiperSize;\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = 3 * swiperSize + swiperSize * 4 * round;\n }\n\n if (rtl) {\n tx = -tx;\n }\n\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n\n const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n\n $slideEl.transform(transform);\n\n if (params.slideShadows) {\n createSlideShadows($slideEl, progress, isHorizontal);\n }\n }\n\n $wrapperEl.css({\n '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n 'transform-origin': `50% 50% -${swiperSize / 2}px`\n });\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl.transform(`translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);\n }\n }\n\n const zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;\n $wrapperEl.transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n $wrapperEl[0].style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);\n };\n\n const setTransition = duration => {\n const {\n $el,\n slides\n } = swiper;\n slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n };\n\n effectInit({\n effect: 'cube',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.cubeEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true\n })\n });\n }\n\n function createShadow(params, $slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\n const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl;\n let $shadowEl = $shadowContainer.children(`.${shadowClass}`);\n\n if (!$shadowEl.length) {\n $shadowEl = $(`
      `);\n $shadowContainer.append($shadowEl);\n }\n\n return $shadowEl;\n }\n\n function EffectFlip(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n transformEl: null\n }\n });\n\n const createSlideShadows = ($slideEl, progress, params) => {\n let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if (shadowBefore.length === 0) {\n shadowBefore = createShadow(params, $slideEl, swiper.isHorizontal() ? 'left' : 'top');\n }\n\n if (shadowAfter.length === 0) {\n shadowAfter = createShadow(params, $slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n }\n\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n };\n\n const recreateShadows = () => {\n // Set shadows\n const params = swiper.params.flipEffect;\n swiper.slides.each(slideEl => {\n const $slideEl = $(slideEl);\n let progress = $slideEl[0].progress;\n\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n\n createSlideShadows($slideEl, progress, params);\n });\n };\n\n const setTranslate = () => {\n const {\n slides,\n rtlTranslate: rtl\n } = swiper;\n const params = swiper.params.flipEffect;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let progress = $slideEl[0].progress;\n\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n }\n\n const offset = $slideEl[0].swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let ty = 0;\n\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n if (params.slideShadows) {\n createSlideShadows($slideEl, progress, params);\n }\n\n const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.flipEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl\n });\n };\n\n effectInit({\n effect: 'flip',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.flipEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n function EffectCoverflow(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n width: swiperWidth,\n height: swiperHeight,\n slides,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth; // Each slide offset from center\n\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideSize = slidesSizesGrid[i];\n const slideOffset = $slideEl[0].swiperSlideOffset;\n const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0\n\n let translateZ = -translate * Math.abs(offsetMultiplier);\n let stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders\n\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = parseFloat(params.stretch) / 100 * slideSize;\n }\n\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values\n\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(slideTransform);\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = createShadow(params, $slideEl, isHorizontal ? 'left' : 'top');\n }\n\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = createShadow(params, $slideEl, isHorizontal ? 'right' : 'bottom');\n }\n\n if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.coverflowEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n };\n\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true\n })\n });\n }\n\n function EffectCreative(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n creativeEffect: {\n transformEl: null,\n limitProgress: 1,\n shadowPerProgress: false,\n progressMultiplier: 1,\n perspective: true,\n prev: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n },\n next: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n }\n }\n });\n\n const getTranslateValue = value => {\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\n\n const setTranslate = () => {\n const {\n slides,\n $wrapperEl,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.creativeEffect;\n const {\n progressMultiplier: multiplier\n } = params;\n const isCenteredSlides = swiper.params.centeredSlides;\n\n if (isCenteredSlides) {\n const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;\n $wrapperEl.transform(`translateX(calc(50% - ${margin}px))`);\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max($slideEl[0].progress, -params.limitProgress), params.limitProgress);\n let originalProgress = progress;\n\n if (!isCenteredSlides) {\n originalProgress = Math.min(Math.max($slideEl[0].originalProgress, -params.limitProgress), params.limitProgress);\n }\n\n const offset = $slideEl[0].swiperSlideOffset;\n const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n const r = [0, 0, 0];\n let custom = false;\n\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n\n let data = {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n scale: 1,\n opacity: 1\n };\n\n if (progress < 0) {\n data = params.next;\n custom = true;\n } else if (progress > 0) {\n data = params.prev;\n custom = true;\n } // set translate\n\n\n t.forEach((value, index) => {\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n }); // set rotates\n\n r.forEach((value, index) => {\n r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n });\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const translateString = t.join(', ');\n const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\n const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;\n const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`; // Set shadows\n\n if (custom && data.shadow || !custom) {\n let $shadowEl = $slideEl.children('.swiper-slide-shadow');\n\n if ($shadowEl.length === 0 && data.shadow) {\n $shadowEl = createShadow(params, $slideEl);\n }\n\n if ($shadowEl.length) {\n const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\n $shadowEl[0].style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform).css({\n opacity: opacityString\n });\n\n if (data.origin) {\n $targetEl.css('transform-origin', data.origin);\n }\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.creativeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides: true\n });\n };\n\n effectInit({\n effect: 'creative',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => swiper.params.creativeEffect.perspective,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n function EffectCards(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n cardsEffect: {\n slideShadows: true,\n transformEl: null,\n rotate: true,\n perSlideRotate: 2,\n perSlideOffset: 8\n }\n });\n\n const setTranslate = () => {\n const {\n slides,\n activeIndex\n } = swiper;\n const params = swiper.params.cardsEffect;\n const {\n startTranslate,\n isTouched\n } = swiper.touchEventsData;\n const currentTranslate = swiper.translate;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = $slideEl[0].swiperSlideOffset;\n\n if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n swiper.$wrapperEl.transform(`translateX(${swiper.minTranslate()}px)`);\n }\n\n if (swiper.params.centeredSlides && swiper.params.cssMode) {\n offset -= slides[0].swiperSlideOffset;\n }\n\n let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let tY = 0;\n const tZ = -100 * Math.abs(progress);\n let scale = 1;\n let rotate = -params.perSlideRotate * progress;\n let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;\n const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;\n const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\n const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\n\n if (isSwipeToNext || isSwipeToPrev) {\n const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n rotate += -28 * progress * subProgress;\n scale += -0.5 * subProgress;\n tXAdd += 96 * subProgress;\n tY = `${-25 * subProgress * Math.abs(progress)}%`;\n }\n\n if (progress < 0) {\n // next\n tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`;\n } else if (progress > 0) {\n // prev\n tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`;\n } else {\n tX = `${tX}px`;\n }\n\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\n\n const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n const transform = `\n translate3d(${tX}, ${tY}, ${tZ}px)\n rotateZ(${params.rotate ? rotate : 0}deg)\n scale(${scaleString})\n `;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowEl = $slideEl.find('.swiper-slide-shadow');\n\n if ($shadowEl.length === 0) {\n $shadowEl = createShadow(params, $slideEl);\n }\n\n if ($shadowEl.length) $shadowEl[0].style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.cardsEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl\n });\n };\n\n effectInit({\n effect: 'cards',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n // Swiper Class\n const modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Lazy, Controller, A11y, History, HashNavigation, Autoplay, Thumb, freeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards];\n Swiper.use(modules);\n\n return Swiper;\n\n}));\n//# sourceMappingURL=swiper-bundle.js.map\n","'use strict';\n\n/**\n * HTML特殊文字をエンコードして返す。\n *\n * @param {string} str - エンコードしたい文字列。 例: <span class=\"foo\">hoge</span>\n * @returns {string} エンコード済みの文字列。 例: &lt;span class=&quot;foo&quot;&gt;hoge&lt;/span&gt;\n */\nfunction encodeHtml(str) {\n if (!str) {\n return str;\n }\n const encoded = str.replace(/[<>&\"'`]/g, (match) => {\n const encodeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n };\n return encodeMap[match];\n });\n return encoded;\n}\n\n/**\n * 「見た目がハイフンに見える文字列」を半角ハイフン/マイナス(\\u002d)に変換して返す。\n * 引数に見た目がハイフンに見える文字列が含まれない場合は、引数と同じ文字列を返す。\n *\n * ここで「見た目がハイフンに見える文字列」は以下とする。\n * - \\uff0d ... 全角ハイフン/マイナス\n * - \\u30fc ... 延長サウンドマーク(全角カタカナ/全角ひらがな)\n * - \\u2010 ... ハイフン\n * - \\u2011 ... 改行のないハイフン\n * - \\u2013 ... アンダッシュ\n * - \\u2014 ... 全角ダッシュ\n * - \\u2015 ... 水平バー/引用符ダッシュ\n * - \\u2212 ... マイナス記号\n * - \\uff70 ... 延長サウンドマーク(半角カタカナ)\n *\n * @param {string} str - 変換対象の文字列\n * @returns {string} 変換後の文字列\n */\nfunction convertToHyphen(str) {\n if (!str) {\n return str;\n }\n const converted = str.replace(/[\\uff0d\\u30fc\\u2010\\u2011\\u2013\\u2014\\u2015\\u2212\\uff70]/g, '-');\n return converted;\n}\n\n/**\n * 全角数字を半角数字に変換して返す。\n * 引数に全角数字が含まれない場合は、引数と同じ文字列を返す。\n *\n * @param {string} str - 変換対象の文字列\n * @returns {string} 変換後の文字列\n */\nfunction convertToHalfWidthDigit(str) {\n if (!str) {\n return str;\n }\n const converted = str.replace(/[\\uff10-\\uff19]/g, (s) => {\n return String.fromCharCode(s.charCodeAt(0) - 0xfee0);\n });\n return converted;\n}\n\n/**\n * 「見た目が全角の延長サウンドマークに見える文字列」を全角の延長サウンドマーク(\\u30fc)に変換して返す。\n * 引数に見た目が全角の延長サウンドマークに見える文字列が含まれない場合は、引数と同じ文字列を返す。\n * なお、「PSM」は「Prolonged Sound Mark」の略記である。\n *\n * ここで「見た目が全角の延長サウンドマークに見える文字列」は以下とする。\n * - \\u2010 ... 「‐」 (ハイフン)\n * - \\u2011 ... 「‑」 (改行のないハイフン)\n * - \\u2013 ... 「–」 (アンダッシュ/エンダッシュ)\n * - \\u2014 ... 「—」 (全角ダッシュ/エムダッシュ)\n * - \\u2015 ... 「―」 (水平バー/引用符ダッシュ)\n * - \\u2212 ... 「−」 (マイナス記号)\n * - \\uff0d ... 「-」 (全角ハイフン/全角マイナス)\n * - \\u002d ... 「-」 (半角ハイフン/ハイフンマイナス)\n * - \\uff70 ... 「ー」 (延長サウンドマーク(半角カタカナ))\n *\n * @param {string} str - 変換対象の文字列\n * @returns {string} 変換後の文字列\n */\nfunction convertToPSM(str) {\n if (!str) {\n return str;\n }\n const converted = str.replace(\n /[\\u2010\\u2011\\u2013\\u2014\\u2015\\u2212\\uff0d\\u002d\\uff70]/g,\n 'ー'\n );\n return converted;\n}\n\n/**\n * 半角文字列を全角文字列に変換して返す。\n *\n * なお、変換する半角文字列は次の通りである。キーボードで入力される一般的な半角文字列を想定している。\n * これら以外の半角文字列は変換されない。\n *\n * | 変換前 | 変換後 | 備考 |\n * |:-----------------------------------|:----------------------------------------|:--------------------------------------------------|\n * | 半角カナ | 全角カナ | 「katakanaMap」に示すマッピングに基づく |\n * | `\\u0021\\u0023-\\u0026\\u0028-\\u007E` | Unicodeのアドレスを0xFEE0だけ移動した値 | - |\n * | `\\u0022` | `\\u201D` | `\\u0022`: `\"`, `\\u201D`: `”` |\n * | `\\u0027` | `\\u2019` | `\\u0027`: `'`, `\\u2019`: `’` |\n * | `\\u0020` | `\\u3000` | `\\u0020`: ` `(半角空白), `\\u3000`: ` `(全角空白) |\n *\n * @param {string} str - 変換対象の文字列\n * @returns {string} 変換後の文字列\n */\nfunction convertToFullWidth(str) {\n if (!str) {\n return str;\n }\n const katakanaMap = {\n ガ: 'ガ',\n ギ: 'ギ',\n グ: 'グ',\n ゲ: 'ゲ',\n ゴ: 'ゴ',\n ザ: 'ザ',\n ジ: 'ジ',\n ズ: 'ズ',\n ゼ: 'ゼ',\n ゾ: 'ゾ',\n ダ: 'ダ',\n ヂ: 'ヂ',\n ヅ: 'ヅ',\n デ: 'デ',\n ド: 'ド',\n バ: 'バ',\n ビ: 'ビ',\n ブ: 'ブ',\n ベ: 'ベ',\n ボ: 'ボ',\n パ: 'パ',\n ピ: 'ピ',\n プ: 'プ',\n ペ: 'ペ',\n ポ: 'ポ',\n ヴ: 'ヴ',\n ヷ: 'ヷ',\n ヺ: 'ヺ',\n ア: 'ア',\n イ: 'イ',\n ウ: 'ウ',\n エ: 'エ',\n オ: 'オ',\n カ: 'カ',\n キ: 'キ',\n ク: 'ク',\n ケ: 'ケ',\n コ: 'コ',\n サ: 'サ',\n シ: 'シ',\n ス: 'ス',\n セ: 'セ',\n ソ: 'ソ',\n タ: 'タ',\n チ: 'チ',\n ツ: 'ツ',\n テ: 'テ',\n ト: 'ト',\n ナ: 'ナ',\n ニ: 'ニ',\n ヌ: 'ヌ',\n ネ: 'ネ',\n ノ: 'ノ',\n ハ: 'ハ',\n ヒ: 'ヒ',\n フ: 'フ',\n ヘ: 'ヘ',\n ホ: 'ホ',\n マ: 'マ',\n ミ: 'ミ',\n ム: 'ム',\n メ: 'メ',\n モ: 'モ',\n ヤ: 'ヤ',\n ユ: 'ユ',\n ヨ: 'ヨ',\n ラ: 'ラ',\n リ: 'リ',\n ル: 'ル',\n レ: 'レ',\n ロ: 'ロ',\n ワ: 'ワ',\n ヲ: 'ヲ',\n ン: 'ン',\n ァ: 'ァ',\n ィ: 'ィ',\n ゥ: 'ゥ',\n ェ: 'ェ',\n ォ: 'ォ',\n ッ: 'ッ',\n ャ: 'ャ',\n ュ: 'ュ',\n ョ: 'ョ',\n '。': '。',\n '、': '、',\n ー: 'ー',\n '「': '「',\n '」': '」',\n '・': '・',\n ゙: '゛',\n ゚: '゜',\n };\n const katakanaRegExp = new RegExp(`(?:${Object.keys(katakanaMap).join('|')})`, 'g');\n const fullWidth = str\n .normalize()\n .replace(katakanaRegExp, function (char) {\n return katakanaMap[char] || char;\n })\n .replace(/[\\u0021\\u0023-\\u0026\\u0028-\\u007E]/g, function (char) {\n return String.fromCharCode(char.charCodeAt(0) + 0xfee0);\n })\n .replace(/\\u0022/g, '\\u201D')\n .replace(/\\u0027/g, '\\u2019')\n .replace(/\\u0020/g, '\\u3000');\n return fullWidth;\n}\n\n/**\n * 全角カナ文字列を半角カナ文字列に変換して返す。\n * 全角カナ以外の文字列は変換されない。\n *\n * | 変換前 | 変換後 | 備考 |\n * |:---------|:---------|:----------------------------------------|\n * | 全角カナ | 半角カナ | 「katakanaMap」に示すマッピングに基づく |\n *\n * @param {string} str - 変換対象の文字列\n * @returns {string} 変換後の文字列\n */\nfunction convertFullWidthKatakanaToHalfWidthKatakana(str) {\n if (!str) {\n return str;\n }\n const katakanaMap = {\n ガ: 'ガ',\n ギ: 'ギ',\n グ: 'グ',\n ゲ: 'ゲ',\n ゴ: 'ゴ',\n ザ: 'ザ',\n ジ: 'ジ',\n ズ: 'ズ',\n ゼ: 'ゼ',\n ゾ: 'ゾ',\n ダ: 'ダ',\n ヂ: 'ヂ',\n ヅ: 'ヅ',\n デ: 'デ',\n ド: 'ド',\n バ: 'バ',\n ビ: 'ビ',\n ブ: 'ブ',\n ベ: 'ベ',\n ボ: 'ボ',\n パ: 'パ',\n ピ: 'ピ',\n プ: 'プ',\n ペ: 'ペ',\n ポ: 'ポ',\n ヴ: 'ヴ',\n ヷ: 'ヷ',\n ヺ: 'ヺ',\n ア: 'ア',\n イ: 'イ',\n ウ: 'ウ',\n エ: 'エ',\n オ: 'オ',\n カ: 'カ',\n キ: 'キ',\n ク: 'ク',\n ケ: 'ケ',\n コ: 'コ',\n サ: 'サ',\n シ: 'シ',\n ス: 'ス',\n セ: 'セ',\n ソ: 'ソ',\n タ: 'タ',\n チ: 'チ',\n ツ: 'ツ',\n テ: 'テ',\n ト: 'ト',\n ナ: 'ナ',\n ニ: 'ニ',\n ヌ: 'ヌ',\n ネ: 'ネ',\n ノ: 'ノ',\n ハ: 'ハ',\n ヒ: 'ヒ',\n フ: 'フ',\n ヘ: 'ヘ',\n ホ: 'ホ',\n マ: 'マ',\n ミ: 'ミ',\n ム: 'ム',\n メ: 'メ',\n モ: 'モ',\n ヤ: 'ヤ',\n ユ: 'ユ',\n ヨ: 'ヨ',\n ラ: 'ラ',\n リ: 'リ',\n ル: 'ル',\n レ: 'レ',\n ロ: 'ロ',\n ワ: 'ワ',\n ヲ: 'ヲ',\n ン: 'ン',\n ァ: 'ァ',\n ィ: 'ィ',\n ゥ: 'ゥ',\n ェ: 'ェ',\n ォ: 'ォ',\n ッ: 'ッ',\n ャ: 'ャ',\n ュ: 'ュ',\n ョ: 'ョ',\n '。': '。',\n '、': '、',\n ー: 'ー',\n '「': '「',\n '」': '」',\n '・': '・',\n '゛': '゙',\n '゜': '゚',\n };\n const katakanaRegExp = new RegExp(`(?:${Object.keys(katakanaMap).join('|')})`, 'g');\n const halfWidth = str.normalize().replace(katakanaRegExp, function (char) {\n return katakanaMap[char] || char;\n });\n return halfWidth;\n}\n\nmodule.exports = {\n encodeHtml,\n convertToHyphen,\n convertToHalfWidthDigit,\n convertToPSM,\n convertToFullWidth,\n convertFullWidthKatakanaToHalfWidthKatakana,\n};\n","'use strict';\n\nconst clicklock = require('app_common/components/clicklock');\nconst updateDom = require('app_common/components/updateDom');\nconst {getCsrfObject} = require('app_common/components/security');\nconst {encodeHtml} = require('sswd_base/util/XStringUtils');\n\n/**\n * カート追加のURLを取得\n *\n * @returns {string} カートURL\n */\nfunction getAddToCartUrl() {\n return $('.add-to-cart-url').val();\n}\n\n/**\n * カート追加用のメッセージを含むタグのjQueryオブジェクトを取得する。\n * `app_custom/cartridge/templates/default/components/addition/addToMessagesAlert.isml`内のカート用のタグに対応する。\n *\n * @returns {JQuery} カート追加用のメッセージを含むタグのjQueryオブジェクト\n */\nfunction getAddrToCartMessages() {\n const $addrToCartMessages = $('.add-to-cart-messages-sample');\n return $addrToCartMessages;\n}\n\n/**\n * カート追加時のポップアップを表示する。\n *\n * @param {object} data ミニカートに渡すデータ\n * - quantityTotal: <ミニカートで表示するカート内の商品数量> 例: `2`\n * - minicartCountOfItems: <ミニカートのaタグのtitle属性にセットするメッセージ> 例: `'Cart 2 Items'`\n */\nfunction clickAddToMessageAlert(data) {\n $('.minicart').trigger('count:update', data);\n\n // メッセージエリアを取得する\n const $addrToCartMessages = getAddrToCartMessages();\n const message = $('.add-to-basket-alert-sample', $addrToCartMessages).html();\n\n // 表示用に組み立てる\n const $body = $('body');\n const $messages = $('
      ');\n const $alert = $(\n `
      ${message}
      `\n );\n $messages.append($alert);\n $body.append($messages);\n setTimeout(function () {\n $alert.remove();\n $messages.remove();\n }, 5e3);\n}\n\n/**\n * カート追加失敗時のポップアップを表示する。\n *\n * @param {string[]} error - エラーメッセージの配列。例: `['エラーが発生しました。']`\n * @returns {void}\n */\nfunction clickAddFalseToMessageAlert(error) {\n // メッセージエリアを取得する\n const $addrToCartMessages = getAddrToCartMessages();\n const messageHtmlStr = $('.add-to-basket-alert-false', $addrToCartMessages).html();\n\n // 文字列をjQueryオブジェクトに変換\n const $messageHtml = $(messageHtmlStr);\n // メッセージを作成する\n let message;\n if (Array.isArray(error) && error.length > 0) {\n if (error.length === 1) {\n message = `${encodeHtml(error[0])}`;\n } else {\n message = '
        ';\n error.forEach((e) => {\n message += `
      • ${encodeHtml(e)}
      • `;\n });\n message += '
      ';\n }\n } else {\n message = $addrToCartMessages.data('message-systemerror');\n }\n // メッセージ部分を上書きする\n $messageHtml.find('.pull-right.ml-2').html(message);\n\n // 表示用に組み立てる\n const $body = $('body');\n const $messages = $('
      ');\n const $alert = $(\n `
      ${$messageHtml.prop(\n 'outerHTML'\n )}
      `\n );\n $messages.append($alert);\n $body.append($messages);\n setTimeout(function () {\n $alert.remove();\n $messages.remove();\n }, 5e3);\n}\n\n/**\n * スクロールアニメーションが完了するまで待つ関数\n *\n * @returns {Promise} スクロールアニメーションが完了すると解決されるPromise。\n */\nfunction waitForScroll() {\n return new Promise((resolve) => {\n require('base/components/scrollAnimate')();\n\n // animate関数が完了した後にPromiseを解決する\n $('html, body').promise().done(resolve);\n });\n}\n\n/**\n * 対象画面を再描画する\n * 在庫がない、販売期間外の場合は部分更新とし、\n * オフラインの場合は、ページが見つからないため全体を再描画する\n *\n * @param {string} url - 再描画対象\n * @param {string} refreshArea - 更新部分を指定するクラス名\n */\nfunction refreshProductView(url, refreshArea) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function (response) {\n // 在庫がない、販売期間外の場合は部分更新\n updateDom(response, refreshArea);\n },\n error: function () {\n // TODO:商品詳細オフライン状態の時の画面遷移\n // リダイレクトさせ404エラー画面を表示\n window.location.href = url;\n },\n });\n}\n\n/**\n * (本関数は、SFRAの「product/base.js#miniCartReportingUrl」を移植したもの)\n *\n * Makes a call to the server to report the event of adding an item to the cart\n *\n * @param {string} url - a string representing the end point to hit so that the event can be recorded\n */\nfunction miniCartReportingUrl(url) {\n if (!url) {\n return;\n }\n $.ajax({\n url,\n method: 'GET',\n success: function () {\n // reporting urls hit on the server\n },\n error: function () {\n // no reporting urls hit on the server\n },\n });\n}\n\n/**\n * カートに追加\n * @param {object} e イベント\n * @return {Promise} postForm返却値\n */\nasync function doAddToCart(e) {\n if (!e) {\n return;\n }\n\n // 商品IDと数量取得\n const $addCartButton = $(e.currentTarget);\n const productId = $addCartButton.data('pid');\n // 商品詳細画面にて入力された数量を取得する\n // PC版とモバイル版でそれぞれ取得する\n const quantityElementDesktop = $addCartButton\n .closest('.row')\n .prev()\n .find('.form-control[name=\"quantity\"]');\n const quantityElementMobile = $addCartButton\n .closest('.row')\n .find('.form-control[name=\"quantity\"]');\n\n let quantity;\n\n if (quantityElementDesktop.length) {\n quantity = quantityElementDesktop.val();\n } else if (quantityElementMobile.length) {\n quantity = quantityElementMobile.val();\n }\n\n // お気に入り画面など数量設定がない場合はデフォルトで1を設定する\n quantity = quantity || 1;\n\n // 取得した商品IDと数量をポストデータオブジェクトに変換\n let postDataObj = {\n productId: productId ? productId + '' : '',\n quantity: parseInt(quantity, 10),\n };\n\n // コントローラー呼び出し用URL取得\n const addToCartUrl = getAddToCartUrl();\n\n const csrfObject = getCsrfObject();\n const csrfTokenName = csrfObject.tokenName;\n const csrfTokenValue = csrfObject.token;\n\n // フォームデータ作成\n const formData = new FormData();\n formData.append('pid', postDataObj.productId);\n formData.append('quantity', postDataObj.quantity);\n formData.append(csrfTokenName, csrfTokenValue);\n\n const postForm = require('sswd_base/components/XPostForm');\n const result = await postForm(addToCartUrl, formData);\n return result;\n}\n\n/**\n * カートに追加\n * 追加後のメッセージ表示を変更するために移植\n * セット品やバンドル品に関する処理も削除\n */\nfunction addToCart() {\n $('body').on('click', 'button.add-to-cart, button.add-to-cart-global', async (e) => {\n // クリックイベントをロックする\n if (!clicklock.lock()) {\n // ロックできなかった場合は何もしない\n return;\n }\n try {\n // スピナーを開始する\n $('body').trigger('product:beforeAddToCart', this);\n\n // カート追加処理\n const result = await doAddToCart(e);\n\n // メッセージ表示\n if (result.success) {\n const data = result.data;\n // カート追加成功時は、デザインされたポップアップを表示する\n clickAddToMessageAlert(data);\n $('body').trigger('product:afterAddToCart', data);\n const reportingURL = data.reportingURL;\n miniCartReportingUrl(reportingURL);\n } else {\n // 画面上部へスクロール\n await waitForScroll();\n // エラーメッセージの表示\n let error;\n if (result.error) {\n error = result.error;\n } else if (result.csrfError) {\n const $addrToCartMessages = getAddrToCartMessages();\n error = [$addrToCartMessages.data('message-csrferror')];\n } else {\n const $addrToCartMessages = getAddrToCartMessages();\n error = [$addrToCartMessages.data('message-systemerror')];\n }\n clickAddFalseToMessageAlert(error);\n // リフレッシュURL、カスタムイベント取得\n const $addCartButton = $(e.currentTarget);\n const refreshUrl = $addCartButton.data('refresh-url');\n const refreshArea = $addCartButton.data('refresh-area');\n\n // イベントをトリガーし呼び出し元に応じた処理を行う\n refreshProductView(refreshUrl, refreshArea);\n }\n } catch (err) {\n // 画面上部へスクロール\n await waitForScroll();\n // エラーメッセージの表示\n const $addrToCartMessages = getAddrToCartMessages();\n const error = [$addrToCartMessages.data('message-systemerror')];\n clickAddFalseToMessageAlert(error);\n } finally {\n // スピナーを停止する\n $.spinner().stop();\n // クリックイベントをアンロックする\n clicklock.unlock();\n }\n });\n}\n\n/**\n * 商品詳細およびお気に入りリスト画面の「すぐ購入」ボタンのクリック時の処理を設定する。\n *\n * @returns {void}\n */\nfunction handleBuyNow() {\n // 「商品追加あり」の「すぐ購入」ボタンがクリックされた際の処理\n $('.co-buy-now').on('click', async (event) => {\n event.preventDefault();\n if (!clicklock.lock()) {\n return;\n }\n try {\n // 商品IDと数量取得\n const $addCartButton = $(event.currentTarget);\n const productId = $addCartButton.data('pid');\n // 商品詳細画面にて入力された数量を取得する\n // PC版とモバイル版でそれぞれ取得する\n const quantityElementDesktop = $addCartButton\n .closest('.row')\n .prev()\n .find('.form-control[name=\"quantity\"]');\n const quantityElementMobile = $addCartButton\n .closest('.row')\n .find('.form-control[name=\"quantity\"]');\n\n let quantity;\n\n if (quantityElementDesktop.length) {\n quantity = quantityElementDesktop.val();\n } else if (quantityElementMobile.length) {\n quantity = quantityElementMobile.val();\n }\n\n // お気に入り画面など数量設定がない場合はデフォルトで1を設定する\n quantity = quantity || 1;\n\n // 「すぐ購入」を実行する\n const {getBuyNowObj} = require('../components/buyNow');\n const {execBuyNow} = require('../co/coBuyNow');\n const buyNowObj = getBuyNowObj(productId, quantity);\n await execBuyNow(buyNowObj);\n } finally {\n clicklock.unlock();\n }\n });\n}\n\nmodule.exports = {\n addToCart,\n doAddToCart,\n handleBuyNow,\n};\n","'use strict';\n\nmodule.exports = function (element) {\n var position = element && element.length ? element.offset().top : 0;\n $('html, body').animate({\n scrollTop: position\n }, 500);\n if (!element) {\n $('.logo-home').focus();\n }\n};\n","'use strict';\n\n/*\n * 二重送信防止用の処理を提供する。\n *\n * ## 利用例\n *\n * const clicklock = require('app_common/components/clicklock');\n * ...\n *\n * function submit() {\n * // クリックイベントをロックする\n * if (!clicklock.lock()) {\n * // ロックできなかった場合は何もしない\n * return;\n * }\n * try {\n * ... 送信処理\n * } finally {\n * // クリックイベントをアンロックする\n * clicklock.unlock();\n * }\n * }\n */\n\n/** @type {object} windowオブジェクト内に状態を保持するためのオブジェクト */\nwindow.sswd = {\n /** @type {object} clicklock向けのオブジェクト */\n clicklock: {\n /** @type {boolean} クリックイベントがロックされているか否か */\n locked: false,\n },\n};\n\n/**\n * クリックイベントをロックする。\n *\n * @returns {boolean} ロックに成功した場合はtrue、失敗した場合(すでにロックされている場合)はfalse。\n */\nfunction lock() {\n if (window.sswd.clicklock.locked) {\n return false;\n }\n window.sswd.clicklock.locked = true;\n return true;\n}\n\n/**\n * クリックイベントをアンロックする。\n *\n * @returns {boolean} 必ずtrueを返す。\n */\nfunction unlock() {\n window.sswd.clicklock.locked = false;\n return true;\n}\n\nmodule.exports = {\n lock,\n unlock,\n};\n"],"sourceRoot":""}