{"version":3,"sources":["tiny-swiper.js","../../node_modules/tiny-swiper/lib/index.js","../../node_modules/tiny-swiper/lib/modules/lazyload.js","../../node_modules/tiny-swiper/lib/modules/mousewheel.js","../../node_modules/tiny-swiper/lib/modules/keyboardControl.js","../../node_modules/tiny-swiper/lib/modules/navigation.js"],"names":["_typeof","o","Symbol","iterator","constructor","prototype","global","factory","exports","module","define","amd","globalThis","self","Swiper","this","_extends","Object","assign","target","i","arguments","length","source","key","hasOwnProperty","call","apply","addClass","el","list","Array","isArray","forEach","clz","classList","contains","add","attachListener","evtName","handler","opts","addEventListener","detachListener","removeEventListener","setAttr","attr","value","setAttribute","setStyle","style","forceRender","keys","prop","getComputedStyle","defaultOptions","direction","touchRatio","touchAngle","longSwipesRatio","initialSlide","loop","freeMode","passiveListeners","resistance","resistanceRatio","speed","longSwipesMs","spaceBetween","slidesPerView","centeredSlides","slidePrevClass","slideNextClass","slideActiveClass","slideClass","wrapperClass","touchStartPreventDefault","touchStartForcePreventDefault","touchMoveStopPropagation","excludeElements","injections","translate","state","env","options","duration","element","$wrapper","transition","isStart","transform","isHorizontal","transforms","LIFE_CYCLES","delta","Math","PI","Tracker","logs","getDuration","first","last","time","getOffset","x","y","getLogs","vector","index","trace","formerTrace","diff","velocityX","velocityY","angle","atan2","abs","Vector","clear","push","position","Date","now","performance","nextFrame","requestAnimationFrame","webkitRequestAnimationFrame","setTimeout","cancelNextFrame","cancelAnimationFrame","webkitCancelAnimationFrame","clearTimeout","Animation","startTime","id","tick","run","cb","timeStamp","interval","stop","undefined","task","resetState","operations","tracker","initStatus","Sensor","touchable","formEls","actions","initLayout","render","scrollPixel","slideTo","getOffsetSteps","animation","preheat","originPosition","originTransform","move","isScrolling","displacement","isTouching","offset","measure","velocity","trans","jump","ceil","boxSize","longSwipeIndex","Actions","getPosition","e","touch","changedTouches","pageX","pageY","onTouchStart","matrix","arr","shouldPreventDefault","indexOf","nodeName","preventDefault","replace","split","map","parseFloat","slice","onTouchMove","stopPropagation","cancelable","onTouchEnd","attach","$el","passive","capture","document","detach","Limitation","$list","viewSize","slideSize","expand","getExpand","buffer","base","max","min","minIndex","maxIndex","Env","elem","update","offsetWidth","offsetHeight","Measure","limitation","Boolean","window","navigator","maxTouchPoints","msMaxTouchPoints","DocumentTouch","shallowTag","sliderTag","Renderer","updateItem","querySelectorAll","$slide","tagNumber","getAttribute","remove","destroyExpandList","item","removeChild","updateDom","$leftExpandList","cloneNode","$rightExpandList","$shadowSlide","appendChild","insertBefore","appendExpandList","updateSize","_itemStyle","wrapperStyle","display","willChange","flexDirection","itemStyle","init","force","timing","destroy","_env$element","itemProp","propertyName","removeProperty","getExcess","exceedLeft","exceedRight","Operations","renderer","eventHub","progress","_env$limitation","transRange","len","emit","targetIndex","computedIndex","newTransform","excess","defaultWay","shortcut","currentIndex","getShortestWay","px","ratio","Number","toExponential","pow","isExceedingLimits","startTransform","Element","body","querySelector","getElementsByClassName","filter","slide","userOptions","hub","optionFormatter","on","off","splice","_len","data","_key","instance","plugins","plugin","sensor","use","SwiperPluginLazyload","removeClass","isEnable","lazyload","lazyloadOptions","loadPrevNext","loadPrevNextAmount","loadOnTransitionStart","elementClass","loadingClass","loadedClass","preloaderClass","load","$imgs","$preloaders","$img","hasAttribute","src","onload","handleLoaded","onerror","removeAttribute","isLoaded","every","$preloader","parentElement","loadRange","range","oldIndex","newIndex","SwiperPluginMousewheel","mousewheel","mousewheelOptions","invert","sensitivity","mousewheelInstance","wheelStatus","wheeling","wheelDelta","wheelingTimer","deltaX","deltaY","step","SwiperPluginKeyboardControl","DIRECTION","isVisible","visibility","nodeType","isElementInView","boundary","getBoundingClientRect","top","bottom","innerHeight","left","right","innerWidth","keyboard","keyboardOptions","enabled","onlyInViewport","enable","disable","onKeyDown","SwiperPluginNavigation","navigation","navigationInstance","nextEl","prevEl","navigationOptions","disabledClass","nextClickHandler","clickHandler","prevClickHandler","type","checkIsDisable","_instance$env$limitat","D3R","swipers","instances","swiper","bind","_this","throttle"],"mappings":"AAAA,SAASA,QAAQC,GAAgC,OAAOD,QAAU,mBAAqBE,QAAU,iBAAmBA,OAAOC,SAAW,SAAUF,GAAK,cAAcA,CAAG,EAAI,SAAUA,GAAK,OAAOA,GAAK,mBAAqBC,QAAUD,EAAEG,cAAgBF,QAAUD,IAAMC,OAAOG,UAAY,gBAAkBJ,CAAG,EAAGD,QAAQC,EAAI,ECA7T,SAAAK,EAAAC,GACA,YAAA,oBAAAC,QAAA,YAAAR,QAAAQ,WAAA,oBAAAC,OAAAA,OAAAD,QAAAD,IACA,mBAAAG,QAAAA,OAAAC,IAAAD,OAAAH,IACAD,EAAA,oBAAAM,WAAAA,WAAAN,GAAAO,MAAAC,OAAAP,GACA,CAJA,CAIAQ,KAAA,WAAA,aAEA,SAAAC,IAeA,OAdAA,EAAAC,OAAAC,QAAA,SAAAC,GACA,IAAA,IAAAC,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAA,CACA,IAAAG,EAAAF,UAAAD,GAEA,IAAA,IAAAI,KAAAD,EACAN,OAAAZ,UAAAoB,eAAAC,KAAAH,EAAAC,KACAL,EAAAK,GAAAD,EAAAC,GAGA,CAEA,OAAAL,CACA,EAEAH,EAAAW,MAAAZ,KAAAM,UACA,CAEA,SAAAO,EAAAC,EAAAC,QACA,IAAAA,IACAA,EAAA,IAGAC,MAAAC,QAAAF,KAAAA,EAAA,CAAAA,IACAA,EAAAG,QAAA,SAAAC,GACA,OAAAL,EAAAM,UAAAC,SAAAF,IAAAL,EAAAM,UAAAE,IAAAH,EACA,EACA,CAWA,SAAAI,EAAAT,EAAAU,EAAAC,EAAAC,GACAZ,EAAAa,iBAAAH,EAAAC,EAAAC,EACA,CACA,SAAAE,EAAAd,EAAAU,EAAAC,GACAX,EAAAe,oBAAAL,EAAAC,EACA,CACA,SAAAK,EAAAhB,EAAAiB,EAAAC,GAMA,YALA,IAAAA,IACAA,EAAA,IAGAlB,EAAAmB,aAAAF,EAAAC,GACAlB,CACA,CACA,SAAAoB,EAAApB,EAAAqB,EAAAC,GAOA,OANAlC,OAAAmC,KAAAF,GAAAjB,QAAA,SAAAoB,GAEAxB,EAAAqB,MAAAG,GAAAH,EAAAG,EACA,GAEAF,GAAAG,iBAAAzB,GACAA,CACA,CAuBA,IAAA0B,EAAA,CAEAC,UAAA,aACAC,WAAA,EACAC,WAAA,GACAC,gBAAA,GACAC,aAAA,EACAC,MAAA,EACAC,UAAA,EACAC,kBAAA,EACAC,YAAA,EACAC,gBAAA,IACAC,MAAA,IACAC,aAAA,IACAC,aAAA,EACAC,cAAA,EACAC,gBAAA,EACAC,eAAA,oBACAC,eAAA,oBACAC,iBAAA,sBACAC,WAAA,eACAC,aAAA,iBACAC,0BAAA,EACAC,+BAAA,EACAC,0BAAA,EACAC,gBAAA,GACAC,WAAA,CACAC,UApCA,SAAAC,EAAAC,EAAAC,EAAAC,GAMApC,EALAkC,EAAAG,QAAAC,SACA,CACAC,WAAAN,EAAAO,QAAA,OAAA,kBAAAJ,EAAA,KACAK,UAAAN,EAAAO,aAAA,eAAAT,EAAAU,WAAA,YAAA,kBAAAV,EAAAU,WAAA,UAGA,IAwCA,IAAAC,EACA,cADAA,EAEA,aAFAA,EAGA,eAHAA,EAIA,SAJAA,EAKA,cALAA,EAMA,iBANAA,EAOA,gBA6CA,IAAAC,EAAA,IAAAC,KAAAC,GAmBA,SAAAC,IACA,IAAAC,EAAA,GAsCA,MAAA,CACAC,YAnBA,WACA,IAAAC,EAAAF,EAAA,GACAG,EAAAH,EAAAA,EAAA5E,OAAA,GACA,OAAA8E,EAAAC,EAAAC,KAAAF,EAAAE,KAAA,CACA,EAgBAC,UAdA,WACA,IAAAH,EAAAF,EAAA,GACAG,EAAAH,EAAAA,EAAA5E,OAAA,GACA,OAAA8E,EAAA,CACAI,EAAAH,EAAAG,EAAAJ,EAAAI,EACAC,EAAAJ,EAAAI,EAAAL,EAAAK,GACA,CACAD,EAAA,EACAC,EAAA,EAEA,EAKAC,QAzBA,WACA,OAAAR,CACA,EAwBAS,OAlCA,WACA,OA5BA,SAAAT,EAAAU,GACA,IAAAC,EAAAX,EAAAU,GACAE,EAAAZ,EAAAU,EAAA,IAAAC,EAEAE,EAAA,CACAP,EAAAK,EAAAL,EAAAM,EAAAN,EACAC,EAAAI,EAAAJ,EAAAK,EAAAL,GAEApB,EAAAwB,EAAAP,KAAAQ,EAAAR,KACAU,EAAAD,EAAAP,EAAAnB,GAAA,EACA4B,EAAAF,EAAAN,EAAApB,GAAA,EAEA,OAAArE,EAAA,CAAA,EAAA+F,EAAA,CACAG,MAFAnB,KAAAoB,MAAApB,KAAAqB,IAAAL,EAAAN,GAAAV,KAAAqB,IAAAL,EAAAP,IAAAV,EAGAkB,UAAAA,EACAC,UAAAA,GAEA,CAWAI,CAAAnB,EAAAA,EAAA5E,OAAA,EACA,EAiCAgG,MA/BA,WACApB,EAAA,EACA,EA8BAqB,KA1CA,SAAAC,GACAtB,EAAAqB,KAAAvG,EAAA,CACAsF,KAAAmB,KAAAC,OACAF,GACA,EAwCA,CAgBA,SAAAE,IACA,OAAAC,YAAAA,YAAAD,MAAAD,KAAAC,KACA,CAEA,IAAAE,EAAAC,uBAAAC,6BAAAC,WACAC,EAAAC,sBAAAC,4BAAAC,aA6BA,SAAAC,IACA,IA5BAC,EACAC,EA2BAC,EAPA,CACAC,IAnBA,SAAAC,GAEAJ,OAAA,IAAAA,EAAAX,IAAAW,EAGAC,EAAAV,EAAA,WACA,IAAAc,EAAAhB,IACAiB,EAAAD,EAAAL,EACAA,EAAAK,EACAD,EAAAE,EACA,EACA,EASAC,KAPA,WACAP,OAAAQ,EACAb,EAAAM,EACA,GAsBA,MAAA,CACAE,IAZA,SAAAA,EAAAM,GACAP,EAAAC,IAAA,SAAAG,GACAH,EAAAM,GACAA,EAAAH,EACA,EACA,EAQAC,KANA,WACAL,EAAAK,MACA,EAMA,CAEA,SAAAG,EAAA7D,EAAA8D,GACA,IAAAC,EAAA/D,EAAA+D,QACAC,EAAAF,EAAAE,WACAD,EAAA3B,QACA4B,GACA,CA6FA,SAAAC,EAAAhE,EAAAD,EAAAE,EAAA4D,GACA,IAAAI,EAAAjE,EAAAiE,UACAC,EAAA,CAAA,QAAA,SAAA,SAAA,WAAA,SAAA,SACAC,EA9FA,SAAAlE,EAAAD,EAAAD,EAAA8D,GACA,IAAAO,EAAAP,EAAAO,WACAL,EAAAF,EAAAE,WACAM,EAAAR,EAAAQ,OACAC,EAAAT,EAAAS,YACAC,EAAAV,EAAAU,QACAC,EAAAX,EAAAW,eACAC,EAAAxB,IA6EA,MAAA,CACAyB,QA5EA,SAAAC,EAAAC,GACA,IAAAd,EAAA/D,EAAA+D,QACAW,EAAAhB,OACAK,EAAA3B,QACA2B,EAAA1B,KAAAuC,GACAP,EAAAQ,GACAb,EAAAa,GACA7E,EAAAO,SAAA,EACA+D,GACA,EAoEAQ,KAlEA,SAAAxC,GACA,IAAAyB,EAAA/D,EAAA+D,QACAxF,EAAA2B,EAAA3B,WACAC,EAAA0B,EAAA1B,WACAiC,EAAAP,EAAAO,aACA,GAAAT,EAAAO,UAAAP,EAAA+E,YAAA,CACAhB,EAAA1B,KAAAC,GACA,IAAAb,EAAAsC,EAAAtC,SACAuD,EAAAjB,EAAA1C,YAGA,GAAA2D,EAAA1D,GAAA0D,EAAAzD,EAEA,GAAAd,GAAAgB,EAAAO,MAAAxD,IAAAiC,GAAA,GAAAgB,EAAAO,MAAAxD,GAAAwB,EAAAiF,WAAA,CACA,IAAAC,EAAAzD,EAAAhB,EAAA,IAAA,KAAAlC,EACAyB,EAAAiF,YAAA,EACAV,EAAAW,GACAZ,GACA,MACAtE,EAAA+E,aAAA,EACAhB,EAAA3B,OAfA,CAiBA,EA6CAsB,KA3CA,WACA,IAAAhC,EAAA1B,EAAA0B,MACAqC,EAAA/D,EAAA+D,QACAoB,EAAAlF,EAAAkF,QACA,GAAAnF,EAAAO,QAGA,GAFAP,EAAAO,SAAA,EAEAL,EAAAtB,SAeA,CACA,IACAwG,EADArB,EAAAtC,SACAvB,EAAAO,aAAA,YAAA,aACAiE,EAAApB,IAAA,SAAAnD,GACA,IAAA+E,EAAAE,EAAAjF,EACAiF,GAAA,IAEAvE,KAAAqB,IAAAgD,GAAA,KACAR,EAAAhB,OACAG,EAAA7D,EAAA8D,KAEAS,EAAAW,GACAZ,EAAA,GAEA,EACA,KA9BA,CACA,IAAAnE,EAAA4D,EAAA9C,cACAoE,EAAAtB,EAAA1C,YAAAnB,EAAAO,aAAA,IAAA,KACA6E,EAAAzE,KAAA0E,KAAA1E,KAAAqB,IAAAmD,GAAAF,EAAAK,SACAC,EAAAhB,EAAAY,GAEAlF,EAAAD,EAAAjB,aAEAuF,EAAA9C,EAAA+D,GAAAJ,EAAA,GAAA,EAAA,IAGAb,EAAAa,EAAA,EAAA3D,EAAA4D,EAAA5D,EAAA4D,GAGAzB,EAAA7D,EAAA8D,EACA,CAgBA,EAOA,CAKA4B,CAAAxF,EAAAD,EAAAD,EAAA8D,GACAa,EAAAP,EAAAO,QACAG,EAAAV,EAAAU,KACApB,EAAAU,EAAAV,KAEA,SAAAiC,EAAAC,GACA,IAAAC,EAAA3B,EAAA0B,EAAAE,eAAA,GAAAF,EACA,MAAA,CACAtE,EAAAuE,EAAAE,MACAxE,EAAAsE,EAAAG,MAEA,CAEA,SAAAC,EAAAL,GACA,IAAA,IAAA1J,EAAA,EAAAA,EAAAgE,EAAAL,gBAAAzD,OAAAF,IACA,GAAAgE,EAAAL,gBAAA3D,GAAAgB,SAAA0I,EAAA3J,QAAA,OAGA,IA/WAU,EAAA8D,EACAyF,EACAC,EA6WA9F,EAAAJ,EAAAG,QAAAC,SACA+F,EAAAlG,EAAAR,2BAAA,IAAAyE,EAAAkC,QAAAT,EAAA3J,OAAAqK,WAAApG,EAAAP,+BAIAuE,GAAAkC,GAAAR,EAAAW,iBACA5B,EAAAgB,EAAAC,IArXAjJ,EAqXA0D,EArXAI,EAqXAP,EAAAO,aApXAyF,EAAA9H,iBAAAzB,GAAA6D,UAAAgG,QAAA,kBAAA,IAAAC,MAAA,KAAAC,IAAAC,YACAR,EAAA,GAEA,KAAAD,EAAA9J,OACA+J,EAAAD,EAAAU,MAAA,GAAA,IACA,IAAAV,EAAA9J,SACA+J,EAAAD,EAAAU,MAAA,EAAA,IAGAT,EAAA1F,EAAA,EAAA,IAAA,GA4WA,CAEA,SAAAoG,EAAAjB,GACA1F,EAAAN,0BAAAgG,EAAAkB,kBACAhC,EAAAa,EAAAC,IACA5F,EAAAiF,aAAA,IAAAW,EAAAmB,YAAAnB,EAAAW,gBACA,CAEA,SAAAS,IACAtD,GACA,CA+BA,MAAA,CACAuD,OA9BA,WACA,IAAAC,EAAAjH,EAAAG,QAAA8G,IAEAhD,GACA9G,EAAA8J,EAAA,aAAAjB,EAAA,CACAkB,QAAAjH,EAAArB,iBACAuI,SAAA,IAEAhK,EAAA8J,EAAA,YAAAL,GACAzJ,EAAA8J,EAAA,WAAAF,GACA5J,EAAA8J,EAAA,cAAAF,KAEA5J,EAAA8J,EAAA,YAAAjB,GACA7I,EAAAiK,SAAA,YAAAR,GACAzJ,EAAAiK,SAAA,UAAAL,GAEA,EAeAM,OAbA,WACA,IAAAJ,EAAAjH,EAAAG,QAAA8G,IACAzJ,EAAAyJ,EAAA,aAAAjB,GACAxI,EAAAyJ,EAAA,YAAAL,GACApJ,EAAAyJ,EAAA,WAAAF,GACAvJ,EAAAyJ,EAAA,cAAAF,GACAvJ,EAAAyJ,EAAA,YAAAjB,GACAxI,EAAA4J,SAAA,YAAAR,GACApJ,EAAA4J,SAAA,UAAAL,EACA,EAMA,CAwBA,SAAAO,EAAAnH,EAAA+E,EAAAjF,GACA,IAAAsH,EAAApH,EAAAoH,MACAC,EAAAtC,EAAAsC,SACAC,EAAAvC,EAAAuC,UACAlC,EAAAL,EAAAK,QACAmC,EAfA,SAAAzH,GACA,OAAAA,EAAAvB,KAIAkC,KAAA0E,KAAArF,EAAAf,eAGA,CACA,CAMAyI,CAAA1H,GACA2H,EAAAF,EAAAnC,EACAsC,GAAAD,GAAA3H,EAAAd,gBAAAqI,EAAAC,GAAA,EAAA,GAeA,MATA,CACAK,IALAD,EAMAE,IALA9H,EAAAhB,cAAAgB,EAAAvB,KAAA+I,EAAAD,GAAAK,EAAAtC,EAAAgC,EAAApL,OAMA0L,KAAAA,EACAH,OAAAA,EACAE,OAAAA,EACAI,SARA,EASAC,SARAV,EAAApL,QAAA8D,EAAAd,gBAAAc,EAAAvB,KAAA,EAAAkC,KAAA0E,KAAArF,EAAAf,gBAWA,CAEA,SAAAgJ,EAAAC,EAAAlI,GACA,IAAAD,EAAA,CAAA,EAEA,SAAAoI,EAAAjI,GACA,IAAA+E,EAnDA,SAAAjF,EAAAE,GACA,IAAA8G,EAAA9G,EAAA8G,IACAO,EAAAvH,EAAAO,aAAAyG,EAAAoB,YAAApB,EAAAqB,aACAb,GAAAD,EAAA5G,KAAA0E,KAAArF,EAAAf,cAAA,GAAAe,EAAAhB,cAAAgB,EAAAf,cAEA,MAAA,CACAqG,QAFAkC,EAAAxH,EAAAhB,aAGAuI,SAAAA,EACAC,UAAAA,EAEA,CAyCAc,CAAAtI,EAAAE,GACAqI,EAAAlB,EAAAnH,EAAA+E,EAAAjF,GACAgE,EAAAwE,QAAA,iBAAAC,QAAAC,UAAAC,eAAA,GAAAD,UAAAE,iBAAA,GAAAH,OAAAI,eAAA1B,oBAAA0B,eACAhN,OAAAC,OAAAiE,EAAA,CACAiE,UAAAA,EACA9D,QAAAA,EACA+E,QAAAA,EACAsD,WAAAA,GAEA,CAIA,OAFAxI,EAAAoI,OAAAA,EACAA,EAAAD,GACAnI,CACA,CAEA,IAAA+I,EAAA,sBACAC,EAAA,cACA,SAAAC,EAAAjJ,EAAAC,GACA,SAAAiJ,EAAAnJ,GACA,IAAAK,EAAAJ,EAAAG,QAAAC,SACAqB,EAAA1B,EAAA0B,MACArB,EAAA+I,iBAAA,IAAAH,EAAA,KAAAlM,QAAA,SAAAsM,GAEA,IAjhBA1M,EAAAC,EAihBA0M,IAAAD,EAAAE,aAAAN,GAjhBAtM,EAkhBA0M,OAjhBA,KADAzM,EAkhBA,CAAAsD,EAAAb,eAAAa,EAAAZ,eAAAY,EAAAX,qBAhhBA3C,EAAA,IAGAC,MAAAC,QAAAF,KAAAA,EAAA,CAAAA,IACAA,EAAAG,QAAA,SAAAC,GACA,OAAAL,EAAAM,UAAAC,SAAAF,IAAAL,EAAAM,UAAAuM,OAAAxM,EACA,GA4gBAsM,IAAA5H,GACAhF,EAAA2M,EAAAnJ,EAAAX,kBAGA+J,IAAA5H,EAAA,GACAhF,EAAA2M,EAAAnJ,EAAAb,gBAGAiK,IAAA5H,EAAA,GACAhF,EAAA2M,EAAAnJ,EAAAZ,eAEA,EACA,CA+BA,SAAAmK,IACAxJ,EAAAG,QAAAC,SAAA+I,iBAAA,IAAAJ,EAAA,KAAAjM,QAAA,SAAA2M,GACA,OAAAzJ,EAAAG,QAAAC,SAAAsJ,YAAAD,EACA,EACA,CAEA,SAAAE,IACA3J,EAAAG,QAAAoH,MAAAzK,QAAA,SAAAJ,EAAA+E,GACA,OAAA/D,EAAAhB,EAAAsM,EAAAvH,EACA,GACA+H,IA7BA,WACA,GAAAvJ,EAAAvB,KAAA,CACA,IAAAyB,EAAAH,EAAAG,QACAqI,EAAAxI,EAAAwI,WACAjB,EAAApH,EAAAoH,MACAnH,EAAAD,EAAAC,SACAsH,EAAAc,EAAAd,OACAkC,EAAArC,EAAAZ,OAAAe,GAAAjB,IAAA,SAAA2C,GACA,OAAAA,EAAAS,WAAA,EACA,GACAC,EAAAvC,EAAAZ,MAAA,EAAAe,GAAAjB,IAAA,SAAA2C,GACA,OAAAA,EAAAS,WAAA,EACA,GACAD,EAAA9M,QAAA,SAAAiN,EAAAtI,GACArB,EAAA4J,YAAAtM,EAAAoM,EAAArI,GAAAsH,IACA3I,EAAA6J,aAAAvM,EAAAkM,EAAAnI,GAAAsH,GAAAxB,EAAA,GACA,EAfA,CAgBA,CAaA2C,EACA,CAEA,SAAAC,IACA,IAAAC,EAEAjK,EAAAH,EAAAG,QACA+E,EAAAlF,EAAAkF,QACA9E,EAAAD,EAAAC,SACAiK,EAAA,CACAC,QAAA,OACAC,WAAA,YACAC,cAAAvK,EAAAO,aAAA,MAAA,UAEAiK,IAAAL,EAAA,CAAA,GAAAnK,EAAAO,aAAA,QAAA,UAAA0E,EAAAuC,UAAA,KAAA2C,EAAAnK,EAAAO,aAAA,eAAA,iBAAAP,EAAAhB,aAAA,KAAAmL,GACAtM,EAAAsC,EAAAiK,GACAjK,EAAA+I,iBAAA,IAAAH,EAAA,KAAAlM,QAAA,SAAAsM,GACA,OAAAtL,EAAAsL,EAAAqB,EACA,EACA,CAsBA,MAAA,CACAC,KArBA,WACAf,IACAQ,GACA,EAmBA9F,OAnFA,SAAAtE,EAAAG,EAAAoD,EAAAqH,GACA,IAAAvK,EAAAJ,EAAAG,QAAAC,SACAwK,OAAAlH,IAAAxD,EAAAD,EAAAlB,MAAAmB,EACAD,EAAAJ,WAAAC,UAAAC,EAAAC,EAAAC,EAAA2K,GAEA7K,EAAAO,SAAA4I,EAAAnJ,GACA4K,GAAAxM,iBAAAiC,GAAAG,UACA+C,GAAAV,WAAAU,EAAAsH,EACA,EA4EAC,QAlBA,WACA,IAAAC,EAAA9K,EAAAG,QACAoH,EAAAuD,EAAAvD,MACAnH,EAAA0K,EAAA1K,SAEA2K,EAAA9K,EAAAO,aAAA,eAAA,gBADA,CAAA,UAAA,cAAA,kBAEA1D,QAAA,SAAAkO,GACA5K,EAAArC,MAAAkN,eAAAD,EACA,GACAzD,EAAAzK,QAAA,SAAAsM,GACA,OAAAA,EAAArL,MAAAkN,eAAAF,EACA,GACAvB,GACA,EAMAW,WAAAA,EAEA,CAwCA,SAAAe,EAAA3K,EAAAiI,GACA,IAAA2C,EAAA5K,EAAAiI,EAAAV,IACAsD,EAAA7K,EAAAiI,EAAAT,IACA,OAAAoD,EAAA,EAAAA,EAAAC,EAAA,EAAAA,EAAA,CACA,CAcA,SAAAC,EAAArL,EAAAD,EAAAE,EAAAqL,EAAAC,GAMA,SAAA/G,EAAAS,GACA,IAAAC,EAAAlF,EAAAkF,QACA,OAAAtE,KAAA0E,KAAA1E,KAAAqB,IAAAgD,GAAAC,EAAAK,QAAAtF,EAAAzB,gBACA,CASA,SAAA6F,EAAAnE,EAAAoD,EAAAqH,GACAW,EAAAjH,OAAAtE,EAAAG,EAAAoD,EAAAqH,EACA,CAOA,SAAApK,EAAA6E,GACA,IAKAoG,EALAC,EAAAzL,EAAAwI,WACAT,EAAA0D,EAAA1D,IACAD,EAAA2D,EAAA3D,IACA4D,EAAA5D,EAAAC,GAAA9H,EAAAvB,KAAAsB,EAAAkF,QAAAK,QAAA,GACAoG,EAAAD,EAAA,EAEA3L,EAAAU,WAAA2E,EAEAnF,EAAAvB,MACA8M,GAAA1D,EAAA1C,GAAAuG,EAAAD,EACA3L,EAAAyL,SAAAA,EAAA,EAAA,EAAAA,EAAAA,EAAA,EAAAA,EAAA,EAAAA,IAEAA,GAAA1D,EAAA1C,GAAAsG,EACA3L,EAAAyL,SAAAA,EAAA,EAAA,EAAAA,EAAA,EAAA,EAAAA,GAGAD,EAAAK,KAAAlL,EAAA7E,EAAA,CAAA,EAAAkE,GACA,CAQA,SAAAwE,EAAAsH,EAAA3L,GACA,IAAAgF,EAAAlF,EAAAkF,QACAsD,EAAAxI,EAAAwI,WACAmD,EAAAnD,EAAAP,SAAAO,EAAAR,SAAA,EACA8D,EAAA7L,EAAAvB,MAAAmN,EAAAF,EAAAA,GAAAA,EAAAE,EAAArD,EAAAP,SAAAO,EAAAP,SAAA4D,EAAArD,EAAAR,SAAAQ,EAAAR,SAAA6D,EACAE,GAAAD,EAAA5G,EAAAK,QAAAiD,EAAAX,KAIA,GAAA,IAAArD,EAAAuH,EAAAhM,EAAAU,aAAAR,EAAAvB,KAAA,CACA,IAAAsN,EAAAd,EAAAnL,EAAAU,WAAA+H,GACAyD,EAAAH,EAAA/L,EAAA0B,MACAyK,EArGA,SAAAC,EAAAN,EAAArD,EAAAyD,GACA,IAAAhE,EAAAO,EAAAP,SAMAiE,GAAAD,EAAA,EAAA,GAAA,IALAzD,EAAAR,SAKAC,EAAA,GAAA4D,EAAAM,EACA,OAAAvL,KAAAqB,IAAAgK,GAAArL,KAAAqB,IAAAiK,GAAAA,EAAAD,CACA,CA4FAG,CAAArM,EAAA0B,MAAAqK,EAAAtD,EAAAyD,GAEAC,IAAAD,GAAAD,EAEAjM,EAAA0B,QAAAqK,GACAvL,EAAAyL,EAAA,EAAAxD,EAAAT,IAAA7C,EAAAK,QAAAyG,EAAAxD,EAAAV,IAAA5C,EAAAK,QAAAyG,GAFAzL,EAAA2L,EAAA,EAAA1D,EAAAT,IAAA7C,EAAAK,QAAAiD,EAAAV,IAAA5C,EAAAK,SAMAlB,EAAA,OAAAX,GAAA,EACA,CAEA6H,EAAAK,KAAAlL,EAAAX,EAAA0B,MAAA1B,EAAA+L,GACA/L,EAAA0B,MAAAqK,EACAvL,EAAAwL,GACA1H,EAAAnE,EAAA,WACAqL,EAAAK,KAAAlL,EAAAoL,EAAA/L,EACA,EACA,CA0DA,MAAA,CACAqI,OANA,WACA7D,EAAAxE,EAAA0B,MAAA,GACA6J,EAAAnB,YACA,EAIA9F,OAAAA,EACA9D,UAAAA,EACAgE,QAAAA,EACAD,YAxDA,SAAA+H,GACA,IAAA5L,EAAAV,EAAAU,WACAyE,EAAAlF,EAAAkF,QACAsD,EAAAxI,EAAAwI,WACA8D,EAAAC,OAAAF,EAAAG,gBAAAhG,MAAA,KAAA,IACAkB,EAAA4E,GAAA,EAAA1L,KAAA6L,IAAA,KAAAH,EAAA,IAAA,EACAP,EAAAtL,EAYA,GAVAR,EAAApB,aAAAoB,EAAAvB,OACA2N,EAAA,GAAA5L,GAAA+H,EAAAV,IACAuE,GAAAzL,KAAA6L,IAAAJ,EAAA3E,EAAAzH,EAAAnB,iBAAA4I,EACA2E,EAAA,GAAA5L,GAAA+H,EAAAT,MACAsE,GAAAzL,KAAA6L,KAAAJ,EAAA3E,EAAAzH,EAAAnB,iBAAA4I,IAIAqE,GAAAM,EAEApM,EAAAvB,KAAA,CACA,IAAA8C,EAAAzB,EAAA+D,QAAAtC,SACA2D,EAAAlF,EAAAO,aAAAgB,EAAAK,UAAAL,EAAAM,UACAkK,EAAAd,EAAAzK,EAAA+H,GAEAwD,GAlKA,SAAA7G,EAAA5E,EAAAiI,GACA,OAAArD,EAAA,GAAA5E,EAAAiI,EAAAV,KAAA3C,EAAA,GAAA5E,EAAAiI,EAAAT,GACA,CAgKA2E,CAAAvH,EAAA1E,EAAA+H,KACAuD,EAAAC,EAAA,EAAAxD,EAAAT,IAAA7C,EAAAK,QAAAyG,EAAAxD,EAAAV,IAAA5C,EAAAK,QAAAyG,EAEA,CAEAzL,EAAAwL,EACA,EA4BAhI,WA1BA,SAAA4I,QACA,IAAAA,IACAA,EAAA,GAGA5M,EAAA4M,eAAAA,EACA5M,EAAAO,SAAA,EACAP,EAAA+E,aAAA,EACA/E,EAAAiF,YAAA,CACA,EAkBAZ,WAhBA,SAAAQ,GACArE,EAAAqE,EACA,EAeAJ,eAAAA,EAEA,CAEA,SAAAoI,EAAAlQ,EAAAuD,GACA,IAAAgH,EAAA,iBAAAvK,EAAA0K,SAAAyF,KAAAC,cAAApQ,GAAAA,EACA0D,EAAA6G,EAAA6F,cAAA,IAAA7M,EAAAT,cACA+H,EAAA,GAAAZ,MAAApK,KAAA0K,EAAA8F,uBAAA9M,EAAAV,aAIA,MAAA,CACA0H,IAAAA,EACA7G,SAAAA,EACAmH,MANAA,EAAAA,EAAAyF,OAAA,SAAAC,GACA,OAAA,OAAAA,EAAA3D,aAAA,sBACA,GAMA,CAEA,IAAA3N,EAAA,SAAAA,EAAAe,EAAAwQ,GACA,IApvBAC,EAovBAlN,EAtwBA,SAAAiN,GACA,IAAAjN,EAAApE,EAAA,CAAA,EAAAuC,EAAA8O,GAEA,OAAArR,EAAA,CAAA,EAAAoE,EAAA,CACAO,aAAA,eAAAP,EAAA5B,WAEA,CAgwBA+O,CAAAF,GACA3B,GArvBA4B,EAAA,CAAA,EAkCA,CACAE,GAjCA,SAAAjQ,EAAAkG,GACA6J,EAAA/P,GAGA+P,EAAA/P,GAAAgF,KAAAkB,GAFA6J,EAAA/P,GAAA,CAAAkG,EAIA,EA4BAgK,IA1BA,SAAAlQ,EAAAkG,GACA,GAAA6J,EAAA/P,GAAA,CACA,IAAAqE,EAAA0L,EAAA/P,GAAAgJ,QAAA9C,GAEA7B,GAAA,GAAA0L,EAAA/P,GAAAmQ,OAAA9L,EAAA,EACA,CACA,EAqBAmK,KAnBA,SAAAxO,GACA,IAAA,IAAAoQ,EAAAtR,UAAAC,OAAAsR,EAAA,IAAA7Q,MAAA4Q,EAAA,EAAAA,EAAA,EAAA,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IACAD,EAAAC,EAAA,GAAAxR,UAAAwR,GAGAP,EAAA/P,IACA+P,EAAA/P,GAAAN,QAAA,SAAAwG,GACA,OAAAA,EAAA9G,WAAA,EAAAiR,EACA,EAEA,EAUAtL,MARA,WACAgL,EAAA,CAAA,CACA,IAutBAnN,EAAAkI,EADA0E,EAAAlQ,EAAAuD,GACAA,GACAF,EAzoBA,CACA+D,QAAAhD,IACAW,MAAA,EACAkL,eAAA,EACArM,SAAA,EACAwE,aAAA,EACAE,YAAA,EACAvE,WAAA,EACA+K,SAAA,GAkoBA6B,EAAA9B,EAAA8B,GACAC,EAAA/B,EAAA+B,IACA1B,EAAAL,EAAAK,KACA+B,EAAA,CACAN,GAAAA,EACAC,IAAAA,EACAtN,IAAAA,EACAD,MAAAA,EACAE,QAAAA,IAEAA,EAAA2N,SAAAjS,EAAAiS,SAAA,IAAA9Q,QAAA,SAAA+Q,GACA,OAAAA,EAAAF,EAAA1N,EACA,GACA2L,EAAAlL,EAAAiN,GAEA,IAAArC,EAAArC,EAAAjJ,EAAAC,GACA4D,EAAAwH,EAAArL,EAAAD,EAAAE,EAAAqL,EAAAC,GACAuC,EAAA9J,EAAAhE,EAAAD,EAAAE,EAAA4D,GAsBA,IAAAU,EAAAV,EAAAU,QAWA,OAVAzI,OAAAC,OAAA4R,EAAA,CACAvF,OATA,WACAkD,EAAAT,UACA7K,EAAAoI,OAAAwE,EAAAlQ,EAAAuD,IACAqL,EAAAZ,OACA7G,EAAAuE,QACA,EAKAyC,QAvBA,WACAe,EAAAlL,EAAAiN,GACAG,EAAAzG,SACAiE,EAAAT,UACAe,EAAAlL,EAAAiN,GACApC,EAAApJ,OACA,EAkBAoC,QAAAA,EACA4F,WAjBA,WACAnK,EAAAoI,OAAAwE,EAAAlQ,EAAAuD,IACA4D,EAAAuE,QACA,IAgBAkD,EAAAZ,OACAoD,EAAA9G,SACAzC,EAAAtE,EAAAxB,aAAA,GACAmN,EAAAlL,EAAAiN,GACAA,CACA,EAMA,OAJAhS,EAAAoS,IAAA,SAAAH,GACAjS,EAAAiS,QAAAA,CACA,EAEAjS,CAEA,GC77BA,SAAAR,EAAAC,GACA,YAAA,oBAAAC,QAAA,YAAAR,QAAAQ,WAAA,oBAAAC,OAAAA,OAAAD,QAAAD,IACA,mBAAAG,QAAAA,OAAAC,IAAAD,OAAAH,IACAD,EAAA,oBAAAM,WAAAA,WAAAN,GAAAO,MAAAsS,qBAAA5S,GACA,CAJA,CAIAQ,KAAA,WAAA,aAEA,SAAAa,EAAAC,EAAAC,QACA,IAAAA,IACAA,EAAA,IAGAC,MAAAC,QAAAF,KAAAA,EAAA,CAAAA,IACAA,EAAAG,QAAA,SAAAC,GACA,OAAAL,EAAAM,UAAAC,SAAAF,IAAAL,EAAAM,UAAAE,IAAAH,EACA,EACA,CACA,SAAAkR,EAAAvR,EAAAC,QACA,IAAAA,IACAA,EAAA,IAGAC,MAAAC,QAAAF,KAAAA,EAAA,CAAAA,IACAA,EAAAG,QAAA,SAAAC,GACA,OAAAL,EAAAM,UAAAC,SAAAF,IAAAL,EAAAM,UAAAuM,OAAAxM,EACA,EACA,CA6FA,OApFA,SAAA4Q,EAAA1N,GACA,IAAAiO,EAAAzF,QAAAxI,EAAAkO,UACAC,EAAAtS,OAAAC,OAAA,CACAsS,cAAA,EACAC,mBAAA,EACAC,uBAAA,EACAC,aAAA,cACAC,aAAA,sBACAC,YAAA,qBACAC,eAAA,yBACA1O,EAAAkO,UACAA,EAAA,CACAS,KAAA,SAAAnN,GACA,IAAA2H,EAAAuE,EAAA3N,IAAAG,QAAAoH,MAAA9F,GACA,GAAA2H,EAAA,CACA,IAAAyF,EAAA,GAAAlI,MAAApK,KAAA6M,EAAA2D,uBAAAqB,EAAAI,eACAM,EAAA,GAAAnI,MAAApK,KAAA6M,EAAA2D,uBAAAqB,EAAAO,iBAmBAE,EAAA/R,QAAA,SAAAiS,GACA,GAAAA,EAAAC,aAAA,YAAA,CACA,IAAAC,EAAAF,EAAAzF,aAAA,YACA7M,EAAAsS,EAAA,CAAAX,EAAAK,eACAR,EAAAc,EAAA,CAAAX,EAAAM,cACAK,EAAAE,IAAAA,EAEAF,EAAAG,OAAA,WACA,OAAAC,EAAAJ,EACA,EAEAA,EAAAK,QAAA,WACA,OAAAD,EAAAJ,EACA,CAZA,CAaA,EAnCA,CAIA,SAAAI,EAAAJ,GACAA,EAAAM,gBAAA,YACA5S,EAAAsS,EAAA,CAAAX,EAAAM,cACAT,EAAAc,EAAA,CAAAX,EAAAK,eACAM,EAAAG,OAAA,KACAH,EAAAK,QAAA,KACAL,EAAAO,UAAA,EAEAT,EAAAU,MAAA,SAAA9F,GACA,OAAAA,EAAA6F,QACA,IACAR,EAAAhS,QAAA,SAAA0S,GACAA,EAAAC,cAAA/F,YAAA8F,EACA,EAEA,CAiBA,EACAE,UAAA,SAAAjO,EAAAkO,GAGA,GAFAxB,EAAAS,KAAAnN,GAEA2M,EAAAC,cAAAsB,GAAA,EACA,IAAA,IAAA1T,EAAA,EAAAA,GAAA0T,EAAA1T,IACAkS,EAAAS,KAAAnN,EAAAxF,GACAkS,EAAAS,KAAAnN,EAAAxF,EAGA,GAEAiS,IACAP,EAAAN,GAAA,cAAA,WACAM,EAAAQ,SAAAA,CACA,GAEAC,EAAAG,sBACAZ,EAAAN,GAAA,eAAA,SAAAuC,EAAA7P,EAAA8P,GACA1B,EAAAuB,UAAAG,EAAAzB,EAAAE,mBACA,GAEAX,EAAAN,GAAA,cAAA,SAAA5L,GACA0M,EAAAuB,UAAAjO,EAAA2M,EAAAE,mBACA,GAGAX,EAAAN,GAAA,gBAAA,WACAM,EAAAQ,iBACAR,EAAAQ,QAEA,GACA,CAIA,GCxHA,SAAAhT,EAAAC,GACA,YAAA,oBAAAC,QAAA,YAAAR,QAAAQ,WAAA,oBAAAC,OAAAA,OAAAD,QAAAD,IACA,mBAAAG,QAAAA,OAAAC,IAAAD,OAAAH,IACAD,EAAA,oBAAAM,WAAAA,WAAAN,GAAAO,MAAAoU,uBAAA1U,GACA,CAJA,CAIAQ,KAAA,WAAA,aA2DA,OAlDA,SAAA+R,EAAA1N,GACA,IAAAiO,EAAAzF,QAAAxI,EAAA8P,YACAC,EAAAlU,OAAAC,OAAA,CACAkU,QAAA,EACAC,YAAA,EACA1M,SAAA,KACAvD,EAAA8P,YACAI,EAAA,CACAlJ,IAAA,MAEAmJ,EAAA,CACAC,UAAA,EACAC,WAAA,EACAC,cAAA,GAGAlT,EAAA,SAAAsI,GACA,IAAAnF,EAAAI,KAAAqB,IAAA0D,EAAA6K,QAAA5P,KAAAqB,IAAA0D,EAAA8K,QACA,GAAAxQ,EAAAO,eAAAA,EAAA,CACA,IAAAG,EAAAH,EAAAmF,EAAA6K,OAAA7K,EAAA8K,OACAhP,EAAAkM,EAAA5N,MAAA0B,MAEA,GAAAb,KAAAqB,IAAAtB,GAAAC,KAAAqB,IAAAmO,EAAAE,YAAA,IAAAF,EAAAC,UAAAzP,KAAAqB,IAAAtB,IAAAqP,EAAAE,YAAA,CACA,IAAAQ,EAAAV,EAAAC,OAAA,GAAA,EACAtC,EAAApJ,QAAA5D,EAAA,EAAAc,EAAAiP,EAAAjP,EAAAiP,GACAN,EAAAC,UAAA,EACAD,EAAAG,cAAA3N,WAAA,WACAwN,EAAAC,UAAA,CACA,EAAAL,EAAAxM,SACA,CAEA4M,EAAAE,WAAA3P,EACAgF,EAAAW,iBACAX,EAAAkB,iBAfA,CAgBA,EAEA8G,EAAAN,GAAA,aAAA,WACA,GAAAa,EAAA,CACA,IACAjH,EADA0G,EAAA3N,IAAAG,QACA8G,IACAkJ,EAAAlJ,IAAAA,EA/CA,SAAAvK,EAAAU,EAAAC,EAAAC,GACAZ,EAAAa,iBAAAH,EAAAC,EAAAC,EACA,CA8CAH,CAAA8J,EAAA,QAAA5J,EAJA,CAKA,GACAsQ,EAAAN,GAAA,gBAAA,WACAa,KAhDA,SAAAxR,EAAAU,EAAAC,GACAX,EAAAe,oBAAAL,EAAAC,EACA,CA+CAG,CAAA2S,EAAAlJ,IAAA,QAAA5J,UACA8S,EAAAlJ,IACA,EACA,CAIA,GCjEA,SAAA9L,EAAAC,GACA,YAAA,oBAAAC,QAAA,YAAAR,QAAAQ,WAAA,oBAAAC,OAAAA,OAAAD,QAAAD,IACA,mBAAAG,QAAAA,OAAAC,IAAAD,OAAAH,IACAD,EAAA,oBAAAM,WAAAA,WAAAN,GAAAO,MAAAiV,4BAAAvV,GACA,CAJA,CAIAQ,KAAA,WAAA,aASA,IAAAgV,EACA,UADAA,EAEA,aAFAA,EAGA,YAHAA,EAIA,YAGA,SAAAC,EAAAnU,GACA,IAAAA,EAAA,OAAA,EACA,IAAAqB,EAAAI,iBAAAzB,GAEA,QADA,WAAAqB,EAAA+S,YAAA,SAAA/S,EAAAuM,YAEA5N,EAAA+S,eAAA,IAAA/S,EAAA+S,cAAAsB,UAAAF,EAAAnU,EAAA+S,eACA,CAEA,SAAAuB,EAAAtU,GACA,IAAAoU,EAAAD,EAAAnU,GACAuU,EAAAvU,EAAAwU,wBAEA,OADAD,EAAAE,KAAA,GAAAF,EAAAG,QAAA1I,OAAA2I,aAAAJ,EAAAK,MAAA,GAAAL,EAAAM,OAAA7I,OAAA8I,YACAV,CACA,CAsDA,OA7CA,SAAAnD,EAAA1N,GACA,IAAAiO,EAAAzF,QAAAxI,EAAAwR,UACAC,EAAA5V,OAAAC,OAAA,CACA4V,SAAA,EACAC,gBAAA,GACA3R,EAAAwR,UACAA,EAAA,CACAI,OAAA,WACAH,EAAAC,SAAA,CACA,EACAG,QAAA,WACAJ,EAAAC,SAAA,CACA,EACAI,UAAA,SAAApM,GACA,IAAAtJ,EAAAsJ,EAAAtJ,IACAqV,EAAAE,iBAAAZ,EAAArD,EAAA3N,IAAAG,QAAA8G,OAAAyK,EAAAC,UAEA1R,EAAAO,aACAnE,IAAAuU,EACAjD,EAAApJ,QAAAoJ,EAAA5N,MAAA0B,MAAA,GACApF,IAAAuU,GACAjD,EAAApJ,QAAAoJ,EAAA5N,MAAA0B,MAAA,GAGApF,IAAAuU,EACAjD,EAAApJ,QAAAoJ,EAAA5N,MAAA0B,MAAA,GACApF,IAAAuU,GACAjD,EAAApJ,QAAAoJ,EAAA5N,MAAA0B,MAAA,GAGA,GAEAyM,IACAP,EAAAN,GAAA,cAAA,WArEA,IAAA3Q,EAAAU,EAAAC,EAAAC,EAsEAqQ,EAAA8D,SAAAA,EAtEA/U,EAuEAgM,OAvEAtL,EAuEA,UAvEAC,EAuEAoU,EAAAM,UAtEArV,EAAAa,iBAAAH,EAAAC,EAAAC,EAuEA,GACAqQ,EAAAN,GAAA,gBAAA,WAtEA,IAAA3Q,EAAAU,EAAAC,EAuEAsQ,EAAA8D,WAvEA/U,EAwEAgM,OAxEAtL,EAwEA,UAxEAC,EAwEAoU,EAAAM,UAvEArV,EAAAe,oBAAAL,EAAAC,UAwEAsQ,EAAA8D,SAEA,GACA,CAIA,GCzFA,SAAAtW,EAAAC,GACA,YAAA,oBAAAC,QAAA,YAAAR,QAAAQ,WAAA,oBAAAC,OAAAA,OAAAD,QAAAD,IACA,mBAAAG,QAAAA,OAAAC,IAAAD,OAAAH,IACAD,EAAA,oBAAAM,WAAAA,WAAAN,GAAAO,MAAAsW,uBAAA5W,GACA,CAJA,CAIAQ,KAAA,WAAA,aAEA,SAAAuB,EAAAT,EAAAU,EAAAC,EAAAC,GACAZ,EAAAa,iBAAAH,EAAAC,EAAAC,EACA,CACA,SAAAE,EAAAd,EAAAU,EAAAC,GACAX,EAAAe,oBAAAL,EAAAC,EACA,CAyGA,OAvGA,SAAAsQ,EAAA1N,GACA,IAAAiO,EAAAzF,QAAAxI,EAAAgS,YACAC,EAAA,CACAC,OAAA,KACAC,OAAA,MAEAC,EAAAvW,OAAAC,OAAA,CACAuW,cAAA,0BACArS,EAAAgS,YAEAM,EAAA,SAAA5M,GACA6M,EAAA7M,EAAA3J,OAAA,OACA,EAEAyW,EAAA,SAAA9M,GACA6M,EAAA7M,EAAA3J,OAAA,OACA,EAEAwW,EAAA,SAAA7M,EAAA+M,GACA,IAAAC,EAAAhN,IAAAgI,EAAA1N,QAAAvB,KAAA,CAIA,IAAA+C,EAAAkM,EAAA5N,MAAA0B,MAEA,SAAAiR,GACA/E,EAAApJ,QAAA9C,EAAA,GAGA,SAAAiR,GACA/E,EAAApJ,QAAA9C,EAAA,EATA,CAWA,EA0BAkR,EAAA,SAAAhN,GACA,OAAAA,EAAA3I,UAAAC,SAAAoV,EAAAC,cACA,EAgBA3E,EAAAN,GAAA,eAAA,SAAAlB,EAAApM,EAAA8P,GA1CA,IAAApO,EACAmR,EACA5K,EACAC,EAwCA0F,EAAA1N,QAAAvB,OA3CA+C,EA4CAoO,EA3CA+C,EAAAjF,EAAA3N,IAAAwI,WACAR,EAAA4K,EAAA5K,SACAC,EAAA2K,EAAA3K,SAEAiK,GAAAA,EAAAE,QAAAF,EAAAC,SACAD,EAAAC,OAAAnV,UAAAC,SAAAoV,EAAAC,gBAAA7Q,GAAAuG,GACAkK,EAAAC,OAAAnV,UAAAuM,OAAA8I,EAAAC,eAGAJ,EAAAE,OAAApV,UAAAC,SAAAoV,EAAAC,gBAAA7Q,GAAAwG,GACAiK,EAAAE,OAAApV,UAAAuM,OAAA8I,EAAAC,eAGA7Q,IAAAuG,GACAkK,EAAAE,OAAApV,UAAAE,IAAAmV,EAAAC,eAGA7Q,IAAAwG,GACAiK,EAAAC,OAAAnV,UAAAE,IAAAmV,EAAAC,gBA2BA,GACA3E,EAAAN,GAAA,aAAA,WAnBA,IACA5L,EACA8F,EACAS,EAiBAkG,IACAgE,EAAAC,OAAA,iBAAAE,EAAAF,OAAA/K,SAAAyF,KAAAC,cAAAuF,EAAAF,QAAAE,EAAAF,OACAD,EAAAE,OAAA,iBAAAC,EAAAD,OAAAhL,SAAAyF,KAAAC,cAAAuF,EAAAD,QAAAC,EAAAD,OAEAzE,EAAA1N,QAAAvB,OAvBA+C,EAAAkM,EAAA5N,MAAA0B,MACA8F,EAAAoG,EAAA3N,IAAAG,QAAAoH,MACAS,EAAA2F,EAAA3N,IAAAwI,WAAAR,SAEAvG,IAAAuG,GAAAkK,EAAAE,QACAF,EAAAE,OAAApV,UAAAE,IAAAmV,EAAAC,eAGA/K,EAAApL,SAAA6L,GAAAkK,EAAAC,QACAD,EAAAC,OAAAnV,UAAAE,IAAAmV,EAAAC,gBAkBAnV,EAAA+U,EAAAC,OAAA,QAAAI,GACApV,EAAA+U,EAAAE,OAAA,QAAAK,GACA,GACA9E,EAAAN,GAAA,gBAAA,WACA6E,GAAAA,EAAAE,QAAAF,EAAAC,SACA3U,EAAA0U,EAAAC,OAAA,QAAAI,GACA/U,EAAA0U,EAAAE,OAAA,QAAAK,UACAP,EAAAC,cACAD,EAAAE,OAEA,EACA,CAIA,GLhHAS,IAAAC,QAAA,CACAC,UAAA,GACA3Q,KAAA,SAAA4Q,GACApX,KAAAmX,UAAA3Q,KAAA4Q,EACA,EACAC,KAAA,WAAA,IAAAC,EAAAtX,KACA8M,OAAAnL,iBAAA,SAAAsV,IAAAM,SAAA,IAAA,EAAA,SAAAxN,GACA,IAAA,IAAAlE,EAAA,EAAAA,EAAAyR,EAAAH,UAAA5W,OAAAsF,IAAA,CACAyR,EAAAH,UAAAtR,GACA0I,YACA,CACA,GACA,EACAO,KAAA,WACA9O,KAAAqX,MACA,GAGAJ,IAAAC,QAAApI","file":"../../javascript/tiny-swiper.js","sourcesContent":["(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  function _extends() {\n    _extends = Object.assign || function (target) {\n      for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i];\n\n        for (var key in source) {\n          if (Object.prototype.hasOwnProperty.call(source, key)) {\n            target[key] = source[key];\n          }\n        }\n      }\n\n      return target;\n    };\n\n    return _extends.apply(this, arguments);\n  }\n\n  function addClass(el, list) {\n    if (list === void 0) {\n      list = [];\n    }\n\n    if (!Array.isArray(list)) list = [list];\n    list.forEach(function (clz) {\n      return !el.classList.contains(clz) && el.classList.add(clz);\n    });\n  }\n  function removeClass(el, list) {\n    if (list === void 0) {\n      list = [];\n    }\n\n    if (!Array.isArray(list)) list = [list];\n    list.forEach(function (clz) {\n      return el.classList.contains(clz) && el.classList.remove(clz);\n    });\n  }\n  function attachListener(el, evtName, handler, opts) {\n    el.addEventListener(evtName, handler, opts);\n  }\n  function detachListener(el, evtName, handler) {\n    el.removeEventListener(evtName, handler);\n  }\n  function setAttr(el, attr, value) {\n    if (value === void 0) {\n      value = '';\n    }\n\n    el.setAttribute(attr, value);\n    return el;\n  }\n  function setStyle(el, style, forceRender) {\n    Object.keys(style).forEach(function (prop) {\n      // TS7015: Element implicitly has an 'any' type because index expression is not of type 'number'.\n      el.style[prop] = style[prop];\n    }); // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\n    forceRender && getComputedStyle(el);\n    return el;\n  }\n  function getTranslate(el, isHorizontal) {\n    var matrix = getComputedStyle(el).transform.replace(/[a-z]|\\(|\\)|\\s/g, '').split(',').map(parseFloat);\n    var arr = [];\n\n    if (matrix.length === 16) {\n      arr = matrix.slice(12, 14);\n    } else if (matrix.length === 6) {\n      arr = matrix.slice(4, 6);\n    }\n\n    return arr[isHorizontal ? 0 : 1] || 0;\n  }\n\n  function translate(state, env, options, duration) {\n    var $wrapper = env.element.$wrapper;\n    var wrapperStyle = {\n      transition: state.isStart ? 'none' : \"transform ease \" + duration + \"ms\",\n      transform: options.isHorizontal ? \"translate3d(\" + state.transforms + \"px, 0, 0)\" : \"translate3d(0, \" + state.transforms + \"px, 0)\"\n    };\n    setStyle($wrapper, wrapperStyle);\n  }\n\n  var defaultOptions = {\n    // `isHorizontal` is computed value\n    direction: 'horizontal',\n    touchRatio: 1,\n    touchAngle: 45,\n    longSwipesRatio: 0.5,\n    initialSlide: 0,\n    loop: false,\n    freeMode: false,\n    passiveListeners: true,\n    resistance: true,\n    resistanceRatio: 0.85,\n    speed: 300,\n    longSwipesMs: 300,\n    spaceBetween: 0,\n    slidesPerView: 1,\n    centeredSlides: false,\n    slidePrevClass: 'swiper-slide-prev',\n    slideNextClass: 'swiper-slide-next',\n    slideActiveClass: 'swiper-slide-active',\n    slideClass: 'swiper-slide',\n    wrapperClass: 'swiper-wrapper',\n    touchStartPreventDefault: true,\n    touchStartForcePreventDefault: false,\n    touchMoveStopPropagation: false,\n    excludeElements: [],\n    injections: {\n      translate: translate\n    }\n  };\n  function optionFormatter(userOptions) {\n    var options = _extends({}, defaultOptions, userOptions);\n\n    return _extends({}, options, {\n      isHorizontal: options.direction === 'horizontal'\n    });\n  }\n\n  var LIFE_CYCLES = {\n    BEFORE_INIT: 'before-init',\n    AFTER_INIT: 'after-init',\n    BEFORE_SLIDE: 'before-slide',\n    SCROLL: 'scroll',\n    AFTER_SLIDE: 'after-slide',\n    BEFORE_DESTROY: 'before-destroy',\n    AFTER_DESTROY: 'after-destroy'\n  };\n  function EventHub() {\n    var hub = {};\n\n    function on(evtName, cb) {\n      if (!hub[evtName]) {\n        hub[evtName] = [cb];\n      } else {\n        hub[evtName].push(cb);\n      }\n    }\n\n    function off(evtName, cb) {\n      if (hub[evtName]) {\n        var index = hub[evtName].indexOf(cb); // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\n        index > -1 && hub[evtName].splice(index, 1);\n      }\n    }\n\n    function emit(evtName) {\n      for (var _len = arguments.length, data = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        data[_key - 1] = arguments[_key];\n      }\n\n      if (hub[evtName]) {\n        hub[evtName].forEach(function (cb) {\n          return cb.apply(void 0, data);\n        });\n      }\n    }\n\n    function clear() {\n      hub = {};\n    }\n\n    return {\n      on: on,\n      off: off,\n      emit: emit,\n      clear: clear\n    };\n  }\n\n  var delta = 180 / Math.PI;\n  function Vector(logs, index) {\n    var trace = logs[index];\n    var formerTrace = logs[index - 1] || trace; // In case click action, there will be only one log data\n\n    var diff = {\n      x: trace.x - formerTrace.x,\n      y: trace.y - formerTrace.y\n    };\n    var duration = trace.time - formerTrace.time;\n    var velocityX = diff.x / duration || 0;\n    var velocityY = diff.y / duration || 0;\n    var angle = Math.atan2(Math.abs(diff.y), Math.abs(diff.x)) * delta;\n    return _extends({}, diff, {\n      angle: angle,\n      velocityX: velocityX,\n      velocityY: velocityY\n    });\n  }\n  function Tracker() {\n    var logs = [];\n\n    function push(position) {\n      logs.push(_extends({\n        time: Date.now()\n      }, position));\n    }\n\n    function vector() {\n      return Vector(logs, logs.length - 1);\n    }\n\n    function clear() {\n      logs = [];\n    }\n\n    function getLogs() {\n      return logs;\n    }\n\n    function getDuration() {\n      var first = logs[0];\n      var last = logs[logs.length - 1];\n      return first ? last.time - first.time : 0;\n    }\n\n    function getOffset() {\n      var first = logs[0];\n      var last = logs[logs.length - 1];\n      return first ? {\n        x: last.x - first.x,\n        y: last.y - first.y\n      } : {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      getDuration: getDuration,\n      getOffset: getOffset,\n      getLogs: getLogs,\n      vector: vector,\n      clear: clear,\n      push: push\n    };\n  }\n\n  function State() {\n    var state = {\n      tracker: Tracker(),\n      index: 0,\n      startTransform: 0,\n      isStart: false,\n      isScrolling: false,\n      isTouching: false,\n      transforms: 0,\n      progress: 0\n    };\n    return state;\n  }\n\n  function now() {\n    return performance ? performance.now() : Date.now();\n  }\n\n  var nextFrame = requestAnimationFrame || webkitRequestAnimationFrame || setTimeout;\n  var cancelNextFrame = cancelAnimationFrame || webkitCancelAnimationFrame || clearTimeout;\n  function Tick() {\n    var startTime;\n    var id;\n\n    function run(cb) {\n      // eslint-disable-next-line no-void\n      startTime = startTime === void 0 ? now() : startTime; // Why do not use callback argument:\n      // https://stackoverflow.com/questions/50895206/exact-time-of-display-requestanimationframe-usage-and-timeline\n\n      id = nextFrame(function () {\n        var timeStamp = now();\n        var interval = timeStamp - startTime;\n        startTime = timeStamp;\n        cb(interval);\n      });\n    }\n\n    function stop() {\n      startTime = undefined;\n      cancelNextFrame(id);\n    }\n\n    return {\n      run: run,\n      stop: stop\n    };\n  }\n\n  function Animation() {\n    var tick = Tick();\n\n    function run(task) {\n      tick.run(function (interval) {\n        run(task);\n        task(interval);\n      });\n    }\n\n    function stop() {\n      tick.stop();\n    }\n\n    return {\n      run: run,\n      stop: stop\n    };\n  }\n\n  function resetState(state, operations) {\n    var tracker = state.tracker;\n    var initStatus = operations.initStatus;\n    tracker.clear();\n    initStatus();\n  }\n\n  function Actions(options, env, state, operations) {\n    var initLayout = operations.initLayout,\n        initStatus = operations.initStatus,\n        render = operations.render,\n        scrollPixel = operations.scrollPixel,\n        slideTo = operations.slideTo,\n        getOffsetSteps = operations.getOffsetSteps;\n    var animation = Animation();\n\n    function preheat(originPosition, originTransform) {\n      var tracker = state.tracker;\n      animation.stop();\n      tracker.clear();\n      tracker.push(originPosition);\n      initLayout(originTransform);\n      initStatus(originTransform);\n      state.isStart = true;\n      render();\n    }\n\n    function move(position) {\n      var tracker = state.tracker;\n      var touchRatio = options.touchRatio,\n          touchAngle = options.touchAngle,\n          isHorizontal = options.isHorizontal;\n      if (!state.isStart || state.isScrolling) return;\n      tracker.push(position);\n      var vector = tracker.vector();\n      var displacement = tracker.getOffset(); // Ignore this move action if there is no displacement of screen touch point.\n      // In case of minimal mouse move event. (Moving mouse extreme slowly will get the zero offset.)\n\n      if (!displacement.x && !displacement.y) return;\n\n      if (isHorizontal && vector.angle < touchAngle || !isHorizontal && 90 - vector.angle < touchAngle || state.isTouching) {\n        var offset = vector[isHorizontal ? 'x' : 'y'] * touchRatio;\n        state.isTouching = true;\n        scrollPixel(offset);\n        render();\n      } else {\n        state.isScrolling = true;\n        tracker.clear();\n      }\n    }\n\n    function stop() {\n      var index = state.index,\n          tracker = state.tracker;\n      var measure = env.measure;\n      if (!state.isStart) return;\n      state.isStart = false;\n\n      if (!options.freeMode) {\n        var duration = tracker.getDuration();\n        var trans = tracker.getOffset()[options.isHorizontal ? 'x' : 'y'];\n        var jump = Math.ceil(Math.abs(trans) / measure.boxSize);\n        var longSwipeIndex = getOffsetSteps(trans);\n\n        if (duration > options.longSwipesMs) {\n          // long swipe action\n          slideTo(index + longSwipeIndex * (trans > 0 ? -1 : 1));\n        } else {\n          // short swipe action\n          slideTo(trans > 0 ? index - jump : index + jump);\n        }\n\n        resetState(state, operations);\n      } else {\n        var vector = tracker.vector();\n        var velocity = vector[options.isHorizontal ? 'velocityX' : 'velocityY'];\n        animation.run(function (duration) {\n          var offset = velocity * duration;\n          velocity *= 0.98;\n\n          if (Math.abs(offset) < 0.01) {\n            animation.stop();\n            resetState(state, operations);\n          } else {\n            scrollPixel(offset);\n            render(0);\n          }\n        });\n      }\n    }\n\n    return {\n      preheat: preheat,\n      move: move,\n      stop: stop\n    };\n  }\n\n  function Sensor(env, state, options, operations) {\n    var touchable = env.touchable;\n    var formEls = ['INPUT', 'SELECT', 'OPTION', 'TEXTAREA', 'BUTTON', 'VIDEO'];\n    var actions = Actions(options, env, state, operations);\n    var preheat = actions.preheat,\n        move = actions.move,\n        stop = actions.stop;\n\n    function getPosition(e) {\n      var touch = touchable ? e.changedTouches[0] : e;\n      return {\n        x: touch.pageX,\n        y: touch.pageY\n      };\n    }\n\n    function onTouchStart(e) {\n      for (var i = 0; i < options.excludeElements.length; i++) {\n        if (options.excludeElements[i].contains(e.target)) return;\n      }\n\n      var $wrapper = env.element.$wrapper;\n      var shouldPreventDefault = options.touchStartPreventDefault && formEls.indexOf(e.target.nodeName) === -1 || options.touchStartForcePreventDefault; // `preventDefault` can not be called with `passiveListeners`\n      //      See: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n      //      And: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n\n      if (!touchable && shouldPreventDefault) e.preventDefault();\n      preheat(getPosition(e), getTranslate($wrapper, options.isHorizontal));\n    }\n\n    function onTouchMove(e) {\n      if (options.touchMoveStopPropagation) e.stopPropagation();\n      move(getPosition(e));\n      if (state.isTouching && e.cancelable !== false) e.preventDefault();\n    }\n\n    function onTouchEnd() {\n      stop();\n    }\n\n    function attach() {\n      var $el = env.element.$el;\n\n      if (touchable) {\n        attachListener($el, 'touchstart', onTouchStart, {\n          passive: options.passiveListeners,\n          capture: false\n        });\n        attachListener($el, 'touchmove', onTouchMove);\n        attachListener($el, 'touchend', onTouchEnd);\n        attachListener($el, 'touchcancel', onTouchEnd);\n      } else {\n        attachListener($el, 'mousedown', onTouchStart);\n        attachListener(document, 'mousemove', onTouchMove);\n        attachListener(document, 'mouseup', onTouchEnd);\n      }\n    }\n\n    function detach() {\n      var $el = env.element.$el;\n      detachListener($el, 'touchstart', onTouchStart);\n      detachListener($el, 'touchmove', onTouchMove);\n      detachListener($el, 'touchend', onTouchEnd);\n      detachListener($el, 'touchcancel', onTouchEnd);\n      detachListener($el, 'mousedown', onTouchStart);\n      detachListener(document, 'mousemove', onTouchMove);\n      detachListener(document, 'mouseup', onTouchEnd);\n    }\n\n    return {\n      attach: attach,\n      detach: detach\n    };\n  }\n\n  function Measure(options, element) {\n    var $el = element.$el;\n    var viewSize = options.isHorizontal ? $el.offsetWidth : $el.offsetHeight;\n    var slideSize = (viewSize - Math.ceil(options.slidesPerView - 1) * options.spaceBetween) / options.slidesPerView;\n    var boxSize = slideSize + options.spaceBetween;\n    return {\n      boxSize: boxSize,\n      viewSize: viewSize,\n      slideSize: slideSize\n    };\n  }\n\n  function getExpand(options) {\n    if (options.loop) {\n      // return options.slidesPerView >= element.$list.length\n      //     ? options.slidesPerView - element.$list.length + 1\n      //     : 1\n      return Math.ceil(options.slidesPerView);\n    }\n\n    return 0;\n  }\n  function Limitation(element, measure, options) {\n    var $list = element.$list;\n    var viewSize = measure.viewSize,\n        slideSize = measure.slideSize,\n        boxSize = measure.boxSize;\n    var expand = getExpand(options);\n    var buffer = expand * boxSize;\n    var base = -buffer + (options.centeredSlides ? (viewSize - slideSize) / 2 : 0); // [min, max] usually equal to [-x, 0]\n\n    var max = base;\n    var min = options.spaceBetween + (options.loop ? slideSize : viewSize) + base - boxSize * $list.length;\n    var minIndex = 0;\n    var maxIndex = $list.length - (options.centeredSlides || options.loop ? 1 : Math.ceil(options.slidesPerView));\n    var limitation = {\n      max: max,\n      min: min,\n      base: base,\n      expand: expand,\n      buffer: buffer,\n      minIndex: minIndex,\n      maxIndex: maxIndex\n    };\n    return limitation;\n  }\n\n  function Env(elem, options) {\n    var env = {};\n\n    function update(element) {\n      var measure = Measure(options, element);\n      var limitation = Limitation(element, measure, options);\n      var touchable = Boolean('ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 || window.DocumentTouch && document instanceof DocumentTouch);\n      Object.assign(env, {\n        touchable: touchable,\n        element: element,\n        measure: measure,\n        limitation: limitation\n      });\n    }\n\n    env.update = update;\n    update(elem);\n    return env;\n  }\n\n  var shallowTag = 'data-shallow-slider';\n  var sliderTag = 'data-slider';\n  function Renderer(env, options) {\n    function updateItem(state) {\n      var $wrapper = env.element.$wrapper;\n      var index = state.index;\n      $wrapper.querySelectorAll(\"[\" + sliderTag + \"]\").forEach(function ($slide) {\n        // eslint-disable-next-line no-bitwise\n        var tagNumber = ~~$slide.getAttribute(sliderTag);\n        removeClass($slide, [options.slidePrevClass, options.slideNextClass, options.slideActiveClass]);\n\n        if (tagNumber === index) {\n          addClass($slide, options.slideActiveClass);\n        }\n\n        if (tagNumber === index - 1) {\n          addClass($slide, options.slidePrevClass);\n        }\n\n        if (tagNumber === index + 1) {\n          addClass($slide, options.slideNextClass);\n        }\n      });\n    }\n\n    function render(state, duration, cb, force) {\n      var $wrapper = env.element.$wrapper;\n      var timing = duration === undefined ? options.speed : duration;\n      options.injections.translate(state, env, options, timing); // Update slide style only if scroll action is end.\n\n      if (!state.isStart) updateItem(state);\n      force && getComputedStyle($wrapper).transform;\n      cb && setTimeout(cb, timing);\n    }\n\n    function appendExpandList() {\n      if (!options.loop) return;\n      var element = env.element,\n          limitation = env.limitation;\n      var $list = element.$list,\n          $wrapper = element.$wrapper;\n      var expand = limitation.expand;\n      var $leftExpandList = $list.slice(-expand).map(function ($slide) {\n        return $slide.cloneNode(true);\n      });\n      var $rightExpandList = $list.slice(0, expand).map(function ($slide) {\n        return $slide.cloneNode(true);\n      });\n      $leftExpandList.forEach(function ($shadowSlide, index) {\n        $wrapper.appendChild(setAttr($rightExpandList[index], shallowTag));\n        $wrapper.insertBefore(setAttr($leftExpandList[index], shallowTag), $list[0]);\n      });\n    }\n\n    function destroyExpandList() {\n      env.element.$wrapper.querySelectorAll(\"[\" + shallowTag + \"]\").forEach(function (item) {\n        return env.element.$wrapper.removeChild(item);\n      });\n    }\n\n    function updateDom() {\n      env.element.$list.forEach(function (el, index) {\n        return setAttr(el, sliderTag, index);\n      });\n      destroyExpandList();\n      appendExpandList();\n    }\n\n    function updateSize() {\n      var _itemStyle;\n\n      var element = env.element,\n          measure = env.measure;\n      var $wrapper = element.$wrapper;\n      var wrapperStyle = {\n        display: 'flex',\n        willChange: 'transform',\n        flexDirection: options.isHorizontal ? 'row' : 'column'\n      };\n      var itemStyle = (_itemStyle = {}, _itemStyle[options.isHorizontal ? 'width' : 'height'] = measure.slideSize + \"px\", _itemStyle[options.isHorizontal ? 'margin-right' : 'margin-bottom'] = options.spaceBetween + \"px\", _itemStyle);\n      setStyle($wrapper, wrapperStyle);\n      $wrapper.querySelectorAll(\"[\" + sliderTag + \"]\").forEach(function ($slide) {\n        return setStyle($slide, itemStyle);\n      });\n    }\n\n    function init() {\n      updateDom();\n      updateSize();\n    }\n\n    function destroy() {\n      var _env$element = env.element,\n          $list = _env$element.$list,\n          $wrapper = _env$element.$wrapper;\n      var arr = ['display', 'will-change', 'flex-direction'];\n      var itemProp = options.isHorizontal ? 'margin-right' : 'margin-bottom';\n      arr.forEach(function (propertyName) {\n        $wrapper.style.removeProperty(propertyName);\n      });\n      $list.forEach(function ($slide) {\n        return $slide.style.removeProperty(itemProp);\n      });\n      destroyExpandList();\n    }\n\n    return {\n      init: init,\n      render: render,\n      destroy: destroy,\n      updateSize: updateSize\n    };\n  }\n\n  /**\n   * Detect whether slides is rush out boundary.\n   * @param velocity - Velocity larger than zero means that slides move to the right direction\n   * @param transform\n   * @param limitation\n   */\n\n  function isExceedingLimits(velocity, transform, limitation) {\n    return velocity > 0 && transform > limitation.max || velocity < 0 && transform < limitation.min;\n  }\n  /**\n   * Return the shortest way to target Index.\n   *      Negative number indicate the left direction, Index's value is decreasing.\n   *      Positive number means index should increase.\n   * @param currentIndex\n   * @param targetIndex\n   * @param limitation\n   * @param defaultWay\n   */\n\n  function getShortestWay(currentIndex, targetIndex, limitation, defaultWay) {\n    var maxIndex = limitation.maxIndex,\n        minIndex = limitation.minIndex; // Source expression show below:\n    // const shortcut = defaultWay > 0\n    //     ? minIndex - currentIndex + (targetIndex - maxIndex) - 1\n    //     : maxIndex - currentIndex + (targetIndex - minIndex) + 1\n\n    var shortcut = (defaultWay > 0 ? 1 : -1) * (minIndex - maxIndex - 1) + targetIndex - currentIndex;\n    return Math.abs(defaultWay) > Math.abs(shortcut) ? shortcut : defaultWay;\n  }\n  /**\n   * Get transform exceed value\n   * Return zero if is not reached border.\n   *\n   * @param transform\n   * @param limitation\n   */\n\n  function getExcess(transform, limitation) {\n    var exceedLeft = transform - limitation.max;\n    var exceedRight = transform - limitation.min;\n    return exceedLeft > 0 ? exceedLeft : exceedRight < 0 ? exceedRight : 0;\n  }\n  /**\n   * The Set of state operations.\n   * Every external Render/Sensor/DomHandler are called by this Internal state machine.\n   * That gives us the possibility to run Tiny-Swiper in different platform.\n   *\n   * @param env\n   * @param state\n   * @param options\n   * @param renderer\n   * @param eventHub\n   * @constructor\n   */\n\n  function Operations(env, state, options, renderer, eventHub) {\n    /**\n     * Calculate the steps amount (boxSize) of offset.\n     *  eg: offset = 100, boxSize: 50, steps may equal to 2.\n     * @param offset\n     */\n    function getOffsetSteps(offset) {\n      var measure = env.measure;\n      return Math.ceil(Math.abs(offset) / measure.boxSize - options.longSwipesRatio);\n    }\n    /**\n     * Call renderer's render function with default params.\n     * @param duration\n     * @param cb\n     * @param force\n     */\n\n\n    function render(duration, cb, force) {\n      renderer.render(state, duration, cb, force);\n    }\n    /**\n     * Update Swiper transform attr.\n     * @param trans\n     */\n\n\n    function transform(trans) {\n      var _env$limitation = env.limitation,\n          min = _env$limitation.min,\n          max = _env$limitation.max;\n      var transRange = max - min + (options.loop ? env.measure.boxSize : 0);\n      var len = transRange + 1;\n      var progress;\n      state.transforms = trans;\n\n      if (options.loop) {\n        progress = (max - trans) % len / transRange;\n        state.progress = progress < 0 ? 1 + progress : progress > 1 ? progress - 1 : progress;\n      } else {\n        progress = (max - trans) / transRange;\n        state.progress = progress < 0 ? 0 : progress > 1 ? 1 : progress;\n      }\n\n      eventHub.emit(LIFE_CYCLES.SCROLL, _extends({}, state));\n    }\n    /**\n     * Update Swiper transform state with certain Index.\n     * @param targetIndex\n     * @param duration\n     */\n\n\n    function slideTo(targetIndex, duration) {\n      var measure = env.measure,\n          limitation = env.limitation;\n      var len = limitation.maxIndex - limitation.minIndex + 1;\n      var computedIndex = options.loop ? (targetIndex % len + len) % len : targetIndex > limitation.maxIndex ? limitation.maxIndex : targetIndex < limitation.minIndex ? limitation.minIndex : targetIndex;\n      var newTransform = -computedIndex * measure.boxSize + limitation.base; // Slide to wrapper's boundary while touch end.\n      //  Math.abs(excess) ≥ 0\n      // Old condition: state.index === computedIndex\n\n      if (getOffsetSteps(newTransform - state.transforms) !== 0 && options.loop) {\n        var excess = getExcess(state.transforms, limitation);\n        var defaultWay = computedIndex - state.index;\n        var shortcut = getShortestWay(state.index, computedIndex, limitation, defaultWay);\n\n        if (shortcut !== defaultWay && !excess) {\n          transform(shortcut < 0 ? limitation.min - measure.boxSize : limitation.max + measure.boxSize);\n        } else if (state.index === computedIndex) {\n          transform(excess > 0 ? limitation.min - measure.boxSize + excess : limitation.max + measure.boxSize + excess);\n        } // Set initial offset for rebounding animation.\n\n\n        render(0, undefined, true);\n      }\n\n      eventHub.emit(LIFE_CYCLES.BEFORE_SLIDE, state.index, state, computedIndex);\n      state.index = computedIndex;\n      transform(newTransform);\n      render(duration, function () {\n        eventHub.emit(LIFE_CYCLES.AFTER_SLIDE, computedIndex, state);\n      });\n    }\n    /**\n     * Scroll pixel by pixel while user dragging.\n     * @param px\n     */\n\n\n    function scrollPixel(px) {\n      var transforms = state.transforms;\n      var measure = env.measure,\n          limitation = env.limitation;\n      var ratio = Number(px.toExponential().split('e')[1]);\n      var expand = ratio <= 0 ? Math.pow(10, -(ratio - 1)) : 1;\n      var newTransform = transforms; // For optimizing, do not calculate `px` if options.loop === true\n\n      if (options.resistance && !options.loop) {\n        if (px > 0 && transforms >= limitation.max) {\n          px -= Math.pow(px * expand, options.resistanceRatio) / expand;\n        } else if (px < 0 && transforms <= limitation.min) {\n          px += Math.pow(-px * expand, options.resistanceRatio) / expand;\n        }\n      }\n\n      newTransform += px;\n\n      if (options.loop) {\n        var vector = state.tracker.vector();\n        var velocity = options.isHorizontal ? vector.velocityX : vector.velocityY;\n        var excess = getExcess(transforms, limitation);\n\n        if (excess && isExceedingLimits(velocity, transforms, limitation)) {\n          newTransform = excess > 0 ? limitation.min - measure.boxSize + excess : limitation.max + measure.boxSize + excess;\n        }\n      }\n\n      transform(newTransform);\n    }\n\n    function initStatus(startTransform) {\n      if (startTransform === void 0) {\n        startTransform = 0;\n      }\n\n      state.startTransform = startTransform;\n      state.isStart = false;\n      state.isScrolling = false;\n      state.isTouching = false;\n    }\n\n    function initLayout(originTransform) {\n      transform(originTransform);\n    }\n\n    function update() {\n      slideTo(state.index, 0);\n      renderer.updateSize();\n    }\n\n    return {\n      update: update,\n      render: render,\n      transform: transform,\n      slideTo: slideTo,\n      scrollPixel: scrollPixel,\n      initStatus: initStatus,\n      initLayout: initLayout,\n      getOffsetSteps: getOffsetSteps\n    };\n  }\n\n  function Element(el, options) {\n    var $el = typeof el === 'string' ? document.body.querySelector(el) : el;\n    var $wrapper = $el.querySelector(\".\" + options.wrapperClass);\n    var $list = [].slice.call($el.getElementsByClassName(options.slideClass));\n    $list = $list.filter(function (slide) {\n      return slide.getAttribute('data-shallow-slider') === null;\n    });\n    return {\n      $el: $el,\n      $wrapper: $wrapper,\n      $list: $list\n    };\n  }\n\n  var Swiper = function Swiper(el, userOptions) {\n    var options = optionFormatter(userOptions);\n    var eventHub = EventHub();\n    var element = Element(el, options);\n    var env = Env(element, options);\n    var state = State();\n    var on = eventHub.on,\n        off = eventHub.off,\n        emit = eventHub.emit;\n    var instance = {\n      on: on,\n      off: off,\n      env: env,\n      state: state,\n      options: options\n    };\n    (options.plugins || Swiper.plugins || []).forEach(function (plugin) {\n      return plugin(instance, options);\n    });\n    emit(LIFE_CYCLES.BEFORE_INIT, instance); // Initialize internal module\n\n    var renderer = Renderer(env, options);\n    var operations = Operations(env, state, options, renderer, eventHub);\n    var sensor = Sensor(env, state, options, operations);\n\n    function destroy() {\n      emit(LIFE_CYCLES.BEFORE_DESTROY, instance);\n      sensor.detach();\n      renderer.destroy();\n      emit(LIFE_CYCLES.AFTER_DESTROY, instance);\n      eventHub.clear();\n    }\n\n    function updateSize() {\n      env.update(Element(el, options));\n      operations.update();\n    }\n\n    function update() {\n      renderer.destroy();\n      env.update(Element(el, options));\n      renderer.init();\n      operations.update();\n    }\n\n    var slideTo = operations.slideTo;\n    Object.assign(instance, {\n      update: update,\n      destroy: destroy,\n      slideTo: slideTo,\n      updateSize: updateSize\n    });\n    renderer.init();\n    sensor.attach();\n    slideTo(options.initialSlide, 0);\n    emit(LIFE_CYCLES.AFTER_INIT, instance);\n    return instance;\n  };\n\n  Swiper.use = function (plugins) {\n    Swiper.plugins = plugins;\n  };\n\n  return Swiper;\n\n})));\n//# sourceMappingURL=index.js.map\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.SwiperPluginLazyload = factory());\n}(this, (function () { 'use strict';\n\n    function addClass(el, list) {\n      if (list === void 0) {\n        list = [];\n      }\n\n      if (!Array.isArray(list)) list = [list];\n      list.forEach(function (clz) {\n        return !el.classList.contains(clz) && el.classList.add(clz);\n      });\n    }\n    function removeClass(el, list) {\n      if (list === void 0) {\n        list = [];\n      }\n\n      if (!Array.isArray(list)) list = [list];\n      list.forEach(function (clz) {\n        return el.classList.contains(clz) && el.classList.remove(clz);\n      });\n    }\n\n    /**\n     * TinySwiper plugin for image lazy loading.\n     *\n     * @param {SwiperInstance} instance\n     * @param {Options}\n     */\n\n    var SwiperPluginLazyload = (function SwiperPluginLazyload(instance, options) {\n      var isEnable = Boolean(options.lazyload);\n      var lazyloadOptions = Object.assign({\n        loadPrevNext: false,\n        loadPrevNextAmount: 1,\n        loadOnTransitionStart: false,\n        elementClass: 'swiper-lazy',\n        loadingClass: 'swiper-lazy-loading',\n        loadedClass: 'swiper-lazy-loaded',\n        preloaderClass: 'swiper-lazy-preloader'\n      }, options.lazyload);\n      var lazyload = {\n        load: function load(index) {\n          var $slide = instance.env.element.$list[index];\n          if (!$slide) return;\n          var $imgs = [].slice.call($slide.getElementsByClassName(lazyloadOptions.elementClass));\n          var $preloaders = [].slice.call($slide.getElementsByClassName(lazyloadOptions.preloaderClass));\n\n          function handleLoaded($img) {\n            $img.removeAttribute('data-src');\n            addClass($img, [lazyloadOptions.loadedClass]);\n            removeClass($img, [lazyloadOptions.loadingClass]);\n            $img.onload = null;\n            $img.onerror = null;\n            $img.isLoaded = true;\n\n            if ($imgs.every(function (item) {\n              return item.isLoaded;\n            })) {\n              $preloaders.forEach(function ($preloader) {\n                $preloader.parentElement.removeChild($preloader);\n              });\n            }\n          }\n\n          $imgs.forEach(function ($img) {\n            if (!$img.hasAttribute('data-src')) return;\n            var src = $img.getAttribute('data-src');\n            addClass($img, [lazyloadOptions.loadingClass]);\n            removeClass($img, [lazyloadOptions.loadedClass]);\n            $img.src = src;\n\n            $img.onload = function () {\n              return handleLoaded($img);\n            };\n\n            $img.onerror = function () {\n              return handleLoaded($img);\n            };\n          });\n        },\n        loadRange: function loadRange(index, range) {\n          lazyload.load(index);\n\n          if (lazyloadOptions.loadPrevNext && range >= 1) {\n            for (var i = 1; i <= range; i++) {\n              lazyload.load(index + i);\n              lazyload.load(index - i);\n            }\n          }\n        }\n      };\n      if (!isEnable) return;\n      instance.on('before-init', function () {\n        instance.lazyload = lazyload;\n      });\n\n      if (lazyloadOptions.loadOnTransitionStart) {\n        instance.on('before-slide', function (oldIndex, state, newIndex) {\n          lazyload.loadRange(newIndex, lazyloadOptions.loadPrevNextAmount);\n        });\n      } else {\n        instance.on('after-slide', function (index) {\n          lazyload.loadRange(index, lazyloadOptions.loadPrevNextAmount);\n        });\n      }\n\n      instance.on('after-destroy', function () {\n        if (instance.lazyload) {\n          delete instance.lazyload;\n        }\n      });\n    });\n\n    return SwiperPluginLazyload;\n\n})));\n//# sourceMappingURL=lazyload.js.map\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.SwiperPluginMousewheel = factory());\n}(this, (function () { 'use strict';\n\n    function attachListener(el, evtName, handler, opts) {\n      el.addEventListener(evtName, handler, opts);\n    }\n    function detachListener(el, evtName, handler) {\n      el.removeEventListener(evtName, handler);\n    }\n\n    var SwiperPluginMousewheel = (function SwiperPluginMousewheel(instance, options) {\n      var isEnable = Boolean(options.mousewheel);\n      var mousewheelOptions = Object.assign({\n        invert: false,\n        sensitivity: 1,\n        interval: 400\n      }, options.mousewheel);\n      var mousewheelInstance = {\n        $el: null\n      };\n      var wheelStatus = {\n        wheeling: false,\n        wheelDelta: 0,\n        wheelingTimer: 0\n      };\n\n      var handler = function handler(e) {\n        var isHorizontal = Math.abs(e.deltaX) > Math.abs(e.deltaY);\n        if (options.isHorizontal !== isHorizontal) return;\n        var delta = isHorizontal ? e.deltaX : e.deltaY;\n        var index = instance.state.index;\n\n        if (Math.abs(delta) - Math.abs(wheelStatus.wheelDelta) > 0 && !wheelStatus.wheeling && Math.abs(delta) >= mousewheelOptions.sensitivity) {\n          var step = mousewheelOptions.invert ? 1 : -1;\n          instance.slideTo(delta > 0 ? index - step : index + step);\n          wheelStatus.wheeling = true;\n          wheelStatus.wheelingTimer = setTimeout(function () {\n            wheelStatus.wheeling = false;\n          }, mousewheelOptions.interval);\n        }\n\n        wheelStatus.wheelDelta = delta;\n        e.preventDefault();\n        e.stopPropagation();\n      };\n\n      instance.on('after-init', function () {\n        if (!isEnable) return;\n        var element = instance.env.element;\n        var $el = element.$el;\n        mousewheelInstance.$el = $el;\n        attachListener($el, 'wheel', handler);\n      });\n      instance.on('after-destroy', function () {\n        if (!isEnable) return;\n        detachListener(mousewheelInstance.$el, 'wheel', handler);\n        delete mousewheelInstance.$el;\n      });\n    });\n\n    return SwiperPluginMousewheel;\n\n})));\n//# sourceMappingURL=mousewheel.js.map\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.SwiperPluginKeyboardControl = factory());\n}(this, (function () { 'use strict';\n\n    function attachListener(el, evtName, handler, opts) {\n      el.addEventListener(evtName, handler, opts);\n    }\n    function detachListener(el, evtName, handler) {\n      el.removeEventListener(evtName, handler);\n    }\n\n    var DIRECTION = {\n      up: 'ArrowUp',\n      right: 'ArrowRight',\n      down: 'ArrowDown',\n      left: 'ArrowLeft'\n    }; // TODO: optimize\n\n    function isVisible(el) {\n      if (!el) return false;\n      var style = getComputedStyle(el);\n      var visible = style.visibility !== 'hidden' && style.display !== 'none';\n      if (!visible) return false;\n      return el.parentElement && el.parentElement.nodeType === 1 ? isVisible(el.parentElement) : true;\n    }\n\n    function isElementInView(el) {\n      var visibility = isVisible(el);\n      var boundary = el.getBoundingClientRect();\n      var isInView = boundary.top >= 0 && boundary.bottom <= window.innerHeight && boundary.left >= 0 && boundary.right <= window.innerWidth;\n      return isInView && visibility;\n    }\n    /**\n     * TinySwiper plugin for keyboard control.\n     *\n     * @param {SwiperInstance} instance\n     * @param {Options}\n     */\n\n\n    var SwiperPluginKeyboardControl = (function SwiperPluginKeyboardControl(instance, options) {\n      var isEnable = Boolean(options.keyboard);\n      var keyboardOptions = Object.assign({\n        enabled: true,\n        onlyInViewport: true\n      }, options.keyboard);\n      var keyboard = {\n        enable: function enable() {\n          keyboardOptions.enabled = true;\n        },\n        disable: function disable() {\n          keyboardOptions.enabled = false;\n        },\n        onKeyDown: function onKeyDown(e) {\n          var key = e.key;\n          if (keyboardOptions.onlyInViewport && !isElementInView(instance.env.element.$el) || !keyboardOptions.enabled) return;\n\n          if (options.isHorizontal) {\n            if (key === DIRECTION.left) {\n              instance.slideTo(instance.state.index - 1);\n            } else if (key === DIRECTION.right) {\n              instance.slideTo(instance.state.index + 1);\n            }\n          } else {\n            if (key === DIRECTION.down) {\n              instance.slideTo(instance.state.index - 1);\n            } else if (key === DIRECTION.up) {\n              instance.slideTo(instance.state.index + 1);\n            }\n          }\n        }\n      };\n      if (!isEnable) return;\n      instance.on('before-init', function () {\n        instance.keyboard = keyboard;\n        attachListener(window, 'keydown', keyboard.onKeyDown);\n      });\n      instance.on('after-destroy', function () {\n        if (instance.keyboard) {\n          detachListener(window, 'keydown', keyboard.onKeyDown);\n          delete instance.keyboard;\n        }\n      });\n    });\n\n    return SwiperPluginKeyboardControl;\n\n})));\n//# sourceMappingURL=keyboardControl.js.map\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.SwiperPluginNavigation = factory());\n}(this, (function () { 'use strict';\n\n    function attachListener(el, evtName, handler, opts) {\n      el.addEventListener(evtName, handler, opts);\n    }\n    function detachListener(el, evtName, handler) {\n      el.removeEventListener(evtName, handler);\n    }\n\n    var SwiperPluginNavigation = (function SwiperPluginNavigation(instance, options) {\n      var isEnable = Boolean(options.navigation);\n      var navigationInstance = {\n        nextEl: null,\n        prevEl: null\n      };\n      var navigationOptions = Object.assign({\n        disabledClass: 'swiper-button-disabled'\n      }, options.navigation);\n\n      var nextClickHandler = function nextClickHandler(e) {\n        clickHandler(e.target, 'next');\n      };\n\n      var prevClickHandler = function prevClickHandler(e) {\n        clickHandler(e.target, 'prev');\n      };\n\n      var clickHandler = function clickHandler(e, type) {\n        if (checkIsDisable(e) && !instance.options.loop) {\n          return;\n        }\n\n        var index = instance.state.index;\n\n        if (type === 'next') {\n          instance.slideTo(index + 1);\n        }\n\n        if (type === 'prev') {\n          instance.slideTo(index - 1);\n        }\n      };\n\n      var checkNavBtnDisabledClass = function checkNavBtnDisabledClass(index) {\n        var _instance$env$limitat = instance.env.limitation,\n            minIndex = _instance$env$limitat.minIndex,\n            maxIndex = _instance$env$limitat.maxIndex;\n\n        if (navigationInstance && navigationInstance.prevEl && navigationInstance.nextEl) {\n          if (navigationInstance.nextEl.classList.contains(navigationOptions.disabledClass) && index >= minIndex) {\n            navigationInstance.nextEl.classList.remove(navigationOptions.disabledClass);\n          }\n\n          if (navigationInstance.prevEl.classList.contains(navigationOptions.disabledClass) && index <= maxIndex) {\n            navigationInstance.prevEl.classList.remove(navigationOptions.disabledClass);\n          }\n\n          if (index === minIndex) {\n            navigationInstance.prevEl.classList.add(navigationOptions.disabledClass);\n          }\n\n          if (index === maxIndex) {\n            navigationInstance.nextEl.classList.add(navigationOptions.disabledClass);\n          }\n        }\n      };\n\n      var checkIsDisable = function checkIsDisable(e) {\n        return e.classList.contains(navigationOptions.disabledClass);\n      };\n\n      var checkButtonDefaultStatus = function checkButtonDefaultStatus() {\n        var index = instance.state.index;\n        var $list = instance.env.element.$list;\n        var minIndex = instance.env.limitation.minIndex;\n\n        if (index === minIndex && navigationInstance.prevEl) {\n          navigationInstance.prevEl.classList.add(navigationOptions.disabledClass);\n        }\n\n        if ($list.length === minIndex && navigationInstance.nextEl) {\n          navigationInstance.nextEl.classList.add(navigationOptions.disabledClass);\n        }\n      };\n\n      instance.on('before-slide', function (currentIndex, state, newIndex) {\n        if (!instance.options.loop) {\n          checkNavBtnDisabledClass(newIndex);\n        }\n      });\n      instance.on('after-init', function () {\n        if (!isEnable) return;\n        navigationInstance.nextEl = typeof navigationOptions.nextEl === 'string' ? document.body.querySelector(navigationOptions.nextEl) : navigationOptions.nextEl;\n        navigationInstance.prevEl = typeof navigationOptions.prevEl === 'string' ? document.body.querySelector(navigationOptions.prevEl) : navigationOptions.prevEl;\n\n        if (!instance.options.loop) {\n          checkButtonDefaultStatus();\n        }\n\n        attachListener(navigationInstance.nextEl, 'click', nextClickHandler);\n        attachListener(navigationInstance.prevEl, 'click', prevClickHandler);\n      });\n      instance.on('after-destroy', function () {\n        if (navigationInstance && navigationInstance.prevEl && navigationInstance.nextEl) {\n          detachListener(navigationInstance.nextEl, 'click', nextClickHandler);\n          detachListener(navigationInstance.prevEl, 'click', prevClickHandler);\n          delete navigationInstance.nextEl;\n          delete navigationInstance.prevEl;\n        }\n      });\n    });\n\n    return SwiperPluginNavigation;\n\n})));\n//# sourceMappingURL=navigation.js.map\n\n\nD3R.swipers = {\n    instances: [],\n    push: function(swiper) {\n        this.instances.push(swiper);\n    },\n    bind: function() {\n        window.addEventListener('resize', D3R.throttle(50, false, (e) => {\n            for (let index = 0; index < this.instances.length; index++) {\n                const swiper = this.instances[index];\n                swiper.updateSize();\n            }\n        }));\n    },\n    init: function() {\n        this.bind();\n    }\n};\n\nD3R.swipers.init();\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  function _extends() {\n    _extends = Object.assign || function (target) {\n      for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i];\n\n        for (var key in source) {\n          if (Object.prototype.hasOwnProperty.call(source, key)) {\n            target[key] = source[key];\n          }\n        }\n      }\n\n      return target;\n    };\n\n    return _extends.apply(this, arguments);\n  }\n\n  function addClass(el, list) {\n    if (list === void 0) {\n      list = [];\n    }\n\n    if (!Array.isArray(list)) list = [list];\n    list.forEach(function (clz) {\n      return !el.classList.contains(clz) && el.classList.add(clz);\n    });\n  }\n  function removeClass(el, list) {\n    if (list === void 0) {\n      list = [];\n    }\n\n    if (!Array.isArray(list)) list = [list];\n    list.forEach(function (clz) {\n      return el.classList.contains(clz) && el.classList.remove(clz);\n    });\n  }\n  function attachListener(el, evtName, handler, opts) {\n    el.addEventListener(evtName, handler, opts);\n  }\n  function detachListener(el, evtName, handler) {\n    el.removeEventListener(evtName, handler);\n  }\n  function setAttr(el, attr, value) {\n    if (value === void 0) {\n      value = '';\n    }\n\n    el.setAttribute(attr, value);\n    return el;\n  }\n  function setStyle(el, style, forceRender) {\n    Object.keys(style).forEach(function (prop) {\n      // TS7015: Element implicitly has an 'any' type because index expression is not of type 'number'.\n      el.style[prop] = style[prop];\n    }); // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\n    forceRender && getComputedStyle(el);\n    return el;\n  }\n  function getTranslate(el, isHorizontal) {\n    var matrix = getComputedStyle(el).transform.replace(/[a-z]|\\(|\\)|\\s/g, '').split(',').map(parseFloat);\n    var arr = [];\n\n    if (matrix.length === 16) {\n      arr = matrix.slice(12, 14);\n    } else if (matrix.length === 6) {\n      arr = matrix.slice(4, 6);\n    }\n\n    return arr[isHorizontal ? 0 : 1] || 0;\n  }\n\n  function translate(state, env, options, duration) {\n    var $wrapper = env.element.$wrapper;\n    var wrapperStyle = {\n      transition: state.isStart ? 'none' : \"transform ease \" + duration + \"ms\",\n      transform: options.isHorizontal ? \"translate3d(\" + state.transforms + \"px, 0, 0)\" : \"translate3d(0, \" + state.transforms + \"px, 0)\"\n    };\n    setStyle($wrapper, wrapperStyle);\n  }\n\n  var defaultOptions = {\n    // `isHorizontal` is computed value\n    direction: 'horizontal',\n    touchRatio: 1,\n    touchAngle: 45,\n    longSwipesRatio: 0.5,\n    initialSlide: 0,\n    loop: false,\n    freeMode: false,\n    passiveListeners: true,\n    resistance: true,\n    resistanceRatio: 0.85,\n    speed: 300,\n    longSwipesMs: 300,\n    spaceBetween: 0,\n    slidesPerView: 1,\n    centeredSlides: false,\n    slidePrevClass: 'swiper-slide-prev',\n    slideNextClass: 'swiper-slide-next',\n    slideActiveClass: 'swiper-slide-active',\n    slideClass: 'swiper-slide',\n    wrapperClass: 'swiper-wrapper',\n    touchStartPreventDefault: true,\n    touchStartForcePreventDefault: false,\n    touchMoveStopPropagation: false,\n    excludeElements: [],\n    injections: {\n      translate: translate\n    }\n  };\n  function optionFormatter(userOptions) {\n    var options = _extends({}, defaultOptions, userOptions);\n\n    return _extends({}, options, {\n      isHorizontal: options.direction === 'horizontal'\n    });\n  }\n\n  var LIFE_CYCLES = {\n    BEFORE_INIT: 'before-init',\n    AFTER_INIT: 'after-init',\n    BEFORE_SLIDE: 'before-slide',\n    SCROLL: 'scroll',\n    AFTER_SLIDE: 'after-slide',\n    BEFORE_DESTROY: 'before-destroy',\n    AFTER_DESTROY: 'after-destroy'\n  };\n  function EventHub() {\n    var hub = {};\n\n    function on(evtName, cb) {\n      if (!hub[evtName]) {\n        hub[evtName] = [cb];\n      } else {\n        hub[evtName].push(cb);\n      }\n    }\n\n    function off(evtName, cb) {\n      if (hub[evtName]) {\n        var index = hub[evtName].indexOf(cb); // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\n        index > -1 && hub[evtName].splice(index, 1);\n      }\n    }\n\n    function emit(evtName) {\n      for (var _len = arguments.length, data = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        data[_key - 1] = arguments[_key];\n      }\n\n      if (hub[evtName]) {\n        hub[evtName].forEach(function (cb) {\n          return cb.apply(void 0, data);\n        });\n      }\n    }\n\n    function clear() {\n      hub = {};\n    }\n\n    return {\n      on: on,\n      off: off,\n      emit: emit,\n      clear: clear\n    };\n  }\n\n  var delta = 180 / Math.PI;\n  function Vector(logs, index) {\n    var trace = logs[index];\n    var formerTrace = logs[index - 1] || trace; // In case click action, there will be only one log data\n\n    var diff = {\n      x: trace.x - formerTrace.x,\n      y: trace.y - formerTrace.y\n    };\n    var duration = trace.time - formerTrace.time;\n    var velocityX = diff.x / duration || 0;\n    var velocityY = diff.y / duration || 0;\n    var angle = Math.atan2(Math.abs(diff.y), Math.abs(diff.x)) * delta;\n    return _extends({}, diff, {\n      angle: angle,\n      velocityX: velocityX,\n      velocityY: velocityY\n    });\n  }\n  function Tracker() {\n    var logs = [];\n\n    function push(position) {\n      logs.push(_extends({\n        time: Date.now()\n      }, position));\n    }\n\n    function vector() {\n      return Vector(logs, logs.length - 1);\n    }\n\n    function clear() {\n      logs = [];\n    }\n\n    function getLogs() {\n      return logs;\n    }\n\n    function getDuration() {\n      var first = logs[0];\n      var last = logs[logs.length - 1];\n      return first ? last.time - first.time : 0;\n    }\n\n    function getOffset() {\n      var first = logs[0];\n      var last = logs[logs.length - 1];\n      return first ? {\n        x: last.x - first.x,\n        y: last.y - first.y\n      } : {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      getDuration: getDuration,\n      getOffset: getOffset,\n      getLogs: getLogs,\n      vector: vector,\n      clear: clear,\n      push: push\n    };\n  }\n\n  function State() {\n    var state = {\n      tracker: Tracker(),\n      index: 0,\n      startTransform: 0,\n      isStart: false,\n      isScrolling: false,\n      isTouching: false,\n      transforms: 0,\n      progress: 0\n    };\n    return state;\n  }\n\n  function now() {\n    return performance ? performance.now() : Date.now();\n  }\n\n  var nextFrame = requestAnimationFrame || webkitRequestAnimationFrame || setTimeout;\n  var cancelNextFrame = cancelAnimationFrame || webkitCancelAnimationFrame || clearTimeout;\n  function Tick() {\n    var startTime;\n    var id;\n\n    function run(cb) {\n      // eslint-disable-next-line no-void\n      startTime = startTime === void 0 ? now() : startTime; // Why do not use callback argument:\n      // https://stackoverflow.com/questions/50895206/exact-time-of-display-requestanimationframe-usage-and-timeline\n\n      id = nextFrame(function () {\n        var timeStamp = now();\n        var interval = timeStamp - startTime;\n        startTime = timeStamp;\n        cb(interval);\n      });\n    }\n\n    function stop() {\n      startTime = undefined;\n      cancelNextFrame(id);\n    }\n\n    return {\n      run: run,\n      stop: stop\n    };\n  }\n\n  function Animation() {\n    var tick = Tick();\n\n    function run(task) {\n      tick.run(function (interval) {\n        run(task);\n        task(interval);\n      });\n    }\n\n    function stop() {\n      tick.stop();\n    }\n\n    return {\n      run: run,\n      stop: stop\n    };\n  }\n\n  function resetState(state, operations) {\n    var tracker = state.tracker;\n    var initStatus = operations.initStatus;\n    tracker.clear();\n    initStatus();\n  }\n\n  function Actions(options, env, state, operations) {\n    var initLayout = operations.initLayout,\n        initStatus = operations.initStatus,\n        render = operations.render,\n        scrollPixel = operations.scrollPixel,\n        slideTo = operations.slideTo,\n        getOffsetSteps = operations.getOffsetSteps;\n    var animation = Animation();\n\n    function preheat(originPosition, originTransform) {\n      var tracker = state.tracker;\n      animation.stop();\n      tracker.clear();\n      tracker.push(originPosition);\n      initLayout(originTransform);\n      initStatus(originTransform);\n      state.isStart = true;\n      render();\n    }\n\n    function move(position) {\n      var tracker = state.tracker;\n      var touchRatio = options.touchRatio,\n          touchAngle = options.touchAngle,\n          isHorizontal = options.isHorizontal;\n      if (!state.isStart || state.isScrolling) return;\n      tracker.push(position);\n      var vector = tracker.vector();\n      var displacement = tracker.getOffset(); // Ignore this move action if there is no displacement of screen touch point.\n      // In case of minimal mouse move event. (Moving mouse extreme slowly will get the zero offset.)\n\n      if (!displacement.x && !displacement.y) return;\n\n      if (isHorizontal && vector.angle < touchAngle || !isHorizontal && 90 - vector.angle < touchAngle || state.isTouching) {\n        var offset = vector[isHorizontal ? 'x' : 'y'] * touchRatio;\n        state.isTouching = true;\n        scrollPixel(offset);\n        render();\n      } else {\n        state.isScrolling = true;\n        tracker.clear();\n      }\n    }\n\n    function stop() {\n      var index = state.index,\n          tracker = state.tracker;\n      var measure = env.measure;\n      if (!state.isStart) return;\n      state.isStart = false;\n\n      if (!options.freeMode) {\n        var duration = tracker.getDuration();\n        var trans = tracker.getOffset()[options.isHorizontal ? 'x' : 'y'];\n        var jump = Math.ceil(Math.abs(trans) / measure.boxSize);\n        var longSwipeIndex = getOffsetSteps(trans);\n\n        if (duration > options.longSwipesMs) {\n          // long swipe action\n          slideTo(index + longSwipeIndex * (trans > 0 ? -1 : 1));\n        } else {\n          // short swipe action\n          slideTo(trans > 0 ? index - jump : index + jump);\n        }\n\n        resetState(state, operations);\n      } else {\n        var vector = tracker.vector();\n        var velocity = vector[options.isHorizontal ? 'velocityX' : 'velocityY'];\n        animation.run(function (duration) {\n          var offset = velocity * duration;\n          velocity *= 0.98;\n\n          if (Math.abs(offset) < 0.01) {\n            animation.stop();\n            resetState(state, operations);\n          } else {\n            scrollPixel(offset);\n            render(0);\n          }\n        });\n      }\n    }\n\n    return {\n      preheat: preheat,\n      move: move,\n      stop: stop\n    };\n  }\n\n  function Sensor(env, state, options, operations) {\n    var touchable = env.touchable;\n    var formEls = ['INPUT', 'SELECT', 'OPTION', 'TEXTAREA', 'BUTTON', 'VIDEO'];\n    var actions = Actions(options, env, state, operations);\n    var preheat = actions.preheat,\n        move = actions.move,\n        stop = actions.stop;\n\n    function getPosition(e) {\n      var touch = touchable ? e.changedTouches[0] : e;\n      return {\n        x: touch.pageX,\n        y: touch.pageY\n      };\n    }\n\n    function onTouchStart(e) {\n      for (var i = 0; i < options.excludeElements.length; i++) {\n        if (options.excludeElements[i].contains(e.target)) return;\n      }\n\n      var $wrapper = env.element.$wrapper;\n      var shouldPreventDefault = options.touchStartPreventDefault && formEls.indexOf(e.target.nodeName) === -1 || options.touchStartForcePreventDefault; // `preventDefault` can not be called with `passiveListeners`\n      //      See: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n      //      And: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n\n      if (!touchable && shouldPreventDefault) e.preventDefault();\n      preheat(getPosition(e), getTranslate($wrapper, options.isHorizontal));\n    }\n\n    function onTouchMove(e) {\n      if (options.touchMoveStopPropagation) e.stopPropagation();\n      move(getPosition(e));\n      if (state.isTouching && e.cancelable !== false) e.preventDefault();\n    }\n\n    function onTouchEnd() {\n      stop();\n    }\n\n    function attach() {\n      var $el = env.element.$el;\n\n      if (touchable) {\n        attachListener($el, 'touchstart', onTouchStart, {\n          passive: options.passiveListeners,\n          capture: false\n        });\n        attachListener($el, 'touchmove', onTouchMove);\n        attachListener($el, 'touchend', onTouchEnd);\n        attachListener($el, 'touchcancel', onTouchEnd);\n      } else {\n        attachListener($el, 'mousedown', onTouchStart);\n        attachListener(document, 'mousemove', onTouchMove);\n        attachListener(document, 'mouseup', onTouchEnd);\n      }\n    }\n\n    function detach() {\n      var $el = env.element.$el;\n      detachListener($el, 'touchstart', onTouchStart);\n      detachListener($el, 'touchmove', onTouchMove);\n      detachListener($el, 'touchend', onTouchEnd);\n      detachListener($el, 'touchcancel', onTouchEnd);\n      detachListener($el, 'mousedown', onTouchStart);\n      detachListener(document, 'mousemove', onTouchMove);\n      detachListener(document, 'mouseup', onTouchEnd);\n    }\n\n    return {\n      attach: attach,\n      detach: detach\n    };\n  }\n\n  function Measure(options, element) {\n    var $el = element.$el;\n    var viewSize = options.isHorizontal ? $el.offsetWidth : $el.offsetHeight;\n    var slideSize = (viewSize - Math.ceil(options.slidesPerView - 1) * options.spaceBetween) / options.slidesPerView;\n    var boxSize = slideSize + options.spaceBetween;\n    return {\n      boxSize: boxSize,\n      viewSize: viewSize,\n      slideSize: slideSize\n    };\n  }\n\n  function getExpand(options) {\n    if (options.loop) {\n      // return options.slidesPerView >= element.$list.length\n      //     ? options.slidesPerView - element.$list.length + 1\n      //     : 1\n      return Math.ceil(options.slidesPerView);\n    }\n\n    return 0;\n  }\n  function Limitation(element, measure, options) {\n    var $list = element.$list;\n    var viewSize = measure.viewSize,\n        slideSize = measure.slideSize,\n        boxSize = measure.boxSize;\n    var expand = getExpand(options);\n    var buffer = expand * boxSize;\n    var base = -buffer + (options.centeredSlides ? (viewSize - slideSize) / 2 : 0); // [min, max] usually equal to [-x, 0]\n\n    var max = base;\n    var min = options.spaceBetween + (options.loop ? slideSize : viewSize) + base - boxSize * $list.length;\n    var minIndex = 0;\n    var maxIndex = $list.length - (options.centeredSlides || options.loop ? 1 : Math.ceil(options.slidesPerView));\n    var limitation = {\n      max: max,\n      min: min,\n      base: base,\n      expand: expand,\n      buffer: buffer,\n      minIndex: minIndex,\n      maxIndex: maxIndex\n    };\n    return limitation;\n  }\n\n  function Env(elem, options) {\n    var env = {};\n\n    function update(element) {\n      var measure = Measure(options, element);\n      var limitation = Limitation(element, measure, options);\n      var touchable = Boolean('ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 || window.DocumentTouch && document instanceof DocumentTouch);\n      Object.assign(env, {\n        touchable: touchable,\n        element: element,\n        measure: measure,\n        limitation: limitation\n      });\n    }\n\n    env.update = update;\n    update(elem);\n    return env;\n  }\n\n  var shallowTag = 'data-shallow-slider';\n  var sliderTag = 'data-slider';\n  function Renderer(env, options) {\n    function updateItem(state) {\n      var $wrapper = env.element.$wrapper;\n      var index = state.index;\n      $wrapper.querySelectorAll(\"[\" + sliderTag + \"]\").forEach(function ($slide) {\n        // eslint-disable-next-line no-bitwise\n        var tagNumber = ~~$slide.getAttribute(sliderTag);\n        removeClass($slide, [options.slidePrevClass, options.slideNextClass, options.slideActiveClass]);\n\n        if (tagNumber === index) {\n          addClass($slide, options.slideActiveClass);\n        }\n\n        if (tagNumber === index - 1) {\n          addClass($slide, options.slidePrevClass);\n        }\n\n        if (tagNumber === index + 1) {\n          addClass($slide, options.slideNextClass);\n        }\n      });\n    }\n\n    function render(state, duration, cb, force) {\n      var $wrapper = env.element.$wrapper;\n      var timing = duration === undefined ? options.speed : duration;\n      options.injections.translate(state, env, options, timing); // Update slide style only if scroll action is end.\n\n      if (!state.isStart) updateItem(state);\n      force && getComputedStyle($wrapper).transform;\n      cb && setTimeout(cb, timing);\n    }\n\n    function appendExpandList() {\n      if (!options.loop) return;\n      var element = env.element,\n          limitation = env.limitation;\n      var $list = element.$list,\n          $wrapper = element.$wrapper;\n      var expand = limitation.expand;\n      var $leftExpandList = $list.slice(-expand).map(function ($slide) {\n        return $slide.cloneNode(true);\n      });\n      var $rightExpandList = $list.slice(0, expand).map(function ($slide) {\n        return $slide.cloneNode(true);\n      });\n      $leftExpandList.forEach(function ($shadowSlide, index) {\n        $wrapper.appendChild(setAttr($rightExpandList[index], shallowTag));\n        $wrapper.insertBefore(setAttr($leftExpandList[index], shallowTag), $list[0]);\n      });\n    }\n\n    function destroyExpandList() {\n      env.element.$wrapper.querySelectorAll(\"[\" + shallowTag + \"]\").forEach(function (item) {\n        return env.element.$wrapper.removeChild(item);\n      });\n    }\n\n    function updateDom() {\n      env.element.$list.forEach(function (el, index) {\n        return setAttr(el, sliderTag, index);\n      });\n      destroyExpandList();\n      appendExpandList();\n    }\n\n    function updateSize() {\n      var _itemStyle;\n\n      var element = env.element,\n          measure = env.measure;\n      var $wrapper = element.$wrapper;\n      var wrapperStyle = {\n        display: 'flex',\n        willChange: 'transform',\n        flexDirection: options.isHorizontal ? 'row' : 'column'\n      };\n      var itemStyle = (_itemStyle = {}, _itemStyle[options.isHorizontal ? 'width' : 'height'] = measure.slideSize + \"px\", _itemStyle[options.isHorizontal ? 'margin-right' : 'margin-bottom'] = options.spaceBetween + \"px\", _itemStyle);\n      setStyle($wrapper, wrapperStyle);\n      $wrapper.querySelectorAll(\"[\" + sliderTag + \"]\").forEach(function ($slide) {\n        return setStyle($slide, itemStyle);\n      });\n    }\n\n    function init() {\n      updateDom();\n      updateSize();\n    }\n\n    function destroy() {\n      var _env$element = env.element,\n          $list = _env$element.$list,\n          $wrapper = _env$element.$wrapper;\n      var arr = ['display', 'will-change', 'flex-direction'];\n      var itemProp = options.isHorizontal ? 'margin-right' : 'margin-bottom';\n      arr.forEach(function (propertyName) {\n        $wrapper.style.removeProperty(propertyName);\n      });\n      $list.forEach(function ($slide) {\n        return $slide.style.removeProperty(itemProp);\n      });\n      destroyExpandList();\n    }\n\n    return {\n      init: init,\n      render: render,\n      destroy: destroy,\n      updateSize: updateSize\n    };\n  }\n\n  /**\n   * Detect whether slides is rush out boundary.\n   * @param velocity - Velocity larger than zero means that slides move to the right direction\n   * @param transform\n   * @param limitation\n   */\n\n  function isExceedingLimits(velocity, transform, limitation) {\n    return velocity > 0 && transform > limitation.max || velocity < 0 && transform < limitation.min;\n  }\n  /**\n   * Return the shortest way to target Index.\n   *      Negative number indicate the left direction, Index's value is decreasing.\n   *      Positive number means index should increase.\n   * @param currentIndex\n   * @param targetIndex\n   * @param limitation\n   * @param defaultWay\n   */\n\n  function getShortestWay(currentIndex, targetIndex, limitation, defaultWay) {\n    var maxIndex = limitation.maxIndex,\n        minIndex = limitation.minIndex; // Source expression show below:\n    // const shortcut = defaultWay > 0\n    //     ? minIndex - currentIndex + (targetIndex - maxIndex) - 1\n    //     : maxIndex - currentIndex + (targetIndex - minIndex) + 1\n\n    var shortcut = (defaultWay > 0 ? 1 : -1) * (minIndex - maxIndex - 1) + targetIndex - currentIndex;\n    return Math.abs(defaultWay) > Math.abs(shortcut) ? shortcut : defaultWay;\n  }\n  /**\n   * Get transform exceed value\n   * Return zero if is not reached border.\n   *\n   * @param transform\n   * @param limitation\n   */\n\n  function getExcess(transform, limitation) {\n    var exceedLeft = transform - limitation.max;\n    var exceedRight = transform - limitation.min;\n    return exceedLeft > 0 ? exceedLeft : exceedRight < 0 ? exceedRight : 0;\n  }\n  /**\n   * The Set of state operations.\n   * Every external Render/Sensor/DomHandler are called by this Internal state machine.\n   * That gives us the possibility to run Tiny-Swiper in different platform.\n   *\n   * @param env\n   * @param state\n   * @param options\n   * @param renderer\n   * @param eventHub\n   * @constructor\n   */\n\n  function Operations(env, state, options, renderer, eventHub) {\n    /**\n     * Calculate the steps amount (boxSize) of offset.\n     *  eg: offset = 100, boxSize: 50, steps may equal to 2.\n     * @param offset\n     */\n    function getOffsetSteps(offset) {\n      var measure = env.measure;\n      return Math.ceil(Math.abs(offset) / measure.boxSize - options.longSwipesRatio);\n    }\n    /**\n     * Call renderer's render function with default params.\n     * @param duration\n     * @param cb\n     * @param force\n     */\n\n\n    function render(duration, cb, force) {\n      renderer.render(state, duration, cb, force);\n    }\n    /**\n     * Update Swiper transform attr.\n     * @param trans\n     */\n\n\n    function transform(trans) {\n      var _env$limitation = env.limitation,\n          min = _env$limitation.min,\n          max = _env$limitation.max;\n      var transRange = max - min + (options.loop ? env.measure.boxSize : 0);\n      var len = transRange + 1;\n      var progress;\n      state.transforms = trans;\n\n      if (options.loop) {\n        progress = (max - trans) % len / transRange;\n        state.progress = progress < 0 ? 1 + progress : progress > 1 ? progress - 1 : progress;\n      } else {\n        progress = (max - trans) / transRange;\n        state.progress = progress < 0 ? 0 : progress > 1 ? 1 : progress;\n      }\n\n      eventHub.emit(LIFE_CYCLES.SCROLL, _extends({}, state));\n    }\n    /**\n     * Update Swiper transform state with certain Index.\n     * @param targetIndex\n     * @param duration\n     */\n\n\n    function slideTo(targetIndex, duration) {\n      var measure = env.measure,\n          limitation = env.limitation;\n      var len = limitation.maxIndex - limitation.minIndex + 1;\n      var computedIndex = options.loop ? (targetIndex % len + len) % len : targetIndex > limitation.maxIndex ? limitation.maxIndex : targetIndex < limitation.minIndex ? limitation.minIndex : targetIndex;\n      var newTransform = -computedIndex * measure.boxSize + limitation.base; // Slide to wrapper's boundary while touch end.\n      //  Math.abs(excess) ≥ 0\n      // Old condition: state.index === computedIndex\n\n      if (getOffsetSteps(newTransform - state.transforms) !== 0 && options.loop) {\n        var excess = getExcess(state.transforms, limitation);\n        var defaultWay = computedIndex - state.index;\n        var shortcut = getShortestWay(state.index, computedIndex, limitation, defaultWay);\n\n        if (shortcut !== defaultWay && !excess) {\n          transform(shortcut < 0 ? limitation.min - measure.boxSize : limitation.max + measure.boxSize);\n        } else if (state.index === computedIndex) {\n          transform(excess > 0 ? limitation.min - measure.boxSize + excess : limitation.max + measure.boxSize + excess);\n        } // Set initial offset for rebounding animation.\n\n\n        render(0, undefined, true);\n      }\n\n      eventHub.emit(LIFE_CYCLES.BEFORE_SLIDE, state.index, state, computedIndex);\n      state.index = computedIndex;\n      transform(newTransform);\n      render(duration, function () {\n        eventHub.emit(LIFE_CYCLES.AFTER_SLIDE, computedIndex, state);\n      });\n    }\n    /**\n     * Scroll pixel by pixel while user dragging.\n     * @param px\n     */\n\n\n    function scrollPixel(px) {\n      var transforms = state.transforms;\n      var measure = env.measure,\n          limitation = env.limitation;\n      var ratio = Number(px.toExponential().split('e')[1]);\n      var expand = ratio <= 0 ? Math.pow(10, -(ratio - 1)) : 1;\n      var newTransform = transforms; // For optimizing, do not calculate `px` if options.loop === true\n\n      if (options.resistance && !options.loop) {\n        if (px > 0 && transforms >= limitation.max) {\n          px -= Math.pow(px * expand, options.resistanceRatio) / expand;\n        } else if (px < 0 && transforms <= limitation.min) {\n          px += Math.pow(-px * expand, options.resistanceRatio) / expand;\n        }\n      }\n\n      newTransform += px;\n\n      if (options.loop) {\n        var vector = state.tracker.vector();\n        var velocity = options.isHorizontal ? vector.velocityX : vector.velocityY;\n        var excess = getExcess(transforms, limitation);\n\n        if (excess && isExceedingLimits(velocity, transforms, limitation)) {\n          newTransform = excess > 0 ? limitation.min - measure.boxSize + excess : limitation.max + measure.boxSize + excess;\n        }\n      }\n\n      transform(newTransform);\n    }\n\n    function initStatus(startTransform) {\n      if (startTransform === void 0) {\n        startTransform = 0;\n      }\n\n      state.startTransform = startTransform;\n      state.isStart = false;\n      state.isScrolling = false;\n      state.isTouching = false;\n    }\n\n    function initLayout(originTransform) {\n      transform(originTransform);\n    }\n\n    function update() {\n      slideTo(state.index, 0);\n      renderer.updateSize();\n    }\n\n    return {\n      update: update,\n      render: render,\n      transform: transform,\n      slideTo: slideTo,\n      scrollPixel: scrollPixel,\n      initStatus: initStatus,\n      initLayout: initLayout,\n      getOffsetSteps: getOffsetSteps\n    };\n  }\n\n  function Element(el, options) {\n    var $el = typeof el === 'string' ? document.body.querySelector(el) : el;\n    var $wrapper = $el.querySelector(\".\" + options.wrapperClass);\n    var $list = [].slice.call($el.getElementsByClassName(options.slideClass));\n    $list = $list.filter(function (slide) {\n      return slide.getAttribute('data-shallow-slider') === null;\n    });\n    return {\n      $el: $el,\n      $wrapper: $wrapper,\n      $list: $list\n    };\n  }\n\n  var Swiper = function Swiper(el, userOptions) {\n    var options = optionFormatter(userOptions);\n    var eventHub = EventHub();\n    var element = Element(el, options);\n    var env = Env(element, options);\n    var state = State();\n    var on = eventHub.on,\n        off = eventHub.off,\n        emit = eventHub.emit;\n    var instance = {\n      on: on,\n      off: off,\n      env: env,\n      state: state,\n      options: options\n    };\n    (options.plugins || Swiper.plugins || []).forEach(function (plugin) {\n      return plugin(instance, options);\n    });\n    emit(LIFE_CYCLES.BEFORE_INIT, instance); // Initialize internal module\n\n    var renderer = Renderer(env, options);\n    var operations = Operations(env, state, options, renderer, eventHub);\n    var sensor = Sensor(env, state, options, operations);\n\n    function destroy() {\n      emit(LIFE_CYCLES.BEFORE_DESTROY, instance);\n      sensor.detach();\n      renderer.destroy();\n      emit(LIFE_CYCLES.AFTER_DESTROY, instance);\n      eventHub.clear();\n    }\n\n    function updateSize() {\n      env.update(Element(el, options));\n      operations.update();\n    }\n\n    function update() {\n      renderer.destroy();\n      env.update(Element(el, options));\n      renderer.init();\n      operations.update();\n    }\n\n    var slideTo = operations.slideTo;\n    Object.assign(instance, {\n      update: update,\n      destroy: destroy,\n      slideTo: slideTo,\n      updateSize: updateSize\n    });\n    renderer.init();\n    sensor.attach();\n    slideTo(options.initialSlide, 0);\n    emit(LIFE_CYCLES.AFTER_INIT, instance);\n    return instance;\n  };\n\n  Swiper.use = function (plugins) {\n    Swiper.plugins = plugins;\n  };\n\n  return Swiper;\n\n})));\n//# sourceMappingURL=index.js.map\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.SwiperPluginLazyload = factory());\n}(this, (function () { 'use strict';\n\n    function addClass(el, list) {\n      if (list === void 0) {\n        list = [];\n      }\n\n      if (!Array.isArray(list)) list = [list];\n      list.forEach(function (clz) {\n        return !el.classList.contains(clz) && el.classList.add(clz);\n      });\n    }\n    function removeClass(el, list) {\n      if (list === void 0) {\n        list = [];\n      }\n\n      if (!Array.isArray(list)) list = [list];\n      list.forEach(function (clz) {\n        return el.classList.contains(clz) && el.classList.remove(clz);\n      });\n    }\n\n    /**\n     * TinySwiper plugin for image lazy loading.\n     *\n     * @param {SwiperInstance} instance\n     * @param {Options}\n     */\n\n    var SwiperPluginLazyload = (function SwiperPluginLazyload(instance, options) {\n      var isEnable = Boolean(options.lazyload);\n      var lazyloadOptions = Object.assign({\n        loadPrevNext: false,\n        loadPrevNextAmount: 1,\n        loadOnTransitionStart: false,\n        elementClass: 'swiper-lazy',\n        loadingClass: 'swiper-lazy-loading',\n        loadedClass: 'swiper-lazy-loaded',\n        preloaderClass: 'swiper-lazy-preloader'\n      }, options.lazyload);\n      var lazyload = {\n        load: function load(index) {\n          var $slide = instance.env.element.$list[index];\n          if (!$slide) return;\n          var $imgs = [].slice.call($slide.getElementsByClassName(lazyloadOptions.elementClass));\n          var $preloaders = [].slice.call($slide.getElementsByClassName(lazyloadOptions.preloaderClass));\n\n          function handleLoaded($img) {\n            $img.removeAttribute('data-src');\n            addClass($img, [lazyloadOptions.loadedClass]);\n            removeClass($img, [lazyloadOptions.loadingClass]);\n            $img.onload = null;\n            $img.onerror = null;\n            $img.isLoaded = true;\n\n            if ($imgs.every(function (item) {\n              return item.isLoaded;\n            })) {\n              $preloaders.forEach(function ($preloader) {\n                $preloader.parentElement.removeChild($preloader);\n              });\n            }\n          }\n\n          $imgs.forEach(function ($img) {\n            if (!$img.hasAttribute('data-src')) return;\n            var src = $img.getAttribute('data-src');\n            addClass($img, [lazyloadOptions.loadingClass]);\n            removeClass($img, [lazyloadOptions.loadedClass]);\n            $img.src = src;\n\n            $img.onload = function () {\n              return handleLoaded($img);\n            };\n\n            $img.onerror = function () {\n              return handleLoaded($img);\n            };\n          });\n        },\n        loadRange: function loadRange(index, range) {\n          lazyload.load(index);\n\n          if (lazyloadOptions.loadPrevNext && range >= 1) {\n            for (var i = 1; i <= range; i++) {\n              lazyload.load(index + i);\n              lazyload.load(index - i);\n            }\n          }\n        }\n      };\n      if (!isEnable) return;\n      instance.on('before-init', function () {\n        instance.lazyload = lazyload;\n      });\n\n      if (lazyloadOptions.loadOnTransitionStart) {\n        instance.on('before-slide', function (oldIndex, state, newIndex) {\n          lazyload.loadRange(newIndex, lazyloadOptions.loadPrevNextAmount);\n        });\n      } else {\n        instance.on('after-slide', function (index) {\n          lazyload.loadRange(index, lazyloadOptions.loadPrevNextAmount);\n        });\n      }\n\n      instance.on('after-destroy', function () {\n        if (instance.lazyload) {\n          delete instance.lazyload;\n        }\n      });\n    });\n\n    return SwiperPluginLazyload;\n\n})));\n//# sourceMappingURL=lazyload.js.map\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.SwiperPluginMousewheel = factory());\n}(this, (function () { 'use strict';\n\n    function attachListener(el, evtName, handler, opts) {\n      el.addEventListener(evtName, handler, opts);\n    }\n    function detachListener(el, evtName, handler) {\n      el.removeEventListener(evtName, handler);\n    }\n\n    var SwiperPluginMousewheel = (function SwiperPluginMousewheel(instance, options) {\n      var isEnable = Boolean(options.mousewheel);\n      var mousewheelOptions = Object.assign({\n        invert: false,\n        sensitivity: 1,\n        interval: 400\n      }, options.mousewheel);\n      var mousewheelInstance = {\n        $el: null\n      };\n      var wheelStatus = {\n        wheeling: false,\n        wheelDelta: 0,\n        wheelingTimer: 0\n      };\n\n      var handler = function handler(e) {\n        var isHorizontal = Math.abs(e.deltaX) > Math.abs(e.deltaY);\n        if (options.isHorizontal !== isHorizontal) return;\n        var delta = isHorizontal ? e.deltaX : e.deltaY;\n        var index = instance.state.index;\n\n        if (Math.abs(delta) - Math.abs(wheelStatus.wheelDelta) > 0 && !wheelStatus.wheeling && Math.abs(delta) >= mousewheelOptions.sensitivity) {\n          var step = mousewheelOptions.invert ? 1 : -1;\n          instance.slideTo(delta > 0 ? index - step : index + step);\n          wheelStatus.wheeling = true;\n          wheelStatus.wheelingTimer = setTimeout(function () {\n            wheelStatus.wheeling = false;\n          }, mousewheelOptions.interval);\n        }\n\n        wheelStatus.wheelDelta = delta;\n        e.preventDefault();\n        e.stopPropagation();\n      };\n\n      instance.on('after-init', function () {\n        if (!isEnable) return;\n        var element = instance.env.element;\n        var $el = element.$el;\n        mousewheelInstance.$el = $el;\n        attachListener($el, 'wheel', handler);\n      });\n      instance.on('after-destroy', function () {\n        if (!isEnable) return;\n        detachListener(mousewheelInstance.$el, 'wheel', handler);\n        delete mousewheelInstance.$el;\n      });\n    });\n\n    return SwiperPluginMousewheel;\n\n})));\n//# sourceMappingURL=mousewheel.js.map\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.SwiperPluginKeyboardControl = factory());\n}(this, (function () { 'use strict';\n\n    function attachListener(el, evtName, handler, opts) {\n      el.addEventListener(evtName, handler, opts);\n    }\n    function detachListener(el, evtName, handler) {\n      el.removeEventListener(evtName, handler);\n    }\n\n    var DIRECTION = {\n      up: 'ArrowUp',\n      right: 'ArrowRight',\n      down: 'ArrowDown',\n      left: 'ArrowLeft'\n    }; // TODO: optimize\n\n    function isVisible(el) {\n      if (!el) return false;\n      var style = getComputedStyle(el);\n      var visible = style.visibility !== 'hidden' && style.display !== 'none';\n      if (!visible) return false;\n      return el.parentElement && el.parentElement.nodeType === 1 ? isVisible(el.parentElement) : true;\n    }\n\n    function isElementInView(el) {\n      var visibility = isVisible(el);\n      var boundary = el.getBoundingClientRect();\n      var isInView = boundary.top >= 0 && boundary.bottom <= window.innerHeight && boundary.left >= 0 && boundary.right <= window.innerWidth;\n      return isInView && visibility;\n    }\n    /**\n     * TinySwiper plugin for keyboard control.\n     *\n     * @param {SwiperInstance} instance\n     * @param {Options}\n     */\n\n\n    var SwiperPluginKeyboardControl = (function SwiperPluginKeyboardControl(instance, options) {\n      var isEnable = Boolean(options.keyboard);\n      var keyboardOptions = Object.assign({\n        enabled: true,\n        onlyInViewport: true\n      }, options.keyboard);\n      var keyboard = {\n        enable: function enable() {\n          keyboardOptions.enabled = true;\n        },\n        disable: function disable() {\n          keyboardOptions.enabled = false;\n        },\n        onKeyDown: function onKeyDown(e) {\n          var key = e.key;\n          if (keyboardOptions.onlyInViewport && !isElementInView(instance.env.element.$el) || !keyboardOptions.enabled) return;\n\n          if (options.isHorizontal) {\n            if (key === DIRECTION.left) {\n              instance.slideTo(instance.state.index - 1);\n            } else if (key === DIRECTION.right) {\n              instance.slideTo(instance.state.index + 1);\n            }\n          } else {\n            if (key === DIRECTION.down) {\n              instance.slideTo(instance.state.index - 1);\n            } else if (key === DIRECTION.up) {\n              instance.slideTo(instance.state.index + 1);\n            }\n          }\n        }\n      };\n      if (!isEnable) return;\n      instance.on('before-init', function () {\n        instance.keyboard = keyboard;\n        attachListener(window, 'keydown', keyboard.onKeyDown);\n      });\n      instance.on('after-destroy', function () {\n        if (instance.keyboard) {\n          detachListener(window, 'keydown', keyboard.onKeyDown);\n          delete instance.keyboard;\n        }\n      });\n    });\n\n    return SwiperPluginKeyboardControl;\n\n})));\n//# sourceMappingURL=keyboardControl.js.map\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.SwiperPluginNavigation = factory());\n}(this, (function () { 'use strict';\n\n    function attachListener(el, evtName, handler, opts) {\n      el.addEventListener(evtName, handler, opts);\n    }\n    function detachListener(el, evtName, handler) {\n      el.removeEventListener(evtName, handler);\n    }\n\n    var SwiperPluginNavigation = (function SwiperPluginNavigation(instance, options) {\n      var isEnable = Boolean(options.navigation);\n      var navigationInstance = {\n        nextEl: null,\n        prevEl: null\n      };\n      var navigationOptions = Object.assign({\n        disabledClass: 'swiper-button-disabled'\n      }, options.navigation);\n\n      var nextClickHandler = function nextClickHandler(e) {\n        clickHandler(e.target, 'next');\n      };\n\n      var prevClickHandler = function prevClickHandler(e) {\n        clickHandler(e.target, 'prev');\n      };\n\n      var clickHandler = function clickHandler(e, type) {\n        if (checkIsDisable(e) && !instance.options.loop) {\n          return;\n        }\n\n        var index = instance.state.index;\n\n        if (type === 'next') {\n          instance.slideTo(index + 1);\n        }\n\n        if (type === 'prev') {\n          instance.slideTo(index - 1);\n        }\n      };\n\n      var checkNavBtnDisabledClass = function checkNavBtnDisabledClass(index) {\n        var _instance$env$limitat = instance.env.limitation,\n            minIndex = _instance$env$limitat.minIndex,\n            maxIndex = _instance$env$limitat.maxIndex;\n\n        if (navigationInstance && navigationInstance.prevEl && navigationInstance.nextEl) {\n          if (navigationInstance.nextEl.classList.contains(navigationOptions.disabledClass) && index >= minIndex) {\n            navigationInstance.nextEl.classList.remove(navigationOptions.disabledClass);\n          }\n\n          if (navigationInstance.prevEl.classList.contains(navigationOptions.disabledClass) && index <= maxIndex) {\n            navigationInstance.prevEl.classList.remove(navigationOptions.disabledClass);\n          }\n\n          if (index === minIndex) {\n            navigationInstance.prevEl.classList.add(navigationOptions.disabledClass);\n          }\n\n          if (index === maxIndex) {\n            navigationInstance.nextEl.classList.add(navigationOptions.disabledClass);\n          }\n        }\n      };\n\n      var checkIsDisable = function checkIsDisable(e) {\n        return e.classList.contains(navigationOptions.disabledClass);\n      };\n\n      var checkButtonDefaultStatus = function checkButtonDefaultStatus() {\n        var index = instance.state.index;\n        var $list = instance.env.element.$list;\n        var minIndex = instance.env.limitation.minIndex;\n\n        if (index === minIndex && navigationInstance.prevEl) {\n          navigationInstance.prevEl.classList.add(navigationOptions.disabledClass);\n        }\n\n        if ($list.length === minIndex && navigationInstance.nextEl) {\n          navigationInstance.nextEl.classList.add(navigationOptions.disabledClass);\n        }\n      };\n\n      instance.on('before-slide', function (currentIndex, state, newIndex) {\n        if (!instance.options.loop) {\n          checkNavBtnDisabledClass(newIndex);\n        }\n      });\n      instance.on('after-init', function () {\n        if (!isEnable) return;\n        navigationInstance.nextEl = typeof navigationOptions.nextEl === 'string' ? document.body.querySelector(navigationOptions.nextEl) : navigationOptions.nextEl;\n        navigationInstance.prevEl = typeof navigationOptions.prevEl === 'string' ? document.body.querySelector(navigationOptions.prevEl) : navigationOptions.prevEl;\n\n        if (!instance.options.loop) {\n          checkButtonDefaultStatus();\n        }\n\n        attachListener(navigationInstance.nextEl, 'click', nextClickHandler);\n        attachListener(navigationInstance.prevEl, 'click', prevClickHandler);\n      });\n      instance.on('after-destroy', function () {\n        if (navigationInstance && navigationInstance.prevEl && navigationInstance.nextEl) {\n          detachListener(navigationInstance.nextEl, 'click', nextClickHandler);\n          detachListener(navigationInstance.prevEl, 'click', prevClickHandler);\n          delete navigationInstance.nextEl;\n          delete navigationInstance.prevEl;\n        }\n      });\n    });\n\n    return SwiperPluginNavigation;\n\n})));\n//# sourceMappingURL=navigation.js.map\n"]}