PageSourceSearch

https://www.swbh.nhs.uk/wp-content/themes/swbh/library/js/scripts.min.js?58

js swbh.nhs.uk collected 2026-10-02 05:58:28 UTC 888,824 bytes, 22,253 lines download raw bytes

vendor: 78 bytes, lines 1-3
1/******/ (() => { // webpackBootstrap
2/******/ 	var __webpack_modules__ = ({
3
vendor: 142,667 bytes, lines 4-21
4/***/ "./node_modules/@fancyapps/ui/dist/index.esm.js":
5/*!******************************************************!*\
6  !*** ./node_modules/@fancyapps/ui/dist/index.esm.js ***!
7  \******************************************************/
8/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9
10"use strict";
11__webpack_require__.r(__webpack_exports__);
12/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13/* harmony export */   Carousel: () => (/* binding */ K),
14/* harmony export */   Fancybox: () => (/* binding */ ce),
15/* harmony export */   Panzoom: () => (/* binding */ R)
16/* harmony export */ });
17const t=(t,e=1e4)=>(t=parseFloat(t+"")||0,Math.round((t+Number.EPSILON)*e)/e),e=function(t){if(!(t&&t instanceof Element&&t.offsetParent))return!1;const e=t.scrollHeight>t.clientHeight,i=window.getComputedStyle(t).overflowY,n=-1!==i.indexOf("hidden"),s=-1!==i.indexOf("visible");return e&&!n&&!s},i=function(t,n=void 0){return!(!t||t===document.body||n&&t===n)&&(e(t)?t:i(t.parentElement,n))},n=function(t){var e=(new DOMParser).parseFromString(t,"text/html").body;if(e.childElementCount>1){for(var i=document.createElement("div");e.firstChild;)i.appendChild(e.firstChild);return i}return e.firstChild},s=t=>`${t||""}`.split(" ").filter((t=>!!t)),o=(t,e,i)=>{t&&s(e).forEach((e=>{t.classList.toggle(e,i||!1)}))};class a{constructor(t){Object.defineProperty(this,"pageX",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pageY",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientX",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientY",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"time",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"nativePointer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.nativePointer=t,this.pageX=t.pageX,this.pageY=t.pageY,this.clientX=t.clientX,this.clientY=t.clientY,this.id=self.Touch&&t instanceof Touch?t.identifier:-1,this.time=Date.now()}}const r={passive:!1};class l{constructor(t,{start:e=(()=>!0),move:i=(()=>{}),end:n=(()=>{})}){Object.defineProperty(this,"element",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"startCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"moveCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"endCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"currentPointers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"startPointers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),this.element=t,this.startCallback=e,this.moveCallback=i,this.endCallback=n;for(const t of["onPointerStart","onTouchStart","onMove","onTouchEnd","onPointerEnd","onWindowBlur"])this[t]=this[t].bind(this);this.element.addEventListener("mousedown",this.onPointerStart,r),this.element.addEventListener("touchstart",this.onTouchStart,r),this.element.addEventListener("touchmove",this.onMove,r),this.element.addEventListener("touchend",this.onTouchEnd),this.element.addEventListener("touchcancel",this.onTouchEnd)}onPointerStart(t){if(!t.buttons||0!==t.button)return;const e=new a(t);this.currentPointers.some((t=>t.id===e.id))||this.triggerPointerStart(e,t)&&(window.addEventListener("mousemove",this.onMove),window.addEventListener("mouseup",this.onPointerEnd),window.addEventListener("blur",this.onWindowBlur))}onTouchStart(t){for(const e of Array.from(t.changedTouches||[]))this.triggerPointerStart(new a(e),t);window.addEventListener("blur",this.onWindowBlur)}onMove(t){const e=this.currentPointers.slice(),i="changedTouches"in t?Array.from(t.changedTouches||[]).map((t=>new a(t))):[new a(t)],n=[];for(const t of i){const e=this.currentPointers.findIndex((e=>e.id===t.id));e<0||(n.push(t),this.currentPointers[e]=t)}n.length&&this.moveCallback(t,this.currentPointers.slice(),e)}onPointerEnd(t){t.buttons>0&&0!==t.button||(this.triggerPointerEnd(t,new a(t)),window.removeEventListener("mousemove",this.onMove),window.removeEventListener("mouseup",this.onPointerEnd),window.removeEventListener("blur",this.onWindowBlur))}onTouchEnd(t){for(const e of Array.from(t.changedTouches||[]))this.triggerPointerEnd(t,new a(e))}triggerPointerStart(t,e){return!!this.startCallback(e,t,this.currentPointers.slice())&&(this.currentPointers.push(t),this.startPointers.push(t),!0)}triggerPointerEnd(t,e){const i=this.currentPointers.findIndex((t=>t.id===e.id));i<0||(this.currentPointers.splice(i,1),this.startPointers.splice(i,1),this.endCallback(t,e,this.currentPointers.slice()))}onWindowBlur(){this.clear()}clear(){for(;this.currentPointers.length;){const t=this.currentPointers[this.currentPointers.length-1];this.currentPointers.splice(this.currentPointers.length-1,1),this.startPointers.splice(this.currentPointers.length-1,1),this.endCallback(new Event("touchend",{bubbles:!0,cancelable:!0,clientX:t.clientX,clientY:t.clientY}),t,this.currentPointers.slice())}}stop(){this.element.removeEventListener("mousedown",this.onPointerStart,r),this.element.removeEventListener("touchstart",this.onTouchStart,r),this.element.removeEventListener("touchmove",this.onMove,r),this.element.removeEventListener("touchend",this.onTouchEnd),this.element.removeEventListener("touchcancel",this.onTouchEnd),window.removeEventListener("mousemove",this.onMove),window.removeEventListener("mouseup",this.onPointerEnd),window.removeEventListener("blur",this.onWindowBlur)}}function c(t,e){return e?Math.sqrt(Math.pow(e.clientX-t.clientX,2)+Math.pow(e.clientY-t.clientY,2)):0}function h(t,e){return e?{clientX:(t.clientX+e.clientX)/2,clientY:(t.clientY+e.clientY)/2}:t}const d=t=>"object"==typeof t&&null!==t&&t.constructor===Object&&"[object Object]"===Object.prototype.toString.call(t),u=(t,...e)=>{const i=e.length;for(let n=0;n<i;n++){const i=e[n]||{};Object.entries(i).forEach((([e,i])=>{const n=Array.isArray(i)?[]:{};t[e]||Object.assign(t,{[e]:n}),d(i)?Object.assign(t[e],u(n,i)):Array.isArray(i)?Object.assign(t,{[e]:[...i]}):Object.assign(t,{[e]:i})}))}return t},f=function(t,e){return t.split(".").reduce(((t,e)=>"object"==typeof t?t[e]:void 0),e)};class p{constructor(t={}){Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),this.setOptions(t);for(const t of Object.getOwnPropertyNames(Object.getPrototypeOf(this)))t.startsWith("on")&&"function"==typeof this[t]&&(this[t]=this[t].bind(this))}setOptions(t){this.options=t?u({},this.constructor.defaults,t):{};for(const[t,e]of Object.entries(this.option("on")||{}))this.on(t,e)}option(t,...e){let i=f(t,this.options);return i&&"function"==typeof i&&(i=i.call(this,this,...e)),i}optionFor(t,e,i,...n){let s=f(e,t);var o;"string"!=typeof(o=s)||isNaN(o)||isNaN(parseFloat(o))||(s=parseFloat(s)),"true"===s&&(s=!0),"false"===s&&(s=!1),s&&"function"==typeof s&&(s=s.call(this,this,t,...n));let a=f(e,this.options);return a&&"function"==typeof a?s=a.call(this,this,t,...n,s):void 0===s&&(s=a),void 0===s?i:s}cn(t){const e=this.options.classes;return e&&e[t]||""}localize(t,e=[]){t=String(t).replace(/\{\{(\w+).?(\w+)?\}\}/g,((t,e,i)=>{let n="";return i?n=this.option(`${e[0]+e.toLowerCase().substring(1)}.l10n.${i}`):e&&(n=this.option(`l10n.${e}`)),n||(n=t),n}));for(let i=0;i<e.length;i++)t=t.split(e[i][0]).join(e[i][1]);return t=t.replace(/\{\{(.*?)\}\}/g,((t,e)=>e))}on(t,e){let i=[];"string"==typeof t?i=t.split(" "):Array.isArray(t)&&(i=t),this.events||(this.events=new Map),i.forEach((t=>{let i=this.events.get(t);i||(this.events.set(t,[]),i=[]),i.includes(e)||i.push(e),this.events.set(t,i)}))}off(t,e){let i=[];"string"==typeof t?i=t.split(" "):Array.isArray(t)&&(i=t),i.forEach((t=>{const i=this.events.get(t);if(Array.isArray(i)){const t=i.indexOf(e);t>-1&&i.splice(t,1)}}))}emit(t,...e){[...this.events.get(t)||[]].forEach((t=>t(this,...e))),"*"!==t&&this.emit("*",t,...e)}}Object.defineProperty(p,"version",{enumerable:!0,configurable:!0,writable:!0,value:"5.0.28"}),Object.defineProperty(p,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{}});class g extends p{constructor(t={}){super(t),Object.defineProperty(this,"plugins",{enumerable:!0,configurable:!0,writable:!0,value:{}})}attachPlugins(t={}){const e=new Map;for(const[i,n]of Object.entries(t)){const t=this.option(i),s=this.plugins[i];s||!1===t?s&&!1===t&&(s.detach(),delete this.plugins[i]):e.set(i,new n(this,t||{}))}for(const[t,i]of e)this.plugins[t]=i,i.attach()}detachPlugins(t){t=t||Object.keys(this.plugins);for(const e of t){const t=this.plugins[e];t&&t.detach(),delete this.plugins[e]}return this.emit("detachPlugins"),this}}var m;!function(t){t[t.Init=0]="Init",t[t.Error=1]="Error",t[t.Ready=2]="Ready",t[t.Panning=3]="Panning",t[t.Mousemove=4]="Mousemove",t[t.Destroy=5]="Destroy"}(m||(m={}));const b=["a","b","c","d","e","f"],v={PANUP:"Move up",PANDOWN:"Move down",PANLEFT:"Move left",PANRIGHT:"Move right",ZOOMIN:"Zoom in",ZOOMOUT:"Zoom out",TOGGLEZOOM:"Toggle zoom level",TOGGLE1TO1:"Toggle zoom level",ITERATEZOOM:"Toggle zoom level",ROTATECCW:"Rotate counterclockwise",ROTATECW:"Rotate clockwise",FLIPX:"Flip horizontally",FLIPY:"Flip vertically",FITX:"Fit horizontally",FITY:"Fit vertically",RESET:"Reset",TOGGLEFS:"Toggle fullscreen"},y={content:null,width:"auto",height:"auto",panMode:"drag",touch:!0,dragMinThreshold:3,lockAxis:!1,mouseMoveFactor:1,mouseMoveFriction:.12,zoom:!0,pinchToZoom:!0,panOnlyZoomed:"auto",minScale:1,maxScale:2,friction:.25,dragFriction:.35,decelFriction:.05,click:"toggleZoom",dblClick:!1,wheel:"zoom",wheelLimit:7,spinner:!0,bounds:"auto",infinite:!1,rubberband:!0,bounce:!0,maxVelocity:75,transformParent:!1,classes:{content:"f-panzoom__content",isLoading:"is-loading",canZoomIn:"can-zoom_in",canZoomOut:"can-zoom_out",isDraggable:"is-draggable",isDragging:"is-dragging",inFullscreen:"in-fullscreen",htmlHasFullscreen:"with-panzoom-in-fullscreen"},l10n:v},w='<div class="f-spinner"><svg viewBox="0 0 50 50"><circle cx="25" cy="25" r="20"></circle><circle cx="25" cy="25" r="20"></circle></svg></div>',x=t=>t&&null!==t&&t instanceof Element&&"nodeType"in t,E=(t,e)=>{t&&s(e).forEach((e=>{t.classList.remove(e)}))},S=(t,e)=>{t&&s(e).forEach((e=>{t.classList.add(e)}))},P={a:1,b:0,c:0,d:1,e:0,f:0},C=1e5,T=1e4,M="mousemove",O="drag",A="content";let L=null,z=null;class R extends g{get fits(){return this.contentRect.width-this.contentRect.fitWidth<1&&this.contentRect.height-this.contentRect.fitHeight<1}get isTouchDevice(){return null===z&&(z=window.matchMedia("(hover: none)").matches),z}get isMobile(){return null===L&&(L=/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)),L}get panMode(){return this.options.panMode!==M||this.isTouchDevice?O:M}get panOnlyZoomed(){const t=this.options.panOnlyZoomed;return"auto"===t?this.isTouchDevice:t}get isInfinite(){return this.option("infinite")}get angle(){return 180*Math.atan2(this.current.b,this.current.a)/Math.PI||0}get targetAngle(){return 180*Math.atan2(this.target.b,this.target.a)/Math.PI||0}get scale(){const{a:t,b:e}=this.current;return Math.sqrt(t*t+e*e)||1}get targetScale(){const{a:t,b:e}=this.target;return Math.sqrt(t*t+e*e)||1}get minScale(){return this.option("minScale")||1}get fullScale(){const{contentRect:t}=this;return t.fullWidth/t.fitWidth||1}get maxScale(){return this.fullScale*(this.option("maxScale")||1)||1}get coverScale(){const{containerRect:t,contentRect:e}=this,i=Math.max(t.height/e.fitHeight,t.width/e.fitWidth)||1;return Math.min(this.fullScale,i)}get isScaling(){return Math.abs(this.targetScale-this.scale)>1e-5&&!this.isResting}get isContentLoading(){const t=this.content;return!!(t&&t instanceof HTMLImageElement)&&!t.complete}get isResting(){if(this.isBouncingX||this.isBouncingY)return!1;for(const t of b){const e="e"==t||"f"===t?1e-4:1e-5;if(Math.abs(this.target[t]-this.current[t])>e)return!1}return!(!this.ignoreBounds&&!this.checkBounds().inBounds)}constructor(t,e={},i={}){var s;if(super(e),Object.defineProperty(this,"pointerTracker",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"resizeObserver",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"updateTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"clickTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"rAF",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"isTicking",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"ignoreBounds",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"isBouncingX",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"isBouncingY",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"clicks",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"trackingPoints",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"pwt",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"cwd",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"pmme",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"friction",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:m.Init}),Object.defineProperty(this,"isDragging",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"spinner",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"containerRect",{enumerable:!0,configurable:!0,writable:!0,value:{width:0,height:0,innerWidth:0,innerHeight:0}}),Object.defineProperty(this,"contentRect",{enumerable:!0,configurable:!0,writable:!0,value:{top:0,right:0,bottom:0,left:0,fullWidth:0,fullHeight:0,fitWidth:0,fitHeight:0,width:0,height:0}}),Object.defineProperty(this,"dragStart",{enumerable:!0,configurable:!0,writable:!0,value:{x:0,y:0,top:0,left:0,time:0}}),Object.defineProperty(this,"dragOffset",{enumerable:!0,configurable:!0,writable:!0,value:{x:0,y:0,time:0}}),Object.defineProperty(this,"current",{enumerable:!0,configurable:!0,writable:!0,value:Object.assign({},P)}),Object.defineProperty(this,"target",{enumerable:!0,configurable:!0,writable:!0,value:Object.assign({},P)}),Object.defineProperty(this,"velocity",{enumerable:!0,configurable:!0,writable:!0,value:{a:0,b:0,c:0,d:0,e:0,f:0}}),Object.defineProperty(this,"lockedAxis",{enumerable:!0,configurable:!0,writable:!0,value:!1}),!t)throw new Error("Container Element Not Found");this.container=t,this.initContent(),this.attachPlugins(Object.assign(Object.assign({},R.Plugins),i)),this.emit("attachPlugins"),this.emit("init");const o=this.content;if(o.addEventListener("load",this.onLoad),o.addEventListener("error",this.onError),this.isContentLoading){if(this.option("spinner")){t.classList.add(this.cn("isLoading"));const e=n(w);!t.contains(o)||o.parentElement instanceof HTMLPictureElement?this.spinner=t.appendChild(e):this.spinner=(null===(s=o.parentElement)||void 0===s?void 0:s.insertBefore(e,o))||null}this.emit("beforeLoad")}else queueMicrotask((()=>{this.enable()}))}initContent(){const{container:t}=this,e=this.cn(A);let i=this.option(A)||t.querySelector(`.${e}`);if(i||(i=t.querySelector("img,picture")||t.firstElementChild,i&&S(i,e)),i instanceof HTMLPictureElement&&(i=i.querySelector("img")),!i)throw new Error("No content found");this.content=i}onLoad(){const{spinner:t,container:e,state:i}=this;t&&(t.remove(),this.spinner=null),this.option("spinner")&&e.classList.remove(this.cn("isLoading")),this.emit("afterLoad"),i===m.Init?this.enable():this.updateMetrics()}onError(){this.state!==m.Destroy&&(this.spinner&&(this.spinner.remove(),this.spinner=null),this.stop(),this.detachEvents(),this.state=m.Error,this.emit("error"))}attachObserver(){var t;const e=()=>{const{container:t,containerRect:e}=this;return Math.abs(e.width-t.getBoundingClientRect().width)>.1||Math.abs(e.height-t.getBoundingClientRect().height)>.1};this.resizeObserver||void 0===window.ResizeObserver||(this.resizeObserver=new ResizeObserver((()=>{this.updateTimer||(e()?(this.onResize(),this.isMobile&&(this.updateTimer=setTimeout((()=>{e()&&this.onResize(),this.updateTimer=null}),500))):this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null))}))),null===(t=this.resizeObserver)||void 0===t||t.observe(this.container)}detachObserver(){var t;null===(t=this.resizeObserver)||void 0===t||t.disconnect()}attachEvents(){const{container:t}=this;t.addEventListener("click",this.onClick,{passive:!1,capture:!1}),t.addEventListener("wheel",this.onWheel,{passive:!1}),this.pointerTracker=new l(t,{start:this.onPointerDown,move:this.onPointerMove,end:this.onPointerUp}),document.addEventListener(M,this.onMouseMove)}detachEvents(){var t;const{container:e}=this;e.removeEventListener("click",this.onClick,{passive:!1,capture:!1}),e.removeEventListener("wheel",this.onWheel,{passive:!1}),null===(t=this.pointerTracker)||void 0===t||t.stop(),this.pointerTracker=null,document.removeEventListener(M,this.onMouseMove),document.removeEventListener("keydown",this.onKeydown,!0),this.clickTimer&&(clearTimeout(this.clickTimer),this.clickTimer=null),this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null)}animate(){this.setTargetForce();const t=this.friction,e=this.option("maxVelocity");for(const i of b)t?(this.velocity[i]*=1-t,e&&!this.isScaling&&(this.velocity[i]=Math.max(Math.min(this.velocity[i],e),-1*e)),this.current[i]+=this.velocity[i]):this.current[i]=this.target[i];this.setTransform(),this.setEdgeForce(),!this.isResting||this.isDragging?this.rAF=requestAnimationFrame((()=>this.animate())):this.stop("current")}setTargetForce(){for(const t of b)"e"===t&&this.isBouncingX||"f"===t&&this.isBouncingY||(this.velocity[t]=(1/(1-this.friction)-1)*(this.target[t]-this.current[t]))}checkBounds(t=0,e=0){const{current:i}=this,n=i.e+t,s=i.f+e,o=this.getBounds(),{x:a,y:r}=o,l=a.min,c=a.max,h=r.min,d=r.max;let u=0,f=0;return l!==1/0&&n<l?u=l-n:c!==1/0&&n>c&&(u=c-n),h!==1/0&&s<h?f=h-s:d!==1/0&&s>d&&(f=d-s),Math.abs(u)<1e-4&&(u=0),Math.abs(f)<1e-4&&(f=0),Object.assign(Object.assign({},o),{xDiff:u,yDiff:f,inBounds:!u&&!f})}clampTargetBounds(){const{target:t}=this,{x:e,y:i}=this.getBounds();e.min!==1/0&&(t.e=Math.max(t.e,e.min)),e.max!==1/0&&(t.e=Math.min(t.e,e.max)),i.min!==1/0&&(t.f=Math.max(t.f,i.min)),i.max!==1/0&&(t.f=Math.min(t.f,i.max))}calculateContentDim(t=this.current){const{content:e,contentRect:i}=this,{fitWidth:n,fitHeight:s,fullWidth:o,fullHeight:a}=i;let r=o,l=a;if(this.option("zoom")||0!==this.angle){const i=!(e instanceof HTMLImageElement)&&("none"===window.getComputedStyle(e).maxWidth||"none"===window.getComputedStyle(e).maxHeight),c=i?o:n,h=i?a:s,d=this.getMatrix(t),u=new DOMPoint(0,0).matrixTransform(d),f=new DOMPoint(0+c,0).matrixTransform(d),p=new DOMPoint(0+c,0+h).matrixTransform(d),g=new DOMPoint(0,0+h).matrixTransform(d),m=Math.abs(p.x-u.x),b=Math.abs(p.y-u.y),v=Math.abs(g.x-f.x),y=Math.abs(g.y-f.y);r=Math.max(m,v),l=Math.max(b,y)}return{contentWidth:r,contentHeight:l}}setEdgeForce(){if(this.ignoreBounds||this.isDragging||this.panMode===M||this.targetScale<this.scale)return this.isBouncingX=!1,void(this.isBouncingY=!1);const{target:t}=this,{x:e,y:i,xDiff:n,yDiff:s}=this.checkBounds();const o=this.option("maxVelocity");let a=this.velocity.e,r=this.velocity.f;0!==n?(this.isBouncingX=!0,n*a<=0?a+=.14*n:(a=.14*n,e.min!==1/0&&(this.target.e=Math.max(t.e,e.min)),e.max!==1/0&&(this.target.e=Math.min(t.e,e.max))),o&&(a=Math.max(Math.min(a,o),-1*o))):this.isBouncingX=!1,0!==s?(this.isBouncingY=!0,s*r<=0?r+=.14*s:(r=.14*s,i.min!==1/0&&(this.target.f=Math.max(t.f,i.min)),i.max!==1/0&&(this.target.f=Math.min(t.f,i.max))),o&&(r=Math.max(Math.min(r,o),-1*o))):this.isBouncingY=!1,this.isBouncingX&&(this.velocity.e=a),this.isBouncingY&&(this.velocity.f=r)}enable(){const{content:t}=this,e=new DOMMatrixReadOnly(window.getComputedStyle(t).transform);for(const t of b)this.current[t]=this.target[t]=e[t];this.updateMetrics(),this.attachObserver(),this.attachEvents(),this.state=m.Ready,this.emit("ready")}onClick(t){var e;"click"===t.type&&0===t.detail&&(this.dragOffset.x=0,this.dragOffset.y=0),this.isDragging&&(null===(e=this.pointerTracker)||void 0===e||e.clear(),this.trackingPoints=[],this.startDecelAnim());const i=t.target;if(!i||t.defaultPrevented)return;if(i.hasAttribute("disabled"))return t.preventDefault(),void t.stopPropagation();if((()=>{const t=window.getSelection();return t&&"Range"===t.type})()&&!i.closest("button"))return;const n=i.closest("[data-panzoom-action]"),s=i.closest("[data-panzoom-change]"),o=n||s,a=o&&x(o)?o.dataset:null;if(a){const e=a.panzoomChange,i=a.panzoomAction;if((e||i)&&t.preventDefault(),e){let t={};try{t=JSON.parse(e)}catch(t){console&&console.warn("The given data was not valid JSON")}return void this.applyChange(t)}if(i)return void(this[i]&&this[i]())}if(Math.abs(this.dragOffset.x)>3||Math.abs(this.dragOffset.y)>3)return t.preventDefault(),void t.stopPropagation();if(i.closest("[data-fancybox]"))return;const r=this.content.getBoundingClientRect(),l=this.dragStart;if(l.time&&!this.canZoomOut()&&(Math.abs(r.x-l.x)>2||Math.abs(r.y-l.y)>2))return;this.dragStart.time=0;const c=e=>{this.option("zoom",t)&&e&&"string"==typeof e&&/(iterateZoom)|(toggle(Zoom|Full|Cover|Max)|(zoomTo(Fit|Cover|Max)))/.test(e)&&"function"==typeof this[e]&&(t.preventDefault(),this[e]({event:t}))},h=this.option("click",t),d=this.option("dblClick",t);d?(this.clicks++,1==this.clicks&&(this.clickTimer=setTimeout((()=>{1===this.clicks?(this.emit("click",t),!t.defaultPrevented&&h&&c(h)):(this.emit("dblClick",t),t.defaultPrevented||c(d)),this.clicks=0,this.clickTimer=null}),350))):(this.emit("click",t),!t.defaultPrevented&&h&&c(h))}addTrackingPoint(t){const e=this.trackingPoints.filter((t=>t.time>Date.now()-100));e.push(t),this.trackingPoints=e}onPointerDown(t,e,i){var n;if(!1===this.option("touch",t))return!1;this.pwt=0,this.dragOffset={x:0,y:0,time:0},this.trackingPoints=[];const s=this.content.getBoundingClientRect();if(this.dragStart={x:s.x,y:s.y,top:s.top,left:s.left,time:Date.now()},this.clickTimer)return!1;if(this.panMode===M&&this.targetScale>1)return t.preventDefault(),t.stopPropagation(),!1;const o=t.composedPath()[0];if(!i.length){if(["TEXTAREA","OPTION","INPUT","SELECT","VIDEO","IFRAME"].includes(o.nodeName)||o.closest("[contenteditable],[data-selectable],[data-draggable],[data-clickable],[data-panzoom-change],[data-panzoom-action]"))return!1;null===(n=window.getSelection())||void 0===n||n.removeAllRanges()}if("mousedown"===t.type)["A","BUTTON"].includes(o.nodeName)||t.preventDefault();else if(Math.abs(this.velocity.a)>.3)return!1;return this.target.e=this.current.e,this.target.f=this.current.f,this.stop(),this.isDragging||(this.isDragging=!0,this.addTrackingPoint(e),this.emit("touchStart",t)),!0}onPointerMove(e,n,s){if(!1===this.option("touch",e))return;if(!this.isDragging)return;if(n.length<2&&this.panOnlyZoomed&&t(this.targetScale)<=t(this.minScale))return;if(this.emit("touchMove",e),e.defaultPrevented)return;this.addTrackingPoint(n[0]);const{content:o}=this,a=h(s[0],s[1]),r=h(n[0],n[1]);let l=0,d=0;if(n.length>1){const t=o.getBoundingClientRect();l=a.clientX-t.left-.5*t.width,d=a.clientY-t.top-.5*t.height}const u=c(s[0],s[1]),f=c(n[0],n[1]);let p=u?f/u:1,g=r.clientX-a.clientX,m=r.clientY-a.clientY;this.dragOffset.x+=g,this.dragOffset.y+=m,this.dragOffset.time=Date.now()-this.dragStart.time;let b=t(this.targetScale)===t(this.minScale)&&this.option("lockAxis");if(b&&!this.lockedAxis)if("xy"===b||"y"===b||"touchmove"===e.type){if(Math.abs(this.dragOffset.x)<6&&Math.abs(this.dragOffset.y)<6)return void e.preventDefault();const t=Math.abs(180*Math.atan2(this.dragOffset.y,this.dragOffset.x)/Math.PI);this.lockedAxis=t>45&&t<135?"y":"x",this.dragOffset.x=0,this.dragOffset.y=0,g=0,m=0}else this.lockedAxis=b;if(i(e.target,this.content)&&(b="x",this.dragOffset.y=0),b&&"xy"!==b&&this.lockedAxis!==b&&t(this.targetScale)===t(this.minScale))return;e.cancelable&&e.preventDefault(),this.container.classList.add(this.cn("isDragging"));const v=this.checkBounds(g,m);this.option("rubberband")?("x"!==this.isInfinite&&(v.xDiff>0&&g<0||v.xDiff<0&&g>0)&&(g*=Math.max(0,.5-Math.abs(.75/this.contentRect.fitWidth*v.xDiff))),"y"!==this.isInfinite&&(v.yDiff>0&&m<0||v.yDiff<0&&m>0)&&(m*=Math.max(0,.5-Math.abs(.75/this.contentRect.fitHeight*v.yDiff)))):(v.xDiff&&(g=0),v.yDiff&&(m=0));const y=this.targetScale,w=this.minScale,x=this.maxScale;y<.5*w&&(p=Math.max(p,w)),y>1.5*x&&(p=Math.min(p,x)),"y"===this.lockedAxis&&t(y)===t(w)&&(g=0),"x"===this.lockedAxis&&t(y)===t(w)&&(m=0),this.applyChange({originX:l,originY:d,panX:g,panY:m,scale:p,friction:this.option("dragFriction"),ignoreBounds:!0})}onPointerUp(t,e,n){if(n.length)return this.dragOffset.x=0,this.dragOffset.y=0,void(this.trackingPoints=[]);this.container.classList.remove(this.cn("isDragging")),this.isDragging&&(this.addTrackingPoint(e),this.panOnlyZoomed&&this.contentRect.width-this.contentRect.fitWidth<1&&this.contentRect.height-this.contentRect.fitHeight<1&&(this.trackingPoints=[]),i(t.target,this.content)&&"y"===this.lockedAxis&&(this.trackingPoints=[]),this.emit("touchEnd",t),this.isDragging=!1,this.lockedAxis=!1,this.state!==m.Destroy&&(t.defaultPrevented||this.startDecelAnim()))}startDecelAnim(){var e;const i=this.isScaling;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.isBouncingX=!1,this.isBouncingY=!1;for(const t of b)this.velocity[t]=0;this.target.e=this.current.e,this.target.f=this.current.f,E(this.container,"is-scaling"),E(this.container,"is-animating"),this.isTicking=!1;const{trackingPoints:n}=this,s=n[0],o=n[n.length-1];let a=0,r=0,l=0;o&&s&&(a=o.clientX-s.clientX,r=o.clientY-s.clientY,l=o.time-s.time);const c=(null===(e=window.visualViewport)||void 0===e?void 0:e.scale)||1;1!==c&&(a*=c,r*=c);let h=0,d=0,u=0,f=0,p=this.option("decelFriction");const g=this.targetScale;if(l>0){u=Math.abs(a)>3?a/(l/30):0,f=Math.abs(r)>3?r/(l/30):0;const t=this.option("maxVelocity");t&&(u=Math.max(Math.min(u,t),-1*t),f=Math.max(Math.min(f,t),-1*t))}u&&(h=u/(1/(1-p)-1)),f&&(d=f/(1/(1-p)-1)),("y"===this.option("lockAxis")||"xy"===this.option("lockAxis")&&"y"===this.lockedAxis&&t(g)===this.minScale)&&(h=u=0),("x"===this.option("lockAxis")||"xy"===this.option("lockAxis")&&"x"===this.lockedAxis&&t(g)===this.minScale)&&(d=f=0);const m=this.dragOffset.x,v=this.dragOffset.y,y=this.option("dragMinThreshold")||0;Math.abs(m)<y&&Math.abs(v)<y&&(h=d=0,u=f=0),(this.option("zoom")&&(g<this.minScale-1e-5||g>this.maxScale+1e-5)||i&&!h&&!d)&&(p=.35),this.applyChange({panX:h,panY:d,friction:p}),this.emit("decel",u,f,m,v)}onWheel(t){var e=[-t.deltaX||0,-t.deltaY||0,-t.detail||0].reduce((function(t,e){return Math.abs(e)>Math.abs(t)?e:t}));const i=Math.max(-1,Math.min(1,e));if(this.emit("wheel",t,i),this.panMode===M)return;if(t.defaultPrevented)return;const n=this.option("wheel");"pan"===n?(t.preventDefault(),this.panOnlyZoomed&&!this.canZoomOut()||this.applyChange({panX:2*-t.deltaX,panY:2*-t.deltaY,bounce:!1})):"zoom"===n&&!1!==this.option("zoom")&&this.zoomWithWheel(t)}onMouseMove(t){this.panWithMouse(t)}onKeydown(t){"Escape"===t.key&&this.toggleFS()}onResize(){this.updateMetrics(),this.checkBounds().inBounds||this.requestTick()}setTransform(){this.emit("beforeTransform");const{current:e,target:i,content:n,contentRect:s}=this,o=Object.assign({},P);for(const n of b){const s="e"==n||"f"===n?T:C;o[n]=t(e[n],s),Math.abs(i[n]-e[n])<("e"==n||"f"===n?.51:.001)&&(e[n]=i[n])}let{a:a,b:r,c:l,d:c,e:h,f:d}=o,u=`matrix(${a}, ${r}, ${l}, ${c}, ${h}, ${d})`,f=n.parentElement instanceof HTMLPictureElement?n.parentElement:n;if(this.option("transformParent")&&(f=f.parentElement||f),f.style.transform===u)return;f.style.transform=u;const{contentWidth:p,contentHeight:g}=this.calculateContentDim();s.width=p,s.height=g,this.emit("afterTransform")}updateMetrics(e=!1){var i;if(!this||this.state===m.Destroy)return;if(this.isContentLoading)return;const n=Math.max(1,(null===(i=window.visualViewport)||void 0===i?void 0:i.scale)||1),{container:s,content:o}=this,a=o instanceof HTMLImageElement,r=s.getBoundingClientRect(),l=getComputedStyle(this.container);let c=r.width*n,h=r.height*n;const d=parseFloat(l.paddingTop)+parseFloat(l.paddingBottom),u=c-(parseFloat(l.paddingLeft)+parseFloat(l.paddingRight)),f=h-d;this.containerRect={width:c,height:h,innerWidth:u,innerHeight:f};let p=this.option("width")||"auto",g=this.option("height")||"auto";"auto"===p&&(p=parseFloat(o.dataset.width||"")||(t=>{let e=0;return e=t instanceof HTMLImageElement?t.naturalWidth:t instanceof SVGElement?t.width.baseVal.value:Math.max(t.offsetWidth,t.scrollWidth),e||0})(o)),"auto"===g&&(g=parseFloat(o.dataset.height||"")||(t=>{let e=0;return e=t instanceof HTMLImageElement?t.naturalHeight:t instanceof SVGElement?t.height.baseVal.value:Math.max(t.offsetHeight,t.scrollHeight),e||0})(o));let b=o.parentElement instanceof HTMLPictureElement?o.parentElement:o;this.option("transformParent")&&(b=b.parentElement||b);const v=b.getAttribute("style")||"";b.style.setProperty("transform","none","important"),a&&(b.style.width="",b.style.height=""),b.offsetHeight;const y=o.getBoundingClientRect();let w=y.width*n,x=y.height*n,E=0,S=0;a&&(Math.abs(p-w)>1||Math.abs(g-x)>1)&&({width:w,height:x,top:E,left:S}=((t,e,i,n)=>{const s=i/n;return s>t/e?(i=t,n=t/s):(i=e*s,n=e),{width:i,height:n,top:.5*(e-n),left:.5*(t-i)}})(w,x,p,g)),this.contentRect=Object.assign(Object.assign({},this.contentRect),{top:y.top-r.top+E,bottom:r.bottom-y.bottom+E,left:y.left-r.left+S,right:r.right-y.right+S,fitWidth:w,fitHeight:x,width:w,height:x,fullWidth:p,fullHeight:g}),b.style.cssText=v,a&&(b.style.width=`${w}px`,b.style.height=`${x}px`),this.setTransform(),!0!==e&&this.emit("refresh"),this.ignoreBounds||(t(this.targetScale)<t(this.minScale)?this.zoomTo(this.minScale,{friction:0}):this.targetScale>this.maxScale?this.zoomTo(this.maxScale,{friction:0}):this.state===m.Init||this.checkBounds().inBounds||this.requestTick()),this.updateControls()}calculateBounds(){const{contentWidth:e,contentHeight:i}=this.calculateContentDim(this.target),{targetScale:n,lockedAxis:s}=this,{fitWidth:o,fitHeight:a}=this.contentRect;let r=0,l=0,c=0,h=0;const d=this.option("infinite");if(!0===d||s&&d===s)r=-1/0,c=1/0,l=-1/0,h=1/0;else{let{containerRect:s,contentRect:d}=this,u=t(o*n,T),f=t(a*n,T),{innerWidth:p,innerHeight:g}=s;if(s.width===u&&(p=s.width),s.width===f&&(g=s.height),e>p){c=.5*(e-p),r=-1*c;let t=.5*(d.right-d.left);r+=t,c+=t}if(o>p&&e<p&&(r-=.5*(o-p),c-=.5*(o-p)),i>g){h=.5*(i-g),l=-1*h;let t=.5*(d.bottom-d.top);l+=t,h+=t}a>g&&i<g&&(r-=.5*(a-g),c-=.5*(a-g))}return{x:{min:r,max:c},y:{min:l,max:h}}}getBounds(){const t=this.option("bounds");return"auto"!==t?t:this.calculateBounds()}updateControls(){const e=this,i=e.container,{panMode:n,contentRect:s,fullScale:a,targetScale:r,coverScale:l,maxScale:c,minScale:h}=e;let d={toggleMax:r-h<.5*(c-h)?c:h,toggleCover:r-h<.5*(l-h)?l:h,toggleZoom:r-h<.5*(a-h)?a:h}[e.option("click")||""]||h,u=e.canZoomIn(),f=e.canZoomOut(),p=n===O&&!!this.option("touch"),g=f&&p;if(p&&(t(r)<t(h)&&!this.panOnlyZoomed&&(g=!0),(t(s.width,1)>t(s.fitWidth,1)||t(s.height,1)>t(s.fitHeight,1))&&(g=!0)),t(s.width*r,1)<t(s.fitWidth,1)&&(g=!1),n===M&&(g=!1),o(i,this.cn("isDraggable"),g),!this.option("zoom"))return;let m=u&&t(d)>t(r),b=!m&&!g&&f&&t(d)<t(r);o(i,this.cn("canZoomIn"),m),o(i,this.cn("canZoomOut"),b);for(const t of i.querySelectorAll('[data-panzoom-action="zoomIn"]'))u?(t.removeAttribute("disabled"),t.removeAttribute("tabindex")):(t.setAttribute("disabled",""),t.setAttribute("tabindex","-1"));for(const t of i.querySelectorAll('[data-panzoom-action="zoomOut"]'))f?(t.removeAttribute("disabled"),t.removeAttribute("tabindex")):(t.setAttribute("disabled",""),t.setAttribute("tabindex","-1"));for(const t of i.querySelectorAll('[data-panzoom-action="toggleZoom"],[data-panzoom-action="iterateZoom"]')){u||f?(t.removeAttribute("disabled"),t.removeAttribute("tabindex")):(t.setAttribute("disabled",""),t.setAttribute("tabindex","-1"));const e=t.querySelector("g");e&&(e.style.display=u?"":"none")}}panTo({x:t=this.target.e,y:e=this.target.f,scale:i=this.targetScale,friction:n=this.option("friction"),angle:s=0,originX:o=0,originY:a=0,flipX:r=!1,flipY:l=!1,ignoreBounds:c=!1}){this.state!==m.Destroy&&this.applyChange({panX:t-this.target.e,panY:e-this.target.f,scale:i/this.targetScale,angle:s,originX:o,originY:a,friction:n,flipX:r,flipY:l,ignoreBounds:c})}applyChange({panX:e=0,panY:i=0,scale:n=1,angle:s=0,originX:o=-this.current.e,originY:a=-this.current.f,friction:r=this.option("friction"),flipX:l=!1,flipY:c=!1,ignoreBounds:h=!1,bounce:d=this.option("bounce")}){const u=this.state;if(u===m.Destroy)return;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.friction=r||0,this.ignoreBounds=h;const{current:f}=this,p=f.e,g=f.f,v=this.getMatrix(this.target);let y=(new DOMMatrix).translate(p,g).translate(o,a).translate(e,i);if(this.option("zoom")){if(!h){const t=this.targetScale,e=this.minScale,i=this.maxScale;t*n<e&&(n=e/t),t*n>i&&(n=i/t)}y=y.scale(n)}y=y.translate(-o,-a).translate(-p,-g).multiply(v),s&&(y=y.rotate(s)),l&&(y=y.scale(-1,1)),c&&(y=y.scale(1,-1));for(const e of b)"e"!==e&&"f"!==e&&(y[e]>this.minScale+1e-5||y[e]<this.minScale-1e-5)?this.target[e]=y[e]:this.target[e]=t(y[e],T);(this.targetScale<this.scale||Math.abs(n-1)>.1||this.panMode===M||!1===d)&&!h&&this.clampTargetBounds(),u===m.Init?this.animate():this.isResting||(this.state=m.Panning,this.requestTick())}stop(t=!1){if(this.state===m.Init||this.state===m.Destroy)return;const e=this.isTicking;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.isBouncingX=!1,this.isBouncingY=!1;for(const e of b)this.velocity[e]=0,"current"===t?this.current[e]=this.target[e]:"target"===t&&(this.target[e]=this.current[e]);this.setTransform(),E(this.container,"is-scaling"),E(this.container,"is-animating"),this.isTicking=!1,this.state=m.Ready,e&&(this.emit("endAnimation"),this.updateControls())}requestTick(){this.isTicking||(this.emit("startAnimation"),this.updateControls(),S(this.container,"is-animating"),this.isScaling&&S(this.container,"is-scaling")),this.isTicking=!0,this.rAF||(this.rAF=requestAnimationFrame((()=>this.animate())))}panWithMouse(e,i=this.option("mouseMoveFriction")){if(this.pmme=e,this.panMode!==M||!e)return;if(t(this.targetScale)<=t(this.minScale))return;this.emit("mouseMove",e);const{container:n,containerRect:s,contentRect:o}=this,a=s.width,r=s.height,l=n.getBoundingClientRect(),c=(e.clientX||0)-l.left,h=(e.clientY||0)-l.top;let{contentWidth:d,contentHeight:u}=this.calculateContentDim(this.target);const f=this.option("mouseMoveFactor");f>1&&(d!==a&&(d*=f),u!==r&&(u*=f));let p=.5*(d-a)-c/a*100/100*(d-a);p+=.5*(o.right-o.left);let g=.5*(u-r)-h/r*100/100*(u-r);g+=.5*(o.bottom-o.top),this.applyChange({panX:p-this.target.e,panY:g-this.target.f,friction:i})}zoomWithWheel(e){if(this.state===m.Destroy||this.state===m.Init)return;const i=Date.now();if(i-this.pwt<45)return void e.preventDefault();this.pwt=i;var n=[-e.deltaX||0,-e.deltaY||0,-e.detail||0].reduce((function(t,e){return Math.abs(e)>Math.abs(t)?e:t}));const s=Math.max(-1,Math.min(1,n)),{targetScale:o,maxScale:a,minScale:r}=this;let l=o*(100+45*s)/100;t(l)<t(r)&&t(o)<=t(r)?(this.cwd+=Math.abs(s),l=r):t(l)>t(a)&&t(o)>=t(a)?(this.cwd+=Math.abs(s),l=a):(this.cwd=0,l=Math.max(Math.min(l,a),r)),this.cwd>this.option("wheelLimit")||(e.preventDefault(),t(l)!==t(o)&&this.zoomTo(l,{event:e}))}canZoomIn(){return this.option("zoom")&&(t(this.contentRect.width,1)<t(this.contentRect.fitWidth,1)||t(this.targetScale)<t(this.maxScale))}canZoomOut(){return this.option("zoom")&&t(this.targetScale)>t(this.minScale)}zoomIn(t=1.25,e){this.zoomTo(this.targetScale*t,e)}zoomOut(t=.8,e){this.zoomTo(this.targetScale*t,e)}zoomToFit(t){this.zoomTo("fit",t)}zoomToCover(t){this.zoomTo("cover",t)}zoomToFull(t){this.zoomTo("full",t)}zoomToMax(t){this.zoomTo("max",t)}toggleZoom(t){this.zoomTo(this.targetScale-this.minScale<.5*(this.fullScale-this.minScale)?"full":"fit",t)}toggleMax(t){this.zoomTo(this.targetScale-this.minScale<.5*(this.maxScale-this.minScale)?"max":"fit",t)}toggleCover(t){this.zoomTo(this.targetScale-this.minScale<.5*(this.coverScale-this.minScale)?"cover":"fit",t)}iterateZoom(t){this.zoomTo("next",t)}zoomTo(t=1,{friction:e="auto",originX:i="auto",originY:n="auto",event:s}={}){if(this.isContentLoading||this.state===m.Destroy)return;const{targetScale:o}=this;this.stop();let a=1;if(this.panMode===M&&(s=this.pmme||s),s||"auto"===i||"auto"===n){const t=this.content.getBoundingClientRect(),e=this.container.getBoundingClientRect(),o=s?s.clientX:e.left+.5*e.width,a=s?s.clientY:e.top+.5*e.height;i=o-t.left-.5*t.width,n=a-t.top-.5*t.height}const r=this.fullScale,l=this.maxScale,c=this.coverScale;if("number"==typeof t)a=t/o||1;else if("full"===t)a=r/o||1;else if("cover"===t)a=c/o||1;else if("max"===t)a=l/o||1;else if("fit"===t)a=1/o||1;else if("next"===t){let t=[1,r,l].sort(((t,e)=>t-e)),e=t.findIndex((t=>t>o+1e-5));a=t[e]/o||1/o}e="auto"===e?a>1?.15:.25:e,this.applyChange({scale:a,originX:i,originY:n,friction:e}),s&&this.panMode===M&&this.panWithMouse(s,e)}rotateCCW(){this.applyChange({angle:-90})}rotateCW(){this.applyChange({angle:90})}flipX(){this.applyChange({flipX:!0})}flipY(){this.applyChange({flipY:!0})}fitX(){this.stop("target");const{containerRect:t,contentRect:e,target:i}=this;this.applyChange({panX:.5*t.width-(e.left+.5*e.fitWidth)-i.e,panY:.5*t.height-(e.top+.5*e.fitHeight)-i.f,scale:t.width/e.fitWidth/this.targetScale,originX:0,originY:0,ignoreBounds:!0})}fitY(){this.stop("target");const{containerRect:t,contentRect:e,target:i}=this;this.applyChange({panX:.5*t.width-(e.left+.5*e.fitWidth)-i.e,panY:.5*t.innerHeight-(e.top+.5*e.fitHeight)-i.f,scale:t.height/e.fitHeight/this.targetScale,originX:0,originY:0,ignoreBounds:!0})}toggleFS(){const{container:t}=this,e=this.cn("inFullscreen"),i=this.cn("htmlHasFullscreen");t.classList.toggle(e);const n=t.classList.contains(e);n?(document.documentElement.classList.add(i),document.addEventListener("keydown",this.onKeydown,!0)):(document.documentElement.classList.remove(i),document.removeEventListener("keydown",this.onKeydown,!0)),this.updateMetrics(),this.emit(n?"enterFS":"exitFS")}getMatrix(t=this.current){const{a:e,b:i,c:n,d:s,e:o,f:a}=t;return new DOMMatrix([e,i,n,s,o,a])}reset(t){if(this.state!==m.Init&&this.state!==m.Destroy){this.stop("current");for(const t of b)this.target[t]=P[t];this.target.a=this.minScale,this.target.d=this.minScale,this.clampTargetBounds(),this.isResting||(this.friction=void 0===t?this.option("friction"):t,this.state=m.Panning,this.requestTick())}}destroy(){this.stop(),this.state=m.Destroy,this.detachEvents(),this.detachObserver();const{container:t,content:e}=this,i=this.option("classes")||{};for(const e of Object.values(i))t.classList.remove(e+"");e&&(e.removeEventListener("load",this.onLoad),e.removeEventListener("error",this.onError)),this.detachPlugins()}}Object.defineProperty(R,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:y}),Object.defineProperty(R,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:{}});const k=function(t,e){let i=!0;return(...n)=>{i&&(i=!1,t(...n),setTimeout((()=>{i=!0}),e))}},I=(t,e)=>{let i=[];return t.childNodes.forEach((t=>{t.nodeType!==Node.ELEMENT_NODE||e&&!t.matches(e)||i.push(t)})),i},D={viewport:null,track:null,enabled:!0,slides:[],axis:"x",transition:"fade",preload:1,slidesPerPage:"auto",initialPage:0,friction:.12,Panzoom:{decelFriction:.12},center:!0,infinite:!0,fill:!0,dragFree:!1,adaptiveHeight:!1,direction:"ltr",classes:{container:"f-carousel",viewport:"f-carousel__viewport",track:"f-carousel__track",slide:"f-carousel__slide",isLTR:"is-ltr",isRTL:"is-rtl",isHorizontal:"is-horizontal",isVertical:"is-vertical",inTransition:"in-transition",isSelected:"is-selected"},l10n:{NEXT:"Next slide",PREV:"Previous slide",GOTO:"Go to slide #%d"}};var F;!function(t){t[t.Init=0]="Init",t[t.Ready=1]="Ready",t[t.Destroy=2]="Destroy"}(F||(F={}));const j=t=>{if("string"==typeof t||t instanceof HTMLElement)t={html:t};else{const e=t.thumb;void 0!==e&&("string"==typeof e&&(t.thumbSrc=e),e instanceof HTMLImageElement&&(t.thumbEl=e,t.thumbElSrc=e.src,t.thumbSrc=e.src),delete t.thumb)}return Object.assign({html:"",el:null,isDom:!1,class:"",customClass:"",index:-1,dim:0,gap:0,pos:0,transition:!1},t)},H=(t={})=>Object.assign({index:-1,slides:[],dim:0,pos:-1},t);class B extends p{constructor(t,e){super(e),Object.defineProperty(this,"instance",{enumerable:!0,configurable:!0,writable:!0,value:t})}attach(){}detach(){}}const N={classes:{list:"f-carousel__dots",isDynamic:"is-dynamic",hasDots:"has-dots",dot:"f-carousel__dot",isBeforePrev:"is-before-prev",isPrev:"is-prev",isCurrent:"is-current",isNext:"is-next",isAfterNext:"is-after-next"},dotTpl:'<button type="button" data-carousel-page="%i" aria-label="{{GOTO}}"><span class="f-carousel__dot" aria-hidden="true"></span></button>',dynamicFrom:11,maxCount:1/0,minCount:2};class _ extends B{constructor(){super(...arguments),Object.defineProperty(this,"isDynamic",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"list",{enumerable:!0,configurable:!0,writable:!0,value:null})}onRefresh(){this.refresh()}build(){let t=this.list;if(!t){t=document.createElement("ul"),S(t,this.cn("list")),t.setAttribute("role","tablist");const e=this.instance.container;e.appendChild(t),S(e,this.cn("hasDots")),this.list=t}return t}refresh(){var t;const e=this.instance.pages.length,i=Math.min(2,this.option("minCount")),n=Math.max(2e3,this.option("maxCount")),s=this.option("dynamicFrom");if(e<i||e>n)return void this.cleanup();const a="number"==typeof s&&e>5&&e>=s,r=!this.list||this.isDynamic!==a||this.list.children.length!==e;r&&this.cleanup();const l=this.build();if(o(l,this.cn("isDynamic"),!!a),r)for(let t=0;t<e;t++)l.append(this.createItem(t));let c,h=0;for(const e of[...l.children]){const i=h===this.instance.page;i&&(c=e),o(e,this.cn("isCurrent"),i),null===(t=e.children[0])||void 0===t||t.setAttribute("aria-selected",i?"true":"false");for(const t of["isBeforePrev","isPrev","isNext","isAfterNext"])E(e,this.cn(t));h++}if(c=c||l.firstChild,a&&c){const t=c.previousElementSibling,e=t&&t.previousElementSibling;S(t,this.cn("isPrev")),S(e,this.cn("isBeforePrev"));const i=c.nextElementSibling,n=i&&i.nextElementSibling;S(i,this.cn("isNext")),S(n,this.cn("isAfterNext"))}this.isDynamic=a}createItem(t=0){var e;const i=document.createElement("li");i.setAttribute("role","presentation");const s=n(this.instance.localize(this.option("dotTpl"),[["%d",t+1]]).replace(/\%i/g,t+""));return i.appendChild(s),null===(e=i.children[0])||void 0===e||e.setAttribute("role","tab"),i}cleanup(){this.list&&(this.list.remove(),this.list=null),this.isDynamic=!1,E(this.instance.container,this.cn("hasDots"))}attach(){this.instance.on(["refresh","change"],this.onRefresh)}detach(){this.instance.off(["refresh","change"],this.onRefresh),this.cleanup()}}Object.defineProperty(_,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:N});const $="disabled",W="next",X="prev";class q extends B{constructor(){super(...arguments),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"prev",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"next",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"isDom",{enumerable:!0,configurable:!0,writable:!0,value:!1})}onRefresh(){const t=this.instance,e=t.pages.length,i=t.page;if(e<2)return void this.cleanup();this.build();let n=this.prev,s=this.next;n&&s&&(n.removeAttribute($),s.removeAttribute($),t.isInfinite||(i<=0&&n.setAttribute($,""),i>=e-1&&s.setAttribute($,"")))}addBtn(t){var e;const i=this.instance,n=document.createElement("button");n.setAttribute("tabindex","0"),n.setAttribute("title",i.localize(`{{${t.toUpperCase()}}}`)),S(n,this.cn("button")+" "+this.cn(t===W?"isNext":"isPrev"));const s=i.isRTL?t===W?X:W:t;var o;return n.innerHTML=i.localize(this.option(`${s}Tpl`)),n.dataset[`carousel${o=t,o?o.match("^[a-z]")?o.charAt(0).toUpperCase()+o.substring(1):o:""}`]="true",null===(e=this.container)||void 0===e||e.appendChild(n),n}build(){const t=this.instance.container,e=this.cn("container");let{container:i,prev:n,next:s}=this;i||(i=t.querySelector("."+e),this.isDom=!!i),i||(i=document.createElement("div"),S(i,e),t.appendChild(i)),this.container=i,s||(s=i.querySelector("[data-carousel-next]")),s||(s=this.addBtn(W)),this.next=s,n||(n=i.querySelector("[data-carousel-prev]")),n||(n=this.addBtn(X)),this.prev=n}cleanup(){this.isDom||(this.prev&&this.prev.remove(),this.next&&this.next.remove(),this.container&&this.container.remove()),this.prev=null,this.next=null,this.container=null,this.isDom=!1}attach(){this.instance.on(["refresh","change"],this.onRefresh)}detach(){this.instance.off(["refresh","change"],this.onRefresh),this.cleanup()}}Object.defineProperty(q,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{classes:{container:"f-carousel__nav",button:"f-button",isNext:"is-next",isPrev:"is-prev"},nextTpl:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M9 3l9 9-9 9"/></svg>',prevTpl:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M15 3l-9 9 9 9"/></svg>'}});class Y extends B{constructor(){super(...arguments),Object.defineProperty(this,"selectedIndex",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"target",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"nav",{enumerable:!0,configurable:!0,writable:!0,value:null})}addAsTargetFor(t){this.target=this.instance,this.nav=t,this.attachEvents()}addAsNavFor(t){this.nav=this.instance,this.target=t,this.attachEvents()}attachEvents(){const{nav:t,target:e}=this;t&&e&&(t.options.initialSlide=e.options.initialPage,t.state===F.Ready?this.onNavReady(t):t.on("ready",this.onNavReady),e.state===F.Ready?this.onTargetReady(e):e.on("ready",this.onTargetReady))}onNavReady(t){t.on("createSlide",this.onNavCreateSlide),t.on("Panzoom.click",this.onNavClick),t.on("Panzoom.touchEnd",this.onNavTouch),this.onTargetChange()}onTargetReady(t){t.on("change",this.onTargetChange),t.on("Panzoom.refresh",this.onTargetChange),this.onTargetChange()}onNavClick(t,e,i){this.onNavTouch(t,t.panzoom,i)}onNavTouch(t,e,i){var n,s;if(Math.abs(e.dragOffset.x)>3||Math.abs(e.dragOffset.y)>3)return;const o=i.target,{nav:a,target:r}=this;if(!a||!r||!o)return;const l=o.closest("[data-index]");if(i.stopPropagation(),i.preventDefault(),!l)return;const c=parseInt(l.dataset.index||"",10)||0,h=r.getPageForSlide(c),d=a.getPageForSlide(c);a.slideTo(d),r.slideTo(h,{friction:(null===(s=null===(n=this.nav)||void 0===n?void 0:n.plugins)||void 0===s?void 0:s.Sync.option("friction"))||0}),this.markSelectedSlide(c)}onNavCreateSlide(t,e){e.index===this.selectedIndex&&this.markSelectedSlide(e.index)}onTargetChange(){var t,e;const{target:i,nav:n}=this;if(!i||!n)return;if(n.state!==F.Ready||i.state!==F.Ready)return;const s=null===(e=null===(t=i.pages[i.page])||void 0===t?void 0:t.slides[0])||void 0===e?void 0:e.index,o=n.getPageForSlide(s);this.markSelectedSlide(s),n.slideTo(o,null===n.prevPage&&null===i.prevPage?{friction:0}:void 0)}markSelectedSlide(t){const e=this.nav;e&&e.state===F.Ready&&(this.selectedIndex=t,[...e.slides].map((e=>{e.el&&e.el.classList[e.index===t?"add":"remove"]("is-nav-selected")})))}attach(){const t=this;let e=t.options.target,i=t.options.nav;e?t.addAsNavFor(e):i&&t.addAsTargetFor(i)}detach(){const t=this,e=t.nav,i=t.target;e&&(e.off("ready",t.onNavReady),e.off("createSlide",t.onNavCreateSlide),e.off("Panzoom.click",t.onNavClick),e.off("Panzoom.touchEnd",t.onNavTouch)),t.nav=null,i&&(i.off("ready",t.onTargetReady),i.off("refresh",t.onTargetChange),i.off("change",t.onTargetChange)),t.target=null}}Object.defineProperty(Y,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{friction:.35}});const V={Navigation:q,Dots:_,Sync:Y},Z="animationend",U="isSelected",G="slide";class K extends g{get axis(){return this.isHorizontal?"e":"f"}get isEnabled(){return this.state===F.Ready}get isInfinite(){let t=!1;const{contentDim:e,viewportDim:i,pages:n,slides:s}=this,o=s[0];return n.length>=2&&o&&e+o.dim>=i&&(t=this.option("infinite")),t}get isRTL(){return"rtl"===this.option("direction")}get isHorizontal(){return"x"===this.option("axis")}constructor(t,e={},i={}){if(super(),Object.defineProperty(this,"bp",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"lp",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"userOptions",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"userPlugins",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:F.Init}),Object.defineProperty(this,"page",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"prevPage",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"viewport",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"track",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"slides",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"pages",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"panzoom",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"inTransition",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"contentDim",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"viewportDim",{enumerable:!0,configurable:!0,writable:!0,value:0}),"string"==typeof t&&(t=document.querySelector(t)),!t||!x(t))throw new Error("No Element found");this.container=t,this.slideNext=k(this.slideNext.bind(this),150),this.slidePrev=k(this.slidePrev.bind(this),150),this.userOptions=e,this.userPlugins=i,queueMicrotask((()=>{this.processOptions()}))}processOptions(){var t,e;const i=u({},K.defaults,this.userOptions);let n="";const s=i.breakpoints;if(s&&d(s))for(const[t,e]of Object.entries(s))window.matchMedia(t).matches&&d(e)&&(n+=t,u(i,e));n===this.bp&&this.state!==F.Init||(this.bp=n,this.state===F.Ready&&(i.initialSlide=(null===(e=null===(t=this.pages[this.page])||void 0===t?void 0:t.slides[0])||void 0===e?void 0:e.index)||0),this.state!==F.Init&&this.destroy(),super.setOptions(i),!1===this.option("enabled")?this.attachEvents():setTimeout((()=>{this.init()}),0))}init(){this.state=F.Init,this.emit("init"),this.attachPlugins(Object.assign(Object.assign({},K.Plugins),this.userPlugins)),this.emit("attachPlugins"),this.initLayout(),this.initSlides(),this.updateMetrics(),this.setInitialPosition(),this.initPanzoom(),this.attachEvents(),this.state=F.Ready,this.emit("ready")}initLayout(){const{container:t}=this,e=this.option("classes");S(t,this.cn("container")),o(t,e.isLTR,!this.isRTL),o(t,e.isRTL,this.isRTL),o(t,e.isVertical,!this.isHorizontal),o(t,e.isHorizontal,this.isHorizontal);let i=this.option("viewport")||t.querySelector(`.${e.viewport}`);i||(i=document.createElement("div"),S(i,e.viewport),i.append(...I(t,`.${e.slide}`)),t.prepend(i)),i.addEventListener("scroll",this.onScroll);let n=this.option("track")||t.querySelector(`.${e.track}`);n||(n=document.createElement("div"),S(n,e.track),n.append(...Array.from(i.childNodes))),n.setAttribute("aria-live","polite"),i.contains(n)||i.prepend(n),this.viewport=i,this.track=n,this.emit("initLayout")}initSlides(){const{track:t}=this;if(!t)return;const e=[...this.slides],i=[];[...I(t,`.${this.cn(G)}`)].forEach((t=>{if(x(t)){const e=j({el:t,isDom:!0,index:this.slides.length});i.push(e)}}));for(let t of[...this.option("slides",[])||[],...e]){const e=j(t);i.push(e)}this.slides=i;for(let t=0;t<this.slides.length;t++)this.slides[t].index=t;for(const t of i)this.emit("beforeInitSlide",t,t.index),this.emit("initSlide",t,t.index);this.emit("initSlides")}setInitialPage(){const t=this.option("initialSlide");this.page="number"==typeof t?this.getPageForSlide(t):parseInt(this.option("initialPage",0)+"",10)||0}setInitialPosition(){const{track:t,pages:e,isHorizontal:i}=this;if(!t||!e.length)return;let n=this.page;e[n]||(this.page=n=0);const s=(e[n].pos||0)*(this.isRTL&&i?1:-1),o=i?`${s}px`:"0",a=i?"0":`${s}px`;t.style.transform=`translate3d(${o}, ${a}, 0) scale(1)`,this.option("adaptiveHeight")&&this.setViewportHeight()}initPanzoom(){this.panzoom&&(this.panzoom.destroy(),this.panzoom=null);const t=this.option("Panzoom")||{};this.panzoom=new R(this.viewport,u({},{content:this.track,zoom:!1,panOnlyZoomed:!1,lockAxis:this.isHorizontal?"x":"y",infinite:this.isInfinite,click:!1,dblClick:!1,touch:t=>!(this.pages.length<2&&!t.options.infinite),bounds:()=>this.getBounds(),maxVelocity:t=>Math.abs(t.target[this.axis]-t.current[this.axis])<2*this.viewportDim?100:0},t)),this.panzoom.on("*",((t,e,...i)=>{this.emit(`Panzoom.${e}`,t,...i)})),this.panzoom.on("decel",this.onDecel),this.panzoom.on("refresh",this.onRefresh),this.panzoom.on("beforeTransform",this.onBeforeTransform),this.panzoom.on("endAnimation",this.onEndAnimation)}attachEvents(){const t=this.container;t&&(t.addEventListener("click",this.onClick,{passive:!1,capture:!1}),t.addEventListener("slideTo",this.onSlideTo)),window.addEventListener("resize",this.onResize)}createPages(){let t=[];const{contentDim:e,viewportDim:i}=this;let n=this.option("slidesPerPage");n=("auto"===n||e<=i)&&!1!==this.option("fill")?1/0:parseFloat(n+"");let s=0,o=0,a=0;for(const e of this.slides)(!t.length||o+e.dim-i>.05||a>=n)&&(t.push(H()),s=t.length-1,o=0,a=0),t[s].slides.push(e),o+=e.dim+e.gap,a++;return t}processPages(){const e=this.pages,{contentDim:i,viewportDim:n,isInfinite:s}=this,o=this.option("center"),a=this.option("fill"),r=a&&o&&i>n&&!s;if(e.forEach(((t,e)=>{var s;t.index=e,t.pos=(null===(s=t.slides[0])||void 0===s?void 0:s.pos)||0,t.dim=0;for(const[e,i]of t.slides.entries())t.dim+=i.dim,e<t.slides.length-1&&(t.dim+=i.gap);r&&t.pos+.5*t.dim<.5*n?t.pos=0:r&&t.pos+.5*t.dim>=i-.5*n?t.pos=i-n:o&&(t.pos+=-.5*(n-t.dim))})),e.forEach(((e,o)=>{a&&!s&&i>n&&(e.pos=Math.max(e.pos,0),e.pos=Math.min(e.pos,i-n)),e.pos=t(e.pos,1e3),e.dim=t(e.dim,1e3),Math.abs(e.pos)<=.1&&(e.pos=0)})),s)return e;const l=[];let c;return e.forEach((t=>{const e=Object.assign({},t);c&&e.pos===c.pos?(c.dim+=e.dim,c.slides=[...c.slides,...e.slides]):(e.index=l.length,c=e,l.push(e))})),l}getPageFromIndex(t=0){const e=this.pages.length;let i;return t=parseInt((t||0).toString())||0,i=this.isInfinite?(t%e+e)%e:Math.max(Math.min(t,e-1),0),i}getSlideMetrics(e){var i,n;const s=this.isHorizontal?"width":"height";let o=0,a=0,r=e.el;const l=r&&!r.parentNode;if(r?o=parseFloat(r.dataset[s]||"")||0:(r=document.createElement("div"),r.style.visibility="hidden",(this.track||document.body).prepend(r)),S(r,this.cn(G)+" "+e.class+" "+e.customClass),o)r.style[s]=`${o}px`,r.style["width"===s?"height":"width"]="";else{l&&(this.track||document.body).prepend(r);const t=Math.max(1,(null===(i=window.visualViewport)||void 0===i?void 0:i.scale)||1);o=r.getBoundingClientRect()[s]*t}const c=getComputedStyle(r);return"content-box"===c.boxSizing&&(this.isHorizontal?(o+=parseFloat(c.paddingLeft)||0,o+=parseFloat(c.paddingRight)||0):(o+=parseFloat(c.paddingTop)||0,o+=parseFloat(c.paddingBottom)||0)),a=parseFloat(c[this.isHorizontal?"marginRight":"marginBottom"])||0,l?null===(n=r.parentElement)||void 0===n||n.removeChild(r):e.el||r.remove(),{dim:t(o,1e3),gap:t(a,1e3)}}getBounds(){const{isInfinite:t,isRTL:e,isHorizontal:i,pages:n}=this;let s={min:0,max:0};if(t)s={min:-1/0,max:1/0};else if(n.length){const t=n[0].pos,o=n[n.length-1].pos;s=e&&i?{min:t,max:o}:{min:-1*o,max:-1*t}}return{x:i?s:{min:0,max:0},y:i?{min:0,max:0}:s}}repositionSlides(){let e,{isHorizontal:i,isRTL:n,isInfinite:s,viewport:o,viewportDim:a,contentDim:r,page:l,pages:c,slides:h,panzoom:d}=this,u=0,f=0,p=0,g=0;d?g=-1*d.current[this.axis]:c[l]&&(g=c[l].pos||0),e=i?n?"right":"left":"top",n&&i&&(g*=-1);for(const i of h){const n=i.el;n?("top"===e?(n.style.right="",n.style.left=""):n.style.top="",i.index!==u?n.style[e]=0===f?"":`${t(f,1e3)}px`:n.style[e]="",p+=i.dim+i.gap,u++):f+=i.dim+i.gap}if(s&&p&&o){let n=getComputedStyle(o),s="padding",l=i?"Right":"Bottom",c=parseFloat(n[s+(i?"Left":"Top")]);g-=c,a+=c,a+=parseFloat(n[s+l]);for(const i of h)i.el&&(t(i.pos)<t(a)&&t(i.pos+i.dim+i.gap)<t(g)&&t(g)>t(r-a)&&(i.el.style[e]=`${t(f+p,1e3)}px`),t(i.pos+i.gap)>=t(r-a)&&t(i.pos)>t(g+a)&&t(g)<t(a)&&(i.el.style[e]=`-${t(p,1e3)}px`))}let m,b,v=[...this.inTransition];if(v.length>1&&(m=c[v[0]],b=c[v[1]]),m&&b){let i=0;for(const n of h)n.el?this.inTransition.has(n.index)&&m.slides.indexOf(n)<0&&(n.el.style[e]=`${t(i+(m.pos-b.pos),1e3)}px`):i+=n.dim+n.gap}}createSlideEl(t){const{track:e,slides:i}=this;if(!e||!t)return;if(t.el&&t.el.parentNode)return;const n=t.el||document.createElement("div");S(n,this.cn(G)),S(n,t.class),S(n,t.customClass);const s=t.html;s&&(s instanceof HTMLElement?n.appendChild(s):n.innerHTML=t.html+"");const o=[];i.forEach(((t,e)=>{t.el&&o.push(e)}));const a=t.index;let r=null;if(o.length){r=i[o.reduce(((t,e)=>Math.abs(e-a)<Math.abs(t-a)?e:t))]}const l=r&&r.el&&r.el.parentNode?r.index<t.index?r.el.nextSibling:r.el:null;e.insertBefore(n,e.contains(l)?l:null),t.el=n,this.emit("createSlide",t)}removeSlideEl(t,e=!1){const i=t.el;if(!i||!i.parentNode)return;const n=this.cn(U);if(i.classList.contains(n)&&(E(i,n),this.emit("unselectSlide",t)),t.isDom&&!e)return i.removeAttribute("aria-hidden"),i.removeAttribute("data-index"),void(i.style.left="");this.emit("removeSlide",t);const s=new CustomEvent(Z);i.dispatchEvent(s),t.el&&(t.el.remove(),t.el=null)}transitionTo(t=0,e=this.option("transition")){var i,n,s,o;if(!e)return!1;const a=this.page,{pages:r,panzoom:l}=this;t=parseInt((t||0).toString())||0;const c=this.getPageFromIndex(t);if(!l||!r[c]||r.length<2||Math.abs(((null===(n=null===(i=r[a])||void 0===i?void 0:i.slides[0])||void 0===n?void 0:n.dim)||0)-this.viewportDim)>1)return!1;const h=t>a?1:-1,d=r[c].pos*(this.isRTL?1:-1);if(a===c&&Math.abs(d-l.target[this.axis])<1)return!1;this.clearTransitions();const u=l.isResting;S(this.container,this.cn("inTransition"));const f=(null===(s=r[a])||void 0===s?void 0:s.slides[0])||null,p=(null===(o=r[c])||void 0===o?void 0:o.slides[0])||null;this.inTransition.add(p.index),this.createSlideEl(p);let g=f.el,m=p.el;u||e===G||(e="fadeFast",g=null);const b=this.isRTL?"next":"prev",v=this.isRTL?"prev":"next";return g&&(this.inTransition.add(f.index),f.transition=e,g.addEventListener(Z,this.onAnimationEnd),g.classList.add(`f-${e}Out`,`to-${h>0?v:b}`)),m&&(p.transition=e,m.addEventListener(Z,this.onAnimationEnd),m.classList.add(`f-${e}In`,`from-${h>0?b:v}`)),l.current[this.axis]=d,l.target[this.axis]=d,l.requestTick(),this.onChange(c),!0}manageSlideVisiblity(){const t=new Set,e=new Set,i=this.getVisibleSlides(parseFloat(this.option("preload",0)+"")||0);for(const n of this.slides)i.has(n)?t.add(n):e.add(n);for(const e of this.inTransition)t.add(this.slides[e]);for(const e of t)this.createSlideEl(e),this.lazyLoadSlide(e);for(const i of e)t.has(i)||this.removeSlideEl(i);this.markSelectedSlides(),this.repositionSlides()}markSelectedSlides(){if(!this.pages[this.page]||!this.pages[this.page].slides)return;const t="aria-hidden";let e=this.cn(U);if(e)for(const i of this.slides){const n=i.el;n&&(n.dataset.index=`${i.index}`,n.classList.contains("f-thumbs__slide")?this.getVisibleSlides(0).has(i)?n.removeAttribute(t):n.setAttribute(t,"true"):this.pages[this.page].slides.includes(i)?(n.classList.contains(e)||(S(n,e),this.emit("selectSlide",i)),n.removeAttribute(t)):(n.classList.contains(e)&&(E(n,e),this.emit("unselectSlide",i)),n.setAttribute(t,"true")))}}flipInfiniteTrack(){const t=this.panzoom;if(!t||!this.isInfinite)return;const e="x"===this.option("axis")?"e":"f",{viewportDim:i,contentDim:n}=this;let s=t.current[e],o=t.target[e]-s,a=0,r=.5*i,l=n;this.isRTL&&this.isHorizontal?(s<-r&&(a=-1,s+=l),s>l-r&&(a=1,s-=l)):(s>r&&(a=1,s-=l),s<-l+r&&(a=-1,s+=l)),a&&(t.current[e]=s,t.target[e]=s+o)}lazyLoadSlide(t){const e=this,i=t&&t.el;if(!i)return;const s=new Set,o="f-fadeIn";i.querySelectorAll("[data-lazy-srcset]").forEach((t=>{t instanceof HTMLImageElement&&s.add(t)}));let a=Array.from(i.querySelectorAll("[data-lazy-src]"));i.dataset.lazySrc&&a.push(i),a.map((t=>{t instanceof HTMLImageElement?s.add(t):x(t)&&(t.style.backgroundImage=`url('${t.dataset.lazySrc||""}')`,delete t.dataset.lazySrc)}));const r=(t,i,n)=>{n&&(n.remove(),n=null),i.complete&&(i.classList.add(o),setTimeout((()=>{i.classList.remove(o)}),350),i.style.visibility=""),this.option("adaptiveHeight")&&t.el&&this.pages[this.page].slides.indexOf(t)>-1&&(e.updateMetrics(),e.setViewportHeight()),this.emit("load",t)};for(const e of s){let i=null;e.src=e.dataset.lazySrcset||e.dataset.lazySrc||"",delete e.dataset.lazySrc,delete e.dataset.lazySrcset,e.style.visibility="hidden",e.addEventListener("error",(()=>{r(t,e,i)})),e.addEventListener("load",(()=>{r(t,e,i)})),setTimeout((()=>{e.parentNode&&t.el&&(e.complete?r(t,e,i):(i=n(w),e.parentNode.insertBefore(i,e)))}),300)}}onAnimationEnd(t){var e;const i=t.target,n=i?parseInt(i.dataset.index||"",10)||0:-1,s=this.slides[n],o=t.animationName;if(!i||!s||!o)return;const a=!!this.inTransition.has(n)&&s.transition;a&&o.substring(0,a.length+2)===`f-${a}`&&this.inTransition.delete(n),this.inTransition.size||this.clearTransitions(),n===this.page&&(null===(e=this.panzoom)||void 0===e?void 0:e.isResting)&&this.emit("settle")}onDecel(t,e=0,i=0,n=0,s=0){const{isRTL:o,isHorizontal:a,axis:r,pages:l}=this,c=l.length,h=Math.abs(Math.atan2(i,e)/(Math.PI/180));let d=0;if(d=h>45&&h<135?a?0:i:a?e:0,!c)return;const u=this.option("dragFree");let f=this.page,p=o&&a?1:-1;const g=t.target[r]*p,m=t.current[r]*p;let{pageIndex:b}=this.getPageFromPosition(g),{pageIndex:v}=this.getPageFromPosition(m);u?this.onChange(b):(Math.abs(d)>5?(l[f].dim<document.documentElement["client"+(this.isHorizontal?"Width":"Height")]-1&&(f=v),f=o&&a?d<0?f-1:f+1:d<0?f+1:f-1):f=0===n&&0===s?f:v,this.slideTo(f,{transition:!1,friction:t.option("decelFriction")}))}onClick(t){const e=t.target,i=e&&x(e)?e.dataset:null;let n,s;i&&(void 0!==i.carouselPage?(s="slideTo",n=i.carouselPage):void 0!==i.carouselNext?s="slideNext":void 0!==i.carouselPrev&&(s="slidePrev")),s?(t.preventDefault(),t.stopPropagation(),e&&!e.hasAttribute("disabled")&&this[s](n)):this.emit("click",t)}onSlideTo(t){const e=t.detail||0;this.slideTo(this.getPageForSlide(e),{friction:0})}onChange(t,e=0){const i=this.page;this.prevPage=i,this.page=t,this.option("adaptiveHeight")&&this.setViewportHeight(),t!==i&&(this.markSelectedSlides(),this.emit("change",t,i,e))}onRefresh(){let t=this.contentDim,e=this.viewportDim;this.updateMetrics(),this.contentDim===t&&this.viewportDim===e||this.slideTo(this.page,{friction:0,transition:!1})}onScroll(){var t;null===(t=this.viewport)||void 0===t||t.scroll(0,0)}onResize(){this.option("breakpoints")&&this.processOptions()}onBeforeTransform(t){this.lp!==t.current[this.axis]&&(this.flipInfiniteTrack(),this.manageSlideVisiblity()),this.lp=t.current.e}onEndAnimation(){this.inTransition.size||this.emit("settle")}reInit(t=null,e=null){this.destroy(),this.state=F.Init,this.userOptions=t||this.userOptions,this.userPlugins=e||this.userPlugins,this.processOptions()}slideTo(t=0,{friction:e=this.option("friction"),transition:i=this.option("transition")}={}){if(this.state===F.Destroy)return;t=parseInt((t||0).toString())||0;const n=this.getPageFromIndex(t),{axis:s,isHorizontal:o,isRTL:a,pages:r,panzoom:l}=this,c=r.length,h=a&&o?1:-1;if(!l||!c)return;if(this.page!==n){const e=new Event("beforeChange",{bubbles:!0,cancelable:!0});if(this.emit("beforeChange",e,t),e.defaultPrevented)return}if(this.transitionTo(t,i))return;let d=r[n].pos;if(this.isInfinite){const e=this.contentDim,i=l.target[s]*h;if(2===c)d+=e*Math.floor(parseFloat(t+"")/2);else{d=[d,d-e,d+e].reduce((function(t,e){return Math.abs(e-i)<Math.abs(t-i)?e:t}))}}d*=h,Math.abs(l.target[s]-d)<1||(l.panTo({x:o?d:0,y:o?0:d,friction:e}),this.onChange(n))}slideToClosest(t){if(this.panzoom){const{pageIndex:e}=this.getPageFromPosition(this.panzoom.current[this.isHorizontal?"e":"f"]);this.slideTo(e,t)}}slideNext(){this.slideTo(this.page+1)}slidePrev(){this.slideTo(this.page-1)}clearTransitions(){this.inTransition.clear(),E(this.container,this.cn("inTransition"));const t=["to-prev","to-next","from-prev","from-next"];for(const e of this.slides){const i=e.el;if(i){i.removeEventListener(Z,this.onAnimationEnd),i.classList.remove(...t);const n=e.transition;n&&i.classList.remove(`f-${n}Out`,`f-${n}In`)}}this.manageSlideVisiblity()}addSlide(t,e){var i,n,s,o;const a=this.panzoom,r=(null===(i=this.pages[this.page])||void 0===i?void 0:i.pos)||0,l=(null===(n=this.pages[this.page])||void 0===n?void 0:n.dim)||0,c=this.contentDim<this.viewportDim;let h=Array.isArray(e)?e:[e];const d=[];for(const t of h)d.push(j(t));this.slides.splice(t,0,...d);for(let t=0;t<this.slides.length;t++)this.slides[t].index=t;for(const t of d)this.emit("beforeInitSlide",t,t.index);if(this.page>=t&&(this.page+=d.length),this.updateMetrics(),a){const e=(null===(s=this.pages[this.page])||void 0===s?void 0:s.pos)||0,i=(null===(o=this.pages[this.page])||void 0===o?void 0:o.dim)||0,n=this.pages.length||1,h=this.isRTL?l-i:i-l,d=this.isRTL?r-e:e-r;c&&1===n?(t<=this.page&&(a.current[this.axis]-=h,a.target[this.axis]-=h),a.panTo({[this.isHorizontal?"x":"y"]:-1*e})):d&&t<=this.page&&(a.target[this.axis]-=d,a.current[this.axis]-=d,a.requestTick())}for(const t of d)this.emit("initSlide",t,t.index)}prependSlide(t){this.addSlide(0,t)}appendSlide(t){this.addSlide(this.slides.length,t)}removeSlide(t){const e=this.slides.length;t=(t%e+e)%e,this.removeSlideEl(this.slides[t],!0),this.slides.splice(t,1);for(let t=0;t<this.slides.length;t++)this.slides[t].index=t;this.updateMetrics(),this.slideTo(this.page,{friction:0,transition:!1})}updateMetrics(){const{panzoom:e,viewport:i,track:n,slides:s,isHorizontal:o,isInfinite:a}=this;if(!n)return;const r=o?"width":"height",l=o?"offsetWidth":"offsetHeight";if(i){let e=Math.max(i[l],t(i.getBoundingClientRect()[r],1e3)),n=getComputedStyle(i),s="padding",a=o?"Right":"Bottom";e-=parseFloat(n[s+(o?"Left":"Top")])+parseFloat(n[s+a]),this.viewportDim=e}let c,h=0;for(const[e,i]of s.entries()){let n=0,o=0;!i.el&&c?(n=c.dim,o=c.gap):(({dim:n,gap:o}=this.getSlideMetrics(i)),c=i),n=t(n,1e3),o=t(o,1e3),i.dim=n,i.gap=o,i.pos=h,h+=n,(a||e<s.length-1)&&(h+=o)}h=t(h,1e3),this.contentDim=h,e&&(e.contentRect[r]=h,e.contentRect["e"===this.axis?"fullWidth":"fullHeight"]=h),this.pages=this.createPages(),this.pages=this.processPages(),this.state===F.Init&&this.setInitialPage(),this.page=Math.max(0,Math.min(this.page,this.pages.length-1)),this.manageSlideVisiblity(),this.emit("refresh")}getProgress(e,i=!1,n=!1){void 0===e&&(e=this.page);const s=this,o=s.panzoom,a=s.contentDim,r=s.pages[e]||0;if(!r||!o)return e>this.page?-1:1;let l=-1*o.current.e,c=t((l-r.pos)/(1*r.dim),1e3),h=c,d=c;this.isInfinite&&!0!==n&&(h=t((l-r.pos+a)/(1*r.dim),1e3),d=t((l-r.pos-a)/(1*r.dim),1e3));let u=[c,h,d].reduce((function(t,e){return Math.abs(e)<Math.abs(t)?e:t}));return i?u:u>1?1:u<-1?-1:u}setViewportHeight(){const{page:t,pages:e,viewport:i,isHorizontal:n}=this;if(!i||!e[t])return;let s=0;n&&this.track&&(this.track.style.height="auto",e[t].slides.forEach((t=>{t.el&&(s=Math.max(s,t.el.offsetHeight))}))),i.style.height=s?`${s}px`:""}getPageForSlide(t){for(const e of this.pages)for(const i of e.slides)if(i.index===t)return e.index;return-1}getVisibleSlides(t=0){var e;const i=new Set;let{contentDim:n,viewportDim:s,pages:o,page:a}=this;n=n+(null===(e=this.slides[this.slides.length-1])||void 0===e?void 0:e.gap)||0;let r=0;r=this.panzoom&&this.panzoom.state!==m.Init&&this.panzoom.state!==m.Destroy?-1*this.panzoom.current[this.axis]:o[a]&&o[a].pos||0,this.isInfinite&&(r-=Math.floor(r/n)*n),this.isRTL&&this.isHorizontal&&(r*=-1);const l=r-s*t,c=r+s*(t+1),h=this.isInfinite?[-1,0,1]:[0];for(const t of this.slides)for(const e of h){const s=t.pos+e*n,o=s+t.dim+t.gap;s<c&&o>l&&i.add(t)}return i}getPageFromPosition(t){var e;const{viewportDim:i,contentDim:n}=this,s=this.pages.length,o=this.slides.length,a=this.slides[o-1];let r=0,l=0,c=0;const h=this.option("center");h&&(t+=.5*i),this.isInfinite||(t=Math.max((null===(e=this.slides[0])||void 0===e?void 0:e.pos)||0,Math.min(t,a.pos)));const d=n+a.gap;c=Math.floor(t/d)||0,t-=c*d;let u=a,f=this.slides.find((e=>{const i=t+(u&&!h?.5*u.dim:0);return u=e,e.pos<=i&&e.pos+e.dim+e.gap>i}));return f||(f=a),l=this.getPageForSlide(f.index),r=l+c*s,{page:r,pageIndex:l}}destroy(){if([F.Destroy].includes(this.state))return;this.state=F.Destroy;const{container:t,viewport:e,track:i,slides:n,panzoom:s}=this,o=this.option("classes");t.removeEventListener("click",this.onClick,{passive:!1,capture:!1}),t.removeEventListener("slideTo",this.onSlideTo),window.removeEventListener("resize",this.onResize),s&&(s.destroy(),this.panzoom=null),n&&n.forEach((t=>{this.removeSlideEl(t)})),this.detachPlugins(),e&&(e.removeEventListener("scroll",this.onScroll),e.offsetParent&&i&&i.offsetParent&&e.replaceWith(...i.childNodes));for(const[e,i]of Object.entries(o))"container"!==e&&i&&t.classList.remove(i);this.track=null,this.viewport=null,this.page=0,this.slides=[];const a=this.events.get("ready");this.events=new Map,a&&this.events.set("ready",a)}}Object.defineProperty(K,"Panzoom",{enumerable:!0,configurable:!0,writable:!0,value:R}),Object.defineProperty(K,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:D}),Object.defineProperty(K,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:V});const J=function(t){if(!x(t))return 0;const e=window.scrollY,i=window.innerHeight,n=e+i,s=t.getBoundingClientRect(),o=s.y+e,a=s.height,r=o+a;if(e>r||n<o)return 0;if(e<o&&n>r)return 100;if(o<e&&r>n)return 100;let l=a;o<e&&(l-=e-o),r>n&&(l-=r-n);const c=l/i*100;return Math.round(c)},Q=!("undefined"==typeof window||!window.document||!window.document.createElement);let tt;const et=["a[href]","area[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden]):not(.fancybox-focus-guard)","iframe","object","embed","video","audio","[contenteditable]",'[tabindex]:not([tabindex^="-"]):not([disabled]):not([aria-hidden])'].join(","),it=t=>{if(t&&Q){void 0===tt&&document.createElement("div").focus({get preventScroll(){return tt=!0,!1}});try{if(tt)t.focus({preventScroll:!0});else{const e=window.scrollY||document.body.scrollTop,i=window.scrollX||document.body.scrollLeft;t.focus(),document.body.scrollTo({top:e,left:i,behavior:"auto"})}}catch(t){}}},nt={dragToClose:!0,hideScrollbar:!0,Carousel:{classes:{container:"fancybox__carousel",viewport:"fancybox__viewport",track:"fancybox__track",slide:"fancybox__slide"}},contentClick:"toggleZoom",contentDblClick:!1,backdropClick:"close",animated:!0,idle:3500,showClass:"f-zoomInUp",hideClass:"f-fadeOut",commonCaption:!1,parentEl:null,startIndex:0,l10n:Object.assign(Object.assign({},v),{CLOSE:"Close",NEXT:"Next",PREV:"Previous",MODAL:"You can close this modal content with the ESC key",ERROR:"Something Went Wrong, Please Try Again Later",IMAGE_ERROR:"Image Not Found",ELEMENT_NOT_FOUND:"HTML Element Not Found",AJAX_NOT_FOUND:"Error Loading AJAX : Not Found",AJAX_FORBIDDEN:"Error Loading AJAX : Forbidden",IFRAME_ERROR:"Error Loading Page",TOGGLE_ZOOM:"Toggle zoom level",TOGGLE_THUMBS:"Toggle thumbnails",TOGGLE_SLIDESHOW:"Toggle slideshow",TOGGLE_FULLSCREEN:"Toggle full-screen mode",DOWNLOAD:"Download"}),tpl:{closeButton:'<button data-fancybox-close class="f-button is-close-btn" title="{{CLOSE}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M20 20L4 4m16 0L4 20"/></svg></button>',main:'<div class="fancybox__container" role="dialog" aria-modal="true" aria-label="{{MODAL}}" tabindex="-1">\n    <div class="fancybox__backdrop"></div>\n    <div class="fancybox__carousel"></div>\n    <div class="fancybox__footer"></div>\n  </div>'},groupAll:!1,groupAttr:"data-fancybox",defaultType:"image",defaultDisplay:"block",autoFocus:!0,trapFocus:!0,placeFocusBack:!0,closeButton:"auto",keyboard:{Escape:"close",Delete:"close",Backspace:"close",PageUp:"next",PageDown:"prev",ArrowUp:"prev",ArrowDown:"next",ArrowRight:"next",ArrowLeft:"prev"},Fullscreen:{autoStart:!1},compact:()=>window.matchMedia("(max-width: 578px), (max-height: 578px)").matches,wheel:"zoom"};var st,ot;!function(t){t[t.Init=0]="Init",t[t.Ready=1]="Ready",t[t.Closing=2]="Closing",t[t.CustomClosing=3]="CustomClosing",t[t.Destroy=4]="Destroy"}(st||(st={})),function(t){t[t.Loading=0]="Loading",t[t.Opening=1]="Opening",t[t.Ready=2]="Ready",t[t.Closing=3]="Closing"}(ot||(ot={}));const at=()=>{queueMicrotask((()=>{(()=>{const{slug:t,index:e}=rt.parseURL(),i=ce.getInstance();if(i&&!1!==i.option("Hash")){const n=i.carousel;if(t&&n){for(let e of n.slides)if(e.slug&&e.slug===t)return n.slideTo(e.index);if(t===i.option("slug"))return n.slideTo(e-1);const s=i.getSlide(),o=s&&s.triggerEl&&s.triggerEl.dataset;if(o&&o.fancybox===t)return n.slideTo(e-1)}rt.hasSilentClose=!0,i.close()}rt.startFromUrl()})()}))};class rt extends B{constructor(){super(...arguments),Object.defineProperty(this,"origHash",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"timer",{enumerable:!0,configurable:!0,writable:!0,value:null})}onChange(){const t=this.instance,e=t.carousel;this.timer&&clearTimeout(this.timer);const i=t.getSlide();if(!e||!i)return;const n=t.isOpeningSlide(i),s=new URL(document.URL).hash;let o,a=i.slug||void 0,r=i.triggerEl||void 0;o=a||this.instance.option("slug"),!o&&r&&r.dataset&&(o=r.dataset.fancybox);let l="";o&&"true"!==o&&(l="#"+o+(!a&&e.slides.length>1?"-"+(i.index+1):"")),n&&(this.origHash=s!==l?s:""),l&&s!==l&&(this.timer=setTimeout((()=>{try{t.state===st.Ready&&window.history[n?"pushState":"replaceState"]({},document.title,window.location.pathname+window.location.search+l)}catch(t){}}),300))}onClose(){if(this.timer&&clearTimeout(this.timer),!0!==rt.hasSilentClose)try{window.history.replaceState({},document.title,window.location.pathname+window.location.search+(this.origHash||""))}catch(t){}}attach(){const t=this.instance;t.on(["Carousel.ready","Carousel.change"],this.onChange),t.on("close",this.onClose)}detach(){const t=this.instance;t.off(["Carousel.ready","Carousel.change"],this.onChange),t.off("close",this.onClose)}static parseURL(){const t=window.location.hash.slice(1),e=t.split("-"),i=e[e.length-1],n=i&&/^\+?\d+$/.test(i)&&parseInt(e.pop()||"1",10)||1;return{hash:t,slug:e.join("-"),index:n}}static startFromUrl(){if(rt.hasSilentClose=!1,ce.getInstance()||!1===ce.defaults.Hash)return;const{hash:t,slug:e,index:i}=rt.parseURL();if(!e)return;let n=document.querySelector(`[data-slug="${t}"]`);if(n&&n.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})),ce.getInstance())return;const s=document.querySelectorAll(`[data-fancybox="${e}"]`);s.length&&(n=s[i-1],n&&n.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})))}static destroy(){window.removeEventListener("hashchange",at,!1)}}function lt(){window.addEventListener("hashchange",at,!1),setTimeout((()=>{rt.startFromUrl()}),500)}Object.defineProperty(rt,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(rt,"hasSilentClose",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Q&&(/complete|interactive|loaded/.test(document.readyState)?lt():document.addEventListener("DOMContentLoaded",lt));const ct="is-zooming-in";class ht extends B{onCreateSlide(t,e,i){const n=this.instance.optionFor(i,"src")||"";i.el&&"image"===i.type&&"string"==typeof n&&this.setImage(i,n)}onRemoveSlide(t,e,i){i.panzoom&&i.panzoom.destroy(),i.panzoom=void 0,i.imageEl=void 0}onChange(t,e,i,n){E(this.instance.container,ct);for(const t of e.slides){const e=t.panzoom;e&&t.index!==i&&e.reset(.35)}}onClose(){var t;const e=this.instance,i=e.container,n=e.getSlide();if(!i||!i.parentElement||!n)return;const{el:s,contentEl:o,panzoom:a,thumbElSrc:r}=n;if(!s||!r||!o||!a||a.isContentLoading||a.state===m.Init||a.state===m.Destroy)return;a.updateMetrics();let l=this.getZoomInfo(n);if(!l)return;this.instance.state=st.CustomClosing,i.classList.remove(ct),i.classList.add("is-zooming-out"),o.style.backgroundImage=`url('${r}')`;const c=i.getBoundingClientRect();1===((null===(t=window.visualViewport)||void 0===t?void 0:t.scale)||1)&&Object.assign(i.style,{position:"absolute",top:`${window.scrollY}px`,left:`${window.scrollX}px`,bottom:"auto",right:"auto",width:`${c.width}px`,height:`${c.height}px`,overflow:"hidden"});const{x:h,y:d,scale:u,opacity:f}=l;if(f){const t=((t,e,i,n)=>{const s=e-t,o=n-i;return e=>i+((e-t)/s*o||0)})(a.scale,u,1,0);a.on("afterTransform",(()=>{o.style.opacity=t(a.scale)+""}))}a.on("endAnimation",(()=>{e.destroy()})),a.target.a=u,a.target.b=0,a.target.c=0,a.target.d=u,a.panTo({x:h,y:d,scale:u,friction:f?.2:.33,ignoreBounds:!0}),a.isResting&&e.destroy()}setImage(t,e){const i=this.instance;t.src=e,this.process(t,e).then((e=>{const{contentEl:n,imageEl:s,thumbElSrc:o,el:a}=t;if(i.isClosing()||!n||!s)return;n.offsetHeight;const r=!!i.isOpeningSlide(t)&&this.getZoomInfo(t);if(this.option("protected")&&a){a.addEventListener("contextmenu",(t=>{t.preventDefault()}));const t=document.createElement("div");S(t,"fancybox-protected"),n.appendChild(t)}if(o&&r){const s=e.contentRect,a=Math.max(s.fullWidth,s.fullHeight);let c=null;!r.opacity&&a>1200&&(c=document.createElement("img"),S(c,"fancybox-ghost"),c.src=o,n.appendChild(c));const h=()=>{c&&(S(c,"f-fadeFastOut"),setTimeout((()=>{c&&(c.remove(),c=null)}),200))};(l=o,new Promise(((t,e)=>{const i=new Image;i.onload=t,i.onerror=e,i.src=l}))).then((()=>{i.hideLoading(t),t.state=ot.Opening,this.instance.emit("reveal",t),this.zoomIn(t).then((()=>{h(),this.instance.done(t)}),(()=>{})),c&&setTimeout((()=>{h()}),a>2500?800:200)}),(()=>{i.hideLoading(t),i.revealContent(t)}))}else{const n=this.optionFor(t,"initialSize"),s=this.optionFor(t,"zoom"),o={event:i.prevMouseMoveEvent||i.options.event,friction:s?.12:0};let a=i.optionFor(t,"showClass")||void 0,r=!0;i.isOpeningSlide(t)&&("full"===n?e.zoomToFull(o):"cover"===n?e.zoomToCover(o):"max"===n?e.zoomToMax(o):r=!1,e.stop("current")),r&&a&&(a=e.isDragging?"f-fadeIn":""),i.hideLoading(t),i.revealContent(t,a)}var l}),(()=>{i.setError(t,"{{IMAGE_ERROR}}")}))}process(t,e){return new Promise(((i,s)=>{var o;const a=this.instance,r=t.el;a.clearContent(t),a.showLoading(t);let l=this.optionFor(t,"content");if("string"==typeof l&&(l=n(l)),!l||!x(l)){if(l=document.createElement("img"),l instanceof HTMLImageElement){let i="",n=t.caption;i="string"==typeof n&&n?n.replace(/<[^>]+>/gi,"").substring(0,1e3):`Image ${t.index+1} of ${null===(o=a.carousel)||void 0===o?void 0:o.pages.length}`,l.src=e||"",l.alt=i,l.draggable=!1,t.srcset&&l.setAttribute("srcset",t.srcset),this.instance.isOpeningSlide(t)&&(l.fetchPriority="high")}t.sizes&&l.setAttribute("sizes",t.sizes)}S(l,"fancybox-image"),t.imageEl=l,a.setContent(t,l,!1);t.panzoom=new R(r,u({transformParent:!0},this.option("Panzoom")||{},{content:l,width:a.optionFor(t,"width","auto"),height:a.optionFor(t,"height","auto"),wheel:()=>{const t=a.option("wheel");return("zoom"===t||"pan"==t)&&t},click:(e,i)=>{var n,s;if(a.isCompact||a.isClosing())return!1;if(t.index!==(null===(n=a.getSlide())||void 0===n?void 0:n.index))return!1;if(i){const t=i.composedPath()[0];if(["A","BUTTON","TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].includes(t.nodeName))return!1}let o=!i||i.target&&(null===(s=t.contentEl)||void 0===s?void 0:s.contains(i.target));return a.option(o?"contentClick":"backdropClick")||!1},dblClick:()=>a.isCompact?"toggleZoom":a.option("contentDblClick")||!1,spinner:!1,panOnlyZoomed:!0,wheelLimit:1/0,on:{ready:t=>{i(t)},error:()=>{s()},destroy:()=>{s()}}}))}))}zoomIn(t){return new Promise(((e,i)=>{const n=this.instance,s=n.container,{panzoom:o,contentEl:a,el:r}=t;o&&o.updateMetrics();const l=this.getZoomInfo(t);if(!(l&&r&&a&&o&&s))return void i();const{x:c,y:h,scale:d,opacity:u}=l,f=()=>{t.state!==ot.Closing&&(u&&(a.style.opacity=Math.max(Math.min(1,1-(1-o.scale)/(1-d)),0)+""),o.scale>=1&&o.scale>o.targetScale-.1&&e(o))},p=t=>{(t.scale<.99||t.scale>1.01)&&!t.isDragging||(E(s,ct),a.style.opacity="",t.off("endAnimation",p),t.off("touchStart",p),t.off("afterTransform",f),e(t))};o.on("endAnimation",p),o.on("touchStart",p),o.on("afterTransform",f),o.on(["error","destroy"],(()=>{i()})),o.panTo({x:c,y:h,scale:d,friction:0,ignoreBounds:!0}),o.stop("current");const g={event:"mousemove"===o.panMode?n.prevMouseMoveEvent||n.options.event:void 0},m=this.optionFor(t,"initialSize");S(s,ct),n.hideLoading(t),"full"===m?o.zoomToFull(g):"cover"===m?o.zoomToCover(g):"max"===m?o.zoomToMax(g):o.reset(.172)}))}getZoomInfo(t){var e;const{el:i,imageEl:n,thumbEl:s,panzoom:o}=t;if(!i||!n||!s||!o||J(s)<3||!this.optionFor(t,"zoom")||this.instance.state===st.Destroy)return!1;if(1!==((null===(e=window.visualViewport)||void 0===e?void 0:e.scale)||1))return!1;let{top:a,left:r,width:l,height:c}=s.getBoundingClientRect(),{top:h,left:d,fitWidth:u,fitHeight:f}=o.contentRect;if(!(l&&c&&u&&f))return!1;const p=o.container.getBoundingClientRect();d+=p.left,h+=p.top;const g=-1*(d+.5*u-(r+.5*l)),m=-1*(h+.5*f-(a+.5*c)),b=l/u;let v=this.option("zoomOpacity")||!1;return"auto"===v&&(v=Math.abs(l/c-u/f)>.1),{x:g,y:m,scale:b,opacity:v}}attach(){const t=this,e=t.instance;e.on("Carousel.change",t.onChange),e.on("Carousel.createSlide",t.onCreateSlide),e.on("Carousel.removeSlide",t.onRemoveSlide),e.on("close",t.onClose)}detach(){const t=this,e=t.instance;e.off("Carousel.change",t.onChange),e.off("Carousel.createSlide",t.onCreateSlide),e.off("Carousel.removeSlide",t.onRemoveSlide),e.off("close",t.onClose)}}Object.defineProperty(ht,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{initialSize:"fit",Panzoom:{maxScale:1},protected:!1,zoom:!0,zoomOpacity:"auto"}}),"function"==typeof SuppressedError&&SuppressedError;const dt="html",ut="image",ft="map",pt="youtube",gt="vimeo",mt="html5video",bt=(t,e={})=>{const i=new URL(t),n=new URLSearchParams(i.search),s=new URLSearchParams;for(const[t,i]of[...n,...Object.entries(e)]){let e=i.toString();"t"===t?s.set("start",parseInt(e).toString()):s.set(t,e)}let o=s.toString(),a=t.match(/#t=((.*)?\d+s)/);return a&&(o+=`#t=${a[1]}`),o},vt={ajax:null,autoSize:!0,iframeAttr:{allow:"autoplay; fullscreen",scrolling:"auto"},preload:!0,videoAutoplay:!0,videoRatio:16/9,videoTpl:'<video class="fancybox__html5video" playsinline controls controlsList="nodownload" poster="{{poster}}">\n  <source src="{{src}}" type="{{format}}" />Sorry, your browser doesn\'t support embedded videos.</video>',videoFormat:"",vimeo:{byline:1,color:"00adef",controls:1,dnt:1,muted:0},youtube:{controls:1,enablejsapi:1,nocookie:1,rel:0,fs:1}},yt=["image","html","ajax","inline","clone","iframe","map","pdf","html5video","youtube","vimeo"];class wt extends B{onBeforeInitSlide(t,e,i){this.processType(i)}onCreateSlide(t,e,i){this.setContent(i)}onClearContent(t,e){e.xhr&&(e.xhr.abort(),e.xhr=null);const i=e.iframeEl;i&&(i.onload=i.onerror=null,i.src="//about:blank",e.iframeEl=null);const n=e.contentEl,s=e.placeholderEl;if("inline"===e.type&&n&&s)n.classList.remove("fancybox__content"),"none"!==n.style.display&&(n.style.display="none"),s.parentNode&&s.parentNode.insertBefore(n,s),s.remove(),e.contentEl=void 0,e.placeholderEl=void 0;else for(;e.el&&e.el.firstChild;)e.el.removeChild(e.el.firstChild)}onSelectSlide(t,e,i){i.state===ot.Ready&&this.playVideo()}onUnselectSlide(t,e,i){var n,s;if(i.type===mt){try{null===(s=null===(n=i.el)||void 0===n?void 0:n.querySelector("video"))||void 0===s||s.pause()}catch(t){}return}let o;i.type===gt?o={method:"pause",value:"true"}:i.type===pt&&(o={event:"command",func:"pauseVideo"}),o&&i.iframeEl&&i.iframeEl.contentWindow&&i.iframeEl.contentWindow.postMessage(JSON.stringify(o),"*"),i.poller&&clearTimeout(i.poller)}onDone(t,e){t.isCurrentSlide(e)&&!t.isClosing()&&this.playVideo()}onRefresh(t,e){e.slides.forEach((t=>{t.el&&(this.resizeIframe(t),this.setAspectRatio(t))}))}onMessage(t){try{let e=JSON.parse(t.data);if("https://player.vimeo.com"===t.origin){if("ready"===e.event)for(let e of Array.from(document.getElementsByClassName("fancybox__iframe")))e instanceof HTMLIFrameElement&&e.contentWindow===t.source&&(e.dataset.ready="true")}else if(t.origin.match(/^https:\/\/(www.)?youtube(-nocookie)?.com$/)&&"onReady"===e.event){const t=document.getElementById(e.id);t&&(t.dataset.ready="true")}}catch(t){}}loadAjaxContent(t){const e=this.instance.optionFor(t,"src")||"";this.instance.showLoading(t);const i=this.instance,n=new XMLHttpRequest;i.showLoading(t),n.onreadystatechange=function(){n.readyState===XMLHttpRequest.DONE&&i.state===st.Ready&&(i.hideLoading(t),200===n.status?i.setContent(t,n.responseText):i.setError(t,404===n.status?"{{AJAX_NOT_FOUND}}":"{{AJAX_FORBIDDEN}}"))};const s=t.ajax||null;n.open(s?"POST":"GET",e+""),n.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.send(s),t.xhr=n}setInlineContent(t){let e=null;if(x(t.src))e=t.src;else if("string"==typeof t.src){const i=t.src.split("#",2).pop();e=i?document.getElementById(i):null}if(e){if("clone"===t.type||e.closest(".fancybox__slide")){e=e.cloneNode(!0);const i=e.dataset.animationName;i&&(e.classList.remove(i),delete e.dataset.animationName);let n=e.getAttribute("id");n=n?`${n}--clone`:`clone-${this.instance.id}-${t.index}`,e.setAttribute("id",n)}else if(e.parentNode){const i=document.createElement("div");i.classList.add("fancybox-placeholder"),e.parentNode.insertBefore(i,e),t.placeholderEl=i}this.instance.setContent(t,e)}else this.instance.setError(t,"{{ELEMENT_NOT_FOUND}}")}setIframeContent(t){const{src:e,el:i}=t;if(!e||"string"!=typeof e||!i)return;i.classList.add("is-loading");const n=this.instance,s=document.createElement("iframe");s.className="fancybox__iframe",s.setAttribute("id",`fancybox__iframe_${n.id}_${t.index}`);for(const[e,i]of Object.entries(this.optionFor(t,"iframeAttr")||{}))s.setAttribute(e,i);s.onerror=()=>{n.setError(t,"{{IFRAME_ERROR}}")},t.iframeEl=s;const o=this.optionFor(t,"preload");if("iframe"!==t.type||!1===o)return s.setAttribute("src",t.src+""),n.setContent(t,s,!1),this.resizeIframe(t),void n.revealContent(t);n.showLoading(t),s.onload=()=>{if(!s.src.length)return;const e="true"!==s.dataset.ready;s.dataset.ready="true",this.resizeIframe(t),e?n.revealContent(t):n.hideLoading(t)},s.setAttribute("src",e),n.setContent(t,s,!1)}resizeIframe(t){const{type:e,iframeEl:i}=t;if(e===pt||e===gt)return;const n=null==i?void 0:i.parentElement;if(!i||!n)return;let s=t.autoSize;void 0===s&&(s=this.optionFor(t,"autoSize"));let o=t.width||0,a=t.height||0;o&&a&&(s=!1);const r=n&&n.style;if(!1!==t.preload&&!1!==s&&r)try{const t=window.getComputedStyle(n),e=parseFloat(t.paddingLeft)+parseFloat(t.paddingRight),s=parseFloat(t.paddingTop)+parseFloat(t.paddingBottom),l=i.contentWindow;if(l){const t=l.document,i=t.getElementsByTagName(dt)[0],n=t.body;r.width="",n.style.overflow="hidden",o=o||i.scrollWidth+e,r.width=`${o}px`,n.style.overflow="",r.flex="0 0 auto",r.height=`${n.scrollHeight}px`,a=i.scrollHeight+s}}catch(t){}if(o||a){const t={flex:"0 1 auto",width:"",height:""};o&&"auto"!==o&&(t.width=`${o}px`),a&&"auto"!==a&&(t.height=`${a}px`),Object.assign(r,t)}}playVideo(){const t=this.instance.getSlide();if(!t)return;const{el:e}=t;if(!e||!e.offsetParent)return;if(!this.optionFor(t,"videoAutoplay"))return;if(t.type===mt)try{const t=e.querySelector("video");if(t){const e=t.play();void 0!==e&&e.then((()=>{})).catch((e=>{t.muted=!0,t.play()}))}}catch(t){}if(t.type!==pt&&t.type!==gt)return;const i=()=>{if(t.iframeEl&&t.iframeEl.contentWindow){let e;if("true"===t.iframeEl.dataset.ready)return e=t.type===pt?{event:"command",func:"playVideo"}:{method:"play",value:"true"},e&&t.iframeEl.contentWindow.postMessage(JSON.stringify(e),"*"),void(t.poller=void 0);t.type===pt&&(e={event:"listening",id:t.iframeEl.getAttribute("id")},t.iframeEl.contentWindow.postMessage(JSON.stringify(e),"*"))}t.poller=setTimeout(i,250)};i()}processType(t){if(t.html)return t.type=dt,t.src=t.html,void(t.html="");const e=this.instance.optionFor(t,"src","");if(!e||"string"!=typeof e)return;let i=t.type,n=null;if(n=e.match(/(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(?:watch\?(?:.*&)?v=|v\/|u\/|shorts\/|embed\/?)?(videoseries\?list=(?:.*)|[\w-]{11}|\?listType=(?:.*)&list=(?:.*))(?:.*)/i)){const s=this.optionFor(t,pt),{nocookie:o}=s,a=function(t,e){var i={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(i[n]=t[n]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(n=Object.getOwnPropertySymbols(t);s<n.length;s++)e.indexOf(n[s])<0&&Object.prototype.propertyIsEnumerable.call(t,n[s])&&(i[n[s]]=t[n[s]])}return i}(s,["nocookie"]),r=`www.youtube${o?"-nocookie":""}.com`,l=bt(e,a),c=encodeURIComponent(n[2]);t.videoId=c,t.src=`https://${r}/embed/${c}?${l}`,t.thumbSrc=t.thumbSrc||`https://i.ytimg.com/vi/${c}/mqdefault.jpg`,i=pt}else if(n=e.match(/^.+vimeo.com\/(?:\/)?([\d]+)((\/|\?h=)([a-z0-9]+))?(.*)?/)){const s=bt(e,this.optionFor(t,gt)),o=encodeURIComponent(n[1]),a=n[4]||"";t.videoId=o,t.src=`https://player.vimeo.com/video/${o}?${a?`h=${a}${s?"&":""}`:""}${s}`,i=gt}if(!i&&t.triggerEl){const e=t.triggerEl.dataset.type;yt.includes(e)&&(i=e)}i||"string"==typeof e&&("#"===e.charAt(0)?i="inline":(n=e.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))?(i=mt,t.videoFormat=t.videoFormat||"video/"+("ogv"===n[1]?"ogg":n[1])):e.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)?i=ut:e.match(/\.(pdf)((\?|#).*)?$/i)&&(i="pdf")),(n=e.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:(?:(?:maps\/(?:place\/(?:.*)\/)?\@(.*),(\d+.?\d+?)z))|(?:\?ll=))(.*)?/i))?(t.src=`https://maps.google.${n[1]}/?ll=${(n[2]?n[2]+"&z="+Math.floor(parseFloat(n[3]))+(n[4]?n[4].replace(/^\//,"&"):""):n[4]+"").replace(/\?/,"&")}&output=${n[4]&&n[4].indexOf("layer=c")>0?"svembed":"embed"}`,i=ft):(n=e.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:maps\/search\/)(.*)/i))&&(t.src=`https://maps.google.${n[1]}/maps?q=${n[2].replace("query=","q=").replace("api=1","")}&output=embed`,i=ft),i=i||this.instance.option("defaultType"),t.type=i,i===ut&&(t.thumbSrc=t.thumbSrc||t.src)}setContent(t){const e=this.instance.optionFor(t,"src")||"";if(t&&t.type&&e){switch(t.type){case dt:this.instance.setContent(t,e);break;case mt:const i=this.option("videoTpl");i&&this.instance.setContent(t,i.replace(/\{\{src\}\}/gi,e+"").replace(/\{\{format\}\}/gi,this.optionFor(t,"videoFormat")||"").replace(/\{\{poster\}\}/gi,t.poster||t.thumbSrc||""));break;case"inline":case"clone":this.setInlineContent(t);break;case"ajax":this.loadAjaxContent(t);break;case"pdf":case ft:case pt:case gt:t.preload=!1;case"iframe":this.setIframeContent(t)}this.setAspectRatio(t)}}setAspectRatio(t){const e=t.contentEl;if(!(t.el&&e&&t.type&&[pt,gt,mt].includes(t.type)))return;let i,n=t.width||"auto",s=t.height||"auto";if("auto"===n||"auto"===s){i=this.optionFor(t,"videoRatio");const e=(i+"").match(/(\d+)\s*\/\s?(\d+)/);i=e&&e.length>2?parseFloat(e[1])/parseFloat(e[2]):parseFloat(i+"")}else n&&s&&(i=n/s);if(!i)return;e.style.aspectRatio="",e.style.width="",e.style.height="",e.offsetHeight;const o=e.getBoundingClientRect(),a=o.width||1,r=o.height||1;e.style.aspectRatio=i+"",i<a/r?(s="auto"===s?r:Math.min(r,s),e.style.width="auto",e.style.height=`${s}px`):(n="auto"===n?a:Math.min(a,n),e.style.width=`${n}px`,e.style.height="auto")}attach(){const t=this,e=t.instance;e.on("Carousel.beforeInitSlide",t.onBeforeInitSlide),e.on("Carousel.createSlide",t.onCreateSlide),e.on("Carousel.selectSlide",t.onSelectSlide),e.on("Carousel.unselectSlide",t.onUnselectSlide),e.on("Carousel.Panzoom.refresh",t.onRefresh),e.on("done",t.onDone),e.on("clearContent",t.onClearContent),window.addEventListener("message",t.onMessage)}detach(){const t=this,e=t.instance;e.off("Carousel.beforeInitSlide",t.onBeforeInitSlide),e.off("Carousel.createSlide",t.onCreateSlide),e.off("Carousel.selectSlide",t.onSelectSlide),e.off("Carousel.unselectSlide",t.onUnselectSlide),e.off("Carousel.Panzoom.refresh",t.onRefresh),e.off("done",t.onDone),e.off("clearContent",t.onClearContent),window.removeEventListener("message",t.onMessage)}}Object.defineProperty(wt,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:vt});const xt="play",Et="pause",St="ready";class Pt extends B{constructor(){super(...arguments),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:St}),Object.defineProperty(this,"inHover",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"timer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"progressBar",{enumerable:!0,configurable:!0,writable:!0,value:null})}get isActive(){return this.state!==St}onReady(t){this.option("autoStart")&&(t.isInfinite||t.page<t.pages.length-1)&&this.start()}onChange(){var t;(null===(t=this.instance.panzoom)||void 0===t?void 0:t.isResting)||(this.removeProgressBar(),this.pause())}onSettle(){this.resume()}onVisibilityChange(){"visible"===document.visibilityState?this.resume():this.pause()}onMouseEnter(){this.inHover=!0,this.pause()}onMouseLeave(){var t;this.inHover=!1,(null===(t=this.instance.panzoom)||void 0===t?void 0:t.isResting)&&this.resume()}onTimerEnd(){const t=this.instance;"play"===this.state&&(t.isInfinite||t.page!==t.pages.length-1?t.slideNext():t.slideTo(0))}removeProgressBar(){this.progressBar&&(this.progressBar.remove(),this.progressBar=null)}createProgressBar(){var t;if(!this.option("showProgress"))return null;this.removeProgressBar();const e=this.instance,i=(null===(t=e.pages[e.page])||void 0===t?void 0:t.slides)||[];let n=this.option("progressParentEl");if(n||(n=(1===i.length?i[0].el:null)||e.viewport),!n)return null;const s=document.createElement("div");return S(s,"f-progress"),n.prepend(s),this.progressBar=s,s.offsetHeight,s}set(){const t=this,e=t.instance;if(e.pages.length<2)return;if(t.timer)return;const i=t.option("timeout");t.state=xt,S(e.container,"has-autoplay");let n=t.createProgressBar();n&&(n.style.transitionDuration=`${i}ms`,n.style.transform="scaleX(1)"),t.timer=setTimeout((()=>{t.timer=null,t.inHover||t.onTimerEnd()}),i),t.emit("set")}clear(){const t=this;t.timer&&(clearTimeout(t.timer),t.timer=null),t.removeProgressBar()}start(){const t=this;if(t.set(),t.state!==St){if(t.option("pauseOnHover")){const e=t.instance.container;e.addEventListener("mouseenter",t.onMouseEnter,!1),e.addEventListener("mouseleave",t.onMouseLeave,!1)}document.addEventListener("visibilitychange",t.onVisibilityChange,!1),t.emit("start")}}stop(){const t=this,e=t.state,i=t.instance.container;t.clear(),t.state=St,i.removeEventListener("mouseenter",t.onMouseEnter,!1),i.removeEventListener("mouseleave",t.onMouseLeave,!1),document.removeEventListener("visibilitychange",t.onVisibilityChange,!1),E(i,"has-autoplay"),e!==St&&t.emit("stop")}pause(){const t=this;t.state===xt&&(t.state=Et,t.clear(),t.emit(Et))}resume(){const t=this,e=t.instance;if(e.isInfinite||e.page!==e.pages.length-1)if(t.state!==xt){if(t.state===Et&&!t.inHover){const e=new Event("resume",{bubbles:!0,cancelable:!0});t.emit("resume",e),e.defaultPrevented||t.set()}}else t.set();else t.stop()}toggle(){this.state===xt||this.state===Et?this.stop():this.start()}attach(){const t=this,e=t.instance;e.on("ready",t.onReady),e.on("Panzoom.startAnimation",t.onChange),e.on("Panzoom.endAnimation",t.onSettle),e.on("Panzoom.touchMove",t.onChange)}detach(){const t=this,e=t.instance;e.off("ready",t.onReady),e.off("Panzoom.startAnimation",t.onChange),e.off("Panzoom.endAnimation",t.onSettle),e.off("Panzoom.touchMove",t.onChange),t.stop()}}Object.defineProperty(Pt,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{autoStart:!0,pauseOnHover:!0,progressParentEl:null,showProgress:!0,timeout:3e3}});class Ct extends B{constructor(){super(...arguments),Object.defineProperty(this,"ref",{enumerable:!0,configurable:!0,writable:!0,value:null})}onPrepare(t){const e=t.carousel;if(!e)return;const i=t.container;i&&(e.options.Autoplay=u({autoStart:!1},this.option("Autoplay")||{},{pauseOnHover:!1,timeout:this.option("timeout"),progressParentEl:()=>this.option("progressParentEl")||null,on:{start:()=>{t.emit("startSlideshow")},set:e=>{var n;i.classList.add("has-slideshow"),(null===(n=t.getSlide())||void 0===n?void 0:n.state)!==ot.Ready&&e.pause()},stop:()=>{i.classList.remove("has-slideshow"),t.isCompact||t.endIdle(),t.emit("endSlideshow")},resume:(e,i)=>{var n,s,o;!i||!i.cancelable||(null===(n=t.getSlide())||void 0===n?void 0:n.state)===ot.Ready&&(null===(o=null===(s=t.carousel)||void 0===s?void 0:s.panzoom)||void 0===o?void 0:o.isResting)||i.preventDefault()}}}),e.attachPlugins({Autoplay:Pt}),this.ref=e.plugins.Autoplay)}onReady(t){const e=t.carousel,i=this.ref;i&&e&&this.option("playOnStart")&&(e.isInfinite||e.page<e.pages.length-1)&&i.start()}onDone(t,e){const i=this.ref,n=t.carousel;if(!i||!n)return;const s=e.panzoom;s&&s.on("startAnimation",(()=>{t.isCurrentSlide(e)&&i.stop()})),t.isCurrentSlide(e)&&i.resume()}onKeydown(t,e){var i;const n=this.ref;n&&e===this.option("key")&&"BUTTON"!==(null===(i=document.activeElement)||void 0===i?void 0:i.nodeName)&&n.toggle()}attach(){const t=this,e=t.instance;e.on("Carousel.init",t.onPrepare),e.on("Carousel.ready",t.onReady),e.on("done",t.onDone),e.on("keydown",t.onKeydown)}detach(){const t=this,e=t.instance;e.off("Carousel.init",t.onPrepare),e.off("Carousel.ready",t.onReady),e.off("done",t.onDone),e.off("keydown",t.onKeydown)}}Object.defineProperty(Ct,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{key:" ",playOnStart:!1,progressParentEl:t=>{var e;return(null===(e=t.instance.container)||void 0===e?void 0:e.querySelector(".fancybox__toolbar [data-fancybox-toggle-slideshow]"))||t.instance.container},timeout:3e3}});const Tt={classes:{container:"f-thumbs f-carousel__thumbs",viewport:"f-thumbs__viewport",track:"f-thumbs__track",slide:"f-thumbs__slide",isResting:"is-resting",isSelected:"is-selected",isLoading:"is-loading",hasThumbs:"has-thumbs"},minCount:2,parentEl:null,thumbTpl:'<button class="f-thumbs__slide__button" tabindex="0" type="button" aria-label="{{GOTO}}" data-carousel-index="%i"><img class="f-thumbs__slide__img" data-lazy-src="{{%s}}" alt="" /></button>',type:"modern"};var Mt;!function(t){t[t.Init=0]="Init",t[t.Ready=1]="Ready",t[t.Hidden=2]="Hidden"}(Mt||(Mt={}));const Ot="isResting",At="thumbWidth",Lt="thumbHeight",zt="thumbClipWidth";let Rt=class extends B{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"modern"}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"track",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"carousel",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"thumbWidth",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbClipWidth",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbHeight",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbGap",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbExtraGap",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:Mt.Init})}get isModern(){return"modern"===this.type}onInitSlide(t,e){const i=e.el?e.el.dataset:void 0;i&&(e.thumbSrc=i.thumbSrc||e.thumbSrc||"",e[zt]=parseFloat(i[zt]||"")||e[zt]||0,e[Lt]=parseFloat(i.thumbHeight||"")||e[Lt]||0),this.addSlide(e)}onInitSlides(){this.build()}onChange(){var t;if(!this.isModern)return;const e=this.container,i=this.instance,n=i.panzoom,s=this.carousel,a=s?s.panzoom:null,r=i.page;if(n&&s&&a){if(n.isDragging){E(e,this.cn(Ot));let n=(null===(t=s.pages[r])||void 0===t?void 0:t.pos)||0;n+=i.getProgress(r)*(this[zt]+this.thumbGap);let o=a.getBounds();-1*n>o.x.min&&-1*n<o.x.max&&a.panTo({x:-1*n,friction:.12})}else o(e,this.cn(Ot),n.isResting);this.shiftModern()}}onRefresh(){this.updateProps();for(const t of this.instance.slides||[])this.resizeModernSlide(t);this.shiftModern()}isDisabled(){const t=this.option("minCount")||0;if(t){const e=this.instance;let i=0;for(const t of e.slides||[])t.thumbSrc&&i++;if(i<t)return!0}const e=this.option("type");return["modern","classic"].indexOf(e)<0}getThumb(t){const e=this.option("thumbTpl")||"";return{html:this.instance.localize(e,[["%i",t.index],["%d",t.index+1],["%s",t.thumbSrc||"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"]])}}addSlide(t){const e=this.carousel;e&&e.addSlide(t.index,this.getThumb(t))}getSlides(){const t=[];for(const e of this.instance.slides||[])t.push(this.getThumb(e));return t}resizeModernSlide(t){this.isModern&&(t[At]=t[zt]&&t[Lt]?Math.round(this[Lt]*(t[zt]/t[Lt])):this[At])}updateProps(){const t=this.container;if(!t)return;const e=e=>parseFloat(getComputedStyle(t).getPropertyValue("--f-thumb-"+e))||0;this.thumbGap=e("gap"),this.thumbExtraGap=e("extra-gap"),this[At]=e("width")||40,this[zt]=e("clip-width")||40,this[Lt]=e("height")||40}build(){const t=this;if(t.state!==Mt.Init)return;if(t.isDisabled())return;const e=t.instance,i=e.container,n=t.getSlides(),s=t.option("type");t.type=s;const o=document.createElement("div");S(o,t.cn("container")),S(o,`is-${s}`);const a=t.option("parentEl");a?a.appendChild(o):i.after(o),S(i,t.cn("hasThumbs")),t.container=o,t.updateProps();const r=document.createElement("div");S(r,t.cn("track")),o.appendChild(r),t.track=r;const l=u({},{track:r,infinite:!1,center:!0,fill:"classic"===s,dragFree:!0,slidesPerPage:1,transition:!1,preload:.25,friction:.12,Panzoom:{maxVelocity:0},Dots:!1,Navigation:!1,classes:{container:"f-thumbs",viewport:"f-thumbs__viewport",track:"f-thumbs__track",slide:"f-thumbs__slide"}},t.option("Carousel")||{},{Sync:{target:e},slides:n}),c=new e.constructor(o,l);c.on("createSlide",((e,i)=>{t.setProps(i.index),t.emit("createSlide",i,i.el)})),c.on("ready",(()=>{t.shiftModern(),t.emit("ready")})),c.on("refresh",(()=>{t.shiftModern()})),c.on("Panzoom.click",((e,i,n)=>{t.onClick(n)})),t.carousel=c,t.state=Mt.Ready}onClick(t){t.preventDefault(),t.stopPropagation();const e=this.instance,{pages:i,page:n}=e,s=t=>{if(t){const e=t.closest("[data-carousel-index]");if(e)return[parseInt(e.dataset.carouselIndex||"",10)||0,e]}return[-1,void 0]},o=(t,e)=>{const i=document.elementFromPoint(t,e);return i?s(i):[-1,void 0]};let[a,r]=s(t.target);if(a>-1)return;const l=this[zt],c=t.clientX,h=t.clientY;let[d,u]=o(c-l,h),[f,p]=o(c+l,h);u&&p?(a=Math.abs(c-u.getBoundingClientRect().right)<Math.abs(c-p.getBoundingClientRect().left)?d:f,a===n&&(a=a===d?f:d)):u?a=d:p&&(a=f),a>-1&&i[a]&&e.slideTo(a)}getShift(t){var e;const i=this,{instance:n}=i,s=i.carousel;if(!n||!s)return 0;const o=i[At],a=i[zt],r=i.thumbGap,l=i.thumbExtraGap;if(!(null===(e=s.slides[t])||void 0===e?void 0:e.el))return 0;const c=.5*(o-a),h=n.pages.length-1;let d=n.getProgress(0),u=n.getProgress(h),f=n.getProgress(t,!1,!0),p=0,g=c+l+r;const m=d<0&&d>-1,b=u>0&&u<1;return 0===t?(p=g*Math.abs(d),b&&1===d&&(p-=g*Math.abs(u))):t===h?(p=g*Math.abs(u)*-1,m&&-1===u&&(p+=g*Math.abs(d))):m||b?(p=-1*g,p+=g*Math.abs(d),p+=g*(1-Math.abs(u))):p=g*f,p}setProps(e){const i=this;if(!i.isModern)return;const{instance:n}=i,s=i.carousel;if(n&&s){const o=s.slides[e].el;if(o&&o.childNodes.length){let s=t(1-Math.abs(n.getProgress(e))),a=t(i.getShift(e));o.style.setProperty("--progress",s?s+"":""),o.style.setProperty("--shift",a+"")}}}shiftModern(){const t=this;if(!t.isModern)return;const{instance:e,track:i}=t,n=e.panzoom,s=t.carousel;if(!(e&&i&&n&&s))return;if(n.state===m.Init||n.state===m.Destroy)return;for(const i of e.slides)t.setProps(i.index);let o=(t[zt]+t.thumbGap)*(s.slides.length||0);i.style.setProperty("--width",o+"")}cleanup(){const t=this;t.carousel&&t.carousel.destroy(),t.carousel=null,t.container&&t.container.remove(),t.container=null,t.track&&t.track.remove(),t.track=null,t.state=Mt.Init,E(t.instance.container,t.cn("hasThumbs"))}attach(){const t=this,e=t.instance;e.on("initSlide",t.onInitSlide),e.state===F.Init?e.on("initSlides",t.onInitSlides):t.onInitSlides(),e.on(["change","Panzoom.afterTransform"],t.onChange),e.on("Panzoom.refresh",t.onRefresh)}detach(){const t=this,e=t.instance;e.off("initSlide",t.onInitSlide),e.off("initSlides",t.onInitSlides),e.off(["change","Panzoom.afterTransform"],t.onChange),e.off("Panzoom.refresh",t.onRefresh),t.cleanup()}};Object.defineProperty(Rt,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Tt});const kt=Object.assign(Object.assign({},Tt),{key:"t",showOnStart:!0,parentEl:null}),It="is-masked",Dt="aria-hidden";class Ft extends B{constructor(){super(...arguments),Object.defineProperty(this,"ref",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"hidden",{enumerable:!0,configurable:!0,writable:!0,value:!1})}get isEnabled(){const t=this.ref;return t&&!t.isDisabled()}get isHidden(){return this.hidden}onClick(t,e){e.stopPropagation()}onCreateSlide(t,e){var i,n,s;const o=(null===(s=null===(n=null===(i=this.instance)||void 0===i?void 0:i.carousel)||void 0===n?void 0:n.slides[e.index])||void 0===s?void 0:s.type)||"",a=e.el;if(a&&o){let t=`for-${o}`;["video","youtube","vimeo","html5video"].includes(o)&&(t+=" for-video"),S(a,t)}}onInit(){var t;const e=this,i=e.instance,n=i.carousel;if(e.ref||!n)return;const s=e.option("parentEl")||i.footer||i.container;if(!s)return;const o=u({},e.options,{parentEl:s,classes:{container:"f-thumbs fancybox__thumbs"},Carousel:{Sync:{friction:i.option("Carousel.friction")||0}},on:{ready:t=>{const i=t.container;i&&this.hidden&&(e.refresh(),i.style.transition="none",e.hide(),i.offsetHeight,queueMicrotask((()=>{i.style.transition="",e.show()})))}}});o.Carousel=o.Carousel||{},o.Carousel.on=u((null===(t=e.options.Carousel)||void 0===t?void 0:t.on)||{},{click:this.onClick,createSlide:this.onCreateSlide}),n.options.Thumbs=o,n.attachPlugins({Thumbs:Rt}),e.ref=n.plugins.Thumbs,e.option("showOnStart")||(e.ref.state=Mt.Hidden,e.hidden=!0)}onResize(){var t;const e=null===(t=this.ref)||void 0===t?void 0:t.container;e&&(e.style.maxHeight="")}onKeydown(t,e){const i=this.option("key");i&&i===e&&this.toggle()}toggle(){const t=this.ref;if(t&&!t.isDisabled())return t.state===Mt.Hidden?(t.state=Mt.Init,void t.build()):void(this.hidden?this.show():this.hide())}show(){const t=this.ref;if(!t||t.isDisabled())return;const e=t.container;e&&(this.refresh(),e.offsetHeight,e.removeAttribute(Dt),e.classList.remove(It),this.hidden=!1)}hide(){const t=this.ref,e=t&&t.container;e&&(this.refresh(),e.offsetHeight,e.classList.add(It),e.setAttribute(Dt,"true")),this.hidden=!0}refresh(){const t=this.ref;if(!t||!t.state)return;const e=t.container,i=(null==e?void 0:e.firstChild)||null;e&&i&&i.childNodes.length&&(e.style.maxHeight=`${i.getBoundingClientRect().height}px`)}attach(){const t=this,e=t.instance;e.state===st.Init?e.on("Carousel.init",t.onInit):t.onInit(),e.on("resize",t.onResize),e.on("keydown",t.onKeydown)}detach(){var t;const e=this,i=e.instance;i.off("Carousel.init",e.onInit),i.off("resize",e.onResize),i.off("keydown",e.onKeydown),null===(t=i.carousel)||void 0===t||t.detachPlugins(["Thumbs"]),e.ref=null}}Object.defineProperty(Ft,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:kt});const jt={panLeft:{icon:'<svg><path d="M5 12h14M5 12l6 6M5 12l6-6"/></svg>',change:{panX:-100}},panRight:{icon:'<svg><path d="M5 12h14M13 18l6-6M13 6l6 6"/></svg>',change:{panX:100}},panUp:{icon:'<svg><path d="M12 5v14M18 11l-6-6M6 11l6-6"/></svg>',change:{panY:-100}},panDown:{icon:'<svg><path d="M12 5v14M18 13l-6 6M6 13l6 6"/></svg>',change:{panY:100}},zoomIn:{icon:'<svg><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M11 8v6M8 11h6"/></svg>',action:"zoomIn"},zoomOut:{icon:'<svg><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M8 11h6"/></svg>',action:"zoomOut"},toggle1to1:{icon:'<svg><path d="M3.51 3.07c5.74.02 11.48-.02 17.22.02 1.37.1 2.34 1.64 2.18 3.13 0 4.08.02 8.16 0 12.23-.1 1.54-1.47 2.64-2.79 2.46-5.61-.01-11.24.02-16.86-.01-1.36-.12-2.33-1.65-2.17-3.14 0-4.07-.02-8.16 0-12.23.1-1.36 1.22-2.48 2.42-2.46Z"/><path d="M5.65 8.54h1.49v6.92m8.94-6.92h1.49v6.92M11.5 9.4v.02m0 5.18v0"/></svg>',action:"toggleZoom"},toggleZoom:{icon:'<svg><g><line x1="11" y1="8" x2="11" y2="14"></line></g><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M8 11h6"/></svg>',action:"toggleZoom"},iterateZoom:{icon:'<svg><g><line x1="11" y1="8" x2="11" y2="14"></line></g><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M8 11h6"/></svg>',action:"iterateZoom"},rotateCCW:{icon:'<svg><path d="M15 4.55a8 8 0 0 0-6 14.9M9 15v5H4M18.37 7.16v.01M13 19.94v.01M16.84 18.37v.01M19.37 15.1v.01M19.94 11v.01"/></svg>',action:"rotateCCW"},rotateCW:{icon:'<svg><path d="M9 4.55a8 8 0 0 1 6 14.9M15 15v5h5M5.63 7.16v.01M4.06 11v.01M4.63 15.1v.01M7.16 18.37v.01M11 19.94v.01"/></svg>',action:"rotateCW"},flipX:{icon:'<svg style="stroke-width: 1.3"><path d="M12 3v18M16 7v10h5L16 7M8 7v10H3L8 7"/></svg>',action:"flipX"},flipY:{icon:'<svg style="stroke-width: 1.3"><path d="M3 12h18M7 16h10L7 21v-5M7 8h10L7 3v5"/></svg>',action:"flipY"},fitX:{icon:'<svg><path d="M4 12V6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v6M10 18H3M21 18h-7M6 15l-3 3 3 3M18 15l3 3-3 3"/></svg>',action:"fitX"},fitY:{icon:'<svg><path d="M12 20H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h6M18 14v7M18 3v7M15 18l3 3 3-3M15 6l3-3 3 3"/></svg>',action:"fitY"},reset:{icon:'<svg><path d="M20 11A8.1 8.1 0 0 0 4.5 9M4 5v4h4M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4"/></svg>',action:"reset"},toggleFS:{icon:'<svg><g><path d="M14.5 9.5 21 3m0 0h-6m6 0v6M3 21l6.5-6.5M3 21v-6m0 6h6"/></g><g><path d="m14 10 7-7m-7 7h6m-6 0V4M3 21l7-7m0 0v6m0-6H4"/></g></svg>',action:"toggleFS"}};var Ht;!function(t){t[t.Init=0]="Init",t[t.Ready=1]="Ready",t[t.Disabled=2]="Disabled"}(Ht||(Ht={}));const Bt={absolute:"auto",display:{left:["infobar"],middle:[],right:["iterateZoom","slideshow","fullscreen","thumbs","close"]},enabled:"auto",items:{infobar:{tpl:'<div class="fancybox__infobar" tabindex="-1"><span data-fancybox-current-index></span>/<span data-fancybox-count></span></div>'},download:{tpl:'<a class="f-button" title="{{DOWNLOAD}}" data-fancybox-download href="javasript:;"><svg><path d="M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2M7 11l5 5 5-5M12 4v12"/></svg></a>'},prev:{tpl:'<button class="f-button" title="{{PREV}}" data-fancybox-prev><svg><path d="m15 6-6 6 6 6"/></svg></button>'},next:{tpl:'<button class="f-button" title="{{NEXT}}" data-fancybox-next><svg><path d="m9 6 6 6-6 6"/></svg></button>'},slideshow:{tpl:'<button class="f-button" title="{{TOGGLE_SLIDESHOW}}" data-fancybox-toggle-slideshow><svg><g><path d="M8 4v16l13 -8z"></path></g><g><path d="M8 4v15M17 4v15"/></g></svg></button>'},fullscreen:{tpl:'<button class="f-button" title="{{TOGGLE_FULLSCREEN}}" data-fancybox-toggle-fullscreen><svg><g><path d="M4 8V6a2 2 0 0 1 2-2h2M4 16v2a2 2 0 0 0 2 2h2M16 4h2a2 2 0 0 1 2 2v2M16 20h2a2 2 0 0 0 2-2v-2"/></g><g><path d="M15 19v-2a2 2 0 0 1 2-2h2M15 5v2a2 2 0 0 0 2 2h2M5 15h2a2 2 0 0 1 2 2v2M5 9h2a2 2 0 0 0 2-2V5"/></g></svg></button>'},thumbs:{tpl:'<button class="f-button" title="{{TOGGLE_THUMBS}}" data-fancybox-toggle-thumbs><svg><circle cx="5.5" cy="5.5" r="1"/><circle cx="12" cy="5.5" r="1"/><circle cx="18.5" cy="5.5" r="1"/><circle cx="5.5" cy="12" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="18.5" cy="12" r="1"/><circle cx="5.5" cy="18.5" r="1"/><circle cx="12" cy="18.5" r="1"/><circle cx="18.5" cy="18.5" r="1"/></svg></button>'},close:{tpl:'<button class="f-button" title="{{CLOSE}}" data-fancybox-close><svg><path d="m19.5 4.5-15 15M4.5 4.5l15 15"/></svg></button>'}},parentEl:null},Nt={tabindex:"-1",width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"};class _t extends B{constructor(){super(...arguments),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:Ht.Init}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null})}onReady(t){var e;if(!t.carousel)return;let i=this.option("display"),n=this.option("absolute"),s=this.option("enabled");if("auto"===s){const t=this.instance.carousel;let e=0;if(t)for(const i of t.slides)(i.panzoom||"image"===i.type)&&e++;e||(s=!1)}s||(i=void 0);let o=0;const a={left:[],middle:[],right:[]};if(i)for(const t of["left","middle","right"])for(const n of i[t]){const i=this.createEl(n);i&&(null===(e=a[t])||void 0===e||e.push(i),o++)}let r=null;if(o&&(r=this.createContainer()),r){for(const[t,e]of Object.entries(a)){const i=document.createElement("div");S(i,"fancybox__toolbar__column is-"+t);for(const t of e)i.appendChild(t);"auto"!==n||"middle"!==t||e.length||(n=!0),r.appendChild(i)}!0===n&&S(r,"is-absolute"),this.state=Ht.Ready,this.onRefresh()}else this.state=Ht.Disabled}onClick(t){var e,i;const n=this.instance,s=n.getSlide(),o=null==s?void 0:s.panzoom,a=t.target,r=a&&x(a)?a.dataset:null;if(!r)return;if(void 0!==r.fancyboxToggleThumbs)return t.preventDefault(),t.stopPropagation(),void(null===(e=n.plugins.Thumbs)||void 0===e||e.toggle());if(void 0!==r.fancyboxToggleFullscreen)return t.preventDefault(),t.stopPropagation(),void this.instance.toggleFullscreen();if(void 0!==r.fancyboxToggleSlideshow){t.preventDefault(),t.stopPropagation();const e=null===(i=n.carousel)||void 0===i?void 0:i.plugins.Autoplay;let s=e.isActive;return o&&"mousemove"===o.panMode&&!s&&o.reset(),void(s?e.stop():e.start())}const l=r.panzoomAction,c=r.panzoomChange;if((c||l)&&(t.preventDefault(),t.stopPropagation()),c){let t={};try{t=JSON.parse(c)}catch(t){}o&&o.applyChange(t)}else l&&o&&o[l]&&o[l]()}onChange(){this.onRefresh()}onRefresh(){if(this.instance.isClosing())return;const t=this.container;if(!t)return;const e=this.instance.getSlide();if(!e||e.state!==ot.Ready)return;const i=e&&!e.error&&e.panzoom;for(const e of t.querySelectorAll("[data-panzoom-action]"))i?(e.removeAttribute("disabled"),e.removeAttribute("tabindex")):(e.setAttribute("disabled",""),e.setAttribute("tabindex","-1"));let n=i&&i.canZoomIn(),s=i&&i.canZoomOut();for(const e of t.querySelectorAll('[data-panzoom-action="zoomIn"]'))n?(e.removeAttribute("disabled"),e.removeAttribute("tabindex")):(e.setAttribute("disabled",""),e.setAttribute("tabindex","-1"));for(const e of t.querySelectorAll('[data-panzoom-action="zoomOut"]'))s?(e.removeAttribute("disabled"),e.removeAttribute("tabindex")):(e.setAttribute("disabled",""),e.setAttribute("tabindex","-1"));for(const e of t.querySelectorAll('[data-panzoom-action="toggleZoom"],[data-panzoom-action="iterateZoom"]')){s||n?(e.removeAttribute("disabled"),e.removeAttribute("tabindex")):(e.setAttribute("disabled",""),e.setAttribute("tabindex","-1"));const t=e.querySelector("g");t&&(t.style.display=n?"":"none")}}onDone(t,e){var i;null===(i=e.panzoom)||void 0===i||i.on("afterTransform",(()=>{this.instance.isCurrentSlide(e)&&this.onRefresh()})),this.instance.isCurrentSlide(e)&&this.onRefresh()}createContainer(){const t=this.instance.container;if(!t)return null;const e=this.option("parentEl")||t,i=document.createElement("div");return S(i,"fancybox__toolbar"),e.prepend(i),i.addEventListener("click",this.onClick,{passive:!1,capture:!0}),t&&S(t,"has-toolbar"),this.container=i,i}createEl(t){const e=this.instance,i=e.carousel;if(!i)return null;if("toggleFS"===t)return null;if("fullscreen"===t&&!e.fsAPI)return null;let s=null;const o=i.slides.length||0;let a=0,r=0;for(const t of i.slides)(t.panzoom||"image"===t.type)&&a++,("image"===t.type||t.downloadSrc)&&r++;if(o<2&&["infobar","prev","next"].includes(t))return s;if(void 0!==jt[t]&&!a)return null;if("download"===t&&!r)return null;if("thumbs"===t){const t=e.plugins.Thumbs;if(!t||!t.isEnabled)return null}if("slideshow"===t){if(!i.plugins.Autoplay||o<2)return null}if(void 0!==jt[t]){const e=jt[t];s=document.createElement("button"),s.setAttribute("title",this.instance.localize(`{{${t.toUpperCase()}}}`)),S(s,"f-button"),e.action&&(s.dataset.panzoomAction=e.action),e.change&&(s.dataset.panzoomChange=JSON.stringify(e.change)),s.appendChild(n(this.instance.localize(e.icon)))}else{const e=(this.option("items")||[])[t];e&&(s=n(this.instance.localize(e.tpl)),"function"==typeof e.click&&s.addEventListener("click",(t=>{t.preventDefault(),t.stopPropagation(),"function"==typeof e.click&&e.click.call(this,this,t)})))}const l=null==s?void 0:s.querySelector("svg");if(l)for(const[t,e]of Object.entries(Nt))l.getAttribute(t)||l.setAttribute(t,String(e));return s}removeContainer(){const t=this.container;t&&t.remove(),this.container=null,this.state=Ht.Disabled;const e=this.instance.container;e&&E(e,"has-toolbar")}attach(){const t=this,e=t.instance;e.on("Carousel.initSlides",t.onReady),e.on("done",t.onDone),e.on(["reveal","Carousel.change"],t.onChange),t.onReady(t.instance)}detach(){const t=this,e=t.instance;e.off("Carousel.initSlides",t.onReady),e.off("done",t.onDone),e.off(["reveal","Carousel.change"],t.onChange),t.removeContainer()}}Object.defineProperty(_t,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Bt});const $t={Hash:rt,Html:wt,Images:ht,Slideshow:Ct,Thumbs:Ft,Toolbar:_t},Wt="with-fancybox",Xt="hide-scrollbar",qt="--fancybox-scrollbar-compensate",Yt="--fancybox-body-margin",Vt="is-using-tab",Zt="is-animated",Ut="is-compact",Gt="is-loading",Kt="has-caption",Jt="disabled",Qt="tabindex",te="download",ee="href",ie="src",ne=t=>"string"==typeof t,se=function(){var t=window.getSelection();return t&&"Range"===t.type};let oe=null,ae=null;const re=new Map;let le=0;class ce extends g{get isIdle(){return this.idle}get isCompact(){return this.option("compact")}constructor(t=[],e={},i={}){super(e),Object.defineProperty(this,"userSlides",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"userPlugins",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"idle",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"idleTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"clickTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"pwt",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"ignoreFocusChange",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:st.Init}),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"caption",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"carousel",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"lastFocus",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"prevMouseMoveEvent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"fsAPI",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.fsAPI=(()=>{let t,e="",i="",n="";return document.fullscreenEnabled?(e="requestFullscreen",i="exitFullscreen",n="fullscreenElement"):document.webkitFullscreenEnabled&&(e="webkitRequestFullscreen",i="webkitExitFullscreen",n="webkitFullscreenElement"),e&&(t={request:function(t){return"webkitRequestFullscreen"===e?t[e](Element.ALLOW_KEYBOARD_INPUT):t[e]()},exit:function(){return document[n]&&document[i]()},isFullscreen:function(){return document[n]}}),t})(),this.id=e.id||++le,re.set(this.id,this),this.userSlides=t,this.userPlugins=i,queueMicrotask((()=>{this.init()}))}init(){if(this.state===st.Destroy)return;this.state=st.Init,this.attachPlugins(Object.assign(Object.assign({},ce.Plugins),this.userPlugins)),this.emit("init"),this.emit("attachPlugins"),!0===this.option("hideScrollbar")&&(()=>{if(!Q)return;const t=document,e=t.body,i=t.documentElement;if(e.classList.contains(Xt))return;let n=window.innerWidth-i.getBoundingClientRect().width;const s=parseFloat(window.getComputedStyle(e).marginRight);n<0&&(n=0),i.style.setProperty(qt,`${n}px`),s&&e.style.setProperty(Yt,`${s}px`),e.classList.add(Xt)})(),this.initLayout(),this.scale();const t=()=>{this.initCarousel(this.userSlides),this.state=st.Ready,this.attachEvents(),this.emit("ready"),setTimeout((()=>{this.container&&this.container.setAttribute("aria-hidden","false")}),16)},e=this.fsAPI;this.option("Fullscreen.autoStart")&&e&&!e.isFullscreen()?e.request(this.container).then((()=>t())).catch((()=>t())):t()}initLayout(){var t,e;const i=this.option("parentEl")||document.body,s=n(this.localize(this.option("tpl.main")||""));s&&(s.setAttribute("id",`fancybox-${this.id}`),s.setAttribute("aria-label",this.localize("{{MODAL}}")),s.classList.toggle(Ut,this.isCompact),S(s,this.option("mainClass")||""),this.container=s,this.footer=s.querySelector(".fancybox__footer"),i.appendChild(s),S(document.documentElement,Wt),oe&&ae||(oe=document.createElement("span"),S(oe,"fancybox-focus-guard"),oe.setAttribute(Qt,"0"),oe.setAttribute("aria-hidden","true"),oe.setAttribute("aria-label","Focus guard"),ae=oe.cloneNode(),null===(t=s.parentElement)||void 0===t||t.insertBefore(oe,s),null===(e=s.parentElement)||void 0===e||e.append(ae)),s.addEventListener("mousedown",(()=>{E(s,Vt)})),this.option("animated")&&(S(s,Zt),setTimeout((()=>{this.isClosing()||E(s,Zt)}),350)),this.emit("initLayout"))}initCarousel(t){const i=this.container;if(!i)return;const n=i.querySelector(".fancybox__carousel");if(!n)return;const s=this.carousel=new K(n,u({},{slides:t,transition:"fade",Panzoom:{lockAxis:this.option("dragToClose")?"xy":"x",infinite:!!this.option("dragToClose")&&"y"},Dots:!1,Navigation:{classes:{container:"fancybox__nav",button:"f-button",isNext:"is-next",isPrev:"is-prev"}},initialPage:this.option("startIndex"),l10n:this.option("l10n")},this.option("Carousel")||{}));s.on("*",((t,e,...i)=>{this.emit(`Carousel.${e}`,t,...i)})),s.on(["ready","change"],(()=>{this.manageCaption()})),this.on("Carousel.removeSlide",((t,e,i)=>{this.clearContent(i),i.state=void 0})),s.on("Panzoom.touchStart",(()=>{var t,e;this.isCompact||this.endIdle(),(null===(t=document.activeElement)||void 0===t?void 0:t.closest(".f-thumbs"))&&(null===(e=this.container)||void 0===e||e.focus())})),s.on("settle",(()=>{this.idleTimer||this.isCompact||!this.option("idle")||this.setIdle(),this.option("autoFocus")&&!this.isClosing&&this.checkFocus()})),this.option("dragToClose")&&(s.on("Panzoom.afterTransform",((t,i)=>{const n=this.getSlide();if(n&&e(n.el))return;const s=this.container;if(s){const t=Math.abs(i.current.f),e=t<1?"":Math.max(.5,Math.min(1,1-t/i.contentRect.fitHeight*1.5));s.style.setProperty("--fancybox-ts",e?"0s":""),s.style.setProperty("--fancybox-opacity",e+"")}})),s.on("Panzoom.touchEnd",((t,i,n)=>{var s;const o=this.getSlide();if(o&&e(o.el))return;if(i.isMobile&&document.activeElement&&-1!==["TEXTAREA","INPUT"].indexOf(null===(s=document.activeElement)||void 0===s?void 0:s.nodeName))return;const a=Math.abs(i.dragOffset.y);"y"===i.lockedAxis&&(a>=200||a>=50&&i.dragOffset.time<300)&&(n&&n.cancelable&&n.preventDefault(),this.close(n,"f-throwOut"+(i.current.f<0?"Up":"Down")))}))),s.on("change",(t=>{var e;let i=null===(e=this.getSlide())||void 0===e?void 0:e.triggerEl;if(i){const e=new CustomEvent("slideTo",{bubbles:!0,cancelable:!0,detail:t.page});i.dispatchEvent(e)}})),s.on(["refresh","change"],(t=>{const e=this.container;if(!e)return;for(const i of e.querySelectorAll("[data-fancybox-current-index]"))i.innerHTML=t.page+1;for(const i of e.querySelectorAll("[data-fancybox-count]"))i.innerHTML=t.pages.length;if(!t.isInfinite){for(const i of e.querySelectorAll("[data-fancybox-next]"))t.page<t.pages.length-1?(i.removeAttribute(Jt),i.removeAttribute(Qt)):(i.setAttribute(Jt,""),i.setAttribute(Qt,"-1"));for(const i of e.querySelectorAll("[data-fancybox-prev]"))t.page>0?(i.removeAttribute(Jt),i.removeAttribute(Qt)):(i.setAttribute(Jt,""),i.setAttribute(Qt,"-1"))}const i=this.getSlide();if(!i)return;let n=i.downloadSrc||"";n||"image"!==i.type||i.error||!ne(i[ie])||(n=i[ie]);for(const t of e.querySelectorAll("[data-fancybox-download]")){const e=i.downloadFilename;n?(t.removeAttribute(Jt),t.removeAttribute(Qt),t.setAttribute(ee,n),t.setAttribute(te,e||n),t.setAttribute("target","_blank")):(t.setAttribute(Jt,""),t.setAttribute(Qt,"-1"),t.removeAttribute(ee),t.removeAttribute(te))}})),this.emit("initCarousel")}attachEvents(){const t=this,e=t.container;if(!e)return;e.addEventListener("click",t.onClick,{passive:!1,capture:!1}),e.addEventListener("wheel",t.onWheel,{passive:!1,capture:!1}),document.addEventListener("keydown",t.onKeydown,{passive:!1,capture:!0}),document.addEventListener("visibilitychange",t.onVisibilityChange,!1),document.addEventListener("mousemove",t.onMousemove),t.option("trapFocus")&&document.addEventListener("focus",t.onFocus,!0),window.addEventListener("resize",t.onResize);const i=window.visualViewport;i&&(i.addEventListener("scroll",t.onResize),i.addEventListener("resize",t.onResize))}detachEvents(){const t=this,e=t.container;if(!e)return;document.removeEventListener("keydown",t.onKeydown,{passive:!1,capture:!0}),e.removeEventListener("wheel",t.onWheel,{passive:!1,capture:!1}),e.removeEventListener("click",t.onClick,{passive:!1,capture:!1}),document.removeEventListener("mousemove",t.onMousemove),window.removeEventListener("resize",t.onResize);const i=window.visualViewport;i&&(i.removeEventListener("resize",t.onResize),i.removeEventListener("scroll",t.onResize)),document.removeEventListener("visibilitychange",t.onVisibilityChange,!1),document.removeEventListener("focus",t.onFocus,!0)}scale(){const t=this.container;if(!t)return;const e=window.visualViewport,i=Math.max(1,(null==e?void 0:e.scale)||1);let n="",s="",o="";if(e&&i>1){let t=`${e.offsetLeft}px`,a=`${e.offsetTop}px`;n=e.width*i+"px",s=e.height*i+"px",o=`translate3d(${t}, ${a}, 0) scale(${1/i})`}t.style.transform=o,t.style.width=n,t.style.height=s}onClick(t){var e,i;const{container:n,isCompact:s}=this;if(!n||this.isClosing())return;!s&&this.option("idle")&&this.resetIdle();const o=t.composedPath()[0];if(o.closest(".f-spinner")||o.closest("[data-fancybox-close]"))return t.preventDefault(),void this.close(t);if(o.closest("[data-fancybox-prev]"))return t.preventDefault(),void this.prev();if(o.closest("[data-fancybox-next]"))return t.preventDefault(),void this.next();const a=document.activeElement;if(se()&&a&&n.contains(a))return;if(o===(null===(e=this.carousel)||void 0===e?void 0:e.container))return;if(s&&"image"===(null===(i=this.getSlide())||void 0===i?void 0:i.type))return void(this.clickTimer?(clearTimeout(this.clickTimer),this.clickTimer=null):this.clickTimer=setTimeout((()=>{this.toggleIdle(),this.clickTimer=null}),350));if(this.emit("click",t),t.defaultPrevented)return;let r=!1;if(o.closest(".fancybox__content")){if(a){if(a.closest("[contenteditable]"))return;o.matches(et)||a.blur()}if(se())return;r=this.option("contentClick")}else o.closest(".fancybox__carousel")&&!o.matches(et)&&(r=this.option("backdropClick"));"close"===r?(t.preventDefault(),this.close(t)):"next"===r?(t.preventDefault(),this.next()):"prev"===r&&(t.preventDefault(),this.prev())}onWheel(t){const e=t.target;let n=this.option("wheel",t);e.closest(".fancybox__thumbs")&&(n="slide");const s="slide"===n,o=[-t.deltaX||0,-t.deltaY||0,-t.detail||0].reduce((function(t,e){return Math.abs(e)>Math.abs(t)?e:t})),a=Math.max(-1,Math.min(1,o)),r=Date.now();this.pwt&&r-this.pwt<300?s&&t.preventDefault():(this.pwt=r,this.emit("wheel",t,a),t.defaultPrevented||("close"===n?(t.preventDefault(),this.close(t)):"slide"===n&&(i(e)||(t.preventDefault(),this[a>0?"prev":"next"]()))))}onKeydown(t){if(!this.isTopmost())return;this.isCompact||!this.option("idle")||this.isClosing()||this.resetIdle();const e=t.key,i=this.option("keyboard");if(!i)return;const n=t.composedPath()[0],s=document.activeElement&&document.activeElement.classList,o=s&&s.contains("f-button")||n.dataset.carouselPage||n.dataset.carouselIndex;if("Escape"!==e&&!o&&x(n)){if(n.isContentEditable||-1!==["TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].indexOf(n.nodeName))return}if("Tab"===t.key?S(this.container,Vt):E(this.container,Vt),t.ctrlKey||t.altKey||t.shiftKey)return;this.emit("keydown",e,t);const a=i[e];a&&"function"==typeof this[a]&&(t.preventDefault(),this[a]())}onResize(){const t=this.container;if(!t)return;const e=this.isCompact;t.classList.toggle(Ut,e),this.manageCaption(this.getSlide()),this.isCompact?this.clearIdle():this.endIdle(),this.scale(),this.emit("resize")}onFocus(t){this.isTopmost()&&this.checkFocus(t)}onMousemove(t){this.prevMouseMoveEvent=t,!this.isCompact&&this.option("idle")&&this.resetIdle()}onVisibilityChange(){"visible"===document.visibilityState?this.checkFocus():this.endIdle()}manageCloseBtn(t){const e=this.optionFor(t,"closeButton")||!1;if("auto"===e){const t=this.plugins.Toolbar;if(t&&t.state===Ht.Ready)return}if(!e)return;if(!t.contentEl||t.closeBtnEl)return;const i=this.option("tpl.closeButton");if(i){const e=n(this.localize(i));t.closeBtnEl=t.contentEl.appendChild(e),t.el&&S(t.el,"has-close-btn")}}manageCaption(t=void 0){var e,i;const n="fancybox__caption",s=this.container;if(!s)return;E(s,Kt);const o=this.isCompact||this.option("commonCaption"),a=!o;if(this.caption&&this.stop(this.caption),a&&this.caption&&(this.caption.remove(),this.caption=null),o&&!this.caption)for(const t of(null===(e=this.carousel)||void 0===e?void 0:e.slides)||[])t.captionEl&&(t.captionEl.remove(),t.captionEl=void 0,E(t.el,Kt),null===(i=t.el)||void 0===i||i.removeAttribute("aria-labelledby"));if(t||(t=this.getSlide()),!t||o&&!this.isCurrentSlide(t))return;const r=t.el;let l=this.optionFor(t,"caption","");if(!l)return void(o&&this.caption&&this.animate(this.caption,"f-fadeOut",(()=>{this.caption&&(this.caption.innerHTML="")})));let c=null;if(a){if(c=t.captionEl||null,r&&!c){const e=n+`_${this.id}_${t.index}`;c=document.createElement("div"),S(c,n),c.setAttribute("id",e),t.captionEl=r.appendChild(c),S(r,Kt),r.setAttribute("aria-labelledby",e)}}else{if(c=this.caption,c||(c=s.querySelector("."+n)),!c){c=document.createElement("div"),c.dataset.fancyboxCaption="",S(c,n);(this.footer||s).prepend(c)}S(s,Kt),this.caption=c}c&&(c.innerHTML="",ne(l)||"number"==typeof l?c.innerHTML=l+"":l instanceof HTMLElement&&c.appendChild(l))}checkFocus(t){this.focus(t)}focus(t){var e;if(this.ignoreFocusChange)return;const i=document.activeElement||null,n=(null==t?void 0:t.target)||null,s=this.container,o=this.getSlide();if(!s||!(null===(e=this.carousel)||void 0===e?void 0:e.viewport))return;if(!t&&i&&s.contains(i))return;const a=o&&o.state===ot.Ready?o.el:null;if(!a||a.contains(i)||s===i)return;t&&t.cancelable&&t.preventDefault(),this.ignoreFocusChange=!0;const r=Array.from(s.querySelectorAll(et));let l=[],c=null;for(let t of r){const e=!t.offsetParent||!!t.closest('[aria-hidden="true"]'),i=a&&a.contains(t),n=!this.carousel.viewport.contains(t);if(t===s||(i||n)&&!e){l.push(t);const e=t.dataset.origTabindex;void 0!==e&&e&&(t.tabIndex=parseFloat(e)),t.removeAttribute("data-orig-tabindex"),!t.hasAttribute("autoFocus")&&c||(c=t)}else{const e=void 0===t.dataset.origTabindex?t.getAttribute("tabindex")||"":t.dataset.origTabindex;e&&(t.dataset.origTabindex=e),t.tabIndex=-1}}let h=null;t?(!n||l.indexOf(n)<0)&&(h=c||s,l.length&&(i===ae?h=l[0]:this.lastFocus!==s&&i!==oe||(h=l[l.length-1]))):h=o&&"image"===o.type?s:c||s,h&&it(h),this.lastFocus=document.activeElement,this.ignoreFocusChange=!1}next(){const t=this.carousel;t&&t.pages.length>1&&t.slideNext()}prev(){const t=this.carousel;t&&t.pages.length>1&&t.slidePrev()}jumpTo(...t){this.carousel&&this.carousel.slideTo(...t)}isTopmost(){var t;return(null===(t=ce.getInstance())||void 0===t?void 0:t.id)==this.id}animate(t=null,e="",i){if(!t||!e)return void(i&&i());this.stop(t);const n=s=>{s.target===t&&t.dataset.animationName&&(t.removeEventListener("animationend",n),delete t.dataset.animationName,i&&i(),E(t,e))};t.dataset.animationName=e,t.addEventListener("animationend",n),S(t,e)}stop(t){t&&t.dispatchEvent(new CustomEvent("animationend",{bubbles:!1,cancelable:!0,currentTarget:t}))}setContent(t,e="",i=!0){if(this.isClosing())return;const s=t.el;if(!s)return;let o=null;if(x(e)?o=e:(o=n(e+""),x(o)||(o=document.createElement("div"),o.innerHTML=e+"")),["img","picture","iframe","video","audio"].includes(o.nodeName.toLowerCase())){const t=document.createElement("div");t.appendChild(o),o=t}x(o)&&t.filter&&!t.error&&(o=o.querySelector(t.filter)),o&&x(o)?(S(o,"fancybox__content"),t.id&&o.setAttribute("id",t.id),"none"!==o.style.display&&"none"!==getComputedStyle(o).getPropertyValue("display")||(o.style.display=t.display||this.option("defaultDisplay")||"flex"),s.classList.add(`has-${t.error?"error":t.type||"unknown"}`),s.prepend(o),t.contentEl=o,i&&this.revealContent(t),this.manageCloseBtn(t),this.manageCaption(t)):this.setError(t,"{{ELEMENT_NOT_FOUND}}")}revealContent(t,e){const i=t.el,n=t.contentEl;i&&n&&(this.emit("reveal",t),this.hideLoading(t),t.state=ot.Opening,(e=this.isOpeningSlide(t)?void 0===e?this.optionFor(t,"showClass"):e:"f-fadeIn")?this.animate(n,e,(()=>{this.done(t)})):this.done(t))}done(t){this.isClosing()||(t.state=ot.Ready,this.emit("done",t),S(t.el,"is-done"),this.isCurrentSlide(t)&&this.option("autoFocus")&&queueMicrotask((()=>{var e;null===(e=t.panzoom)||void 0===e||e.updateControls(),this.option("autoFocus")&&(this.option("autoFocus")?this.focus():this.checkFocus())})),this.isOpeningSlide(t)&&!this.isCompact&&this.option("idle")&&this.setIdle())}isCurrentSlide(t){const e=this.getSlide();return!(!t||!e)&&e.index===t.index}isOpeningSlide(t){var e,i;return null===(null===(e=this.carousel)||void 0===e?void 0:e.prevPage)&&t.index===(null===(i=this.getSlide())||void 0===i?void 0:i.index)}showLoading(t){t.state=ot.Loading;const e=t.el;if(!e)return;S(e,Gt),this.emit("loading",t),t.spinnerEl||setTimeout((()=>{if(!this.isClosing()&&!t.spinnerEl&&t.state===ot.Loading){let i=n(w);t.spinnerEl=i,e.prepend(i),this.animate(i,"f-fadeIn")}}),250)}hideLoading(t){const e=t.el;if(!e)return;const i=t.spinnerEl;this.isClosing()?null==i||i.remove():(E(e,Gt),i&&this.animate(i,"f-fadeOut",(()=>{i.remove()})),t.state===ot.Loading&&(this.emit("loaded",t),t.state=ot.Ready))}setError(t,e){if(this.isClosing())return;const i=new Event("error",{bubbles:!0,cancelable:!0});if(this.emit("error",i,t),i.defaultPrevented)return;t.error=e,this.hideLoading(t),this.clearContent(t);const n=document.createElement("div");n.classList.add("fancybox-error"),n.innerHTML=this.localize(e||"<p>{{ERROR}}</p>"),this.setContent(t,n)}clearContent(t){if(void 0===t.state)return;this.emit("clearContent",t),t.contentEl&&(t.contentEl.remove(),t.contentEl=void 0);const e=t.el;e&&(E(e,"has-error"),E(e,"has-unknown"),E(e,`has-${t.type||"unknown"}`)),t.closeBtnEl&&t.closeBtnEl.remove(),t.closeBtnEl=void 0,t.captionEl&&t.captionEl.remove(),t.captionEl=void 0,t.spinnerEl&&t.spinnerEl.remove(),t.spinnerEl=void 0}getSlide(){var t;const e=this.carousel;return(null===(t=null==e?void 0:e.pages[null==e?void 0:e.page])||void 0===t?void 0:t.slides[0])||void 0}close(t,e){if(this.isClosing())return;const i=new Event("shouldClose",{bubbles:!0,cancelable:!0});if(this.emit("shouldClose",i,t),i.defaultPrevented)return;t&&t.cancelable&&(t.preventDefault(),t.stopPropagation());const n=this.fsAPI,s=()=>{this.proceedClose(t,e)};n&&n.isFullscreen()===this.container?Promise.resolve(n.exit()).then((()=>s())):s()}clearIdle(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=null}setIdle(t=!1){const e=()=>{this.clearIdle(),this.idle=!0,S(this.container,"is-idle"),this.emit("setIdle")};if(this.clearIdle(),!this.isClosing())if(t)e();else{const t=this.option("idle");t&&(this.idleTimer=setTimeout(e,t))}}endIdle(){this.clearIdle(),this.idle&&!this.isClosing()&&(this.idle=!1,E(this.container,"is-idle"),this.emit("endIdle"))}resetIdle(){this.endIdle(),this.setIdle()}toggleIdle(){this.idle?this.endIdle():this.setIdle(!0)}toggleFullscreen(){const t=this.fsAPI;t&&(t.isFullscreen()?t.exit():this.container&&t.request(this.container))}isClosing(){return[st.Closing,st.CustomClosing,st.Destroy].includes(this.state)}proceedClose(t,e){var i,n;this.state=st.Closing,this.clearIdle(),this.detachEvents();const s=this.container,o=this.carousel,a=this.getSlide(),r=a&&this.option("placeFocusBack")?a.triggerEl||this.option("triggerEl"):null;if(r&&(J(r)?it(r):r.focus()),s&&(S(s,"is-closing"),s.setAttribute("aria-hidden","true"),this.option("animated")&&S(s,Zt),s.style.pointerEvents="none"),o){o.clearTransitions(),null===(i=o.panzoom)||void 0===i||i.destroy(),null===(n=o.plugins.Navigation)||void 0===n||n.detach();for(const t of o.slides){t.state=ot.Closing,this.hideLoading(t);const e=t.contentEl;e&&this.stop(e);const i=null==t?void 0:t.panzoom;i&&(i.stop(),i.detachEvents(),i.detachObserver()),this.isCurrentSlide(t)||o.emit("removeSlide",t)}}this.emit("close",t),this.state!==st.CustomClosing?(void 0===e&&a&&(e=this.optionFor(a,"hideClass")),e&&a?(this.animate(a.contentEl,e,(()=>{o&&o.emit("removeSlide",a)})),setTimeout((()=>{this.destroy()}),500)):this.destroy()):setTimeout((()=>{this.destroy()}),500)}destroy(){var t;if(this.state===st.Destroy)return;this.state=st.Destroy,null===(t=this.carousel)||void 0===t||t.destroy();const e=this.container;e&&e.remove(),re.delete(this.id);const i=ce.getInstance();i?i.focus():(oe&&(oe.remove(),oe=null),ae&&(ae.remove(),ae=null),E(document.documentElement,Wt),(()=>{if(!Q)return;const t=document,e=t.body;e.classList.remove(Xt),e.style.setProperty(Yt,""),t.documentElement.style.setProperty(qt,"")})(),this.emit("destroy"))}static bind(t,e,i){if(!Q)return;let n,s="",o={};if(void 0===t?n=document.body:ne(t)?(n=document.body,s=t,"object"==typeof e&&(o=e||{})):(n=t,ne(e)&&(s=e),"object"==typeof i&&(o=i||{})),!n||!x(n))return;s=s||"[data-fancybox]";const a=ce.openers.get(n)||new Map;a.set(s,o),ce.openers.set(n,a),1===a.size&&n.addEventListener("click",ce.fromEvent)}static unbind(t,e){let i,n="";if(ne(t)?(i=document.body,n=t):(i=t,ne(e)&&(n=e)),!i)return;const s=ce.openers.get(i);s&&n&&s.delete(n),n&&s||(ce.openers.delete(i),i.removeEventListener("click",ce.fromEvent))}static destroy(){let t;for(;t=ce.getInstance();)t.destroy();for(const t of ce.openers.keys())t.removeEventListener("click",ce.fromEvent);ce.openers=new Map}static fromEvent(t){if(t.defaultPrevented)return;if(t.button&&0!==t.button)return;if(t.ctrlKey||t.metaKey||t.shiftKey)return;let e=t.composedPath()[0];const i=e.closest("[data-fancybox-trigger]");if(i){const t=i.dataset.fancyboxTrigger||"",n=document.querySelectorAll(`[data-fancybox="${t}"]`),s=parseInt(i.dataset.fancyboxIndex||"",10)||0;e=n[s]||e}if(!(e&&e instanceof Element))return;let n,s,o,a;if([...ce.openers].reverse().find((([t,i])=>!(!t.contains(e)||![...i].reverse().find((([i,r])=>{let l=e.closest(i);return!!l&&(n=t,s=i,o=l,a=r,!0)}))))),!n||!s||!o)return;a=a||{},t.preventDefault(),e=o;let r=[],l=u({},nt,a);l.event=t,l.triggerEl=e,l.delegate=i;const c=l.groupAll,h=l.groupAttr,d=h&&e?e.getAttribute(`${h}`):"";if((!e||d||c)&&(r=[].slice.call(n.querySelectorAll(s))),e&&!c&&(r=d?r.filter((t=>t.getAttribute(`${h}`)===d)):[e]),!r.length)return;const f=ce.getInstance();return f&&f.options.triggerEl&&r.indexOf(f.options.triggerEl)>-1?void 0:(e&&(l.startIndex=r.indexOf(e)),ce.fromNodes(r,l))}static fromSelector(t,e,i){let n=null,s="",o={};if(ne(t)?(n=document.body,s=t,"object"==typeof e&&(o=e||{})):t instanceof HTMLElement&&ne(e)&&(n=t,s=e,"object"==typeof i&&(o=i||{})),!n||!s)return!1;const a=ce.openers.get(n);return!!a&&(o=u({},a.get(s)||{},o),!!o&&ce.fromNodes(Array.from(n.querySelectorAll(s)),o))}static fromNodes(t,e){e=u({},nt,e||{});const i=[];for(const n of t){const t=n.dataset||{},s=t[ie]||n.getAttribute(ee)||n.getAttribute("currentSrc")||n.getAttribute(ie)||void 0;let o;const a=e.delegate;let r;a&&i.length===e.startIndex&&(o=a instanceof HTMLImageElement?a:a.querySelector("img:not([aria-hidden])")),o||(o=n instanceof HTMLImageElement?n:n.querySelector("img:not([aria-hidden])")),o&&(r=o.currentSrc||o[ie]||void 0,!r&&o.dataset&&(r=o.dataset.lazySrc||o.dataset[ie]||void 0));const l={src:s,triggerEl:n,thumbEl:o,thumbElSrc:r,thumbSrc:r};for(const e in t){let i=t[e]+"";i="false"!==i&&("true"===i||i),l[e]=i}i.push(l)}return new ce(i,e)}static getInstance(t){if(t)return re.get(t);return Array.from(re.values()).reverse().find((t=>!t.isClosing()&&t))||null}static getSlide(){var t;return(null===(t=ce.getInstance())||void 0===t?void 0:t.getSlide())||null}static show(t=[],e={}){return new ce(t,e)}static next(){const t=ce.getInstance();t&&t.next()}static prev(){const t=ce.getInstance();t&&t.prev()}static close(t=!0,...e){if(t)for(const t of re.values())t.close(...e);else{const t=ce.getInstance();t&&t.close(...e)}}}Object.defineProperty(ce,"version",{enumerable:!0,configurable:!0,writable:!0,value:"5.0.28"}),Object.defineProperty(ce,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:nt}),Object.defineProperty(ce,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:$t}),Object.defineProperty(ce,"openers",{enumerable:!0,configurable:!0,writable:!0,value:new Map});
18
19
20/***/ }),
21
22/***/ "./library/js/libs/p81-accordion.js":
23/*!******************************************!*\
24  !*** ./library/js/libs/p81-accordion.js ***!
25  \******************************************/
26/***/ (() => {
27
28jQuery(document).ready(function ($) {
29  // Code for accordions
30  var $hdr = "h2"; // set heading level to look out for
31  var $acc_id = 1; // global id counter
32
33  /* The setup function that runs when the page has loaded */
34
35  // Firstly, look for all headers of the right level within an accordion container
36  $(".accordion-container").find(".accordion-strip >" + $hdr).each(function () {
37    // Store current ID value
38    var $this_id = $acc_id;
39    // Get the current contents of the header
40    var $this_text = $(this).text();
41
42    // empty the header
43    $(this).empty();
44
45    // Construct the button string with the attributes we need
46    var $this_button = '<button data-id="' + $this_id + '" id="accordion-button-' + $this_id + '" ' + ' aria-controls="accordion-panel-' + $this_id + '" aria-expanded="false">' + $this_text + "</button>";
47
48    // Add the button string into the heading
49    $(this).append($this_button);
50
51    // Get the set of elements between this header and the next header, or the end of
52    // the accordion container
53    var $set = $(this).nextUntil($hdr);
54
55    // Set up the panel string
56    var $this_panel = '<div class="accordion-panel hidden" id="accordion-panel-' + $this_id + '" aria-labelledby="accordion-button-' + $this_id + '"></div>';
57
58    // Wrap everything in a <div> with the necessary elements included.
59    // This will be the accordion panel that is hidden by default and shown on demand.
60    $set.wrapAll($this_panel);
61
62    // Now increment the $acc_id value ready for the next one
63    $acc_id++;
64  });
65
66  // Now set up the event listeners
67  // Look for all buttons that are inside a correct level heading inside the accordion container
68  $(".accordion-container").find($hdr).find("button").on("click", function (e) {
69    var $thisId = $(this).attr("data-id");
70    if ($(this).attr("aria-expanded") == "true") {
71      hideAccordion($(this));
72      $(this).focus();
73    } else {
74      showAccordion($(this));
75    }
76  }).on("keydown", function (e) {
77    if (e.key !== "Escape") {
78      return;
79    }
80    if ($(this).attr("aria-expanded") !== "true") {
81      return;
82    }
83    hideAccordion($(this));
84    e.preventDefault();
85  });
86  function showAccordion(obj) {
87    // Being passed a button
88    var $thisId = $(obj).attr("data-id");
89    var $panel = $("#accordion-panel-" + $thisId);
90    // console.log("In showAccordion - "+$thisId);
91    $(obj).closest(".accordion-strip").addClass("active");
92    $($panel).removeClass("hidden");
93    $(obj).attr("aria-expanded", "true");
94    $(obj).focus();
95  }
96  function hideAccordion(obj) {
97    // Being passed a button
98    var $thisId = $(obj).attr("data-id");
99    var $panel = $("#accordion-panel-" + $thisId);
100    //  console.log("In hideAccordion - " + $thisId);
101    $(obj).closest(".accordion-strip").removeClass("active");
102    $($panel).addClass("hidden");
103    $(obj).attr("aria-expanded", "false");
104    $(obj).focus();
105  }
106});
107
108/***/ }),
109
110/***/ "./library/js/libs/p81-sliders.js":
111/*!****************************************!*\
112  !*** ./library/js/libs/p81-sliders.js ***!
113  \****************************************/
114/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
115
116"use strict";
117__webpack_require__.r(__webpack_exports__);
118/* harmony import */ var swiper_bundle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper/bundle */ "./node_modules/swiper/swiper-bundle.mjs");
119/* harmony import */ var swiper_css_bundle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! swiper/css/bundle */ "./node_modules/swiper/swiper-bundle.css");
120var $ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");
121
122
123var prefersReducedMotion = typeof window.matchMedia === 'function' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
124var hpHeroSlider = new swiper_bundle__WEBPACK_IMPORTED_MODULE_0__["default"]('.hp-hero__slider', {
125  slidesPerView: 1,
126  loop: true,
127  effect: 'fade',
128  autoplay: prefersReducedMotion ? false : {
129    delay: 5000
130  },
131  pagination: {
132    el: '.hp-hero__slider .swiper-pagination',
133    clickable: true
134  }
135});
136if (!prefersReducedMotion && hpHeroSlider.autoplay) {
137  $(".hp-hero__slider__nav .autoplay-toggle").on('click', function (e) {
138    if ($(this).hasClass('pause')) {
139      hpHeroSlider.autoplay.stop();
140      $(this).removeClass('pause').addClass('play').attr("aria-label", "Play slider");
141    } else {
142      hpHeroSlider.autoplay.start();
143      $(this).removeClass('play').addClass('pause').attr("aria-label", "Pause slider");
144    }
145  });
146} else {
147  $(".hp-hero__slider__nav .autoplay-toggle").attr("hidden", true).attr("aria-hidden", "true");
148}
149var latestNewsSlider = new swiper_bundle__WEBPACK_IMPORTED_MODULE_0__["default"]('.latest-news__slider .swiper', {
150  slidesPerView: 1,
151  spaceBetween: 30,
152  loop: true,
153  navigation: {
154    nextEl: ".latest-news__slider__next",
155    prevEl: ".latest-news__slider__prev"
156  },
157  breakpoints: {
158    768: {
159      slidesPerView: 2,
160      spaceBetween: 30
161    },
162    1025: {
163      slidesPerView: 3,
164      spaceBetween: 30
165    }
166  }
167});
168var latestNewsSliderInner = new swiper_bundle__WEBPACK_IMPORTED_MODULE_0__["default"]('.latest-news__slider-inner .swiper', {
169  slidesPerView: 1,
170  spaceBetween: 30,
171  loop: true,
172  navigation: {
173    nextEl: ".latest-news__slider__next",
174    prevEl: ".latest-news__slider__prev"
175  },
176  breakpoints: {
177    768: {
178      slidesPerView: 2,
179      spaceBetween: 30
180    },
181    1025: {
182      slidesPerView: 3,
183      spaceBetween: 30
184    },
185    1200: {
186      slidesPerView: 4,
187      spaceBetween: 30
188    }
189  }
190});
191var videoEmbedSlider = new swiper_bundle__WEBPACK_IMPORTED_MODULE_0__["default"]('.video-embeds__wrap .swiper', {
192  slidesPerView: 1,
193  spaceBetween: 30,
194  loop: false,
195  navigation: {
196    nextEl: ".video-embeds__wrap__next",
197    prevEl: ".video-embeds__wrap__prev"
198  }
199});
200var imagesSlider = new swiper_bundle__WEBPACK_IMPORTED_MODULE_0__["default"]('.images-block__wrap--slider', {
201  slidesPerView: 1,
202  spaceBetween: 30,
203  loop: false,
204  navigation: {
205    nextEl: ".images-block__nav__next",
206    prevEl: ".images-block__nav__prev"
207  },
208  pagination: {
209    el: '.images-block__wrap--slider .swiper-pagination',
210    clickable: true,
211    dynamicBullets: true
212  }
213});
214
215/***/ }),
216
217/***/ "./library/js/scripts.js":
218/*!*******************************!*\
219  !*** ./library/js/scripts.js ***!
220  \*******************************/
221/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
222
223"use strict";
224__webpack_require__.r(__webpack_exports__);
225/* harmony import */ var _fancyapps_ui__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @fancyapps/ui */ "./node_modules/@fancyapps/ui/dist/index.esm.js");
226// FontAwesomeConfig = { searchPseudoElements: false };
227// import '@fortawesome/fontawesome-free/js/fontawesome';
228// import '@fortawesome/fontawesome-free/js/solid';
229// import '@fortawesome/fontawesome-free/js/brands';
230
231jQuery(document).ready(function ($) {
232  /* ====================== SHOW IE11 NOTIFICATION ====================== */
233  function showBrowserAlert() {
234    var ie11True = false;
235    // true on IE11, false on Edge and other IEs/browsers.
236    var isIE11 = !!window.MSInputMethodContext && !!document.documentMode,
237      ua = window.navigator.userAgent,
238      array,
239      // Declare the array variable
240      version; // Declare the version variable
241
242    if (ua.indexOf("AppleWebKit") > 0) {
243      ie11True = false;
244    } else if (ua.indexOf("Lunascape") > 0) {
245      ie11True = false;
246    } else if (ua.indexOf("Sleipnir") > 0) {
247      ie11True = false;
248    } else {
249      array = /(msie|rv:?)\s?([\d\.]+)/.exec(ua);
250      version = array ? array[2] : '';
251      ie11True = version === 11 || version == 11.0 || version == 10 || version == 10.0 ? true : false;
252    }
253    if (ie11True) {
254      $('<div class="unsupported-browser unsupported-browser--active"><div class="unsupported-browser__inner"><h3>Sorry about this, but...</h3><p>It looks like you\'re using Internet Explorer 10 or 11. Parts of this website may not work or display correctly. Please consider using a different browser.</p> <ul class="unsupported-browser__links"><li><a href="https://www.google.com/intl/en_uk/chrome/" target="_blank" class="unsupported-browser__link unsupported-browser__link--chrome" aria-label="Download Chrome"></a></li><li><a href="https://www.microsoft.com/en-us/edge" target="_blank" class="unsupported-browser__link unsupported-browser__link--edge" aria-label="Download Microsoft Edge" ></a></li><li><a href="https://www.mozilla.org/en-GB/firefox/new/" target="_blank" class="unsupported-browser__link unsupported-browser__link--firefox" aria-label="Download Firefox"></a></li></ul></div></div>').prependTo('body');
255    }
256  }
257  showBrowserAlert();
258
259  /* ====================== REMOVE EMPTY P TAG ======================  */
260  $('p').each(function () {
261    var $this = $(this);
262    if ($this.html().replace(/\s|&nbsp;/g, '').length == 0) $this.remove();
263  });
264
265  /* ====================== FANCYBOX FUNCTIONS ======================  */
266  var triggerEl;
267  _fancyapps_ui__WEBPACK_IMPORTED_MODULE_0__.Fancybox.bind("[data-fancybox]", {
268    on: {
269      done: function done(fancybox, slide) {
270        triggerEl = slide.triggerEl;
271        if (triggerEl) {
272          if (fancybox.state === 1) {
273            triggerEl.setAttribute("aria-expanded", "true");
274          }
275        }
276      },
277      close: function close(fancybox, slide) {
278        if (triggerEl) {
279          triggerEl.setAttribute("aria-expanded", "false");
280        }
281      }
282    }
283  });
284
285  /* ====================== FUNCTION TO CHECK IF ELEMENT IS IN VIEWPORT ======================  */
286  function isElementInViewport(element) {
287    var $element = $(element);
288
289    // Get the element's position and dimensions relative to the viewport
290    var elementTop = $element.offset().top;
291    var elementBottom = elementTop + $element.height();
292    var viewportTop = $(window).scrollTop();
293    var viewportBottom = viewportTop + $(window).height();
294
295    // Check if any part of the element is within the viewport
296    return elementBottom > viewportTop && elementTop < viewportBottom;
297  }
298
299  /* ====================== NAV MENU ITEM ======================  */
300
301  function mobile_nav() {
302    $('.nav li.menu-item-has-children > .menu-item__toggle').on("click", function (e) {
303      $(".nav li.menu-item-has-children").not($(this).parents('.menu-item-has-children')).removeClass('active');
304      if ($(this).attr('aria-expanded') === 'false') {
305        $(this).parent().addClass('active');
306        $(this).attr('aria-expanded', 'true');
307        $(this).next('.mega-menu__wrap').addClass('open');
308        $(this).next('.sub-menu').addClass('open');
309      } else if ($(this).attr('aria-expanded') === 'true') {
310        $(this).attr('aria-expanded', 'false');
311        $(this).parent().removeClass('active');
312        $(this).next('.mega-menu__wrap').removeClass('open');
313        $(this).next('.sub-menu').removeClass('open');
314      }
315    });
316    if ($(window).width() <= 1025) {
317      $('.nav li.back-step .back-to-menu').on("click", function (e) {
318        $(this).parent().parent('.sub-menu.open').removeClass('open');
319        $(this).parent().parent().parent().find('.menu-item__toggle').attr('aria-expanded', 'false');
320        $(this).parent().parent().parent().parent('.mega-menu__wrap.open').removeClass('open');
321        $(this).parent().parent().parent().parent().parent().find('.menu-item__toggle').attr('aria-expanded', 'false');
322      });
323      $('.header__top__nav-toggle').on("click", function (e) {
324        var $button = $(this);
325        var currentExpanded = $button.attr('aria-expanded');
326        var newExpanded = currentExpanded === 'true' ? 'false' : 'true';
327        $button.attr('aria-expanded', newExpanded);
328        $('.header__navigation').toggleClass('open');
329        if ($('.header__navigation').hasClass('open')) {
330          $button.attr('aria-label', 'Close menu navigation');
331          $('.header__top__nav-toggle__label').html('<i class="fa-solid fa-xmark"></i>Close');
332          window.scrollTo(0, 0);
333          $("html, body").addClass("noscroll");
334          var $first = $('.header__navigation').find('a, button').filter(':visible').first();
335          if ($first.length) {
336            $first.trigger('focus');
337          }
338        } else {
339          $button.attr('aria-label', 'Show menu navigation');
340          $('.header__top__nav-toggle__label').html('<i class="fa-solid fa-bars"></i>Menu');
341          $("html, body").removeClass("noscroll");
342          $(".header__navigation .mega-menu__wrap").removeClass('open');
343          $(".header__navigation .sub-menu").removeClass('open');
344          $('.nav li.menu-item-has-children > .menu-item__toggle').attr('aria-expanded', 'false');
345          $button.trigger('focus');
346        }
347      });
348    }
349    ;
350  }
351  ;
352  mobile_nav();
353  $(document).on('keydown', function (e) {
354    if (e.key !== 'Escape') {
355      return;
356    }
357    if ($('.header__top__search').hasClass('header__top__search--active')) {
358      $('.header__top__search .header__top__search__close').trigger('click');
359      e.preventDefault();
360      return;
361    }
362    if ($('.header__navigation').hasClass('open')) {
363      $('.header__top__nav-toggle').trigger('click');
364      e.preventDefault();
365    }
366  });
367
368  /* ====================== MOBILE SEARCH TOGGLE ======================  */
369  function mobile_search() {
370    if ($(window).width() <= 1025) {
371      $(".header__top__mobile-search").on('click', function (e) {
372        var $button = $(this);
373        var currentExpanded = $button.attr('aria-expanded');
374        var newExpanded = currentExpanded === 'true' ? 'false' : 'true';
375        $('.header__top__search').toggleClass('header__top__search--active');
376        $button.attr('aria-expanded', newExpanded);
377        var $buttonClose = $('.header__top__search__close');
378        var currentExpandedClose = $buttonClose.attr('aria-expanded');
379        var newExpandedClose = currentExpandedClose === 'true' ? 'false' : 'true';
380        $buttonClose.attr('aria-expanded', newExpandedClose);
381        var tabIndexElements = document.querySelectorAll('.header__top__search button, .header__top__search input');
382        tabIndexElements.forEach(function (element) {
383          var currentTabIndex = element.tabIndex;
384          var newExpanded = currentTabIndex === -1 ? 0 : -1;
385          element.setAttribute('tabIndex', newExpanded);
386        });
387        if ($('.header__navigation').hasClass('open')) {
388          $('.header').removeClass('header--nav-open');
389          $('.header__navigation').removeClass('open');
390          $("html, body").removeClass("noscroll");
391          $('.header__top__nav-toggle__label').html('<i class="fa-solid fa-bars"></i>Menu');
392          var _tabIndexElements = document.querySelectorAll('.nav > li > a, .nav .nav__droptoggle');
393          _tabIndexElements.forEach(function (element) {
394            element.setAttribute('tabIndex', -1);
395          });
396        }
397        setTimeout(function () {
398          $('.header__top__search .searchform input').focus();
399        }, 200);
400      });
401      $('.header__top__search .header__top__search__close').on("click", function (e) {
402        e.preventDefault();
403        var $button = $(this);
404        var currentExpanded = $button.attr('aria-expanded');
405        var newExpanded = currentExpanded === 'true' ? 'false' : 'true';
406        $button.attr('aria-expanded', newExpanded);
407        var tabIndexElements = document.querySelectorAll('.header__top__search button, .header__top__search input');
408        tabIndexElements.forEach(function (element) {
409          var currentTabIndex = element.tabIndex;
410          var newExpanded = currentTabIndex === -1 ? 0 : -1;
411          element.setAttribute('tabIndex', newExpanded);
412        });
413        $('.header__top__search').removeClass('header__top__search--active');
414        $('.header__top__mobile-search').attr('aria-expanded', 'false');
415        if ($(window).width() <= 1025) {
416          $('.header__top__mobile-search').trigger('focus');
417        }
418      });
419    }
420    ;
421  }
422  ;
423  mobile_search();
424
425  /* ====================== SERVICE FINDER A-Z ======================  */
426
427  $('.service-finder__letters button.letter').on("keydown click", function (e) {
428    if (e.type === 'keydown' && e.key !== 'Enter' && e.key !== ' ') {
429      return;
430    }
431    e.preventDefault();
432    $('.service-finder__letters button.letter').removeClass('letter--active').attr('aria-pressed', false);
433    $('.service-finder__clear').addClass('service-finder__clear--show');
434    $(this).addClass('letter--active').attr('aria-pressed', true);
435    var filterValue = $(this).data("letter").toUpperCase(); // Get the filter value and convert it to uppercase
436    $('.service-finder__results-group > li').each(function (index) {
437      var letter = $(this).data('letter').toUpperCase(); // Get the site name from the first column and convert it to uppercase
438      if (letter == filterValue || filterValue === '') {
439        // If the site name includes the filter value or filter is empty
440        $(this).show(); // Show the row
441        $(this).attr('aria-hidden', false);
442      } else {
443        $(this).hide(); // Hide the row
444        $(this).attr('aria-hidden', true);
445      }
446    });
447    var elementToCheck = $(".service-finder__results");
448    if (!isElementInViewport(elementToCheck)) {
449      $('html, body').animate({
450        scrollTop: elementToCheck.offset().top - 80
451      }, 1000); // Change the duration as needed (in milliseconds)
452    }
453  });
454  $('.service-finder__clear').on("click", function (e) {
455    e.preventDefault();
456    $(this).removeClass('service-finder__clear--show');
457    $('.service-finder__letters button.letter').removeClass('letter--active');
458    $('.service-finder__results-group > li').each(function (index) {
459      $(this).show(); // Show the row
460      $(this).attr('aria-hidden', false);
461    });
462  });
463
464  /* ====================== TRAVELINE INTEGRATION ======================  */
465  var CONFIG = {
466    tnjpID: "G-J4L3ER26JB",
467    formContainerId: "journeyPlannerForm",
468    resultsContainerId: "journeyPlannerResults",
469    mode: "Mobile",
470    callbacks: false,
471    history: true,
472    analytics: false,
473    scrollWrapper: "journey-results-container"
474  };
475  window.onload = function () {
476    if ($('#journeyPlannerForm').length) {
477      new MXDTraveline(CONFIG);
478    }
479  };
480
481  /* ====================== ORDER DOWNLOADS TABLE BY FILENAME SORT ======================  */
482  var ascendingFileName = false;
483  $('.download-search__list .sort--filename').on("click", function () {
484    var table = $('#download-table');
485    var columnIndex = 0; // Change this to the index of the column you want to sort
486    var rows = table.find('tbody tr').get();
487    rows.sort(function (a, b) {
488      var aValue = $(a).find('td').eq(columnIndex).text();
489      var bValue = $(b).find('td').eq(columnIndex).text();
490      return ascendingFileName ? aValue.localeCompare(bValue) : bValue.localeCompare(aValue);
491    });
492    $.each(rows, function (index, row) {
493      table.children('tbody').append(row);
494    });
495    ascendingFileName = !ascendingFileName;
496    updateSortFileName();
497  });
498  if ($('.download-search__list').length) {
499    var table = $('#download-table');
500    var columnIndex = 0; // Change this to the index of the column you want to sort
501    var rows = table.find('tbody tr').get();
502    rows.sort(function (a, b) {
503      var aValue = $(a).find('td').eq(columnIndex).text();
504      var bValue = $(b).find('td').eq(columnIndex).text();
505      return aValue.localeCompare(bValue);
506    });
507    $.each(rows, function (index, row) {
508      table.children('tbody').append(row);
509    });
510  }
511  function updateSortFileName() {
512    $('#download-table .sort--date').removeClass('sort--desc');
513    $('#download-table .sort--date').removeClass('sort--asc');
514    if (ascendingFileName) {
515      $('#download-table .sort--filename').addClass('sort--desc');
516      $('#download-table .sort--filename').removeClass('sort--asc');
517    } else {
518      $('#download-table .sort--filename').removeClass('sort--desc');
519      $('#download-table .sort--filename').addClass('sort--asc');
520    }
521  }
522
523  /* ======================  ADD HIDDEN SPAN TO ALL LINKS THAT OPEN IN NEW TAB ======================  */
524  function addNoOpener(link) {
525    var linkTypes = (link.getAttribute('rel') || '').split(' ');
526    if (!linkTypes.includes('noopener')) {
527      linkTypes.push('noopener');
528    }
529    link.setAttribute('rel', linkTypes.join(' ').trim());
530  }
531  function addNewTabMessage(link) {
532    if (!link.querySelector('.screen-reader-text')) {
533      link.insertAdjacentHTML('beforeend', '<span class="screen-reader-text">(opens in a new tab)</span>');
534    }
535  }
536  document.querySelectorAll('a[target="_blank"]:not(.ignore-blank)').forEach(function (link) {
537    addNoOpener(link);
538    addNewTabMessage(link);
539  });
540
541  /* ====================== SCROLL TO TOP BUTTON ======================  */
542  var scrollToTopButton = $('#scrollToTop');
543
544  // Function to check scroll position and toggle button visibility
545  function toggleScrollButton() {
546    var feedbackElement = $('.give-feedback');
547    var commentsElement = $('.comments-wrap');
548    if (commentsElement.length) {
549      var feedbackElementTop = commentsElement.offset().top - $(window).height();
550    } else {
551      var feedbackElementTop = feedbackElement.offset().top - $(window).height();
552    }
553    if ($(document).scrollTop() > feedbackElementTop) {
554      scrollToTopButton.addClass('fixed');
555    } else {
556      scrollToTopButton.removeClass('fixed');
557      if ($(document).scrollTop() > 500) {
558        scrollToTopButton.css('display', 'block');
559      } else {
560        scrollToTopButton.css('display', 'none');
561      }
562    }
563  }
564  if (scrollToTopButton.length) {
565    // Add a scroll event listener
566    $(window).scroll(toggleScrollButton);
567  }
568
569  // Function to scroll to the top when the button is clicked
570  scrollToTopButton.click(function () {
571    $('html, body').animate({
572      scrollTop: 0
573    }, 'slow');
574  });
575
576  /* ====================== SEARCHFORM CLEAR ======================  */
577  var inputFields = $(".searchform input[type='search']");
578  var clearButtons = $(".searchform__clear");
579
580  // Attach event listeners to each input field and clear button
581  inputFields.each(function (index) {
582    $(this).on("input", function () {
583      // Show or hide the clear button based on input value
584      clearButtons.eq(index).toggle($(this).val().length > 0);
585    });
586    clearButtons.eq(index).on("click", function () {
587      // Clear the input and hide the clear button
588      inputFields.eq(index).val("");
589      $(this).hide();
590    });
591  });
592  /* ====================== REMOVE nbsp ======================  */
593  $('.body-content').each(function () {
594    var content = $(this).html();
595    content = content.replace(/&nbsp;/g, ' ');
596    $(this).html(content);
597  });
598});
599
600/***/ }),
601
602/***/ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[2]!./node_modules/swiper/swiper-bundle.css":
603/*!*********************************************************************************************************************************************************************************************************!*\
604  !*** ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[2]!./node_modules/swiper/swiper-bundle.css ***!
605  \*********************************************************************************************************************************************************************************************************/
606/***/ ((module, __webpack_exports__, __webpack_require__) => {
607
608"use strict";
609__webpack_require__.r(__webpack_exports__);
610/* harmony export */ __webpack_require__.d(__webpack_exports__, {
611/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
612/* harmony export */ });
613/* harmony import */ var _css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../css-loader/dist/runtime/cssWithMappingToString.js */ "./node_modules/css-loader/dist/runtime/cssWithMappingToString.js");
614/* harmony import */ var _css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__);
615/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
616/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
617// Imports
618
619
620var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default()));
621// Module
622___CSS_LOADER_EXPORT___.push([module.id, "/**\n * Swiper 11.0.5\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2023 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: November 22, 2023\n */\n\n/* FONT_START */\n@font-face {\n  font-family: 'swiper-icons';\n  src: url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA');\n  font-weight: 400;\n  font-style: normal;\n}\n/* FONT_END */\n:root {\n  --swiper-theme-color: #007aff;\n  /*\n  --swiper-preloader-color: var(--swiper-theme-color);\n  --swiper-wrapper-transition-timing-function: initial;\n  */\n}\n:host {\n  position: relative;\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n  z-index: 1;\n}\n.swiper {\n  margin-left: auto;\n  margin-right: auto;\n  position: relative;\n  overflow: hidden;\n  list-style: none;\n  padding: 0;\n  /* Fix of Webkit flickering */\n  z-index: 1;\n  display: block;\n}\n.swiper-vertical > .swiper-wrapper {\n  flex-direction: column;\n}\n.swiper-wrapper {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  z-index: 1;\n  display: flex;\n  transition-property: transform;\n  transition-timing-function: var(--swiper-wrapper-transition-timing-function, initial);\n  box-sizing: content-box;\n}\n.swiper-android .swiper-slide,\n.swiper-ios .swiper-slide,\n.swiper-wrapper {\n  transform: translate3d(0px, 0, 0);\n}\n.swiper-horizontal {\n  touch-action: pan-y;\n}\n.swiper-vertical {\n  touch-action: pan-x;\n}\n.swiper-slide {\n  flex-shrink: 0;\n  width: 100%;\n  height: 100%;\n  position: relative;\n  transition-property: transform;\n  display: block;\n}\n.swiper-slide-invisible-blank {\n  visibility: hidden;\n}\n/* Auto Height */\n.swiper-autoheight,\n.swiper-autoheight .swiper-slide {\n  height: auto;\n}\n.swiper-autoheight .swiper-wrapper {\n  align-items: flex-start;\n  transition-property: transform, height;\n}\n.swiper-backface-hidden .swiper-slide {\n  transform: translateZ(0);\n  backface-visibility: hidden;\n}\n/* 3D Effects */\n.swiper-3d.swiper-css-mode .swiper-wrapper {\n  perspective: 1200px;\n}\n.swiper-3d .swiper-wrapper {\n  transform-style: preserve-3d;\n}\n.swiper-3d {\n  perspective: 1200px;\n}\n.swiper-3d .swiper-slide,\n.swiper-3d .swiper-cube-shadow {\n  transform-style: preserve-3d;\n}\n/* CSS Mode */\n.swiper-css-mode > .swiper-wrapper {\n  overflow: auto;\n  scrollbar-width: none;\n  /* For Firefox */\n  -ms-overflow-style: none;\n  /* For Internet Explorer and Edge */\n}\n.swiper-css-mode > .swiper-wrapper::-webkit-scrollbar {\n  display: none;\n}\n.swiper-css-mode > .swiper-wrapper > .swiper-slide {\n  scroll-snap-align: start start;\n}\n.swiper-css-mode.swiper-horizontal > .swiper-wrapper {\n  scroll-snap-type: x mandatory;\n}\n.swiper-css-mode.swiper-vertical > .swiper-wrapper {\n  scroll-snap-type: y mandatory;\n}\n.swiper-css-mode.swiper-free-mode > .swiper-wrapper {\n  scroll-snap-type: none;\n}\n.swiper-css-mode.swiper-free-mode > .swiper-wrapper > .swiper-slide {\n  scroll-snap-align: none;\n}\n.swiper-css-mode.swiper-centered > .swiper-wrapper::before {\n  content: '';\n  flex-shrink: 0;\n  order: 9999;\n}\n.swiper-css-mode.swiper-centered > .swiper-wrapper > .swiper-slide {\n  scroll-snap-align: center center;\n  scroll-snap-stop: always;\n}\n.swiper-css-mode.swiper-centered.swiper-horizontal > .swiper-wrapper > .swiper-slide:first-child {\n  margin-inline-start: var(--swiper-centered-offset-before);\n}\n.swiper-css-mode.swiper-centered.swiper-horizontal > .swiper-wrapper::before {\n  height: 100%;\n  min-height: 1px;\n  width: var(--swiper-centered-offset-after);\n}\n.swiper-css-mode.swiper-centered.swiper-vertical > .swiper-wrapper > .swiper-slide:first-child {\n  margin-block-start: var(--swiper-centered-offset-before);\n}\n.swiper-css-mode.swiper-centered.swiper-vertical > .swiper-wrapper::before {\n  width: 100%;\n  min-width: 1px;\n  height: var(--swiper-centered-offset-after);\n}\n/* Slide styles start */\n/* 3D Shadows */\n.swiper-3d .swiper-slide-shadow,\n.swiper-3d .swiper-slide-shadow-left,\n.swiper-3d .swiper-slide-shadow-right,\n.swiper-3d .swiper-slide-shadow-top,\n.swiper-3d .swiper-slide-shadow-bottom,\n.swiper-3d .swiper-slide-shadow,\n.swiper-3d .swiper-slide-shadow-left,\n.swiper-3d .swiper-slide-shadow-right,\n.swiper-3d .swiper-slide-shadow-top,\n.swiper-3d .swiper-slide-shadow-bottom {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  pointer-events: none;\n  z-index: 10;\n}\n.swiper-3d .swiper-slide-shadow {\n  background: rgba(0, 0, 0, 0.15);\n}\n.swiper-3d .swiper-slide-shadow-left {\n  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-3d .swiper-slide-shadow-right {\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-3d .swiper-slide-shadow-top {\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-3d .swiper-slide-shadow-bottom {\n  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-lazy-preloader {\n  width: 42px;\n  height: 42px;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  margin-left: -21px;\n  margin-top: -21px;\n  z-index: 10;\n  transform-origin: 50%;\n  box-sizing: border-box;\n  border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));\n  border-radius: 50%;\n  border-top-color: transparent;\n}\n.swiper:not(.swiper-watch-progress) .swiper-lazy-preloader,\n.swiper-watch-progress .swiper-slide-visible .swiper-lazy-preloader {\n  animation: swiper-preloader-spin 1s infinite linear;\n}\n.swiper-lazy-preloader-white {\n  --swiper-preloader-color: #fff;\n}\n.swiper-lazy-preloader-black {\n  --swiper-preloader-color: #000;\n}\n@keyframes swiper-preloader-spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n/* Slide styles end */\n.swiper-virtual .swiper-slide {\n  -webkit-backface-visibility: hidden;\n  transform: translateZ(0);\n}
622\n.swiper-virtual.swiper-css-mode .swiper-wrapper::after {\n  content: '';\n  position: absolute;\n  left: 0;\n  top: 0;\n  pointer-events: none;\n}\n.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after {\n  height: 1px;\n  width: var(--swiper-virtual-size);\n}\n.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after {\n  width: 1px;\n  height: var(--swiper-virtual-size);\n}\n:root {\n  --swiper-navigation-size: 44px;\n  /*\n  --swiper-navigation-top-offset: 50%;\n  --swiper-navigation-sides-offset: 10px;\n  --swiper-navigation-color: var(--swiper-theme-color);\n  */\n}\n.swiper-button-prev,\n.swiper-button-next {\n  position: absolute;\n  top: var(--swiper-navigation-top-offset, 50%);\n  width: calc(var(--swiper-navigation-size) / 44 * 27);\n  height: var(--swiper-navigation-size);\n  margin-top: calc(0px - (var(--swiper-navigation-size) / 2));\n  z-index: 10;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: var(--swiper-navigation-color, var(--swiper-theme-color));\n}\n.swiper-button-prev.swiper-button-disabled,\n.swiper-button-next.swiper-button-disabled {\n  opacity: 0.35;\n  cursor: auto;\n  pointer-events: none;\n}\n.swiper-button-prev.swiper-button-hidden,\n.swiper-button-next.swiper-button-hidden {\n  opacity: 0;\n  cursor: auto;\n  pointer-events: none;\n}\n.swiper-navigation-disabled .swiper-button-prev,\n.swiper-navigation-disabled .swiper-button-next {\n  display: none !important;\n}\n.swiper-button-prev svg,\n.swiper-button-next svg {\n  width: 100%;\n  height: 100%;\n  -o-object-fit: contain;\n     object-fit: contain;\n  transform-origin: center;\n}\n.swiper-rtl .swiper-button-prev svg,\n.swiper-rtl .swiper-button-next svg {\n  transform: rotate(180deg);\n}\n.swiper-button-prev,\n.swiper-rtl .swiper-button-next {\n  left: var(--swiper-navigation-sides-offset, 10px);\n  right: auto;\n}\n.swiper-button-next,\n.swiper-rtl .swiper-button-prev {\n  right: var(--swiper-navigation-sides-offset, 10px);\n  left: auto;\n}\n.swiper-button-lock {\n  display: none;\n}\n/* Navigation font start */\n.swiper-button-prev:after,\n.swiper-button-next:after {\n  font-family: swiper-icons;\n  font-size: var(--swiper-navigation-size);\n  text-transform: none !important;\n  letter-spacing: 0;\n  font-variant: initial;\n  line-height: 1;\n}\n.swiper-button-prev:after,\n.swiper-rtl .swiper-button-next:after {\n  
622content: 'prev';\n}\n.swiper-button-next,\n.swiper-rtl .swiper-button-prev {\n  right: var(--swiper-navigation-sides-offset, 10px);\n  left: auto;\n}\n.swiper-button-next:after,\n.swiper-rtl .swiper-button-prev:after {\n  content: 'next';\n}\n/* Navigation font end */\n:root {\n  /*\n  --swiper-pagination-color: var(--swiper-theme-color);\n  --swiper-pagination-left: auto;\n  --swiper-pagination-right: 8px;\n  --swiper-pagination-bottom: 8px;\n  --swiper-pagination-top: auto;\n  --swiper-pagination-fraction-color: inherit;\n  --swiper-pagination-progressbar-bg-color: rgba(0,0,0,0.25);\n  --swiper-pagination-progressbar-size: 4px;\n  --swiper-pagination-bullet-size: 8px;\n  --swiper-pagination-bullet-width: 8px;\n  --swiper-pagination-bullet-height: 8px;\n  --swiper-pagination-bullet-border-radius: 50%;\n  --swiper-pagination-bullet-inactive-color: #000;\n  --swiper-pagination-bullet-inactive-opacity: 0.2;\n  --swiper-pagination-bullet-opacity: 1;\n  --swiper-pagination-bullet-horizontal-gap: 4px;\n  --swiper-pagination-bullet-vertical-gap: 6px;\n  */\n}\n.swiper-pagination {\n  position: absolute;\n  text-align: center;\n  transition: 300ms opacity;\n  transform: translate3d(0, 0, 0);\n  z-index: 10;\n}\n.swiper-pagination.swiper-pagination-hidden {\n  opacity: 0;\n}\n.swiper-pagination-disabled > .swiper-pagination,\n.swiper-pagination.swiper-pagination-disabled {\n  display: none !important;\n}\n/* Common Styles */\n.swiper-pagination-fraction,\n.swiper-pagination-custom,\n.swiper-horizontal > .swiper-pagination-bullets,\n.swiper-pagination-bullets.swiper-pagination-horizontal {\n  bottom: var(--swiper-pagination-bottom, 8px);\n  top: var(--swiper-pagination-top, auto);\n  left: 0;\n  width: 100%;\n}\n/* Bullets */\n.swiper-pagination-bullets-dynamic {\n  overflow: hidden;\n  font-size: 0;\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n  transform: scale(0.33);\n  position: relative;\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {\n  transform: scale(1);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {\n  transform: scale(1);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {\n  transform: scale(0.66);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {\n  transform: scale(0.33);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {\n  transform: scale(0.66);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {\n  transform: scale(0.33);\n}\n.swiper-pagination-bullet {\n  width: var(--swiper-pagination-bullet-width, var(--swiper-pagination-bullet-size, 8px));\n  height: var(--swiper-pagination-bullet-height, var(--swiper-pagination-bullet-size, 8px));\n  display: inline-block;\n  border-radius: var(--swiper-pagination-bullet-border-radius, 50%);\n  background: var(--swiper-pagination-bullet-inactive-color, #000);\n  opacity: var(--swiper-pagination-bullet-inactive-opacity, 0.2);\n}\nbutton.swiper-pagination-bullet {\n  border: none;\n  margin: 0;\n  padding: 0;\n  box-shadow: none;\n  -webkit-appearance: none;\n          -moz-appearance: none;\n       appearance: none;\n}\n.swiper-pagination-clickable .swiper-pagination-bullet {\n  cursor: pointer;\n}\n.swiper-pagination-bullet:only-child {\n  display: none !important;\n}\n.swiper-pagination-bullet-active {\n  opacity: var(--swiper-pagination-bullet-opacity, 1);\n  background: var(--swiper-pagination-color, var(--swiper-theme-color));\n}\n.swiper-vertical > .swiper-pagination-bullets,\n.swiper-pagination-vertical.swiper-pagination-bullets {\n  right: var(--swiper-pagination-right, 8px);\n  left: var(--swiper-pagination-left, auto);\n  top: 50%;\n  transform: translate3d(0px, -50%, 0);\n}\n.swiper-vertical > .swiper-pagination-bullets .swiper-pagination-bullet,\n.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet {\n  margin: var(--swiper-pagination-bullet-vertical-gap, 6px) 0;\n  display: block;\n}\n.swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic,\n.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\n  top: 50%;\n  transform: translateY(-50%);\n  width: 8px;\n}\n.swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,\n.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n  display: inline-block;\n  transition: 200ms transform,\n        200ms top;\n}\n.swiper-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet,\n.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet {\n  margin: 0 var(--swiper-pagination-bullet-horizontal-gap, 4px);\n}\n.swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic,\n.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\n  left: 50%;\n  transform: translateX(-50%);\n  white-space: nowrap;\n}\n.swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,\n.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n  transition: 200ms transform,\n        200ms left;\n}\n.swiper-horizontal.swiper-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n  transition: 200ms transform,\n    200ms right;\n}\n/* Fraction */\n.swiper-pagination-fraction {\n  color: var(--swiper-pagination-fraction-color, inherit);\n}\n/* Progress */\n.swiper-pagination-progressbar {\n  background: var(--swiper-pagination-progressbar-bg-color, rgba(0, 0, 0, 0.25));\n  position: absolute;\n}\n.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\n  background: var(--swiper-pagination-color, var(--swiper-theme-color));\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  transform: scale(0);\n  transform-origin: left top;\n}\n.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\n  transform-origin: right top;\n}\n.swiper-horizontal > .swiper-pagination-progressbar,\n.swiper-pagination-progressbar.swiper-pagination-horizontal,\n.swiper-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,\n.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite {\n  width: 100%;\n  height: var(--swiper-pagination-progressbar-size, 4px);\n  left: 0;\n  top: 0;\n}\n.swiper-vertical > .swiper-pagination-progressbar,\n.swiper-pagination-progressbar.swiper-pagination-vertical,\n.swiper-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,\n.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite {\n  width: var(--swiper-pagination-progressbar-size, 4px);\n  height: 100%;\n  left: 0;\n  top: 0;\n}\n.swiper-pagination-lock {\n  display: none;\n}\n:root {\n  /*\n  --swiper-scrollbar-border-radius: 10px;\n  --swiper-scrollbar-top: auto;\n  --swiper-scrollbar-bottom: 4px;\n  --swiper-scrollbar-left: auto;\n  --swiper-scrollbar-right: 4px;\n  --swiper-scrollbar-sides-offset: 1%;\n  --swiper-scrollbar-bg-color: rgba(0, 0, 0, 0.1);
622\n  --swiper-scrollbar-drag-bg-color: rgba(0, 0, 0, 0.5);\n  --swiper-scrollbar-size: 4px;\n  */\n}\n.swiper-scrollbar {\n  border-radius: var(--swiper-scrollbar-border-radius, 10px);\n  position: relative;\n  touch-action: none;\n  background: var(--swiper-scrollbar-bg-color, rgba(0, 0, 0, 0.1));\n}\n.swiper-scrollbar-disabled > .swiper-scrollbar,\n.swiper-scrollbar.swiper-scrollbar-disabled {\n  display: none !important;\n}\n.swiper-horizontal > .swiper-scrollbar,\n.swiper-scrollbar.swiper-scrollbar-horizontal {\n  position: absolute;\n  left: var(--swiper-scrollbar-sides-offset, 1%);\n  bottom: var(--swiper-scrollbar-bottom, 4px);\n  top: var(--swiper-scrollbar-top, auto);\n  z-index: 50;\n  height: var(--swiper-scrollbar-size, 4px);\n  width: calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%));\n}\n.swiper-vertical > .swiper-scrollbar,\n.swiper-scrollbar.swiper-scrollbar-vertical {\n  position: absolute;\n  left: var(--swiper-scrollbar-left, auto);\n  right: var(--swiper-scrollbar-right, 4px);\n  top: var(--swiper-scrollbar-sides-offset, 1%);\n  z-index: 50;\n  width: var(--swiper-scrollbar-size, 4px);\n  height: calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%));\n}\n.swiper-scrollbar-drag {\n  height: 100%;\n  width: 100%;\n  position: relative;\n  background: var(--swiper-scrollbar-drag-bg-color, rgba(0, 0, 0, 0.5));\n  border-radius: var(--swiper-scrollbar-border-radius, 10px);\n  left: 0;\n  top: 0;\n}\n.swiper-scrollbar-cursor-drag {\n  cursor: move;\n}\n.swiper-scrollbar-lock {\n  display: none;\n}\n/* Zoom container styles start */\n.swiper-zoom-container {\n  width: 100%;\n  height: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  text-align: center;\n}\n.swiper-zoom-container > img,\n.swiper-zoom-container > svg,\n.swiper-zoom-container > canvas {\n  max-width: 100%;\n  max-height: 100%;\n  -o-object-fit: contain;\n     object-fit: contain;\n}\n/* Zoom container styles end */\n.swiper-slide-zoomed {\n  cursor: move;\n  touch-action: none;\n}\n/* a11y */\n.swiper .swiper-notification {\n  position: absolute;\n  left: 0;\n  top: 0;\n  pointer-events: none;\n  opacity: 0;\n  z-index: -1000;\n}\n.swiper-free-mode > .swiper-wrapper {\n  transition-timing-function: ease-out;\n  margin: 0 auto;\n}\n.swiper-grid > .swiper-wrapper {\n  flex-wrap: wrap;\n}\n.swiper-grid-column > .swiper-wrapper {\n  flex-wrap: wrap;\n  flex-direction: column;\n}\n.swiper-fade.swiper-free-mode .swiper-slide {\n  transition-timing-function: ease-out;\n}\n.swiper-fade .swiper-slide {\n  pointer-events: none;\n  transition-property: opacity;\n}\n.swiper-fade .swiper-slide .swiper-slide {\n  pointer-events: none;\n}\n.swiper-fade .swiper-slide-active {\n  pointer-events: auto;\n}\n.swiper-fade .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto;\n}\n.swiper-cube {\n  overflow: visible;\n}\n.swiper-cube .swiper-slide {\n  pointer-events: none;\n  backface-visibility: hidden;\n  z-index: 1;\n  visibility: hidden;\n  transform-origin: 0 0;\n  width: 100%;\n  height: 100%;\n}\n.swiper-cube .swiper-slide .swiper-slide {\n  pointer-events: none;\n}\n.swiper-cube.swiper-rtl .swiper-slide {\n  transform-origin: 100% 0;\n}\n.swiper-cube .swiper-slide-active,\n.swiper-cube .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto;\n}\n.swiper-cube .swiper-slide-active,\n.swiper-cube .swiper-slide-next,\n.swiper-cube .swiper-slide-prev {\n  pointer-events: auto;\n  visibility: visible;\n}\n.swiper-cube .swiper-cube-shadow {\n  position: absolute;\n  left: 0;\n  bottom: 0px;\n  width: 100%;\n  height: 100%;\n  opacity: 0.6;\n  z-index: 0;\n}\n.swiper-cube .swiper-cube-shadow:before {\n  content: '';\n  background: #000;\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  filter: blur(50px);\n}\n.swiper-cube .swiper-slide-next + .swiper-slide {\n  pointer-events: auto;\n  visibility: visible;\n}\n/* Cube slide shadows start */\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-top,\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-bottom,\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-left,\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-right {\n  z-index: 0;\n  backface-visibility: hidden;\n}\n/* Cube slide shadows end */\n.swiper-flip {\n  overflow: visible;\n}\n.swiper-flip .swiper-slide {\n  pointer-events: none;\n  backface-visibility: hidden;\n  z-index: 1;\n}\n.swiper-flip .swiper-slide .swiper-slide {\n  pointer-events: none;\n}\n.swiper-flip .swiper-slide-active,\n.swiper-flip .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto;\n}\n/* Flip slide shadows start */\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-top,\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-bottom,\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-left,\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-right {\n  z-index: 0;\n  backface-visibility: hidden;\n}\n/* Flip slide shadows end */\n.swiper-creative .swiper-slide {\n  backface-visibility: hidden;\n  overflow: hidden;\n  transition-property: transform, opacity, height;\n}\n.swiper-cards {\n  overflow: visible;\n}\n.swiper-cards .swiper-slide {\n  transform-origin: center bottom;\n  backface-visibility: hidden;\n  overflow: hidden;\n}\n", "",{"version":3,"sources":["webpack://./node_modules/swiper/swiper-bundle.css"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;;AAEF,eAAe;AACf;EACE,2BAA2B;EAC3B,6rEAA6rE;EAC7rE,gBAAgB;EAChB,kBAAkB;AACpB;AACA,aAAa;AACb;EACE,6BAA6B;EAC7B;;;GAGC;AACH;AACA;EACE,kBAAkB;EAClB,cAAc;EACd,iBAAiB;EACjB,kBAAkB;EAClB,UAAU;AACZ;AACA;EACE,iBAAiB;EACjB,kBAAkB;EAClB,kBAAkB;EAClB,gBAAgB;EAChB,gBAAgB;EAChB,UAAU;EACV,6BAA6B;EAC7B,UAAU;EACV,cAAc;AAChB;AACA;EACE,sBAAsB;AACxB;AACA;EACE,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,UAAU;EACV,aAAa;EACb,8BAA8B;EAC9B,qFAAqF;EACrF,uBAAuB;AACzB;AACA;;;EAGE,iCAAiC;AACnC;AACA;EACE,mBAAmB;AACrB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,cAAc;EACd,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,8BAA8B;EAC9B,cAAc;AAChB;AACA;EACE,kBAAkB;AACpB;AACA,gBAAgB;AAChB;;EAEE,YAAY;AACd;AACA;EACE,uBAAuB;EACvB,sCAAsC;AACxC;AACA;EACE,wBAAwB;EAEhB,2BAA2B;AACrC;AACA,eAAe;AACf;EACE,mBAAmB;AACrB;AACA;EACE,4BAA4B;AAC9B;AACA;EACE,mBAAmB;AACrB;AACA;;EAEE,4BAA4B;AAC9B;AACA,aAAa;AACb;EACE,cAAc;EACd,qBAAqB;EACrB,gBAAgB;EAChB,wBAAwB;EACxB,mCAAmC;AACrC;AACA;EACE,aAAa;AACf;AACA;EACE,8BAA8B;AAChC;AACA;EACE,6BAA6B;AAC/B;AACA;EACE,6BAA6B;AAC/B;AACA;EACE,sBAAsB;AACxB;AACA;EACE,uBAAuB;AACzB;AACA;EACE,WAAW;EACX,cAAc;EACd,WAAW;AACb;
622AACA;EACE,gCAAgC;EAChC,wBAAwB;AAC1B;AACA;EACE,yDAAyD;AAC3D;AACA;EACE,YAAY;EACZ,eAAe;EACf,0CAA0C;AAC5C;AACA;EACE,wDAAwD;AAC1D;AACA;EACE,WAAW;EACX,cAAc;EACd,2CAA2C;AAC7C;AACA,uBAAuB;AACvB,eAAe;AACf;;;;;;;;;;EAUE,kBAAkB;EAClB,OAAO;EACP,MAAM;EACN,WAAW;EACX,YAAY;EACZ,oBAAoB;EACpB,WAAW;AACb;AACA;EACE,+BAA+B;AACjC;AACA;EACE,gFAAgF;AAClF;AACA;EACE,iFAAiF;AACnF;AACA;EACE,+EAA+E;AACjF;AACA;EACE,kFAAkF;AACpF;AACA;EACE,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,SAAS;EACT,QAAQ;EACR,kBAAkB;EAClB,iBAAiB;EACjB,WAAW;EACX,qBAAqB;EACrB,sBAAsB;EACtB,0EAA0E;EAC1E,kBAAkB;EAClB,6BAA6B;AAC/B;AACA;;EAEE,mDAAmD;AACrD;AACA;EACE,8BAA8B;AAChC;AACA;EACE,8BAA8B;AAChC;AACA;EACE;IACE,uBAAuB;EACzB;EACA;IACE,yBAAyB;EAC3B;AACF;AACA,qBAAqB;AACrB;EACE,mCAAmC;EACnC,wBAAwB;AAC1B;AACA;EACE,WAAW;EACX,kBAAkB;EAClB,OAAO;EACP,MAAM;EACN,oBAAoB;AACtB;AACA;EACE,WAAW;EACX,iCAAiC;AACnC;AACA;EACE,UAAU;EACV,kCAAkC;AACpC;AACA;EACE,8BAA8B;EAC9B;;;;GAIC;AACH;AACA;;EAEE,kBAAkB;EAClB,6CAA6C;EAC7C,oDAAoD;EACpD,qCAAqC;EACrC,2DAA2D;EAC3D,WAAW;EACX,eAAe;EACf,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,gEAAgE;AAClE;AACA;;EAEE,aAAa;EACb,YAAY;EACZ,oBAAoB;AACtB;AACA;;EAEE,UAAU;EACV,YAAY;EACZ,oBAAoB;AACtB;AACA;;EAEE,wBAAwB;AAC1B;AACA;;EAEE,WAAW;EACX,YAAY;EACZ,sBAAmB;KAAnB,mBAAmB;EACnB,wBAAwB;AAC1B;AACA;;EAEE,yBAAyB;AAC3B;AACA;;EAEE,iDAAiD;EACjD,WAAW;AACb;AACA;;EAEE,kDAAkD;EAClD,UAAU;AACZ;AACA;EACE,aAAa;AACf;AACA,0BAA0B;AAC1B;;EAEE,yBAAyB;EACzB,wCAAwC;EACxC,+BAA+B;EAC/B,iBAAiB;EACjB,qBAAqB;EACrB,cAAc;AAChB;AACA;;EAEE,eAAe;AACjB;AACA;;EAEE,kDAAkD;EAClD,UAAU;AACZ;AACA;;EAEE,eAAe;AACjB;AACA,wBAAwB;AACxB;EACE;;;;;;;;;;;;;;;;;;GAkBC;AACH;AACA;EACE,kBAAkB;EAClB,kBAAkB;EAClB,yBAAyB;EACzB,+BAA+B;EAC/B,WAAW;AACb;AACA;EACE,UAAU;AACZ;AACA;;EAEE,wBAAwB;AAC1B;AACA,kBAAkB;AAClB;;;;EAIE,4CAA4C;EAC5C,uCAAuC;EACvC,OAAO;EACP,WAAW;AACb;AACA,YAAY;AACZ;EACE,gBAAgB;EAChB,YAAY;AACd;AACA;EACE,sBAAsB;EACtB,kBAAkB;AACpB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,sBAAsB;AACxB;AACA;EACE,sBAAsB;AACxB;AACA;EACE,sBAAsB;AACxB;AACA;EACE,sBAAsB;AACxB;AACA;EACE,uFAAuF;EACvF,yFAAyF;EACzF,qBAAqB;EACrB,iEAAiE;EACjE,gEAAgE;EAChE,8DAA8D;AAChE;AACA;EACE,YAAY;EACZ,SAAS;EACT,UAAU;EACV,gBAAgB;EAChB,wBAAwB;UAChB,qBAAgB;OAAhB,gBAAgB;AAC1B;AACA;EACE,eAAe;AACjB;AACA;EACE,wBAAwB;AAC1B;AACA;EACE,mDAAmD;EACnD,qEAAqE;AACvE;AACA;;EAEE,0CAA0C;EAC1C,yCAAyC;EACzC,QAAQ;EACR,oCAAoC;AACtC;AACA;;EAEE,2DAA2D;EAC3D,cAAc;AAChB;AACA;;EAEE,QAAQ;EACR,2BAA2B;EAC3B,UAAU;AACZ;AACA;;EAEE,qBAAqB;EACrB;iBACe;AACjB;AACA;;EAEE,6DAA6D;AAC/D;AACA;;EAEE,SAAS;EACT,2BAA2B;EAC3B,mBAAmB;AACrB;AACA;;EAEE;kBACgB;AAClB;AACA;EACE;eACa;AACf;AACA,aAAa;AACb;EACE,uDAAuD;AACzD;AACA,aAAa;AACb;EACE,8EAA8E;EAC9E,kBAAkB;AACpB;AACA;EACE,qEAAqE;EACrE,kBAAkB;EAClB,OAAO;EACP,MAAM;EACN,WAAW;EACX,YAAY;EACZ,mBAAmB;EACnB,0BAA0B;AAC5B;AACA;EACE,2BAA2B;AAC7B;AACA;;;;EAIE,WAAW;EACX,sDAAsD;EACtD,OAAO;EACP,MAAM;AACR;AACA;;;;EAIE,qDAAqD;EACrD,YAAY;EACZ,OAAO;EACP,MAAM;AACR;AACA;EACE,aAAa;AACf;AACA;EACE;;;;;;;;;;GAUC;AACH;AACA;EACE,0DAA0D;EAC1D,kBAAkB;EAClB,kBAAkB;EAClB,gEAAgE;AAClE;AACA;;EAEE,wBAAwB;AAC1B;AACA;;EAEE,kBAAkB;EAClB,8CAA8C;EAC9C,2CAA2C;EAC3C,sCAAsC;EACtC,WAAW;EACX,yCAAyC;EACzC,gEAAgE;AAClE;AACA;;EAEE,kBAAkB;EAClB,wCAAwC;EACxC,yCAAyC;EACzC,6CAA6C;EAC7C,WAAW;EACX,wCAAwC;EACxC,iEAAiE;AACnE;AACA;EACE,YAAY;EACZ,WAAW;EACX,kBAAkB;EAClB,qEAAqE;EACrE,0DAA0D;EAC1D,OAAO;EACP,MAAM;AACR;AACA;EACE,YAAY;AACd;AACA;EACE,aAAa;AACf;AACA,gCAAgC;AAChC;EACE,WAAW;EACX,YAAY;EACZ,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB,kBAAkB;AACpB;AACA;;;EAGE,eAAe;EACf,gBAAgB;EAChB,sBAAmB;KAAnB,mBAAmB;AACrB;AACA,8BAA8B;AAC9B;EACE,YAAY;EACZ,kBAAkB;AACpB;AACA,SAAS;AACT;EACE,kBAAkB;EAClB,OAAO;EACP,MAAM;EACN,oBAAoB;EACpB,UAAU;EACV,cAAc;AAChB;AACA;EACE,oCAAoC;EACpC,cAAc;AAChB;AACA;EACE,eAAe;AACjB;AACA;EACE,eAAe;EACf,sBAAsB;AACxB;AACA;EACE,oCAAoC;AACtC;AACA;EACE,oBAAoB;EACpB,4BAA4B;AAC9B;AACA;EACE,oBAAoB;AACtB;AACA;EACE,oBAAoB;AACtB;AACA;EACE,oBAAoB;AACtB;AACA;EACE,iBAAiB;AACnB;AACA;EACE,oBAAoB;EAEZ,2BAA2B;EACnC,UAAU;EACV,kBAAkB;EAClB,qBAAqB;EACrB,WAAW;EACX,YAAY;AACd;AACA;EACE,oBAAoB;AACtB;AACA;EACE,wBAAwB;AAC1B;AACA;;EAEE,oBAAoB;AACtB;AACA;;;EAGE,oBAAoB;EACpB,mBAAmB;AACrB;AACA;EACE,kBAAkB;EAClB,OAAO;EACP,WAAW;EACX,WAAW;EACX,YAAY;EACZ,YAAY;EACZ,UAAU;AACZ;AACA;EACE,WAAW;EACX,gBAAgB;EAChB,kBAAkB;EAClB,OAAO;EACP,MAAM;EACN,SAAS;EACT,QAAQ;EACR,kBAAkB;AACpB;AACA;EACE,oBAAoB;EACpB,mBAAmB;AACrB;AACA,6BAA6B;AAC7B;;;;EAIE,UAAU;EAEF,2BAA2B;AACrC;AACA,2BAA2B;AAC3B;EACE,iBAAiB;AACnB;AACA;EACE,oBAAoB;EAEZ,2BAA2B;EACnC,UAAU;AACZ;AACA;EACE,oBAAoB;AACtB;AACA;;EAEE,oBAAoB;AACtB;AACA,6BAA6B;AAC7B;;;;EAIE,UAAU;EAEF,2BAA2B;AACrC;AACA,2BAA2B;AAC3B;EAEU,2BAA2B;EACnC,gBAAgB;EAChB,+CAA+C;AACjD;AACA;EACE,iBAAiB;AACnB;AACA;EACE,+BAA+B;EAEvB,2BAA2B;EACnC,gBAAgB;AAClB","sourcesContent":["/**\n * Swiper 11.0.5\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2023 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: November 22, 2023\n */\n\n/* FONT_START */\n@font-face {\n  font-family: 'swiper-icons';\n  src: url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5
622Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA');\n  font-weight: 400;\n  font-style: normal;\n}\n/* FONT_END */\n:root {\n  --swiper-theme-color: #007aff;\n  /*\n  --swiper-preloader-color: var(--swiper-theme-color);\n  --swiper-wrapper-transition-timing-function: initial;\n  */\n}\n:host {\n  position: relative;\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n  z-index: 1;\n}\n.swiper {\n  margin-left: auto;\n  margin-right: auto;\n  position: relative;\n  overflow: hidden;\n  list-style: none;\n  padding: 0;\n  /* Fix of Webkit flickering */\n  z-index: 1;\n  display: block;\n}\n.swiper-vertical > .swiper-wrapper {\n  flex-direction: column;\n}\n.swiper-wrapper {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  z-index: 1;\n  display: flex;\n  transition-property: transform;\n  transition-timing-function: var(--swiper-wrapper-transition-timing-function, initial);\n  box-sizing: content-box;\n}\n.swiper-android .swiper-slide,\n.swiper-ios .swiper-slide,\n.swiper-wrapper {\n  transform: translate3d(0px, 0, 0);\n}\n.swiper-horizontal {\n  touch-action: pan-y;\n}\n.swiper-vertical {\n  touch-action: pan-x;\n}\n.swiper-slide {\n  flex-shrink: 0;\n  width: 100%;\n  height: 100%;\n  position: relative;\n  transition-property: transform;\n  display: block;\n}\n.swiper-slide-invisible-blank {\n  visibility: hidden;\n}\n/* Auto Height */\n.swiper-autoheight,\n.swiper-autoheight .swiper-slide {\n  height: auto;\n}\n.swiper-autoheight .swiper-wrapper {\n  align-items: flex-start;\n  transition-property: transform, height;\n}\n.swiper-backface-hidden .swiper-slide {\n  transform: translateZ(0);\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n/* 3D Effects */\n.swiper-3d.swiper-css-mode .swiper-wrapper {\n  perspective: 1200px;\n}\n.swiper-3d .swiper-wrapper {\n  transform-style: preserve-3d;\n}\n.swiper-3d {\n  perspective: 1200px;\n}\n.swiper-3d .swiper-slide,\n.swiper-3d .swiper-cube-shadow {\n  transform-style: preserve-3d;\n}\n/* CSS Mode */\n.swiper-css-mode > .swiper-wrapper {\n  overflow: auto;\n  scrollbar-width: none;\n  /* For Firefox */\n  -ms-overflow-style: none;\n  /* For Internet Explorer and Edge */\n}\n.swiper-css-mode > .swiper-wrapper::-webkit-scrollbar {\n  display: none;\n}\n.swiper-css-mode > .swiper-wrapper > .swiper-slide {\n  scroll-snap-align: start start;\n}\n.swiper-css-mode.swiper-horizontal > .swiper-wrapper {\n  scroll-snap-type: x mandatory;\n}\n.swiper-css-mode.swiper-vertical > .swiper-wrapper {\n  scroll-snap-type: y mandatory;\n}\n.swiper-css-mode.swiper-free-mode > .swiper-wrapper {\n  scroll-snap-type: none;\n}\n.swiper-css-mode.swiper-free-mode > .swiper-wrapper > .swiper-slide {\n  scroll-snap-align: none;\n}\n.swiper-css-mode.swiper-centered > .swiper-wrapper::before {\n  content: '';\n  flex-shrink: 0;\n  order: 9999;\n}\n.swiper-css-mode.swiper-centered > .swiper-wrapper > .swiper-slide {\n  scroll-snap-align: center center;\n  scroll-snap-stop: always;\n}\n.swiper-css-mode.swiper-centered.swiper-horizontal > .swiper-wrapper > .swiper-slide:first-child {\n  margin-inline-start: var(--swiper-centered-offset-before);\n}\n.swiper-css-mode.swiper-centered.swiper-horizontal > .swiper-wrapper::before {\n  height: 100%;\n  min-height: 1px;\n  width: var(--swiper-centered-offset-after);\n}\n.swiper-css-mode.swiper-centered.swiper-vertical > .swiper-wrapper > .swiper-slide:first-child {\n  margin-block-start: var(--swiper-centered-offset-before);\n}\n.swiper-css-mode.swiper-centered.swiper-vertical > .swiper-wrapper::before {\n  width: 100%;\n  min-width: 1px;\n  height: var(--swiper-centered-offset-after);\n}\n/* Slide styles start */\n/* 3D Shadows */\n.swiper-3d .swiper-slide-shadow,\n.swiper-3d .swiper-slide-shadow-left,\n.swiper-3d .swiper-slide-shadow-right,\n.swiper-3d .swiper-slide-shadow-top,\n.swiper-3d .swiper-slide-shadow-bottom,\n.swiper-3d .swiper-slide-shadow,\n.swiper-3d .swiper-slide-shadow-left,\n.swiper-3d .swiper-slide-shadow-right,\n.swiper-3d .swiper-slide-shadow-top,\n.swiper-3d .swiper-slide-shadow-bottom {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  pointer-events: none;\n  z-index: 10;\n}\n.swiper-3d .swiper-slide-shadow {\n  background: rgba(0, 0, 0, 0.15);\n}\n.swiper-3d .swiper-slide-shadow-left {\n  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-3d .swiper-slide-shadow-right {\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-3d .swiper-slide-shadow-top {\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-3d .swiper-slide-shadow-bottom {\n  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-lazy-preloader {\n  width: 42px;\n  height: 42px;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  margin-left: -21px;\n  margin-top: -21px;\n  z-index: 10;\n  transform-origin: 50%;\n  box-sizing: border-box;\n  border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));\n  border-radius: 50%;\n  border-top-color: transparent;\n}\n.swiper:not(.swiper-watch-progress) .swiper-lazy-preloader,\n.swiper-watch-progress .swiper-slide-visible .swiper-lazy-preloader {\n  animation: swiper-preloader-spin 1s infinite linear;\n}\n.swiper-lazy-preloader-white {\n  --swiper-preloader-color: #fff;\n}\n.swiper-lazy-preloader-black {\n  --swiper-preloader-color: #000;\n}\n@keyframes swiper-preloader-spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n/* Slide styles end */\n.swiper-virtual .swiper-slide {\n  -webkit-backface-visibility: hidden;\n  transform: translateZ(0);\n}
622\n.swiper-virtual.swiper-css-mode .swiper-wrapper::after {\n  content: '';\n  position: absolute;\n  left: 0;\n  top: 0;\n  pointer-events: none;\n}\n.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after {\n  height: 1px;\n  width: var(--swiper-virtual-size);\n}\n.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after {\n  width: 1px;\n  height: var(--swiper-virtual-size);\n}\n:root {\n  --swiper-navigation-size: 44px;\n  /*\n  --swiper-navigation-top-offset: 50%;\n  --swiper-navigation-sides-offset: 10px;\n  --swiper-navigation-color: var(--swiper-theme-color);\n  */\n}\n.swiper-button-prev,\n.swiper-button-next {\n  position: absolute;\n  top: var(--swiper-navigation-top-offset, 50%);\n  width: calc(var(--swiper-navigation-size) / 44 * 27);\n  height: var(--swiper-navigation-size);\n  margin-top: calc(0px - (var(--swiper-navigation-size) / 2));\n  z-index: 10;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: var(--swiper-navigation-color, var(--swiper-theme-color));\n}\n.swiper-button-prev.swiper-button-disabled,\n.swiper-button-next.swiper-button-disabled {\n  opacity: 0.35;\n  cursor: auto;\n  pointer-events: none;\n}\n.swiper-button-prev.swiper-button-hidden,\n.swiper-button-next.swiper-button-hidden {\n  opacity: 0;\n  cursor: auto;\n  pointer-events: none;\n}\n.swiper-navigation-disabled .swiper-button-prev,\n.swiper-navigation-disabled .swiper-button-next {\n  display: none !important;\n}\n.swiper-button-prev svg,\n.swiper-button-next svg {\n  width: 100%;\n  height: 100%;\n  object-fit: contain;\n  transform-origin: center;\n}\n.swiper-rtl .swiper-button-prev svg,\n.swiper-rtl .swiper-button-next svg {\n  transform: rotate(180deg);\n}\n.swiper-button-prev,\n.swiper-rtl .swiper-button-next {\n  left: var(--swiper-navigation-sides-offset, 10px);\n  right: auto;\n}\n.swiper-button-next,\n.swiper-rtl .swiper-button-prev {\n  right: var(--swiper-navigation-sides-offset, 10px);\n  left: auto;\n}\n.swiper-button-lock {\n  display: none;\n}\n/* Navigation font start */\n.swiper-button-prev:after,\n.swiper-button-next:after {\n  font-family: swiper-icons;\n  font-size: var(--swiper-navigation-size);\n  text-transform: none !important;\n  letter-spacing: 0;\n  font-variant: initial;\n  line-height: 1;\n}\n.swiper-button-prev:after,\n.swiper-rtl .swiper-button-next:after {\n  
622content: 'prev';\n}\n.swiper-button-next,\n.swiper-rtl .swiper-button-prev {\n  right: var(--swiper-navigation-sides-offset, 10px);\n  left: auto;\n}\n.swiper-button-next:after,\n.swiper-rtl .swiper-button-prev:after {\n  content: 'next';\n}\n/* Navigation font end */\n:root {\n  /*\n  --swiper-pagination-color: var(--swiper-theme-color);\n  --swiper-pagination-left: auto;\n  --swiper-pagination-right: 8px;\n  --swiper-pagination-bottom: 8px;\n  --swiper-pagination-top: auto;\n  --swiper-pagination-fraction-color: inherit;\n  --swiper-pagination-progressbar-bg-color: rgba(0,0,0,0.25);\n  --swiper-pagination-progressbar-size: 4px;\n  --swiper-pagination-bullet-size: 8px;\n  --swiper-pagination-bullet-width: 8px;\n  --swiper-pagination-bullet-height: 8px;\n  --swiper-pagination-bullet-border-radius: 50%;\n  --swiper-pagination-bullet-inactive-color: #000;\n  --swiper-pagination-bullet-inactive-opacity: 0.2;\n  --swiper-pagination-bullet-opacity: 1;\n  --swiper-pagination-bullet-horizontal-gap: 4px;\n  --swiper-pagination-bullet-vertical-gap: 6px;\n  */\n}\n.swiper-pagination {\n  position: absolute;\n  text-align: center;\n  transition: 300ms opacity;\n  transform: translate3d(0, 0, 0);\n  z-index: 10;\n}\n.swiper-pagination.swiper-pagination-hidden {\n  opacity: 0;\n}\n.swiper-pagination-disabled > .swiper-pagination,\n.swiper-pagination.swiper-pagination-disabled {\n  display: none !important;\n}\n/* Common Styles */\n.swiper-pagination-fraction,\n.swiper-pagination-custom,\n.swiper-horizontal > .swiper-pagination-bullets,\n.swiper-pagination-bullets.swiper-pagination-horizontal {\n  bottom: var(--swiper-pagination-bottom, 8px);\n  top: var(--swiper-pagination-top, auto);\n  left: 0;\n  width: 100%;\n}\n/* Bullets */\n.swiper-pagination-bullets-dynamic {\n  overflow: hidden;\n  font-size: 0;\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n  transform: scale(0.33);\n  position: relative;\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {\n  transform: scale(1);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {\n  transform: scale(1);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {\n  transform: scale(0.66);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {\n  transform: scale(0.33);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {\n  transform: scale(0.66);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {\n  transform: scale(0.33);\n}\n.swiper-pagination-bullet {\n  width: var(--swiper-pagination-bullet-width, var(--swiper-pagination-bullet-size, 8px));\n  height: var(--swiper-pagination-bullet-height, var(--swiper-pagination-bullet-size, 8px));\n  display: inline-block;\n  border-radius: var(--swiper-pagination-bullet-border-radius, 50%);\n  background: var(--swiper-pagination-bullet-inactive-color, #000);\n  opacity: var(--swiper-pagination-bullet-inactive-opacity, 0.2);\n}\nbutton.swiper-pagination-bullet {\n  border: none;\n  margin: 0;\n  padding: 0;\n  box-shadow: none;\n  -webkit-appearance: none;\n          appearance: none;\n}\n.swiper-pagination-clickable .swiper-pagination-bullet {\n  cursor: pointer;\n}\n.swiper-pagination-bullet:only-child {\n  display: none !important;\n}\n.swiper-pagination-bullet-active {\n  opacity: var(--swiper-pagination-bullet-opacity, 1);\n  background: var(--swiper-pagination-color, var(--swiper-theme-color));\n}\n.swiper-vertical > .swiper-pagination-bullets,\n.swiper-pagination-vertical.swiper-pagination-bullets {\n  right: var(--swiper-pagination-right, 8px);\n  left: var(--swiper-pagination-left, auto);\n  top: 50%;\n  transform: translate3d(0px, -50%, 0);\n}\n.swiper-vertical > .swiper-pagination-bullets .swiper-pagination-bullet,\n.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet {\n  margin: var(--swiper-pagination-bullet-vertical-gap, 6px) 0;\n  display: block;\n}\n.swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic,\n.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\n  top: 50%;\n  transform: translateY(-50%);\n  width: 8px;\n}\n.swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,\n.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n  display: inline-block;\n  transition: 200ms transform,\n        200ms top;\n}\n.swiper-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet,\n.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet {\n  margin: 0 var(--swiper-pagination-bullet-horizontal-gap, 4px);\n}\n.swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic,\n.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\n  left: 50%;\n  transform: translateX(-50%);\n  white-space: nowrap;\n}\n.swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,\n.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n  transition: 200ms transform,\n        200ms left;\n}\n.swiper-horizontal.swiper-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n  transition: 200ms transform,\n    200ms right;\n}\n/* Fraction */\n.swiper-pagination-fraction {\n  color: var(--swiper-pagination-fraction-color, inherit);\n}\n/* Progress */\n.swiper-pagination-progressbar {\n  background: var(--swiper-pagination-progressbar-bg-color, rgba(0, 0, 0, 0.25));\n  position: absolute;\n}\n.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\n  background: var(--swiper-pagination-color, var(--swiper-theme-color));\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  transform: scale(0);\n  transform-origin: left top;\n}\n.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\n  transform-origin: right top;\n}\n.swiper-horizontal > .swiper-pagination-progressbar,\n.swiper-pagination-progressbar.swiper-pagination-horizontal,\n.swiper-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,\n.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite {\n  width: 100%;\n  height: var(--swiper-pagination-progressbar-size, 4px);\n  left: 0;\n  top: 0;\n}\n.swiper-vertical > .swiper-pagination-progressbar,\n.swiper-pagination-progressbar.swiper-pagination-vertical,\n.swiper-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,\n.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite {\n  width: var(--swiper-pagination-progressbar-size, 4px);\n  height: 100%;\n  left: 0;\n  top: 0;\n}\n.swiper-pagination-lock {\n  display: none;\n}\n:root {\n  /*\n  --swiper-scrollbar-border-radius: 10px;\n  --swiper-scrollbar-top: auto;\n  --swiper-scrollbar-bottom: 4px;\n  --swiper-scrollbar-left: auto;\n  --swiper-scrollbar-right: 4px;\n  --swiper-scrollbar-sides-offset: 1%;\n  --swiper-scrollbar-bg-color: rgba(0, 0, 0, 0.1);
622\n  --swiper-scrollbar-drag-bg-color: rgba(0, 0, 0, 0.5);\n  --swiper-scrollbar-size: 4px;\n  */\n}\n.swiper-scrollbar {\n  border-radius: var(--swiper-scrollbar-border-radius, 10px);\n  position: relative;\n  touch-action: none;\n  background: var(--swiper-scrollbar-bg-color, rgba(0, 0, 0, 0.1));\n}\n.swiper-scrollbar-disabled > .swiper-scrollbar,\n.swiper-scrollbar.swiper-scrollbar-disabled {\n  display: none !important;\n}\n.swiper-horizontal > .swiper-scrollbar,\n.swiper-scrollbar.swiper-scrollbar-horizontal {\n  position: absolute;\n  left: var(--swiper-scrollbar-sides-offset, 1%);\n  bottom: var(--swiper-scrollbar-bottom, 4px);\n  top: var(--swiper-scrollbar-top, auto);\n  z-index: 50;\n  height: var(--swiper-scrollbar-size, 4px);\n  width: calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%));\n}\n.swiper-vertical > .swiper-scrollbar,\n.swiper-scrollbar.swiper-scrollbar-vertical {\n  position: absolute;\n  left: var(--swiper-scrollbar-left, auto);\n  right: var(--swiper-scrollbar-right, 4px);\n  top: var(--swiper-scrollbar-sides-offset, 1%);\n  z-index: 50;\n  width: var(--swiper-scrollbar-size, 4px);\n  height: calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%));\n}\n.swiper-scrollbar-drag {\n  height: 100%;\n  width: 100%;\n  position: relative;\n  background: var(--swiper-scrollbar-drag-bg-color, rgba(0, 0, 0, 0.5));\n  border-radius: var(--swiper-scrollbar-border-radius, 10px);\n  left: 0;\n  top: 0;\n}\n.swiper-scrollbar-cursor-drag {\n  cursor: move;\n}\n.swiper-scrollbar-lock {\n  display: none;\n}\n/* Zoom container styles start */\n.swiper-zoom-container {\n  width: 100%;\n  height: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  text-align: center;\n}\n.swiper-zoom-container > img,\n.swiper-zoom-container > svg,\n.swiper-zoom-container > canvas {\n  max-width: 100%;\n  max-height: 100%;\n  object-fit: contain;\n}\n/* Zoom container styles end */\n.swiper-slide-zoomed {\n  cursor: move;\n  touch-action: none;\n}\n/* a11y */\n.swiper .swiper-notification {\n  position: absolute;\n  left: 0;\n  top: 0;\n  pointer-events: none;\n  opacity: 0;\n  z-index: -1000;\n}\n.swiper-free-mode > .swiper-wrapper {\n  transition-timing-function: ease-out;\n  margin: 0 auto;\n}\n.swiper-grid > .swiper-wrapper {\n  flex-wrap: wrap;\n}\n.swiper-grid-column > .swiper-wrapper {\n  flex-wrap: wrap;\n  flex-direction: column;\n}\n.swiper-fade.swiper-free-mode .swiper-slide {\n  transition-timing-function: ease-out;\n}\n.swiper-fade .swiper-slide {\n  pointer-events: none;\n  transition-property: opacity;\n}\n.swiper-fade .swiper-slide .swiper-slide {\n  pointer-events: none;\n}\n.swiper-fade .swiper-slide-active {\n  pointer-events: auto;\n}\n.swiper-fade .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto;\n}\n.swiper-cube {\n  overflow: visible;\n}\n.swiper-cube .swiper-slide {\n  pointer-events: none;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  z-index: 1;\n  visibility: hidden;\n  transform-origin: 0 0;\n  width: 100%;\n  height: 100%;\n}\n.swiper-cube .swiper-slide .swiper-slide {\n  pointer-events: none;\n}\n.swiper-cube.swiper-rtl .swiper-slide {\n  transform-origin: 100% 0;\n}\n.swiper-cube .swiper-slide-active,\n.swiper-cube .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto;\n}\n.swiper-cube .swiper-slide-active,\n.swiper-cube .swiper-slide-next,\n.swiper-cube .swiper-slide-prev {\n  pointer-events: auto;\n  visibility: visible;\n}\n.swiper-cube .swiper-cube-shadow {\n  position: absolute;\n  left: 0;\n  bottom: 0px;\n  width: 100%;\n  height: 100%;\n  opacity: 0.6;\n  z-index: 0;\n}\n.swiper-cube .swiper-cube-shadow:before {\n  content: '';\n  background: #000;\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  filter: blur(50px);\n}\n.swiper-cube .swiper-slide-next + .swiper-slide {\n  pointer-events: auto;\n  visibility: visible;\n}\n/* Cube slide shadows start */\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-top,\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-bottom,\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-left,\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-right {\n  z-index: 0;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n/* Cube slide shadows end */\n.swiper-flip {\n  overflow: visible;\n}\n.swiper-flip .swiper-slide {\n  pointer-events: none;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  z-index: 1;\n}\n.swiper-flip .swiper-slide .swiper-slide {\n  pointer-events: none;\n}\n.swiper-flip .swiper-slide-active,\n.swiper-flip .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto;\n}\n/* Flip slide shadows start */\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-top,\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-bottom,\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-left,\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-right {\n  z-index: 0;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n/* Flip slide shadows end */\n.swiper-creative .swiper-slide {\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  overflow: hidden;\n  transition-property: transform, opacity, height;\n}\n.swiper-cards {\n  overflow: visible;\n}\n.swiper-cards .swiper-slide {\n  transform-origin: center bottom;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  overflow: hidden;\n}\n"],"sourceRoot":""}]);
623// Exports
624/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_
624LOADER_EXPORT___);
625
626
627/***/ }),
628
vendor: 1,872 bytes, lines 629-704
629/***/ "./node_modules/css-loader/dist/runtime/api.js":
630/*!*****************************************************!*\
631  !*** ./node_modules/css-loader/dist/runtime/api.js ***!
632  \*****************************************************/
633/***/ ((module) => {
634
635"use strict";
636
637
638/*
639  MIT License http://www.opensource.org/licenses/mit-license.php
640  Author Tobias Koppers @sokra
641*/
642// css base code, injected by the css-loader
643// eslint-disable-next-line func-names
644module.exports = function (cssWithMappingToString) {
645  var list = []; // return the list of modules as css string
646
647  list.toString = function toString() {
648    return this.map(function (item) {
649      var content = cssWithMappingToString(item);
650
651      if (item[2]) {
652        return "@media ".concat(item[2], " {").concat(content, "}");
653      }
654
655      return content;
656    }).join("");
657  }; // import a list of modules into the list
658  // eslint-disable-next-line func-names
659
660
661  list.i = function (modules, mediaQuery, dedupe) {
662    if (typeof modules === "string") {
663      // eslint-disable-next-line no-param-reassign
664      modules = [[null, modules, ""]];
665    }
666
667    var alreadyImportedModules = {};
668
669    if (dedupe) {
670      for (var i = 0; i < this.length; i++) {
671        // eslint-disable-next-line prefer-destructuring
672        var id = this[i][0];
673
674        if (id != null) {
675          alreadyImportedModules[id] = true;
676        }
677      }
678    }
679
680    for (var _i = 0; _i < modules.length; _i++) {
681      var item = [].concat(modules[_i]);
682
683      if (dedupe && alreadyImportedModules[item[0]]) {
684        // eslint-disable-next-line no-continue
685        continue;
686      }
687
688      if (mediaQuery) {
689        if (!item[2]) {
690          item[2] = mediaQuery;
691        } else {
692          item[2] = "".concat(mediaQuery, " and ").concat(item[2]);
693        }
694      }
695
696      list.push(item);
697    }
698  };
699
700  return list;
701};
702
703/***/ }),
704
vendor: 2,667 bytes, lines 705-750
705/***/ "./node_modules/css-loader/dist/runtime/cssWithMappingToString.js":
706/*!************************************************************************!*\
707  !*** ./node_modules/css-loader/dist/runtime/cssWithMappingToString.js ***!
708  \************************************************************************/
709/***/ ((module) => {
710
711"use strict";
712
713
714function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
715
716function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
717
718function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
719
720function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
721
722function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
723
724function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
725
726module.exports = function cssWithMappingToString(item) {
727  var _item = _slicedToArray(item, 4),
728      content = _item[1],
729      cssMapping = _item[3];
730
731  if (!cssMapping) {
732    return content;
733  }
734
735  if (typeof btoa === "function") {
736    // eslint-disable-next-line no-undef
737    var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));
738    var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
739    var sourceMapping = "/*# ".concat(data, " */");
740    var sourceURLs = cssMapping.sources.map(function (source) {
741      return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */");
742    });
743    return [content].concat(sourceURLs).concat([sourceMapping]).join("\n");
744  }
745
746  return [content].join("\n");
747};
748
749/***/ }),
750
vendor: 285,755 bytes, lines 751-11477
751/***/ "./node_modules/jquery/dist/jquery.js":
752/*!********************************************!*\
753  !*** ./node_modules/jquery/dist/jquery.js ***!
754  \********************************************/
755/***/ (function(module, exports) {
756
757var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
758 * jQuery JavaScript Library v3.7.1
759 * https://jquery.com/
760 *
761 * Copyright OpenJS Foundation and other contributors
762 * Released under the MIT license
763 * https://jquery.org/license
764 *
765 * Date: 2023-08-28T13:37Z
766 */
767( function( global, factory ) {
768
769	"use strict";
770
771	if (  true && typeof module.exports === "object" ) {
772
773		// For CommonJS and CommonJS-like environments where a proper `window`
774		// is present, execute the factory and get jQuery.
775		// For environments that do not have a `window` with a `document`
776		// (such as Node.js), expose a factory as module.exports.
777		// This accentuates the need for the creation of a real `window`.
778		// e.g. var jQuery = require("jquery")(window);
779		// See ticket trac-14549 for more info.
780		module.exports = global.document ?
781			factory( global, true ) :
782			function( w ) {
783				if ( !w.document ) {
784					throw new Error( "jQuery requires a window with a document" );
785				}
786				return factory( w );
787			};
788	} else {
789		factory( global );
790	}
791
792// Pass this if window is not defined yet
793} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
794
795// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
796// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
797// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
798// enough that all such attempts are guarded in a try block.
799"use strict";
800
801var arr = [];
802
803var getProto = Object.getPrototypeOf;
804
805var slice = arr.slice;
806
807var flat = arr.flat ? function( array ) {
808	return arr.flat.call( array );
809} : function( array ) {
810	return arr.concat.apply( [], array );
811};
812
813
814var push = arr.push;
815
816var indexOf = arr.indexOf;
817
818var class2type = {};
819
820var toString = class2type.toString;
821
822var hasOwn = class2type.hasOwnProperty;
823
824var fnToString = hasOwn.toString;
825
826var ObjectFunctionString = fnToString.call( Object );
827
828var support = {};
829
830var isFunction = function isFunction( obj ) {
831
832		// Support: Chrome <=57, Firefox <=52
833		// In some browsers, typeof returns "function" for HTML <object> elements
834		// (i.e., `typeof document.createElement( "object" ) === "function"`).
835		// We don't want to classify *any* DOM node as a function.
836		// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
837		// Plus for old WebKit, typeof returns "function" for HTML collections
838		// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
839		return typeof obj === "function" && typeof obj.nodeType !== "number" &&
840			typeof obj.item !== "function";
841	};
842
843
844var isWindow = function isWindow( obj ) {
845		return obj != null && obj === obj.window;
846	};
847
848
849var document = window.document;
850
851
852
853	var preservedScriptAttributes = {
854		type: true,
855		src: true,
856		nonce: true,
857		noModule: true
858	};
859
860	function DOMEval( code, node, doc ) {
861		doc = doc || document;
862
863		var i, val,
864			script = doc.createElement( "script" );
865
866		script.text = code;
867		if ( node ) {
868			for ( i in preservedScriptAttributes ) {
869
870				// Support: Firefox 64+, Edge 18+
871				// Some browsers don't support the "nonce" property on scripts.
872				// On the other hand, just using `getAttribute` is not enough as
873				// the `nonce` attribute is reset to an empty string whenever it
874				// becomes browsing-context connected.
875				// See https://github.com/whatwg/html/issues/2369
876				// See https://html.spec.whatwg.org/#nonce-attributes
877				// The `node.getAttribute` check was added for the sake of
878				// `jQuery.globalEval` so that it can fake a nonce-containing node
879				// via an object.
880				val = node[ i ] || node.getAttribute && node.getAttribute( i );
881				if ( val ) {
882					script.setAttribute( i, val );
883				}
884			}
885		}
886		doc.head.appendChild( script ).parentNode.removeChild( script );
887	}
888
889
890function toType( obj ) {
891	if ( obj == null ) {
892		return obj + "";
893	}
894
895	// Support: Android <=2.3 only (functionish RegExp)
896	return typeof obj === "object" || typeof obj === "function" ?
897		class2type[ toString.call( obj ) ] || "object" :
898		typeof obj;
899}
900/* global Symbol */
901// Defining this global in .eslintrc.json would create a danger of using the global
902// unguarded in another place, it seems safer to define global only for this module
903
904
905
906var version = "3.7.1",
907
908	rhtmlSuffix = /HTML$/i,
909
910	// Define a local copy of jQuery
911	jQuery = function( selector, context ) {
912
913		// The jQuery object is actually just the init constructor 'enhanced'
914		// Need init if jQuery is called (just allow error to be thrown if not included)
915		return new jQuery.fn.init( selector, context );
916	};
917
918jQuery.fn = jQuery.prototype = {
919
920	// The current version of jQuery being used
921	jquery: version,
922
923	constructor: jQuery,
924
925	// The default length of a jQuery object is 0
926	length: 0,
927
928	toArray: function() {
929		return slice.call( this );
930	},
931
932	// Get the Nth element in the matched element set OR
933	// Get the whole matched element set as a clean array
934	get: function( num ) {
935
936		// Return all the elements in a clean array
937		if ( num == null ) {
938			return slice.call( this );
939		}
940
941		// Return just the one element from the set
942		return num < 0 ? this[ num + this.length ] : this[ num ];
943	},
944
945	// Take an array of elements and push it onto the stack
946	// (returning the new matched element set)
947	pushStack: function( elems ) {
948
949		// Build a new jQuery matched element set
950		var ret = jQuery.merge( this.constructor(), elems );
951
952		// Add the old object onto the stack (as a reference)
953		ret.prevObject = this;
954
955		// Return the newly-formed element set
956		return ret;
957	},
958
959	// Execute a callback for every element in the matched set.
960	each: function( callback ) {
961		return jQuery.each( this, callback );
962	},
963
964	map: function( callback ) {
965		return this.pushStack( jQuery.map( this, function( elem, i ) {
966			return callback.call( elem, i, elem );
967		} ) );
968	},
969
970	slice: function() {
971		return this.pushStack( slice.apply( this, arguments ) );
972	},
973
974	first: function() {
975		return this.eq( 0 );
976	},
977
978	last: function() {
979		return this.eq( -1 );
980	},
981
982	even: function() {
983		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
984			return ( i + 1 ) % 2;
985		} ) );
986	},
987
988	odd: function() {
989		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
990			return i % 2;
991		} ) );
992	},
993
994	eq: function( i ) {
995		var len = this.length,
996			j = +i + ( i < 0 ? len : 0 );
997		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
998	},
999
1000	end: function() {
1001		return this.prevObject || this.constructor();
1002	},
1003
1004	// For internal use only.
1005	// Behaves like an Array's method, not like a jQuery method.
1006	push: push,
1007	sort: arr.sort,
1008	splice: arr.splice
1009};
1010
1011jQuery.extend = jQuery.fn.extend = function() {
1012	var options, name, src, copy, copyIsArray, clone,
1013		target = arguments[ 0 ] || {},
1014		i = 1,
1015		length = arguments.length,
1016		deep = false;
1017
1018	// Handle a deep copy situation
1019	if ( typeof target === "boolean" ) {
1020		deep = target;
1021
1022		// Skip the boolean and the target
1023		target = arguments[ i ] || {};
1024		i++;
1025	}
1026
1027	// Handle case when target is a string or something (possible in deep copy)
1028	if ( typeof target !== "object" && !isFunction( target ) ) {
1029		target = {};
1030	}
1031
1032	// Extend jQuery itself if only one argument is passed
1033	if ( i === length ) {
1034		target = this;
1035		i--;
1036	}
1037
1038	for ( ; i < length; i++ ) {
1039
1040		// Only deal with non-null/undefined values
1041		if ( ( options = arguments[ i ] ) != null ) {
1042
1043			// Extend the base object
1044			for ( name in options ) {
1045				copy = options[ name ];
1046
1047				// Prevent Object.prototype pollution
1048				// Prevent never-ending loop
1049				if ( name === "__proto__" || target === copy ) {
1050					continue;
1051				}
1052
1053				// Recurse if we're merging plain objects or arrays
1054				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
1055					( copyIsArray = Array.isArray( copy ) ) ) ) {
1056					src = target[ name ];
1057
1058					// Ensure proper type for the source value
1059					if ( copyIsArray && !Array.isArray( src ) ) {
1060						clone = [];
1061					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
1062						clone = {};
1063					} else {
1064						clone = src;
1065					}
1066					copyIsArray = false;
1067
1068					// Never move original objects, clone them
1069					target[ name ] = jQuery.extend( deep, clone, copy );
1070
1071				// Don't bring in undefined values
1072				} else if ( copy !== undefined ) {
1073					target[ name ] = copy;
1074				}
1075			}
1076		}
1077	}
1078
1079	// Return the modified object
1080	return target;
1081};
1082
1083jQuery.extend( {
1084
1085	// Unique for each copy of jQuery on the page
1086	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
1087
1088	// Assume jQuery is ready without the ready module
1089	isReady: true,
1090
1091	error: function( msg ) {
1092		throw new Error( msg );
1093	},
1094
1095	noop: function() {},
1096
1097	isPlainObject: function( obj ) {
1098		var proto, Ctor;
1099
1100		// Detect obvious negatives
1101		// Use toString instead of jQuery.type to catch host objects
1102		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
1103			return false;
1104		}
1105
1106		proto = getProto( obj );
1107
1108		// Objects with no prototype (e.g., `Object.create( null )`) are plain
1109		if ( !proto ) {
1110			return true;
1111		}
1112
1113		// Objects with prototype are plain iff they were constructed by a global Object function
1114		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
1115		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
1116	},
1117
1118	isEmptyObject: function( obj ) {
1119		var name;
1120
1121		for ( name in obj ) {
1122			return false;
1123		}
1124		return true;
1125	},
1126
1127	// Evaluates a script in a provided context; falls back to the global one
1128	// if not specified.
1129	globalEval: function( code, options, doc ) {
1130		DOMEval( code, { nonce: options && options.nonce }, doc );
1131	},
1132
1133	each: function( obj, callback ) {
1134		var length, i = 0;
1135
1136		if ( isArrayLike( obj ) ) {
1137			length = obj.length;
1138			for ( ; i < length; i++ ) {
1139				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
1140					break;
1141				}
1142			}
1143		} else {
1144			for ( i in obj ) {
1145				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
1146					break;
1147				}
1148			}
1149		}
1150
1151		return obj;
1152	},
1153
1154
1155	// Retrieve the text value of an array of DOM nodes
1156	text: function( elem ) {
1157		var node,
1158			ret = "",
1159			i = 0,
1160			nodeType = elem.nodeType;
1161
1162		if ( !nodeType ) {
1163
1164			// If no nodeType, this is expected to be an array
1165			while ( ( node = elem[ i++ ] ) ) {
1166
1167				// Do not traverse comment nodes
1168				ret += jQuery.text( node );
1169			}
1170		}
1171		if ( nodeType === 1 || nodeType === 11 ) {
1172			return elem.textContent;
1173		}
1174		if ( nodeType === 9 ) {
1175			return elem.documentElement.textContent;
1176		}
1177		if ( nodeType === 3 || nodeType === 4 ) {
1178			return elem.nodeValue;
1179		}
1180
1181		// Do not include comment or processing instruction nodes
1182
1183		return ret;
1184	},
1185
1186	// results is for internal usage only
1187	makeArray: function( arr, results ) {
1188		var ret = results || [];
1189
1190		if ( arr != null ) {
1191			if ( isArrayLike( Object( arr ) ) ) {
1192				jQuery.merge( ret,
1193					typeof arr === "string" ?
1194						[ arr ] : arr
1195				);
1196			} else {
1197				push.call( ret, arr );
1198			}
1199		}
1200
1201		return ret;
1202	},
1203
1204	inArray: function( elem, arr, i ) {
1205		return arr == null ? -1 : indexOf.call( arr, elem, i );
1206	},
1207
1208	isXMLDoc: function( elem ) {
1209		var namespace = elem && elem.namespaceURI,
1210			docElem = elem && ( elem.ownerDocument || elem ).documentElement;
1211
1212		// Assume HTML when documentElement doesn't yet exist, such as inside
1213		// document fragments.
1214		return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" );
1215	},
1216
1217	// Support: Android <=4.0 only, PhantomJS 1 only
1218	// push.apply(_, arraylike) throws on ancient WebKit
1219	merge: function( first, second ) {
1220		var len = +second.length,
1221			j = 0,
1222			i = first.length;
1223
1224		for ( ; j < len; j++ ) {
1225			first[ i++ ] = second[ j ];
1226		}
1227
1228		first.length = i;
1229
1230		return first;
1231	},
1232
1233	grep: function( elems, callback, invert ) {
1234		var callbackInverse,
1235			matches = [],
1236			i = 0,
1237			length = elems.length,
1238			callbackExpect = !invert;
1239
1240		// Go through the array, only saving the items
1241		// that pass the validator function
1242		for ( ; i < length; i++ ) {
1243			callbackInverse = !callback( elems[ i ], i );
1244			if ( callbackInverse !== callbackExpect ) {
1245				matches.push( elems[ i ] );
1246			}
1247		}
1248
1249		return matches;
1250	},
1251
1252	// arg is for internal usage only
1253	map: function( elems, callback, arg ) {
1254		var length, value,
1255			i = 0,
1256			ret = [];
1257
1258		// Go through the array, translating each of the items to their new values
1259		if ( isArrayLike( elems ) ) {
1260			length = elems.length;
1261			for ( ; i < length; i++ ) {
1262				value = callback( elems[ i ], i, arg );
1263
1264				if ( value != null ) {
1265					ret.push( value );
1266				}
1267			}
1268
1269		// Go through every key on the object,
1270		} else {
1271			for ( i in elems ) {
1272				value = callback( elems[ i ], i, arg );
1273
1274				if ( value != null ) {
1275					ret.push( value );
1276				}
1277			}
1278		}
1279
1280		// Flatten any nested arrays
1281		return flat( ret );
1282	},
1283
1284	// A global GUID counter for objects
1285	guid: 1,
1286
1287	// jQuery.support is not used in Core but other projects attach their
1288	// properties to it so it needs to exist.
1289	support: support
1290} );
1291
1292if ( typeof Symbol === "function" ) {
1293	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
1294}
1295
1296// Populate the class2type map
1297jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
1298	function( _i, name ) {
1299		class2type[ "[object " + name + "]" ] = name.toLowerCase();
1300	} );
1301
1302function isArrayLike( obj ) {
1303
1304	// Support: real iOS 8.2 only (not reproducible in simulator)
1305	// `in` check used to prevent JIT error (gh-2145)
1306	// hasOwn isn't used here due to false negatives
1307	// regarding Nodelist length in IE
1308	var length = !!obj && "length" in obj && obj.length,
1309		type = toType( obj );
1310
1311	if ( isFunction( obj ) || isWindow( obj ) ) {
1312		return false;
1313	}
1314
1315	return type === "array" || length === 0 ||
1316		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
1317}
1318
1319
1320function nodeName( elem, name ) {
1321
1322	return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
1323
1324}
1325var pop = arr.pop;
1326
1327
1328var sort = arr.sort;
1329
1330
1331var splice = arr.splice;
1332
1333
1334var whitespace = "[\\x20\\t\\r\\n\\f]";
1335
1336
1337var rtrimCSS = new RegExp(
1338	"^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
1339	"g"
1340);
1341
1342
1343
1344
1345// Note: an element does not contain itself
1346jQuery.contains = function( a, b ) {
1347	var bup = b && b.parentNode;
1348
1349	return a === bup || !!( bup && bup.nodeType === 1 && (
1350
1351		// Support: IE 9 - 11+
1352		// IE doesn't have `contains` on SVG.
1353		a.contains ?
1354			a.contains( bup ) :
1355			a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
1356	) );
1357};
1358
1359
1360
1361
1362// CSS string/identifier serialization
1363// https://drafts.csswg.org/cssom/#common-serializing-idioms
1364var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
1365
1366function fcssescape( ch, asCodePoint ) {
1367	if ( asCodePoint ) {
1368
1369		// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
1370		if ( ch === "\0" ) {
1371			return "\uFFFD";
1372		}
1373
1374		// Control characters and (dependent upon position) numbers get escaped as code points
1375		return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
1376	}
1377
1378	// Other potentially-special ASCII characters get backslash-escaped
1379	return "\\" + ch;
1380}
1381
1382jQuery.escapeSelector = function( sel ) {
1383	return ( sel + "" ).replace( rcssescape, fcssescape );
1384};
1385
1386
1387
1388
1389var preferredDoc = document,
1390	pushNative = push;
1391
1392( function() {
1393
1394var i,
1395	Expr,
1396	outermostContext,
1397	sortInput,
1398	hasDuplicate,
1399	push = pushNative,
1400
1401	// Local document vars
1402	document,
1403	documentElement,
1404	documentIsHTML,
1405	rbuggyQSA,
1406	matches,
1407
1408	// Instance-specific data
1409	expando = jQuery.expando,
1410	dirruns = 0,
1411	done = 0,
1412	classCache = createCache(),
1413	tokenCache = createCache(),
1414	compilerCache = createCache(),
1415	nonnativeSelectorCache = createCache(),
1416	sortOrder = function( a, b ) {
1417		if ( a === b ) {
1418			hasDuplicate = true;
1419		}
1420		return 0;
1421	},
1422
1423	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" +
1424		"loop|multiple|open|readonly|required|scoped",
1425
1426	// Regular expressions
1427
1428	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
1429	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
1430		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
1431
1432	// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors
1433	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
1434
1435		// Operator (capture 2)
1436		"*([*^$|!~]?=)" + whitespace +
1437
1438		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
1439		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
1440		whitespace + "*\\]",
1441
1442	pseudos = ":(" + identifier + ")(?:\\((" +
1443
1444		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
1445		// 1. quoted (capture 3; capture 4 or capture 5)
1446		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
1447
1448		// 2. simple (capture 6)
1449		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
1450
1451		// 3. anything else (capture 2)
1452		".*" +
1453		")\\)|)",
1454
1455	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
1456	rwhitespace = new RegExp( whitespace + "+", "g" ),
1457
1458	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
1459	rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" +
1460		whitespace + "*" ),
1461	rdescend = new RegExp( whitespace + "|>" ),
1462
1463	rpseudo = new RegExp( pseudos ),
1464	ridentifier = new RegExp( "^" + identifier + "$" ),
1465
1466	matchExpr = {
1467		ID: new RegExp( "^#(" + identifier + ")" ),
1468		CLASS: new RegExp( "^\\.(" + identifier + ")" ),
1469		TAG: new RegExp( "^(" + identifier + "|[*])" ),
1470		ATTR: new RegExp( "^" + attributes ),
1471		PSEUDO: new RegExp( "^" + pseudos ),
1472		CHILD: new RegExp(
1473			"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
1474				whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
1475				whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
1476		bool: new RegExp( "^(?:" + booleans + ")$", "i" ),
1477
1478		// For use in libraries implementing .is()
1479		// We use this for POS matching in `select`
1480		needsContext: new RegExp( "^" + whitespace +
1481			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
1482			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
1483	},
1484
1485	rinputs = /^(?:input|select|textarea|button)$/i,
1486	rheader = /^h\d$/i,
1487
1488	// Easily-parseable/retrievable ID or TAG or CLASS selectors
1489	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
1490
1491	rsibling = /[+~]/,
1492
1493	// CSS escapes
1494	// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters
1495	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace +
1496		"?|\\\\([^\\r\\n\\f])", "g" ),
1497	funescape = function( escape, nonHex ) {
1498		var high = "0x" + escape.slice( 1 ) - 0x10000;
1499
1500		if ( nonHex ) {
1501
1502			// Strip the backslash prefix from a non-hex escape sequence
1503			return nonHex;
1504		}
1505
1506		// Replace a hexadecimal escape sequence with the encoded Unicode code point
1507		// Support: IE <=11+
1508		// For values outside the Basic Multilingual Plane (BMP), manually construct a
1509		// surrogate pair
1510		return high < 0 ?
1511			String.fromCharCode( high + 0x10000 ) :
1512			String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
1513	},
1514
1515	// Used for iframes; see `setDocument`.
1516	// Support: IE 9 - 11+, Edge 12 - 18+
1517	// Removing the function wrapper causes a "Permission Denied"
1518	// error in IE/Edge.
1519	unloadHandler = function() {
1520		setDocument();
1521	},
1522
1523	inDisabledFieldset = addCombinator(
1524		function( elem ) {
1525			return elem.disabled === true && nodeName( elem, "fieldset" );
1526		},
1527		{ dir: "parentNode", next: "legend" }
1528	);
1529
1530// Support: IE <=9 only
1531// Accessing document.activeElement can throw unexpectedly
1532// https://bugs.jquery.com/ticket/13393
1533function safeActiveElement() {
1534	try {
1535		return document.activeElement;
1536	} catch ( err ) { }
1537}
1538
1539// Optimize for push.apply( _, NodeList )
1540try {
1541	push.apply(
1542		( arr = slice.call( preferredDoc.childNodes ) ),
1543		preferredDoc.childNodes
1544	);
1545
1546	// Support: Android <=4.0
1547	// Detect silently failing push.apply
1548	// eslint-disable-next-line no-unused-expressions
1549	arr[ preferredDoc.childNodes.length ].nodeType;
1550} catch ( e ) {
1551	push = {
1552		apply: function( target, els ) {
1553			pushNative.apply( target, slice.call( els ) );
1554		},
1555		call: function( target ) {
1556			pushNative.apply( target, slice.call( arguments, 1 ) );
1557		}
1558	};
1559}
1560
1561function find( selector, context, results, seed ) {
1562	var m, i, elem, nid, match, groups, newSelector,
1563		newContext = context && context.ownerDocument,
1564
1565		// nodeType defaults to 9, since context defaults to document
1566		nodeType = context ? context.nodeType : 9;
1567
1568	results = results || [];
1569
1570	// Return early from calls with invalid selector or context
1571	if ( typeof selector !== "string" || !selector ||
1572		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
1573
1574		return results;
1575	}
1576
1577	// Try to shortcut find operations (as opposed to filters) in HTML documents
1578	if ( !seed ) {
1579		setDocument( context );
1580		context = context || document;
1581
1582		if ( documentIsHTML ) {
1583
1584			// If the selector is sufficiently simple, try using a "get*By*" DOM method
1585			// (excepting DocumentFragment context, where the methods don't exist)
1586			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
1587
1588				// ID selector
1589				if ( ( m = match[ 1 ] ) ) {
1590
1591					// Document context
1592					if ( nodeType === 9 ) {
1593						if ( ( elem = context.getElementById( m ) ) ) {
1594
1595							// Support: IE 9 only
1596							// getElementById can match elements by name instead of ID
1597							if ( elem.id === m ) {
1598								push.call( results, elem );
1599								return results;
1600							}
1601						} else {
1602							return results;
1603						}
1604
1605					// Element context
1606					} else {
1607
1608						// Support: IE 9 only
1609						// getElementById can match elements by name instead of ID
1610						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
1611							find.contains( context, elem ) &&
1612							elem.id === m ) {
1613
1614							push.call( results, elem );
1615							return results;
1616						}
1617					}
1618
1619				// Type selector
1620				} else if ( match[ 2 ] ) {
1621					push.apply( results, context.getElementsByTagName( selector ) );
1622					return results;
1623
1624				// Class selector
1625				} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {
1626					push.apply( results, context.getElementsByClassName( m ) );
1627					return results;
1628				}
1629			}
1630
1631			// Take advantage of querySelectorAll
1632			if ( !nonnativeSelectorCache[ selector + " " ] &&
1633				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {
1634
1635				newSelector = selector;
1636				newContext = context;
1637
1638				// qSA considers elements outside a scoping root when evaluating child or
1639				// descendant combinators, which is not what we want.
1640				// In such cases, we work around the behavior by prefixing every selector in the
1641				// list with an ID selector referencing the scope context.
1642				// The technique has to be used as well when a leading combinator is used
1643				// as such selectors are not recognized by querySelectorAll.
1644				// Thanks to Andrew Dupont for this technique.
1645				if ( nodeType === 1 &&
1646					( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
1647
1648					// Expand context for sibling selectors
1649					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
1650						context;
1651
1652					// We can use :scope instead of the ID hack if the browser
1653					// supports it & if we're not changing the context.
1654					// Support: IE 11+, Edge 17 - 18+
1655					// IE/Edge sometimes throw a "Permission denied" error when
1656					// strict-comparing two documents; shallow comparisons work.
1657					// eslint-disable-next-line eqeqeq
1658					if ( newContext != context || !support.scope ) {
1659
1660						// Capture the context ID, setting it first if necessary
1661						if ( ( nid = context.getAttribute( "id" ) ) ) {
1662							nid = jQuery.escapeSelector( nid );
1663						} else {
1664							context.setAttribute( "id", ( nid = expando ) );
1665						}
1666					}
1667
1668					// Prefix every selector in the list
1669					groups = tokenize( selector );
1670					i = groups.length;
1671					while ( i-- ) {
1672						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
1673							toSelector( groups[ i ] );
1674					}
1675					newSelector = groups.join( "," );
1676				}
1677
1678				try {
1679					push.apply( results,
1680						newContext.querySelectorAll( newSelector )
1681					);
1682					return results;
1683				} catch ( qsaError ) {
1684					nonnativeSelectorCache( selector, true );
1685				} finally {
1686					if ( nid === expando ) {
1687						context.removeAttribute( "id" );
1688					}
1689				}
1690			}
1691		}
1692	}
1693
1694	// All others
1695	return select( selector.replace( rtrimCSS, "$1" ), context, results, seed );
1696}
1697
1698/**
1699 * Create key-value caches of limited size
1700 * @returns {function(string, object)} Returns the Object data after storing it on itself with
1701 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
1702 *	deleting the oldest entry
1703 */
1704function createCache() {
1705	var keys = [];
1706
1707	function cache( key, value ) {
1708
1709		// Use (key + " ") to avoid collision with native prototype properties
1710		// (see https://github.com/jquery/sizzle/issues/157)
1711		if ( keys.push( key + " " ) > Expr.cacheLength ) {
1712
1713			// Only keep the most recent entries
1714			delete cache[ keys.shift() ];
1715		}
1716		return ( cache[ key + " " ] = value );
1717	}
1718	return cache;
1719}
1720
1721/**
1722 * Mark a function for special use by jQuery selector module
1723 * @param {Function} fn The function to mark
1724 */
1725function markFunction( fn ) {
1726	fn[ expando ] = true;
1727	return fn;
1728}
1729
1730/**
1731 * Support testing using an element
1732 * @param {Function} fn Passed the created element and returns a boolean result
1733 */
1734function assert( fn ) {
1735	var el = document.createElement( "fieldset" );
1736
1737	try {
1738		return !!fn( el );
1739	} catch ( e ) {
1740		return false;
1741	} finally {
1742
1743		// Remove from its parent by default
1744		if ( el.parentNode ) {
1745			el.parentNode.removeChild( el );
1746		}
1747
1748		// release memory in IE
1749		el = null;
1750	}
1751}
1752
1753/**
1754 * Returns a function to use in pseudos for input types
1755 * @param {String} type
1756 */
1757function createInputPseudo( type ) {
1758	return function( elem ) {
1759		return nodeName( elem, "input" ) && elem.type === type;
1760	};
1761}
1762
1763/**
1764 * Returns a function to use in pseudos for buttons
1765 * @param {String} type
1766 */
1767function createButtonPseudo( type ) {
1768	return function( elem ) {
1769		return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) &&
1770			elem.type === type;
1771	};
1772}
1773
1774/**
1775 * Returns a function to use in pseudos for :enabled/:disabled
1776 * @param {Boolean} disabled true for :disabled; false for :enabled
1777 */
1778function createDisabledPseudo( disabled ) {
1779
1780	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
1781	return function( elem ) {
1782
1783		// Only certain elements can match :enabled or :disabled
1784		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
1785		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
1786		if ( "form" in elem ) {
1787
1788			// Check for inherited disabledness on relevant non-disabled elements:
1789			// * listed form-associated elements in a disabled fieldset
1790			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
1791			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
1792			// * option elements in a disabled optgroup
1793			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
1794			// All such elements have a "form" property.
1795			if ( elem.parentNode && elem.disabled === false ) {
1796
1797				// Option elements defer to a parent optgroup if present
1798				if ( "label" in elem ) {
1799					if ( "label" in elem.parentNode ) {
1800						return elem.parentNode.disabled === disabled;
1801					} else {
1802						return elem.disabled === disabled;
1803					}
1804				}
1805
1806				// Support: IE 6 - 11+
1807				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
1808				return elem.isDisabled === disabled ||
1809
1810					// Where there is no isDisabled, check manually
1811					elem.isDisabled !== !disabled &&
1812						inDisabledFieldset( elem ) === disabled;
1813			}
1814
1815			return elem.disabled === disabled;
1816
1817		// Try to winnow out elements that can't be disabled before trusting the disabled property.
1818		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
1819		// even exist on them, let alone have a boolean value.
1820		} else if ( "label" in elem ) {
1821			return elem.disabled === disabled;
1822		}
1823
1824		// Remaining elements are neither :enabled nor :disabled
1825		return false;
1826	};
1827}
1828
1829/**
1830 * Returns a function to use in pseudos for positionals
1831 * @param {Function} fn
1832 */
1833function createPositionalPseudo( fn ) {
1834	return markFunction( function( argument ) {
1835		argument = +argument;
1836		return markFunction( function( seed, matches ) {
1837			var j,
1838				matchIndexes = fn( [], seed.length, argument ),
1839				i = matchIndexes.length;
1840
1841			// Match elements found at the specified indexes
1842			while ( i-- ) {
1843				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
1844					seed[ j ] = !( matches[ j ] = seed[ j ] );
1845				}
1846			}
1847		} );
1848	} );
1849}
1850
1851/**
1852 * Checks a node for validity as a jQuery selector context
1853 * @param {Element|Object=} context
1854 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
1855 */
1856function testContext( context ) {
1857	return context && typeof context.getElementsByTagName !== "undefined" && context;
1858}
1859
1860/**
1861 * Sets document-related variables once based on the current document
1862 * @param {Element|Object} [node] An element or document object to use to set the document
1863 * @returns {Object} Returns the current document
1864 */
1865function setDocument( node ) {
1866	var subWindow,
1867		doc = node ? node.ownerDocument || node : preferredDoc;
1868
1869	// Return early if doc is invalid or already selected
1870	// Support: IE 11+, Edge 17 - 18+
1871	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1872	// two documents; shallow comparisons work.
1873	// eslint-disable-next-line eqeqeq
1874	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
1875		return document;
1876	}
1877
1878	// Update global variables
1879	document = doc;
1880	documentElement = document.documentElement;
1881	documentIsHTML = !jQuery.isXMLDoc( document );
1882
1883	// Support: iOS 7 only, IE 9 - 11+
1884	// Older browsers didn't support unprefixed `matches`.
1885	matches = documentElement.matches ||
1886		documentElement.webkitMatchesSelector ||
1887		documentElement.msMatchesSelector;
1888
1889	// Support: IE 9 - 11+, Edge 12 - 18+
1890	// Accessing iframe documents after unload throws "permission denied" errors
1891	// (see trac-13936).
1892	// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,
1893	// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.
1894	if ( documentElement.msMatchesSelector &&
1895
1896		// Support: IE 11+, Edge 17 - 18+
1897		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
1898		// two documents; shallow comparisons work.
1899		// eslint-disable-next-line eqeqeq
1900		preferredDoc != document &&
1901		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
1902
1903		// Support: IE 9 - 11+, Edge 12 - 18+
1904		subWindow.addEventListener( "unload", unloadHandler );
1905	}
1906
1907	// Support: IE <10
1908	// Check if getElementById returns elements by name
1909	// The broken getElementById methods don't pick up programmatically-set names,
1910	// so use a roundabout getElementsByName test
1911	support.getById = assert( function( el ) {
1912		documentElement.appendChild( el ).id = jQuery.expando;
1913		return !document.getElementsByName ||
1914			!document.getElementsByName( jQuery.expando ).length;
1915	} );
1916
1917	// Support: IE 9 only
1918	// Check to see if it's possible to do matchesSelector
1919	// on a disconnected node.
1920	support.disconnectedMatch = assert( function( el ) {
1921		return matches.call( el, "*" );
1922	} );
1923
1924	// Support: IE 9 - 11+, Edge 12 - 18+
1925	// IE/Edge don't support the :scope pseudo-class.
1926	support.scope = assert( function() {
1927		return document.querySelectorAll( ":scope" );
1928	} );
1929
1930	// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only
1931	// Make sure the `:has()` argument is parsed unforgivingly.
1932	// We include `*` in the test to detect buggy implementations that are
1933	// _selectively_ forgiving (specifically when the list includes at least
1934	// one valid selector).
1935	// Note that we treat complete lack of support for `:has()` as if it were
1936	// spec-compliant support, which is fine because use of `:has()` in such
1937	// environments will fail in the qSA path and fall back to jQuery traversal
1938	// anyway.
1939	support.cssHas = assert( function() {
1940		try {
1941			document.querySelector( ":has(*,:jqfake)" );
1942			return false;
1943		} catch ( e ) {
1944			return true;
1945		}
1946	} );
1947
1948	// ID filter and find
1949	if ( support.getById ) {
1950		Expr.filter.ID = function( id ) {
1951			var attrId = id.replace( runescape, funescape );
1952			return function( elem ) {
1953				return elem.getAttribute( "id" ) === attrId;
1954			};
1955		};
1956		Expr.find.ID = function( id, context ) {
1957			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1958				var elem = context.getElementById( id );
1959				return elem ? [ elem ] : [];
1960			}
1961		};
1962	} else {
1963		Expr.filter.ID =  function( id ) {
1964			var attrId = id.replace( runescape, funescape );
1965			return function( elem ) {
1966				var node = typeof elem.getAttributeNode !== "undefined" &&
1967					elem.getAttributeNode( "id" );
1968				return node && node.value === attrId;
1969			};
1970		};
1971
1972		// Support: IE 6 - 7 only
1973		// getElementById is not reliable as a find shortcut
1974		Expr.find.ID = function( id, context ) {
1975			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1976				var node, i, elems,
1977					elem = context.getElementById( id );
1978
1979				if ( elem ) {
1980
1981					// Verify the id attribute
1982					node = elem.getAttributeNode( "id" );
1983					if ( node && node.value === id ) {
1984						return [ elem ];
1985					}
1986
1987					// Fall back on getElementsByName
1988					elems = context.getElementsByName( id );
1989					i = 0;
1990					while ( ( elem = elems[ i++ ] ) ) {
1991						node = elem.getAttributeNode( "id" );
1992						if ( node && node.value === id ) {
1993							return [ elem ];
1994						}
1995					}
1996				}
1997
1998				return [];
1999			}
2000		};
2001	}
2002
2003	// Tag
2004	Expr.find.TAG = function( tag, context ) {
2005		if ( typeof context.getElementsByTagName !== "undefined" ) {
2006			return context.getElementsByTagName( tag );
2007
2008		// DocumentFragment nodes don't have gEBTN
2009		} else {
2010			return context.querySelectorAll( tag );
2011		}
2012	};
2013
2014	// Class
2015	Expr.find.CLASS = function( className, context ) {
2016		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
2017			return context.getElementsByClassName( className );
2018		}
2019	};
2020
2021	/* QSA/matchesSelector
2022	---------------------------------------------------------------------- */
2023
2024	// QSA and matchesSelector support
2025
2026	rbuggyQSA = [];
2027
2028	// Build QSA regex
2029	// Regex strategy adopted from Diego Perini
2030	assert( function( el ) {
2031
2032		var input;
2033
2034		documentElement.appendChild( el ).innerHTML =
2035			"<a id='" + expando + "' href='' disabled='disabled'></a>" +
2036			"<select id='" + expando + "-\r\\' disabled='disabled'>" +
2037			"<option selected=''></option></select>";
2038
2039		// Support: iOS <=7 - 8 only
2040		// Boolean attributes and "value" are not treated correctly in some XML documents
2041		if ( !el.querySelectorAll( "[selected]" ).length ) {
2042			rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
2043		}
2044
2045		// Support: iOS <=7 - 8 only
2046		if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
2047			rbuggyQSA.push( "~=" );
2048		}
2049
2050		// Support: iOS 8 only
2051		// https://bugs.webkit.org/show_bug.cgi?id=136851
2052		// In-page `selector#id sibling-combinator selector` fails
2053		if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
2054			rbuggyQSA.push( ".#.+[+~]" );
2055		}
2056
2057		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
2058		// In some of the document kinds, these selectors wouldn't work natively.
2059		// This is probably OK but for backwards compatibility we want to maintain
2060		// handling them through jQuery traversal in jQuery 3.x.
2061		if ( !el.querySelectorAll( ":checked" ).length ) {
2062			rbuggyQSA.push( ":checked" );
2063		}
2064
2065		// Support: Windows 8 Native Apps
2066		// The type and name attributes are restricted during .innerHTML assignment
2067		input = document.createElement( "input" );
2068		input.setAttribute( "type", "hidden" );
2069		el.appendChild( input ).setAttribute( "name", "D" );
2070
2071		// Support: IE 9 - 11+
2072		// IE's :disabled selector does not pick up the children of disabled fieldsets
2073		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
2074		// In some of the document kinds, these selectors wouldn't work natively.
2075		// This is probably OK but for backwards compatibility we want to maintain
2076		// handling them through jQuery traversal in jQuery 3.x.
2077		documentElement.appendChild( el ).disabled = true;
2078		if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
2079			rbuggyQSA.push( ":enabled", ":disabled" );
2080		}
2081
2082		// Support: IE 11+, Edge 15 - 18+
2083		// IE 11/Edge don't find elements on a `[name='']` query in some cases.
2084		// Adding a temporary attribute to the document before the selection works
2085		// around the issue.
2086		// Interestingly, IE 10 & older don't seem to have the issue.
2087		input = document.createElement( "input" );
2088		input.setAttribute( "name", "" );
2089		el.appendChild( input );
2090		if ( !el.querySelectorAll( "[name='']" ).length ) {
2091			rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
2092				whitespace + "*(?:''|\"\")" );
2093		}
2094	} );
2095
2096	if ( !support.cssHas ) {
2097
2098		// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
2099		// Our regular `try-catch` mechanism fails to detect natively-unsupported
2100		// pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)
2101		// in browsers that parse the `:has()` argument as a forgiving selector list.
2102		// https://drafts.csswg.org/selectors/#relational now requires the argument
2103		// to be parsed unforgivingly, but browsers have not yet fully adjusted.
2104		rbuggyQSA.push( ":has" );
2105	}
2106
2107	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
2108
2109	/* Sorting
2110	---------------------------------------------------------------------- */
2111
2112	// Document order sorting
2113	sortOrder = function( a, b ) {
2114
2115		// Flag for duplicate removal
2116		if ( a === b ) {
2117			hasDuplicate = true;
2118			return 0;
2119		}
2120
2121		// Sort on method existence if only one input has compareDocumentPosition
2122		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
2123		if ( compare ) {
2124			return compare;
2125		}
2126
2127		// Calculate position if both inputs belong to the same document
2128		// Support: IE 11+, Edge 17 - 18+
2129		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2130		// two documents; shallow comparisons work.
2131		// eslint-disable-next-line eqeqeq
2132		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
2133			a.compareDocumentPosition( b ) :
2134
2135			// Otherwise we know they are disconnected
2136			1;
2137
2138		// Disconnected nodes
2139		if ( compare & 1 ||
2140			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
2141
2142			// Choose the first element that is related to our preferred document
2143			// Support: IE 11+, Edge 17 - 18+
2144			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2145			// two documents; shallow comparisons work.
2146			// eslint-disable-next-line eqeqeq
2147			if ( a === document || a.ownerDocument == preferredDoc &&
2148				find.contains( preferredDoc, a ) ) {
2149				return -1;
2150			}
2151
2152			// Support: IE 11+, Edge 17 - 18+
2153			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2154			// two documents; shallow comparisons work.
2155			// eslint-disable-next-line eqeqeq
2156			if ( b === document || b.ownerDocument == preferredDoc &&
2157				find.contains( preferredDoc, b ) ) {
2158				return 1;
2159			}
2160
2161			// Maintain original order
2162			return sortInput ?
2163				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
2164				0;
2165		}
2166
2167		return compare & 4 ? -1 : 1;
2168	};
2169
2170	return document;
2171}
2172
2173find.matches = function( expr, elements ) {
2174	return find( expr, null, null, elements );
2175};
2176
2177find.matchesSelector = function( elem, expr ) {
2178	setDocument( elem );
2179
2180	if ( documentIsHTML &&
2181		!nonnativeSelectorCache[ expr + " " ] &&
2182		( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
2183
2184		try {
2185			var ret = matches.call( elem, expr );
2186
2187			// IE 9's matchesSelector returns false on disconnected nodes
2188			if ( ret || support.disconnectedMatch ||
2189
2190					// As well, disconnected nodes are said to be in a document
2191					// fragment in IE 9
2192					elem.document && elem.document.nodeType !== 11 ) {
2193				return ret;
2194			}
2195		} catch ( e ) {
2196			nonnativeSelectorCache( expr, true );
2197		}
2198	}
2199
2200	return find( expr, document, null, [ elem ] ).length > 0;
2201};
2202
2203find.contains = function( context, elem ) {
2204
2205	// Set document vars if needed
2206	// Support: IE 11+, Edge 17 - 18+
2207	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2208	// two documents; shallow comparisons work.
2209	// eslint-disable-next-line eqeqeq
2210	if ( ( context.ownerDocument || context ) != document ) {
2211		setDocument( context );
2212	}
2213	return jQuery.contains( context, elem );
2214};
2215
2216
2217find.attr = function( elem, name ) {
2218
2219	// Set document vars if needed
2220	// Support: IE 11+, Edge 17 - 18+
2221	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2222	// two documents; shallow comparisons work.
2223	// eslint-disable-next-line eqeqeq
2224	if ( ( elem.ownerDocument || elem ) != document ) {
2225		setDocument( elem );
2226	}
2227
2228	var fn = Expr.attrHandle[ name.toLowerCase() ],
2229
2230		// Don't get fooled by Object.prototype properties (see trac-13807)
2231		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
2232			fn( elem, name, !documentIsHTML ) :
2233			undefined;
2234
2235	if ( val !== undefined ) {
2236		return val;
2237	}
2238
2239	return elem.getAttribute( name );
2240};
2241
2242find.error = function( msg ) {
2243	throw new Error( "Syntax error, unrecognized expression: " + msg );
2244};
2245
2246/**
2247 * Document sorting and removing duplicates
2248 * @param {ArrayLike} results
2249 */
2250jQuery.uniqueSort = function( results ) {
2251	var elem,
2252		duplicates = [],
2253		j = 0,
2254		i = 0;
2255
2256	// Unless we *know* we can detect duplicates, assume their presence
2257	//
2258	// Support: Android <=4.0+
2259	// Testing for detecting duplicates is unpredictable so instead assume we can't
2260	// depend on duplicate detection in all browsers without a stable sort.
2261	hasDuplicate = !support.sortStable;
2262	sortInput = !support.sortStable && slice.call( results, 0 );
2263	sort.call( results, sortOrder );
2264
2265	if ( hasDuplicate ) {
2266		while ( ( elem = results[ i++ ] ) ) {
2267			if ( elem === results[ i ] ) {
2268				j = duplicates.push( i );
2269			}
2270		}
2271		while ( j-- ) {
2272			splice.call( results, duplicates[ j ], 1 );
2273		}
2274	}
2275
2276	// Clear input after sorting to release objects
2277	// See https://github.com/jquery/sizzle/pull/225
2278	sortInput = null;
2279
2280	return results;
2281};
2282
2283jQuery.fn.uniqueSort = function() {
2284	return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );
2285};
2286
2287Expr = jQuery.expr = {
2288
2289	// Can be adjusted by the user
2290	cacheLength: 50,
2291
2292	createPseudo: markFunction,
2293
2294	match: matchExpr,
2295
2296	attrHandle: {},
2297
2298	find: {},
2299
2300	relative: {
2301		">": { dir: "parentNode", first: true },
2302		" ": { dir: "parentNode" },
2303		"+": { dir: "previousSibling", first: true },
2304		"~": { dir: "previousSibling" }
2305	},
2306
2307	preFilter: {
2308		ATTR: function( match ) {
2309			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
2310
2311			// Move the given value to match[3] whether quoted or unquoted
2312			match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" )
2313				.replace( runescape, funescape );
2314
2315			if ( match[ 2 ] === "~=" ) {
2316				match[ 3 ] = " " + match[ 3 ] + " ";
2317			}
2318
2319			return match.slice( 0, 4 );
2320		},
2321
2322		CHILD: function( match ) {
2323
2324			/* matches from matchExpr["CHILD"]
2325				1 type (only|nth|...)
2326				2 what (child|of-type)
2327				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
2328				4 xn-component of xn+y argument ([+-]?\d*n|)
2329				5 sign of xn-component
2330				6 x of xn-component
2331				7 sign of y-component
2332				8 y of y-component
2333			*/
2334			match[ 1 ] = match[ 1 ].toLowerCase();
2335
2336			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
2337
2338				// nth-* requires argument
2339				if ( !match[ 3 ] ) {
2340					find.error( match[ 0 ] );
2341				}
2342
2343				// numeric x and y parameters for Expr.filter.CHILD
2344				// remember that false/true cast respectively to 0/1
2345				match[ 4 ] = +( match[ 4 ] ?
2346					match[ 5 ] + ( match[ 6 ] || 1 ) :
2347					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" )
2348				);
2349				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
2350
2351			// other types prohibit arguments
2352			} else if ( match[ 3 ] ) {
2353				find.error( match[ 0 ] );
2354			}
2355
2356			return match;
2357		},
2358
2359		PSEUDO: function( match ) {
2360			var excess,
2361				unquoted = !match[ 6 ] && match[ 2 ];
2362
2363			if ( matchExpr.CHILD.test( match[ 0 ] ) ) {
2364				return null;
2365			}
2366
2367			// Accept quoted arguments as-is
2368			if ( match[ 3 ] ) {
2369				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
2370
2371			// Strip excess characters from unquoted arguments
2372			} else if ( unquoted && rpseudo.test( unquoted ) &&
2373
2374				// Get excess from tokenize (recursively)
2375				( excess = tokenize( unquoted, true ) ) &&
2376
2377				// advance to the next closing parenthesis
2378				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
2379
2380				// excess is a negative index
2381				match[ 0 ] = match[ 0 ].slice( 0, excess );
2382				match[ 2 ] = unquoted.slice( 0, excess );
2383			}
2384
2385			// Return only captures needed by the pseudo filter method (type and argument)
2386			return match.slice( 0, 3 );
2387		}
2388	},
2389
2390	filter: {
2391
2392		TAG: function( nodeNameSelector ) {
2393			var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
2394			return nodeNameSelector === "*" ?
2395				function() {
2396					return true;
2397				} :
2398				function( elem ) {
2399					return nodeName( elem, expectedNodeName );
2400				};
2401		},
2402
2403		CLASS: function( className ) {
2404			var pattern = classCache[ className + " " ];
2405
2406			return pattern ||
2407				( pattern = new RegExp( "(^|" + whitespace + ")" + className +
2408					"(" + whitespace + "|$)" ) ) &&
2409				classCache( className, function( elem ) {
2410					return pattern.test(
2411						typeof elem.className === "string" && elem.className ||
2412							typeof elem.getAttribute !== "undefined" &&
2413								elem.getAttribute( "class" ) ||
2414							""
2415					);
2416				} );
2417		},
2418
2419		ATTR: function( name, operator, check ) {
2420			return function( elem ) {
2421				var result = find.attr( elem, name );
2422
2423				if ( result == null ) {
2424					return operator === "!=";
2425				}
2426				if ( !operator ) {
2427					return true;
2428				}
2429
2430				result += "";
2431
2432				if ( operator === "=" ) {
2433					return result === check;
2434				}
2435				if ( operator === "!=" ) {
2436					return result !== check;
2437				}
2438				if ( operator === "^=" ) {
2439					return check && result.indexOf( check ) === 0;
2440				}
2441				if ( operator === "*=" ) {
2442					return check && result.indexOf( check ) > -1;
2443				}
2444				if ( operator === "$=" ) {
2445					return check && result.slice( -check.length ) === check;
2446				}
2447				if ( operator === "~=" ) {
2448					return ( " " + result.replace( rwhitespace, " " ) + " " )
2449						.indexOf( check ) > -1;
2450				}
2451				if ( operator === "|=" ) {
2452					return result === check || result.slice( 0, check.length + 1 ) === check + "-";
2453				}
2454
2455				return false;
2456			};
2457		},
2458
2459		CHILD: function( type, what, _argument, first, last ) {
2460			var simple = type.slice( 0, 3 ) !== "nth",
2461				forward = type.slice( -4 ) !== "last",
2462				ofType = what === "of-type";
2463
2464			return first === 1 && last === 0 ?
2465
2466				// Shortcut for :nth-*(n)
2467				function( elem ) {
2468					return !!elem.parentNode;
2469				} :
2470
2471				function( elem, _context, xml ) {
2472					var cache, outerCache, node, nodeIndex, start,
2473						dir = simple !== forward ? "nextSibling" : "previousSibling",
2474						parent = elem.parentNode,
2475						name = ofType && elem.nodeName.toLowerCase(),
2476						useCache = !xml && !ofType,
2477						diff = false;
2478
2479					if ( parent ) {
2480
2481						// :(first|last|only)-(child|of-type)
2482						if ( simple ) {
2483							while ( dir ) {
2484								node = elem;
2485								while ( ( node = node[ dir ] ) ) {
2486									if ( ofType ?
2487										nodeName( node, name ) :
2488										node.nodeType === 1 ) {
2489
2490										return false;
2491									}
2492								}
2493
2494								// Reverse direction for :only-* (if we haven't yet done so)
2495								start = dir = type === "only" && !start && "nextSibling";
2496							}
2497							return true;
2498						}
2499
2500						start = [ forward ? parent.firstChild : parent.lastChild ];
2501
2502						// non-xml :nth-child(...) stores cache data on `parent`
2503						if ( forward && useCache ) {
2504
2505							// Seek `elem` from a previously-cached index
2506							outerCache = parent[ expando ] || ( parent[ expando ] = {} );
2507							cache = outerCache[ type ] || [];
2508							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
2509							diff = nodeIndex && cache[ 2 ];
2510							node = nodeIndex && parent.childNodes[ nodeIndex ];
2511
2512							while ( ( node = ++nodeIndex && node && node[ dir ] ||
2513
2514								// Fallback to seeking `elem` from the start
2515								( diff = nodeIndex = 0 ) || start.pop() ) ) {
2516
2517								// When found, cache indexes on `parent` and break
2518								if ( node.nodeType === 1 && ++diff && node === elem ) {
2519									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
2520									break;
2521								}
2522							}
2523
2524						} else {
2525
2526							// Use previously-cached element index if available
2527							if ( useCache ) {
2528								outerCache = elem[ expando ] || ( elem[ expando ] = {} );
2529								cache = outerCache[ type ] || [];
2530								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
2531								diff = nodeIndex;
2532							}
2533
2534							// xml :nth-child(...)
2535							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
2536							if ( diff === false ) {
2537
2538								// Use the same loop as above to seek `elem` from the start
2539								while ( ( node = ++nodeIndex && node && node[ dir ] ||
2540									( diff = nodeIndex = 0 ) || start.pop() ) ) {
2541
2542									if ( ( ofType ?
2543										nodeName( node, name ) :
2544										node.nodeType === 1 ) &&
2545										++diff ) {
2546
2547										// Cache the index of each encountered element
2548										if ( useCache ) {
2549											outerCache = node[ expando ] ||
2550												( node[ expando ] = {} );
2551											outerCache[ type ] = [ dirruns, diff ];
2552										}
2553
2554										if ( node === elem ) {
2555											break;
2556										}
2557									}
2558								}
2559							}
2560						}
2561
2562						// Incorporate the offset, then check against cycle size
2563						diff -= last;
2564						return diff === first || ( diff % first === 0 && diff / first >= 0 );
2565					}
2566				};
2567		},
2568
2569		PSEUDO: function( pseudo, argument ) {
2570
2571			// pseudo-class names are case-insensitive
2572			// https://www.w3.org/TR/selectors/#pseudo-classes
2573			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
2574			// Remember that setFilters inherits from pseudos
2575			var args,
2576				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
2577					find.error( "unsupported pseudo: " + pseudo );
2578
2579			// The user may use createPseudo to indicate that
2580			// arguments are needed to create the filter function
2581			// just as jQuery does
2582			if ( fn[ expando ] ) {
2583				return fn( argument );
2584			}
2585
2586			// But maintain support for old signatures
2587			if ( fn.length > 1 ) {
2588				args = [ pseudo, pseudo, "", argument ];
2589				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
2590					markFunction( function( seed, matches ) {
2591						var idx,
2592							matched = fn( seed, argument ),
2593							i = matched.length;
2594						while ( i-- ) {
2595							idx = indexOf.call( seed, matched[ i ] );
2596							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
2597						}
2598					} ) :
2599					function( elem ) {
2600						return fn( elem, 0, args );
2601					};
2602			}
2603
2604			return fn;
2605		}
2606	},
2607
2608	pseudos: {
2609
2610		// Potentially complex pseudos
2611		not: markFunction( function( selector ) {
2612
2613			// Trim the selector passed to compile
2614			// to avoid treating leading and trailing
2615			// spaces as combinators
2616			var input = [],
2617				results = [],
2618				matcher = compile( selector.replace( rtrimCSS, "$1" ) );
2619
2620			return matcher[ expando ] ?
2621				markFunction( function( seed, matches, _context, xml ) {
2622					var elem,
2623						unmatched = matcher( seed, null, xml, [] ),
2624						i = seed.length;
2625
2626					// Match elements unmatched by `matcher`
2627					while ( i-- ) {
2628						if ( ( elem = unmatched[ i ] ) ) {
2629							seed[ i ] = !( matches[ i ] = elem );
2630						}
2631					}
2632				} ) :
2633				function( elem, _context, xml ) {
2634					input[ 0 ] = elem;
2635					matcher( input, null, xml, results );
2636
2637					// Don't keep the element
2638					// (see https://github.com/jquery/sizzle/issues/299)
2639					input[ 0 ] = null;
2640					return !results.pop();
2641				};
2642		} ),
2643
2644		has: markFunction( function( selector ) {
2645			return function( elem ) {
2646				return find( selector, elem ).length > 0;
2647			};
2648		} ),
2649
2650		contains: markFunction( function( text ) {
2651			text = text.replace( runescape, funescape );
2652			return function( elem ) {
2653				return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;
2654			};
2655		} ),
2656
2657		// "Whether an element is represented by a :lang() selector
2658		// is based solely on the element's language value
2659		// being equal to the identifier C,
2660		// or beginning with the identifier C immediately followed by "-".
2661		// The matching of C against the element's language value is performed case-insensitively.
2662		// The identifier C does not have to be a valid language name."
2663		// https://www.w3.org/TR/selectors/#lang-pseudo
2664		lang: markFunction( function( lang ) {
2665
2666			// lang value must be a valid identifier
2667			if ( !ridentifier.test( lang || "" ) ) {
2668				find.error( "unsupported lang: " + lang );
2669			}
2670			lang = lang.replace( runescape, funescape ).toLowerCase();
2671			return function( elem ) {
2672				var elemLang;
2673				do {
2674					if ( ( elemLang = documentIsHTML ?
2675						elem.lang :
2676						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
2677
2678						elemLang = elemLang.toLowerCase();
2679						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
2680					}
2681				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
2682				return false;
2683			};
2684		} ),
2685
2686		// Miscellaneous
2687		target: function( elem ) {
2688			var hash = window.location && window.location.hash;
2689			return hash && hash.slice( 1 ) === elem.id;
2690		},
2691
2692		root: function( elem ) {
2693			return elem === documentElement;
2694		},
2695
2696		focus: function( elem ) {
2697			return elem === safeActiveElement() &&
2698				document.hasFocus() &&
2699				!!( elem.type || elem.href || ~elem.tabIndex );
2700		},
2701
2702		// Boolean properties
2703		enabled: createDisabledPseudo( false ),
2704		disabled: createDisabledPseudo( true ),
2705
2706		checked: function( elem ) {
2707
2708			// In CSS3, :checked should return both checked and selected elements
2709			// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
2710			return ( nodeName( elem, "input" ) && !!elem.checked ) ||
2711				( nodeName( elem, "option" ) && !!elem.selected );
2712		},
2713
2714		selected: function( elem ) {
2715
2716			// Support: IE <=11+
2717			// Accessing the selectedIndex property
2718			// forces the browser to treat the default option as
2719			// selected when in an optgroup.
2720			if ( elem.parentNode ) {
2721				// eslint-disable-next-line no-unused-expressions
2722				elem.parentNode.selectedIndex;
2723			}
2724
2725			return elem.selected === true;
2726		},
2727
2728		// Contents
2729		empty: function( elem ) {
2730
2731			// https://www.w3.org/TR/selectors/#empty-pseudo
2732			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
2733			//   but not by others (comment: 8; processing instruction: 7; etc.)
2734			// nodeType < 6 works because attributes (2) do not appear as children
2735			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
2736				if ( elem.nodeType < 6 ) {
2737					return false;
2738				}
2739			}
2740			return true;
2741		},
2742
2743		parent: function( elem ) {
2744			return !Expr.pseudos.empty( elem );
2745		},
2746
2747		// Element/input types
2748		header: function( elem ) {
2749			return rheader.test( elem.nodeName );
2750		},
2751
2752		input: function( elem ) {
2753			return rinputs.test( elem.nodeName );
2754		},
2755
2756		button: function( elem ) {
2757			return nodeName( elem, "input" ) && elem.type === "button" ||
2758				nodeName( elem, "button" );
2759		},
2760
2761		text: function( elem ) {
2762			var attr;
2763			return nodeName( elem, "input" ) && elem.type === "text" &&
2764
2765				// Support: IE <10 only
2766				// New HTML5 attribute values (e.g., "search") appear
2767				// with elem.type === "text"
2768				( ( attr = elem.getAttribute( "type" ) ) == null ||
2769					attr.toLowerCase() === "text" );
2770		},
2771
2772		// Position-in-collection
2773		first: createPositionalPseudo( function() {
2774			return [ 0 ];
2775		} ),
2776
2777		last: createPositionalPseudo( function( _matchIndexes, length ) {
2778			return [ length - 1 ];
2779		} ),
2780
2781		eq: createPositionalPseudo( function( _matchIndexes, length, argument ) {
2782			return [ argument < 0 ? argument + length : argument ];
2783		} ),
2784
2785		even: createPositionalPseudo( function( matchIndexes, length ) {
2786			var i = 0;
2787			for ( ; i < length; i += 2 ) {
2788				matchIndexes.push( i );
2789			}
2790			return matchIndexes;
2791		} ),
2792
2793		odd: createPositionalPseudo( function( matchIndexes, length ) {
2794			var i = 1;
2795			for ( ; i < length; i += 2 ) {
2796				matchIndexes.push( i );
2797			}
2798			return matchIndexes;
2799		} ),
2800
2801		lt: createPositionalPseudo( function( matchIndexes, length, argument ) {
2802			var i;
2803
2804			if ( argument < 0 ) {
2805				i = argument + length;
2806			} else if ( argument > length ) {
2807				i = length;
2808			} else {
2809				i = argument;
2810			}
2811
2812			for ( ; --i >= 0; ) {
2813				matchIndexes.push( i );
2814			}
2815			return matchIndexes;
2816		} ),
2817
2818		gt: createPositionalPseudo( function( matchIndexes, length, argument ) {
2819			var i = argument < 0 ? argument + length : argument;
2820			for ( ; ++i < length; ) {
2821				matchIndexes.push( i );
2822			}
2823			return matchIndexes;
2824		} )
2825	}
2826};
2827
2828Expr.pseudos.nth = Expr.pseudos.eq;
2829
2830// Add button/input type pseudos
2831for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
2832	Expr.pseudos[ i ] = createInputPseudo( i );
2833}
2834for ( i in { submit: true, reset: true } ) {
2835	Expr.pseudos[ i ] = createButtonPseudo( i );
2836}
2837
2838// Easy API for creating new setFilters
2839function setFilters() {}
2840setFilters.prototype = Expr.filters = Expr.pseudos;
2841Expr.setFilters = new setFilters();
2842
2843function tokenize( selector, parseOnly ) {
2844	var matched, match, tokens, type,
2845		soFar, groups, preFilters,
2846		cached = tokenCache[ selector + " " ];
2847
2848	if ( cached ) {
2849		return parseOnly ? 0 : cached.slice( 0 );
2850	}
2851
2852	soFar = selector;
2853	groups = [];
2854	preFilters = Expr.preFilter;
2855
2856	while ( soFar ) {
2857
2858		// Comma and first run
2859		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
2860			if ( match ) {
2861
2862				// Don't consume trailing commas as valid
2863				soFar = soFar.slice( match[ 0 ].length ) || soFar;
2864			}
2865			groups.push( ( tokens = [] ) );
2866		}
2867
2868		matched = false;
2869
2870		// Combinators
2871		if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
2872			matched = match.shift();
2873			tokens.push( {
2874				value: matched,
2875
2876				// Cast descendant combinators to space
2877				type: match[ 0 ].replace( rtrimCSS, " " )
2878			} );
2879			soFar = soFar.slice( matched.length );
2880		}
2881
2882		// Filters
2883		for ( type in Expr.filter ) {
2884			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
2885				( match = preFilters[ type ]( match ) ) ) ) {
2886				matched = match.shift();
2887				tokens.push( {
2888					value: matched,
2889					type: type,
2890					matches: match
2891				} );
2892				soFar = soFar.slice( matched.length );
2893			}
2894		}
2895
2896		if ( !matched ) {
2897			break;
2898		}
2899	}
2900
2901	// Return the length of the invalid excess
2902	// if we're just parsing
2903	// Otherwise, throw an error or return tokens
2904	if ( parseOnly ) {
2905		return soFar.length;
2906	}
2907
2908	return soFar ?
2909		find.error( selector ) :
2910
2911		// Cache the tokens
2912		tokenCache( selector, groups ).slice( 0 );
2913}
2914
2915function toSelector( tokens ) {
2916	var i = 0,
2917		len = tokens.length,
2918		selector = "";
2919	for ( ; i < len; i++ ) {
2920		selector += tokens[ i ].value;
2921	}
2922	return selector;
2923}
2924
2925function addCombinator( matcher, combinator, base ) {
2926	var dir = combinator.dir,
2927		skip = combinator.next,
2928		key = skip || dir,
2929		checkNonElements = base && key === "parentNode",
2930		doneName = done++;
2931
2932	return combinator.first ?
2933
2934		// Check against closest ancestor/preceding element
2935		function( elem, context, xml ) {
2936			while ( ( elem = elem[ dir ] ) ) {
2937				if ( elem.nodeType === 1 || checkNonElements ) {
2938					return matcher( elem, context, xml );
2939				}
2940			}
2941			return false;
2942		} :
2943
2944		// Check against all ancestor/preceding elements
2945		function( elem, context, xml ) {
2946			var oldCache, outerCache,
2947				newCache = [ dirruns, doneName ];
2948
2949			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
2950			if ( xml ) {
2951				while ( ( elem = elem[ dir ] ) ) {
2952					if ( elem.nodeType === 1 || checkNonElements ) {
2953						if ( matcher( elem, context, xml ) ) {
2954							return true;
2955						}
2956					}
2957				}
2958			} else {
2959				while ( ( elem = elem[ dir ] ) ) {
2960					if ( elem.nodeType === 1 || checkNonElements ) {
2961						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
2962
2963						if ( skip && nodeName( elem, skip ) ) {
2964							elem = elem[ dir ] || elem;
2965						} else if ( ( oldCache = outerCache[ key ] ) &&
2966							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
2967
2968							// Assign to newCache so results back-propagate to previous elements
2969							return ( newCache[ 2 ] = oldCache[ 2 ] );
2970						} else {
2971
2972							// Reuse newcache so results back-propagate to previous elements
2973							outerCache[ key ] = newCache;
2974
2975							// A match means we're done; a fail means we have to keep checking
2976							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
2977								return true;
2978							}
2979						}
2980					}
2981				}
2982			}
2983			return false;
2984		};
2985}
2986
2987function elementMatcher( matchers ) {
2988	return matchers.length > 1 ?
2989		function( elem, context, xml ) {
2990			var i = matchers.length;
2991			while ( i-- ) {
2992				if ( !matchers[ i ]( elem, context, xml ) ) {
2993					return false;
2994				}
2995			}
2996			return true;
2997		} :
2998		matchers[ 0 ];
2999}
3000
3001function multipleContexts( selector, contexts, results ) {
3002	var i = 0,
3003		len = contexts.length;
3004	for ( ; i < len; i++ ) {
3005		find( selector, contexts[ i ], results );
3006	}
3007	return results;
3008}
3009
3010function condense( unmatched, map, filter, context, xml ) {
3011	var elem,
3012		newUnmatched = [],
3013		i = 0,
3014		len = unmatched.length,
3015		mapped = map != null;
3016
3017	for ( ; i < len; i++ ) {
3018		if ( ( elem = unmatched[ i ] ) ) {
3019			if ( !filter || filter( elem, context, xml ) ) {
3020				newUnmatched.push( elem );
3021				if ( mapped ) {
3022					map.push( i );
3023				}
3024			}
3025		}
3026	}
3027
3028	return newUnmatched;
3029}
3030
3031function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
3032	if ( postFilter && !postFilter[ expando ] ) {
3033		postFilter = setMatcher( postFilter );
3034	}
3035	if ( postFinder && !postFinder[ expando ] ) {
3036		postFinder = setMatcher( postFinder, postSelector );
3037	}
3038	return markFunction( function( seed, results, context, xml ) {
3039		var temp, i, elem, matcherOut,
3040			preMap = [],
3041			postMap = [],
3042			preexisting = results.length,
3043
3044			// Get initial elements from seed or context
3045			elems = seed ||
3046				multipleContexts( selector || "*",
3047					context.nodeType ? [ context ] : context, [] ),
3048
3049			// Prefilter to get matcher input, preserving a map for seed-results synchronization
3050			matcherIn = preFilter && ( seed || !selector ) ?
3051				condense( elems, preMap, preFilter, context, xml ) :
3052				elems;
3053
3054		if ( matcher ) {
3055
3056			// If we have a postFinder, or filtered seed, or non-seed postFilter
3057			// or preexisting results,
3058			matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
3059
3060				// ...intermediate processing is necessary
3061				[] :
3062
3063				// ...otherwise use results directly
3064				results;
3065
3066			// Find primary matches
3067			matcher( matcherIn, matcherOut, context, xml );
3068		} else {
3069			matcherOut = matcherIn;
3070		}
3071
3072		// Apply postFilter
3073		if ( postFilter ) {
3074			temp = condense( matcherOut, postMap );
3075			postFilter( temp, [], context, xml );
3076
3077			// Un-match failing elements by moving them back to matcherIn
3078			i = temp.length;
3079			while ( i-- ) {
3080				if ( ( elem = temp[ i ] ) ) {
3081					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
3082				}
3083			}
3084		}
3085
3086		if ( seed ) {
3087			if ( postFinder || preFilter ) {
3088				if ( postFinder ) {
3089
3090					// Get the final matcherOut by condensing this intermediate into postFinder contexts
3091					temp = [];
3092					i = matcherOut.length;
3093					while ( i-- ) {
3094						if ( ( elem = matcherOut[ i ] ) ) {
3095
3096							// Restore matcherIn since elem is not yet a final match
3097							temp.push( ( matcherIn[ i ] = elem ) );
3098						}
3099					}
3100					postFinder( null, ( matcherOut = [] ), temp, xml );
3101				}
3102
3103				// Move matched elements from seed to results to keep them synchronized
3104				i = matcherOut.length;
3105				while ( i-- ) {
3106					if ( ( elem = matcherOut[ i ] ) &&
3107						( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {
3108
3109						seed[ temp ] = !( results[ temp ] = elem );
3110					}
3111				}
3112			}
3113
3114		// Add elements to results, through postFinder if defined
3115		} else {
3116			matcherOut = condense(
3117				matcherOut === results ?
3118					matcherOut.splice( preexisting, matcherOut.length ) :
3119					matcherOut
3120			);
3121			if ( postFinder ) {
3122				postFinder( null, results, matcherOut, xml );
3123			} else {
3124				push.apply( results, matcherOut );
3125			}
3126		}
3127	} );
3128}
3129
3130function matcherFromTokens( tokens ) {
3131	var checkContext, matcher, j,
3132		len = tokens.length,
3133		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
3134		implicitRelative = leadingRelative || Expr.relative[ " " ],
3135		i = leadingRelative ? 1 : 0,
3136
3137		// The foundational matcher ensures that elements are reachable from top-level context(s)
3138		matchContext = addCombinator( function( elem ) {
3139			return elem === checkContext;
3140		}, implicitRelative, true ),
3141		matchAnyContext = addCombinator( function( elem ) {
3142			return indexOf.call( checkContext, elem ) > -1;
3143		}, implicitRelative, true ),
3144		matchers = [ function( elem, context, xml ) {
3145
3146			// Support: IE 11+, Edge 17 - 18+
3147			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3148			// two documents; shallow comparisons work.
3149			// eslint-disable-next-line eqeqeq
3150			var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (
3151				( checkContext = context ).nodeType ?
3152					matchContext( elem, context, xml ) :
3153					matchAnyContext( elem, context, xml ) );
3154
3155			// Avoid hanging onto element
3156			// (see https://github.com/jquery/sizzle/issues/299)
3157			checkContext = null;
3158			return ret;
3159		} ];
3160
3161	for ( ; i < len; i++ ) {
3162		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
3163			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
3164		} else {
3165			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
3166
3167			// Return special upon seeing a positional matcher
3168			if ( matcher[ expando ] ) {
3169
3170				// Find the next relative operator (if any) for proper handling
3171				j = ++i;
3172				for ( ; j < len; j++ ) {
3173					if ( Expr.relative[ tokens[ j ].type ] ) {
3174						break;
3175					}
3176				}
3177				return setMatcher(
3178					i > 1 && elementMatcher( matchers ),
3179					i > 1 && toSelector(
3180
3181						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
3182						tokens.slice( 0, i - 1 )
3183							.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
3184					).replace( rtrimCSS, "$1" ),
3185					matcher,
3186					i < j && matcherFromTokens( tokens.slice( i, j ) ),
3187					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
3188					j < len && toSelector( tokens )
3189				);
3190			}
3191			matchers.push( matcher );
3192		}
3193	}
3194
3195	return elementMatcher( matchers );
3196}
3197
3198function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
3199	var bySet = setMatchers.length > 0,
3200		byElement = elementMatchers.length > 0,
3201		superMatcher = function( seed, context, xml, results, outermost ) {
3202			var elem, j, matcher,
3203				matchedCount = 0,
3204				i = "0",
3205				unmatched = seed && [],
3206				setMatched = [],
3207				contextBackup = outermostContext,
3208
3209				// We must always have either seed elements or outermost context
3210				elems = seed || byElement && Expr.find.TAG( "*", outermost ),
3211
3212				// Use integer dirruns iff this is the outermost matcher
3213				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
3214				len = elems.length;
3215
3216			if ( outermost ) {
3217
3218				// Support: IE 11+, Edge 17 - 18+
3219				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3220				// two documents; shallow comparisons work.
3221				// eslint-disable-next-line eqeqeq
3222				outermostContext = context == document || context || outermost;
3223			}
3224
3225			// Add elements passing elementMatchers directly to results
3226			// Support: iOS <=7 - 9 only
3227			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching
3228			// elements by id. (see trac-14142)
3229			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
3230				if ( byElement && elem ) {
3231					j = 0;
3232
3233					// Support: IE 11+, Edge 17 - 18+
3234					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3235					// two documents; shallow comparisons work.
3236					// eslint-disable-next-line eqeqeq
3237					if ( !context && elem.ownerDocument != document ) {
3238						setDocument( elem );
3239						xml = !documentIsHTML;
3240					}
3241					while ( ( matcher = elementMatchers[ j++ ] ) ) {
3242						if ( matcher( elem, context || document, xml ) ) {
3243							push.call( results, elem );
3244							break;
3245						}
3246					}
3247					if ( outermost ) {
3248						dirruns = dirrunsUnique;
3249					}
3250				}
3251
3252				// Track unmatched elements for set filters
3253				if ( bySet ) {
3254
3255					// They will have gone through all possible matchers
3256					if ( ( elem = !matcher && elem ) ) {
3257						matchedCount--;
3258					}
3259
3260					// Lengthen the array for every element, matched or not
3261					if ( seed ) {
3262						unmatched.push( elem );
3263					}
3264				}
3265			}
3266
3267			// `i` is now the count of elements visited above, and adding it to `matchedCount`
3268			// makes the latter nonnegative.
3269			matchedCount += i;
3270
3271			// Apply set filters to unmatched elements
3272			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
3273			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
3274			// no element matchers and no seed.
3275			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
3276			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
3277			// numerically zero.
3278			if ( bySet && i !== matchedCount ) {
3279				j = 0;
3280				while ( ( matcher = setMatchers[ j++ ] ) ) {
3281					matcher( unmatched, setMatched, context, xml );
3282				}
3283
3284				if ( seed ) {
3285
3286					// Reintegrate element matches to eliminate the need for sorting
3287					if ( matchedCount > 0 ) {
3288						while ( i-- ) {
3289							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
3290								setMatched[ i ] = pop.call( results );
3291							}
3292						}
3293					}
3294
3295					// Discard index placeholder values to get only actual matches
3296					setMatched = condense( setMatched );
3297				}
3298
3299				// Add matches to results
3300				push.apply( results, setMatched );
3301
3302				// Seedless set matches succeeding multiple successful matchers stipulate sorting
3303				if ( outermost && !seed && setMatched.length > 0 &&
3304					( matchedCount + setMatchers.length ) > 1 ) {
3305
3306					jQuery.uniqueSort( results );
3307				}
3308			}
3309
3310			// Override manipulation of globals by nested matchers
3311			if ( outermost ) {
3312				dirruns = dirrunsUnique;
3313				outermostContext = contextBackup;
3314			}
3315
3316			return unmatched;
3317		};
3318
3319	return bySet ?
3320		markFunction( superMatcher ) :
3321		superMatcher;
3322}
3323
3324function compile( selector, match /* Internal Use Only */ ) {
3325	var i,
3326		setMatchers = [],
3327		elementMatchers = [],
3328		cached = compilerCache[ selector + " " ];
3329
3330	if ( !cached ) {
3331
3332		// Generate a function of recursive functions that can be used to check each element
3333		if ( !match ) {
3334			match = tokenize( selector );
3335		}
3336		i = match.length;
3337		while ( i-- ) {
3338			cached = matcherFromTokens( match[ i ] );
3339			if ( cached[ expando ] ) {
3340				setMatchers.push( cached );
3341			} else {
3342				elementMatchers.push( cached );
3343			}
3344		}
3345
3346		// Cache the compiled function
3347		cached = compilerCache( selector,
3348			matcherFromGroupMatchers( elementMatchers, setMatchers ) );
3349
3350		// Save selector and tokenization
3351		cached.selector = selector;
3352	}
3353	return cached;
3354}
3355
3356/**
3357 * A low-level selection function that works with jQuery's compiled
3358 *  selector functions
3359 * @param {String|Function} selector A selector or a pre-compiled
3360 *  selector function built with jQuery selector compile
3361 * @param {Element} context
3362 * @param {Array} [results]
3363 * @param {Array} [seed] A set of elements to match against
3364 */
3365function select( selector, context, results, seed ) {
3366	var i, tokens, token, type, find,
3367		compiled = typeof selector === "function" && selector,
3368		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
3369
3370	results = results || [];
3371
3372	// Try to minimize operations if there is only one selector in the list and no seed
3373	// (the latter of which guarantees us context)
3374	if ( match.length === 1 ) {
3375
3376		// Reduce context if the leading compound selector is an ID
3377		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
3378		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
3379				context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
3380
3381			context = ( Expr.find.ID(
3382				token.matches[ 0 ].replace( runescape, funescape ),
3383				context
3384			) || [] )[ 0 ];
3385			if ( !context ) {
3386				return results;
3387
3388			// Precompiled matchers will still verify ancestry, so step up a level
3389			} else if ( compiled ) {
3390				context = context.parentNode;
3391			}
3392
3393			selector = selector.slice( tokens.shift().value.length );
3394		}
3395
3396		// Fetch a seed set for right-to-left matching
3397		i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;
3398		while ( i-- ) {
3399			token = tokens[ i ];
3400
3401			// Abort if we hit a combinator
3402			if ( Expr.relative[ ( type = token.type ) ] ) {
3403				break;
3404			}
3405			if ( ( find = Expr.find[ type ] ) ) {
3406
3407				// Search, expanding context for leading sibling combinators
3408				if ( ( seed = find(
3409					token.matches[ 0 ].replace( runescape, funescape ),
3410					rsibling.test( tokens[ 0 ].type ) &&
3411						testContext( context.parentNode ) || context
3412				) ) ) {
3413
3414					// If seed is empty or no tokens remain, we can return early
3415					tokens.splice( i, 1 );
3416					selector = seed.length && toSelector( tokens );
3417					if ( !selector ) {
3418						push.apply( results, seed );
3419						return results;
3420					}
3421
3422					break;
3423				}
3424			}
3425		}
3426	}
3427
3428	// Compile and execute a filtering function if one is not provided
3429	// Provide `match` to avoid retokenization if we modified the selector above
3430	( compiled || compile( selector, match ) )(
3431		seed,
3432		context,
3433		!documentIsHTML,
3434		results,
3435		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
3436	);
3437	return results;
3438}
3439
3440// One-time assignments
3441
3442// Support: Android <=4.0 - 4.1+
3443// Sort stability
3444support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
3445
3446// Initialize against the default document
3447setDocument();
3448
3449// Support: Android <=4.0 - 4.1+
3450// Detached nodes confoundingly follow *each other*
3451support.sortDetached = assert( function( el ) {
3452
3453	// Should return 1, but returns 4 (following)
3454	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
3455} );
3456
3457jQuery.find = find;
3458
3459// Deprecated
3460jQuery.expr[ ":" ] = jQuery.expr.pseudos;
3461jQuery.unique = jQuery.uniqueSort;
3462
3463// These have always been private, but they used to be documented as part of
3464// Sizzle so let's maintain them for now for backwards compatibility purposes.
3465find.compile = compile;
3466find.select = select;
3467find.setDocument = setDocument;
3468find.tokenize = tokenize;
3469
3470find.escape = jQuery.escapeSelector;
3471find.getText = jQuery.text;
3472find.isXML = jQuery.isXMLDoc;
3473find.selectors = jQuery.expr;
3474find.support = jQuery.support;
3475find.uniqueSort = jQuery.uniqueSort;
3476
3477	/* eslint-enable */
3478
3479} )();
3480
3481
3482var dir = function( elem, dir, until ) {
3483	var matched = [],
3484		truncate = until !== undefined;
3485
3486	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
3487		if ( elem.nodeType === 1 ) {
3488			if ( truncate && jQuery( elem ).is( until ) ) {
3489				break;
3490			}
3491			matched.push( elem );
3492		}
3493	}
3494	return matched;
3495};
3496
3497
3498var siblings = function( n, elem ) {
3499	var matched = [];
3500
3501	for ( ; n; n = n.nextSibling ) {
3502		if ( n.nodeType === 1 && n !== elem ) {
3503			matched.push( n );
3504		}
3505	}
3506
3507	return matched;
3508};
3509
3510
3511var rneedsContext = jQuery.expr.match.needsContext;
3512
3513var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
3514
3515
3516
3517// Implement the identical functionality for filter and not
3518function winnow( elements, qualifier, not ) {
3519	if ( isFunction( qualifier ) ) {
3520		return jQuery.grep( elements, function( elem, i ) {
3521			return !!qualifier.call( elem, i, elem ) !== not;
3522		} );
3523	}
3524
3525	// Single element
3526	if ( qualifier.nodeType ) {
3527		return jQuery.grep( elements, function( elem ) {
3528			return ( elem === qualifier ) !== not;
3529		} );
3530	}
3531
3532	// Arraylike of elements (jQuery, arguments, Array)
3533	if ( typeof qualifier !== "string" ) {
3534		return jQuery.grep( elements, function( elem ) {
3535			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
3536		} );
3537	}
3538
3539	// Filtered directly for both simple and complex selectors
3540	return jQuery.filter( qualifier, elements, not );
3541}
3542
3543jQuery.filter = function( expr, elems, not ) {
3544	var elem = elems[ 0 ];
3545
3546	if ( not ) {
3547		expr = ":not(" + expr + ")";
3548	}
3549
3550	if ( elems.length === 1 && elem.nodeType === 1 ) {
3551		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
3552	}
3553
3554	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
3555		return elem.nodeType === 1;
3556	} ) );
3557};
3558
3559jQuery.fn.extend( {
3560	find: function( selector ) {
3561		var i, ret,
3562			len = this.length,
3563			self = this;
3564
3565		if ( typeof selector !== "string" ) {
3566			return this.pushStack( jQuery( selector ).filter( function() {
3567				for ( i = 0; i < len; i++ ) {
3568					if ( jQuery.contains( self[ i ], this ) ) {
3569						return true;
3570					}
3571				}
3572			} ) );
3573		}
3574
3575		ret = this.pushStack( [] );
3576
3577		for ( i = 0; i < len; i++ ) {
3578			jQuery.find( selector, self[ i ], ret );
3579		}
3580
3581		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
3582	},
3583	filter: function( selector ) {
3584		return this.pushStack( winnow( this, selector || [], false ) );
3585	},
3586	not: function( selector ) {
3587		return this.pushStack( winnow( this, selector || [], true ) );
3588	},
3589	is: function( selector ) {
3590		return !!winnow(
3591			this,
3592
3593			// If this is a positional/relative selector, check membership in the returned set
3594			// so $("p:first").is("p:last") won't return true for a doc with two "p".
3595			typeof selector === "string" && rneedsContext.test( selector ) ?
3596				jQuery( selector ) :
3597				selector || [],
3598			false
3599		).length;
3600	}
3601} );
3602
3603
3604// Initialize a jQuery object
3605
3606
3607// A central reference to the root jQuery(document)
3608var rootjQuery,
3609
3610	// A simple way to check for HTML strings
3611	// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)
3612	// Strict HTML recognition (trac-11290: must start with <)
3613	// Shortcut simple #id case for speed
3614	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
3615
3616	init = jQuery.fn.init = function( selector, context, root ) {
3617		var match, elem;
3618
3619		// HANDLE: $(""), $(null), $(undefined), $(false)
3620		if ( !selector ) {
3621			return this;
3622		}
3623
3624		// Method init() accepts an alternate rootjQuery
3625		// so migrate can support jQuery.sub (gh-2101)
3626		root = root || rootjQuery;
3627
3628		// Handle HTML strings
3629		if ( typeof selector === "string" ) {
3630			if ( selector[ 0 ] === "<" &&
3631				selector[ selector.length - 1 ] === ">" &&
3632				selector.length >= 3 ) {
3633
3634				// Assume that strings that start and end with <> are HTML and skip the regex check
3635				match = [ null, selector, null ];
3636
3637			} else {
3638				match = rquickExpr.exec( selector );
3639			}
3640
3641			// Match html or make sure no context is specified for #id
3642			if ( match && ( match[ 1 ] || !context ) ) {
3643
3644				// HANDLE: $(html) -> $(array)
3645				if ( match[ 1 ] ) {
3646					context = context instanceof jQuery ? context[ 0 ] : context;
3647
3648					// Option to run scripts is true for back-compat
3649					// Intentionally let the error be thrown if parseHTML is not present
3650					jQuery.merge( this, jQuery.parseHTML(
3651						match[ 1 ],
3652						context && context.nodeType ? context.ownerDocument || context : document,
3653						true
3654					) );
3655
3656					// HANDLE: $(html, props)
3657					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
3658						for ( match in context ) {
3659
3660							// Properties of context are called as methods if possible
3661							if ( isFunction( this[ match ] ) ) {
3662								this[ match ]( context[ match ] );
3663
3664							// ...and otherwise set as attributes
3665							} else {
3666								this.attr( match, context[ match ] );
3667							}
3668						}
3669					}
3670
3671					return this;
3672
3673				// HANDLE: $(#id)
3674				} else {
3675					elem = document.getElementById( match[ 2 ] );
3676
3677					if ( elem ) {
3678
3679						// Inject the element directly into the jQuery object
3680						this[ 0 ] = elem;
3681						this.length = 1;
3682					}
3683					return this;
3684				}
3685
3686			// HANDLE: $(expr, $(...))
3687			} else if ( !context || context.jquery ) {
3688				return ( context || root ).find( selector );
3689
3690			// HANDLE: $(expr, context)
3691			// (which is just equivalent to: $(context).find(expr)
3692			} else {
3693				return this.constructor( context ).find( selector );
3694			}
3695
3696		// HANDLE: $(DOMElement)
3697		} else if ( selector.nodeType ) {
3698			this[ 0 ] = selector;
3699			this.length = 1;
3700			return this;
3701
3702		// HANDLE: $(function)
3703		// Shortcut for document ready
3704		} else if ( isFunction( selector ) ) {
3705			return root.ready !== undefined ?
3706				root.ready( selector ) :
3707
3708				// Execute immediately if ready is not present
3709				selector( jQuery );
3710		}
3711
3712		return jQuery.makeArray( selector, this );
3713	};
3714
3715// Give the init function the jQuery prototype for later instantiation
3716init.prototype = jQuery.fn;
3717
3718// Initialize central reference
3719rootjQuery = jQuery( document );
3720
3721
3722var rparentsprev = /^(?:parents|prev(?:Until|All))/,
3723
3724	// Methods guaranteed to produce a unique set when starting from a unique set
3725	guaranteedUnique = {
3726		children: true,
3727		contents: true,
3728		next: true,
3729		prev: true
3730	};
3731
3732jQuery.fn.extend( {
3733	has: function( target ) {
3734		var targets = jQuery( target, this ),
3735			l = targets.length;
3736
3737		return this.filter( function() {
3738			var i = 0;
3739			for ( ; i < l; i++ ) {
3740				if ( jQuery.contains( this, targets[ i ] ) ) {
3741					return true;
3742				}
3743			}
3744		} );
3745	},
3746
3747	closest: function( selectors, context ) {
3748		var cur,
3749			i = 0,
3750			l = this.length,
3751			matched = [],
3752			targets = typeof selectors !== "string" && jQuery( selectors );
3753
3754		// Positional selectors never match, since there's no _selection_ context
3755		if ( !rneedsContext.test( selectors ) ) {
3756			for ( ; i < l; i++ ) {
3757				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
3758
3759					// Always skip document fragments
3760					if ( cur.nodeType < 11 && ( targets ?
3761						targets.index( cur ) > -1 :
3762
3763						// Don't pass non-elements to jQuery#find
3764						cur.nodeType === 1 &&
3765							jQuery.find.matchesSelector( cur, selectors ) ) ) {
3766
3767						matched.push( cur );
3768						break;
3769					}
3770				}
3771			}
3772		}
3773
3774		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
3775	},
3776
3777	// Determine the position of an element within the set
3778	index: function( elem ) {
3779
3780		// No argument, return index in parent
3781		if ( !elem ) {
3782			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
3783		}
3784
3785		// Index in selector
3786		if ( typeof elem === "string" ) {
3787			return indexOf.call( jQuery( elem ), this[ 0 ] );
3788		}
3789
3790		// Locate the position of the desired element
3791		return indexOf.call( this,
3792
3793			// If it receives a jQuery object, the first element is used
3794			elem.jquery ? elem[ 0 ] : elem
3795		);
3796	},
3797
3798	add: function( selector, context ) {
3799		return this.pushStack(
3800			jQuery.uniqueSort(
3801				jQuery.merge( this.get(), jQuery( selector, context ) )
3802			)
3803		);
3804	},
3805
3806	addBack: function( selector ) {
3807		return this.add( selector == null ?
3808			this.prevObject : this.prevObject.filter( selector )
3809		);
3810	}
3811} );
3812
3813function sibling( cur, dir ) {
3814	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
3815	return cur;
3816}
3817
3818jQuery.each( {
3819	parent: function( elem ) {
3820		var parent = elem.parentNode;
3821		return parent && parent.nodeType !== 11 ? parent : null;
3822	},
3823	parents: function( elem ) {
3824		return dir( elem, "parentNode" );
3825	},
3826	parentsUntil: function( elem, _i, until ) {
3827		return dir( elem, "parentNode", until );
3828	},
3829	next: function( elem ) {
3830		return sibling( elem, "nextSibling" );
3831	},
3832	prev: function( elem ) {
3833		return sibling( elem, "previousSibling" );
3834	},
3835	nextAll: function( elem ) {
3836		return dir( elem, "nextSibling" );
3837	},
3838	prevAll: function( elem ) {
3839		return dir( elem, "previousSibling" );
3840	},
3841	nextUntil: function( elem, _i, until ) {
3842		return dir( elem, "nextSibling", until );
3843	},
3844	prevUntil: function( elem, _i, until ) {
3845		return dir( elem, "previousSibling", until );
3846	},
3847	siblings: function( elem ) {
3848		return siblings( ( elem.parentNode || {} ).firstChild, elem );
3849	},
3850	children: function( elem ) {
3851		return siblings( elem.firstChild );
3852	},
3853	contents: function( elem ) {
3854		if ( elem.contentDocument != null &&
3855
3856			// Support: IE 11+
3857			// <object> elements with no `data` attribute has an object
3858			// `contentDocument` with a `null` prototype.
3859			getProto( elem.contentDocument ) ) {
3860
3861			return elem.contentDocument;
3862		}
3863
3864		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
3865		// Treat the template element as a regular one in browsers that
3866		// don't support it.
3867		if ( nodeName( elem, "template" ) ) {
3868			elem = elem.content || elem;
3869		}
3870
3871		return jQuery.merge( [], elem.childNodes );
3872	}
3873}, function( name, fn ) {
3874	jQuery.fn[ name ] = function( until, selector ) {
3875		var matched = jQuery.map( this, fn, until );
3876
3877		if ( name.slice( -5 ) !== "Until" ) {
3878			selector = until;
3879		}
3880
3881		if ( selector && typeof selector === "string" ) {
3882			matched = jQuery.filter( selector, matched );
3883		}
3884
3885		if ( this.length > 1 ) {
3886
3887			// Remove duplicates
3888			if ( !guaranteedUnique[ name ] ) {
3889				jQuery.uniqueSort( matched );
3890			}
3891
3892			// Reverse order for parents* and prev-derivatives
3893			if ( rparentsprev.test( name ) ) {
3894				matched.reverse();
3895			}
3896		}
3897
3898		return this.pushStack( matched );
3899	};
3900} );
3901var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
3902
3903
3904
3905// Convert String-formatted options into Object-formatted ones
3906function createOptions( options ) {
3907	var object = {};
3908	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
3909		object[ flag ] = true;
3910	} );
3911	return object;
3912}
3913
3914/*
3915 * Create a callback list using the following parameters:
3916 *
3917 *	options: an optional list of space-separated options that will change how
3918 *			the callback list behaves or a more traditional option object
3919 *
3920 * By default a callback list will act like an event callback list and can be
3921 * "fired" multiple times.
3922 *
3923 * Possible options:
3924 *
3925 *	once:			will ensure the callback list can only be fired once (like a Deferred)
3926 *
3927 *	memory:			will keep track of previous values and will call any callback added
3928 *					after the list has been fired right away with the latest "memorized"
3929 *					values (like a Deferred)
3930 *
3931 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
3932 *
3933 *	stopOnFalse:	interrupt callings when a callback returns false
3934 *
3935 */
3936jQuery.Callbacks = function( options ) {
3937
3938	// Convert options from String-formatted to Object-formatted if needed
3939	// (we check in cache first)
3940	options = typeof options === "string" ?
3941		createOptions( options ) :
3942		jQuery.extend( {}, options );
3943
3944	var // Flag to know if list is currently firing
3945		firing,
3946
3947		// Last fire value for non-forgettable lists
3948		memory,
3949
3950		// Flag to know if list was already fired
3951		fired,
3952
3953		// Flag to prevent firing
3954		locked,
3955
3956		// Actual callback list
3957		list = [],
3958
3959		// Queue of execution data for repeatable lists
3960		queue = [],
3961
3962		// Index of currently firing callback (modified by add/remove as needed)
3963		firingIndex = -1,
3964
3965		// Fire callbacks
3966		fire = function() {
3967
3968			// Enforce single-firing
3969			locked = locked || options.once;
3970
3971			// Execute callbacks for all pending executions,
3972			// respecting firingIndex overrides and runtime changes
3973			fired = firing = true;
3974			for ( ; queue.length; firingIndex = -1 ) {
3975				memory = queue.shift();
3976				while ( ++firingIndex < list.length ) {
3977
3978					// Run callback and check for early termination
3979					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
3980						options.stopOnFalse ) {
3981
3982						// Jump to end and forget the data so .add doesn't re-fire
3983						firingIndex = list.length;
3984						memory = false;
3985					}
3986				}
3987			}
3988
3989			// Forget the data if we're done with it
3990			if ( !options.memory ) {
3991				memory = false;
3992			}
3993
3994			firing = false;
3995
3996			// Clean up if we're done firing for good
3997			if ( locked ) {
3998
3999				// Keep an empty list if we have data for future add calls
4000				if ( memory ) {
4001					list = [];
4002
4003				// Otherwise, this object is spent
4004				} else {
4005					list = "";
4006				}
4007			}
4008		},
4009
4010		// Actual Callbacks object
4011		self = {
4012
4013			// Add a callback or a collection of callbacks to the list
4014			add: function() {
4015				if ( list ) {
4016
4017					// If we have memory from a past run, we should fire after adding
4018					if ( memory && !firing ) {
4019						firingIndex = list.length - 1;
4020						queue.push( memory );
4021					}
4022
4023					( function add( args ) {
4024						jQuery.each( args, function( _, arg ) {
4025							if ( isFunction( arg ) ) {
4026								if ( !options.unique || !self.has( arg ) ) {
4027									list.push( arg );
4028								}
4029							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
4030
4031								// Inspect recursively
4032								add( arg );
4033							}
4034						} );
4035					} )( arguments );
4036
4037					if ( memory && !firing ) {
4038						fire();
4039					}
4040				}
4041				return this;
4042			},
4043
4044			// Remove a callback from the list
4045			remove: function() {
4046				jQuery.each( arguments, function( _, arg ) {
4047					var index;
4048					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
4049						list.splice( index, 1 );
4050
4051						// Handle firing indexes
4052						if ( index <= firingIndex ) {
4053							firingIndex--;
4054						}
4055					}
4056				} );
4057				return this;
4058			},
4059
4060			// Check if a given callback is in the list.
4061			// If no argument is given, return whether or not list has callbacks attached.
4062			has: function( fn ) {
4063				return fn ?
4064					jQuery.inArray( fn, list ) > -1 :
4065					list.length > 0;
4066			},
4067
4068			// Remove all callbacks from the list
4069			empty: function() {
4070				if ( list ) {
4071					list = [];
4072				}
4073				return this;
4074			},
4075
4076			// Disable .fire and .add
4077			// Abort any current/pending executions
4078			// Clear all callbacks and values
4079			disable: function() {
4080				locked = queue = [];
4081				list = memory = "";
4082				return this;
4083			},
4084			disabled: function() {
4085				return !list;
4086			},
4087
4088			// Disable .fire
4089			// Also disable .add unless we have memory (since it would have no effect)
4090			// Abort any pending executions
4091			lock: function() {
4092				locked = queue = [];
4093				if ( !memory && !firing ) {
4094					list = memory = "";
4095				}
4096				return this;
4097			},
4098			locked: function() {
4099				return !!locked;
4100			},
4101
4102			// Call all callbacks with the given context and arguments
4103			fireWith: function( context, args ) {
4104				if ( !locked ) {
4105					args = args || [];
4106					args = [ context, args.slice ? args.slice() : args ];
4107					queue.push( args );
4108					if ( !firing ) {
4109						fire();
4110					}
4111				}
4112				return this;
4113			},
4114
4115			// Call all the callbacks with the given arguments
4116			fire: function() {
4117				self.fireWith( this, arguments );
4118				return this;
4119			},
4120
4121			// To know if the callbacks have already been called at least once
4122			fired: function() {
4123				return !!fired;
4124			}
4125		};
4126
4127	return self;
4128};
4129
4130
4131function Identity( v ) {
4132	return v;
4133}
4134function Thrower( ex ) {
4135	throw ex;
4136}
4137
4138function adoptValue( value, resolve, reject, noValue ) {
4139	var method;
4140
4141	try {
4142
4143		// Check for promise aspect first to privilege synchronous behavior
4144		if ( value && isFunction( ( method = value.promise ) ) ) {
4145			method.call( value ).done( resolve ).fail( reject );
4146
4147		// Other thenables
4148		} else if ( value && isFunction( ( method = value.then ) ) ) {
4149			method.call( value, resolve, reject );
4150
4151		// Other non-thenables
4152		} else {
4153
4154			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
4155			// * false: [ value ].slice( 0 ) => resolve( value )
4156			// * true: [ value ].slice( 1 ) => resolve()
4157			resolve.apply( undefined, [ value ].slice( noValue ) );
4158		}
4159
4160	// For Promises/A+, convert exceptions into rejections
4161	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
4162	// Deferred#then to conditionally suppress rejection.
4163	} catch ( value ) {
4164
4165		// Support: Android 4.0 only
4166		// Strict mode functions invoked without .call/.apply get global-object context
4167		reject.apply( undefined, [ value ] );
4168	}
4169}
4170
4171jQuery.extend( {
4172
4173	Deferred: function( func ) {
4174		var tuples = [
4175
4176				// action, add listener, callbacks,
4177				// ... .then handlers, argument index, [final state]
4178				[ "notify", "progress", jQuery.Callbacks( "memory" ),
4179					jQuery.Callbacks( "memory" ), 2 ],
4180				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
4181					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
4182				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
4183					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
4184			],
4185			state = "pending",
4186			promise = {
4187				state: function() {
4188					return state;
4189				},
4190				always: function() {
4191					deferred.done( arguments ).fail( arguments );
4192					return this;
4193				},
4194				"catch": function( fn ) {
4195					return promise.then( null, fn );
4196				},
4197
4198				// Keep pipe for back-compat
4199				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
4200					var fns = arguments;
4201
4202					return jQuery.Deferred( function( newDefer ) {
4203						jQuery.each( tuples, function( _i, tuple ) {
4204
4205							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
4206							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
4207
4208							// deferred.progress(function() { bind to newDefer or newDefer.notify })
4209							// deferred.done(function() { bind to newDefer or newDefer.resolve })
4210							// deferred.fail(function() { bind to newDefer or newDefer.reject })
4211							deferred[ tuple[ 1 ] ]( function() {
4212								var returned = fn && fn.apply( this, arguments );
4213								if ( returned && isFunction( returned.promise ) ) {
4214									returned.promise()
4215										.progress( newDefer.notify )
4216										.done( newDefer.resolve )
4217										.fail( newDefer.reject );
4218								} else {
4219									newDefer[ tuple[ 0 ] + "With" ](
4220										this,
4221										fn ? [ returned ] : arguments
4222									);
4223								}
4224							} );
4225						} );
4226						fns = null;
4227					} ).promise();
4228				},
4229				then: function( onFulfilled, onRejected, onProgress ) {
4230					var maxDepth = 0;
4231					function resolve( depth, deferred, handler, special ) {
4232						return function() {
4233							var that = this,
4234								args = arguments,
4235								mightThrow = function() {
4236									var returned, then;
4237
4238									// Support: Promises/A+ section 2.3.3.3.3
4239									// https://promisesaplus.com/#point-59
4240									// Ignore double-resolution attempts
4241									if ( depth < maxDepth ) {
4242										return;
4243									}
4244
4245									returned = handler.apply( that, args );
4246
4247									// Support: Promises/A+ section 2.3.1
4248									// https://promisesaplus.com/#point-48
4249									if ( returned === deferred.promise() ) {
4250										throw new TypeError( "Thenable self-resolution" );
4251									}
4252
4253									// Support: Promises/A+ sections 2.3.3.1, 3.5
4254									// https://promisesaplus.com/#point-54
4255									// https://promisesaplus.com/#point-75
4256									// Retrieve `then` only once
4257									then = returned &&
4258
4259										// Support: Promises/A+ section 2.3.4
4260										// https://promisesaplus.com/#point-64
4261										// Only check objects and functions for thenability
4262										( typeof returned === "object" ||
4263											typeof returned === "function" ) &&
4264										returned.then;
4265
4266									// Handle a returned thenable
4267									if ( isFunction( then ) ) {
4268
4269										// Special processors (notify) just wait for resolution
4270										if ( special ) {
4271											then.call(
4272												returned,
4273												resolve( maxDepth, deferred, Identity, special ),
4274												resolve( maxDepth, deferred, Thrower, special )
4275											);
4276
4277										// Normal processors (resolve) also hook into progress
4278										} else {
4279
4280											// ...and disregard older resolution values
4281											maxDepth++;
4282
4283											then.call(
4284												returned,
4285												resolve( maxDepth, deferred, Identity, special ),
4286												resolve( maxDepth, deferred, Thrower, special ),
4287												resolve( maxDepth, deferred, Identity,
4288													deferred.notifyWith )
4289											);
4290										}
4291
4292									// Handle all other returned values
4293									} else {
4294
4295										// Only substitute handlers pass on context
4296										// and multiple values (non-spec behavior)
4297										if ( handler !== Identity ) {
4298											that = undefined;
4299											args = [ returned ];
4300										}
4301
4302										// Process the value(s)
4303										// Default process is resolve
4304										( special || deferred.resolveWith )( that, args );
4305									}
4306								},
4307
4308								// Only normal processors (resolve) catch and reject exceptions
4309								process = special ?
4310									mightThrow :
4311									function() {
4312										try {
4313											mightThrow();
4314										} catch ( e ) {
4315
4316											if ( jQuery.Deferred.exceptionHook ) {
4317												jQuery.Deferred.exceptionHook( e,
4318													process.error );
4319											}
4320
4321											// Support: Promises/A+ section 2.3.3.3.4.1
4322											// https://promisesaplus.com/#point-61
4323											// Ignore post-resolution exceptions
4324											if ( depth + 1 >= maxDepth ) {
4325
4326												// Only substitute handlers pass on context
4327												// and multiple values (non-spec behavior)
4328												if ( handler !== Thrower ) {
4329													that = undefined;
4330													args = [ e ];
4331												}
4332
4333												deferred.rejectWith( that, args );
4334											}
4335										}
4336									};
4337
4338							// Support: Promises/A+ section 2.3.3.3.1
4339							// https://promisesaplus.com/#point-57
4340							// Re-resolve promises immediately to dodge false rejection from
4341							// subsequent errors
4342							if ( depth ) {
4343								process();
4344							} else {
4345
4346								// Call an optional hook to record the error, in case of exception
4347								// since it's otherwise lost when execution goes async
4348								if ( jQuery.Deferred.getErrorHook ) {
4349									process.error = jQuery.Deferred.getErrorHook();
4350
4351								// The deprecated alias of the above. While the name suggests
4352								// returning the stack, not an error instance, jQuery just passes
4353								// it directly to `console.warn` so both will work; an instance
4354								// just better cooperates with source maps.
4355								} else if ( jQuery.Deferred.getStackHook ) {
4356									process.error = jQuery.Deferred.getStackHook();
4357								}
4358								window.setTimeout( process );
4359							}
4360						};
4361					}
4362
4363					return jQuery.Deferred( function( newDefer ) {
4364
4365						// progress_handlers.add( ... )
4366						tuples[ 0 ][ 3 ].add(
4367							resolve(
4368								0,
4369								newDefer,
4370								isFunction( onProgress ) ?
4371									onProgress :
4372									Identity,
4373								newDefer.notifyWith
4374							)
4375						);
4376
4377						// fulfilled_handlers.add( ... )
4378						tuples[ 1 ][ 3 ].add(
4379							resolve(
4380								0,
4381								newDefer,
4382								isFunction( onFulfilled ) ?
4383									onFulfilled :
4384									Identity
4385							)
4386						);
4387
4388						// rejected_handlers.add( ... )
4389						tuples[ 2 ][ 3 ].add(
4390							resolve(
4391								0,
4392								newDefer,
4393								isFunction( onRejected ) ?
4394									onRejected :
4395									Thrower
4396							)
4397						);
4398					} ).promise();
4399				},
4400
4401				// Get a promise for this deferred
4402				// If obj is provided, the promise aspect is added to the object
4403				promise: function( obj ) {
4404					return obj != null ? jQuery.extend( obj, promise ) : promise;
4405				}
4406			},
4407			deferred = {};
4408
4409		// Add list-specific methods
4410		jQuery.each( tuples, function( i, tuple ) {
4411			var list = tuple[ 2 ],
4412				stateString = tuple[ 5 ];
4413
4414			// promise.progress = list.add
4415			// promise.done = list.add
4416			// promise.fail = list.add
4417			promise[ tuple[ 1 ] ] = list.add;
4418
4419			// Handle state
4420			if ( stateString ) {
4421				list.add(
4422					function() {
4423
4424						// state = "resolved" (i.e., fulfilled)
4425						// state = "rejected"
4426						state = stateString;
4427					},
4428
4429					// rejected_callbacks.disable
4430					// fulfilled_callbacks.disable
4431					tuples[ 3 - i ][ 2 ].disable,
4432
4433					// rejected_handlers.disable
4434					// fulfilled_handlers.disable
4435					tuples[ 3 - i ][ 3 ].disable,
4436
4437					// progress_callbacks.lock
4438					tuples[ 0 ][ 2 ].lock,
4439
4440					// progress_handlers.lock
4441					tuples[ 0 ][ 3 ].lock
4442				);
4443			}
4444
4445			// progress_handlers.fire
4446			// fulfilled_handlers.fire
4447			// rejected_handlers.fire
4448			list.add( tuple[ 3 ].fire );
4449
4450			// deferred.notify = function() { deferred.notifyWith(...) }
4451			// deferred.resolve = function() { deferred.resolveWith(...) }
4452			// deferred.reject = function() { deferred.rejectWith(...) }
4453			deferred[ tuple[ 0 ] ] = function() {
4454				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
4455				return this;
4456			};
4457
4458			// deferred.notifyWith = list.fireWith
4459			// deferred.resolveWith = list.fireWith
4460			// deferred.rejectWith = list.fireWith
4461			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
4462		} );
4463
4464		// Make the deferred a promise
4465		promise.promise( deferred );
4466
4467		// Call given func if any
4468		if ( func ) {
4469			func.call( deferred, deferred );
4470		}
4471
4472		// All done!
4473		return deferred;
4474	},
4475
4476	// Deferred helper
4477	when: function( singleValue ) {
4478		var
4479
4480			// count of uncompleted subordinates
4481			remaining = arguments.length,
4482
4483			// count of unprocessed arguments
4484			i = remaining,
4485
4486			// subordinate fulfillment data
4487			resolveContexts = Array( i ),
4488			resolveValues = slice.call( arguments ),
4489
4490			// the primary Deferred
4491			primary = jQuery.Deferred(),
4492
4493			// subordinate callback factory
4494			updateFunc = function( i ) {
4495				return function( value ) {
4496					resolveContexts[ i ] = this;
4497					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
4498					if ( !( --remaining ) ) {
4499						primary.resolveWith( resolveContexts, resolveValues );
4500					}
4501				};
4502			};
4503
4504		// Single- and empty arguments are adopted like Promise.resolve
4505		if ( remaining <= 1 ) {
4506			adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
4507				!remaining );
4508
4509			// Use .then() to unwrap secondary thenables (cf. gh-3000)
4510			if ( primary.state() === "pending" ||
4511				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
4512
4513				return primary.then();
4514			}
4515		}
4516
4517		// Multiple arguments are aggregated like Promise.all array elements
4518		while ( i-- ) {
4519			adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
4520		}
4521
4522		return primary.promise();
4523	}
4524} );
4525
4526
4527// These usually indicate a programmer mistake during development,
4528// warn about them ASAP rather than swallowing them by default.
4529var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
4530
4531// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error
4532// captured before the async barrier to get the original error cause
4533// which may otherwise be hidden.
4534jQuery.Deferred.exceptionHook = function( error, asyncError ) {
4535
4536	// Support: IE 8 - 9 only
4537	// Console exists when dev tools are open, which can happen at any time
4538	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
4539		window.console.warn( "jQuery.Deferred exception: " + error.message,
4540			error.stack, asyncError );
4541	}
4542};
4543
4544
4545
4546
4547jQuery.readyException = function( error ) {
4548	window.setTimeout( function() {
4549		throw error;
4550	} );
4551};
4552
4553
4554
4555
4556// The deferred used on DOM ready
4557var readyList = jQuery.Deferred();
4558
4559jQuery.fn.ready = function( fn ) {
4560
4561	readyList
4562		.then( fn )
4563
4564		// Wrap jQuery.readyException in a function so that the lookup
4565		// happens at the time of error handling instead of callback
4566		// registration.
4567		.catch( function( error ) {
4568			jQuery.readyException( error );
4569		} );
4570
4571	return this;
4572};
4573
4574jQuery.extend( {
4575
4576	// Is the DOM ready to be used? Set to true once it occurs.
4577	isReady: false,
4578
4579	// A counter to track how many items to wait for before
4580	// the ready event fires. See trac-6781
4581	readyWait: 1,
4582
4583	// Handle when the DOM is ready
4584	ready: function( wait ) {
4585
4586		// Abort if there are pending holds or we're already ready
4587		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
4588			return;
4589		}
4590
4591		// Remember that the DOM is ready
4592		jQuery.isReady = true;
4593
4594		// If a normal DOM Ready event fired, decrement, and wait if need be
4595		if ( wait !== true && --jQuery.readyWait > 0 ) {
4596			return;
4597		}
4598
4599		// If there are functions bound, to execute
4600		readyList.resolveWith( document, [ jQuery ] );
4601	}
4602} );
4603
4604jQuery.ready.then = readyList.then;
4605
4606// The ready event handler and self cleanup method
4607function completed() {
4608	document.removeEventListener( "DOMContentLoaded", completed );
4609	window.removeEventListener( "load", completed );
4610	jQuery.ready();
4611}
4612
4613// Catch cases where $(document).ready() is called
4614// after the browser event has already occurred.
4615// Support: IE <=9 - 10 only
4616// Older IE sometimes signals "interactive" too soon
4617if ( document.readyState === "complete" ||
4618	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
4619
4620	// Handle it asynchronously to allow scripts the opportunity to delay ready
4621	window.setTimeout( jQuery.ready );
4622
4623} else {
4624
4625	// Use the handy event callback
4626	document.addEventListener( "DOMContentLoaded", completed );
4627
4628	// A fallback to window.onload, that will always work
4629	window.addEventListener( "load", completed );
4630}
4631
4632
4633
4634
4635// Multifunctional method to get and set values of a collection
4636// The value/s can optionally be executed if it's a function
4637var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
4638	var i = 0,
4639		len = elems.length,
4640		bulk = key == null;
4641
4642	// Sets many values
4643	if ( toType( key ) === "object" ) {
4644		chainable = true;
4645		for ( i in key ) {
4646			access( elems, fn, i, key[ i ], true, emptyGet, raw );
4647		}
4648
4649	// Sets one value
4650	} else if ( value !== undefined ) {
4651		chainable = true;
4652
4653		if ( !isFunction( value ) ) {
4654			raw = true;
4655		}
4656
4657		if ( bulk ) {
4658
4659			// Bulk operations run against the entire set
4660			if ( raw ) {
4661				fn.call( elems, value );
4662				fn = null;
4663
4664			// ...except when executing function values
4665			} else {
4666				bulk = fn;
4667				fn = function( elem, _key, value ) {
4668					return bulk.call( jQuery( elem ), value );
4669				};
4670			}
4671		}
4672
4673		if ( fn ) {
4674			for ( ; i < len; i++ ) {
4675				fn(
4676					elems[ i ], key, raw ?
4677						value :
4678						value.call( elems[ i ], i, fn( elems[ i ], key ) )
4679				);
4680			}
4681		}
4682	}
4683
4684	if ( chainable ) {
4685		return elems;
4686	}
4687
4688	// Gets
4689	if ( bulk ) {
4690		return fn.call( elems );
4691	}
4692
4693	return len ? fn( elems[ 0 ], key ) : emptyGet;
4694};
4695
4696
4697// Matches dashed string for camelizing
4698var rmsPrefix = /^-ms-/,
4699	rdashAlpha = /-([a-z])/g;
4700
4701// Used by camelCase as callback to replace()
4702function fcamelCase( _all, letter ) {
4703	return letter.toUpperCase();
4704}
4705
4706// Convert dashed to camelCase; used by the css and data modules
4707// Support: IE <=9 - 11, Edge 12 - 15
4708// Microsoft forgot to hump their vendor prefix (trac-9572)
4709function camelCase( string ) {
4710	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
4711}
4712var acceptData = function( owner ) {
4713
4714	// Accepts only:
4715	//  - Node
4716	//    - Node.ELEMENT_NODE
4717	//    - Node.DOCUMENT_NODE
4718	//  - Object
4719	//    - Any
4720	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
4721};
4722
4723
4724
4725
4726function Data() {
4727	this.expando = jQuery.expando + Data.uid++;
4728}
4729
4730Data.uid = 1;
4731
4732Data.prototype = {
4733
4734	cache: function( owner ) {
4735
4736		// Check if the owner object already has a cache
4737		var value = owner[ this.expando ];
4738
4739		// If not, create one
4740		if ( !value ) {
4741			value = {};
4742
4743			// We can accept data for non-element nodes in modern browsers,
4744			// but we should not, see trac-8335.
4745			// Always return an empty object.
4746			if ( acceptData( owner ) ) {
4747
4748				// If it is a node unlikely to be stringify-ed or looped over
4749				// use plain assignment
4750				if ( owner.nodeType ) {
4751					owner[ this.expando ] = value;
4752
4753				// Otherwise secure it in a non-enumerable property
4754				// configurable must be true to allow the property to be
4755				// deleted when data is removed
4756				} else {
4757					Object.defineProperty( owner, this.expando, {
4758						value: value,
4759						configurable: true
4760					} );
4761				}
4762			}
4763		}
4764
4765		return value;
4766	},
4767	set: function( owner, data, value ) {
4768		var prop,
4769			cache = this.cache( owner );
4770
4771		// Handle: [ owner, key, value ] args
4772		// Always use camelCase key (gh-2257)
4773		if ( typeof data === "string" ) {
4774			cache[ camelCase( data ) ] = value;
4775
4776		// Handle: [ owner, { properties } ] args
4777		} else {
4778
4779			// Copy the properties one-by-one to the cache object
4780			for ( prop in data ) {
4781				cache[ camelCase( prop ) ] = data[ prop ];
4782			}
4783		}
4784		return cache;
4785	},
4786	get: function( owner, key ) {
4787		return key === undefined ?
4788			this.cache( owner ) :
4789
4790			// Always use camelCase key (gh-2257)
4791			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
4792	},
4793	access: function( owner, key, value ) {
4794
4795		// In cases where either:
4796		//
4797		//   1. No key was specified
4798		//   2. A string key was specified, but no value provided
4799		//
4800		// Take the "read" path and allow the get method to determine
4801		// which value to return, respectively either:
4802		//
4803		//   1. The entire cache object
4804		//   2. The data stored at the key
4805		//
4806		if ( key === undefined ||
4807				( ( key && typeof key === "string" ) && value === undefined ) ) {
4808
4809			return this.get( owner, key );
4810		}
4811
4812		// When the key is not a string, or both a key and value
4813		// are specified, set or extend (existing objects) with either:
4814		//
4815		//   1. An object of properties
4816		//   2. A key and value
4817		//
4818		this.set( owner, key, value );
4819
4820		// Since the "set" path can have two possible entry points
4821		// return the expected data based on which path was taken[*]
4822		return value !== undefined ? value : key;
4823	},
4824	remove: function( owner, key ) {
4825		var i,
4826			cache = owner[ this.expando ];
4827
4828		if ( cache === undefined ) {
4829			return;
4830		}
4831
4832		if ( key !== undefined ) {
4833
4834			// Support array or space separated string of keys
4835			if ( Array.isArray( key ) ) {
4836
4837				// If key is an array of keys...
4838				// We always set camelCase keys, so remove that.
4839				key = key.map( camelCase );
4840			} else {
4841				key = camelCase( key );
4842
4843				// If a key with the spaces exists, use it.
4844				// Otherwise, create an array by matching non-whitespace
4845				key = key in cache ?
4846					[ key ] :
4847					( key.match( rnothtmlwhite ) || [] );
4848			}
4849
4850			i = key.length;
4851
4852			while ( i-- ) {
4853				delete cache[ key[ i ] ];
4854			}
4855		}
4856
4857		// Remove the expando if there's no more data
4858		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
4859
4860			// Support: Chrome <=35 - 45
4861			// Webkit & Blink performance suffers when deleting properties
4862			// from DOM nodes, so set to undefined instead
4863			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
4864			if ( owner.nodeType ) {
4865				owner[ this.expando ] = undefined;
4866			} else {
4867				delete owner[ this.expando ];
4868			}
4869		}
4870	},
4871	hasData: function( owner ) {
4872		var cache = owner[ this.expando ];
4873		return cache !== undefined && !jQuery.isEmptyObject( cache );
4874	}
4875};
4876var dataPriv = new Data();
4877
4878var dataUser = new Data();
4879
4880
4881
4882//	Implementation Summary
4883//
4884//	1. Enforce API surface and semantic compatibility with 1.9.x branch
4885//	2. Improve the module's maintainability by reducing the storage
4886//		paths to a single mechanism.
4887//	3. Use the same single mechanism to support "private" and "user" data.
4888//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
4889//	5. Avoid exposing implementation details on user objects (eg. expando properties)
4890//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
4891
4892var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
4893	rmultiDash = /[A-Z]/g;
4894
4895function getData( data ) {
4896	if ( data === "true" ) {
4897		return true;
4898	}
4899
4900	if ( data === "false" ) {
4901		return false;
4902	}
4903
4904	if ( data === "null" ) {
4905		return null;
4906	}
4907
4908	// Only convert to a number if it doesn't change the string
4909	if ( data === +data + "" ) {
4910		return +data;
4911	}
4912
4913	if ( rbrace.test( data ) ) {
4914		return JSON.parse( data );
4915	}
4916
4917	return data;
4918}
4919
4920function dataAttr( elem, key, data ) {
4921	var name;
4922
4923	// If nothing was found internally, try to fetch any
4924	// data from the HTML5 data-* attribute
4925	if ( data === undefined && elem.nodeType === 1 ) {
4926		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
4927		data = elem.getAttribute( name );
4928
4929		if ( typeof data === "string" ) {
4930			try {
4931				data = getData( data );
4932			} catch ( e ) {}
4933
4934			// Make sure we set the data so it isn't changed later
4935			dataUser.set( elem, key, data );
4936		} else {
4937			data = undefined;
4938		}
4939	}
4940	return data;
4941}
4942
4943jQuery.extend( {
4944	hasData: function( elem ) {
4945		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
4946	},
4947
4948	data: function( elem, name, data ) {
4949		return dataUser.access( elem, name, data );
4950	},
4951
4952	removeData: function( elem, name ) {
4953		dataUser.remove( elem, name );
4954	},
4955
4956	// TODO: Now that all calls to _data and _removeData have been replaced
4957	// with direct calls to dataPriv methods, these can be deprecated.
4958	_data: function( elem, name, data ) {
4959		return dataPriv.access( elem, name, data );
4960	},
4961
4962	_removeData: function( elem, name ) {
4963		dataPriv.remove( elem, name );
4964	}
4965} );
4966
4967jQuery.fn.extend( {
4968	data: function( key, value ) {
4969		var i, name, data,
4970			elem = this[ 0 ],
4971			attrs = elem && elem.attributes;
4972
4973		// Gets all values
4974		if ( key === undefined ) {
4975			if ( this.length ) {
4976				data = dataUser.get( elem );
4977
4978				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
4979					i = attrs.length;
4980					while ( i-- ) {
4981
4982						// Support: IE 11 only
4983						// The attrs elements can be null (trac-14894)
4984						if ( attrs[ i ] ) {
4985							name = attrs[ i ].name;
4986							if ( name.indexOf( "data-" ) === 0 ) {
4987								name = camelCase( name.slice( 5 ) );
4988								dataAttr( elem, name, data[ name ] );
4989							}
4990						}
4991					}
4992					dataPriv.set( elem, "hasDataAttrs", true );
4993				}
4994			}
4995
4996			return data;
4997		}
4998
4999		// Sets multiple values
5000		if ( typeof key === "object" ) {
5001			return this.each( function() {
5002				dataUser.set( this, key );
5003			} );
5004		}
5005
5006		return access( this, function( value ) {
5007			var data;
5008
5009			// The calling jQuery object (element matches) is not empty
5010			// (and therefore has an element appears at this[ 0 ]) and the
5011			// `value` parameter was not undefined. An empty jQuery object
5012			// will result in `undefined` for elem = this[ 0 ] which will
5013			// throw an exception if an attempt to read a data cache is made.
5014			if ( elem && value === undefined ) {
5015
5016				// Attempt to get data from the cache
5017				// The key will always be camelCased in Data
5018				data = dataUser.get( elem, key );
5019				if ( data !== undefined ) {
5020					return data;
5021				}
5022
5023				// Attempt to "discover" the data in
5024				// HTML5 custom data-* attrs
5025				data = dataAttr( elem, key );
5026				if ( data !== undefined ) {
5027					return data;
5028				}
5029
5030				// We tried really hard, but the data doesn't exist.
5031				return;
5032			}
5033
5034			// Set the data...
5035			this.each( function() {
5036
5037				// We always store the camelCased key
5038				dataUser.set( this, key, value );
5039			} );
5040		}, null, value, arguments.length > 1, null, true );
5041	},
5042
5043	removeData: function( key ) {
5044		return this.each( function() {
5045			dataUser.remove( this, key );
5046		} );
5047	}
5048} );
5049
5050
5051jQuery.extend( {
5052	queue: function( elem, type, data ) {
5053		var queue;
5054
5055		if ( elem ) {
5056			type = ( type || "fx" ) + "queue";
5057			queue = dataPriv.get( elem, type );
5058
5059			// Speed up dequeue by getting out quickly if this is just a lookup
5060			if ( data ) {
5061				if ( !queue || Array.isArray( data ) ) {
5062					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
5063				} else {
5064					queue.push( data );
5065				}
5066			}
5067			return queue || [];
5068		}
5069	},
5070
5071	dequeue: function( elem, type ) {
5072		type = type || "fx";
5073
5074		var queue = jQuery.queue( elem, type ),
5075			startLength = queue.length,
5076			fn = queue.shift(),
5077			hooks = jQuery._queueHooks( elem, type ),
5078			next = function() {
5079				jQuery.dequeue( elem, type );
5080			};
5081
5082		// If the fx queue is dequeued, always remove the progress sentinel
5083		if ( fn === "inprogress" ) {
5084			fn = queue.shift();
5085			startLength--;
5086		}
5087
5088		if ( fn ) {
5089
5090			// Add a progress sentinel to prevent the fx queue from being
5091			// automatically dequeued
5092			if ( type === "fx" ) {
5093				queue.unshift( "inprogress" );
5094			}
5095
5096			// Clear up the last queue stop function
5097			delete hooks.stop;
5098			fn.call( elem, next, hooks );
5099		}
5100
5101		if ( !startLength && hooks ) {
5102			hooks.empty.fire();
5103		}
5104	},
5105
5106	// Not public - generate a queueHooks object, or return the current one
5107	_queueHooks: function( elem, type ) {
5108		var key = type + "queueHooks";
5109		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
5110			empty: jQuery.Callbacks( "once memory" ).add( function() {
5111				dataPriv.remove( elem, [ type + "queue", key ] );
5112			} )
5113		} );
5114	}
5115} );
5116
5117jQuery.fn.extend( {
5118	queue: function( type, data ) {
5119		var setter = 2;
5120
5121		if ( typeof type !== "string" ) {
5122			data = type;
5123			type = "fx";
5124			setter--;
5125		}
5126
5127		if ( arguments.length < setter ) {
5128			return jQuery.queue( this[ 0 ], type );
5129		}
5130
5131		return data === undefined ?
5132			this :
5133			this.each( function() {
5134				var queue = jQuery.queue( this, type, data );
5135
5136				// Ensure a hooks for this queue
5137				jQuery._queueHooks( this, type );
5138
5139				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
5140					jQuery.dequeue( this, type );
5141				}
5142			} );
5143	},
5144	dequeue: function( type ) {
5145		return this.each( function() {
5146			jQuery.dequeue( this, type );
5147		} );
5148	},
5149	clearQueue: function( type ) {
5150		return this.queue( type || "fx", [] );
5151	},
5152
5153	// Get a promise resolved when queues of a certain type
5154	// are emptied (fx is the type by default)
5155	promise: function( type, obj ) {
5156		var tmp,
5157			count = 1,
5158			defer = jQuery.Deferred(),
5159			elements = this,
5160			i = this.length,
5161			resolve = function() {
5162				if ( !( --count ) ) {
5163					defer.resolveWith( elements, [ elements ] );
5164				}
5165			};
5166
5167		if ( typeof type !== "string" ) {
5168			obj = type;
5169			type = undefined;
5170		}
5171		type = type || "fx";
5172
5173		while ( i-- ) {
5174			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
5175			if ( tmp && tmp.empty ) {
5176				count++;
5177				tmp.empty.add( resolve );
5178			}
5179		}
5180		resolve();
5181		return defer.promise( obj );
5182	}
5183} );
5184var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
5185
5186var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
5187
5188
5189var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
5190
5191var documentElement = document.documentElement;
5192
5193
5194
5195	var isAttached = function( elem ) {
5196			return jQuery.contains( elem.ownerDocument, elem );
5197		},
5198		composed = { composed: true };
5199
5200	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
5201	// Check attachment across shadow DOM boundaries when possible (gh-3504)
5202	// Support: iOS 10.0-10.2 only
5203	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
5204	// leading to errors. We need to check for `getRootNode`.
5205	if ( documentElement.getRootNode ) {
5206		isAttached = function( elem ) {
5207			return jQuery.contains( elem.ownerDocument, elem ) ||
5208				elem.getRootNode( composed ) === elem.ownerDocument;
5209		};
5210	}
5211var isHiddenWithinTree = function( elem, el ) {
5212
5213		// isHiddenWithinTree might be called from jQuery#filter function;
5214		// in that case, element will be second argument
5215		elem = el || elem;
5216
5217		// Inline style trumps all
5218		return elem.style.display === "none" ||
5219			elem.style.display === "" &&
5220
5221			// Otherwise, check computed style
5222			// Support: Firefox <=43 - 45
5223			// Disconnected elements can have computed display: none, so first confirm that elem is
5224			// in the document.
5225			isAttached( elem ) &&
5226
5227			jQuery.css( elem, "display" ) === "none";
5228	};
5229
5230
5231
5232function adjustCSS( elem, prop, valueParts, tween ) {
5233	var adjusted, scale,
5234		maxIterations = 20,
5235		currentValue = tween ?
5236			function() {
5237				return tween.cur();
5238			} :
5239			function() {
5240				return jQuery.css( elem, prop, "" );
5241			},
5242		initial = currentValue(),
5243		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
5244
5245		// Starting value computation is required for potential unit mismatches
5246		initialInUnit = elem.nodeType &&
5247			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
5248			rcssNum.exec( jQuery.css( elem, prop ) );
5249
5250	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
5251
5252		// Support: Firefox <=54
5253		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
5254		initial = initial / 2;
5255
5256		// Trust units reported by jQuery.css
5257		unit = unit || initialInUnit[ 3 ];
5258
5259		// Iteratively approximate from a nonzero starting point
5260		initialInUnit = +initial || 1;
5261
5262		while ( maxIterations-- ) {
5263
5264			// Evaluate and update our best guess (doubling guesses that zero out).
5265			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
5266			jQuery.style( elem, prop, initialInUnit + unit );
5267			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
5268				maxIterations = 0;
5269			}
5270			initialInUnit = initialInUnit / scale;
5271
5272		}
5273
5274		initialInUnit = initialInUnit * 2;
5275		jQuery.style( elem, prop, initialInUnit + unit );
5276
5277		// Make sure we update the tween properties later on
5278		valueParts = valueParts || [];
5279	}
5280
5281	if ( valueParts ) {
5282		initialInUnit = +initialInUnit || +initial || 0;
5283
5284		// Apply relative offset (+=/-=) if specified
5285		adjusted = valueParts[ 1 ] ?
5286			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
5287			+valueParts[ 2 ];
5288		if ( tween ) {
5289			tween.unit = unit;
5290			tween.start = initialInUnit;
5291			tween.end = adjusted;
5292		}
5293	}
5294	return adjusted;
5295}
5296
5297
5298var defaultDisplayMap = {};
5299
5300function getDefaultDisplay( elem ) {
5301	var temp,
5302		doc = elem.ownerDocument,
5303		nodeName = elem.nodeName,
5304		display = defaultDisplayMap[ nodeName ];
5305
5306	if ( display ) {
5307		return display;
5308	}
5309
5310	temp = doc.body.appendChild( doc.createElement( nodeName ) );
5311	display = jQuery.css( temp, "display" );
5312
5313	temp.parentNode.removeChild( temp );
5314
5315	if ( display === "none" ) {
5316		display = "block";
5317	}
5318	defaultDisplayMap[ nodeName ] = display;
5319
5320	return display;
5321}
5322
5323function showHide( elements, show ) {
5324	var display, elem,
5325		values = [],
5326		index = 0,
5327		length = elements.length;
5328
5329	// Determine new display value for elements that need to change
5330	for ( ; index < length; index++ ) {
5331		elem = elements[ index ];
5332		if ( !elem.style ) {
5333			continue;
5334		}
5335
5336		display = elem.style.display;
5337		if ( show ) {
5338
5339			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
5340			// check is required in this first loop unless we have a nonempty display value (either
5341			// inline or about-to-be-restored)
5342			if ( display === "none" ) {
5343				values[ index ] = dataPriv.get( elem, "display" ) || null;
5344				if ( !values[ index ] ) {
5345					elem.style.display = "";
5346				}
5347			}
5348			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
5349				values[ index ] = getDefaultDisplay( elem );
5350			}
5351		} else {
5352			if ( display !== "none" ) {
5353				values[ index ] = "none";
5354
5355				// Remember what we're overwriting
5356				dataPriv.set( elem, "display", display );
5357			}
5358		}
5359	}
5360
5361	// Set the display of the elements in a second loop to avoid constant reflow
5362	for ( index = 0; index < length; index++ ) {
5363		if ( values[ index ] != null ) {
5364			elements[ index ].style.display = values[ index ];
5365		}
5366	}
5367
5368	return elements;
5369}
5370
5371jQuery.fn.extend( {
5372	show: function() {
5373		return showHide( this, true );
5374	},
5375	hide: function() {
5376		return showHide( this );
5377	},
5378	toggle: function( state ) {
5379		if ( typeof state === "boolean" ) {
5380			return state ? this.show() : this.hide();
5381		}
5382
5383		return this.each( function() {
5384			if ( isHiddenWithinTree( this ) ) {
5385				jQuery( this ).show();
5386			} else {
5387				jQuery( this ).hide();
5388			}
5389		} );
5390	}
5391} );
5392var rcheckableType = ( /^(?:checkbox|radio)$/i );
5393
5394var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
5395
5396var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
5397
5398
5399
5400( function() {
5401	var fragment = document.createDocumentFragment(),
5402		div = fragment.appendChild( document.createElement( "div" ) ),
5403		input = document.createElement( "input" );
5404
5405	// Support: Android 4.0 - 4.3 only
5406	// Check state lost if the name is set (trac-11217)
5407	// Support: Windows Web Apps (WWA)
5408	// `name` and `type` must use .setAttribute for WWA (trac-14901)
5409	input.setAttribute( "type", "radio" );
5410	input.setAttribute( "checked", "checked" );
5411	input.setAttribute( "name", "t" );
5412
5413	div.appendChild( input );
5414
5415	// Support: Android <=4.1 only
5416	// Older WebKit doesn't clone checked state correctly in fragments
5417	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
5418
5419	// Support: IE <=11 only
5420	// Make sure textarea (and checkbox) defaultValue is properly cloned
5421	div.innerHTML = "<textarea>x</textarea>";
5422	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
5423
5424	// Support: IE <=9 only
5425	// IE <=9 replaces <option> tags with their contents when inserted outside of
5426	// the select element.
5427	div.innerHTML = "<option></option>";
5428	support.option = !!div.lastChild;
5429} )();
5430
5431
5432// We have to close these tags to support XHTML (trac-13200)
5433var wrapMap = {
5434
5435	// XHTML parsers do not magically insert elements in the
5436	// same way that tag soup parsers do. So we cannot shorten
5437	// this by omitting <tbody> or other required elements.
5438	thead: [ 1, "<table>", "</table>" ],
5439	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
5440	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
5441	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
5442
5443	_default: [ 0, "", "" ]
5444};
5445
5446wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
5447wrapMap.th = wrapMap.td;
5448
5449// Support: IE <=9 only
5450if ( !support.option ) {
5451	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
5452}
5453
5454
5455function getAll( context, tag ) {
5456
5457	// Support: IE <=9 - 11 only
5458	// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
5459	var ret;
5460
5461	if ( typeof context.getElementsByTagName !== "undefined" ) {
5462		ret = context.getElementsByTagName( tag || "*" );
5463
5464	} else if ( typeof context.querySelectorAll !== "undefined" ) {
5465		ret = context.querySelectorAll( tag || "*" );
5466
5467	} else {
5468		ret = [];
5469	}
5470
5471	if ( tag === undefined || tag && nodeName( context, tag ) ) {
5472		return jQuery.merge( [ context ], ret );
5473	}
5474
5475	return ret;
5476}
5477
5478
5479// Mark scripts as having already been evaluated
5480function setGlobalEval( elems, refElements ) {
5481	var i = 0,
5482		l = elems.length;
5483
5484	for ( ; i < l; i++ ) {
5485		dataPriv.set(
5486			elems[ i ],
5487			"globalEval",
5488			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
5489		);
5490	}
5491}
5492
5493
5494var rhtml = /<|&#?\w+;/;
5495
5496function buildFragment( elems, context, scripts, selection, ignored ) {
5497	var elem, tmp, tag, wrap, attached, j,
5498		fragment = context.createDocumentFragment(),
5499		nodes = [],
5500		i = 0,
5501		l = elems.length;
5502
5503	for ( ; i < l; i++ ) {
5504		elem = elems[ i ];
5505
5506		if ( elem || elem === 0 ) {
5507
5508			// Add nodes directly
5509			if ( toType( elem ) === "object" ) {
5510
5511				// Support: Android <=4.0 only, PhantomJS 1 only
5512				// push.apply(_, arraylike) throws on ancient WebKit
5513				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
5514
5515			// Convert non-html into a text node
5516			} else if ( !rhtml.test( elem ) ) {
5517				nodes.push( context.createTextNode( elem ) );
5518
5519			// Convert html into DOM nodes
5520			} else {
5521				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
5522
5523				// Deserialize a standard representation
5524				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
5525				wrap = wrapMap[ tag ] || wrapMap._default;
5526				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
5527
5528				// Descend through wrappers to the right content
5529				j = wrap[ 0 ];
5530				while ( j-- ) {
5531					tmp = tmp.lastChild;
5532				}
5533
5534				// Support: Android <=4.0 only, PhantomJS 1 only
5535				// push.apply(_, arraylike) throws on ancient WebKit
5536				jQuery.merge( nodes, tmp.childNodes );
5537
5538				// Remember the top-level container
5539				tmp = fragment.firstChild;
5540
5541				// Ensure the created nodes are orphaned (trac-12392)
5542				tmp.textContent = "";
5543			}
5544		}
5545	}
5546
5547	// Remove wrapper from fragment
5548	fragment.textContent = "";
5549
5550	i = 0;
5551	while ( ( elem = nodes[ i++ ] ) ) {
5552
5553		// Skip elements already in the context collection (trac-4087)
5554		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
5555			if ( ignored ) {
5556				ignored.push( elem );
5557			}
5558			continue;
5559		}
5560
5561		attached = isAttached( elem );
5562
5563		// Append to fragment
5564		tmp = getAll( fragment.appendChild( elem ), "script" );
5565
5566		// Preserve script evaluation history
5567		if ( attached ) {
5568			setGlobalEval( tmp );
5569		}
5570
5571		// Capture executables
5572		if ( scripts ) {
5573			j = 0;
5574			while ( ( elem = tmp[ j++ ] ) ) {
5575				if ( rscriptType.test( elem.type || "" ) ) {
5576					scripts.push( elem );
5577				}
5578			}
5579		}
5580	}
5581
5582	return fragment;
5583}
5584
5585
5586var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
5587
5588function returnTrue() {
5589	return true;
5590}
5591
5592function returnFalse() {
5593	return false;
5594}
5595
5596function on( elem, types, selector, data, fn, one ) {
5597	var origFn, type;
5598
5599	// Types can be a map of types/handlers
5600	if ( typeof types === "object" ) {
5601
5602		// ( types-Object, selector, data )
5603		if ( typeof selector !== "string" ) {
5604
5605			// ( types-Object, data )
5606			data = data || selector;
5607			selector = undefined;
5608		}
5609		for ( type in types ) {
5610			on( elem, type, selector, data, types[ type ], one );
5611		}
5612		return elem;
5613	}
5614
5615	if ( data == null && fn == null ) {
5616
5617		// ( types, fn )
5618		fn = selector;
5619		data = selector = undefined;
5620	} else if ( fn == null ) {
5621		if ( typeof selector === "string" ) {
5622
5623			// ( types, selector, fn )
5624			fn = data;
5625			data = undefined;
5626		} else {
5627
5628			// ( types, data, fn )
5629			fn = data;
5630			data = selector;
5631			selector = undefined;
5632		}
5633	}
5634	if ( fn === false ) {
5635		fn = returnFalse;
5636	} else if ( !fn ) {
5637		return elem;
5638	}
5639
5640	if ( one === 1 ) {
5641		origFn = fn;
5642		fn = function( event ) {
5643
5644			// Can use an empty set, since event contains the info
5645			jQuery().off( event );
5646			return origFn.apply( this, arguments );
5647		};
5648
5649		// Use same guid so caller can remove using origFn
5650		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
5651	}
5652	return elem.each( function() {
5653		jQuery.event.add( this, types, fn, data, selector );
5654	} );
5655}
5656
5657/*
5658 * Helper functions for managing events -- not part of the public interface.
5659 * Props to Dean Edwards' addEvent library for many of the ideas.
5660 */
5661jQuery.event = {
5662
5663	global: {},
5664
5665	add: function( elem, types, handler, data, selector ) {
5666
5667		var handleObjIn, eventHandle, tmp,
5668			events, t, handleObj,
5669			special, handlers, type, namespaces, origType,
5670			elemData = dataPriv.get( elem );
5671
5672		// Only attach events to objects that accept data
5673		if ( !acceptData( elem ) ) {
5674			return;
5675		}
5676
5677		// Caller can pass in an object of custom data in lieu of the handler
5678		if ( handler.handler ) {
5679			handleObjIn = handler;
5680			handler = handleObjIn.handler;
5681			selector = handleObjIn.selector;
5682		}
5683
5684		// Ensure that invalid selectors throw exceptions at attach time
5685		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
5686		if ( selector ) {
5687			jQuery.find.matchesSelector( documentElement, selector );
5688		}
5689
5690		// Make sure that the handler has a unique ID, used to find/remove it later
5691		if ( !handler.guid ) {
5692			handler.guid = jQuery.guid++;
5693		}
5694
5695		// Init the element's event structure and main handler, if this is the first
5696		if ( !( events = elemData.events ) ) {
5697			events = elemData.events = Object.create( null );
5698		}
5699		if ( !( eventHandle = elemData.handle ) ) {
5700			eventHandle = elemData.handle = function( e ) {
5701
5702				// Discard the second event of a jQuery.event.trigger() and
5703				// when an event is called after a page has unloaded
5704				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
5705					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
5706			};
5707		}
5708
5709		// Handle multiple events separated by a space
5710		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
5711		t = types.length;
5712		while ( t-- ) {
5713			tmp = rtypenamespace.exec( types[ t ] ) || [];
5714			type = origType = tmp[ 1 ];
5715			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
5716
5717			// There *must* be a type, no attaching namespace-only handlers
5718			if ( !type ) {
5719				continue;
5720			}
5721
5722			// If event changes its type, use the special event handlers for the changed type
5723			special = jQuery.event.special[ type ] || {};
5724
5725			// If selector defined, determine special event api type, otherwise given type
5726			type = ( selector ? special.delegateType : special.bindType ) || type;
5727
5728			// Update special based on newly reset type
5729			special = jQuery.event.special[ type ] || {};
5730
5731			// handleObj is passed to all event handlers
5732			handleObj = jQuery.extend( {
5733				type: type,
5734				origType: origType,
5735				data: data,
5736				handler: handler,
5737				guid: handler.guid,
5738				selector: selector,
5739				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
5740				namespace: namespaces.join( "." )
5741			}, handleObjIn );
5742
5743			// Init the event handler queue if we're the first
5744			if ( !( handlers = events[ type ] ) ) {
5745				handlers = events[ type ] = [];
5746				handlers.delegateCount = 0;
5747
5748				// Only use addEventListener if the special events handler returns false
5749				if ( !special.setup ||
5750					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
5751
5752					if ( elem.addEventListener ) {
5753						elem.addEventListener( type, eventHandle );
5754					}
5755				}
5756			}
5757
5758			if ( special.add ) {
5759				special.add.call( elem, handleObj );
5760
5761				if ( !handleObj.handler.guid ) {
5762					handleObj.handler.guid = handler.guid;
5763				}
5764			}
5765
5766			// Add to the element's handler list, delegates in front
5767			if ( selector ) {
5768				handlers.splice( handlers.delegateCount++, 0, handleObj );
5769			} else {
5770				handlers.push( handleObj );
5771			}
5772
5773			// Keep track of which events have ever been used, for event optimization
5774			jQuery.event.global[ type ] = true;
5775		}
5776
5777	},
5778
5779	// Detach an event or set of events from an element
5780	remove: function( elem, types, handler, selector, mappedTypes ) {
5781
5782		var j, origCount, tmp,
5783			events, t, handleObj,
5784			special, handlers, type, namespaces, origType,
5785			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
5786
5787		if ( !elemData || !( events = elemData.events ) ) {
5788			return;
5789		}
5790
5791		// Once for each type.namespace in types; type may be omitted
5792		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
5793		t = types.length;
5794		while ( t-- ) {
5795			tmp = rtypenamespace.exec( types[ t ] ) || [];
5796			type = origType = tmp[ 1 ];
5797			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
5798
5799			// Unbind all events (on this namespace, if provided) for the element
5800			if ( !type ) {
5801				for ( type in events ) {
5802					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
5803				}
5804				continue;
5805			}
5806
5807			special = jQuery.event.special[ type ] || {};
5808			type = ( selector ? special.delegateType : special.bindType ) || type;
5809			handlers = events[ type ] || [];
5810			tmp = tmp[ 2 ] &&
5811				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
5812
5813			// Remove matching events
5814			origCount = j = handlers.length;
5815			while ( j-- ) {
5816				handleObj = handlers[ j ];
5817
5818				if ( ( mappedTypes || origType === handleObj.origType ) &&
5819					( !handler || handler.guid === handleObj.guid ) &&
5820					( !tmp || tmp.test( handleObj.namespace ) ) &&
5821					( !selector || selector === handleObj.selector ||
5822						selector === "**" && handleObj.selector ) ) {
5823					handlers.splice( j, 1 );
5824
5825					if ( handleObj.selector ) {
5826						handlers.delegateCount--;
5827					}
5828					if ( special.remove ) {
5829						special.remove.call( elem, handleObj );
5830					}
5831				}
5832			}
5833
5834			// Remove generic event handler if we removed something and no more handlers exist
5835			// (avoids potential for endless recursion during removal of special event handlers)
5836			if ( origCount && !handlers.length ) {
5837				if ( !special.teardown ||
5838					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
5839
5840					jQuery.removeEvent( elem, type, elemData.handle );
5841				}
5842
5843				delete events[ type ];
5844			}
5845		}
5846
5847		// Remove data and the expando if it's no longer used
5848		if ( jQuery.isEmptyObject( events ) ) {
5849			dataPriv.remove( elem, "handle events" );
5850		}
5851	},
5852
5853	dispatch: function( nativeEvent ) {
5854
5855		var i, j, ret, matched, handleObj, handlerQueue,
5856			args = new Array( arguments.length ),
5857
5858			// Make a writable jQuery.Event from the native event object
5859			event = jQuery.event.fix( nativeEvent ),
5860
5861			handlers = (
5862				dataPriv.get( this, "events" ) || Object.create( null )
5863			)[ event.type ] || [],
5864			special = jQuery.event.special[ event.type ] || {};
5865
5866		// Use the fix-ed jQuery.Event rather than the (read-only) native event
5867		args[ 0 ] = event;
5868
5869		for ( i = 1; i < arguments.length; i++ ) {
5870			args[ i ] = arguments[ i ];
5871		}
5872
5873		event.delegateTarget = this;
5874
5875		// Call the preDispatch hook for the mapped type, and let it bail if desired
5876		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
5877			return;
5878		}
5879
5880		// Determine handlers
5881		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
5882
5883		// Run delegates first; they may want to stop propagation beneath us
5884		i = 0;
5885		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
5886			event.currentTarget = matched.elem;
5887
5888			j = 0;
5889			while ( ( handleObj = matched.handlers[ j++ ] ) &&
5890				!event.isImmediatePropagationStopped() ) {
5891
5892				// If the event is namespaced, then each handler is only invoked if it is
5893				// specially universal or its namespaces are a superset of the event's.
5894				if ( !event.rnamespace || handleObj.namespace === false ||
5895					event.rnamespace.test( handleObj.namespace ) ) {
5896
5897					event.handleObj = handleObj;
5898					event.data = handleObj.data;
5899
5900					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
5901						handleObj.handler ).apply( matched.elem, args );
5902
5903					if ( ret !== undefined ) {
5904						if ( ( event.result = ret ) === false ) {
5905							event.preventDefault();
5906							event.stopPropagation();
5907						}
5908					}
5909				}
5910			}
5911		}
5912
5913		// Call the postDispatch hook for the mapped type
5914		if ( special.postDispatch ) {
5915			special.postDispatch.call( this, event );
5916		}
5917
5918		return event.result;
5919	},
5920
5921	handlers: function( event, handlers ) {
5922		var i, handleObj, sel, matchedHandlers, matchedSelectors,
5923			handlerQueue = [],
5924			delegateCount = handlers.delegateCount,
5925			cur = event.target;
5926
5927		// Find delegate handlers
5928		if ( delegateCount &&
5929
5930			// Support: IE <=9
5931			// Black-hole SVG <use> instance trees (trac-13180)
5932			cur.nodeType &&
5933
5934			// Support: Firefox <=42
5935			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
5936			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
5937			// Support: IE 11 only
5938			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
5939			!( event.type === "click" && event.button >= 1 ) ) {
5940
5941			for ( ; cur !== this; cur = cur.parentNode || this ) {
5942
5943				// Don't check non-elements (trac-13208)
5944				// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
5945				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
5946					matchedHandlers = [];
5947					matchedSelectors = {};
5948					for ( i = 0; i < delegateCount; i++ ) {
5949						handleObj = handlers[ i ];
5950
5951						// Don't conflict with Object.prototype properties (trac-13203)
5952						sel = handleObj.selector + " ";
5953
5954						if ( matchedSelectors[ sel ] === undefined ) {
5955							matchedSelectors[ sel ] = handleObj.needsContext ?
5956								jQuery( sel, this ).index( cur ) > -1 :
5957								jQuery.find( sel, this, null, [ cur ] ).length;
5958						}
5959						if ( matchedSelectors[ sel ] ) {
5960							matchedHandlers.push( handleObj );
5961						}
5962					}
5963					if ( matchedHandlers.length ) {
5964						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
5965					}
5966				}
5967			}
5968		}
5969
5970		// Add the remaining (directly-bound) handlers
5971		cur = this;
5972		if ( delegateCount < handlers.length ) {
5973			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
5974		}
5975
5976		return handlerQueue;
5977	},
5978
5979	addProp: function( name, hook ) {
5980		Object.defineProperty( jQuery.Event.prototype, name, {
5981			enumerable: true,
5982			configurable: true,
5983
5984			get: isFunction( hook ) ?
5985				function() {
5986					if ( this.originalEvent ) {
5987						return hook( this.originalEvent );
5988					}
5989				} :
5990				function() {
5991					if ( this.originalEvent ) {
5992						return this.originalEvent[ name ];
5993					}
5994				},
5995
5996			set: function( value ) {
5997				Object.defineProperty( this, name, {
5998					enumerable: true,
5999					configurable: true,
6000					writable: true,
6001					value: value
6002				} );
6003			}
6004		} );
6005	},
6006
6007	fix: function( originalEvent ) {
6008		return originalEvent[ jQuery.expando ] ?
6009			originalEvent :
6010			new jQuery.Event( originalEvent );
6011	},
6012
6013	special: {
6014		load: {
6015
6016			// Prevent triggered image.load events from bubbling to window.load
6017			noBubble: true
6018		},
6019		click: {
6020
6021			// Utilize native event to ensure correct state for checkable inputs
6022			setup: function( data ) {
6023
6024				// For mutual compressibility with _default, replace `this` access with a local var.
6025				// `|| data` is dead code meant only to preserve the variable through minification.
6026				var el = this || data;
6027
6028				// Claim the first handler
6029				if ( rcheckableType.test( el.type ) &&
6030					el.click && nodeName( el, "input" ) ) {
6031
6032					// dataPriv.set( el, "click", ... )
6033					leverageNative( el, "click", true );
6034				}
6035
6036				// Return false to allow normal processing in the caller
6037				return false;
6038			},
6039			trigger: function( data ) {
6040
6041				// For mutual compressibility with _default, replace `this` access with a local var.
6042				// `|| data` is dead code meant only to preserve the variable through minification.
6043				var el = this || data;
6044
6045				// Force setup before triggering a click
6046				if ( rcheckableType.test( el.type ) &&
6047					el.click && nodeName( el, "input" ) ) {
6048
6049					leverageNative( el, "click" );
6050				}
6051
6052				// Return non-false to allow normal event-path propagation
6053				return true;
6054			},
6055
6056			// For cross-browser consistency, suppress native .click() on links
6057			// Also prevent it if we're currently inside a leveraged native-event stack
6058			_default: function( event ) {
6059				var target = event.target;
6060				return rcheckableType.test( target.type ) &&
6061					target.click && nodeName( target, "input" ) &&
6062					dataPriv.get( target, "click" ) ||
6063					nodeName( target, "a" );
6064			}
6065		},
6066
6067		beforeunload: {
6068			postDispatch: function( event ) {
6069
6070				// Support: Firefox 20+
6071				// Firefox doesn't alert if the returnValue field is not set.
6072				if ( event.result !== undefined && event.originalEvent ) {
6073					event.originalEvent.returnValue = event.result;
6074				}
6075			}
6076		}
6077	}
6078};
6079
6080// Ensure the presence of an event listener that handles manually-triggered
6081// synthetic events by interrupting progress until reinvoked in response to
6082// *native* events that it fires directly, ensuring that state changes have
6083// already occurred before other listeners are invoked.
6084function leverageNative( el, type, isSetup ) {
6085
6086	// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add
6087	if ( !isSetup ) {
6088		if ( dataPriv.get( el, type ) === undefined ) {
6089			jQuery.event.add( el, type, returnTrue );
6090		}
6091		return;
6092	}
6093
6094	// Register the controller as a special universal handler for all event namespaces
6095	dataPriv.set( el, type, false );
6096	jQuery.event.add( el, type, {
6097		namespace: false,
6098		handler: function( event ) {
6099			var result,
6100				saved = dataPriv.get( this, type );
6101
6102			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
6103
6104				// Interrupt processing of the outer synthetic .trigger()ed event
6105				if ( !saved ) {
6106
6107					// Store arguments for use when handling the inner native event
6108					// There will always be at least one argument (an event object), so this array
6109					// will not be confused with a leftover capture object.
6110					saved = slice.call( arguments );
6111					dataPriv.set( this, type, saved );
6112
6113					// Trigger the native event and capture its result
6114					this[ type ]();
6115					result = dataPriv.get( this, type );
6116					dataPriv.set( this, type, false );
6117
6118					if ( saved !== result ) {
6119
6120						// Cancel the outer synthetic event
6121						event.stopImmediatePropagation();
6122						event.preventDefault();
6123
6124						return result;
6125					}
6126
6127				// If this is an inner synthetic event for an event with a bubbling surrogate
6128				// (focus or blur), assume that the surrogate already propagated from triggering
6129				// the native event and prevent that from happening again here.
6130				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
6131				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
6132				// less bad than duplication.
6133				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
6134					event.stopPropagation();
6135				}
6136
6137			// If this is a native event triggered above, everything is now in order
6138			// Fire an inner synthetic event with the original arguments
6139			} else if ( saved ) {
6140
6141				// ...and capture the result
6142				dataPriv.set( this, type, jQuery.event.trigger(
6143					saved[ 0 ],
6144					saved.slice( 1 ),
6145					this
6146				) );
6147
6148				// Abort handling of the native event by all jQuery handlers while allowing
6149				// native handlers on the same element to run. On target, this is achieved
6150				// by stopping immediate propagation just on the jQuery event. However,
6151				// the native event is re-wrapped by a jQuery one on each level of the
6152				// propagation so the only way to stop it for jQuery is to stop it for
6153				// everyone via native `stopPropagation()`. This is not a problem for
6154				// focus/blur which don't bubble, but it does also stop click on checkboxes
6155				// and radios. We accept this limitation.
6156				event.stopPropagation();
6157				event.isImmediatePropagationStopped = returnTrue;
6158			}
6159		}
6160	} );
6161}
6162
6163jQuery.removeEvent = function( elem, type, handle ) {
6164
6165	// This "if" is needed for plain objects
6166	if ( elem.removeEventListener ) {
6167		elem.removeEventListener( type, handle );
6168	}
6169};
6170
6171jQuery.Event = function( src, props ) {
6172
6173	// Allow instantiation without the 'new' keyword
6174	if ( !( this instanceof jQuery.Event ) ) {
6175		return new jQuery.Event( src, props );
6176	}
6177
6178	// Event object
6179	if ( src && src.type ) {
6180		this.originalEvent = src;
6181		this.type = src.type;
6182
6183		// Events bubbling up the document may have been marked as prevented
6184		// by a handler lower down the tree; reflect the correct value.
6185		this.isDefaultPrevented = src.defaultPrevented ||
6186				src.defaultPrevented === undefined &&
6187
6188				// Support: Android <=2.3 only
6189				src.returnValue === false ?
6190			returnTrue :
6191			returnFalse;
6192
6193		// Create target properties
6194		// Support: Safari <=6 - 7 only
6195		// Target should not be a text node (trac-504, trac-13143)
6196		this.target = ( src.target && src.target.nodeType === 3 ) ?
6197			src.target.parentNode :
6198			src.target;
6199
6200		this.currentTarget = src.currentTarget;
6201		this.relatedTarget = src.relatedTarget;
6202
6203	// Event type
6204	} else {
6205		this.type = src;
6206	}
6207
6208	// Put explicitly provided properties onto the event object
6209	if ( props ) {
6210		jQuery.extend( this, props );
6211	}
6212
6213	// Create a timestamp if incoming event doesn't have one
6214	this.timeStamp = src && src.timeStamp || Date.now();
6215
6216	// Mark it as fixed
6217	this[ jQuery.expando ] = true;
6218};
6219
6220// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
6221// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
6222jQuery.Event.prototype = {
6223	constructor: jQuery.Event,
6224	isDefaultPrevented: returnFalse,
6225	isPropagationStopped: returnFalse,
6226	isImmediatePropagationStopped: returnFalse,
6227	isSimulated: false,
6228
6229	preventDefault: function() {
6230		var e = this.originalEvent;
6231
6232		this.isDefaultPrevented = returnTrue;
6233
6234		if ( e && !this.isSimulated ) {
6235			e.preventDefault();
6236		}
6237	},
6238	stopPropagation: function() {
6239		var e = this.originalEvent;
6240
6241		this.isPropagationStopped = returnTrue;
6242
6243		if ( e && !this.isSimulated ) {
6244			e.stopPropagation();
6245		}
6246	},
6247	stopImmediatePropagation: function() {
6248		var e = this.originalEvent;
6249
6250		this.isImmediatePropagationStopped = returnTrue;
6251
6252		if ( e && !this.isSimulated ) {
6253			e.stopImmediatePropagation();
6254		}
6255
6256		this.stopPropagation();
6257	}
6258};
6259
6260// Includes all common event props including KeyEvent and MouseEvent specific props
6261jQuery.each( {
6262	altKey: true,
6263	bubbles: true,
6264	cancelable: true,
6265	changedTouches: true,
6266	ctrlKey: true,
6267	detail: true,
6268	eventPhase: true,
6269	metaKey: true,
6270	pageX: true,
6271	pageY: true,
6272	shiftKey: true,
6273	view: true,
6274	"char": true,
6275	code: true,
6276	charCode: true,
6277	key: true,
6278	keyCode: true,
6279	button: true,
6280	buttons: true,
6281	clientX: true,
6282	clientY: true,
6283	offsetX: true,
6284	offsetY: true,
6285	pointerId: true,
6286	pointerType: true,
6287	screenX: true,
6288	screenY: true,
6289	targetTouches: true,
6290	toElement: true,
6291	touches: true,
6292	which: true
6293}, jQuery.event.addProp );
6294
6295jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
6296
6297	function focusMappedHandler( nativeEvent ) {
6298		if ( document.documentMode ) {
6299
6300			// Support: IE 11+
6301			// Attach a single focusin/focusout handler on the document while someone wants
6302			// focus/blur. This is because the former are synchronous in IE while the latter
6303			// are async. In other browsers, all those handlers are invoked synchronously.
6304
6305			// `handle` from private data would already wrap the event, but we need
6306			// to change the `type` here.
6307			var handle = dataPriv.get( this, "handle" ),
6308				event = jQuery.event.fix( nativeEvent );
6309			event.type = nativeEvent.type === "focusin" ? "focus" : "blur";
6310			event.isSimulated = true;
6311
6312			// First, handle focusin/focusout
6313			handle( nativeEvent );
6314
6315			// ...then, handle focus/blur
6316			//
6317			// focus/blur don't bubble while focusin/focusout do; simulate the former by only
6318			// invoking the handler at the lower level.
6319			if ( event.target === event.currentTarget ) {
6320
6321				// The setup part calls `leverageNative`, which, in turn, calls
6322				// `jQuery.event.add`, so event handle will already have been set
6323				// by this point.
6324				handle( event );
6325			}
6326		} else {
6327
6328			// For non-IE browsers, attach a single capturing handler on the document
6329			// while someone wants focusin/focusout.
6330			jQuery.event.simulate( delegateType, nativeEvent.target,
6331				jQuery.event.fix( nativeEvent ) );
6332		}
6333	}
6334
6335	jQuery.event.special[ type ] = {
6336
6337		// Utilize native event if possible so blur/focus sequence is correct
6338		setup: function() {
6339
6340			var attaches;
6341
6342			// Claim the first handler
6343			// dataPriv.set( this, "focus", ... )
6344			// dataPriv.set( this, "blur", ... )
6345			leverageNative( this, type, true );
6346
6347			if ( document.documentMode ) {
6348
6349				// Support: IE 9 - 11+
6350				// We use the same native handler for focusin & focus (and focusout & blur)
6351				// so we need to coordinate setup & teardown parts between those events.
6352				// Use `delegateType` as the key as `type` is already used by `leverageNative`.
6353				attaches = dataPriv.get( this, delegateType );
6354				if ( !attaches ) {
6355					this.addEventListener( delegateType, focusMappedHandler );
6356				}
6357				dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );
6358			} else {
6359
6360				// Return false to allow normal processing in the caller
6361				return false;
6362			}
6363		},
6364		trigger: function() {
6365
6366			// Force setup before trigger
6367			leverageNative( this, type );
6368
6369			// Return non-false to allow normal event-path propagation
6370			return true;
6371		},
6372
6373		teardown: function() {
6374			var attaches;
6375
6376			if ( document.documentMode ) {
6377				attaches = dataPriv.get( this, delegateType ) - 1;
6378				if ( !attaches ) {
6379					this.removeEventListener( delegateType, focusMappedHandler );
6380					dataPriv.remove( this, delegateType );
6381				} else {
6382					dataPriv.set( this, delegateType, attaches );
6383				}
6384			} else {
6385
6386				// Return false to indicate standard teardown should be applied
6387				return false;
6388			}
6389		},
6390
6391		// Suppress native focus or blur if we're currently inside
6392		// a leveraged native-event stack
6393		_default: function( event ) {
6394			return dataPriv.get( event.target, type );
6395		},
6396
6397		delegateType: delegateType
6398	};
6399
6400	// Support: Firefox <=44
6401	// Firefox doesn't have focus(in | out) events
6402	// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
6403	//
6404	// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
6405	// focus(in | out) events fire after focus & blur events,
6406	// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
6407	// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
6408	//
6409	// Support: IE 9 - 11+
6410	// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,
6411	// attach a single handler for both events in IE.
6412	jQuery.event.special[ delegateType ] = {
6413		setup: function() {
6414
6415			// Handle: regular nodes (via `this.ownerDocument`), window
6416			// (via `this.document`) & document (via `this`).
6417			var doc = this.ownerDocument || this.document || this,
6418				dataHolder = document.documentMode ? this : doc,
6419				attaches = dataPriv.get( dataHolder, delegateType );
6420
6421			// Support: IE 9 - 11+
6422			// We use the same native handler for focusin & focus (and focusout & blur)
6423			// so we need to coordinate setup & teardown parts between those events.
6424			// Use `delegateType` as the key as `type` is already used by `leverageNative`.
6425			if ( !attaches ) {
6426				if ( document.documentMode ) {
6427					this.addEventListener( delegateType, focusMappedHandler );
6428				} else {
6429					doc.addEventListener( type, focusMappedHandler, true );
6430				}
6431			}
6432			dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );
6433		},
6434		teardown: function() {
6435			var doc = this.ownerDocument || this.document || this,
6436				dataHolder = document.documentMode ? this : doc,
6437				attaches = dataPriv.get( dataHolder, delegateType ) - 1;
6438
6439			if ( !attaches ) {
6440				if ( document.documentMode ) {
6441					this.removeEventListener( delegateType, focusMappedHandler );
6442				} else {
6443					doc.removeEventListener( type, focusMappedHandler, true );
6444				}
6445				dataPriv.remove( dataHolder, delegateType );
6446			} else {
6447				dataPriv.set( dataHolder, delegateType, attaches );
6448			}
6449		}
6450	};
6451} );
6452
6453// Create mouseenter/leave events using mouseover/out and event-time checks
6454// so that event delegation works in jQuery.
6455// Do the same for pointerenter/pointerleave and pointerover/pointerout
6456//
6457// Support: Safari 7 only
6458// Safari sends mouseenter too often; see:
6459// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
6460// for the description of the bug (it existed in older Chrome versions as well).
6461jQuery.each( {
6462	mouseenter: "mouseover",
6463	mouseleave: "mouseout",
6464	pointerenter: "pointerover",
6465	pointerleave: "pointerout"
6466}, function( orig, fix ) {
6467	jQuery.event.special[ orig ] = {
6468		delegateType: fix,
6469		bindType: fix,
6470
6471		handle: function( event ) {
6472			var ret,
6473				target = this,
6474				related = event.relatedTarget,
6475				handleObj = event.handleObj;
6476
6477			// For mouseenter/leave call the handler if related is outside the target.
6478			// NB: No relatedTarget if the mouse left/entered the browser window
6479			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
6480				event.type = handleObj.origType;
6481				ret = handleObj.handler.apply( this, arguments );
6482				event.type = fix;
6483			}
6484			return ret;
6485		}
6486	};
6487} );
6488
6489jQuery.fn.extend( {
6490
6491	on: function( types, selector, data, fn ) {
6492		return on( this, types, selector, data, fn );
6493	},
6494	one: function( types, selector, data, fn ) {
6495		return on( this, types, selector, data, fn, 1 );
6496	},
6497	off: function( types, selector, fn ) {
6498		var handleObj, type;
6499		if ( types && types.preventDefault && types.handleObj ) {
6500
6501			// ( event )  dispatched jQuery.Event
6502			handleObj = types.handleObj;
6503			jQuery( types.delegateTarget ).off(
6504				handleObj.namespace ?
6505					handleObj.origType + "." + handleObj.namespace :
6506					handleObj.origType,
6507				handleObj.selector,
6508				handleObj.handler
6509			);
6510			return this;
6511		}
6512		if ( typeof types === "object" ) {
6513
6514			// ( types-object [, selector] )
6515			for ( type in types ) {
6516				this.off( type, selector, types[ type ] );
6517			}
6518			return this;
6519		}
6520		if ( selector === false || typeof selector === "function" ) {
6521
6522			// ( types [, fn] )
6523			fn = selector;
6524			selector = undefined;
6525		}
6526		if ( fn === false ) {
6527			fn = returnFalse;
6528		}
6529		return this.each( function() {
6530			jQuery.event.remove( this, types, fn, selector );
6531		} );
6532	}
6533} );
6534
6535
6536var
6537
6538	// Support: IE <=10 - 11, Edge 12 - 13 only
6539	// In IE/Edge using regex groups here causes severe slowdowns.
6540	// See https://connect.microsoft.com/IE/feedback/details/1736512/
6541	rnoInnerhtml = /<script|<style|<link/i,
6542
6543	// checked="checked" or checked
6544	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
6545
6546	rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
6547
6548// Prefer a tbody over its parent table for containing new rows
6549function manipulationTarget( elem, content ) {
6550	if ( nodeName( elem, "table" ) &&
6551		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
6552
6553		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
6554	}
6555
6556	return elem;
6557}
6558
6559// Replace/restore the type attribute of script elements for safe DOM manipulation
6560function disableScript( elem ) {
6561	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
6562	return elem;
6563}
6564function restoreScript( elem ) {
6565	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
6566		elem.type = elem.type.slice( 5 );
6567	} else {
6568		elem.removeAttribute( "type" );
6569	}
6570
6571	return elem;
6572}
6573
6574function cloneCopyEvent( src, dest ) {
6575	var i, l, type, pdataOld, udataOld, udataCur, events;
6576
6577	if ( dest.nodeType !== 1 ) {
6578		return;
6579	}
6580
6581	// 1. Copy private data: events, handlers, etc.
6582	if ( dataPriv.hasData( src ) ) {
6583		pdataOld = dataPriv.get( src );
6584		events = pdataOld.events;
6585
6586		if ( events ) {
6587			dataPriv.remove( dest, "handle events" );
6588
6589			for ( type in events ) {
6590				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
6591					jQuery.event.add( dest, type, events[ type ][ i ] );
6592				}
6593			}
6594		}
6595	}
6596
6597	// 2. Copy user data
6598	if ( dataUser.hasData( src ) ) {
6599		udataOld = dataUser.access( src );
6600		udataCur = jQuery.extend( {}, udataOld );
6601
6602		dataUser.set( dest, udataCur );
6603	}
6604}
6605
6606// Fix IE bugs, see support tests
6607function fixInput( src, dest ) {
6608	var nodeName = dest.nodeName.toLowerCase();
6609
6610	// Fails to persist the checked state of a cloned checkbox or radio button.
6611	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
6612		dest.checked = src.checked;
6613
6614	// Fails to return the selected option to the default selected state when cloning options
6615	} else if ( nodeName === "input" || nodeName === "textarea" ) {
6616		dest.defaultValue = src.defaultValue;
6617	}
6618}
6619
6620function domManip( collection, args, callback, ignored ) {
6621
6622	// Flatten any nested arrays
6623	args = flat( args );
6624
6625	var fragment, first, scripts, hasScripts, node, doc,
6626		i = 0,
6627		l = collection.length,
6628		iNoClone = l - 1,
6629		value = args[ 0 ],
6630		valueIsFunction = isFunction( value );
6631
6632	// We can't cloneNode fragments that contain checked, in WebKit
6633	if ( valueIsFunction ||
6634			( l > 1 && typeof value === "string" &&
6635				!support.checkClone && rchecked.test( value ) ) ) {
6636		return collection.each( function( index ) {
6637			var self = collection.eq( index );
6638			if ( valueIsFunction ) {
6639				args[ 0 ] = value.call( this, index, self.html() );
6640			}
6641			domManip( self, args, callback, ignored );
6642		} );
6643	}
6644
6645	if ( l ) {
6646		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
6647		first = fragment.firstChild;
6648
6649		if ( fragment.childNodes.length === 1 ) {
6650			fragment = first;
6651		}
6652
6653		// Require either new content or an interest in ignored elements to invoke the callback
6654		if ( first || ignored ) {
6655			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
6656			hasScripts = scripts.length;
6657
6658			// Use the original fragment for the last item
6659			// instead of the first because it can end up
6660			// being emptied incorrectly in certain situations (trac-8070).
6661			for ( ; i < l; i++ ) {
6662				node = fragment;
6663
6664				if ( i !== iNoClone ) {
6665					node = jQuery.clone( node, true, true );
6666
6667					// Keep references to cloned scripts for later restoration
6668					if ( hasScripts ) {
6669
6670						// Support: Android <=4.0 only, PhantomJS 1 only
6671						// push.apply(_, arraylike) throws on ancient WebKit
6672						jQuery.merge( scripts, getAll( node, "script" ) );
6673					}
6674				}
6675
6676				callback.call( collection[ i ], node, i );
6677			}
6678
6679			if ( hasScripts ) {
6680				doc = scripts[ scripts.length - 1 ].ownerDocument;
6681
6682				// Re-enable scripts
6683				jQuery.map( scripts, restoreScript );
6684
6685				// Evaluate executable scripts on first document insertion
6686				for ( i = 0; i < hasScripts; i++ ) {
6687					node = scripts[ i ];
6688					if ( rscriptType.test( node.type || "" ) &&
6689						!dataPriv.access( node, "globalEval" ) &&
6690						jQuery.contains( doc, node ) ) {
6691
6692						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
6693
6694							// Optional AJAX dependency, but won't run scripts if not present
6695							if ( jQuery._evalUrl && !node.noModule ) {
6696								jQuery._evalUrl( node.src, {
6697									nonce: node.nonce || node.getAttribute( "nonce" )
6698								}, doc );
6699							}
6700						} else {
6701
6702							// Unwrap a CDATA section containing script contents. This shouldn't be
6703							// needed as in XML documents they're already not visible when
6704							// inspecting element contents and in HTML documents they have no
6705							// meaning but we're preserving that logic for backwards compatibility.
6706							// This will be removed completely in 4.0. See gh-4904.
6707							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
6708						}
6709					}
6710				}
6711			}
6712		}
6713	}
6714
6715	return collection;
6716}
6717
6718function remove( elem, selector, keepData ) {
6719	var node,
6720		nodes = selector ? jQuery.filter( selector, elem ) : elem,
6721		i = 0;
6722
6723	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
6724		if ( !keepData && node.nodeType === 1 ) {
6725			jQuery.cleanData( getAll( node ) );
6726		}
6727
6728		if ( node.parentNode ) {
6729			if ( keepData && isAttached( node ) ) {
6730				setGlobalEval( getAll( node, "script" ) );
6731			}
6732			node.parentNode.removeChild( node );
6733		}
6734	}
6735
6736	return elem;
6737}
6738
6739jQuery.extend( {
6740	htmlPrefilter: function( html ) {
6741		return html;
6742	},
6743
6744	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
6745		var i, l, srcElements, destElements,
6746			clone = elem.cloneNode( true ),
6747			inPage = isAttached( elem );
6748
6749		// Fix IE cloning issues
6750		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
6751				!jQuery.isXMLDoc( elem ) ) {
6752
6753			// We eschew jQuery#find here for performance reasons:
6754			// https://jsperf.com/getall-vs-sizzle/2
6755			destElements = getAll( clone );
6756			srcElements = getAll( elem );
6757
6758			for ( i = 0, l = srcElements.length; i < l; i++ ) {
6759				fixInput( srcElements[ i ], destElements[ i ] );
6760			}
6761		}
6762
6763		// Copy the events from the original to the clone
6764		if ( dataAndEvents ) {
6765			if ( deepDataAndEvents ) {
6766				srcElements = srcElements || getAll( elem );
6767				destElements = destElements || getAll( clone );
6768
6769				for ( i = 0, l = srcElements.length; i < l; i++ ) {
6770					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
6771				}
6772			} else {
6773				cloneCopyEvent( elem, clone );
6774			}
6775		}
6776
6777		// Preserve script evaluation history
6778		destElements = getAll( clone, "script" );
6779		if ( destElements.length > 0 ) {
6780			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
6781		}
6782
6783		// Return the cloned set
6784		return clone;
6785	},
6786
6787	cleanData: function( elems ) {
6788		var data, elem, type,
6789			special = jQuery.event.special,
6790			i = 0;
6791
6792		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
6793			if ( acceptData( elem ) ) {
6794				if ( ( data = elem[ dataPriv.expando ] ) ) {
6795					if ( data.events ) {
6796						for ( type in data.events ) {
6797							if ( special[ type ] ) {
6798								jQuery.event.remove( elem, type );
6799
6800							// This is a shortcut to avoid jQuery.event.remove's overhead
6801							} else {
6802								jQuery.removeEvent( elem, type, data.handle );
6803							}
6804						}
6805					}
6806
6807					// Support: Chrome <=35 - 45+
6808					// Assign undefined instead of using delete, see Data#remove
6809					elem[ dataPriv.expando ] = undefined;
6810				}
6811				if ( elem[ dataUser.expando ] ) {
6812
6813					// Support: Chrome <=35 - 45+
6814					// Assign undefined instead of using delete, see Data#remove
6815					elem[ dataUser.expando ] = undefined;
6816				}
6817			}
6818		}
6819	}
6820} );
6821
6822jQuery.fn.extend( {
6823	detach: function( selector ) {
6824		return remove( this, selector, true );
6825	},
6826
6827	remove: function( selector ) {
6828		return remove( this, selector );
6829	},
6830
6831	text: function( value ) {
6832		return access( this, function( value ) {
6833			return value === undefined ?
6834				jQuery.text( this ) :
6835				this.empty().each( function() {
6836					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
6837						this.textContent = value;
6838					}
6839				} );
6840		}, null, value, arguments.length );
6841	},
6842
6843	append: function() {
6844		return domManip( this, arguments, function( elem ) {
6845			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
6846				var target = manipulationTarget( this, elem );
6847				target.appendChild( elem );
6848			}
6849		} );
6850	},
6851
6852	prepend: function() {
6853		return domManip( this, arguments, function( elem ) {
6854			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
6855				var target = manipulationTarget( this, elem );
6856				target.insertBefore( elem, target.firstChild );
6857			}
6858		} );
6859	},
6860
6861	before: function() {
6862		return domManip( this, arguments, function( elem ) {
6863			if ( this.parentNode ) {
6864				this.parentNode.insertBefore( elem, this );
6865			}
6866		} );
6867	},
6868
6869	after: function() {
6870		return domManip( this, arguments, function( elem ) {
6871			if ( this.parentNode ) {
6872				this.parentNode.insertBefore( elem, this.nextSibling );
6873			}
6874		} );
6875	},
6876
6877	empty: function() {
6878		var elem,
6879			i = 0;
6880
6881		for ( ; ( elem = this[ i ] ) != null; i++ ) {
6882			if ( elem.nodeType === 1 ) {
6883
6884				// Prevent memory leaks
6885				jQuery.cleanData( getAll( elem, false ) );
6886
6887				// Remove any remaining nodes
6888				elem.textContent = "";
6889			}
6890		}
6891
6892		return this;
6893	},
6894
6895	clone: function( dataAndEvents, deepDataAndEvents ) {
6896		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
6897		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
6898
6899		return this.map( function() {
6900			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
6901		} );
6902	},
6903
6904	html: function( value ) {
6905		return access( this, function( value ) {
6906			var elem = this[ 0 ] || {},
6907				i = 0,
6908				l = this.length;
6909
6910			if ( value === undefined && elem.nodeType === 1 ) {
6911				return elem.innerHTML;
6912			}
6913
6914			// See if we can take a shortcut and just use innerHTML
6915			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
6916				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
6917
6918				value = jQuery.htmlPrefilter( value );
6919
6920				try {
6921					for ( ; i < l; i++ ) {
6922						elem = this[ i ] || {};
6923
6924						// Remove element nodes and prevent memory leaks
6925						if ( elem.nodeType === 1 ) {
6926							jQuery.cleanData( getAll( elem, false ) );
6927							elem.innerHTML = value;
6928						}
6929					}
6930
6931					elem = 0;
6932
6933				// If using innerHTML throws an exception, use the fallback method
6934				} catch ( e ) {}
6935			}
6936
6937			if ( elem ) {
6938				this.empty().append( value );
6939			}
6940		}, null, value, arguments.length );
6941	},
6942
6943	replaceWith: function() {
6944		var ignored = [];
6945
6946		// Make the changes, replacing each non-ignored context element with the new content
6947		return domManip( this, arguments, function( elem ) {
6948			var parent = this.parentNode;
6949
6950			if ( jQuery.inArray( this, ignored ) < 0 ) {
6951				jQuery.cleanData( getAll( this ) );
6952				if ( parent ) {
6953					parent.replaceChild( elem, this );
6954				}
6955			}
6956
6957		// Force callback invocation
6958		}, ignored );
6959	}
6960} );
6961
6962jQuery.each( {
6963	appendTo: "append",
6964	prependTo: "prepend",
6965	insertBefore: "before",
6966	insertAfter: "after",
6967	replaceAll: "replaceWith"
6968}, function( name, original ) {
6969	jQuery.fn[ name ] = function( selector ) {
6970		var elems,
6971			ret = [],
6972			insert = jQuery( selector ),
6973			last = insert.length - 1,
6974			i = 0;
6975
6976		for ( ; i <= last; i++ ) {
6977			elems = i === last ? this : this.clone( true );
6978			jQuery( insert[ i ] )[ original ]( elems );
6979
6980			// Support: Android <=4.0 only, PhantomJS 1 only
6981			// .get() because push.apply(_, arraylike) throws on ancient WebKit
6982			push.apply( ret, elems.get() );
6983		}
6984
6985		return this.pushStack( ret );
6986	};
6987} );
6988var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
6989
6990var rcustomProp = /^--/;
6991
6992
6993var getStyles = function( elem ) {
6994
6995		// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)
6996		// IE throws on elements created in popups
6997		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
6998		var view = elem.ownerDocument.defaultView;
6999
7000		if ( !view || !view.opener ) {
7001			view = window;
7002		}
7003
7004		return view.getComputedStyle( elem );
7005	};
7006
7007var swap = function( elem, options, callback ) {
7008	var ret, name,
7009		old = {};
7010
7011	// Remember the old values, and insert the new ones
7012	for ( name in options ) {
7013		old[ name ] = elem.style[ name ];
7014		elem.style[ name ] = options[ name ];
7015	}
7016
7017	ret = callback.call( elem );
7018
7019	// Revert the old values
7020	for ( name in options ) {
7021		elem.style[ name ] = old[ name ];
7022	}
7023
7024	return ret;
7025};
7026
7027
7028var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
7029
7030
7031
7032( function() {
7033
7034	// Executing both pixelPosition & boxSizingReliable tests require only one layout
7035	// so they're executed at the same time to save the second computation.
7036	function computeStyleTests() {
7037
7038		// This is a singleton, we need to execute it only once
7039		if ( !div ) {
7040			return;
7041		}
7042
7043		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
7044			"margin-top:1px;padding:0;border:0";
7045		div.style.cssText =
7046			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
7047			"margin:auto;border:1px;padding:1px;" +
7048			"width:60%;top:1%";
7049		documentElement.appendChild( container ).appendChild( div );
7050
7051		var divStyle = window.getComputedStyle( div );
7052		pixelPositionVal = divStyle.top !== "1%";
7053
7054		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
7055		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
7056
7057		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
7058		// Some styles come back with percentage values, even though they shouldn't
7059		div.style.right = "60%";
7060		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
7061
7062		// Support: IE 9 - 11 only
7063		// Detect misreporting of content dimensions for box-sizing:border-box elements
7064		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
7065
7066		// Support: IE 9 only
7067		// Detect overflow:scroll screwiness (gh-3699)
7068		// Support: Chrome <=64
7069		// Don't get tricked when zoom affects offsetWidth (gh-4029)
7070		div.style.position = "absolute";
7071		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
7072
7073		documentElement.removeChild( container );
7074
7075		// Nullify the div so it wouldn't be stored in the memory and
7076		// it will also be a sign that checks already performed
7077		div = null;
7078	}
7079
7080	function roundPixelMeasures( measure ) {
7081		return Math.round( parseFloat( measure ) );
7082	}
7083
7084	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
7085		reliableTrDimensionsVal, reliableMarginLeftVal,
7086		container = document.createElement( "div" ),
7087		div = document.createElement( "div" );
7088
7089	// Finish early in limited (non-browser) environments
7090	if ( !div.style ) {
7091		return;
7092	}
7093
7094	// Support: IE <=9 - 11 only
7095	// Style of cloned element affects source element cloned (trac-8908)
7096	div.style.backgroundClip = "content-box";
7097	div.cloneNode( true ).style.backgroundClip = "";
7098	support.clearCloneStyle = div.style.backgroundClip === "content-box";
7099
7100	jQuery.extend( support, {
7101		boxSizingReliable: function() {
7102			computeStyleTests();
7103			return boxSizingReliableVal;
7104		},
7105		pixelBoxStyles: function() {
7106			computeStyleTests();
7107			return pixelBoxStylesVal;
7108		},
7109		pixelPosition: function() {
7110			computeStyleTests();
7111			return pixelPositionVal;
7112		},
7113		reliableMarginLeft: function() {
7114			computeStyleTests();
7115			return reliableMarginLeftVal;
7116		},
7117		scrollboxSize: function() {
7118			computeStyleTests();
7119			return scrollboxSizeVal;
7120		},
7121
7122		// Support: IE 9 - 11+, Edge 15 - 18+
7123		// IE/Edge misreport `getComputedStyle` of table rows with width/height
7124		// set in CSS while `offset*` properties report correct values.
7125		// Behavior in IE 9 is more subtle than in newer versions & it passes
7126		// some versions of this test; make sure not to make it pass there!
7127		//
7128		// Support: Firefox 70+
7129		// Only Firefox includes border widths
7130		// in computed dimensions. (gh-4529)
7131		reliableTrDimensions: function() {
7132			var table, tr, trChild, trStyle;
7133			if ( reliableTrDimensionsVal == null ) {
7134				table = document.createElement( "table" );
7135				tr = document.createElement( "tr" );
7136				trChild = document.createElement( "div" );
7137
7138				table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
7139				tr.style.cssText = "box-sizing:content-box;border:1px solid";
7140
7141				// Support: Chrome 86+
7142				// Height set through cssText does not get applied.
7143				// Computed height then comes back as 0.
7144				tr.style.height = "1px";
7145				trChild.style.height = "9px";
7146
7147				// Support: Android 8 Chrome 86+
7148				// In our bodyBackground.html iframe,
7149				// display for all div elements is set to "inline",
7150				// which causes a problem only in Android 8 Chrome 86.
7151				// Ensuring the div is `display: block`
7152				// gets around this issue.
7153				trChild.style.display = "block";
7154
7155				documentElement
7156					.appendChild( table )
7157					.appendChild( tr )
7158					.appendChild( trChild );
7159
7160				trStyle = window.getComputedStyle( tr );
7161				reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
7162					parseInt( trStyle.borderTopWidth, 10 ) +
7163					parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
7164
7165				documentElement.removeChild( table );
7166			}
7167			return reliableTrDimensionsVal;
7168		}
7169	} );
7170} )();
7171
7172
7173function curCSS( elem, name, computed ) {
7174	var width, minWidth, maxWidth, ret,
7175		isCustomProp = rcustomProp.test( name ),
7176
7177		// Support: Firefox 51+
7178		// Retrieving style before computed somehow
7179		// fixes an issue with getting wrong values
7180		// on detached elements
7181		style = elem.style;
7182
7183	computed = computed || getStyles( elem );
7184
7185	// getPropertyValue is needed for:
7186	//   .css('filter') (IE 9 only, trac-12537)
7187	//   .css('--customProperty) (gh-3144)
7188	if ( computed ) {
7189
7190		// Support: IE <=9 - 11+
7191		// IE only supports `"float"` in `getPropertyValue`; in computed styles
7192		// it's only available as `"cssFloat"`. We no longer modify properties
7193		// sent to `.css()` apart from camelCasing, so we need to check both.
7194		// Normally, this would create difference in behavior: if
7195		// `getPropertyValue` returns an empty string, the value returned
7196		// by `.css()` would be `undefined`. This is usually the case for
7197		// disconnected elements. However, in IE even disconnected elements
7198		// with no styles return `"none"` for `getPropertyValue( "float" )`
7199		ret = computed.getPropertyValue( name ) || computed[ name ];
7200
7201		if ( isCustomProp && ret ) {
7202
7203			// Support: Firefox 105+, Chrome <=105+
7204			// Spec requires trimming whitespace for custom properties (gh-4926).
7205			// Firefox only trims leading whitespace. Chrome just collapses
7206			// both leading & trailing whitespace to a single space.
7207			//
7208			// Fall back to `undefined` if empty string returned.
7209			// This collapses a missing definition with property defined
7210			// and set to an empty string but there's no standard API
7211			// allowing us to differentiate them without a performance penalty
7212			// and returning `undefined` aligns with older jQuery.
7213			//
7214			// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
7215			// as whitespace while CSS does not, but this is not a problem
7216			// because CSS preprocessing replaces them with U+000A LINE FEED
7217			// (which *is* CSS whitespace)
7218			// https://www.w3.org/TR/css-syntax-3/#input-preprocessing
7219			ret = ret.replace( rtrimCSS, "$1" ) || undefined;
7220		}
7221
7222		if ( ret === "" && !isAttached( elem ) ) {
7223			ret = jQuery.style( elem, name );
7224		}
7225
7226		// A tribute to the "awesome hack by Dean Edwards"
7227		// Android Browser returns percentage for some values,
7228		// but width seems to be reliably pixels.
7229		// This is against the CSSOM draft spec:
7230		// https://drafts.csswg.org/cssom/#resolved-values
7231		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
7232
7233			// Remember the original values
7234			width = style.width;
7235			minWidth = style.minWidth;
7236			maxWidth = style.maxWidth;
7237
7238			// Put in the new values to get a computed value out
7239			style.minWidth = style.maxWidth = style.width = ret;
7240			ret = computed.width;
7241
7242			// Revert the changed values
7243			style.width = width;
7244			style.minWidth = minWidth;
7245			style.maxWidth = maxWidth;
7246		}
7247	}
7248
7249	return ret !== undefined ?
7250
7251		// Support: IE <=9 - 11 only
7252		// IE returns zIndex value as an integer.
7253		ret + "" :
7254		ret;
7255}
7256
7257
7258function addGetHookIf( conditionFn, hookFn ) {
7259
7260	// Define the hook, we'll check on the first run if it's really needed.
7261	return {
7262		get: function() {
7263			if ( conditionFn() ) {
7264
7265				// Hook not needed (or it's not possible to use it due
7266				// to missing dependency), remove it.
7267				delete this.get;
7268				return;
7269			}
7270
7271			// Hook needed; redefine it so that the support test is not executed again.
7272			return ( this.get = hookFn ).apply( this, arguments );
7273		}
7274	};
7275}
7276
7277
7278var cssPrefixes = [ "Webkit", "Moz", "ms" ],
7279	emptyStyle = document.createElement( "div" ).style,
7280	vendorProps = {};
7281
7282// Return a vendor-prefixed property or undefined
7283function vendorPropName( name ) {
7284
7285	// Check for vendor prefixed names
7286	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
7287		i = cssPrefixes.length;
7288
7289	while ( i-- ) {
7290		name = cssPrefixes[ i ] + capName;
7291		if ( name in emptyStyle ) {
7292			return name;
7293		}
7294	}
7295}
7296
7297// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
7298function finalPropName( name ) {
7299	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
7300
7301	if ( final ) {
7302		return final;
7303	}
7304	if ( name in emptyStyle ) {
7305		return name;
7306	}
7307	return vendorProps[ name ] = vendorPropName( name ) || name;
7308}
7309
7310
7311var
7312
7313	// Swappable if display is none or starts with table
7314	// except "table", "table-cell", or "table-caption"
7315	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
7316	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
7317	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
7318	cssNormalTransform = {
7319		letterSpacing: "0",
7320		fontWeight: "400"
7321	};
7322
7323function setPositiveNumber( _elem, value, subtract ) {
7324
7325	// Any relative (+/-) values have already been
7326	// normalized at this point
7327	var matches = rcssNum.exec( value );
7328	return matches ?
7329
7330		// Guard against undefined "subtract", e.g., when used as in cssHooks
7331		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
7332		value;
7333}
7334
7335function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
7336	var i = dimension === "width" ? 1 : 0,
7337		extra = 0,
7338		delta = 0,
7339		marginDelta = 0;
7340
7341	// Adjustment may not be necessary
7342	if ( box === ( isBorderBox ? "border" : "content" ) ) {
7343		return 0;
7344	}
7345
7346	for ( ; i < 4; i += 2 ) {
7347
7348		// Both box models exclude margin
7349		// Count margin delta separately to only add it after scroll gutter adjustment.
7350		// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).
7351		if ( box === "margin" ) {
7352			marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
7353		}
7354
7355		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
7356		if ( !isBorderBox ) {
7357
7358			// Add padding
7359			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
7360
7361			// For "border" or "margin", add border
7362			if ( box !== "padding" ) {
7363				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
7364
7365			// But still keep track of it otherwise
7366			} else {
7367				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
7368			}
7369
7370		// If we get here with a border-box (content + padding + border), we're seeking "content" or
7371		// "padding" or "margin"
7372		} else {
7373
7374			// For "content", subtract padding
7375			if ( box === "content" ) {
7376				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
7377			}
7378
7379			// For "content" or "padding", subtract border
7380			if ( box !== "margin" ) {
7381				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
7382			}
7383		}
7384	}
7385
7386	// Account for positive content-box scroll gutter when requested by providing computedVal
7387	if ( !isBorderBox && computedVal >= 0 ) {
7388
7389		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
7390		// Assuming integer scroll gutter, subtract the rest and round down
7391		delta += Math.max( 0, Math.ceil(
7392			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
7393			computedVal -
7394			delta -
7395			extra -
7396			0.5
7397
7398		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
7399		// Use an explicit zero to avoid NaN (gh-3964)
7400		) ) || 0;
7401	}
7402
7403	return delta + marginDelta;
7404}
7405
7406function getWidthOrHeight( elem, dimension, extra ) {
7407
7408	// Start with computed style
7409	var styles = getStyles( elem ),
7410
7411		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
7412		// Fake content-box until we know it's needed to know the true value.
7413		boxSizingNeeded = !support.boxSizingReliable() || extra,
7414		isBorderBox = boxSizingNeeded &&
7415			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
7416		valueIsBorderBox = isBorderBox,
7417
7418		val = curCSS( elem, dimension, styles ),
7419		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
7420
7421	// Support: Firefox <=54
7422	// Return a confounding non-pixel value or feign ignorance, as appropriate.
7423	if ( rnumnonpx.test( val ) ) {
7424		if ( !extra ) {
7425			return val;
7426		}
7427		val = "auto";
7428	}
7429
7430
7431	// Support: IE 9 - 11 only
7432	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
7433	// In those cases, the computed value can be trusted to be border-box.
7434	if ( ( !support.boxSizingReliable() && isBorderBox ||
7435
7436		// Support: IE 10 - 11+, Edge 15 - 18+
7437		// IE/Edge misreport `getComputedStyle` of table rows with width/height
7438		// set in CSS while `offset*` properties report correct values.
7439		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
7440		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
7441
7442		// Fall back to offsetWidth/offsetHeight when value is "auto"
7443		// This happens for inline elements with no explicit setting (gh-3571)
7444		val === "auto" ||
7445
7446		// Support: Android <=4.1 - 4.3 only
7447		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
7448		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
7449
7450		// Make sure the element is visible & connected
7451		elem.getClientRects().length ) {
7452
7453		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
7454
7455		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
7456		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
7457		// retrieved value as a content box dimension.
7458		valueIsBorderBox = offsetProp in elem;
7459		if ( valueIsBorderBox ) {
7460			val = elem[ offsetProp ];
7461		}
7462	}
7463
7464	// Normalize "" and auto
7465	val = parseFloat( val ) || 0;
7466
7467	// Adjust for the element's box model
7468	return ( val +
7469		boxModelAdjustment(
7470			elem,
7471			dimension,
7472			extra || ( isBorderBox ? "border" : "content" ),
7473			valueIsBorderBox,
7474			styles,
7475
7476			// Provide the current computed size to request scroll gutter calculation (gh-3589)
7477			val
7478		)
7479	) + "px";
7480}
7481
7482jQuery.extend( {
7483
7484	// Add in style property hooks for overriding the default
7485	// behavior of getting and setting a style property
7486	cssHooks: {
7487		opacity: {
7488			get: function( elem, computed ) {
7489				if ( computed ) {
7490
7491					// We should always get a number back from opacity
7492					var ret = curCSS( elem, "opacity" );
7493					return ret === "" ? "1" : ret;
7494				}
7495			}
7496		}
7497	},
7498
7499	// Don't automatically add "px" to these possibly-unitless properties
7500	cssNumber: {
7501		animationIterationCount: true,
7502		aspectRatio: true,
7503		borderImageSlice: true,
7504		columnCount: true,
7505		flexGrow: true,
7506		flexShrink: true,
7507		fontWeight: true,
7508		gridArea: true,
7509		gridColumn: true,
7510		gridColumnEnd: true,
7511		gridColumnStart: true,
7512		gridRow: true,
7513		gridRowEnd: true,
7514		gridRowStart: true,
7515		lineHeight: true,
7516		opacity: true,
7517		order: true,
7518		orphans: true,
7519		scale: true,
7520		widows: true,
7521		zIndex: true,
7522		zoom: true,
7523
7524		// SVG-related
7525		fillOpacity: true,
7526		floodOpacity: true,
7527		stopOpacity: true,
7528		strokeMiterlimit: true,
7529		strokeOpacity: true
7530	},
7531
7532	// Add in properties whose names you wish to fix before
7533	// setting or getting the value
7534	cssProps: {},
7535
7536	// Get and set the style property on a DOM Node
7537	style: function( elem, name, value, extra ) {
7538
7539		// Don't set styles on text and comment nodes
7540		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
7541			return;
7542		}
7543
7544		// Make sure that we're working with the right name
7545		var ret, type, hooks,
7546			origName = camelCase( name ),
7547			isCustomProp = rcustomProp.test( name ),
7548			style = elem.style;
7549
7550		// Make sure that we're working with the right name. We don't
7551		// want to query the value if it is a CSS custom property
7552		// since they are user-defined.
7553		if ( !isCustomProp ) {
7554			name = finalPropName( origName );
7555		}
7556
7557		// Gets hook for the prefixed version, then unprefixed version
7558		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
7559
7560		// Check if we're setting a value
7561		if ( value !== undefined ) {
7562			type = typeof value;
7563
7564			// Convert "+=" or "-=" to relative numbers (trac-7345)
7565			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
7566				value = adjustCSS( elem, name, ret );
7567
7568				// Fixes bug trac-9237
7569				type = "number";
7570			}
7571
7572			// Make sure that null and NaN values aren't set (trac-7116)
7573			if ( value == null || value !== value ) {
7574				return;
7575			}
7576
7577			// If a number was passed in, add the unit (except for certain CSS properties)
7578			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
7579			// "px" to a few hardcoded values.
7580			if ( type === "number" && !isCustomProp ) {
7581				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
7582			}
7583
7584			// background-* props affect original clone's values
7585			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
7586				style[ name ] = "inherit";
7587			}
7588
7589			// If a hook was provided, use that value, otherwise just set the specified value
7590			if ( !hooks || !( "set" in hooks ) ||
7591				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
7592
7593				if ( isCustomProp ) {
7594					style.setProperty( name, value );
7595				} else {
7596					style[ name ] = value;
7597				}
7598			}
7599
7600		} else {
7601
7602			// If a hook was provided get the non-computed value from there
7603			if ( hooks && "get" in hooks &&
7604				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
7605
7606				return ret;
7607			}
7608
7609			// Otherwise just get the value from the style object
7610			return style[ name ];
7611		}
7612	},
7613
7614	css: function( elem, name, extra, styles ) {
7615		var val, num, hooks,
7616			origName = camelCase( name ),
7617			isCustomProp = rcustomProp.test( name );
7618
7619		// Make sure that we're working with the right name. We don't
7620		// want to modify the value if it is a CSS custom property
7621		// since they are user-defined.
7622		if ( !isCustomProp ) {
7623			name = finalPropName( origName );
7624		}
7625
7626		// Try prefixed name followed by the unprefixed name
7627		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
7628
7629		// If a hook was provided get the computed value from there
7630		if ( hooks && "get" in hooks ) {
7631			val = hooks.get( elem, true, extra );
7632		}
7633
7634		// Otherwise, if a way to get the computed value exists, use that
7635		if ( val === undefined ) {
7636			val = curCSS( elem, name, styles );
7637		}
7638
7639		// Convert "normal" to computed value
7640		if ( val === "normal" && name in cssNormalTransform ) {
7641			val = cssNormalTransform[ name ];
7642		}
7643
7644		// Make numeric if forced or a qualifier was provided and val looks numeric
7645		if ( extra === "" || extra ) {
7646			num = parseFloat( val );
7647			return extra === true || isFinite( num ) ? num || 0 : val;
7648		}
7649
7650		return val;
7651	}
7652} );
7653
7654jQuery.each( [ "height", "width" ], function( _i, dimension ) {
7655	jQuery.cssHooks[ dimension ] = {
7656		get: function( elem, computed, extra ) {
7657			if ( computed ) {
7658
7659				// Certain elements can have dimension info if we invisibly show them
7660				// but it must have a current display style that would benefit
7661				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
7662
7663					// Support: Safari 8+
7664					// Table columns in Safari have non-zero offsetWidth & zero
7665					// getBoundingClientRect().width unless display is changed.
7666					// Support: IE <=11 only
7667					// Running getBoundingClientRect on a disconnected node
7668					// in IE throws an error.
7669					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
7670					swap( elem, cssShow, function() {
7671						return getWidthOrHeight( elem, dimension, extra );
7672					} ) :
7673					getWidthOrHeight( elem, dimension, extra );
7674			}
7675		},
7676
7677		set: function( elem, value, extra ) {
7678			var matches,
7679				styles = getStyles( elem ),
7680
7681				// Only read styles.position if the test has a chance to fail
7682				// to avoid forcing a reflow.
7683				scrollboxSizeBuggy = !support.scrollboxSize() &&
7684					styles.position === "absolute",
7685
7686				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
7687				boxSizingNeeded = scrollboxSizeBuggy || extra,
7688				isBorderBox = boxSizingNeeded &&
7689					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
7690				subtract = extra ?
7691					boxModelAdjustment(
7692						elem,
7693						dimension,
7694						extra,
7695						isBorderBox,
7696						styles
7697					) :
7698					0;
7699
7700			// Account for unreliable border-box dimensions by comparing offset* to computed and
7701			// faking a content-box to get border and padding (gh-3699)
7702			if ( isBorderBox && scrollboxSizeBuggy ) {
7703				subtract -= Math.ceil(
7704					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
7705					parseFloat( styles[ dimension ] ) -
7706					boxModelAdjustment( elem, dimension, "border", false, styles ) -
7707					0.5
7708				);
7709			}
7710
7711			// Convert to pixels if value adjustment is needed
7712			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
7713				( matches[ 3 ] || "px" ) !== "px" ) {
7714
7715				elem.style[ dimension ] = value;
7716				value = jQuery.css( elem, dimension );
7717			}
7718
7719			return setPositiveNumber( elem, value, subtract );
7720		}
7721	};
7722} );
7723
7724jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
7725	function( elem, computed ) {
7726		if ( computed ) {
7727			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
7728				elem.getBoundingClientRect().left -
7729					swap( elem, { marginLeft: 0 }, function() {
7730						return elem.getBoundingClientRect().left;
7731					} )
7732			) + "px";
7733		}
7734	}
7735);
7736
7737// These hooks are used by animate to expand properties
7738jQuery.each( {
7739	margin: "",
7740	padding: "",
7741	border: "Width"
7742}, function( prefix, suffix ) {
7743	jQuery.cssHooks[ prefix + suffix ] = {
7744		expand: function( value ) {
7745			var i = 0,
7746				expanded = {},
7747
7748				// Assumes a single number if not a string
7749				parts = typeof value === "string" ? value.split( " " ) : [ value ];
7750
7751			for ( ; i < 4; i++ ) {
7752				expanded[ prefix + cssExpand[ i ] + suffix ] =
7753					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
7754			}
7755
7756			return expanded;
7757		}
7758	};
7759
7760	if ( prefix !== "margin" ) {
7761		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
7762	}
7763} );
7764
7765jQuery.fn.extend( {
7766	css: function( name, value ) {
7767		return access( this, function( elem, name, value ) {
7768			var styles, len,
7769				map = {},
7770				i = 0;
7771
7772			if ( Array.isArray( name ) ) {
7773				styles = getStyles( elem );
7774				len = name.length;
7775
7776				for ( ; i < len; i++ ) {
7777					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
7778				}
7779
7780				return map;
7781			}
7782
7783			return value !== undefined ?
7784				jQuery.style( elem, name, value ) :
7785				jQuery.css( elem, name );
7786		}, name, value, arguments.length > 1 );
7787	}
7788} );
7789
7790
7791function Tween( elem, options, prop, end, easing ) {
7792	return new Tween.prototype.init( elem, options, prop, end, easing );
7793}
7794jQuery.Tween = Tween;
7795
7796Tween.prototype = {
7797	constructor: Tween,
7798	init: function( elem, options, prop, end, easing, unit ) {
7799		this.elem = elem;
7800		this.prop = prop;
7801		this.easing = easing || jQuery.easing._default;
7802		this.options = options;
7803		this.start = this.now = this.cur();
7804		this.end = end;
7805		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
7806	},
7807	cur: function() {
7808		var hooks = Tween.propHooks[ this.prop ];
7809
7810		return hooks && hooks.get ?
7811			hooks.get( this ) :
7812			Tween.propHooks._default.get( this );
7813	},
7814	run: function( percent ) {
7815		var eased,
7816			hooks = Tween.propHooks[ this.prop ];
7817
7818		if ( this.options.duration ) {
7819			this.pos = eased = jQuery.easing[ this.easing ](
7820				percent, this.options.duration * percent, 0, 1, this.options.duration
7821			);
7822		} else {
7823			this.pos = eased = percent;
7824		}
7825		this.now = ( this.end - this.start ) * eased + this.start;
7826
7827		if ( this.options.step ) {
7828			this.options.step.call( this.elem, this.now, this );
7829		}
7830
7831		if ( hooks && hooks.set ) {
7832			hooks.set( this );
7833		} else {
7834			Tween.propHooks._default.set( this );
7835		}
7836		return this;
7837	}
7838};
7839
7840Tween.prototype.init.prototype = Tween.prototype;
7841
7842Tween.propHooks = {
7843	_default: {
7844		get: function( tween ) {
7845			var result;
7846
7847			// Use a property on the element directly when it is not a DOM element,
7848			// or when there is no matching style property that exists.
7849			if ( tween.elem.nodeType !== 1 ||
7850				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
7851				return tween.elem[ tween.prop ];
7852			}
7853
7854			// Passing an empty string as a 3rd parameter to .css will automatically
7855			// attempt a parseFloat and fallback to a string if the parse fails.
7856			// Simple values such as "10px" are parsed to Float;
7857			// complex values such as "rotate(1rad)" are returned as-is.
7858			result = jQuery.css( tween.elem, tween.prop, "" );
7859
7860			// Empty strings, null, undefined and "auto" are converted to 0.
7861			return !result || result === "auto" ? 0 : result;
7862		},
7863		set: function( tween ) {
7864
7865			// Use step hook for back compat.
7866			// Use cssHook if its there.
7867			// Use .style if available and use plain properties where available.
7868			if ( jQuery.fx.step[ tween.prop ] ) {
7869				jQuery.fx.step[ tween.prop ]( tween );
7870			} else if ( tween.elem.nodeType === 1 && (
7871				jQuery.cssHooks[ tween.prop ] ||
7872					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
7873				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
7874			} else {
7875				tween.elem[ tween.prop ] = tween.now;
7876			}
7877		}
7878	}
7879};
7880
7881// Support: IE <=9 only
7882// Panic based approach to setting things on disconnected nodes
7883Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
7884	set: function( tween ) {
7885		if ( tween.elem.nodeType && tween.elem.parentNode ) {
7886			tween.elem[ tween.prop ] = tween.now;
7887		}
7888	}
7889};
7890
7891jQuery.easing = {
7892	linear: function( p ) {
7893		return p;
7894	},
7895	swing: function( p ) {
7896		return 0.5 - Math.cos( p * Math.PI ) / 2;
7897	},
7898	_default: "swing"
7899};
7900
7901jQuery.fx = Tween.prototype.init;
7902
7903// Back compat <1.8 extension point
7904jQuery.fx.step = {};
7905
7906
7907
7908
7909var
7910	fxNow, inProgress,
7911	rfxtypes = /^(?:toggle|show|hide)$/,
7912	rrun = /queueHooks$/;
7913
7914function schedule() {
7915	if ( inProgress ) {
7916		if ( document.hidden === false && window.requestAnimationFrame ) {
7917			window.requestAnimationFrame( schedule );
7918		} else {
7919			window.setTimeout( schedule, jQuery.fx.interval );
7920		}
7921
7922		jQuery.fx.tick();
7923	}
7924}
7925
7926// Animations created synchronously will run synchronously
7927function createFxNow() {
7928	window.setTimeout( function() {
7929		fxNow = undefined;
7930	} );
7931	return ( fxNow = Date.now() );
7932}
7933
7934// Generate parameters to create a standard animation
7935function genFx( type, includeWidth ) {
7936	var which,
7937		i = 0,
7938		attrs = { height: type };
7939
7940	// If we include width, step value is 1 to do all cssExpand values,
7941	// otherwise step value is 2 to skip over Left and Right
7942	includeWidth = includeWidth ? 1 : 0;
7943	for ( ; i < 4; i += 2 - includeWidth ) {
7944		which = cssExpand[ i ];
7945		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
7946	}
7947
7948	if ( includeWidth ) {
7949		attrs.opacity = attrs.width = type;
7950	}
7951
7952	return attrs;
7953}
7954
7955function createTween( value, prop, animation ) {
7956	var tween,
7957		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
7958		index = 0,
7959		length = collection.length;
7960	for ( ; index < length; index++ ) {
7961		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
7962
7963			// We're done with this property
7964			return tween;
7965		}
7966	}
7967}
7968
7969function defaultPrefilter( elem, props, opts ) {
7970	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
7971		isBox = "width" in props || "height" in props,
7972		anim = this,
7973		orig = {},
7974		style = elem.style,
7975		hidden = elem.nodeType && isHiddenWithinTree( elem ),
7976		dataShow = dataPriv.get( elem, "fxshow" );
7977
7978	// Queue-skipping animations hijack the fx hooks
7979	if ( !opts.queue ) {
7980		hooks = jQuery._queueHooks( elem, "fx" );
7981		if ( hooks.unqueued == null ) {
7982			hooks.unqueued = 0;
7983			oldfire = hooks.empty.fire;
7984			hooks.empty.fire = function() {
7985				if ( !hooks.unqueued ) {
7986					oldfire();
7987				}
7988			};
7989		}
7990		hooks.unqueued++;
7991
7992		anim.always( function() {
7993
7994			// Ensure the complete handler is called before this completes
7995			anim.always( function() {
7996				hooks.unqueued--;
7997				if ( !jQuery.queue( elem, "fx" ).length ) {
7998					hooks.empty.fire();
7999				}
8000			} );
8001		} );
8002	}
8003
8004	// Detect show/hide animations
8005	for ( prop in props ) {
8006		value = props[ prop ];
8007		if ( rfxtypes.test( value ) ) {
8008			delete props[ prop ];
8009			toggle = toggle || value === "toggle";
8010			if ( value === ( hidden ? "hide" : "show" ) ) {
8011
8012				// Pretend to be hidden if this is a "show" and
8013				// there is still data from a stopped show/hide
8014				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
8015					hidden = true;
8016
8017				// Ignore all other no-op show/hide data
8018				} else {
8019					continue;
8020				}
8021			}
8022			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
8023		}
8024	}
8025
8026	// Bail out if this is a no-op like .hide().hide()
8027	propTween = !jQuery.isEmptyObject( props );
8028	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
8029		return;
8030	}
8031
8032	// Restrict "overflow" and "display" styles during box animations
8033	if ( isBox && elem.nodeType === 1 ) {
8034
8035		// Support: IE <=9 - 11, Edge 12 - 15
8036		// Record all 3 overflow attributes because IE does not infer the shorthand
8037		// from identically-valued overflowX and overflowY and Edge just mirrors
8038		// the overflowX value there.
8039		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
8040
8041		// Identify a display type, preferring old show/hide data over the CSS cascade
8042		restoreDisplay = dataShow && dataShow.display;
8043		if ( restoreDisplay == null ) {
8044			restoreDisplay = dataPriv.get( elem, "display" );
8045		}
8046		display = jQuery.css( elem, "display" );
8047		if ( display === "none" ) {
8048			if ( restoreDisplay ) {
8049				display = restoreDisplay;
8050			} else {
8051
8052				// Get nonempty value(s) by temporarily forcing visibility
8053				showHide( [ elem ], true );
8054				restoreDisplay = elem.style.display || restoreDisplay;
8055				display = jQuery.css( elem, "display" );
8056				showHide( [ elem ] );
8057			}
8058		}
8059
8060		// Animate inline elements as inline-block
8061		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
8062			if ( jQuery.css( elem, "float" ) === "none" ) {
8063
8064				// Restore the original display value at the end of pure show/hide animations
8065				if ( !propTween ) {
8066					anim.done( function() {
8067						style.display = restoreDisplay;
8068					} );
8069					if ( restoreDisplay == null ) {
8070						display = style.display;
8071						restoreDisplay = display === "none" ? "" : display;
8072					}
8073				}
8074				style.display = "inline-block";
8075			}
8076		}
8077	}
8078
8079	if ( opts.overflow ) {
8080		style.overflow = "hidden";
8081		anim.always( function() {
8082			style.overflow = opts.overflow[ 0 ];
8083			style.overflowX = opts.overflow[ 1 ];
8084			style.overflowY = opts.overflow[ 2 ];
8085		} );
8086	}
8087
8088	// Implement show/hide animations
8089	propTween = false;
8090	for ( prop in orig ) {
8091
8092		// General show/hide setup for this element animation
8093		if ( !propTween ) {
8094			if ( dataShow ) {
8095				if ( "hidden" in dataShow ) {
8096					hidden = dataShow.hidden;
8097				}
8098			} else {
8099				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
8100			}
8101
8102			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
8103			if ( toggle ) {
8104				dataShow.hidden = !hidden;
8105			}
8106
8107			// Show elements before animating them
8108			if ( hidden ) {
8109				showHide( [ elem ], true );
8110			}
8111
8112			/* eslint-disable no-loop-func */
8113
8114			anim.done( function() {
8115
8116				/* eslint-enable no-loop-func */
8117
8118				// The final step of a "hide" animation is actually hiding the element
8119				if ( !hidden ) {
8120					showHide( [ elem ] );
8121				}
8122				dataPriv.remove( elem, "fxshow" );
8123				for ( prop in orig ) {
8124					jQuery.style( elem, prop, orig[ prop ] );
8125				}
8126			} );
8127		}
8128
8129		// Per-property setup
8130		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
8131		if ( !( prop in dataShow ) ) {
8132			dataShow[ prop ] = propTween.start;
8133			if ( hidden ) {
8134				propTween.end = propTween.start;
8135				propTween.start = 0;
8136			}
8137		}
8138	}
8139}
8140
8141function propFilter( props, specialEasing ) {
8142	var index, name, easing, value, hooks;
8143
8144	// camelCase, specialEasing and expand cssHook pass
8145	for ( index in props ) {
8146		name = camelCase( index );
8147		easing = specialEasing[ name ];
8148		value = props[ index ];
8149		if ( Array.isArray( value ) ) {
8150			easing = value[ 1 ];
8151			value = props[ index ] = value[ 0 ];
8152		}
8153
8154		if ( index !== name ) {
8155			props[ name ] = value;
8156			delete props[ index ];
8157		}
8158
8159		hooks = jQuery.cssHooks[ name ];
8160		if ( hooks && "expand" in hooks ) {
8161			value = hooks.expand( value );
8162			delete props[ name ];
8163
8164			// Not quite $.extend, this won't overwrite existing keys.
8165			// Reusing 'index' because we have the correct "name"
8166			for ( index in value ) {
8167				if ( !( index in props ) ) {
8168					props[ index ] = value[ index ];
8169					specialEasing[ index ] = easing;
8170				}
8171			}
8172		} else {
8173			specialEasing[ name ] = easing;
8174		}
8175	}
8176}
8177
8178function Animation( elem, properties, options ) {
8179	var result,
8180		stopped,
8181		index = 0,
8182		length = Animation.prefilters.length,
8183		deferred = jQuery.Deferred().always( function() {
8184
8185			// Don't match elem in the :animated selector
8186			delete tick.elem;
8187		} ),
8188		tick = function() {
8189			if ( stopped ) {
8190				return false;
8191			}
8192			var currentTime = fxNow || createFxNow(),
8193				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
8194
8195				// Support: Android 2.3 only
8196				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)
8197				temp = remaining / animation.duration || 0,
8198				percent = 1 - temp,
8199				index = 0,
8200				length = animation.tweens.length;
8201
8202			for ( ; index < length; index++ ) {
8203				animation.tweens[ index ].run( percent );
8204			}
8205
8206			deferred.notifyWith( elem, [ animation, percent, remaining ] );
8207
8208			// If there's more to do, yield
8209			if ( percent < 1 && length ) {
8210				return remaining;
8211			}
8212
8213			// If this was an empty animation, synthesize a final progress notification
8214			if ( !length ) {
8215				deferred.notifyWith( elem, [ animation, 1, 0 ] );
8216			}
8217
8218			// Resolve the animation and report its conclusion
8219			deferred.resolveWith( elem, [ animation ] );
8220			return false;
8221		},
8222		animation = deferred.promise( {
8223			elem: elem,
8224			props: jQuery.extend( {}, properties ),
8225			opts: jQuery.extend( true, {
8226				specialEasing: {},
8227				easing: jQuery.easing._default
8228			}, options ),
8229			originalProperties: properties,
8230			originalOptions: options,
8231			startTime: fxNow || createFxNow(),
8232			duration: options.duration,
8233			tweens: [],
8234			createTween: function( prop, end ) {
8235				var tween = jQuery.Tween( elem, animation.opts, prop, end,
8236					animation.opts.specialEasing[ prop ] || animation.opts.easing );
8237				animation.tweens.push( tween );
8238				return tween;
8239			},
8240			stop: function( gotoEnd ) {
8241				var index = 0,
8242
8243					// If we are going to the end, we want to run all the tweens
8244					// otherwise we skip this part
8245					length = gotoEnd ? animation.tweens.length : 0;
8246				if ( stopped ) {
8247					return this;
8248				}
8249				stopped = true;
8250				for ( ; index < length; index++ ) {
8251					animation.tweens[ index ].run( 1 );
8252				}
8253
8254				// Resolve when we played the last frame; otherwise, reject
8255				if ( gotoEnd ) {
8256					deferred.notifyWith( elem, [ animation, 1, 0 ] );
8257					deferred.resolveWith( elem, [ animation, gotoEnd ] );
8258				} else {
8259					deferred.rejectWith( elem, [ animation, gotoEnd ] );
8260				}
8261				return this;
8262			}
8263		} ),
8264		props = animation.props;
8265
8266	propFilter( props, animation.opts.specialEasing );
8267
8268	for ( ; index < length; index++ ) {
8269		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
8270		if ( result ) {
8271			if ( isFunction( result.stop ) ) {
8272				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
8273					result.stop.bind( result );
8274			}
8275			return result;
8276		}
8277	}
8278
8279	jQuery.map( props, createTween, animation );
8280
8281	if ( isFunction( animation.opts.start ) ) {
8282		animation.opts.start.call( elem, animation );
8283	}
8284
8285	// Attach callbacks from options
8286	animation
8287		.progress( animation.opts.progress )
8288		.done( animation.opts.done, animation.opts.complete )
8289		.fail( animation.opts.fail )
8290		.always( animation.opts.always );
8291
8292	jQuery.fx.timer(
8293		jQuery.extend( tick, {
8294			elem: elem,
8295			anim: animation,
8296			queue: animation.opts.queue
8297		} )
8298	);
8299
8300	return animation;
8301}
8302
8303jQuery.Animation = jQuery.extend( Animation, {
8304
8305	tweeners: {
8306		"*": [ function( prop, value ) {
8307			var tween = this.createTween( prop, value );
8308			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
8309			return tween;
8310		} ]
8311	},
8312
8313	tweener: function( props, callback ) {
8314		if ( isFunction( props ) ) {
8315			callback = props;
8316			props = [ "*" ];
8317		} else {
8318			props = props.match( rnothtmlwhite );
8319		}
8320
8321		var prop,
8322			index = 0,
8323			length = props.length;
8324
8325		for ( ; index < length; index++ ) {
8326			prop = props[ index ];
8327			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
8328			Animation.tweeners[ prop ].unshift( callback );
8329		}
8330	},
8331
8332	prefilters: [ defaultPrefilter ],
8333
8334	prefilter: function( callback, prepend ) {
8335		if ( prepend ) {
8336			Animation.prefilters.unshift( callback );
8337		} else {
8338			Animation.prefilters.push( callback );
8339		}
8340	}
8341} );
8342
8343jQuery.speed = function( speed, easing, fn ) {
8344	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
8345		complete: fn || !fn && easing ||
8346			isFunction( speed ) && speed,
8347		duration: speed,
8348		easing: fn && easing || easing && !isFunction( easing ) && easing
8349	};
8350
8351	// Go to the end state if fx are off
8352	if ( jQuery.fx.off ) {
8353		opt.duration = 0;
8354
8355	} else {
8356		if ( typeof opt.duration !== "number" ) {
8357			if ( opt.duration in jQuery.fx.speeds ) {
8358				opt.duration = jQuery.fx.speeds[ opt.duration ];
8359
8360			} else {
8361				opt.duration = jQuery.fx.speeds._default;
8362			}
8363		}
8364	}
8365
8366	// Normalize opt.queue - true/undefined/null -> "fx"
8367	if ( opt.queue == null || opt.queue === true ) {
8368		opt.queue = "fx";
8369	}
8370
8371	// Queueing
8372	opt.old = opt.complete;
8373
8374	opt.complete = function() {
8375		if ( isFunction( opt.old ) ) {
8376			opt.old.call( this );
8377		}
8378
8379		if ( opt.queue ) {
8380			jQuery.dequeue( this, opt.queue );
8381		}
8382	};
8383
8384	return opt;
8385};
8386
8387jQuery.fn.extend( {
8388	fadeTo: function( speed, to, easing, callback ) {
8389
8390		// Show any hidden elements after setting opacity to 0
8391		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
8392
8393			// Animate to the value specified
8394			.end().animate( { opacity: to }, speed, easing, callback );
8395	},
8396	animate: function( prop, speed, easing, callback ) {
8397		var empty = jQuery.isEmptyObject( prop ),
8398			optall = jQuery.speed( speed, easing, callback ),
8399			doAnimation = function() {
8400
8401				// Operate on a copy of prop so per-property easing won't be lost
8402				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
8403
8404				// Empty animations, or finishing resolves immediately
8405				if ( empty || dataPriv.get( this, "finish" ) ) {
8406					anim.stop( true );
8407				}
8408			};
8409
8410		doAnimation.finish = doAnimation;
8411
8412		return empty || optall.queue === false ?
8413			this.each( doAnimation ) :
8414			this.queue( optall.queue, doAnimation );
8415	},
8416	stop: function( type, clearQueue, gotoEnd ) {
8417		var stopQueue = function( hooks ) {
8418			var stop = hooks.stop;
8419			delete hooks.stop;
8420			stop( gotoEnd );
8421		};
8422
8423		if ( typeof type !== "string" ) {
8424			gotoEnd = clearQueue;
8425			clearQueue = type;
8426			type = undefined;
8427		}
8428		if ( clearQueue ) {
8429			this.queue( type || "fx", [] );
8430		}
8431
8432		return this.each( function() {
8433			var dequeue = true,
8434				index = type != null && type + "queueHooks",
8435				timers = jQuery.timers,
8436				data = dataPriv.get( this );
8437
8438			if ( index ) {
8439				if ( data[ index ] && data[ index ].stop ) {
8440					stopQueue( data[ index ] );
8441				}
8442			} else {
8443				for ( index in data ) {
8444					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
8445						stopQueue( data[ index ] );
8446					}
8447				}
8448			}
8449
8450			for ( index = timers.length; index--; ) {
8451				if ( timers[ index ].elem === this &&
8452					( type == null || timers[ index ].queue === type ) ) {
8453
8454					timers[ index ].anim.stop( gotoEnd );
8455					dequeue = false;
8456					timers.splice( index, 1 );
8457				}
8458			}
8459
8460			// Start the next in the queue if the last step wasn't forced.
8461			// Timers currently will call their complete callbacks, which
8462			// will dequeue but only if they were gotoEnd.
8463			if ( dequeue || !gotoEnd ) {
8464				jQuery.dequeue( this, type );
8465			}
8466		} );
8467	},
8468	finish: function( type ) {
8469		if ( type !== false ) {
8470			type = type || "fx";
8471		}
8472		return this.each( function() {
8473			var index,
8474				data = dataPriv.get( this ),
8475				queue = data[ type + "queue" ],
8476				hooks = data[ type + "queueHooks" ],
8477				timers = jQuery.timers,
8478				length = queue ? queue.length : 0;
8479
8480			// Enable finishing flag on private data
8481			data.finish = true;
8482
8483			// Empty the queue first
8484			jQuery.queue( this, type, [] );
8485
8486			if ( hooks && hooks.stop ) {
8487				hooks.stop.call( this, true );
8488			}
8489
8490			// Look for any active animations, and finish them
8491			for ( index = timers.length; index--; ) {
8492				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
8493					timers[ index ].anim.stop( true );
8494					timers.splice( index, 1 );
8495				}
8496			}
8497
8498			// Look for any animations in the old queue and finish them
8499			for ( index = 0; index < length; index++ ) {
8500				if ( queue[ index ] && queue[ index ].finish ) {
8501					queue[ index ].finish.call( this );
8502				}
8503			}
8504
8505			// Turn off finishing flag
8506			delete data.finish;
8507		} );
8508	}
8509} );
8510
8511jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
8512	var cssFn = jQuery.fn[ name ];
8513	jQuery.fn[ name ] = function( speed, easing, callback ) {
8514		return speed == null || typeof speed === "boolean" ?
8515			cssFn.apply( this, arguments ) :
8516			this.animate( genFx( name, true ), speed, easing, callback );
8517	};
8518} );
8519
8520// Generate shortcuts for custom animations
8521jQuery.each( {
8522	slideDown: genFx( "show" ),
8523	slideUp: genFx( "hide" ),
8524	slideToggle: genFx( "toggle" ),
8525	fadeIn: { opacity: "show" },
8526	fadeOut: { opacity: "hide" },
8527	fadeToggle: { opacity: "toggle" }
8528}, function( name, props ) {
8529	jQuery.fn[ name ] = function( speed, easing, callback ) {
8530		return this.animate( props, speed, easing, callback );
8531	};
8532} );
8533
8534jQuery.timers = [];
8535jQuery.fx.tick = function() {
8536	var timer,
8537		i = 0,
8538		timers = jQuery.timers;
8539
8540	fxNow = Date.now();
8541
8542	for ( ; i < timers.length; i++ ) {
8543		timer = timers[ i ];
8544
8545		// Run the timer and safely remove it when done (allowing for external removal)
8546		if ( !timer() && timers[ i ] === timer ) {
8547			timers.splice( i--, 1 );
8548		}
8549	}
8550
8551	if ( !timers.length ) {
8552		jQuery.fx.stop();
8553	}
8554	fxNow = undefined;
8555};
8556
8557jQuery.fx.timer = function( timer ) {
8558	jQuery.timers.push( timer );
8559	jQuery.fx.start();
8560};
8561
8562jQuery.fx.interval = 13;
8563jQuery.fx.start = function() {
8564	if ( inProgress ) {
8565		return;
8566	}
8567
8568	inProgress = true;
8569	schedule();
8570};
8571
8572jQuery.fx.stop = function() {
8573	inProgress = null;
8574};
8575
8576jQuery.fx.speeds = {
8577	slow: 600,
8578	fast: 200,
8579
8580	// Default speed
8581	_default: 400
8582};
8583
8584
8585// Based off of the plugin by Clint Helfers, with permission.
8586jQuery.fn.delay = function( time, type ) {
8587	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
8588	type = type || "fx";
8589
8590	return this.queue( type, function( next, hooks ) {
8591		var timeout = window.setTimeout( next, time );
8592		hooks.stop = function() {
8593			window.clearTimeout( timeout );
8594		};
8595	} );
8596};
8597
8598
8599( function() {
8600	var input = document.createElement( "input" ),
8601		select = document.createElement( "select" ),
8602		opt = select.appendChild( document.createElement( "option" ) );
8603
8604	input.type = "checkbox";
8605
8606	// Support: Android <=4.3 only
8607	// Default value for a checkbox should be "on"
8608	support.checkOn = input.value !== "";
8609
8610	// Support: IE <=11 only
8611	// Must access selectedIndex to make default options select
8612	support.optSelected = opt.selected;
8613
8614	// Support: IE <=11 only
8615	// An input loses its value after becoming a radio
8616	input = document.createElement( "input" );
8617	input.value = "t";
8618	input.type = "radio";
8619	support.radioValue = input.value === "t";
8620} )();
8621
8622
8623var boolHook,
8624	attrHandle = jQuery.expr.attrHandle;
8625
8626jQuery.fn.extend( {
8627	attr: function( name, value ) {
8628		return access( this, jQuery.attr, name, value, arguments.length > 1 );
8629	},
8630
8631	removeAttr: function( name ) {
8632		return this.each( function() {
8633			jQuery.removeAttr( this, name );
8634		} );
8635	}
8636} );
8637
8638jQuery.extend( {
8639	attr: function( elem, name, value ) {
8640		var ret, hooks,
8641			nType = elem.nodeType;
8642
8643		// Don't get/set attributes on text, comment and attribute nodes
8644		if ( nType === 3 || nType === 8 || nType === 2 ) {
8645			return;
8646		}
8647
8648		// Fallback to prop when attributes are not supported
8649		if ( typeof elem.getAttribute === "undefined" ) {
8650			return jQuery.prop( elem, name, value );
8651		}
8652
8653		// Attribute hooks are determined by the lowercase version
8654		// Grab necessary hook if one is defined
8655		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
8656			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
8657				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
8658		}
8659
8660		if ( value !== undefined ) {
8661			if ( value === null ) {
8662				jQuery.removeAttr( elem, name );
8663				return;
8664			}
8665
8666			if ( hooks && "set" in hooks &&
8667				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
8668				return ret;
8669			}
8670
8671			elem.setAttribute( name, value + "" );
8672			return value;
8673		}
8674
8675		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
8676			return ret;
8677		}
8678
8679		ret = jQuery.find.attr( elem, name );
8680
8681		// Non-existent attributes return null, we normalize to undefined
8682		return ret == null ? undefined : ret;
8683	},
8684
8685	attrHooks: {
8686		type: {
8687			set: function( elem, value ) {
8688				if ( !support.radioValue && value === "radio" &&
8689					nodeName( elem, "input" ) ) {
8690					var val = elem.value;
8691					elem.setAttribute( "type", value );
8692					if ( val ) {
8693						elem.value = val;
8694					}
8695					return value;
8696				}
8697			}
8698		}
8699	},
8700
8701	removeAttr: function( elem, value ) {
8702		var name,
8703			i = 0,
8704
8705			// Attribute names can contain non-HTML whitespace characters
8706			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
8707			attrNames = value && value.match( rnothtmlwhite );
8708
8709		if ( attrNames && elem.nodeType === 1 ) {
8710			while ( ( name = attrNames[ i++ ] ) ) {
8711				elem.removeAttribute( name );
8712			}
8713		}
8714	}
8715} );
8716
8717// Hooks for boolean attributes
8718boolHook = {
8719	set: function( elem, value, name ) {
8720		if ( value === false ) {
8721
8722			// Remove boolean attributes when set to false
8723			jQuery.removeAttr( elem, name );
8724		} else {
8725			elem.setAttribute( name, name );
8726		}
8727		return name;
8728	}
8729};
8730
8731jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
8732	var getter = attrHandle[ name ] || jQuery.find.attr;
8733
8734	attrHandle[ name ] = function( elem, name, isXML ) {
8735		var ret, handle,
8736			lowercaseName = name.toLowerCase();
8737
8738		if ( !isXML ) {
8739
8740			// Avoid an infinite loop by temporarily removing this function from the getter
8741			handle = attrHandle[ lowercaseName ];
8742			attrHandle[ lowercaseName ] = ret;
8743			ret = getter( elem, name, isXML ) != null ?
8744				lowercaseName :
8745				null;
8746			attrHandle[ lowercaseName ] = handle;
8747		}
8748		return ret;
8749	};
8750} );
8751
8752
8753
8754
8755var rfocusable = /^(?:input|select|textarea|button)$/i,
8756	rclickable = /^(?:a|area)$/i;
8757
8758jQuery.fn.extend( {
8759	prop: function( name, value ) {
8760		return access( this, jQuery.prop, name, value, arguments.length > 1 );
8761	},
8762
8763	removeProp: function( name ) {
8764		return this.each( function() {
8765			delete this[ jQuery.propFix[ name ] || name ];
8766		} );
8767	}
8768} );
8769
8770jQuery.extend( {
8771	prop: function( elem, name, value ) {
8772		var ret, hooks,
8773			nType = elem.nodeType;
8774
8775		// Don't get/set properties on text, comment and attribute nodes
8776		if ( nType === 3 || nType === 8 || nType === 2 ) {
8777			return;
8778		}
8779
8780		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
8781
8782			// Fix name and attach hooks
8783			name = jQuery.propFix[ name ] || name;
8784			hooks = jQuery.propHooks[ name ];
8785		}
8786
8787		if ( value !== undefined ) {
8788			if ( hooks && "set" in hooks &&
8789				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
8790				return ret;
8791			}
8792
8793			return ( elem[ name ] = value );
8794		}
8795
8796		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
8797			return ret;
8798		}
8799
8800		return elem[ name ];
8801	},
8802
8803	propHooks: {
8804		tabIndex: {
8805			get: function( elem ) {
8806
8807				// Support: IE <=9 - 11 only
8808				// elem.tabIndex doesn't always return the
8809				// correct value when it hasn't been explicitly set
8810				// Use proper attribute retrieval (trac-12072)
8811				var tabindex = jQuery.find.attr( elem, "tabindex" );
8812
8813				if ( tabindex ) {
8814					return parseInt( tabindex, 10 );
8815				}
8816
8817				if (
8818					rfocusable.test( elem.nodeName ) ||
8819					rclickable.test( elem.nodeName ) &&
8820					elem.href
8821				) {
8822					return 0;
8823				}
8824
8825				return -1;
8826			}
8827		}
8828	},
8829
8830	propFix: {
8831		"for": "htmlFor",
8832		"class": "className"
8833	}
8834} );
8835
8836// Support: IE <=11 only
8837// Accessing the selectedIndex property
8838// forces the browser to respect setting selected
8839// on the option
8840// The getter ensures a default option is selected
8841// when in an optgroup
8842// eslint rule "no-unused-expressions" is disabled for this code
8843// since it considers such accessions noop
8844if ( !support.optSelected ) {
8845	jQuery.propHooks.selected = {
8846		get: function( elem ) {
8847
8848			/* eslint no-unused-expressions: "off" */
8849
8850			var parent = elem.parentNode;
8851			if ( parent && parent.parentNode ) {
8852				parent.parentNode.selectedIndex;
8853			}
8854			return null;
8855		},
8856		set: function( elem ) {
8857
8858			/* eslint no-unused-expressions: "off" */
8859
8860			var parent = elem.parentNode;
8861			if ( parent ) {
8862				parent.selectedIndex;
8863
8864				if ( parent.parentNode ) {
8865					parent.parentNode.selectedIndex;
8866				}
8867			}
8868		}
8869	};
8870}
8871
8872jQuery.each( [
8873	"tabIndex",
8874	"readOnly",
8875	"maxLength",
8876	"cellSpacing",
8877	"cellPadding",
8878	"rowSpan",
8879	"colSpan",
8880	"useMap",
8881	"frameBorder",
8882	"contentEditable"
8883], function() {
8884	jQuery.propFix[ this.toLowerCase() ] = this;
8885} );
8886
8887
8888
8889
8890	// Strip and collapse whitespace according to HTML spec
8891	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
8892	function stripAndCollapse( value ) {
8893		var tokens = value.match( rnothtmlwhite ) || [];
8894		return tokens.join( " " );
8895	}
8896
8897
8898function getClass( elem ) {
8899	return elem.getAttribute && elem.getAttribute( "class" ) || "";
8900}
8901
8902function classesToArray( value ) {
8903	if ( Array.isArray( value ) ) {
8904		return value;
8905	}
8906	if ( typeof value === "string" ) {
8907		return value.match( rnothtmlwhite ) || [];
8908	}
8909	return [];
8910}
8911
8912jQuery.fn.extend( {
8913	addClass: function( value ) {
8914		var classNames, cur, curValue, className, i, finalValue;
8915
8916		if ( isFunction( value ) ) {
8917			return this.each( function( j ) {
8918				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
8919			} );
8920		}
8921
8922		classNames = classesToArray( value );
8923
8924		if ( classNames.length ) {
8925			return this.each( function() {
8926				curValue = getClass( this );
8927				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8928
8929				if ( cur ) {
8930					for ( i = 0; i < classNames.length; i++ ) {
8931						className = classNames[ i ];
8932						if ( cur.indexOf( " " + className + " " ) < 0 ) {
8933							cur += className + " ";
8934						}
8935					}
8936
8937					// Only assign if different to avoid unneeded rendering.
8938					finalValue = stripAndCollapse( cur );
8939					if ( curValue !== finalValue ) {
8940						this.setAttribute( "class", finalValue );
8941					}
8942				}
8943			} );
8944		}
8945
8946		return this;
8947	},
8948
8949	removeClass: function( value ) {
8950		var classNames, cur, curValue, className, i, finalValue;
8951
8952		if ( isFunction( value ) ) {
8953			return this.each( function( j ) {
8954				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
8955			} );
8956		}
8957
8958		if ( !arguments.length ) {
8959			return this.attr( "class", "" );
8960		}
8961
8962		classNames = classesToArray( value );
8963
8964		if ( classNames.length ) {
8965			return this.each( function() {
8966				curValue = getClass( this );
8967
8968				// This expression is here for better compressibility (see addClass)
8969				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8970
8971				if ( cur ) {
8972					for ( i = 0; i < classNames.length; i++ ) {
8973						className = classNames[ i ];
8974
8975						// Remove *all* instances
8976						while ( cur.indexOf( " " + className + " " ) > -1 ) {
8977							cur = cur.replace( " " + className + " ", " " );
8978						}
8979					}
8980
8981					// Only assign if different to avoid unneeded rendering.
8982					finalValue = stripAndCollapse( cur );
8983					if ( curValue !== finalValue ) {
8984						this.setAttribute( "class", finalValue );
8985					}
8986				}
8987			} );
8988		}
8989
8990		return this;
8991	},
8992
8993	toggleClass: function( value, stateVal ) {
8994		var classNames, className, i, self,
8995			type = typeof value,
8996			isValidValue = type === "string" || Array.isArray( value );
8997
8998		if ( isFunction( value ) ) {
8999			return this.each( function( i ) {
9000				jQuery( this ).toggleClass(
9001					value.call( this, i, getClass( this ), stateVal ),
9002					stateVal
9003				);
9004			} );
9005		}
9006
9007		if ( typeof stateVal === "boolean" && isValidValue ) {
9008			return stateVal ? this.addClass( value ) : this.removeClass( value );
9009		}
9010
9011		classNames = classesToArray( value );
9012
9013		return this.each( function() {
9014			if ( isValidValue ) {
9015
9016				// Toggle individual class names
9017				self = jQuery( this );
9018
9019				for ( i = 0; i < classNames.length; i++ ) {
9020					className = classNames[ i ];
9021
9022					// Check each className given, space separated list
9023					if ( self.hasClass( className ) ) {
9024						self.removeClass( className );
9025					} else {
9026						self.addClass( className );
9027					}
9028				}
9029
9030			// Toggle whole class name
9031			} else if ( value === undefined || type === "boolean" ) {
9032				className = getClass( this );
9033				if ( className ) {
9034
9035					// Store className if set
9036					dataPriv.set( this, "__className__", className );
9037				}
9038
9039				// If the element has a class name or if we're passed `false`,
9040				// then remove the whole classname (if there was one, the above saved it).
9041				// Otherwise bring back whatever was previously saved (if anything),
9042				// falling back to the empty string if nothing was stored.
9043				if ( this.setAttribute ) {
9044					this.setAttribute( "class",
9045						className || value === false ?
9046							"" :
9047							dataPriv.get( this, "__className__" ) || ""
9048					);
9049				}
9050			}
9051		} );
9052	},
9053
9054	hasClass: function( selector ) {
9055		var className, elem,
9056			i = 0;
9057
9058		className = " " + selector + " ";
9059		while ( ( elem = this[ i++ ] ) ) {
9060			if ( elem.nodeType === 1 &&
9061				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
9062				return true;
9063			}
9064		}
9065
9066		return false;
9067	}
9068} );
9069
9070
9071
9072
9073var rreturn = /\r/g;
9074
9075jQuery.fn.extend( {
9076	val: function( value ) {
9077		var hooks, ret, valueIsFunction,
9078			elem = this[ 0 ];
9079
9080		if ( !arguments.length ) {
9081			if ( elem ) {
9082				hooks = jQuery.valHooks[ elem.type ] ||
9083					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
9084
9085				if ( hooks &&
9086					"get" in hooks &&
9087					( ret = hooks.get( elem, "value" ) ) !== undefined
9088				) {
9089					return ret;
9090				}
9091
9092				ret = elem.value;
9093
9094				// Handle most common string cases
9095				if ( typeof ret === "string" ) {
9096					return ret.replace( rreturn, "" );
9097				}
9098
9099				// Handle cases where value is null/undef or number
9100				return ret == null ? "" : ret;
9101			}
9102
9103			return;
9104		}
9105
9106		valueIsFunction = isFunction( value );
9107
9108		return this.each( function( i ) {
9109			var val;
9110
9111			if ( this.nodeType !== 1 ) {
9112				return;
9113			}
9114
9115			if ( valueIsFunction ) {
9116				val = value.call( this, i, jQuery( this ).val() );
9117			} else {
9118				val = value;
9119			}
9120
9121			// Treat null/undefined as ""; convert numbers to string
9122			if ( val == null ) {
9123				val = "";
9124
9125			} else if ( typeof val === "number" ) {
9126				val += "";
9127
9128			} else if ( Array.isArray( val ) ) {
9129				val = jQuery.map( val, function( value ) {
9130					return value == null ? "" : value + "";
9131				} );
9132			}
9133
9134			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
9135
9136			// If set returns undefined, fall back to normal setting
9137			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
9138				this.value = val;
9139			}
9140		} );
9141	}
9142} );
9143
9144jQuery.extend( {
9145	valHooks: {
9146		option: {
9147			get: function( elem ) {
9148
9149				var val = jQuery.find.attr( elem, "value" );
9150				return val != null ?
9151					val :
9152
9153					// Support: IE <=10 - 11 only
9154					// option.text throws exceptions (trac-14686, trac-14858)
9155					// Strip and collapse whitespace
9156					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
9157					stripAndCollapse( jQuery.text( elem ) );
9158			}
9159		},
9160		select: {
9161			get: function( elem ) {
9162				var value, option, i,
9163					options = elem.options,
9164					index = elem.selectedIndex,
9165					one = elem.type === "select-one",
9166					values = one ? null : [],
9167					max = one ? index + 1 : options.length;
9168
9169				if ( index < 0 ) {
9170					i = max;
9171
9172				} else {
9173					i = one ? index : 0;
9174				}
9175
9176				// Loop through all the selected options
9177				for ( ; i < max; i++ ) {
9178					option = options[ i ];
9179
9180					// Support: IE <=9 only
9181					// IE8-9 doesn't update selected after form reset (trac-2551)
9182					if ( ( option.selected || i === index ) &&
9183
9184							// Don't return options that are disabled or in a disabled optgroup
9185							!option.disabled &&
9186							( !option.parentNode.disabled ||
9187								!nodeName( option.parentNode, "optgroup" ) ) ) {
9188
9189						// Get the specific value for the option
9190						value = jQuery( option ).val();
9191
9192						// We don't need an array for one selects
9193						if ( one ) {
9194							return value;
9195						}
9196
9197						// Multi-Selects return an array
9198						values.push( value );
9199					}
9200				}
9201
9202				return values;
9203			},
9204
9205			set: function( elem, value ) {
9206				var optionSet, option,
9207					options = elem.options,
9208					values = jQuery.makeArray( value ),
9209					i = options.length;
9210
9211				while ( i-- ) {
9212					option = options[ i ];
9213
9214					/* eslint-disable no-cond-assign */
9215
9216					if ( option.selected =
9217						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
9218					) {
9219						optionSet = true;
9220					}
9221
9222					/* eslint-enable no-cond-assign */
9223				}
9224
9225				// Force browsers to behave consistently when non-matching value is set
9226				if ( !optionSet ) {
9227					elem.selectedIndex = -1;
9228				}
9229				return values;
9230			}
9231		}
9232	}
9233} );
9234
9235// Radios and checkboxes getter/setter
9236jQuery.each( [ "radio", "checkbox" ], function() {
9237	jQuery.valHooks[ this ] = {
9238		set: function( elem, value ) {
9239			if ( Array.isArray( value ) ) {
9240				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
9241			}
9242		}
9243	};
9244	if ( !support.checkOn ) {
9245		jQuery.valHooks[ this ].get = function( elem ) {
9246			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
9247		};
9248	}
9249} );
9250
9251
9252
9253
9254// Return jQuery for attributes-only inclusion
9255var location = window.location;
9256
9257var nonce = { guid: Date.now() };
9258
9259var rquery = ( /\?/ );
9260
9261
9262
9263// Cross-browser xml parsing
9264jQuery.parseXML = function( data ) {
9265	var xml, parserErrorElem;
9266	if ( !data || typeof data !== "string" ) {
9267		return null;
9268	}
9269
9270	// Support: IE 9 - 11 only
9271	// IE throws on parseFromString with invalid input.
9272	try {
9273		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
9274	} catch ( e ) {}
9275
9276	parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
9277	if ( !xml || parserErrorElem ) {
9278		jQuery.error( "Invalid XML: " + (
9279			parserErrorElem ?
9280				jQuery.map( parserErrorElem.childNodes, function( el ) {
9281					return el.textContent;
9282				} ).join( "\n" ) :
9283				data
9284		) );
9285	}
9286	return xml;
9287};
9288
9289
9290var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
9291	stopPropagationCallback = function( e ) {
9292		e.stopPropagation();
9293	};
9294
9295jQuery.extend( jQuery.event, {
9296
9297	trigger: function( event, data, elem, onlyHandlers ) {
9298
9299		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
9300			eventPath = [ elem || document ],
9301			type = hasOwn.call( event, "type" ) ? event.type : event,
9302			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
9303
9304		cur = lastElement = tmp = elem = elem || document;
9305
9306		// Don't do events on text and comment nodes
9307		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
9308			return;
9309		}
9310
9311		// focus/blur morphs to focusin/out; ensure we're not firing them right now
9312		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
9313			return;
9314		}
9315
9316		if ( type.indexOf( "." ) > -1 ) {
9317
9318			// Namespaced trigger; create a regexp to match event type in handle()
9319			namespaces = type.split( "." );
9320			type = namespaces.shift();
9321			namespaces.sort();
9322		}
9323		ontype = type.indexOf( ":" ) < 0 && "on" + type;
9324
9325		// Caller can pass in a jQuery.Event object, Object, or just an event type string
9326		event = event[ jQuery.expando ] ?
9327			event :
9328			new jQuery.Event( type, typeof event === "object" && event );
9329
9330		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
9331		event.isTrigger = onlyHandlers ? 2 : 3;
9332		event.namespace = namespaces.join( "." );
9333		event.rnamespace = event.namespace ?
9334			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
9335			null;
9336
9337		// Clean up the event in case it is being reused
9338		event.result = undefined;
9339		if ( !event.target ) {
9340			event.target = elem;
9341		}
9342
9343		// Clone any incoming data and prepend the event, creating the handler arg list
9344		data = data == null ?
9345			[ event ] :
9346			jQuery.makeArray( data, [ event ] );
9347
9348		// Allow special events to draw outside the lines
9349		special = jQuery.event.special[ type ] || {};
9350		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
9351			return;
9352		}
9353
9354		// Determine event propagation path in advance, per W3C events spec (trac-9951)
9355		// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
9356		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
9357
9358			bubbleType = special.delegateType || type;
9359			if ( !rfocusMorph.test( bubbleType + type ) ) {
9360				cur = cur.parentNode;
9361			}
9362			for ( ; cur; cur = cur.parentNode ) {
9363				eventPath.push( cur );
9364				tmp = cur;
9365			}
9366
9367			// Only add window if we got to document (e.g., not plain obj or detached DOM)
9368			if ( tmp === ( elem.ownerDocument || document ) ) {
9369				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
9370			}
9371		}
9372
9373		// Fire handlers on the event path
9374		i = 0;
9375		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
9376			lastElement = cur;
9377			event.type = i > 1 ?
9378				bubbleType :
9379				special.bindType || type;
9380
9381			// jQuery handler
9382			handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
9383				dataPriv.get( cur, "handle" );
9384			if ( handle ) {
9385				handle.apply( cur, data );
9386			}
9387
9388			// Native handler
9389			handle = ontype && cur[ ontype ];
9390			if ( handle && handle.apply && acceptData( cur ) ) {
9391				event.result = handle.apply( cur, data );
9392				if ( event.result === false ) {
9393					event.preventDefault();
9394				}
9395			}
9396		}
9397		event.type = type;
9398
9399		// If nobody prevented the default action, do it now
9400		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
9401
9402			if ( ( !special._default ||
9403				special._default.apply( eventPath.pop(), data ) === false ) &&
9404				acceptData( elem ) ) {
9405
9406				// Call a native DOM method on the target with the same name as the event.
9407				// Don't do default actions on window, that's where global variables be (trac-6170)
9408				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
9409
9410					// Don't re-trigger an onFOO event when we call its FOO() method
9411					tmp = elem[ ontype ];
9412
9413					if ( tmp ) {
9414						elem[ ontype ] = null;
9415					}
9416
9417					// Prevent re-triggering of the same event, since we already bubbled it above
9418					jQuery.event.triggered = type;
9419
9420					if ( event.isPropagationStopped() ) {
9421						lastElement.addEventListener( type, stopPropagationCallback );
9422					}
9423
9424					elem[ type ]();
9425
9426					if ( event.isPropagationStopped() ) {
9427						lastElement.removeEventListener( type, stopPropagationCallback );
9428					}
9429
9430					jQuery.event.triggered = undefined;
9431
9432					if ( tmp ) {
9433						elem[ ontype ] = tmp;
9434					}
9435				}
9436			}
9437		}
9438
9439		return event.result;
9440	},
9441
9442	// Piggyback on a donor event to simulate a different one
9443	// Used only for `focus(in | out)` events
9444	simulate: function( type, elem, event ) {
9445		var e = jQuery.extend(
9446			new jQuery.Event(),
9447			event,
9448			{
9449				type: type,
9450				isSimulated: true
9451			}
9452		);
9453
9454		jQuery.event.trigger( e, null, elem );
9455	}
9456
9457} );
9458
9459jQuery.fn.extend( {
9460
9461	trigger: function( type, data ) {
9462		return this.each( function() {
9463			jQuery.event.trigger( type, data, this );
9464		} );
9465	},
9466	triggerHandler: function( type, data ) {
9467		var elem = this[ 0 ];
9468		if ( elem ) {
9469			return jQuery.event.trigger( type, data, elem, true );
9470		}
9471	}
9472} );
9473
9474
9475var
9476	rbracket = /\[\]$/,
9477	rCRLF = /\r?\n/g,
9478	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
9479	rsubmittable = /^(?:input|select|textarea|keygen)/i;
9480
9481function buildParams( prefix, obj, traditional, add ) {
9482	var name;
9483
9484	if ( Array.isArray( obj ) ) {
9485
9486		// Serialize array item.
9487		jQuery.each( obj, function( i, v ) {
9488			if ( traditional || rbracket.test( prefix ) ) {
9489
9490				// Treat each array item as a scalar.
9491				add( prefix, v );
9492
9493			} else {
9494
9495				// Item is non-scalar (array or object), encode its numeric index.
9496				buildParams(
9497					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
9498					v,
9499					traditional,
9500					add
9501				);
9502			}
9503		} );
9504
9505	} else if ( !traditional && toType( obj ) === "object" ) {
9506
9507		// Serialize object item.
9508		for ( name in obj ) {
9509			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
9510		}
9511
9512	} else {
9513
9514		// Serialize scalar item.
9515		add( prefix, obj );
9516	}
9517}
9518
9519// Serialize an array of form elements or a set of
9520// key/values into a query string
9521jQuery.param = function( a, traditional ) {
9522	var prefix,
9523		s = [],
9524		add = function( key, valueOrFunction ) {
9525
9526			// If value is a function, invoke it and use its return value
9527			var value = isFunction( valueOrFunction ) ?
9528				valueOrFunction() :
9529				valueOrFunction;
9530
9531			s[ s.length ] = encodeURIComponent( key ) + "=" +
9532				encodeURIComponent( value == null ? "" : value );
9533		};
9534
9535	if ( a == null ) {
9536		return "";
9537	}
9538
9539	// If an array was passed in, assume that it is an array of form elements.
9540	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
9541
9542		// Serialize the form elements
9543		jQuery.each( a, function() {
9544			add( this.name, this.value );
9545		} );
9546
9547	} else {
9548
9549		// If traditional, encode the "old" way (the way 1.3.2 or older
9550		// did it), otherwise encode params recursively.
9551		for ( prefix in a ) {
9552			buildParams( prefix, a[ prefix ], traditional, add );
9553		}
9554	}
9555
9556	// Return the resulting serialization
9557	return s.join( "&" );
9558};
9559
9560jQuery.fn.extend( {
9561	serialize: function() {
9562		return jQuery.param( this.serializeArray() );
9563	},
9564	serializeArray: function() {
9565		return this.map( function() {
9566
9567			// Can add propHook for "elements" to filter or add form elements
9568			var elements = jQuery.prop( this, "elements" );
9569			return elements ? jQuery.makeArray( elements ) : this;
9570		} ).filter( function() {
9571			var type = this.type;
9572
9573			// Use .is( ":disabled" ) so that fieldset[disabled] works
9574			return this.name && !jQuery( this ).is( ":disabled" ) &&
9575				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
9576				( this.checked || !rcheckableType.test( type ) );
9577		} ).map( function( _i, elem ) {
9578			var val = jQuery( this ).val();
9579
9580			if ( val == null ) {
9581				return null;
9582			}
9583
9584			if ( Array.isArray( val ) ) {
9585				return jQuery.map( val, function( val ) {
9586					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
9587				} );
9588			}
9589
9590			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
9591		} ).get();
9592	}
9593} );
9594
9595
9596var
9597	r20 = /%20/g,
9598	rhash = /#.*$/,
9599	rantiCache = /([?&])_=[^&]*/,
9600	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
9601
9602	// trac-7653, trac-8125, trac-8152: local protocol detection
9603	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
9604	rnoContent = /^(?:GET|HEAD)$/,
9605	rprotocol = /^\/\//,
9606
9607	/* Prefilters
9608	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
9609	 * 2) These are called:
9610	 *    - BEFORE asking for a transport
9611	 *    - AFTER param serialization (s.data is a string if s.processData is true)
9612	 * 3) key is the dataType
9613	 * 4) the catchall symbol "*" can be used
9614	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
9615	 */
9616	prefilters = {},
9617
9618	/* Transports bindings
9619	 * 1) key is the dataType
9620	 * 2) the catchall symbol "*" can be used
9621	 * 3) selection will start with transport dataType and THEN go to "*" if needed
9622	 */
9623	transports = {},
9624
9625	// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
9626	allTypes = "*/".concat( "*" ),
9627
9628	// Anchor tag for parsing the document origin
9629	originAnchor = document.createElement( "a" );
9630
9631originAnchor.href = location.href;
9632
9633// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
9634function addToPrefiltersOrTransports( structure ) {
9635
9636	// dataTypeExpression is optional and defaults to "*"
9637	return function( dataTypeExpression, func ) {
9638
9639		if ( typeof dataTypeExpression !== "string" ) {
9640			func = dataTypeExpression;
9641			dataTypeExpression = "*";
9642		}
9643
9644		var dataType,
9645			i = 0,
9646			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
9647
9648		if ( isFunction( func ) ) {
9649
9650			// For each dataType in the dataTypeExpression
9651			while ( ( dataType = dataTypes[ i++ ] ) ) {
9652
9653				// Prepend if requested
9654				if ( dataType[ 0 ] === "+" ) {
9655					dataType = dataType.slice( 1 ) || "*";
9656					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
9657
9658				// Otherwise append
9659				} else {
9660					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
9661				}
9662			}
9663		}
9664	};
9665}
9666
9667// Base inspection function for prefilters and transports
9668function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
9669
9670	var inspected = {},
9671		seekingTransport = ( structure === transports );
9672
9673	function inspect( dataType ) {
9674		var selected;
9675		inspected[ dataType ] = true;
9676		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
9677			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
9678			if ( typeof dataTypeOrTransport === "string" &&
9679				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
9680
9681				options.dataTypes.unshift( dataTypeOrTransport );
9682				inspect( dataTypeOrTransport );
9683				return false;
9684			} else if ( seekingTransport ) {
9685				return !( selected = dataTypeOrTransport );
9686			}
9687		} );
9688		return selected;
9689	}
9690
9691	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
9692}
9693
9694// A special extend for ajax options
9695// that takes "flat" options (not to be deep extended)
9696// Fixes trac-9887
9697function ajaxExtend( target, src ) {
9698	var key, deep,
9699		flatOptions = jQuery.ajaxSettings.flatOptions || {};
9700
9701	for ( key in src ) {
9702		if ( src[ key ] !== undefined ) {
9703			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
9704		}
9705	}
9706	if ( deep ) {
9707		jQuery.extend( true, target, deep );
9708	}
9709
9710	return target;
9711}
9712
9713/* Handles responses to an ajax request:
9714 * - finds the right dataType (mediates between content-type and expected dataType)
9715 * - returns the corresponding response
9716 */
9717function ajaxHandleResponses( s, jqXHR, responses ) {
9718
9719	var ct, type, finalDataType, firstDataType,
9720		contents = s.contents,
9721		dataTypes = s.dataTypes;
9722
9723	// Remove auto dataType and get content-type in the process
9724	while ( dataTypes[ 0 ] === "*" ) {
9725		dataTypes.shift();
9726		if ( ct === undefined ) {
9727			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
9728		}
9729	}
9730
9731	// Check if we're dealing with a known content-type
9732	if ( ct ) {
9733		for ( type in contents ) {
9734			if ( contents[ type ] && contents[ type ].test( ct ) ) {
9735				dataTypes.unshift( type );
9736				break;
9737			}
9738		}
9739	}
9740
9741	// Check to see if we have a response for the expected dataType
9742	if ( dataTypes[ 0 ] in responses ) {
9743		finalDataType = dataTypes[ 0 ];
9744	} else {
9745
9746		// Try convertible dataTypes
9747		for ( type in responses ) {
9748			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
9749				finalDataType = type;
9750				break;
9751			}
9752			if ( !firstDataType ) {
9753				firstDataType = type;
9754			}
9755		}
9756
9757		// Or just use first one
9758		finalDataType = finalDataType || firstDataType;
9759	}
9760
9761	// If we found a dataType
9762	// We add the dataType to the list if needed
9763	// and return the corresponding response
9764	if ( finalDataType ) {
9765		if ( finalDataType !== dataTypes[ 0 ] ) {
9766			dataTypes.unshift( finalDataType );
9767		}
9768		return responses[ finalDataType ];
9769	}
9770}
9771
9772/* Chain conversions given the request and the original response
9773 * Also sets the responseXXX fields on the jqXHR instance
9774 */
9775function ajaxConvert( s, response, jqXHR, isSuccess ) {
9776	var conv2, current, conv, tmp, prev,
9777		converters = {},
9778
9779		// Work with a copy of dataTypes in case we need to modify it for conversion
9780		dataTypes = s.dataTypes.slice();
9781
9782	// Create converters map with lowercased keys
9783	if ( dataTypes[ 1 ] ) {
9784		for ( conv in s.converters ) {
9785			converters[ conv.toLowerCase() ] = s.converters[ conv ];
9786		}
9787	}
9788
9789	current = dataTypes.shift();
9790
9791	// Convert to each sequential dataType
9792	while ( current ) {
9793
9794		if ( s.responseFields[ current ] ) {
9795			jqXHR[ s.responseFields[ current ] ] = response;
9796		}
9797
9798		// Apply the dataFilter if provided
9799		if ( !prev && isSuccess && s.dataFilter ) {
9800			response = s.dataFilter( response, s.dataType );
9801		}
9802
9803		prev = current;
9804		current = dataTypes.shift();
9805
9806		if ( current ) {
9807
9808			// There's only work to do if current dataType is non-auto
9809			if ( current === "*" ) {
9810
9811				current = prev;
9812
9813			// Convert response if prev dataType is non-auto and differs from current
9814			} else if ( prev !== "*" && prev !== current ) {
9815
9816				// Seek a direct converter
9817				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
9818
9819				// If none found, seek a pair
9820				if ( !conv ) {
9821					for ( conv2 in converters ) {
9822
9823						// If conv2 outputs current
9824						tmp = conv2.split( " " );
9825						if ( tmp[ 1 ] === current ) {
9826
9827							// If prev can be converted to accepted input
9828							conv = converters[ prev + " " + tmp[ 0 ] ] ||
9829								converters[ "* " + tmp[ 0 ] ];
9830							if ( conv ) {
9831
9832								// Condense equivalence converters
9833								if ( conv === true ) {
9834									conv = converters[ conv2 ];
9835
9836								// Otherwise, insert the intermediate dataType
9837								} else if ( converters[ conv2 ] !== true ) {
9838									current = tmp[ 0 ];
9839									dataTypes.unshift( tmp[ 1 ] );
9840								}
9841								break;
9842							}
9843						}
9844					}
9845				}
9846
9847				// Apply converter (if not an equivalence)
9848				if ( conv !== true ) {
9849
9850					// Unless errors are allowed to bubble, catch and return them
9851					if ( conv && s.throws ) {
9852						response = conv( response );
9853					} else {
9854						try {
9855							response = conv( response );
9856						} catch ( e ) {
9857							return {
9858								state: "parsererror",
9859								error: conv ? e : "No conversion from " + prev + " to " + current
9860							};
9861						}
9862					}
9863				}
9864			}
9865		}
9866	}
9867
9868	return { state: "success", data: response };
9869}
9870
9871jQuery.extend( {
9872
9873	// Counter for holding the number of active queries
9874	active: 0,
9875
9876	// Last-Modified header cache for next request
9877	lastModified: {},
9878	etag: {},
9879
9880	ajaxSettings: {
9881		url: location.href,
9882		type: "GET",
9883		isLocal: rlocalProtocol.test( location.protocol ),
9884		global: true,
9885		processData: true,
9886		async: true,
9887		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
9888
9889		/*
9890		timeout: 0,
9891		data: null,
9892		dataType: null,
9893		username: null,
9894		password: null,
9895		cache: null,
9896		throws: false,
9897		traditional: false,
9898		headers: {},
9899		*/
9900
9901		accepts: {
9902			"*": allTypes,
9903			text: "text/plain",
9904			html: "text/html",
9905			xml: "application/xml, text/xml",
9906			json: "application/json, text/javascript"
9907		},
9908
9909		contents: {
9910			xml: /\bxml\b/,
9911			html: /\bhtml/,
9912			json: /\bjson\b/
9913		},
9914
9915		responseFields: {
9916			xml: "responseXML",
9917			text: "responseText",
9918			json: "responseJSON"
9919		},
9920
9921		// Data converters
9922		// Keys separate source (or catchall "*") and destination types with a single space
9923		converters: {
9924
9925			// Convert anything to text
9926			"* text": String,
9927
9928			// Text to html (true = no transformation)
9929			"text html": true,
9930
9931			// Evaluate text as a json expression
9932			"text json": JSON.parse,
9933
9934			// Parse text as xml
9935			"text xml": jQuery.parseXML
9936		},
9937
9938		// For options that shouldn't be deep extended:
9939		// you can add your own custom options here if
9940		// and when you create one that shouldn't be
9941		// deep extended (see ajaxExtend)
9942		flatOptions: {
9943			url: true,
9944			context: true
9945		}
9946	},
9947
9948	// Creates a full fledged settings object into target
9949	// with both ajaxSettings and settings fields.
9950	// If target is omitted, writes into ajaxSettings.
9951	ajaxSetup: function( target, settings ) {
9952		return settings ?
9953
9954			// Building a settings object
9955			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
9956
9957			// Extending ajaxSettings
9958			ajaxExtend( jQuery.ajaxSettings, target );
9959	},
9960
9961	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
9962	ajaxTransport: addToPrefiltersOrTransports( transports ),
9963
9964	// Main method
9965	ajax: function( url, options ) {
9966
9967		// If url is an object, simulate pre-1.5 signature
9968		if ( typeof url === "object" ) {
9969			options = url;
9970			url = undefined;
9971		}
9972
9973		// Force options to be an object
9974		options = options || {};
9975
9976		var transport,
9977
9978			// URL without anti-cache param
9979			cacheURL,
9980
9981			// Response headers
9982			responseHeadersString,
9983			responseHeaders,
9984
9985			// timeout handle
9986			timeoutTimer,
9987
9988			// Url cleanup var
9989			urlAnchor,
9990
9991			// Request state (becomes false upon send and true upon completion)
9992			completed,
9993
9994			// To know if global events are to be dispatched
9995			fireGlobals,
9996
9997			// Loop variable
9998			i,
9999
10000			// uncached part of the url
10001			uncached,
10002
10003			// Create the final options object
10004			s = jQuery.ajaxSetup( {}, options ),
10005
10006			// Callbacks context
10007			callbackContext = s.context || s,
10008
10009			// Context for global events is callbackContext if it is a DOM node or jQuery collection
10010			globalEventContext = s.context &&
10011				( callbackContext.nodeType || callbackContext.jquery ) ?
10012				jQuery( callbackContext ) :
10013				jQuery.event,
10014
10015			// Deferreds
10016			deferred = jQuery.Deferred(),
10017			completeDeferred = jQuery.Callbacks( "once memory" ),
10018
10019			// Status-dependent callbacks
10020			statusCode = s.statusCode || {},
10021
10022			// Headers (they are sent all at once)
10023			requestHeaders = {},
10024			requestHeadersNames = {},
10025
10026			// Default abort message
10027			strAbort = "canceled",
10028
10029			// Fake xhr
10030			jqXHR = {
10031				readyState: 0,
10032
10033				// Builds headers hashtable if needed
10034				getResponseHeader: function( key ) {
10035					var match;
10036					if ( completed ) {
10037						if ( !responseHeaders ) {
10038							responseHeaders = {};
10039							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
10040								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
10041									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
10042										.concat( match[ 2 ] );
10043							}
10044						}
10045						match = responseHeaders[ key.toLowerCase() + " " ];
10046					}
10047					return match == null ? null : match.join( ", " );
10048				},
10049
10050				// Raw string
10051				getAllResponseHeaders: function() {
10052					return completed ? responseHeadersString : null;
10053				},
10054
10055				// Caches the header
10056				setRequestHeader: function( name, value ) {
10057					if ( completed == null ) {
10058						name = requestHeadersNames[ name.toLowerCase() ] =
10059							requestHeadersNames[ name.toLowerCase() ] || name;
10060						requestHeaders[ name ] = value;
10061					}
10062					return this;
10063				},
10064
10065				// Overrides response content-type header
10066				overrideMimeType: function( type ) {
10067					if ( completed == null ) {
10068						s.mimeType = type;
10069					}
10070					return this;
10071				},
10072
10073				// Status-dependent callbacks
10074				statusCode: function( map ) {
10075					var code;
10076					if ( map ) {
10077						if ( completed ) {
10078
10079							// Execute the appropriate callbacks
10080							jqXHR.always( map[ jqXHR.status ] );
10081						} else {
10082
10083							// Lazy-add the new callbacks in a way that preserves old ones
10084							for ( code in map ) {
10085								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
10086							}
10087						}
10088					}
10089					return this;
10090				},
10091
10092				// Cancel the request
10093				abort: function( statusText ) {
10094					var finalText = statusText || strAbort;
10095					if ( transport ) {
10096						transport.abort( finalText );
10097					}
10098					done( 0, finalText );
10099					return this;
10100				}
10101			};
10102
10103		// Attach deferreds
10104		deferred.promise( jqXHR );
10105
10106		// Add protocol if not provided (prefilters might expect it)
10107		// Handle falsy url in the settings object (trac-10093: consistency with old signature)
10108		// We also use the url parameter if available
10109		s.url = ( ( url || s.url || location.href ) + "" )
10110			.replace( rprotocol, location.protocol + "//" );
10111
10112		// Alias method option to type as per ticket trac-12004
10113		s.type = options.method || options.type || s.method || s.type;
10114
10115		// Extract dataTypes list
10116		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
10117
10118		// A cross-domain request is in order when the origin doesn't match the current origin.
10119		if ( s.crossDomain == null ) {
10120			urlAnchor = document.createElement( "a" );
10121
10122			// Support: IE <=8 - 11, Edge 12 - 15
10123			// IE throws exception on accessing the href property if url is malformed,
10124			// e.g. http://example.com:80x/
10125			try {
10126				urlAnchor.href = s.url;
10127
10128				// Support: IE <=8 - 11 only
10129				// Anchor's host property isn't correctly set when s.url is relative
10130				urlAnchor.href = urlAnchor.href;
10131				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
10132					urlAnchor.protocol + "//" + urlAnchor.host;
10133			} catch ( e ) {
10134
10135				// If there is an error parsing the URL, assume it is crossDomain,
10136				// it can be rejected by the transport if it is invalid
10137				s.crossDomain = true;
10138			}
10139		}
10140
10141		// Convert data if not already a string
10142		if ( s.data && s.processData && typeof s.data !== "string" ) {
10143			s.data = jQuery.param( s.data, s.traditional );
10144		}
10145
10146		// Apply prefilters
10147		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
10148
10149		// If request was aborted inside a prefilter, stop there
10150		if ( completed ) {
10151			return jqXHR;
10152		}
10153
10154		// We can fire global events as of now if asked to
10155		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
10156		fireGlobals = jQuery.event && s.global;
10157
10158		// Watch for a new set of requests
10159		if ( fireGlobals && jQuery.active++ === 0 ) {
10160			jQuery.event.trigger( "ajaxStart" );
10161		}
10162
10163		// Uppercase the type
10164		s.type = s.type.toUpperCase();
10165
10166		// Determine if request has content
10167		s.hasContent = !rnoContent.test( s.type );
10168
10169		// Save the URL in case we're toying with the If-Modified-Since
10170		// and/or If-None-Match header later on
10171		// Remove hash to simplify url manipulation
10172		cacheURL = s.url.replace( rhash, "" );
10173
10174		// More options handling for requests with no content
10175		if ( !s.hasContent ) {
10176
10177			// Remember the hash so we can put it back
10178			uncached = s.url.slice( cacheURL.length );
10179
10180			// If data is available and should be processed, append data to url
10181			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
10182				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
10183
10184				// trac-9682: remove data so that it's not used in an eventual retry
10185				delete s.data;
10186			}
10187
10188			// Add or update anti-cache param if needed
10189			if ( s.cache === false ) {
10190				cacheURL = cacheURL.replace( rantiCache, "$1" );
10191				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
10192					uncached;
10193			}
10194
10195			// Put hash and anti-cache on the URL that will be requested (gh-1732)
10196			s.url = cacheURL + uncached;
10197
10198		// Change '%20' to '+' if this is encoded form body content (gh-2658)
10199		} else if ( s.data && s.processData &&
10200			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
10201			s.data = s.data.replace( r20, "+" );
10202		}
10203
10204		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
10205		if ( s.ifModified ) {
10206			if ( jQuery.lastModified[ cacheURL ] ) {
10207				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
10208			}
10209			if ( jQuery.etag[ cacheURL ] ) {
10210				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
10211			}
10212		}
10213
10214		// Set the correct header, if data is being sent
10215		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
10216			jqXHR.setRequestHeader( "Content-Type", s.contentType );
10217		}
10218
10219		// Set the Accepts header for the server, depending on the dataType
10220		jqXHR.setRequestHeader(
10221			"Accept",
10222			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
10223				s.accepts[ s.dataTypes[ 0 ] ] +
10224					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
10225				s.accepts[ "*" ]
10226		);
10227
10228		// Check for headers option
10229		for ( i in s.headers ) {
10230			jqXHR.setRequestHeader( i, s.headers[ i ] );
10231		}
10232
10233		// Allow custom headers/mimetypes and early abort
10234		if ( s.beforeSend &&
10235			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
10236
10237			// Abort if not done already and return
10238			return jqXHR.abort();
10239		}
10240
10241		// Aborting is no longer a cancellation
10242		strAbort = "abort";
10243
10244		// Install callbacks on deferreds
10245		completeDeferred.add( s.complete );
10246		jqXHR.done( s.success );
10247		jqXHR.fail( s.error );
10248
10249		// Get transport
10250		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
10251
10252		// If no transport, we auto-abort
10253		if ( !transport ) {
10254			done( -1, "No Transport" );
10255		} else {
10256			jqXHR.readyState = 1;
10257
10258			// Send global event
10259			if ( fireGlobals ) {
10260				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
10261			}
10262
10263			// If request was aborted inside ajaxSend, stop there
10264			if ( completed ) {
10265				return jqXHR;
10266			}
10267
10268			// Timeout
10269			if ( s.async && s.timeout > 0 ) {
10270				timeoutTimer = window.setTimeout( function() {
10271					jqXHR.abort( "timeout" );
10272				}, s.timeout );
10273			}
10274
10275			try {
10276				completed = false;
10277				transport.send( requestHeaders, done );
10278			} catch ( e ) {
10279
10280				// Rethrow post-completion exceptions
10281				if ( completed ) {
10282					throw e;
10283				}
10284
10285				// Propagate others as results
10286				done( -1, e );
10287			}
10288		}
10289
10290		// Callback for when everything is done
10291		function done( status, nativeStatusText, responses, headers ) {
10292			var isSuccess, success, error, response, modified,
10293				statusText = nativeStatusText;
10294
10295			// Ignore repeat invocations
10296			if ( completed ) {
10297				return;
10298			}
10299
10300			completed = true;
10301
10302			// Clear timeout if it exists
10303			if ( timeoutTimer ) {
10304				window.clearTimeout( timeoutTimer );
10305			}
10306
10307			// Dereference transport for early garbage collection
10308			// (no matter how long the jqXHR object will be used)
10309			transport = undefined;
10310
10311			// Cache response headers
10312			responseHeadersString = headers || "";
10313
10314			// Set readyState
10315			jqXHR.readyState = status > 0 ? 4 : 0;
10316
10317			// Determine if successful
10318			isSuccess = status >= 200 && status < 300 || status === 304;
10319
10320			// Get response data
10321			if ( responses ) {
10322				response = ajaxHandleResponses( s, jqXHR, responses );
10323			}
10324
10325			// Use a noop converter for missing script but not if jsonp
10326			if ( !isSuccess &&
10327				jQuery.inArray( "script", s.dataTypes ) > -1 &&
10328				jQuery.inArray( "json", s.dataTypes ) < 0 ) {
10329				s.converters[ "text script" ] = function() {};
10330			}
10331
10332			// Convert no matter what (that way responseXXX fields are always set)
10333			response = ajaxConvert( s, response, jqXHR, isSuccess );
10334
10335			// If successful, handle type chaining
10336			if ( isSuccess ) {
10337
10338				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
10339				if ( s.ifModified ) {
10340					modified = jqXHR.getResponseHeader( "Last-Modified" );
10341					if ( modified ) {
10342						jQuery.lastModified[ cacheURL ] = modified;
10343					}
10344					modified = jqXHR.getResponseHeader( "etag" );
10345					if ( modified ) {
10346						jQuery.etag[ cacheURL ] = modified;
10347					}
10348				}
10349
10350				// if no content
10351				if ( status === 204 || s.type === "HEAD" ) {
10352					statusText = "nocontent";
10353
10354				// if not modified
10355				} else if ( status === 304 ) {
10356					statusText = "notmodified";
10357
10358				// If we have data, let's convert it
10359				} else {
10360					statusText = response.state;
10361					success = response.data;
10362					error = response.error;
10363					isSuccess = !error;
10364				}
10365			} else {
10366
10367				// Extract error from statusText and normalize for non-aborts
10368				error = statusText;
10369				if ( status || !statusText ) {
10370					statusText = "error";
10371					if ( status < 0 ) {
10372						status = 0;
10373					}
10374				}
10375			}
10376
10377			// Set data for the fake xhr object
10378			jqXHR.status = status;
10379			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
10380
10381			// Success/Error
10382			if ( isSuccess ) {
10383				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
10384			} else {
10385				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
10386			}
10387
10388			// Status-dependent callbacks
10389			jqXHR.statusCode( statusCode );
10390			statusCode = undefined;
10391
10392			if ( fireGlobals ) {
10393				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
10394					[ jqXHR, s, isSuccess ? success : error ] );
10395			}
10396
10397			// Complete
10398			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
10399
10400			if ( fireGlobals ) {
10401				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
10402
10403				// Handle the global AJAX counter
10404				if ( !( --jQuery.active ) ) {
10405					jQuery.event.trigger( "ajaxStop" );
10406				}
10407			}
10408		}
10409
10410		return jqXHR;
10411	},
10412
10413	getJSON: function( url, data, callback ) {
10414		return jQuery.get( url, data, callback, "json" );
10415	},
10416
10417	getScript: function( url, callback ) {
10418		return jQuery.get( url, undefined, callback, "script" );
10419	}
10420} );
10421
10422jQuery.each( [ "get", "post" ], function( _i, method ) {
10423	jQuery[ method ] = function( url, data, callback, type ) {
10424
10425		// Shift arguments if data argument was omitted
10426		if ( isFunction( data ) ) {
10427			type = type || callback;
10428			callback = data;
10429			data = undefined;
10430		}
10431
10432		// The url can be an options object (which then must have .url)
10433		return jQuery.ajax( jQuery.extend( {
10434			url: url,
10435			type: method,
10436			dataType: type,
10437			data: data,
10438			success: callback
10439		}, jQuery.isPlainObject( url ) && url ) );
10440	};
10441} );
10442
10443jQuery.ajaxPrefilter( function( s ) {
10444	var i;
10445	for ( i in s.headers ) {
10446		if ( i.toLowerCase() === "content-type" ) {
10447			s.contentType = s.headers[ i ] || "";
10448		}
10449	}
10450} );
10451
10452
10453jQuery._evalUrl = function( url, options, doc ) {
10454	return jQuery.ajax( {
10455		url: url,
10456
10457		// Make this explicit, since user can override this through ajaxSetup (trac-11264)
10458		type: "GET",
10459		dataType: "script",
10460		cache: true,
10461		async: false,
10462		global: false,
10463
10464		// Only evaluate the response if it is successful (gh-4126)
10465		// dataFilter is not invoked for failure responses, so using it instead
10466		// of the default converter is kludgy but it works.
10467		converters: {
10468			"text script": function() {}
10469		},
10470		dataFilter: function( response ) {
10471			jQuery.globalEval( response, options, doc );
10472		}
10473	} );
10474};
10475
10476
10477jQuery.fn.extend( {
10478	wrapAll: function( html ) {
10479		var wrap;
10480
10481		if ( this[ 0 ] ) {
10482			if ( isFunction( html ) ) {
10483				html = html.call( this[ 0 ] );
10484			}
10485
10486			// The elements to wrap the target around
10487			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
10488
10489			if ( this[ 0 ].parentNode ) {
10490				wrap.insertBefore( this[ 0 ] );
10491			}
10492
10493			wrap.map( function() {
10494				var elem = this;
10495
10496				while ( elem.firstElementChild ) {
10497					elem = elem.firstElementChild;
10498				}
10499
10500				return elem;
10501			} ).append( this );
10502		}
10503
10504		return this;
10505	},
10506
10507	wrapInner: function( html ) {
10508		if ( isFunction( html ) ) {
10509			return this.each( function( i ) {
10510				jQuery( this ).wrapInner( html.call( this, i ) );
10511			} );
10512		}
10513
10514		return this.each( function() {
10515			var self = jQuery( this ),
10516				contents = self.contents();
10517
10518			if ( contents.length ) {
10519				contents.wrapAll( html );
10520
10521			} else {
10522				self.append( html );
10523			}
10524		} );
10525	},
10526
10527	wrap: function( html ) {
10528		var htmlIsFunction = isFunction( html );
10529
10530		return this.each( function( i ) {
10531			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
10532		} );
10533	},
10534
10535	unwrap: function( selector ) {
10536		this.parent( selector ).not( "body" ).each( function() {
10537			jQuery( this ).replaceWith( this.childNodes );
10538		} );
10539		return this;
10540	}
10541} );
10542
10543
10544jQuery.expr.pseudos.hidden = function( elem ) {
10545	return !jQuery.expr.pseudos.visible( elem );
10546};
10547jQuery.expr.pseudos.visible = function( elem ) {
10548	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
10549};
10550
10551
10552
10553
10554jQuery.ajaxSettings.xhr = function() {
10555	try {
10556		return new window.XMLHttpRequest();
10557	} catch ( e ) {}
10558};
10559
10560var xhrSuccessStatus = {
10561
10562		// File protocol always yields status code 0, assume 200
10563		0: 200,
10564
10565		// Support: IE <=9 only
10566		// trac-1450: sometimes IE returns 1223 when it should be 204
10567		1223: 204
10568	},
10569	xhrSupported = jQuery.ajaxSettings.xhr();
10570
10571support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
10572support.ajax = xhrSupported = !!xhrSupported;
10573
10574jQuery.ajaxTransport( function( options ) {
10575	var callback, errorCallback;
10576
10577	// Cross domain only allowed if supported through XMLHttpRequest
10578	if ( support.cors || xhrSupported && !options.crossDomain ) {
10579		return {
10580			send: function( headers, complete ) {
10581				var i,
10582					xhr = options.xhr();
10583
10584				xhr.open(
10585					options.type,
10586					options.url,
10587					options.async,
10588					options.username,
10589					options.password
10590				);
10591
10592				// Apply custom fields if provided
10593				if ( options.xhrFields ) {
10594					for ( i in options.xhrFields ) {
10595						xhr[ i ] = options.xhrFields[ i ];
10596					}
10597				}
10598
10599				// Override mime type if needed
10600				if ( options.mimeType && xhr.overrideMimeType ) {
10601					xhr.overrideMimeType( options.mimeType );
10602				}
10603
10604				// X-Requested-With header
10605				// For cross-domain requests, seeing as conditions for a preflight are
10606				// akin to a jigsaw puzzle, we simply never set it to be sure.
10607				// (it can always be set on a per-request basis or even using ajaxSetup)
10608				// For same-domain requests, won't change header if already provided.
10609				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
10610					headers[ "X-Requested-With" ] = "XMLHttpRequest";
10611				}
10612
10613				// Set headers
10614				for ( i in headers ) {
10615					xhr.setRequestHeader( i, headers[ i ] );
10616				}
10617
10618				// Callback
10619				callback = function( type ) {
10620					return function() {
10621						if ( callback ) {
10622							callback = errorCallback = xhr.onload =
10623								xhr.onerror = xhr.onabort = xhr.ontimeout =
10624									xhr.onreadystatechange = null;
10625
10626							if ( type === "abort" ) {
10627								xhr.abort();
10628							} else if ( type === "error" ) {
10629
10630								// Support: IE <=9 only
10631								// On a manual native abort, IE9 throws
10632								// errors on any property access that is not readyState
10633								if ( typeof xhr.status !== "number" ) {
10634									complete( 0, "error" );
10635								} else {
10636									complete(
10637
10638										// File: protocol always yields status 0; see trac-8605, trac-14207
10639										xhr.status,
10640										xhr.statusText
10641									);
10642								}
10643							} else {
10644								complete(
10645									xhrSuccessStatus[ xhr.status ] || xhr.status,
10646									xhr.statusText,
10647
10648									// Support: IE <=9 only
10649									// IE9 has no XHR2 but throws on binary (trac-11426)
10650									// For XHR2 non-text, let the caller handle it (gh-2498)
10651									( xhr.responseType || "text" ) !== "text"  ||
10652									typeof xhr.responseText !== "string" ?
10653										{ binary: xhr.response } :
10654										{ text: xhr.responseText },
10655									xhr.getAllResponseHeaders()
10656								);
10657							}
10658						}
10659					};
10660				};
10661
10662				// Listen to events
10663				xhr.onload = callback();
10664				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
10665
10666				// Support: IE 9 only
10667				// Use onreadystatechange to replace onabort
10668				// to handle uncaught aborts
10669				if ( xhr.onabort !== undefined ) {
10670					xhr.onabort = errorCallback;
10671				} else {
10672					xhr.onreadystatechange = function() {
10673
10674						// Check readyState before timeout as it changes
10675						if ( xhr.readyState === 4 ) {
10676
10677							// Allow onerror to be called first,
10678							// but that will not handle a native abort
10679							// Also, save errorCallback to a variable
10680							// as xhr.onerror cannot be accessed
10681							window.setTimeout( function() {
10682								if ( callback ) {
10683									errorCallback();
10684								}
10685							} );
10686						}
10687					};
10688				}
10689
10690				// Create the abort callback
10691				callback = callback( "abort" );
10692
10693				try {
10694
10695					// Do send the request (this may raise an exception)
10696					xhr.send( options.hasContent && options.data || null );
10697				} catch ( e ) {
10698
10699					// trac-14683: Only rethrow if this hasn't been notified as an error yet
10700					if ( callback ) {
10701						throw e;
10702					}
10703				}
10704			},
10705
10706			abort: function() {
10707				if ( callback ) {
10708					callback();
10709				}
10710			}
10711		};
10712	}
10713} );
10714
10715
10716
10717
10718// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
10719jQuery.ajaxPrefilter( function( s ) {
10720	if ( s.crossDomain ) {
10721		s.contents.script = false;
10722	}
10723} );
10724
10725// Install script dataType
10726jQuery.ajaxSetup( {
10727	accepts: {
10728		script: "text/javascript, application/javascript, " +
10729			"application/ecmascript, application/x-ecmascript"
10730	},
10731	contents: {
10732		script: /\b(?:java|ecma)script\b/
10733	},
10734	converters: {
10735		"text script": function( text ) {
10736			jQuery.globalEval( text );
10737			return text;
10738		}
10739	}
10740} );
10741
10742// Handle cache's special case and crossDomain
10743jQuery.ajaxPrefilter( "script", function( s ) {
10744	if ( s.cache === undefined ) {
10745		s.cache = false;
10746	}
10747	if ( s.crossDomain ) {
10748		s.type = "GET";
10749	}
10750} );
10751
10752// Bind script tag hack transport
10753jQuery.ajaxTransport( "script", function( s ) {
10754
10755	// This transport only deals with cross domain or forced-by-attrs requests
10756	if ( s.crossDomain || s.scriptAttrs ) {
10757		var script, callback;
10758		return {
10759			send: function( _, complete ) {
10760				script = jQuery( "<script>" )
10761					.attr( s.scriptAttrs || {} )
10762					.prop( { charset: s.scriptCharset, src: s.url } )
10763					.on( "load error", callback = function( evt ) {
10764						script.remove();
10765						callback = null;
10766						if ( evt ) {
10767							complete( evt.type === "error" ? 404 : 200, evt.type );
10768						}
10769					} );
10770
10771				// Use native DOM manipulation to avoid our domManip AJAX trickery
10772				document.head.appendChild( script[ 0 ] );
10773			},
10774			abort: function() {
10775				if ( callback ) {
10776					callback();
10777				}
10778			}
10779		};
10780	}
10781} );
10782
10783
10784
10785
10786var oldCallbacks = [],
10787	rjsonp = /(=)\?(?=&|$)|\?\?/;
10788
10789// Default jsonp settings
10790jQuery.ajaxSetup( {
10791	jsonp: "callback",
10792	jsonpCallback: function() {
10793		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
10794		this[ callback ] = true;
10795		return callback;
10796	}
10797} );
10798
10799// Detect, normalize options and install callbacks for jsonp requests
10800jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
10801
10802	var callbackName, overwritten, responseContainer,
10803		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
10804			"url" :
10805			typeof s.data === "string" &&
10806				( s.contentType || "" )
10807					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
10808				rjsonp.test( s.data ) && "data"
10809		);
10810
10811	// Handle iff the expected data type is "jsonp" or we have a parameter to set
10812	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
10813
10814		// Get callback name, remembering preexisting value associated with it
10815		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
10816			s.jsonpCallback() :
10817			s.jsonpCallback;
10818
10819		// Insert callback into url or form data
10820		if ( jsonProp ) {
10821			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
10822		} else if ( s.jsonp !== false ) {
10823			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
10824		}
10825
10826		// Use data converter to retrieve json after script execution
10827		s.converters[ "script json" ] = function() {
10828			if ( !responseContainer ) {
10829				jQuery.error( callbackName + " was not called" );
10830			}
10831			return responseContainer[ 0 ];
10832		};
10833
10834		// Force json dataType
10835		s.dataTypes[ 0 ] = "json";
10836
10837		// Install callback
10838		overwritten = window[ callbackName ];
10839		window[ callbackName ] = function() {
10840			responseContainer = arguments;
10841		};
10842
10843		// Clean-up function (fires after converters)
10844		jqXHR.always( function() {
10845
10846			// If previous value didn't exist - remove it
10847			if ( overwritten === undefined ) {
10848				jQuery( window ).removeProp( callbackName );
10849
10850			// Otherwise restore preexisting value
10851			} else {
10852				window[ callbackName ] = overwritten;
10853			}
10854
10855			// Save back as free
10856			if ( s[ callbackName ] ) {
10857
10858				// Make sure that re-using the options doesn't screw things around
10859				s.jsonpCallback = originalSettings.jsonpCallback;
10860
10861				// Save the callback name for future use
10862				oldCallbacks.push( callbackName );
10863			}
10864
10865			// Call if it was a function and we have a response
10866			if ( responseContainer && isFunction( overwritten ) ) {
10867				overwritten( responseContainer[ 0 ] );
10868			}
10869
10870			responseContainer = overwritten = undefined;
10871		} );
10872
10873		// Delegate to script
10874		return "script";
10875	}
10876} );
10877
10878
10879
10880
10881// Support: Safari 8 only
10882// In Safari 8 documents created via document.implementation.createHTMLDocument
10883// collapse sibling forms: the second one becomes a child of the first one.
10884// Because of that, this security measure has to be disabled in Safari 8.
10885// https://bugs.webkit.org/show_bug.cgi?id=137337
10886support.createHTMLDocument = ( function() {
10887	var body = document.implementation.createHTMLDocument( "" ).body;
10888	body.innerHTML = "<form></form><form></form>";
10889	return body.childNodes.length === 2;
10890} )();
10891
10892
10893// Argument "data" should be string of html
10894// context (optional): If specified, the fragment will be created in this context,
10895// defaults to document
10896// keepScripts (optional): If true, will include scripts passed in the html string
10897jQuery.parseHTML = function( data, context, keepScripts ) {
10898	if ( typeof data !== "string" ) {
10899		return [];
10900	}
10901	if ( typeof context === "boolean" ) {
10902		keepScripts = context;
10903		context = false;
10904	}
10905
10906	var base, parsed, scripts;
10907
10908	if ( !context ) {
10909
10910		// Stop scripts or inline event handlers from being executed immediately
10911		// by using document.implementation
10912		if ( support.createHTMLDocument ) {
10913			context = document.implementation.createHTMLDocument( "" );
10914
10915			// Set the base href for the created document
10916			// so any parsed elements with URLs
10917			// are based on the document's URL (gh-2965)
10918			base = context.createElement( "base" );
10919			base.href = document.location.href;
10920			context.head.appendChild( base );
10921		} else {
10922			context = document;
10923		}
10924	}
10925
10926	parsed = rsingleTag.exec( data );
10927	scripts = !keepScripts && [];
10928
10929	// Single tag
10930	if ( parsed ) {
10931		return [ context.createElement( parsed[ 1 ] ) ];
10932	}
10933
10934	parsed = buildFragment( [ data ], context, scripts );
10935
10936	if ( scripts && scripts.length ) {
10937		jQuery( scripts ).remove();
10938	}
10939
10940	return jQuery.merge( [], parsed.childNodes );
10941};
10942
10943
10944/**
10945 * Load a url into a page
10946 */
10947jQuery.fn.load = function( url, params, callback ) {
10948	var selector, type, response,
10949		self = this,
10950		off = url.indexOf( " " );
10951
10952	if ( off > -1 ) {
10953		selector = stripAndCollapse( url.slice( off ) );
10954		url = url.slice( 0, off );
10955	}
10956
10957	// If it's a function
10958	if ( isFunction( params ) ) {
10959
10960		// We assume that it's the callback
10961		callback = params;
10962		params = undefined;
10963
10964	// Otherwise, build a param string
10965	} else if ( params && typeof params === "object" ) {
10966		type = "POST";
10967	}
10968
10969	// If we have elements to modify, make the request
10970	if ( self.length > 0 ) {
10971		jQuery.ajax( {
10972			url: url,
10973
10974			// If "type" variable is undefined, then "GET" method will be used.
10975			// Make value of this field explicit since
10976			// user can override it through ajaxSetup method
10977			type: type || "GET",
10978			dataType: "html",
10979			data: params
10980		} ).done( function( responseText ) {
10981
10982			// Save response for use in complete callback
10983			response = arguments;
10984
10985			self.html( selector ?
10986
10987				// If a selector was specified, locate the right elements in a dummy div
10988				// Exclude scripts to avoid IE 'Permission Denied' errors
10989				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
10990
10991				// Otherwise use the full result
10992				responseText );
10993
10994		// If the request succeeds, this function gets "data", "status", "jqXHR"
10995		// but they are ignored because response was set above.
10996		// If it fails, this function gets "jqXHR", "status", "error"
10997		} ).always( callback && function( jqXHR, status ) {
10998			self.each( function() {
10999				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
11000			} );
11001		} );
11002	}
11003
11004	return this;
11005};
11006
11007
11008
11009
11010jQuery.expr.pseudos.animated = function( elem ) {
11011	return jQuery.grep( jQuery.timers, function( fn ) {
11012		return elem === fn.elem;
11013	} ).length;
11014};
11015
11016
11017
11018
11019jQuery.offset = {
11020	setOffset: function( elem, options, i ) {
11021		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
11022			position = jQuery.css( elem, "position" ),
11023			curElem = jQuery( elem ),
11024			props = {};
11025
11026		// Set position first, in-case top/left are set even on static elem
11027		if ( position === "static" ) {
11028			elem.style.position = "relative";
11029		}
11030
11031		curOffset = curElem.offset();
11032		curCSSTop = jQuery.css( elem, "top" );
11033		curCSSLeft = jQuery.css( elem, "left" );
11034		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
11035			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
11036
11037		// Need to be able to calculate position if either
11038		// top or left is auto and position is either absolute or fixed
11039		if ( calculatePosition ) {
11040			curPosition = curElem.position();
11041			curTop = curPosition.top;
11042			curLeft = curPosition.left;
11043
11044		} else {
11045			curTop = parseFloat( curCSSTop ) || 0;
11046			curLeft = parseFloat( curCSSLeft ) || 0;
11047		}
11048
11049		if ( isFunction( options ) ) {
11050
11051			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
11052			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
11053		}
11054
11055		if ( options.top != null ) {
11056			props.top = ( options.top - curOffset.top ) + curTop;
11057		}
11058		if ( options.left != null ) {
11059			props.left = ( options.left - curOffset.left ) + curLeft;
11060		}
11061
11062		if ( "using" in options ) {
11063			options.using.call( elem, props );
11064
11065		} else {
11066			curElem.css( props );
11067		}
11068	}
11069};
11070
11071jQuery.fn.extend( {
11072
11073	// offset() relates an element's border box to the document origin
11074	offset: function( options ) {
11075
11076		// Preserve chaining for setter
11077		if ( arguments.length ) {
11078			return options === undefined ?
11079				this :
11080				this.each( function( i ) {
11081					jQuery.offset.setOffset( this, options, i );
11082				} );
11083		}
11084
11085		var rect, win,
11086			elem = this[ 0 ];
11087
11088		if ( !elem ) {
11089			return;
11090		}
11091
11092		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
11093		// Support: IE <=11 only
11094		// Running getBoundingClientRect on a
11095		// disconnected node in IE throws an error
11096		if ( !elem.getClientRects().length ) {
11097			return { top: 0, left: 0 };
11098		}
11099
11100		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
11101		rect = elem.getBoundingClientRect();
11102		win = elem.ownerDocument.defaultView;
11103		return {
11104			top: rect.top + win.pageYOffset,
11105			left: rect.left + win.pageXOffset
11106		};
11107	},
11108
11109	// position() relates an element's margin box to its offset parent's padding box
11110	// This corresponds to the behavior of CSS absolute positioning
11111	position: function() {
11112		if ( !this[ 0 ] ) {
11113			return;
11114		}
11115
11116		var offsetParent, offset, doc,
11117			elem = this[ 0 ],
11118			parentOffset = { top: 0, left: 0 };
11119
11120		// position:fixed elements are offset from the viewport, which itself always has zero offset
11121		if ( jQuery.css( elem, "position" ) === "fixed" ) {
11122
11123			// Assume position:fixed implies availability of getBoundingClientRect
11124			offset = elem.getBoundingClientRect();
11125
11126		} else {
11127			offset = this.offset();
11128
11129			// Account for the *real* offset parent, which can be the document or its root element
11130			// when a statically positioned element is identified
11131			doc = elem.ownerDocument;
11132			offsetParent = elem.offsetParent || doc.documentElement;
11133			while ( offsetParent &&
11134				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
11135				jQuery.css( offsetParent, "position" ) === "static" ) {
11136
11137				offsetParent = offsetParent.parentNode;
11138			}
11139			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
11140
11141				// Incorporate borders into its offset, since they are outside its content origin
11142				parentOffset = jQuery( offsetParent ).offset();
11143				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
11144				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
11145			}
11146		}
11147
11148		// Subtract parent offsets and element margins
11149		return {
11150			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
11151			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
11152		};
11153	},
11154
11155	// This method will return documentElement in the following cases:
11156	// 1) For the element inside the iframe without offsetParent, this method will return
11157	//    documentElement of the parent window
11158	// 2) For the hidden or detached element
11159	// 3) For body or html element, i.e. in case of the html node - it will return itself
11160	//
11161	// but those exceptions were never presented as a real life use-cases
11162	// and might be considered as more preferable results.
11163	//
11164	// This logic, however, is not guaranteed and can change at any point in the future
11165	offsetParent: function() {
11166		return this.map( function() {
11167			var offsetParent = this.offsetParent;
11168
11169			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
11170				offsetParent = offsetParent.offsetParent;
11171			}
11172
11173			return offsetParent || documentElement;
11174		} );
11175	}
11176} );
11177
11178// Create scrollLeft and scrollTop methods
11179jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
11180	var top = "pageYOffset" === prop;
11181
11182	jQuery.fn[ method ] = function( val ) {
11183		return access( this, function( elem, method, val ) {
11184
11185			// Coalesce documents and windows
11186			var win;
11187			if ( isWindow( elem ) ) {
11188				win = elem;
11189			} else if ( elem.nodeType === 9 ) {
11190				win = elem.defaultView;
11191			}
11192
11193			if ( val === undefined ) {
11194				return win ? win[ prop ] : elem[ method ];
11195			}
11196
11197			if ( win ) {
11198				win.scrollTo(
11199					!top ? val : win.pageXOffset,
11200					top ? val : win.pageYOffset
11201				);
11202
11203			} else {
11204				elem[ method ] = val;
11205			}
11206		}, method, val, arguments.length );
11207	};
11208} );
11209
11210// Support: Safari <=7 - 9.1, Chrome <=37 - 49
11211// Add the top/left cssHooks using jQuery.fn.position
11212// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
11213// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
11214// getComputedStyle returns percent when specified for top/left/bottom/right;
11215// rather than make the css module depend on the offset module, just check for it here
11216jQuery.each( [ "top", "left" ], function( _i, prop ) {
11217	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
11218		function( elem, computed ) {
11219			if ( computed ) {
11220				computed = curCSS( elem, prop );
11221
11222				// If curCSS returns percentage, fallback to offset
11223				return rnumnonpx.test( computed ) ?
11224					jQuery( elem ).position()[ prop ] + "px" :
11225					computed;
11226			}
11227		}
11228	);
11229} );
11230
11231
11232// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
11233jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
11234	jQuery.each( {
11235		padding: "inner" + name,
11236		content: type,
11237		"": "outer" + name
11238	}, function( defaultExtra, funcName ) {
11239
11240		// Margin is only for outerHeight, outerWidth
11241		jQuery.fn[ funcName ] = function( margin, value ) {
11242			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
11243				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
11244
11245			return access( this, function( elem, type, value ) {
11246				var doc;
11247
11248				if ( isWindow( elem ) ) {
11249
11250					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
11251					return funcName.indexOf( "outer" ) === 0 ?
11252						elem[ "inner" + name ] :
11253						elem.document.documentElement[ "client" + name ];
11254				}
11255
11256				// Get document width or height
11257				if ( elem.nodeType === 9 ) {
11258					doc = elem.documentElement;
11259
11260					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
11261					// whichever is greatest
11262					return Math.max(
11263						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
11264						elem.body[ "offset" + name ], doc[ "offset" + name ],
11265						doc[ "client" + name ]
11266					);
11267				}
11268
11269				return value === undefined ?
11270
11271					// Get width or height on the element, requesting but not forcing parseFloat
11272					jQuery.css( elem, type, extra ) :
11273
11274					// Set width or height on the element
11275					jQuery.style( elem, type, value, extra );
11276			}, type, chainable ? margin : undefined, chainable );
11277		};
11278	} );
11279} );
11280
11281
11282jQuery.each( [
11283	"ajaxStart",
11284	"ajaxStop",
11285	"ajaxComplete",
11286	"ajaxError",
11287	"ajaxSuccess",
11288	"ajaxSend"
11289], function( _i, type ) {
11290	jQuery.fn[ type ] = function( fn ) {
11291		return this.on( type, fn );
11292	};
11293} );
11294
11295
11296
11297
11298jQuery.fn.extend( {
11299
11300	bind: function( types, data, fn ) {
11301		return this.on( types, null, data, fn );
11302	},
11303	unbind: function( types, fn ) {
11304		return this.off( types, null, fn );
11305	},
11306
11307	delegate: function( selector, types, data, fn ) {
11308		return this.on( types, selector, data, fn );
11309	},
11310	undelegate: function( selector, types, fn ) {
11311
11312		// ( namespace ) or ( selector, types [, fn] )
11313		return arguments.length === 1 ?
11314			this.off( selector, "**" ) :
11315			this.off( types, selector || "**", fn );
11316	},
11317
11318	hover: function( fnOver, fnOut ) {
11319		return this
11320			.on( "mouseenter", fnOver )
11321			.on( "mouseleave", fnOut || fnOver );
11322	}
11323} );
11324
11325jQuery.each(
11326	( "blur focus focusin focusout resize scroll click dblclick " +
11327	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
11328	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
11329	function( _i, name ) {
11330
11331		// Handle event binding
11332		jQuery.fn[ name ] = function( data, fn ) {
11333			return arguments.length > 0 ?
11334				this.on( name, null, data, fn ) :
11335				this.trigger( name );
11336		};
11337	}
11338);
11339
11340
11341
11342
11343// Support: Android <=4.0 only
11344// Make sure we trim BOM and NBSP
11345// Require that the "whitespace run" starts from a non-whitespace
11346// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
11347var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
11348
11349// Bind a function to a context, optionally partially applying any
11350// arguments.
11351// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
11352// However, it is not slated for removal any time soon
11353jQuery.proxy = function( fn, context ) {
11354	var tmp, args, proxy;
11355
11356	if ( typeof context === "string" ) {
11357		tmp = fn[ context ];
11358		context = fn;
11359		fn = tmp;
11360	}
11361
11362	// Quick check to determine if target is callable, in the spec
11363	// this throws a TypeError, but we will just return undefined.
11364	if ( !isFunction( fn ) ) {
11365		return undefined;
11366	}
11367
11368	// Simulated bind
11369	args = slice.call( arguments, 2 );
11370	proxy = function() {
11371		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
11372	};
11373
11374	// Set the guid of unique handler to the same of original handler, so it can be removed
11375	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
11376
11377	return proxy;
11378};
11379
11380jQuery.holdReady = function( hold ) {
11381	if ( hold ) {
11382		jQuery.readyWait++;
11383	} else {
11384		jQuery.ready( true );
11385	}
11386};
11387jQuery.isArray = Array.isArray;
11388jQuery.parseJSON = JSON.parse;
11389jQuery.nodeName = nodeName;
11390jQuery.isFunction = isFunction;
11391jQuery.isWindow = isWindow;
11392jQuery.camelCase = camelCase;
11393jQuery.type = toType;
11394
11395jQuery.now = Date.now;
11396
11397jQuery.isNumeric = function( obj ) {
11398
11399	// As of jQuery 3.0, isNumeric is limited to
11400	// strings and numbers (primitives or objects)
11401	// that can be coerced to finite numbers (gh-2662)
11402	var type = jQuery.type( obj );
11403	return ( type === "number" || type === "string" ) &&
11404
11405		// parseFloat NaNs numeric-cast false positives ("")
11406		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
11407		// subtraction forces infinities to NaN
11408		!isNaN( obj - parseFloat( obj ) );
11409};
11410
11411jQuery.trim = function( text ) {
11412	return text == null ?
11413		"" :
11414		( text + "" ).replace( rtrim, "$1" );
11415};
11416
11417
11418
11419// Register as a named AMD module, since jQuery can be concatenated with other
11420// files that may use define, but not via a proper concatenation script that
11421// understands anonymous AMD modules. A named AMD is safest and most robust
11422// way to register. Lowercase jquery is used because AMD module names are
11423// derived from file names, and jQuery is normally delivered in a lowercase
11424// file name. Do this after creating the global so that if an AMD module wants
11425// to call noConflict to hide this version of jQuery, it will work.
11426
11427// Note that for maximum portability, libraries that are not jQuery should
11428// declare themselves as anonymous modules, and avoid setting a global if an
11429// AMD loader is present. jQuery is a special case. For more information, see
11430// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
11431
11432if ( true ) {
11433	!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {
11434		return jQuery;
11435	}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
11436		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
11437}
11438
11439
11440
11441
11442var
11443
11444	// Map over jQuery in case of overwrite
11445	_jQuery = window.jQuery,
11446
11447	// Map over the $ in case of overwrite
11448	_$ = window.$;
11449
11450jQuery.noConflict = function( deep ) {
11451	if ( window.$ === jQuery ) {
11452		window.$ = _$;
11453	}
11454
11455	if ( deep && window.jQuery === jQuery ) {
11456		window.jQuery = _jQuery;
11457	}
11458
11459	return jQuery;
11460};
11461
11462// Expose jQuery and $ identifiers, even in AMD
11463// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
11464// and CommonJS for browser emulators (trac-13566)
11465if ( typeof noGlobal === "undefined" ) {
11466	window.jQuery = window.$ = jQuery;
11467}
11468
11469
11470
11471
11472return jQuery;
11473} );
11474
11475
11476/***/ }),
11477
11478/***/ "./library/scss/style.scss":
11479/*!*********************************!*\
11480  !*** ./library/scss/style.scss ***!
11481  \*********************************/
11482/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
11483
11484"use strict";
11485__webpack_require__.r(__webpack_exports__);
11486// extracted by mini-css-extract-plugin
11487
11488
11489/***/ }),
11490
11491/***/ "./library/scss/plugin-a11y.scss":
11492/*!***************************************!*\
11493  !*** ./library/scss/plugin-a11y.scss ***!
11494  \***************************************/
11495/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
11496
11497"use strict";
11498__webpack_require__.r(__webpack_exports__);
11499// extracted by mini-css-extract-plugin
11500
11501
11502/***/ }),
11503
vendor: 2,227 bytes, lines 11504-11533
11504/***/ "./node_modules/swiper/swiper-bundle.css":
11505/*!***********************************************!*\
11506  !*** ./node_modules/swiper/swiper-bundle.css ***!
11507  \***********************************************/
11508/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
11509
11510"use strict";
11511__webpack_require__.r(__webpack_exports__);
11512/* harmony export */ __webpack_require__.d(__webpack_exports__, {
11513/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
11514/* harmony export */ });
11515/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
11516/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
11517/* harmony import */ var _css_loader_dist_cjs_js_ruleSet_1_rules_7_oneOf_1_use_1_postcss_loader_dist_cjs_js_ruleSet_1_rules_7_oneOf_1_use_2_swiper_bundle_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../css-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[1]!../postcss-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[2]!./swiper-bundle.css */ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[2]!./node_modules/swiper/swiper-bundle.css");
11518
11519            
11520
11521var options = {};
11522
11523options.insert = "head";
11524options.singleton = false;
11525
11526var update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_ruleSet_1_rules_7_oneOf_1_use_1_postcss_loader_dist_cjs_js_ruleSet_1_rules_7_oneOf_1_use_2_swiper_bundle_css__WEBPACK_IMPORTED_MODULE_1__["default"], options);
11527
11528
11529
11530/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_ruleSet_1_rules_7_oneOf_1_use_1_postcss_loader_dist_cjs_js_ruleSet_1_rules_7_oneOf_1_use_2_swiper_bundle_css__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
11531
11532/***/ }),
11533
vendor: 7,200 bytes, lines 11534-11812
11534/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
11535/*!****************************************************************************!*\
11536  !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
11537  \****************************************************************************/
11538/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11539
11540"use strict";
11541
11542
11543var isOldIE = function isOldIE() {
11544  var memo;
11545  return function memorize() {
11546    if (typeof memo === 'undefined') {
11547      // Test for IE <= 9 as proposed by Browserhacks
11548      // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
11549      // Tests for existence of standard globals is to allow style-loader
11550      // to operate correctly into non-standard environments
11551      // @see https://github.com/webpack-contrib/style-loader/issues/177
11552      memo = Boolean(window && document && document.all && !window.atob);
11553    }
11554
11555    return memo;
11556  };
11557}();
11558
11559var getTarget = function getTarget() {
11560  var memo = {};
11561  return function memorize(target) {
11562    if (typeof memo[target] === 'undefined') {
11563      var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself
11564
11565      if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
11566        try {
11567          // This will throw an exception if access to iframe is blocked
11568          // due to cross-origin restrictions
11569          styleTarget = styleTarget.contentDocument.head;
11570        } catch (e) {
11571          // istanbul ignore next
11572          styleTarget = null;
11573        }
11574      }
11575
11576      memo[target] = styleTarget;
11577    }
11578
11579    return memo[target];
11580  };
11581}();
11582
11583var stylesInDom = [];
11584
11585function getIndexByIdentifier(identifier) {
11586  var result = -1;
11587
11588  for (var i = 0; i < stylesInDom.length; i++) {
11589    if (stylesInDom[i].identifier === identifier) {
11590      result = i;
11591      break;
11592    }
11593  }
11594
11595  return result;
11596}
11597
11598function modulesToDom(list, options) {
11599  var idCountMap = {};
11600  var identifiers = [];
11601
11602  for (var i = 0; i < list.length; i++) {
11603    var item = list[i];
11604    var id = options.base ? item[0] + options.base : item[0];
11605    var count = idCountMap[id] || 0;
11606    var identifier = "".concat(id, " ").concat(count);
11607    idCountMap[id] = count + 1;
11608    var index = getIndexByIdentifier(identifier);
11609    var obj = {
11610      css: item[1],
11611      media: item[2],
11612      sourceMap: item[3]
11613    };
11614
11615    if (index !== -1) {
11616      stylesInDom[index].references++;
11617      stylesInDom[index].updater(obj);
11618    } else {
11619      stylesInDom.push({
11620        identifier: identifier,
11621        updater: addStyle(obj, options),
11622        references: 1
11623      });
11624    }
11625
11626    identifiers.push(identifier);
11627  }
11628
11629  return identifiers;
11630}
11631
11632function insertStyleElement(options) {
11633  var style = document.createElement('style');
11634  var attributes = options.attributes || {};
11635
11636  if (typeof attributes.nonce === 'undefined') {
11637    var nonce =  true ? __webpack_require__.nc : 0;
11638
11639    if (nonce) {
11640      attributes.nonce = nonce;
11641    }
11642  }
11643
11644  Object.keys(attributes).forEach(function (key) {
11645    style.setAttribute(key, attributes[key]);
11646  });
11647
11648  if (typeof options.insert === 'function') {
11649    options.insert(style);
11650  } else {
11651    var target = getTarget(options.insert || 'head');
11652
11653    if (!target) {
11654      throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
11655    }
11656
11657    target.appendChild(style);
11658  }
11659
11660  return style;
11661}
11662
11663function removeStyleElement(style) {
11664  // istanbul ignore if
11665  if (style.parentNode === null) {
11666    return false;
11667  }
11668
11669  style.parentNode.removeChild(style);
11670}
11671/* istanbul ignore next  */
11672
11673
11674var replaceText = function replaceText() {
11675  var textStore = [];
11676  return function replace(index, replacement) {
11677    textStore[index] = replacement;
11678    return textStore.filter(Boolean).join('\n');
11679  };
11680}();
11681
11682function applyToSingletonTag(style, index, remove, obj) {
11683  var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE
11684
11685  /* istanbul ignore if  */
11686
11687  if (style.styleSheet) {
11688    style.styleSheet.cssText = replaceText(index, css);
11689  } else {
11690    var cssNode = document.createTextNode(css);
11691    var childNodes = style.childNodes;
11692
11693    if (childNodes[index]) {
11694      style.removeChild(childNodes[index]);
11695    }
11696
11697    if (childNodes.length) {
11698      style.insertBefore(cssNode, childNodes[index]);
11699    } else {
11700      style.appendChild(cssNode);
11701    }
11702  }
11703}
11704
11705function applyToTag(style, options, obj) {
11706  var css = obj.css;
11707  var media = obj.media;
11708  var sourceMap = obj.sourceMap;
11709
11710  if (media) {
11711    style.setAttribute('media', media);
11712  } else {
11713    style.removeAttribute('media');
11714  }
11715
11716  if (sourceMap && typeof btoa !== 'undefined') {
11717    css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
11718  } // For old IE
11719
11720  /* istanbul ignore if  */
11721
11722
11723  if (style.styleSheet) {
11724    style.styleSheet.cssText = css;
11725  } else {
11726    while (style.firstChild) {
11727      style.removeChild(style.firstChild);
11728    }
11729
11730    style.appendChild(document.createTextNode(css));
11731  }
11732}
11733
11734var singleton = null;
11735var singletonCounter = 0;
11736
11737function addStyle(obj, options) {
11738  var style;
11739  var update;
11740  var remove;
11741
11742  if (options.singleton) {
11743    var styleIndex = singletonCounter++;
11744    style = singleton || (singleton = insertStyleElement(options));
11745    update = applyToSingletonTag.bind(null, style, styleIndex, false);
11746    remove = applyToSingletonTag.bind(null, style, styleIndex, true);
11747  } else {
11748    style = insertStyleElement(options);
11749    update = applyToTag.bind(null, style, options);
11750
11751    remove = function remove() {
11752      removeStyleElement(style);
11753    };
11754  }
11755
11756  update(obj);
11757  return function updateStyle(newObj) {
11758    if (newObj) {
11759      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {
11760        return;
11761      }
11762
11763      update(obj = newObj);
11764    } else {
11765      remove();
11766    }
11767  };
11768}
11769
11770module.exports = function (list, options) {
11771  options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
11772  // tags it will allow on a page
11773
11774  if (!options.singleton && typeof options.singleton !== 'boolean') {
11775    options.singleton = isOldIE();
11776  }
11777
11778  list = list || [];
11779  var lastIdentifiers = modulesToDom(list, options);
11780  return function update(newList) {
11781    newList = newList || [];
11782
11783    if (Object.prototype.toString.call(newList) !== '[object Array]') {
11784      return;
11785    }
11786
11787    for (var i = 0; i < lastIdentifiers.length; i++) {
11788      var identifier = lastIdentifiers[i];
11789      var index = getIndexByIdentifier(identifier);
11790      stylesInDom[index].references--;
11791    }
11792
11793    var newLastIdentifiers = modulesToDom(newList, options);
11794
11795    for (var _i = 0; _i < lastIdentifiers.length; _i++) {
11796      var _identifier = lastIdentifiers[_i];
11797
11798      var _index = getIndexByIdentifier(_identifier);
11799
11800      if (stylesInDom[_index].references === 0) {
11801        stylesInDom[_index].updater();
11802
11803        stylesInDom.splice(_index, 1);
11804      }
11805    }
11806
11807    lastIdentifiers = newLastIdentifiers;
11808  };
11809};
11810
11811/***/ }),
11812
vendor: 11,829 bytes, lines 11813-12172
11813/***/ "./node_modules/swiper/modules/a11y.mjs":
11814/*!**********************************************!*\
11815  !*** ./node_modules/swiper/modules/a11y.mjs ***!
11816  \**********************************************/
11817/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
11818
11819"use strict";
11820__webpack_require__.r(__webpack_exports__);
11821/* harmony export */ __webpack_require__.d(__webpack_exports__, {
11822/* harmony export */   "default": () => (/* binding */ A11y)
11823/* harmony export */ });
11824/* harmony import */ var _shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/classes-to-selector.mjs */ "./node_modules/swiper/shared/classes-to-selector.mjs");
11825/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
11826
11827
11828
11829function A11y(_ref) {
11830  let {
11831    swiper,
11832    extendParams,
11833    on
11834  } = _ref;
11835  extendParams({
11836    a11y: {
11837      enabled: true,
11838      notificationClass: 'swiper-notification',
11839      prevSlideMessage: 'Previous slide',
11840      nextSlideMessage: 'Next slide',
11841      firstSlideMessage: 'This is the first slide',
11842      lastSlideMessage: 'This is the last slide',
11843      paginationBulletMessage: 'Go to slide {{index}}',
11844      slideLabelMessage: '{{index}} / {{slidesLength}}',
11845      containerMessage: null,
11846      containerRoleDescriptionMessage: null,
11847      itemRoleDescriptionMessage: null,
11848      slideRole: 'group',
11849      id: null
11850    }
11851  });
11852  swiper.a11y = {
11853    clicked: false
11854  };
11855  let liveRegion = null;
11856  function notify(message) {
11857    const notification = liveRegion;
11858    if (notification.length === 0) return;
11859    notification.innerHTML = '';
11860    notification.innerHTML = message;
11861  }
11862  const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e);
11863  function getRandomNumber(size) {
11864    if (size === void 0) {
11865      size = 16;
11866    }
11867    const randomChar = () => Math.round(16 * Math.random()).toString(16);
11868    return 'x'.repeat(size).replace(/x/g, randomChar);
11869  }
11870  function makeElFocusable(el) {
11871    el = makeElementsArray(el);
11872    el.forEach(subEl => {
11873      subEl.setAttribute('tabIndex', '0');
11874    });
11875  }
11876  function makeElNotFocusable(el) {
11877    el = makeElementsArray(el);
11878    el.forEach(subEl => {
11879      subEl.setAttribute('tabIndex', '-1');
11880    });
11881  }
11882  function addElRole(el, role) {
11883    el = makeElementsArray(el);
11884    el.forEach(subEl => {
11885      subEl.setAttribute('role', role);
11886    });
11887  }
11888  function addElRoleDescription(el, description) {
11889    el = makeElementsArray(el);
11890    el.forEach(subEl => {
11891      subEl.setAttribute('aria-roledescription', description);
11892    });
11893  }
11894  function addElControls(el, controls) {
11895    el = makeElementsArray(el);
11896    el.forEach(subEl => {
11897      subEl.setAttribute('aria-controls', controls);
11898    });
11899  }
11900  function addElLabel(el, label) {
11901    el = makeElementsArray(el);
11902    el.forEach(subEl => {
11903      subEl.setAttribute('aria-label', label);
11904    });
11905  }
11906  function addElId(el, id) {
11907    el = makeElementsArray(el);
11908    el.forEach(subEl => {
11909      subEl.setAttribute('id', id);
11910    });
11911  }
11912  function addElLive(el, live) {
11913    el = makeElementsArray(el);
11914    el.forEach(subEl => {
11915      subEl.setAttribute('aria-live', live);
11916    });
11917  }
11918  function disableEl(el) {
11919    el = makeElementsArray(el);
11920    el.forEach(subEl => {
11921      subEl.setAttribute('aria-disabled', true);
11922    });
11923  }
11924  function enableEl(el) {
11925    el = makeElementsArray(el);
11926    el.forEach(subEl => {
11927      subEl.setAttribute('aria-disabled', false);
11928    });
11929  }
11930  function onEnterOrSpaceKey(e) {
11931    if (e.keyCode !== 13 && e.keyCode !== 32) return;
11932    const params = swiper.params.a11y;
11933    const targetEl = e.target;
11934    if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) {
11935      if (!e.target.matches((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(swiper.params.pagination.bulletClass))) return;
11936    }
11937    if (swiper.navigation && swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) {
11938      if (!(swiper.isEnd && !swiper.params.loop)) {
11939        swiper.slideNext();
11940      }
11941      if (swiper.isEnd) {
11942        notify(params.lastSlideMessage);
11943      } else {
11944        notify(params.nextSlideMessage);
11945      }
11946    }
11947    if (swiper.navigation && swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl) {
11948      if (!(swiper.isBeginning && !swiper.params.loop)) {
11949        swiper.slidePrev();
11950      }
11951      if (swiper.isBeginning) {
11952        notify(params.firstSlideMessage);
11953      } else {
11954        notify(params.prevSlideMessage);
11955      }
11956    }
11957    if (swiper.pagination && targetEl.matches((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(swiper.params.pagination.bulletClass))) {
11958      targetEl.click();
11959    }
11960  }
11961  function updateNavigation() {
11962    if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;
11963    const {
11964      nextEl,
11965      prevEl
11966    } = swiper.navigation;
11967    if (prevEl) {
11968      if (swiper.isBeginning) {
11969        disableEl(prevEl);
11970        makeElNotFocusable(prevEl);
11971      } else {
11972        enableEl(prevEl);
11973        makeElFocusable(prevEl);
11974      }
11975    }
11976    if (nextEl) {
11977      if (swiper.isEnd) {
11978        disableEl(nextEl);
11979        makeElNotFocusable(nextEl);
11980      } else {
11981        enableEl(nextEl);
11982        makeElFocusable(nextEl);
11983      }
11984    }
11985  }
11986  function hasPagination() {
11987    return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;
11988  }
11989  function hasClickablePagination() {
11990    return hasPagination() && swiper.params.pagination.clickable;
11991  }
11992  function updatePagination() {
11993    const params = swiper.params.a11y;
11994    if (!hasPagination()) return;
11995    swiper.pagination.bullets.forEach(bulletEl => {
11996      if (swiper.params.pagination.clickable) {
11997        makeElFocusable(bulletEl);
11998        if (!swiper.params.pagination.renderBullet) {
11999          addElRole(bulletEl, 'button');
12000          addElLabel(bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.g)(bulletEl) + 1));
12001        }
12002      }
12003      if (bulletEl.matches((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(swiper.params.pagination.bulletActiveClass))) {
12004        bulletEl.setAttribute('aria-current', 'true');
12005      } else {
12006        bulletEl.removeAttribute('aria-current');
12007      }
12008    });
12009  }
12010  const initNavEl = (el, wrapperId, message) => {
12011    makeElFocusable(el);
12012    if (el.tagName !== 'BUTTON') {
12013      addElRole(el, 'button');
12014      el.addEventListener('keydown', onEnterOrSpaceKey);
12015    }
12016    addElLabel(el, message);
12017    addElControls(el, wrapperId);
12018  };
12019  const handlePointerDown = () => {
12020    swiper.a11y.clicked = true;
12021  };
12022  const handlePointerUp = () => {
12023    requestAnimationFrame(() => {
12024      requestAnimationFrame(() => {
12025        if (!swiper.destroyed) {
12026          swiper.a11y.clicked = false;
12027        }
12028      });
12029    });
12030  };
12031  const handleFocus = e => {
12032    if (swiper.a11y.clicked) return;
12033    const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);
12034    if (!slideEl || !swiper.slides.includes(slideEl)) return;
12035    const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;
12036    const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);
12037    if (isActive || isVisible) return;
12038    if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;
12039    if (swiper.isHorizontal()) {
12040      swiper.el.scrollLeft = 0;
12041    } else {
12042      swiper.el.scrollTop = 0;
12043    }
12044    swiper.slideTo(swiper.slides.indexOf(slideEl), 0);
12045  };
12046  const initSlides = () => {
12047    const params = swiper.params.a11y;
12048    if (params.itemRoleDescriptionMessage) {
12049      addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);
12050    }
12051    if (params.slideRole) {
12052      addElRole(swiper.slides, params.slideRole);
12053    }
12054    const slidesLength = swiper.slides.length;
12055    if (params.slideLabelMessage) {
12056      swiper.slides.forEach((slideEl, index) => {
12057        const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10) : index;
12058        const ariaLabelMessage = params.slideLabelMessage.replace(/\{\{index\}\}/, slideIndex + 1).replace(/\{\{slidesLength\}\}/, slidesLength);
12059        addElLabel(slideEl, ariaLabelMessage);
12060      });
12061    }
12062  };
12063  const init = () => {
12064    const params = swiper.params.a11y;
12065    swiper.el.append(liveRegion);
12066
12067    // Container
12068    const containerEl = swiper.el;
12069    if (params.containerRoleDescriptionMessage) {
12070      addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);
12071    }
12072    if (params.containerMessage) {
12073      addElLabel(containerEl, params.containerMessage);
12074    }
12075
12076    // Wrapper
12077    const wrapperEl = swiper.wrapperEl;
12078    const wrapperId = params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`;
12079    const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';
12080    addElId(wrapperEl, wrapperId);
12081    addElLive(wrapperEl, live);
12082
12083    // Slide
12084    initSlides();
12085
12086    // Navigation
12087    let {
12088      nextEl,
12089      prevEl
12090    } = swiper.navigation ? swiper.navigation : {};
12091    nextEl = makeElementsArray(nextEl);
12092    prevEl = makeElementsArray(prevEl);
12093    if (nextEl) {
12094      nextEl.forEach(el => initNavEl(el, wrapperId, params.nextSlideMessage));
12095    }
12096    if (prevEl) {
12097      prevEl.forEach(el => initNavEl(el, wrapperId, params.prevSlideMessage));
12098    }
12099
12100    // Pagination
12101    if (hasClickablePagination()) {
12102      const paginationEl = makeElementsArray(swiper.pagination.el);
12103      paginationEl.forEach(el => {
12104        el.addEventListener('keydown', onEnterOrSpaceKey);
12105      });
12106    }
12107
12108    // Tab focus
12109    swiper.el.addEventListener('focus', handleFocus, true);
12110    swiper.el.addEventListener('pointerdown', handlePointerDown, true);
12111    swiper.el.addEventListener('pointerup', handlePointerUp, true);
12112  };
12113  function destroy() {
12114    if (liveRegion) liveRegion.remove();
12115    let {
12116      nextEl,
12117      prevEl
12118    } = swiper.navigation ? swiper.navigation : {};
12119    nextEl = makeElementsArray(nextEl);
12120    prevEl = makeElementsArray(prevEl);
12121    if (nextEl) {
12122      nextEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));
12123    }
12124    if (prevEl) {
12125      prevEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));
12126    }
12127
12128    // Pagination
12129    if (hasClickablePagination()) {
12130      const paginationEl = makeElementsArray(swiper.pagination.el);
12131      paginationEl.forEach(el => {
12132        el.removeEventListener('keydown', onEnterOrSpaceKey);
12133      });
12134    }
12135
12136    // Tab focus
12137    swiper.el.removeEventListener('focus', handleFocus, true);
12138    swiper.el.removeEventListener('pointerdown', handlePointerDown, true);
12139    swiper.el.removeEventListener('pointerup', handlePointerUp, true);
12140  }
12141  on('beforeInit', () => {
12142    liveRegion = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('span', swiper.params.a11y.notificationClass);
12143    liveRegion.setAttribute('aria-live', 'assertive');
12144    liveRegion.setAttribute('aria-atomic', 'true');
12145  });
12146  on('afterInit', () => {
12147    if (!swiper.params.a11y.enabled) return;
12148    init();
12149  });
12150  on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {
12151    if (!swiper.params.a11y.enabled) return;
12152    initSlides();
12153  });
12154  on('fromEdge toEdge afterInit lock unlock', () => {
12155    if (!swiper.params.a11y.enabled) return;
12156    updateNavigation();
12157  });
12158  on('paginationUpdate', () => {
12159    if (!swiper.params.a11y.enabled) return;
12160    updatePagination();
12161  });
12162  on('destroy', () => {
12163    if (!swiper.params.a11y.enabled) return;
12164    destroy();
12165  });
12166}
12167
12168
12169
12170
12171/***/ }),
12172
vendor: 9,943 bytes, lines 12173-12490
12173/***/ "./node_modules/swiper/modules/autoplay.mjs":
12174/*!**************************************************!*\
12175  !*** ./node_modules/swiper/modules/autoplay.mjs ***!
12176  \**************************************************/
12177/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
12178
12179"use strict";
12180__webpack_require__.r(__webpack_exports__);
12181/* harmony export */ __webpack_require__.d(__webpack_exports__, {
12182/* harmony export */   "default": () => (/* binding */ Autoplay)
12183/* harmony export */ });
12184/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs");
12185
12186
12187/* eslint no-underscore-dangle: "off" */
12188/* eslint no-use-before-define: "off" */
12189function Autoplay(_ref) {
12190  let {
12191    swiper,
12192    extendParams,
12193    on,
12194    emit,
12195    params
12196  } = _ref;
12197  swiper.autoplay = {
12198    running: false,
12199    paused: false,
12200    timeLeft: 0
12201  };
12202  extendParams({
12203    autoplay: {
12204      enabled: false,
12205      delay: 3000,
12206      waitForTransition: true,
12207      disableOnInteraction: false,
12208      stopOnLastSlide: false,
12209      reverseDirection: false,
12210      pauseOnMouseEnter: false
12211    }
12212  });
12213  let timeout;
12214  let raf;
12215  let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;
12216  let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;
12217  let autoplayTimeLeft;
12218  let autoplayStartTime = new Date().getTime();
12219  let wasPaused;
12220  let isTouched;
12221  let pausedByTouch;
12222  let touchStartTimeout;
12223  let slideChanged;
12224  let pausedByInteraction;
12225  let pausedByPointerEnter;
12226  function onTransitionEnd(e) {
12227    if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;
12228    if (e.target !== swiper.wrapperEl) return;
12229    swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);
12230    if (pausedByPointerEnter) {
12231      return;
12232    }
12233    resume();
12234  }
12235  const calcTimeLeft = () => {
12236    if (swiper.destroyed || !swiper.autoplay.running) return;
12237    if (swiper.autoplay.paused) {
12238      wasPaused = true;
12239    } else if (wasPaused) {
12240      autoplayDelayCurrent = autoplayTimeLeft;
12241      wasPaused = false;
12242    }
12243    const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();
12244    swiper.autoplay.timeLeft = timeLeft;
12245    emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);
12246    raf = requestAnimationFrame(() => {
12247      calcTimeLeft();
12248    });
12249  };
12250  const getSlideDelay = () => {
12251    let activeSlideEl;
12252    if (swiper.virtual && swiper.params.virtual.enabled) {
12253      activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0];
12254    } else {
12255      activeSlideEl = swiper.slides[swiper.activeIndex];
12256    }
12257    if (!activeSlideEl) return undefined;
12258    const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);
12259    return currentSlideDelay;
12260  };
12261  const run = delayForce => {
12262    if (swiper.destroyed || !swiper.autoplay.running) return;
12263    cancelAnimationFrame(raf);
12264    calcTimeLeft();
12265    let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;
12266    autoplayDelayTotal = swiper.params.autoplay.delay;
12267    autoplayDelayCurrent = swiper.params.autoplay.delay;
12268    const currentSlideDelay = getSlideDelay();
12269    if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') {
12270      delay = currentSlideDelay;
12271      autoplayDelayTotal = currentSlideDelay;
12272      autoplayDelayCurrent = currentSlideDelay;
12273    }
12274    autoplayTimeLeft = delay;
12275    const speed = swiper.params.speed;
12276    const proceed = () => {
12277      if (!swiper || swiper.destroyed) return;
12278      if (swiper.params.autoplay.reverseDirection) {
12279        if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {
12280          swiper.slidePrev(speed, true, true);
12281          emit('autoplay');
12282        } else if (!swiper.params.autoplay.stopOnLastSlide) {
12283          swiper.slideTo(swiper.slides.length - 1, speed, true, true);
12284          emit('autoplay');
12285        }
12286      } else {
12287        if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {
12288          swiper.slideNext(speed, true, true);
12289          emit('autoplay');
12290        } else if (!swiper.params.autoplay.stopOnLastSlide) {
12291          swiper.slideTo(0, speed, true, true);
12292          emit('autoplay');
12293        }
12294      }
12295      if (swiper.params.cssMode) {
12296        autoplayStartTime = new Date().getTime();
12297        requestAnimationFrame(() => {
12298          run();
12299        });
12300      }
12301    };
12302    if (delay > 0) {
12303      clearTimeout(timeout);
12304      timeout = setTimeout(() => {
12305        proceed();
12306      }, delay);
12307    } else {
12308      requestAnimationFrame(() => {
12309        proceed();
12310      });
12311    }
12312
12313    // eslint-disable-next-line
12314    return delay;
12315  };
12316  const start = () => {
12317    autoplayStartTime = new Date().getTime();
12318    swiper.autoplay.running = true;
12319    run();
12320    emit('autoplayStart');
12321  };
12322  const stop = () => {
12323    swiper.autoplay.running = false;
12324    clearTimeout(timeout);
12325    cancelAnimationFrame(raf);
12326    emit('autoplayStop');
12327  };
12328  const pause = (internal, reset) => {
12329    if (swiper.destroyed || !swiper.autoplay.running) return;
12330    clearTimeout(timeout);
12331    if (!internal) {
12332      pausedByInteraction = true;
12333    }
12334    const proceed = () => {
12335      emit('autoplayPause');
12336      if (swiper.params.autoplay.waitForTransition) {
12337        swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);
12338      } else {
12339        resume();
12340      }
12341    };
12342    swiper.autoplay.paused = true;
12343    if (reset) {
12344      if (slideChanged) {
12345        autoplayTimeLeft = swiper.params.autoplay.delay;
12346      }
12347      slideChanged = false;
12348      proceed();
12349      return;
12350    }
12351    const delay = autoplayTimeLeft || swiper.params.autoplay.delay;
12352    autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);
12353    if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;
12354    if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;
12355    proceed();
12356  };
12357  const resume = () => {
12358    if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;
12359    autoplayStartTime = new Date().getTime();
12360    if (pausedByInteraction) {
12361      pausedByInteraction = false;
12362      run(autoplayTimeLeft);
12363    } else {
12364      run();
12365    }
12366    swiper.autoplay.paused = false;
12367    emit('autoplayResume');
12368  };
12369  const onVisibilityChange = () => {
12370    if (swiper.destroyed || !swiper.autoplay.running) return;
12371    const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)();
12372    if (document.visibilityState === 'hidden') {
12373      pausedByInteraction = true;
12374      pause(true);
12375    }
12376    if (document.visibilityState === 'visible') {
12377      resume();
12378    }
12379  };
12380  const onPointerEnter = e => {
12381    if (e.pointerType !== 'mouse') return;
12382    pausedByInteraction = true;
12383    pausedByPointerEnter = true;
12384    if (swiper.animating || swiper.autoplay.paused) return;
12385    pause(true);
12386  };
12387  const onPointerLeave = e => {
12388    if (e.pointerType !== 'mouse') return;
12389    pausedByPointerEnter = false;
12390    if (swiper.autoplay.paused) {
12391      resume();
12392    }
12393  };
12394  const attachMouseEvents = () => {
12395    if (swiper.params.autoplay.pauseOnMouseEnter) {
12396      swiper.el.addEventListener('pointerenter', onPointerEnter);
12397      swiper.el.addEventListener('pointerleave', onPointerLeave);
12398    }
12399  };
12400  const detachMouseEvents = () => {
12401    swiper.el.removeEventListener('pointerenter', onPointerEnter);
12402    swiper.el.removeEventListener('pointerleave', onPointerLeave);
12403  };
12404  const attachDocumentEvents = () => {
12405    const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)();
12406    document.addEventListener('visibilitychange', onVisibilityChange);
12407  };
12408  const detachDocumentEvents = () => {
12409    const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)();
12410    document.removeEventListener('visibilitychange', onVisibilityChange);
12411  };
12412  on('init', () => {
12413    if (swiper.params.autoplay.enabled) {
12414      attachMouseEvents();
12415      attachDocumentEvents();
12416      start();
12417    }
12418  });
12419  on('destroy', () => {
12420    detachMouseEvents();
12421    detachDocumentEvents();
12422    if (swiper.autoplay.running) {
12423      stop();
12424    }
12425  });
12426  on('_freeModeStaticRelease', () => {
12427    if (pausedByTouch || pausedByInteraction) {
12428      resume();
12429    }
12430  });
12431  on('_freeModeNoMomentumRelease', () => {
12432    if (!swiper.params.autoplay.disableOnInteraction) {
12433      pause(true, true);
12434    } else {
12435      stop();
12436    }
12437  });
12438  on('beforeTransitionStart', (_s, speed, internal) => {
12439    if (swiper.destroyed || !swiper.autoplay.running) return;
12440    if (internal || !swiper.params.autoplay.disableOnInteraction) {
12441      pause(true, true);
12442    } else {
12443      stop();
12444    }
12445  });
12446  on('sliderFirstMove', () => {
12447    if (swiper.destroyed || !swiper.autoplay.running) return;
12448    if (swiper.params.autoplay.disableOnInteraction) {
12449      stop();
12450      return;
12451    }
12452    isTouched = true;
12453    pausedByTouch = false;
12454    pausedByInteraction = false;
12455    touchStartTimeout = setTimeout(() => {
12456      pausedByInteraction = true;
12457      pausedByTouch = true;
12458      pause(true);
12459    }, 200);
12460  });
12461  on('touchEnd', () => {
12462    if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;
12463    clearTimeout(touchStartTimeout);
12464    clearTimeout(timeout);
12465    if (swiper.params.autoplay.disableOnInteraction) {
12466      pausedByTouch = false;
12467      isTouched = false;
12468      return;
12469    }
12470    if (pausedByTouch && swiper.params.cssMode) resume();
12471    pausedByTouch = false;
12472    isTouched = false;
12473  });
12474  on('slideChange', () => {
12475    if (swiper.destroyed || !swiper.autoplay.running) return;
12476    slideChanged = true;
12477  });
12478  Object.assign(swiper.autoplay, {
12479    start,
12480    stop,
12481    pause,
12482    resume
12483  });
12484}
12485
12486
12487
12488
12489/***/ }),
12490
vendor: 7,181 bytes, lines 12491-12693
12491/***/ "./node_modules/swiper/modules/controller.mjs":
12492/*!****************************************************!*\
12493  !*** ./node_modules/swiper/modules/controller.mjs ***!
12494  \****************************************************/
12495/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
12496
12497"use strict";
12498__webpack_require__.r(__webpack_exports__);
12499/* harmony export */ __webpack_require__.d(__webpack_exports__, {
12500/* harmony export */   "default": () => (/* binding */ Controller)
12501/* harmony export */ });
12502/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
12503
12504
12505/* eslint no-bitwise: ["error", { "allow": [">>"] }] */
12506function Controller(_ref) {
12507  let {
12508    swiper,
12509    extendParams,
12510    on
12511  } = _ref;
12512  extendParams({
12513    controller: {
12514      control: undefined,
12515      inverse: false,
12516      by: 'slide' // or 'container'
12517    }
12518  });
12519
12520  swiper.controller = {
12521    control: undefined
12522  };
12523  function LinearSpline(x, y) {
12524    const binarySearch = function search() {
12525      let maxIndex;
12526      let minIndex;
12527      let guess;
12528      return (array, val) => {
12529        minIndex = -1;
12530        maxIndex = array.length;
12531        while (maxIndex - minIndex > 1) {
12532          guess = maxIndex + minIndex >> 1;
12533          if (array[guess] <= val) {
12534            minIndex = guess;
12535          } else {
12536            maxIndex = guess;
12537          }
12538        }
12539        return maxIndex;
12540      };
12541    }();
12542    this.x = x;
12543    this.y = y;
12544    this.lastIndex = x.length - 1;
12545    // Given an x value (x2), return the expected y2 value:
12546    // (x1,y1) is the known point before given value,
12547    // (x3,y3) is the known point after given value.
12548    let i1;
12549    let i3;
12550    this.interpolate = function interpolate(x2) {
12551      if (!x2) return 0;
12552
12553      // Get the indexes of x1 and x3 (the array indexes before and after given x2):
12554      i3 = binarySearch(this.x, x2);
12555      i1 = i3 - 1;
12556
12557      // We have our indexes i1 & i3, so we can calculate already:
12558      // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
12559      return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];
12560    };
12561    return this;
12562  }
12563  function getInterpolateFunction(c) {
12564    swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);
12565  }
12566  function setTranslate(_t, byController) {
12567    const controlled = swiper.controller.control;
12568    let multiplier;
12569    let controlledTranslate;
12570    const Swiper = swiper.constructor;
12571    function setControlledTranslate(c) {
12572      if (c.destroyed) return;
12573
12574      // this will create an Interpolate function based on the snapGrids
12575      // x is the Grid of the scrolled scroller and y will be the controlled scroller
12576      // it makes sense to create this only once and recall it for the interpolation
12577      // the function does a lot of value caching for performance
12578      const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
12579      if (swiper.params.controller.by === 'slide') {
12580        getInterpolateFunction(c);
12581        // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
12582        // but it did not work out
12583        controlledTranslate = -swiper.controller.spline.interpolate(-translate);
12584      }
12585      if (!controlledTranslate || swiper.params.controller.by === 'container') {
12586        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
12587        if (Number.isNaN(multiplier) || !Number.isFinite(multiplier)) {
12588          multiplier = 1;
12589        }
12590        controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();
12591      }
12592      if (swiper.params.controller.inverse) {
12593        controlledTranslate = c.maxTranslate() - controlledTranslate;
12594      }
12595      c.updateProgress(controlledTranslate);
12596      c.setTranslate(controlledTranslate, swiper);
12597      c.updateActiveIndex();
12598      c.updateSlidesClasses();
12599    }
12600    if (Array.isArray(controlled)) {
12601      for (let i = 0; i < controlled.length; i += 1) {
12602        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
12603          setControlledTranslate(controlled[i]);
12604        }
12605      }
12606    } else if (controlled instanceof Swiper && byController !== controlled) {
12607      setControlledTranslate(controlled);
12608    }
12609  }
12610  function setTransition(duration, byController) {
12611    const Swiper = swiper.constructor;
12612    const controlled = swiper.controller.control;
12613    let i;
12614    function setControlledTransition(c) {
12615      if (c.destroyed) return;
12616      c.setTransition(duration, swiper);
12617      if (duration !== 0) {
12618        c.transitionStart();
12619        if (c.params.autoHeight) {
12620          (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.n)(() => {
12621            c.updateAutoHeight();
12622          });
12623        }
12624        (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(c.wrapperEl, () => {
12625          if (!controlled) return;
12626          c.transitionEnd();
12627        });
12628      }
12629    }
12630    if (Array.isArray(controlled)) {
12631      for (i = 0; i < controlled.length; i += 1) {
12632        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
12633          setControlledTransition(controlled[i]);
12634        }
12635      }
12636    } else if (controlled instanceof Swiper && byController !== controlled) {
12637      setControlledTransition(controlled);
12638    }
12639  }
12640  function removeSpline() {
12641    if (!swiper.controller.control) return;
12642    if (swiper.controller.spline) {
12643      swiper.controller.spline = undefined;
12644      delete swiper.controller.spline;
12645    }
12646  }
12647  on('beforeInit', () => {
12648    if (typeof window !== 'undefined' && (
12649    // eslint-disable-line
12650    typeof swiper.params.controller.control === 'string' || swiper.params.controller.control instanceof HTMLElement)) {
12651      const controlElement = document.querySelector(swiper.params.controller.control);
12652      if (controlElement && controlElement.swiper) {
12653        swiper.controller.control = controlElement.swiper;
12654      } else if (controlElement) {
12655        const onControllerSwiper = e => {
12656          swiper.controller.control = e.detail[0];
12657          swiper.update();
12658          controlElement.removeEventListener('init', onControllerSwiper);
12659        };
12660        controlElement.addEventListener('init', onControllerSwiper);
12661      }
12662      return;
12663    }
12664    swiper.controller.control = swiper.params.controller.control;
12665  });
12666  on('update', () => {
12667    removeSpline();
12668  });
12669  on('resize', () => {
12670    removeSpline();
12671  });
12672  on('observerUpdate', () => {
12673    removeSpline();
12674  });
12675  on('setTranslate', (_s, translate, byController) => {
12676    if (!swiper.controller.control || swiper.controller.control.destroyed) return;
12677    swiper.controller.setTranslate(translate, byController);
12678  });
12679  on('setTransition', (_s, duration, byController) => {
12680    if (!swiper.controller.control || swiper.controller.control.destroyed) return;
12681    swiper.controller.setTransition(duration, byController);
12682  });
12683  Object.assign(swiper.controller, {
12684    setTranslate,
12685    setTransition
12686  });
12687}
12688
12689
12690
12691
12692/***/ }),
12693
vendor: 5,910 bytes, lines 12694-12838
12694/***/ "./node_modules/swiper/modules/effect-cards.mjs":
12695/*!******************************************************!*\
12696  !*** ./node_modules/swiper/modules/effect-cards.mjs ***!
12697  \******************************************************/
12698/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
12699
12700"use strict";
12701__webpack_require__.r(__webpack_exports__);
12702/* harmony export */ __webpack_require__.d(__webpack_exports__, {
12703/* harmony export */   "default": () => (/* binding */ EffectCards)
12704/* harmony export */ });
12705/* harmony import */ var _shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/create-shadow.mjs */ "./node_modules/swiper/shared/create-shadow.mjs");
12706/* harmony import */ var _shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/effect-init.mjs */ "./node_modules/swiper/shared/effect-init.mjs");
12707/* harmony import */ var _shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/effect-target.mjs */ "./node_modules/swiper/shared/effect-target.mjs");
12708/* harmony import */ var _shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/effect-virtual-transition-end.mjs */ "./node_modules/swiper/shared/effect-virtual-transition-end.mjs");
12709/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
12710
12711
12712
12713
12714
12715
12716function EffectCards(_ref) {
12717  let {
12718    swiper,
12719    extendParams,
12720    on
12721  } = _ref;
12722  extendParams({
12723    cardsEffect: {
12724      slideShadows: true,
12725      rotate: true,
12726      perSlideRotate: 2,
12727      perSlideOffset: 8
12728    }
12729  });
12730  const setTranslate = () => {
12731    const {
12732      slides,
12733      activeIndex,
12734      rtlTranslate: rtl
12735    } = swiper;
12736    const params = swiper.params.cardsEffect;
12737    const {
12738      startTranslate,
12739      isTouched
12740    } = swiper.touchEventsData;
12741    const currentTranslate = rtl ? -swiper.translate : swiper.translate;
12742    for (let i = 0; i < slides.length; i += 1) {
12743      const slideEl = slides[i];
12744      const slideProgress = slideEl.progress;
12745      const progress = Math.min(Math.max(slideProgress, -4), 4);
12746      let offset = slideEl.swiperSlideOffset;
12747      if (swiper.params.centeredSlides && !swiper.params.cssMode) {
12748        swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`;
12749      }
12750      if (swiper.params.centeredSlides && swiper.params.cssMode) {
12751        offset -= slides[0].swiperSlideOffset;
12752      }
12753      let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;
12754      let tY = 0;
12755      const tZ = -100 * Math.abs(progress);
12756      let scale = 1;
12757      let rotate = -params.perSlideRotate * progress;
12758      let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;
12759      const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;
12760      const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;
12761      const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;
12762      if (isSwipeToNext || isSwipeToPrev) {
12763        const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;
12764        rotate += -28 * progress * subProgress;
12765        scale += -0.5 * subProgress;
12766        tXAdd += 96 * subProgress;
12767        tY = `${-25 * subProgress * Math.abs(progress)}%`;
12768      }
12769      if (progress < 0) {
12770        // next
12771        tX = `calc(${tX}px ${rtl ? '-' : '+'} (${tXAdd * Math.abs(progress)}%))`;
12772      } else if (progress > 0) {
12773        // prev
12774        tX = `calc(${tX}px ${rtl ? '-' : '+'} (-${tXAdd * Math.abs(progress)}%))`;
12775      } else {
12776        tX = `${tX}px`;
12777      }
12778      if (!swiper.isHorizontal()) {
12779        const prevY = tY;
12780        tY = tX;
12781        tX = prevY;
12782      }
12783      const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;
12784
12785      /* eslint-disable */
12786      const transform = `
12787        translate3d(${tX}, ${tY}, ${tZ}px)
12788        rotateZ(${params.rotate ? rtl ? -rotate : rotate : 0}deg)
12789        scale(${scaleString})
12790      `;
12791      /* eslint-enable */
12792
12793      if (params.slideShadows) {
12794        // Set shadows
12795        let shadowEl = slideEl.querySelector('.swiper-slide-shadow');
12796        if (!shadowEl) {
12797          shadowEl = (0,_shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('cards', slideEl);
12798        }
12799        if (shadowEl) shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);
12800      }
12801      slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;
12802      const targetEl = (0,_shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__.e)(params, slideEl);
12803      targetEl.style.transform = transform;
12804    }
12805  };
12806  const setTransition = duration => {
12807    const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_4__.l)(slideEl));
12808    transformElements.forEach(el => {
12809      el.style.transitionDuration = `${duration}ms`;
12810      el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {
12811        shadowEl.style.transitionDuration = `${duration}ms`;
12812      });
12813    });
12814    (0,_shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_3__.e)({
12815      swiper,
12816      duration,
12817      transformElements
12818    });
12819  };
12820  (0,_shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__.e)({
12821    effect: 'cards',
12822    swiper,
12823    on,
12824    setTranslate,
12825    setTransition,
12826    perspective: () => true,
12827    overwriteParams: () => ({
12828      watchSlidesProgress: true,
12829      virtualTranslate: !swiper.params.cssMode
12830    })
12831  });
12832}
12833
12834
12835
12836
12837/***/ }),
12838
vendor: 5,847 bytes, lines 12839-12968
12839/***/ "./node_modules/swiper/modules/effect-coverflow.mjs":
12840/*!**********************************************************!*\
12841  !*** ./node_modules/swiper/modules/effect-coverflow.mjs ***!
12842  \**********************************************************/
12843/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
12844
12845"use strict";
12846__webpack_require__.r(__webpack_exports__);
12847/* harmony export */ __webpack_require__.d(__webpack_exports__, {
12848/* harmony export */   "default": () => (/* binding */ EffectCoverflow)
12849/* harmony export */ });
12850/* harmony import */ var _shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/create-shadow.mjs */ "./node_modules/swiper/shared/create-shadow.mjs");
12851/* harmony import */ var _shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/effect-init.mjs */ "./node_modules/swiper/shared/effect-init.mjs");
12852/* harmony import */ var _shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/effect-target.mjs */ "./node_modules/swiper/shared/effect-target.mjs");
12853/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
12854
12855
12856
12857
12858
12859function EffectCoverflow(_ref) {
12860  let {
12861    swiper,
12862    extendParams,
12863    on
12864  } = _ref;
12865  extendParams({
12866    coverflowEffect: {
12867      rotate: 50,
12868      stretch: 0,
12869      depth: 100,
12870      scale: 1,
12871      modifier: 1,
12872      slideShadows: true
12873    }
12874  });
12875  const setTranslate = () => {
12876    const {
12877      width: swiperWidth,
12878      height: swiperHeight,
12879      slides,
12880      slidesSizesGrid
12881    } = swiper;
12882    const params = swiper.params.coverflowEffect;
12883    const isHorizontal = swiper.isHorizontal();
12884    const transform = swiper.translate;
12885    const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;
12886    const rotate = isHorizontal ? params.rotate : -params.rotate;
12887    const translate = params.depth;
12888    // Each slide offset from center
12889    for (let i = 0, length = slides.length; i < length; i += 1) {
12890      const slideEl = slides[i];
12891      const slideSize = slidesSizesGrid[i];
12892      const slideOffset = slideEl.swiperSlideOffset;
12893      const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;
12894      const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;
12895      let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
12896      let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
12897      // var rotateZ = 0
12898      let translateZ = -translate * Math.abs(offsetMultiplier);
12899      let stretch = params.stretch;
12900      // Allow percentage to make a relative stretch for responsive sliders
12901      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {
12902        stretch = parseFloat(params.stretch) / 100 * slideSize;
12903      }
12904      let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;
12905      let translateX = isHorizontal ? stretch * offsetMultiplier : 0;
12906      let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);
12907
12908      // Fix for ultra small values
12909      if (Math.abs(translateX) < 0.001) translateX = 0;
12910      if (Math.abs(translateY) < 0.001) translateY = 0;
12911      if (Math.abs(translateZ) < 0.001) translateZ = 0;
12912      if (Math.abs(rotateY) < 0.001) rotateY = 0;
12913      if (Math.abs(rotateX) < 0.001) rotateX = 0;
12914      if (Math.abs(scale) < 0.001) scale = 0;
12915      if (swiper.browser && swiper.browser.isSafari) {
12916        if (Math.abs(rotateY) / 90 % 2 === 1) {
12917          rotateY += 0.001;
12918        }
12919        if (Math.abs(rotateX) / 90 % 2 === 1) {
12920          rotateX += 0.001;
12921        }
12922      }
12923      const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;
12924      const targetEl = (0,_shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__.e)(params, slideEl);
12925      targetEl.style.transform = slideTransform;
12926      slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
12927      if (params.slideShadows) {
12928        // Set shadows
12929        let shadowBeforeEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');
12930        let shadowAfterEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');
12931        if (!shadowBeforeEl) {
12932          shadowBeforeEl = (0,_shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('coverflow', slideEl, isHorizontal ? 'left' : 'top');
12933        }
12934        if (!shadowAfterEl) {
12935          shadowAfterEl = (0,_shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('coverflow', slideEl, isHorizontal ? 'right' : 'bottom');
12936        }
12937        if (shadowBeforeEl) shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
12938        if (shadowAfterEl) shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;
12939      }
12940    }
12941  };
12942  const setTransition = duration => {
12943    const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_3__.l)(slideEl));
12944    transformElements.forEach(el => {
12945      el.style.transitionDuration = `${duration}ms`;
12946      el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {
12947        shadowEl.style.transitionDuration = `${duration}ms`;
12948      });
12949    });
12950  };
12951  (0,_shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__.e)({
12952    effect: 'coverflow',
12953    swiper,
12954    on,
12955    setTranslate,
12956    setTransition,
12957    perspective: () => true,
12958    overwriteParams: () => ({
12959      watchSlidesProgress: true
12960    })
12961  });
12962}
12963
12964
12965
12966
12967/***/ }),
12968
vendor: 6,469 bytes, lines 12969-13136
12969/***/ "./node_modules/swiper/modules/effect-creative.mjs":
12970/*!*********************************************************!*\
12971  !*** ./node_modules/swiper/modules/effect-creative.mjs ***!
12972  \*********************************************************/
12973/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
12974
12975"use strict";
12976__webpack_require__.r(__webpack_exports__);
12977/* harmony export */ __webpack_require__.d(__webpack_exports__, {
12978/* harmony export */   "default": () => (/* binding */ EffectCreative)
12979/* harmony export */ });
12980/* harmony import */ var _shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/create-shadow.mjs */ "./node_modules/swiper/shared/create-shadow.mjs");
12981/* harmony import */ var _shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/effect-init.mjs */ "./node_modules/swiper/shared/effect-init.mjs");
12982/* harmony import */ var _shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/effect-target.mjs */ "./node_modules/swiper/shared/effect-target.mjs");
12983/* harmony import */ var _shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/effect-virtual-transition-end.mjs */ "./node_modules/swiper/shared/effect-virtual-transition-end.mjs");
12984/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
12985
12986
12987
12988
12989
12990
12991function EffectCreative(_ref) {
12992  let {
12993    swiper,
12994    extendParams,
12995    on
12996  } = _ref;
12997  extendParams({
12998    creativeEffect: {
12999      limitProgress: 1,
13000      shadowPerProgress: false,
13001      progressMultiplier: 1,
13002      perspective: true,
13003      prev: {
13004        translate: [0, 0, 0],
13005        rotate: [0, 0, 0],
13006        opacity: 1,
13007        scale: 1
13008      },
13009      next: {
13010        translate: [0, 0, 0],
13011        rotate: [0, 0, 0],
13012        opacity: 1,
13013        scale: 1
13014      }
13015    }
13016  });
13017  const getTranslateValue = value => {
13018    if (typeof value === 'string') return value;
13019    return `${value}px`;
13020  };
13021  const setTranslate = () => {
13022    const {
13023      slides,
13024      wrapperEl,
13025      slidesSizesGrid
13026    } = swiper;
13027    const params = swiper.params.creativeEffect;
13028    const {
13029      progressMultiplier: multiplier
13030    } = params;
13031    const isCenteredSlides = swiper.params.centeredSlides;
13032    if (isCenteredSlides) {
13033      const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;
13034      wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`;
13035    }
13036    for (let i = 0; i < slides.length; i += 1) {
13037      const slideEl = slides[i];
13038      const slideProgress = slideEl.progress;
13039      const progress = Math.min(Math.max(slideEl.progress, -params.limitProgress), params.limitProgress);
13040      let originalProgress = progress;
13041      if (!isCenteredSlides) {
13042        originalProgress = Math.min(Math.max(slideEl.originalProgress, -params.limitProgress), params.limitProgress);
13043      }
13044      const offset = slideEl.swiperSlideOffset;
13045      const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];
13046      const r = [0, 0, 0];
13047      let custom = false;
13048      if (!swiper.isHorizontal()) {
13049        t[1] = t[0];
13050        t[0] = 0;
13051      }
13052      let data = {
13053        translate: [0, 0, 0],
13054        rotate: [0, 0, 0],
13055        scale: 1,
13056        opacity: 1
13057      };
13058      if (progress < 0) {
13059        data = params.next;
13060        custom = true;
13061      } else if (progress > 0) {
13062        data = params.prev;
13063        custom = true;
13064      }
13065      // set translate
13066      t.forEach((value, index) => {
13067        t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;
13068      });
13069      // set rotates
13070      r.forEach((value, index) => {
13071        let val = data.rotate[index] * Math.abs(progress * multiplier);
13072        if (swiper.browser && swiper.browser.isSafari && Math.abs(val) / 90 % 2 === 1) {
13073          val += 0.001;
13074        }
13075        r[index] = val;
13076      });
13077      slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;
13078      const translateString = t.join(', ');
13079      const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;
13080      const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;
13081      const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;
13082      const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;
13083
13084      // Set shadows
13085      if (custom && data.shadow || !custom) {
13086        let shadowEl = slideEl.querySelector('.swiper-slide-shadow');
13087        if (!shadowEl && data.shadow) {
13088          shadowEl = (0,_shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('creative', slideEl);
13089        }
13090        if (shadowEl) {
13091          const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;
13092          shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);
13093        }
13094      }
13095      const targetEl = (0,_shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__.e)(params, slideEl);
13096      targetEl.style.transform = transform;
13097      targetEl.style.opacity = opacityString;
13098      if (data.origin) {
13099        targetEl.style.transformOrigin = data.origin;
13100      }
13101    }
13102  };
13103  const setTransition = duration => {
13104    const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_4__.l)(slideEl));
13105    transformElements.forEach(el => {
13106      el.style.transitionDuration = `${duration}ms`;
13107      el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {
13108        shadowEl.style.transitionDuration = `${duration}ms`;
13109      });
13110    });
13111    (0,_shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_3__.e)({
13112      swiper,
13113      duration,
13114      transformElements,
13115      allSlides: true
13116    });
13117  };
13118  (0,_shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__.e)({
13119    effect: 'creative',
13120    swiper,
13121    on,
13122    setTranslate,
13123    setTransition,
13124    perspective: () => swiper.params.creativeEffect.perspective,
13125    overwriteParams: () => ({
13126      watchSlidesProgress: true,
13127      virtualTranslate: !swiper.params.cssMode
13128    })
13129  });
13130}
13131
13132
13133
13134
13135/***/ }),
13136
vendor: 7,671 bytes, lines 13137-13329
13137/***/ "./node_modules/swiper/modules/effect-cube.mjs":
13138/*!*****************************************************!*\
13139  !*** ./node_modules/swiper/modules/effect-cube.mjs ***!
13140  \*****************************************************/
13141/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
13142
13143"use strict";
13144__webpack_require__.r(__webpack_exports__);
13145/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13146/* harmony export */   "default": () => (/* binding */ EffectCube)
13147/* harmony export */ });
13148/* harmony import */ var _shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/effect-init.mjs */ "./node_modules/swiper/shared/effect-init.mjs");
13149/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
13150
13151
13152
13153function EffectCube(_ref) {
13154  let {
13155    swiper,
13156    extendParams,
13157    on
13158  } = _ref;
13159  extendParams({
13160    cubeEffect: {
13161      slideShadows: true,
13162      shadow: true,
13163      shadowOffset: 20,
13164      shadowScale: 0.94
13165    }
13166  });
13167  const createSlideShadows = (slideEl, progress, isHorizontal) => {
13168    let shadowBefore = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');
13169    let shadowAfter = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');
13170    if (!shadowBefore) {
13171      shadowBefore = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`.split(' '));
13172      slideEl.append(shadowBefore);
13173    }
13174    if (!shadowAfter) {
13175      shadowAfter = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`.split(' '));
13176      slideEl.append(shadowAfter);
13177    }
13178    if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);
13179    if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);
13180  };
13181  const recreateShadows = () => {
13182    // create new ones
13183    const isHorizontal = swiper.isHorizontal();
13184    swiper.slides.forEach(slideEl => {
13185      const progress = Math.max(Math.min(slideEl.progress, 1), -1);
13186      createSlideShadows(slideEl, progress, isHorizontal);
13187    });
13188  };
13189  const setTranslate = () => {
13190    const {
13191      el,
13192      wrapperEl,
13193      slides,
13194      width: swiperWidth,
13195      height: swiperHeight,
13196      rtlTranslate: rtl,
13197      size: swiperSize,
13198      browser
13199    } = swiper;
13200    const params = swiper.params.cubeEffect;
13201    const isHorizontal = swiper.isHorizontal();
13202    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
13203    let wrapperRotate = 0;
13204    let cubeShadowEl;
13205    if (params.shadow) {
13206      if (isHorizontal) {
13207        cubeShadowEl = swiper.wrapperEl.querySelector('.swiper-cube-shadow');
13208        if (!cubeShadowEl) {
13209          cubeShadowEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', 'swiper-cube-shadow');
13210          swiper.wrapperEl.append(cubeShadowEl);
13211        }
13212        cubeShadowEl.style.height = `${swiperWidth}px`;
13213      } else {
13214        cubeShadowEl = el.querySelector('.swiper-cube-shadow');
13215        if (!cubeShadowEl) {
13216          cubeShadowEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', 'swiper-cube-shadow');
13217          el.append(cubeShadowEl);
13218        }
13219      }
13220    }
13221    for (let i = 0; i < slides.length; i += 1) {
13222      const slideEl = slides[i];
13223      let slideIndex = i;
13224      if (isVirtual) {
13225        slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10);
13226      }
13227      let slideAngle = slideIndex * 90;
13228      let round = Math.floor(slideAngle / 360);
13229      if (rtl) {
13230        slideAngle = -slideAngle;
13231        round = Math.floor(-slideAngle / 360);
13232      }
13233      const progress = Math.max(Math.min(slideEl.progress, 1), -1);
13234      let tx = 0;
13235      let ty = 0;
13236      let tz = 0;
13237      if (slideIndex % 4 === 0) {
13238        tx = -round * 4 * swiperSize;
13239        tz = 0;
13240      } else if ((slideIndex - 1) % 4 === 0) {
13241        tx = 0;
13242        tz = -round * 4 * swiperSize;
13243      } else if ((slideIndex - 2) % 4 === 0) {
13244        tx = swiperSize + round * 4 * swiperSize;
13245        tz = swiperSize;
13246      } else if ((slideIndex - 3) % 4 === 0) {
13247        tx = -swiperSize;
13248        tz = 3 * swiperSize + swiperSize * 4 * round;
13249      }
13250      if (rtl) {
13251        tx = -tx;
13252      }
13253      if (!isHorizontal) {
13254        ty = tx;
13255        tx = 0;
13256      }
13257      const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;
13258      if (progress <= 1 && progress > -1) {
13259        wrapperRotate = slideIndex * 90 + progress * 90;
13260        if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;
13261        if (swiper.browser && swiper.browser.isSafari && Math.abs(wrapperRotate) / 90 % 2 === 1) {
13262          wrapperRotate += 0.001;
13263        }
13264      }
13265      slideEl.style.transform = transform;
13266      if (params.slideShadows) {
13267        createSlideShadows(slideEl, progress, isHorizontal);
13268      }
13269    }
13270    wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`;
13271    wrapperEl.style['-webkit-transform-origin'] = `50% 50% -${swiperSize / 2}px`;
13272    if (params.shadow) {
13273      if (isHorizontal) {
13274        cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(89.99deg) rotateZ(0deg) scale(${params.shadowScale})`;
13275      } else {
13276        const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
13277        const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);
13278        const scale1 = params.shadowScale;
13279        const scale2 = params.shadowScale / multiplier;
13280        const offset = params.shadowOffset;
13281        cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-89.99deg)`;
13282      }
13283    }
13284    const zFactor = (browser.isSafari || browser.isWebView) && browser.needPerspectiveFix ? -swiperSize / 2 : 0;
13285    wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`;
13286    wrapperEl.style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);
13287  };
13288  const setTransition = duration => {
13289    const {
13290      el,
13291      slides
13292    } = swiper;
13293    slides.forEach(slideEl => {
13294      slideEl.style.transitionDuration = `${duration}ms`;
13295      slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(subEl => {
13296        subEl.style.transitionDuration = `${duration}ms`;
13297      });
13298    });
13299    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
13300      const shadowEl = el.querySelector('.swiper-cube-shadow');
13301      if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`;
13302    }
13303  };
13304  (0,_shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_0__.e)({
13305    effect: 'cube',
13306    swiper,
13307    on,
13308    setTranslate,
13309    setTransition,
13310    recreateShadows,
13311    getEffectParams: () => swiper.params.cubeEffect,
13312    perspective: () => true,
13313    overwriteParams: () => ({
13314      slidesPerView: 1,
13315      slidesPerGroup: 1,
13316      watchSlidesProgress: true,
13317      resistanceRatio: 0,
13318      spaceBetween: 0,
13319      centeredSlides: false,
13320      virtualTranslate: true
13321    })
13322  });
13323}
13324
13325
13326
13327
13328/***/ }),
13329
vendor: 3,083 bytes, lines 13330-13414
13330/***/ "./node_modules/swiper/modules/effect-fade.mjs":
13331/*!*****************************************************!*\
13332  !*** ./node_modules/swiper/modules/effect-fade.mjs ***!
13333  \*****************************************************/
13334/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
13335
13336"use strict";
13337__webpack_require__.r(__webpack_exports__);
13338/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13339/* harmony export */   "default": () => (/* binding */ EffectFade)
13340/* harmony export */ });
13341/* harmony import */ var _shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/effect-init.mjs */ "./node_modules/swiper/shared/effect-init.mjs");
13342/* harmony import */ var _shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/effect-target.mjs */ "./node_modules/swiper/shared/effect-target.mjs");
13343/* harmony import */ var _shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/effect-virtual-transition-end.mjs */ "./node_modules/swiper/shared/effect-virtual-transition-end.mjs");
13344/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
13345
13346
13347
13348
13349
13350function EffectFade(_ref) {
13351  let {
13352    swiper,
13353    extendParams,
13354    on
13355  } = _ref;
13356  extendParams({
13357    fadeEffect: {
13358      crossFade: false
13359    }
13360  });
13361  const setTranslate = () => {
13362    const {
13363      slides
13364    } = swiper;
13365    const params = swiper.params.fadeEffect;
13366    for (let i = 0; i < slides.length; i += 1) {
13367      const slideEl = swiper.slides[i];
13368      const offset = slideEl.swiperSlideOffset;
13369      let tx = -offset;
13370      if (!swiper.params.virtualTranslate) tx -= swiper.translate;
13371      let ty = 0;
13372      if (!swiper.isHorizontal()) {
13373        ty = tx;
13374        tx = 0;
13375      }
13376      const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(slideEl.progress), 0) : 1 + Math.min(Math.max(slideEl.progress, -1), 0);
13377      const targetEl = (0,_shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(params, slideEl);
13378      targetEl.style.opacity = slideOpacity;
13379      targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`;
13380    }
13381  };
13382  const setTransition = duration => {
13383    const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_3__.l)(slideEl));
13384    transformElements.forEach(el => {
13385      el.style.transitionDuration = `${duration}ms`;
13386    });
13387    (0,_shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_2__.e)({
13388      swiper,
13389      duration,
13390      transformElements,
13391      allSlides: true
13392    });
13393  };
13394  (0,_shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_0__.e)({
13395    effect: 'fade',
13396    swiper,
13397    on,
13398    setTranslate,
13399    setTransition,
13400    overwriteParams: () => ({
13401      slidesPerView: 1,
13402      slidesPerGroup: 1,
13403      watchSlidesProgress: true,
13404      spaceBetween: 0,
13405      virtualTranslate: !swiper.params.cssMode
13406    })
13407  });
13408}
13409
13410
13411
13412
13413/***/ }),
13414
vendor: 5,445 bytes, lines 13415-13552
13415/***/ "./node_modules/swiper/modules/effect-flip.mjs":
13416/*!*****************************************************!*\
13417  !*** ./node_modules/swiper/modules/effect-flip.mjs ***!
13418  \*****************************************************/
13419/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
13420
13421"use strict";
13422__webpack_require__.r(__webpack_exports__);
13423/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13424/* harmony export */   "default": () => (/* binding */ EffectFlip)
13425/* harmony export */ });
13426/* harmony import */ var _shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/create-shadow.mjs */ "./node_modules/swiper/shared/create-shadow.mjs");
13427/* harmony import */ var _shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/effect-init.mjs */ "./node_modules/swiper/shared/effect-init.mjs");
13428/* harmony import */ var _shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/effect-target.mjs */ "./node_modules/swiper/shared/effect-target.mjs");
13429/* harmony import */ var _shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/effect-virtual-transition-end.mjs */ "./node_modules/swiper/shared/effect-virtual-transition-end.mjs");
13430/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
13431
13432
13433
13434
13435
13436
13437function EffectFlip(_ref) {
13438  let {
13439    swiper,
13440    extendParams,
13441    on
13442  } = _ref;
13443  extendParams({
13444    flipEffect: {
13445      slideShadows: true,
13446      limitRotation: true
13447    }
13448  });
13449  const createSlideShadows = (slideEl, progress) => {
13450    let shadowBefore = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');
13451    let shadowAfter = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');
13452    if (!shadowBefore) {
13453      shadowBefore = (0,_shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('flip', slideEl, swiper.isHorizontal() ? 'left' : 'top');
13454    }
13455    if (!shadowAfter) {
13456      shadowAfter = (0,_shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('flip', slideEl, swiper.isHorizontal() ? 'right' : 'bottom');
13457    }
13458    if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);
13459    if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);
13460  };
13461  const recreateShadows = () => {
13462    // Set shadows
13463    swiper.params.flipEffect;
13464    swiper.slides.forEach(slideEl => {
13465      let progress = slideEl.progress;
13466      if (swiper.params.flipEffect.limitRotation) {
13467        progress = Math.max(Math.min(slideEl.progress, 1), -1);
13468      }
13469      createSlideShadows(slideEl, progress);
13470    });
13471  };
13472  const setTranslate = () => {
13473    const {
13474      slides,
13475      rtlTranslate: rtl
13476    } = swiper;
13477    const params = swiper.params.flipEffect;
13478    for (let i = 0; i < slides.length; i += 1) {
13479      const slideEl = slides[i];
13480      let progress = slideEl.progress;
13481      if (swiper.params.flipEffect.limitRotation) {
13482        progress = Math.max(Math.min(slideEl.progress, 1), -1);
13483      }
13484      const offset = slideEl.swiperSlideOffset;
13485      const rotate = -180 * progress;
13486      let rotateY = rotate;
13487      let rotateX = 0;
13488      let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;
13489      let ty = 0;
13490      if (!swiper.isHorizontal()) {
13491        ty = tx;
13492        tx = 0;
13493        rotateX = -rotateY;
13494        rotateY = 0;
13495      } else if (rtl) {
13496        rotateY = -rotateY;
13497      }
13498      if (swiper.browser && swiper.browser.isSafari) {
13499        if (Math.abs(rotateY) / 90 % 2 === 1) {
13500          rotateY += 0.001;
13501        }
13502        if (Math.abs(rotateX) / 90 % 2 === 1) {
13503          rotateX += 0.001;
13504        }
13505      }
13506      slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
13507      if (params.slideShadows) {
13508        createSlideShadows(slideEl, progress);
13509      }
13510      const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;
13511      const targetEl = (0,_shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__.e)(params, slideEl);
13512      targetEl.style.transform = transform;
13513    }
13514  };
13515  const setTransition = duration => {
13516    const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_4__.l)(slideEl));
13517    transformElements.forEach(el => {
13518      el.style.transitionDuration = `${duration}ms`;
13519      el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {
13520        shadowEl.style.transitionDuration = `${duration}ms`;
13521      });
13522    });
13523    (0,_shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_3__.e)({
13524      swiper,
13525      duration,
13526      transformElements
13527    });
13528  };
13529  (0,_shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__.e)({
13530    effect: 'flip',
13531    swiper,
13532    on,
13533    setTranslate,
13534    setTransition,
13535    recreateShadows,
13536    getEffectParams: () => swiper.params.flipEffect,
13537    perspective: () => true,
13538    overwriteParams: () => ({
13539      slidesPerView: 1,
13540      slidesPerGroup: 1,
13541      watchSlidesProgress: true,
13542      spaceBetween: 0,
13543      virtualTranslate: !swiper.params.cssMode
13544    })
13545  });
13546}
13547
13548
13549
13550
13551/***/ }),
13552
vendor: 9,241 bytes, lines 13553-13805
13553/***/ "./node_modules/swiper/modules/free-mode.mjs":
13554/*!***************************************************!*\
13555  !*** ./node_modules/swiper/modules/free-mode.mjs ***!
13556  \***************************************************/
13557/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
13558
13559"use strict";
13560__webpack_require__.r(__webpack_exports__);
13561/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13562/* harmony export */   "default": () => (/* binding */ freeMode)
13563/* harmony export */ });
13564/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
13565
13566
13567function freeMode(_ref) {
13568  let {
13569    swiper,
13570    extendParams,
13571    emit,
13572    once
13573  } = _ref;
13574  extendParams({
13575    freeMode: {
13576      enabled: false,
13577      momentum: true,
13578      momentumRatio: 1,
13579      momentumBounce: true,
13580      momentumBounceRatio: 1,
13581      momentumVelocityRatio: 1,
13582      sticky: false,
13583      minimumVelocity: 0.02
13584    }
13585  });
13586  function onTouchStart() {
13587    if (swiper.params.cssMode) return;
13588    const translate = swiper.getTranslate();
13589    swiper.setTranslate(translate);
13590    swiper.setTransition(0);
13591    swiper.touchEventsData.velocities.length = 0;
13592    swiper.freeMode.onTouchEnd({
13593      currentPos: swiper.rtl ? swiper.translate : -swiper.translate
13594    });
13595  }
13596  function onTouchMove() {
13597    if (swiper.params.cssMode) return;
13598    const {
13599      touchEventsData: data,
13600      touches
13601    } = swiper;
13602    // Velocity
13603    if (data.velocities.length === 0) {
13604      data.velocities.push({
13605        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
13606        time: data.touchStartTime
13607      });
13608    }
13609    data.velocities.push({
13610      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
13611      time: (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.d)()
13612    });
13613  }
13614  function onTouchEnd(_ref2) {
13615    let {
13616      currentPos
13617    } = _ref2;
13618    if (swiper.params.cssMode) return;
13619    const {
13620      params,
13621      wrapperEl,
13622      rtlTranslate: rtl,
13623      snapGrid,
13624      touchEventsData: data
13625    } = swiper;
13626    // Time diff
13627    const touchEndTime = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.d)();
13628    const timeDiff = touchEndTime - data.touchStartTime;
13629    if (currentPos < -swiper.minTranslate()) {
13630      swiper.slideTo(swiper.activeIndex);
13631      return;
13632    }
13633    if (currentPos > -swiper.maxTranslate()) {
13634      if (swiper.slides.length < snapGrid.length) {
13635        swiper.slideTo(snapGrid.length - 1);
13636      } else {
13637        swiper.slideTo(swiper.slides.length - 1);
13638      }
13639      return;
13640    }
13641    if (params.freeMode.momentum) {
13642      if (data.velocities.length > 1) {
13643        const lastMoveEvent = data.velocities.pop();
13644        const velocityEvent = data.velocities.pop();
13645        const distance = lastMoveEvent.position - velocityEvent.position;
13646        const time = lastMoveEvent.time - velocityEvent.time;
13647        swiper.velocity = distance / time;
13648        swiper.velocity /= 2;
13649        if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {
13650          swiper.velocity = 0;
13651        }
13652        // this implies that the user stopped moving a finger then released.
13653        // There would be no events with distance zero, so the last event is stale.
13654        if (time > 150 || (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.d)() - lastMoveEvent.time > 300) {
13655          swiper.velocity = 0;
13656        }
13657      } else {
13658        swiper.velocity = 0;
13659      }
13660      swiper.velocity *= params.freeMode.momentumVelocityRatio;
13661      data.velocities.length = 0;
13662      let momentumDuration = 1000 * params.freeMode.momentumRatio;
13663      const momentumDistance = swiper.velocity * momentumDuration;
13664      let newPosition = swiper.translate + momentumDistance;
13665      if (rtl) newPosition = -newPosition;
13666      let doBounce = false;
13667      let afterBouncePosition;
13668      const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;
13669      let needsLoopFix;
13670      if (newPosition < swiper.maxTranslate()) {
13671        if (params.freeMode.momentumBounce) {
13672          if (newPosition + swiper.maxTranslate() < -bounceAmount) {
13673            newPosition = swiper.maxTranslate() - bounceAmount;
13674          }
13675          afterBouncePosition = swiper.maxTranslate();
13676          doBounce = true;
13677          data.allowMomentumBounce = true;
13678        } else {
13679          newPosition = swiper.maxTranslate();
13680        }
13681        if (params.loop && params.centeredSlides) needsLoopFix = true;
13682      } else if (newPosition > swiper.minTranslate()) {
13683        if (params.freeMode.momentumBounce) {
13684          if (newPosition - swiper.minTranslate() > bounceAmount) {
13685            newPosition = swiper.minTranslate() + bounceAmount;
13686          }
13687          afterBouncePosition = swiper.minTranslate();
13688          doBounce = true;
13689          data.allowMomentumBounce = true;
13690        } else {
13691          newPosition = swiper.minTranslate();
13692        }
13693        if (params.loop && params.centeredSlides) needsLoopFix = true;
13694      } else if (params.freeMode.sticky) {
13695        let nextSlide;
13696        for (let j = 0; j < snapGrid.length; j += 1) {
13697          if (snapGrid[j] > -newPosition) {
13698            nextSlide = j;
13699            break;
13700          }
13701        }
13702        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
13703          newPosition = snapGrid[nextSlide];
13704        } else {
13705          newPosition = snapGrid[nextSlide - 1];
13706        }
13707        newPosition = -newPosition;
13708      }
13709      if (needsLoopFix) {
13710        once('transitionEnd', () => {
13711          swiper.loopFix();
13712        });
13713      }
13714      // Fix duration
13715      if (swiper.velocity !== 0) {
13716        if (rtl) {
13717          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
13718        } else {
13719          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
13720        }
13721        if (params.freeMode.sticky) {
13722          // If freeMode.sticky is active and the user ends a swipe with a slow-velocity
13723          // event, then durations can be 20+ seconds to slide one (or zero!) slides.
13724          // It's easy to see this when simulating touch with mouse events. To fix this,
13725          // limit single-slide swipes to the default slide duration. This also has the
13726          // nice side effect of matching slide speed if the user stopped moving before
13727          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.
13728          // For faster swipes, also apply limits (albeit higher ones).
13729          const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);
13730          const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];
13731          if (moveDistance < currentSlideSize) {
13732            momentumDuration = params.speed;
13733          } else if (moveDistance < 2 * currentSlideSize) {
13734            momentumDuration = params.speed * 1.5;
13735          } else {
13736            momentumDuration = params.speed * 2.5;
13737          }
13738        }
13739      } else if (params.freeMode.sticky) {
13740        swiper.slideToClosest();
13741        return;
13742      }
13743      if (params.freeMode.momentumBounce && doBounce) {
13744        swiper.updateProgress(afterBouncePosition);
13745        swiper.setTransition(momentumDuration);
13746        swiper.setTranslate(newPosition);
13747        swiper.transitionStart(true, swiper.swipeDirection);
13748        swiper.animating = true;
13749        (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(wrapperEl, () => {
13750          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;
13751          emit('momentumBounce');
13752          swiper.setTransition(params.speed);
13753          setTimeout(() => {
13754            swiper.setTranslate(afterBouncePosition);
13755            (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(wrapperEl, () => {
13756              if (!swiper || swiper.destroyed) return;
13757              swiper.transitionEnd();
13758            });
13759          }, 0);
13760        });
13761      } else if (swiper.velocity) {
13762        emit('_freeModeNoMomentumRelease');
13763        swiper.updateProgress(newPosition);
13764        swiper.setTransition(momentumDuration);
13765        swiper.setTranslate(newPosition);
13766        swiper.transitionStart(true, swiper.swipeDirection);
13767        if (!swiper.animating) {
13768          swiper.animating = true;
13769          (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(wrapperEl, () => {
13770            if (!swiper || swiper.destroyed) return;
13771            swiper.transitionEnd();
13772          });
13773        }
13774      } else {
13775        swiper.updateProgress(newPosition);
13776      }
13777      swiper.updateActiveIndex();
13778      swiper.updateSlidesClasses();
13779    } else if (params.freeMode.sticky) {
13780      swiper.slideToClosest();
13781      return;
13782    } else if (params.freeMode) {
13783      emit('_freeModeNoMomentumRelease');
13784    }
13785    if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {
13786      emit('_freeModeStaticRelease');
13787      swiper.updateProgress();
13788      swiper.updateActiveIndex();
13789      swiper.updateSlidesClasses();
13790    }
13791  }
13792  Object.assign(swiper, {
13793    freeMode: {
13794      onTouchStart,
13795      onTouchMove,
13796      onTouchEnd
13797    }
13798  });
13799}
13800
13801
13802
13803
13804/***/ }),
13805
vendor: 5,711 bytes, lines 13806-13975
13806/***/ "./node_modules/swiper/modules/grid.mjs":
13807/*!**********************************************!*\
13808  !*** ./node_modules/swiper/modules/grid.mjs ***!
13809  \**********************************************/
13810/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
13811
13812"use strict";
13813__webpack_require__.r(__webpack_exports__);
13814/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13815/* harmony export */   "default": () => (/* binding */ Grid)
13816/* harmony export */ });
13817function Grid(_ref) {
13818  let {
13819    swiper,
13820    extendParams,
13821    on
13822  } = _ref;
13823  extendParams({
13824    grid: {
13825      rows: 1,
13826      fill: 'column'
13827    }
13828  });
13829  let slidesNumberEvenToRows;
13830  let slidesPerRow;
13831  let numFullColumns;
13832  let wasMultiRow;
13833  const getSpaceBetween = () => {
13834    let spaceBetween = swiper.params.spaceBetween;
13835    if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
13836      spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;
13837    } else if (typeof spaceBetween === 'string') {
13838      spaceBetween = parseFloat(spaceBetween);
13839    }
13840    return spaceBetween;
13841  };
13842  const initSlides = slides => {
13843    const {
13844      slidesPerView
13845    } = swiper.params;
13846    const {
13847      rows,
13848      fill
13849    } = swiper.params.grid;
13850    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length;
13851    numFullColumns = Math.floor(slidesLength / rows);
13852    if (Math.floor(slidesLength / rows) === slidesLength / rows) {
13853      slidesNumberEvenToRows = slidesLength;
13854    } else {
13855      slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;
13856    }
13857    if (slidesPerView !== 'auto' && fill === 'row') {
13858      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);
13859    }
13860    slidesPerRow = slidesNumberEvenToRows / rows;
13861  };
13862  const unsetSlides = () => {
13863    if (swiper.slides) {
13864      swiper.slides.forEach(slide => {
13865        if (slide.swiperSlideGridSet) {
13866          slide.style.height = '';
13867          slide.style[swiper.getDirectionLabel('margin-top')] = '';
13868        }
13869      });
13870    }
13871  };
13872  const updateSlide = (i, slide, slides) => {
13873    const {
13874      slidesPerGroup
13875    } = swiper.params;
13876    const spaceBetween = getSpaceBetween();
13877    const {
13878      rows,
13879      fill
13880    } = swiper.params.grid;
13881    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length;
13882    // Set slides order
13883    let newSlideOrderIndex;
13884    let column;
13885    let row;
13886    if (fill === 'row' && slidesPerGroup > 1) {
13887      const groupIndex = Math.floor(i / (slidesPerGroup * rows));
13888      const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;
13889      const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);
13890      row = Math.floor(slideIndexInGroup / columnsInGroup);
13891      column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;
13892      newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;
13893      slide.style.order = newSlideOrderIndex;
13894    } else if (fill === 'column') {
13895      column = Math.floor(i / rows);
13896      row = i - column * rows;
13897      if (column > numFullColumns || column === numFullColumns && row === rows - 1) {
13898        row += 1;
13899        if (row >= rows) {
13900          row = 0;
13901          column += 1;
13902        }
13903      }
13904    } else {
13905      row = Math.floor(i / slidesPerRow);
13906      column = i - row * slidesPerRow;
13907    }
13908    slide.row = row;
13909    slide.column = column;
13910    slide.style.height = `calc((100% - ${(rows - 1) * spaceBetween}px) / ${rows})`;
13911    slide.style[swiper.getDirectionLabel('margin-top')] = row !== 0 ? spaceBetween && `${spaceBetween}px` : '';
13912    slide.swiperSlideGridSet = true;
13913  };
13914  const updateWrapperSize = (slideSize, snapGrid) => {
13915    const {
13916      centeredSlides,
13917      roundLengths
13918    } = swiper.params;
13919    const spaceBetween = getSpaceBetween();
13920    const {
13921      rows
13922    } = swiper.params.grid;
13923    swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;
13924    swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;
13925    if (!swiper.params.cssMode) {
13926      swiper.wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;
13927    }
13928    if (centeredSlides) {
13929      const newSlidesGrid = [];
13930      for (let i = 0; i < snapGrid.length; i += 1) {
13931        let slidesGridItem = snapGrid[i];
13932        if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);
13933        if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);
13934      }
13935      snapGrid.splice(0, snapGrid.length);
13936      snapGrid.push(...newSlidesGrid);
13937    }
13938  };
13939  const onInit = () => {
13940    wasMultiRow = swiper.params.grid && swiper.params.grid.rows > 1;
13941  };
13942  const onUpdate = () => {
13943    const {
13944      params,
13945      el
13946    } = swiper;
13947    const isMultiRow = params.grid && params.grid.rows > 1;
13948    if (wasMultiRow && !isMultiRow) {
13949      el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);
13950      numFullColumns = 1;
13951      swiper.emitContainerClasses();
13952    } else if (!wasMultiRow && isMultiRow) {
13953      el.classList.add(`${params.containerModifierClass}grid`);
13954      if (params.grid.fill === 'column') {
13955        el.classList.add(`${params.containerModifierClass}grid-column`);
13956      }
13957      swiper.emitContainerClasses();
13958    }
13959    wasMultiRow = isMultiRow;
13960  };
13961  on('init', onInit);
13962  on('update', onUpdate);
13963  swiper.grid = {
13964    initSlides,
13965    unsetSlides,
13966    updateSlide,
13967    updateWrapperSize
13968  };
13969}
13970
13971
13972
13973
13974/***/ }),
13975
vendor: 4,412 bytes, lines 13976-14085
13976/***/ "./node_modules/swiper/modules/hash-navigation.mjs":
13977/*!*********************************************************!*\
13978  !*** ./node_modules/swiper/modules/hash-navigation.mjs ***!
13979  \*********************************************************/
13980/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
13981
13982"use strict";
13983__webpack_require__.r(__webpack_exports__);
13984/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13985/* harmony export */   "default": () => (/* binding */ HashNavigation)
13986/* harmony export */ });
13987/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs");
13988/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
13989
13990
13991
13992function HashNavigation(_ref) {
13993  let {
13994    swiper,
13995    extendParams,
13996    emit,
13997    on
13998  } = _ref;
13999  let initialized = false;
14000  const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)();
14001  const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
14002  extendParams({
14003    hashNavigation: {
14004      enabled: false,
14005      replaceState: false,
14006      watchState: false,
14007      getSlideIndex(_s, hash) {
14008        if (swiper.virtual && swiper.params.virtual.enabled) {
14009          const slideWithHash = swiper.slides.filter(slideEl => slideEl.getAttribute('data-hash') === hash)[0];
14010          if (!slideWithHash) return 0;
14011          const index = parseInt(slideWithHash.getAttribute('data-swiper-slide-index'), 10);
14012          return index;
14013        }
14014        return swiper.getSlideIndex((0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash="${hash}"], swiper-slide[data-hash="${hash}"]`)[0]);
14015      }
14016    }
14017  });
14018  const onHashChange = () => {
14019    emit('hashChange');
14020    const newHash = document.location.hash.replace('#', '');
14021    const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index="${swiper.activeIndex}"]`) : swiper.slides[swiper.activeIndex];
14022    const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') : '';
14023    if (newHash !== activeSlideHash) {
14024      const newIndex = swiper.params.hashNavigation.getSlideIndex(swiper, newHash);
14025      if (typeof newIndex === 'undefined' || Number.isNaN(newIndex)) return;
14026      swiper.slideTo(newIndex);
14027    }
14028  };
14029  const setHash = () => {
14030    if (!initialized || !swiper.params.hashNavigation.enabled) return;
14031    const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index="${swiper.activeIndex}"]`) : swiper.slides[swiper.activeIndex];
14032    const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') || activeSlideEl.getAttribute('data-history') : '';
14033    if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {
14034      window.history.replaceState(null, null, `#${activeSlideHash}` || '');
14035      emit('hashSet');
14036    } else {
14037      document.location.hash = activeSlideHash || '';
14038      emit('hashSet');
14039    }
14040  };
14041  const init = () => {
14042    if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;
14043    initialized = true;
14044    const hash = document.location.hash.replace('#', '');
14045    if (hash) {
14046      const speed = 0;
14047      const index = swiper.params.hashNavigation.getSlideIndex(swiper, hash);
14048      swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true);
14049    }
14050    if (swiper.params.hashNavigation.watchState) {
14051      window.addEventListener('hashchange', onHashChange);
14052    }
14053  };
14054  const destroy = () => {
14055    if (swiper.params.hashNavigation.watchState) {
14056      window.removeEventListener('hashchange', onHashChange);
14057    }
14058  };
14059  on('init', () => {
14060    if (swiper.params.hashNavigation.enabled) {
14061      init();
14062    }
14063  });
14064  on('destroy', () => {
14065    if (swiper.params.hashNavigation.enabled) {
14066      destroy();
14067    }
14068  });
14069  on('transitionEnd _freeModeNoMomentumRelease', () => {
14070    if (initialized) {
14071      setHash();
14072    }
14073  });
14074  on('slideChange', () => {
14075    if (initialized && swiper.params.cssMode) {
14076      setHash();
14077    }
14078  });
14079}
14080
14081
14082
14083
14084/***/ }),
14085
vendor: 5,002 bytes, lines 14086-14243
14086/***/ "./node_modules/swiper/modules/history.mjs":
14087/*!*************************************************!*\
14088  !*** ./node_modules/swiper/modules/history.mjs ***!
14089  \*************************************************/
14090/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
14091
14092"use strict";
14093__webpack_require__.r(__webpack_exports__);
14094/* harmony export */ __webpack_require__.d(__webpack_exports__, {
14095/* harmony export */   "default": () => (/* binding */ History)
14096/* harmony export */ });
14097/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs");
14098
14099
14100function History(_ref) {
14101  let {
14102    swiper,
14103    extendParams,
14104    on
14105  } = _ref;
14106  extendParams({
14107    history: {
14108      enabled: false,
14109      root: '',
14110      replaceState: false,
14111      key: 'slides',
14112      keepQuery: false
14113    }
14114  });
14115  let initialized = false;
14116  let paths = {};
14117  const slugify = text => {
14118    return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');
14119  };
14120  const getPathValues = urlOverride => {
14121    const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
14122    let location;
14123    if (urlOverride) {
14124      location = new URL(urlOverride);
14125    } else {
14126      location = window.location;
14127    }
14128    const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');
14129    const total = pathArray.length;
14130    const key = pathArray[total - 2];
14131    const value = pathArray[total - 1];
14132    return {
14133      key,
14134      value
14135    };
14136  };
14137  const setHistory = (key, index) => {
14138    const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
14139    if (!initialized || !swiper.params.history.enabled) return;
14140    let location;
14141    if (swiper.params.url) {
14142      location = new URL(swiper.params.url);
14143    } else {
14144      location = window.location;
14145    }
14146    const slide = swiper.slides[index];
14147    let value = slugify(slide.getAttribute('data-history'));
14148    if (swiper.params.history.root.length > 0) {
14149      let root = swiper.params.history.root;
14150      if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);
14151      value = `${root}/${key ? `${key}/` : ''}${value}`;
14152    } else if (!location.pathname.includes(key)) {
14153      value = `${key ? `${key}/` : ''}${value}`;
14154    }
14155    if (swiper.params.history.keepQuery) {
14156      value += location.search;
14157    }
14158    const currentState = window.history.state;
14159    if (currentState && currentState.value === value) {
14160      return;
14161    }
14162    if (swiper.params.history.replaceState) {
14163      window.history.replaceState({
14164        value
14165      }, null, value);
14166    } else {
14167      window.history.pushState({
14168        value
14169      }, null, value);
14170    }
14171  };
14172  const scrollToSlide = (speed, value, runCallbacks) => {
14173    if (value) {
14174      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {
14175        const slide = swiper.slides[i];
14176        const slideHistory = slugify(slide.getAttribute('data-history'));
14177        if (slideHistory === value) {
14178          const index = swiper.getSlideIndex(slide);
14179          swiper.slideTo(index, speed, runCallbacks);
14180        }
14181      }
14182    } else {
14183      swiper.slideTo(0, speed, runCallbacks);
14184    }
14185  };
14186  const setHistoryPopState = () => {
14187    paths = getPathValues(swiper.params.url);
14188    scrollToSlide(swiper.params.speed, paths.value, false);
14189  };
14190  const init = () => {
14191    const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
14192    if (!swiper.params.history) return;
14193    if (!window.history || !window.history.pushState) {
14194      swiper.params.history.enabled = false;
14195      swiper.params.hashNavigation.enabled = true;
14196      return;
14197    }
14198    initialized = true;
14199    paths = getPathValues(swiper.params.url);
14200    if (!paths.key && !paths.value) {
14201      if (!swiper.params.history.replaceState) {
14202        window.addEventListener('popstate', setHistoryPopState);
14203      }
14204      return;
14205    }
14206    scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);
14207    if (!swiper.params.history.replaceState) {
14208      window.addEventListener('popstate', setHistoryPopState);
14209    }
14210  };
14211  const destroy = () => {
14212    const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
14213    if (!swiper.params.history.replaceState) {
14214      window.removeEventListener('popstate', setHistoryPopState);
14215    }
14216  };
14217  on('init', () => {
14218    if (swiper.params.history.enabled) {
14219      init();
14220    }
14221  });
14222  on('destroy', () => {
14223    if (swiper.params.history.enabled) {
14224      destroy();
14225    }
14226  });
14227  on('transitionEnd _freeModeNoMomentumRelease', () => {
14228    if (initialized) {
14229      setHistory(swiper.params.history.key, swiper.activeIndex);
14230    }
14231  });
14232  on('slideChange', () => {
14233    if (initialized && swiper.params.cssMode) {
14234      setHistory(swiper.params.history.key, swiper.activeIndex);
14235    }
14236  });
14237}
14238
14239
14240
14241
14242/***/ }),
14243
vendor: 5,273 bytes, lines 14244-14377
14244/***/ "./node_modules/swiper/modules/keyboard.mjs":
14245/*!**************************************************!*\
14246  !*** ./node_modules/swiper/modules/keyboard.mjs ***!
14247  \**************************************************/
14248/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
14249
14250"use strict";
14251__webpack_require__.r(__webpack_exports__);
14252/* harmony export */ __webpack_require__.d(__webpack_exports__, {
14253/* harmony export */   "default": () => (/* binding */ Keyboard)
14254/* harmony export */ });
14255/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs");
14256/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
14257
14258
14259
14260/* eslint-disable consistent-return */
14261function Keyboard(_ref) {
14262  let {
14263    swiper,
14264    extendParams,
14265    on,
14266    emit
14267  } = _ref;
14268  const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)();
14269  const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
14270  swiper.keyboard = {
14271    enabled: false
14272  };
14273  extendParams({
14274    keyboard: {
14275      enabled: false,
14276      onlyInViewport: true,
14277      pageUpDown: true
14278    }
14279  });
14280  function handle(event) {
14281    if (!swiper.enabled) return;
14282    const {
14283      rtlTranslate: rtl
14284    } = swiper;
14285    let e = event;
14286    if (e.originalEvent) e = e.originalEvent; // jquery fix
14287    const kc = e.keyCode || e.charCode;
14288    const pageUpDown = swiper.params.keyboard.pageUpDown;
14289    const isPageUp = pageUpDown && kc === 33;
14290    const isPageDown = pageUpDown && kc === 34;
14291    const isArrowLeft = kc === 37;
14292    const isArrowRight = kc === 39;
14293    const isArrowUp = kc === 38;
14294    const isArrowDown = kc === 40;
14295    // Directions locks
14296    if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {
14297      return false;
14298    }
14299    if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {
14300      return false;
14301    }
14302    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
14303      return undefined;
14304    }
14305    if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {
14306      return undefined;
14307    }
14308    if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {
14309      let inView = false;
14310      // Check that swiper should be inside of visible area of window
14311      if ((0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.a)(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.a)(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {
14312        return undefined;
14313      }
14314      const el = swiper.el;
14315      const swiperWidth = el.clientWidth;
14316      const swiperHeight = el.clientHeight;
14317      const windowWidth = window.innerWidth;
14318      const windowHeight = window.innerHeight;
14319      const swiperOffset = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.b)(el);
14320      if (rtl) swiperOffset.left -= el.scrollLeft;
14321      const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];
14322      for (let i = 0; i < swiperCoord.length; i += 1) {
14323        const point = swiperCoord[i];
14324        if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {
14325          if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line
14326          inView = true;
14327        }
14328      }
14329      if (!inView) return undefined;
14330    }
14331    if (swiper.isHorizontal()) {
14332      if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {
14333        if (e.preventDefault) e.preventDefault();else e.returnValue = false;
14334      }
14335      if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();
14336      if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();
14337    } else {
14338      if (isPageUp || isPageDown || isArrowUp || isArrowDown) {
14339        if (e.preventDefault) e.preventDefault();else e.returnValue = false;
14340      }
14341      if (isPageDown || isArrowDown) swiper.slideNext();
14342      if (isPageUp || isArrowUp) swiper.slidePrev();
14343    }
14344    emit('keyPress', kc);
14345    return undefined;
14346  }
14347  function enable() {
14348    if (swiper.keyboard.enabled) return;
14349    document.addEventListener('keydown', handle);
14350    swiper.keyboard.enabled = true;
14351  }
14352  function disable() {
14353    if (!swiper.keyboard.enabled) return;
14354    document.removeEventListener('keydown', handle);
14355    swiper.keyboard.enabled = false;
14356  }
14357  on('init', () => {
14358    if (swiper.params.keyboard.enabled) {
14359      enable();
14360    }
14361  });
14362  on('destroy', () => {
14363    if (swiper.keyboard.enabled) {
14364      disable();
14365    }
14366  });
14367  Object.assign(swiper.keyboard, {
14368    enable,
14369    disable
14370  });
14371}
14372
14373
14374
14375
14376/***/ }),
14377
vendor: 5,517 bytes, lines 14378-14583
14378/***/ "./node_modules/swiper/modules/manipulation.mjs":
14379/*!******************************************************!*\
14380  !*** ./node_modules/swiper/modules/manipulation.mjs ***!
14381  \******************************************************/
14382/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
14383
14384"use strict";
14385__webpack_require__.r(__webpack_exports__);
14386/* harmony export */ __webpack_require__.d(__webpack_exports__, {
14387/* harmony export */   "default": () => (/* binding */ Manipulation)
14388/* harmony export */ });
14389function appendSlide(slides) {
14390  const swiper = this;
14391  const {
14392    params,
14393    slidesEl
14394  } = swiper;
14395  if (params.loop) {
14396    swiper.loopDestroy();
14397  }
14398  const appendElement = slideEl => {
14399    if (typeof slideEl === 'string') {
14400      const tempDOM = document.createElement('div');
14401      tempDOM.innerHTML = slideEl;
14402      slidesEl.append(tempDOM.children[0]);
14403      tempDOM.innerHTML = '';
14404    } else {
14405      slidesEl.append(slideEl);
14406    }
14407  };
14408  if (typeof slides === 'object' && 'length' in slides) {
14409    for (let i = 0; i < slides.length; i += 1) {
14410      if (slides[i]) appendElement(slides[i]);
14411    }
14412  } else {
14413    appendElement(slides);
14414  }
14415  swiper.recalcSlides();
14416  if (params.loop) {
14417    swiper.loopCreate();
14418  }
14419  if (!params.observer || swiper.isElement) {
14420    swiper.update();
14421  }
14422}
14423
14424function prependSlide(slides) {
14425  const swiper = this;
14426  const {
14427    params,
14428    activeIndex,
14429    slidesEl
14430  } = swiper;
14431  if (params.loop) {
14432    swiper.loopDestroy();
14433  }
14434  let newActiveIndex = activeIndex + 1;
14435  const prependElement = slideEl => {
14436    if (typeof slideEl === 'string') {
14437      const tempDOM = document.createElement('div');
14438      tempDOM.innerHTML = slideEl;
14439      slidesEl.prepend(tempDOM.children[0]);
14440      tempDOM.innerHTML = '';
14441    } else {
14442      slidesEl.prepend(slideEl);
14443    }
14444  };
14445  if (typeof slides === 'object' && 'length' in slides) {
14446    for (let i = 0; i < slides.length; i += 1) {
14447      if (slides[i]) prependElement(slides[i]);
14448    }
14449    newActiveIndex = activeIndex + slides.length;
14450  } else {
14451    prependElement(slides);
14452  }
14453  swiper.recalcSlides();
14454  if (params.loop) {
14455    swiper.loopCreate();
14456  }
14457  if (!params.observer || swiper.isElement) {
14458    swiper.update();
14459  }
14460  swiper.slideTo(newActiveIndex, 0, false);
14461}
14462
14463function addSlide(index, slides) {
14464  const swiper = this;
14465  const {
14466    params,
14467    activeIndex,
14468    slidesEl
14469  } = swiper;
14470  let activeIndexBuffer = activeIndex;
14471  if (params.loop) {
14472    activeIndexBuffer -= swiper.loopedSlides;
14473    swiper.loopDestroy();
14474    swiper.recalcSlides();
14475  }
14476  const baseLength = swiper.slides.length;
14477  if (index <= 0) {
14478    swiper.prependSlide(slides);
14479    return;
14480  }
14481  if (index >= baseLength) {
14482    swiper.appendSlide(slides);
14483    return;
14484  }
14485  let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
14486  const slidesBuffer = [];
14487  for (let i = baseLength - 1; i >= index; i -= 1) {
14488    const currentSlide = swiper.slides[i];
14489    currentSlide.remove();
14490    slidesBuffer.unshift(currentSlide);
14491  }
14492  if (typeof slides === 'object' && 'length' in slides) {
14493    for (let i = 0; i < slides.length; i += 1) {
14494      if (slides[i]) slidesEl.append(slides[i]);
14495    }
14496    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
14497  } else {
14498    slidesEl.append(slides);
14499  }
14500  for (let i = 0; i < slidesBuffer.length; i += 1) {
14501    slidesEl.append(slidesBuffer[i]);
14502  }
14503  swiper.recalcSlides();
14504  if (params.loop) {
14505    swiper.loopCreate();
14506  }
14507  if (!params.observer || swiper.isElement) {
14508    swiper.update();
14509  }
14510  if (params.loop) {
14511    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
14512  } else {
14513    swiper.slideTo(newActiveIndex, 0, false);
14514  }
14515}
14516
14517function removeSlide(slidesIndexes) {
14518  const swiper = this;
14519  const {
14520    params,
14521    activeIndex
14522  } = swiper;
14523  let activeIndexBuffer = activeIndex;
14524  if (params.loop) {
14525    activeIndexBuffer -= swiper.loopedSlides;
14526    swiper.loopDestroy();
14527  }
14528  let newActiveIndex = activeIndexBuffer;
14529  let indexToRemove;
14530  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {
14531    for (let i = 0; i < slidesIndexes.length; i += 1) {
14532      indexToRemove = slidesIndexes[i];
14533      if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();
14534      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
14535    }
14536    newActiveIndex = Math.max(newActiveIndex, 0);
14537  } else {
14538    indexToRemove = slidesIndexes;
14539    if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();
14540    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
14541    newActiveIndex = Math.max(newActiveIndex, 0);
14542  }
14543  swiper.recalcSlides();
14544  if (params.loop) {
14545    swiper.loopCreate();
14546  }
14547  if (!params.observer || swiper.isElement) {
14548    swiper.update();
14549  }
14550  if (params.loop) {
14551    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
14552  } else {
14553    swiper.slideTo(newActiveIndex, 0, false);
14554  }
14555}
14556
14557function removeAllSlides() {
14558  const swiper = this;
14559  const slidesIndexes = [];
14560  for (let i = 0; i < swiper.slides.length; i += 1) {
14561    slidesIndexes.push(i);
14562  }
14563  swiper.removeSlide(slidesIndexes);
14564}
14565
14566function Manipulation(_ref) {
14567  let {
14568    swiper
14569  } = _ref;
14570  Object.assign(swiper, {
14571    appendSlide: appendSlide.bind(swiper),
14572    prependSlide: prependSlide.bind(swiper),
14573    addSlide: addSlide.bind(swiper),
14574    removeSlide: removeSlide.bind(swiper),
14575    removeAllSlides: removeAllSlides.bind(swiper)
14576  });
14577}
14578
14579
14580
14581
14582/***/ }),
14583
vendor: 15,884 bytes, lines 14584-14993
14584/***/ "./node_modules/swiper/modules/mousewheel.mjs":
14585/*!****************************************************!*\
14586  !*** ./node_modules/swiper/modules/mousewheel.mjs ***!
14587  \****************************************************/
14588/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
14589
14590"use strict";
14591__webpack_require__.r(__webpack_exports__);
14592/* harmony export */ __webpack_require__.d(__webpack_exports__, {
14593/* harmony export */   "default": () => (/* binding */ Mousewheel)
14594/* harmony export */ });
14595/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs");
14596/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
14597
14598
14599
14600/* eslint-disable consistent-return */
14601function Mousewheel(_ref) {
14602  let {
14603    swiper,
14604    extendParams,
14605    on,
14606    emit
14607  } = _ref;
14608  const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
14609  extendParams({
14610    mousewheel: {
14611      enabled: false,
14612      releaseOnEdges: false,
14613      invert: false,
14614      forceToAxis: false,
14615      sensitivity: 1,
14616      eventsTarget: 'container',
14617      thresholdDelta: null,
14618      thresholdTime: null,
14619      noMousewheelClass: 'swiper-no-mousewheel'
14620    }
14621  });
14622  swiper.mousewheel = {
14623    enabled: false
14624  };
14625  let timeout;
14626  let lastScrollTime = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)();
14627  let lastEventBeforeSnap;
14628  const recentWheelEvents = [];
14629  function normalize(e) {
14630    // Reasonable defaults
14631    const PIXEL_STEP = 10;
14632    const LINE_HEIGHT = 40;
14633    const PAGE_HEIGHT = 800;
14634    let sX = 0;
14635    let sY = 0; // spinX, spinY
14636    let pX = 0;
14637    let pY = 0; // pixelX, pixelY
14638
14639    // Legacy
14640    if ('detail' in e) {
14641      sY = e.detail;
14642    }
14643    if ('wheelDelta' in e) {
14644      sY = -e.wheelDelta / 120;
14645    }
14646    if ('wheelDeltaY' in e) {
14647      sY = -e.wheelDeltaY / 120;
14648    }
14649    if ('wheelDeltaX' in e) {
14650      sX = -e.wheelDeltaX / 120;
14651    }
14652
14653    // side scrolling on FF with DOMMouseScroll
14654    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
14655      sX = sY;
14656      sY = 0;
14657    }
14658    pX = sX * PIXEL_STEP;
14659    pY = sY * PIXEL_STEP;
14660    if ('deltaY' in e) {
14661      pY = e.deltaY;
14662    }
14663    if ('deltaX' in e) {
14664      pX = e.deltaX;
14665    }
14666    if (e.shiftKey && !pX) {
14667      // if user scrolls with shift he wants horizontal scroll
14668      pX = pY;
14669      pY = 0;
14670    }
14671    if ((pX || pY) && e.deltaMode) {
14672      if (e.deltaMode === 1) {
14673        // delta in LINE units
14674        pX *= LINE_HEIGHT;
14675        pY *= LINE_HEIGHT;
14676      } else {
14677        // delta in PAGE units
14678        pX *= PAGE_HEIGHT;
14679        pY *= PAGE_HEIGHT;
14680      }
14681    }
14682
14683    // Fall-back if spin cannot be determined
14684    if (pX && !sX) {
14685      sX = pX < 1 ? -1 : 1;
14686    }
14687    if (pY && !sY) {
14688      sY = pY < 1 ? -1 : 1;
14689    }
14690    return {
14691      spinX: sX,
14692      spinY: sY,
14693      pixelX: pX,
14694      pixelY: pY
14695    };
14696  }
14697  function handleMouseEnter() {
14698    if (!swiper.enabled) return;
14699    swiper.mouseEntered = true;
14700  }
14701  function handleMouseLeave() {
14702    if (!swiper.enabled) return;
14703    swiper.mouseEntered = false;
14704  }
14705  function animateSlider(newEvent) {
14706    if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {
14707      // Prevent if delta of wheel scroll delta is below configured threshold
14708      return false;
14709    }
14710    if (swiper.params.mousewheel.thresholdTime && (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {
14711      // Prevent if time between scrolls is below configured threshold
14712      return false;
14713    }
14714
14715    // If the movement is NOT big enough and
14716    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):
14717    //   Don't go any further (avoid insignificant scroll movement).
14718    if (newEvent.delta >= 6 && (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)() - lastScrollTime < 60) {
14719      // Return false as a default
14720      return true;
14721    }
14722    // If user is scrolling towards the end:
14723    //   If the slider hasn't hit the latest slide or
14724    //   if the slider is a loop and
14725    //   if the slider isn't moving right now:
14726    //     Go to next slide and
14727    //     emit a scroll event.
14728    // Else (the user is scrolling towards the beginning) and
14729    // if the slider hasn't hit the first slide or
14730    // if the slider is a loop and
14731    // if the slider isn't moving right now:
14732    //   Go to prev slide and
14733    //   emit a scroll event.
14734    if (newEvent.direction < 0) {
14735      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
14736        swiper.slideNext();
14737        emit('scroll', newEvent.raw);
14738      }
14739    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
14740      swiper.slidePrev();
14741      emit('scroll', newEvent.raw);
14742    }
14743    // If you got here is because an animation has been triggered so store the current time
14744    lastScrollTime = new window.Date().getTime();
14745    // Return false as a default
14746    return false;
14747  }
14748  function releaseScroll(newEvent) {
14749    const params = swiper.params.mousewheel;
14750    if (newEvent.direction < 0) {
14751      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
14752        // Return true to animate scroll on edges
14753        return true;
14754      }
14755    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
14756      // Return true to animate scroll on edges
14757      return true;
14758    }
14759    return false;
14760  }
14761  function handle(event) {
14762    let e = event;
14763    let disableParentSwiper = true;
14764    if (!swiper.enabled) return;
14765
14766    // Ignore event if the target or its parents have the swiper-no-mousewheel class
14767    if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;
14768    const params = swiper.params.mousewheel;
14769    if (swiper.params.cssMode) {
14770      e.preventDefault();
14771    }
14772    let targetEl = swiper.el;
14773    if (swiper.params.mousewheel.eventsTarget !== 'container') {
14774      targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);
14775    }
14776    const targetElContainsTarget = targetEl && targetEl.contains(e.target);
14777    if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;
14778    if (e.originalEvent) e = e.originalEvent; // jquery fix
14779    let delta = 0;
14780    const rtlFactor = swiper.rtlTranslate ? -1 : 1;
14781    const data = normalize(e);
14782    if (params.forceToAxis) {
14783      if (swiper.isHorizontal()) {
14784        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;
14785      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;
14786    } else {
14787      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
14788    }
14789    if (delta === 0) return true;
14790    if (params.invert) delta = -delta;
14791
14792    // Get the scroll positions
14793    let positions = swiper.getTranslate() + delta * params.sensitivity;
14794    if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();
14795    if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();
14796
14797    // When loop is true:
14798    //     the disableParentSwiper will be true.
14799    // When loop is false:
14800    //     if the scroll positions is not on edge,
14801    //     then the disableParentSwiper will be true.
14802    //     if the scroll on edge positions,
14803    //     then the disableParentSwiper will be false.
14804    disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());
14805    if (disableParentSwiper && swiper.params.nested) e.stopPropagation();
14806    if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {
14807      // Register the new event in a variable which stores the relevant data
14808      const newEvent = {
14809        time: (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)(),
14810        delta: Math.abs(delta),
14811        direction: Math.sign(delta),
14812        raw: event
14813      };
14814
14815      // Keep the most recent events
14816      if (recentWheelEvents.length >= 2) {
14817        recentWheelEvents.shift(); // only store the last N events
14818      }
14819
14820      const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
14821      recentWheelEvents.push(newEvent);
14822
14823      // If there is at least one previous recorded event:
14824      //   If direction has changed or
14825      //   if the scroll is quicker than the previous one:
14826      //     Animate the slider.
14827      // Else (this is the first time the wheel is moved):
14828      //     Animate the slider.
14829      if (prevEvent) {
14830        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {
14831          animateSlider(newEvent);
14832        }
14833      } else {
14834        animateSlider(newEvent);
14835      }
14836
14837      // If it's time to release the scroll:
14838      //   Return now so you don't hit the preventDefault.
14839      if (releaseScroll(newEvent)) {
14840        return true;
14841      }
14842    } else {
14843      // Freemode or scrollContainer:
14844
14845      // If we recently snapped after a momentum scroll, then ignore wheel events
14846      // to give time for the deceleration to finish. Stop ignoring after 500 msecs
14847      // or if it's a new scroll (larger delta or inverse sign as last event before
14848      // an end-of-momentum snap).
14849      const newEvent = {
14850        time: (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)(),
14851        delta: Math.abs(delta),
14852        direction: Math.sign(delta)
14853      };
14854      const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;
14855      if (!ignoreWheelEvents) {
14856        lastEventBeforeSnap = undefined;
14857        let position = swiper.getTranslate() + delta * params.sensitivity;
14858        const wasBeginning = swiper.isBeginning;
14859        const wasEnd = swiper.isEnd;
14860        if (position >= swiper.minTranslate()) position = swiper.minTranslate();
14861        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();
14862        swiper.setTransition(0);
14863        swiper.setTranslate(position);
14864        swiper.updateProgress();
14865        swiper.updateActiveIndex();
14866        swiper.updateSlidesClasses();
14867        if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {
14868          swiper.updateSlidesClasses();
14869        }
14870        if (swiper.params.loop) {
14871          swiper.loopFix({
14872            direction: newEvent.direction < 0 ? 'next' : 'prev',
14873            byMousewheel: true
14874          });
14875        }
14876        if (swiper.params.freeMode.sticky) {
14877          // When wheel scrolling starts with sticky (aka snap) enabled, then detect
14878          // the end of a momentum scroll by storing recent (N=15?) wheel events.
14879          // 1. do all N events have decreasing or same (absolute value) delta?
14880          // 2. did all N events arrive in the last M (M=500?) msecs?
14881          // 3. does the earliest event have an (absolute value) delta that's
14882          //    at least P (P=1?) larger than the most recent event's delta?
14883          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?
14884          // If 1-4 are "yes" then we're near the end of a momentum scroll deceleration.
14885          // Snap immediately and ignore remaining wheel events in this scroll.
14886          // See comment above for "remaining wheel events in this scroll" determination.
14887          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.
14888          clearTimeout(timeout);
14889          timeout = undefined;
14890          if (recentWheelEvents.length >= 15) {
14891            recentWheelEvents.shift(); // only store the last N events
14892          }
14893
14894          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
14895          const firstEvent = recentWheelEvents[0];
14896          recentWheelEvents.push(newEvent);
14897          if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {
14898            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.
14899            recentWheelEvents.splice(0);
14900          } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {
14901            // We're at the end of the deceleration of a momentum scroll, so there's no need
14902            // to wait for more events. Snap ASAP on the next tick.
14903            // Also, because there's some remaining momentum we'll bias the snap in the
14904            // direction of the ongoing scroll because it's better UX for the scroll to snap
14905            // in the same direction as the scroll instead of reversing to snap.  Therefore,
14906            // if it's already scrolled more than 20% in the current direction, keep going.
14907            const snapToThreshold = delta > 0 ? 0.8 : 0.2;
14908            lastEventBeforeSnap = newEvent;
14909            recentWheelEvents.splice(0);
14910            timeout = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.n)(() => {
14911              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
14912            }, 0); // no delay; move on next tick
14913          }
14914
14915          if (!timeout) {
14916            // if we get here, then we haven't detected the end of a momentum scroll, so
14917            // we'll consider a scroll "complete" when there haven't been any wheel events
14918            // for 500ms.
14919            timeout = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.n)(() => {
14920              const snapToThreshold = 0.5;
14921              lastEventBeforeSnap = newEvent;
14922              recentWheelEvents.splice(0);
14923              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
14924            }, 500);
14925          }
14926        }
14927
14928        // Emit event
14929        if (!ignoreWheelEvents) emit('scroll', e);
14930
14931        // Stop autoplay
14932        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();
14933        // Return page scroll on edge positions
14934        if (params.releaseOnEdges && (position === swiper.minTranslate() || position === swiper.maxTranslate())) {
14935          return true;
14936        }
14937      }
14938    }
14939    if (e.preventDefault) e.preventDefault();else e.returnValue = false;
14940    return false;
14941  }
14942  function events(method) {
14943    let targetEl = swiper.el;
14944    if (swiper.params.mousewheel.eventsTarget !== 'container') {
14945      targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);
14946    }
14947    targetEl[method]('mouseenter', handleMouseEnter);
14948    targetEl[method]('mouseleave', handleMouseLeave);
14949    targetEl[method]('wheel', handle);
14950  }
14951  function enable() {
14952    if (swiper.params.cssMode) {
14953      swiper.wrapperEl.removeEventListener('wheel', handle);
14954      return true;
14955    }
14956    if (swiper.mousewheel.enabled) return false;
14957    events('addEventListener');
14958    swiper.mousewheel.enabled = true;
14959    return true;
14960  }
14961  function disable() {
14962    if (swiper.params.cssMode) {
14963      swiper.wrapperEl.addEventListener(event, handle);
14964      return true;
14965    }
14966    if (!swiper.mousewheel.enabled) return false;
14967    events('removeEventListener');
14968    swiper.mousewheel.enabled = false;
14969    return true;
14970  }
14971  on('init', () => {
14972    if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
14973      disable();
14974    }
14975    if (swiper.params.mousewheel.enabled) enable();
14976  });
14977  on('destroy', () => {
14978    if (swiper.params.cssMode) {
14979      enable();
14980    }
14981    if (swiper.mousewheel.enabled) disable();
14982  });
14983  Object.assign(swiper.mousewheel, {
14984    enable,
14985    disable
14986  });
14987}
14988
14989
14990
14991
14992/***/ }),
14993
vendor: 6,636 bytes, lines 14994-15200
14994/***/ "./node_modules/swiper/modules/navigation.mjs":
14995/*!****************************************************!*\
14996  !*** ./node_modules/swiper/modules/navigation.mjs ***!
14997  \****************************************************/
14998/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
14999
15000"use strict";
15001__webpack_require__.r(__webpack_exports__);
15002/* harmony export */ __webpack_require__.d(__webpack_exports__, {
15003/* harmony export */   "default": () => (/* binding */ Navigation)
15004/* harmony export */ });
15005/* harmony import */ var _shared_create_element_if_not_defined_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/create-element-if-not-defined.mjs */ "./node_modules/swiper/shared/create-element-if-not-defined.mjs");
15006
15007
15008function Navigation(_ref) {
15009  let {
15010    swiper,
15011    extendParams,
15012    on,
15013    emit
15014  } = _ref;
15015  extendParams({
15016    navigation: {
15017      nextEl: null,
15018      prevEl: null,
15019      hideOnClick: false,
15020      disabledClass: 'swiper-button-disabled',
15021      hiddenClass: 'swiper-button-hidden',
15022      lockClass: 'swiper-button-lock',
15023      navigationDisabledClass: 'swiper-navigation-disabled'
15024    }
15025  });
15026  swiper.navigation = {
15027    nextEl: null,
15028    prevEl: null
15029  };
15030  const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e);
15031  function getEl(el) {
15032    let res;
15033    if (el && typeof el === 'string' && swiper.isElement) {
15034      res = swiper.el.querySelector(el);
15035      if (res) return res;
15036    }
15037    if (el) {
15038      if (typeof el === 'string') res = [...document.querySelectorAll(el)];
15039      if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {
15040        res = swiper.el.querySelector(el);
15041      }
15042    }
15043    if (el && !res) return el;
15044    // if (Array.isArray(res) && res.length === 1) res = res[0];
15045    return res;
15046  }
15047  function toggleEl(el, disabled) {
15048    const params = swiper.params.navigation;
15049    el = makeElementsArray(el);
15050    el.forEach(subEl => {
15051      if (subEl) {
15052        subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));
15053        if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;
15054        if (swiper.params.watchOverflow && swiper.enabled) {
15055          subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);
15056        }
15057      }
15058    });
15059  }
15060  function update() {
15061    // Update Navigation Buttons
15062    const {
15063      nextEl,
15064      prevEl
15065    } = swiper.navigation;
15066    if (swiper.params.loop) {
15067      toggleEl(prevEl, false);
15068      toggleEl(nextEl, false);
15069      return;
15070    }
15071    toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);
15072    toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);
15073  }
15074  function onPrevClick(e) {
15075    e.preventDefault();
15076    if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;
15077    swiper.slidePrev();
15078    emit('navigationPrev');
15079  }
15080  function onNextClick(e) {
15081    e.preventDefault();
15082    if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;
15083    swiper.slideNext();
15084    emit('navigationNext');
15085  }
15086  function init() {
15087    const params = swiper.params.navigation;
15088    swiper.params.navigation = (0,_shared_create_element_if_not_defined_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(swiper, swiper.originalParams.navigation, swiper.params.navigation, {
15089      nextEl: 'swiper-button-next',
15090      prevEl: 'swiper-button-prev'
15091    });
15092    if (!(params.nextEl || params.prevEl)) return;
15093    let nextEl = getEl(params.nextEl);
15094    let prevEl = getEl(params.prevEl);
15095    Object.assign(swiper.navigation, {
15096      nextEl,
15097      prevEl
15098    });
15099    nextEl = makeElementsArray(nextEl);
15100    prevEl = makeElementsArray(prevEl);
15101    const initButton = (el, dir) => {
15102      if (el) {
15103        el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);
15104      }
15105      if (!swiper.enabled && el) {
15106        el.classList.add(...params.lockClass.split(' '));
15107      }
15108    };
15109    nextEl.forEach(el => initButton(el, 'next'));
15110    prevEl.forEach(el => initButton(el, 'prev'));
15111  }
15112  function destroy() {
15113    let {
15114      nextEl,
15115      prevEl
15116    } = swiper.navigation;
15117    nextEl = makeElementsArray(nextEl);
15118    prevEl = makeElementsArray(prevEl);
15119    const destroyButton = (el, dir) => {
15120      el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);
15121      el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));
15122    };
15123    nextEl.forEach(el => destroyButton(el, 'next'));
15124    prevEl.forEach(el => destroyButton(el, 'prev'));
15125  }
15126  on('init', () => {
15127    if (swiper.params.navigation.enabled === false) {
15128      // eslint-disable-next-line
15129      disable();
15130    } else {
15131      init();
15132      update();
15133    }
15134  });
15135  on('toEdge fromEdge lock unlock', () => {
15136    update();
15137  });
15138  on('destroy', () => {
15139    destroy();
15140  });
15141  on('enable disable', () => {
15142    let {
15143      nextEl,
15144      prevEl
15145    } = swiper.navigation;
15146    nextEl = makeElementsArray(nextEl);
15147    prevEl = makeElementsArray(prevEl);
15148    if (swiper.enabled) {
15149      update();
15150      return;
15151    }
15152    [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));
15153  });
15154  on('click', (_s, e) => {
15155    let {
15156      nextEl,
15157      prevEl
15158    } = swiper.navigation;
15159    nextEl = makeElementsArray(nextEl);
15160    prevEl = makeElementsArray(prevEl);
15161    const targetEl = e.target;
15162    if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {
15163      if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;
15164      let isHidden;
15165      if (nextEl.length) {
15166        isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);
15167      } else if (prevEl.length) {
15168        isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);
15169      }
15170      if (isHidden === true) {
15171        emit('navigationShow');
15172      } else {
15173        emit('navigationHide');
15174      }
15175      [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));
15176    }
15177  });
15178  const enable = () => {
15179    swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));
15180    init();
15181    update();
15182  };
15183  const disable = () => {
15184    swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));
15185    destroy();
15186  };
15187  Object.assign(swiper.navigation, {
15188    enable,
15189    disable,
15190    update,
15191    init,
15192    destroy
15193  });
15194}
15195
15196
15197
15198
15199/***/ }),
15200
vendor: 18,277 bytes, lines 15201-15662
15201/***/ "./node_modules/swiper/modules/pagination.mjs":
15202/*!****************************************************!*\
15203  !*** ./node_modules/swiper/modules/pagination.mjs ***!
15204  \****************************************************/
15205/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
15206
15207"use strict";
15208__webpack_require__.r(__webpack_exports__);
15209/* harmony export */ __webpack_require__.d(__webpack_exports__, {
15210/* harmony export */   "default": () => (/* binding */ Pagination)
15211/* harmony export */ });
15212/* harmony import */ var _shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/classes-to-selector.mjs */ "./node_modules/swiper/shared/classes-to-selector.mjs");
15213/* harmony import */ var _shared_create_element_if_not_defined_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/create-element-if-not-defined.mjs */ "./node_modules/swiper/shared/create-element-if-not-defined.mjs");
15214/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
15215
15216
15217
15218
15219function Pagination(_ref) {
15220  let {
15221    swiper,
15222    extendParams,
15223    on,
15224    emit
15225  } = _ref;
15226  const pfx = 'swiper-pagination';
15227  extendParams({
15228    pagination: {
15229      el: null,
15230      bulletElement: 'span',
15231      clickable: false,
15232      hideOnClick: false,
15233      renderBullet: null,
15234      renderProgressbar: null,
15235      renderFraction: null,
15236      renderCustom: null,
15237      progressbarOpposite: false,
15238      type: 'bullets',
15239      // 'bullets' or 'progressbar' or 'fraction' or 'custom'
15240      dynamicBullets: false,
15241      dynamicMainBullets: 1,
15242      formatFractionCurrent: number => number,
15243      formatFractionTotal: number => number,
15244      bulletClass: `${pfx}-bullet`,
15245      bulletActiveClass: `${pfx}-bullet-active`,
15246      modifierClass: `${pfx}-`,
15247      currentClass: `${pfx}-current`,
15248      totalClass: `${pfx}-total`,
15249      hiddenClass: `${pfx}-hidden`,
15250      progressbarFillClass: `${pfx}-progressbar-fill`,
15251      progressbarOppositeClass: `${pfx}-progressbar-opposite`,
15252      clickableClass: `${pfx}-clickable`,
15253      lockClass: `${pfx}-lock`,
15254      horizontalClass: `${pfx}-horizontal`,
15255      verticalClass: `${pfx}-vertical`,
15256      paginationDisabledClass: `${pfx}-disabled`
15257    }
15258  });
15259  swiper.pagination = {
15260    el: null,
15261    bullets: []
15262  };
15263  let bulletSize;
15264  let dynamicBulletIndex = 0;
15265  const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e);
15266  function isPaginationDisabled() {
15267    return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;
15268  }
15269  function setSideBullets(bulletEl, position) {
15270    const {
15271      bulletActiveClass
15272    } = swiper.params.pagination;
15273    if (!bulletEl) return;
15274    bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];
15275    if (bulletEl) {
15276      bulletEl.classList.add(`${bulletActiveClass}-${position}`);
15277      bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];
15278      if (bulletEl) {
15279        bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);
15280      }
15281    }
15282  }
15283  function onBulletClick(e) {
15284    const bulletEl = e.target.closest((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(swiper.params.pagination.bulletClass));
15285    if (!bulletEl) {
15286      return;
15287    }
15288    e.preventDefault();
15289    const index = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_2__.g)(bulletEl) * swiper.params.slidesPerGroup;
15290    if (swiper.params.loop) {
15291      if (swiper.realIndex === index) return;
15292      swiper.slideToLoop(index);
15293    } else {
15294      swiper.slideTo(index);
15295    }
15296  }
15297  function update() {
15298    // Render || Update Pagination bullets/items
15299    const rtl = swiper.rtl;
15300    const params = swiper.params.pagination;
15301    if (isPaginationDisabled()) return;
15302    let el = swiper.pagination.el;
15303    el = makeElementsArray(el);
15304    // Current/Total
15305    let current;
15306    let previousIndex;
15307    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
15308    const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
15309    if (swiper.params.loop) {
15310      previousIndex = swiper.previousRealIndex || 0;
15311      current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;
15312    } else if (typeof swiper.snapIndex !== 'undefined') {
15313      current = swiper.snapIndex;
15314      previousIndex = swiper.previousSnapIndex;
15315    } else {
15316      previousIndex = swiper.previousIndex || 0;
15317      current = swiper.activeIndex || 0;
15318    }
15319    // Types
15320    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
15321      const bullets = swiper.pagination.bullets;
15322      let firstIndex;
15323      let lastIndex;
15324      let midIndex;
15325      if (params.dynamicBullets) {
15326        bulletSize = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_2__.f)(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);
15327        el.forEach(subEl => {
15328          subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;
15329        });
15330        if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {
15331          dynamicBulletIndex += current - (previousIndex || 0);
15332          if (dynamicBulletIndex > params.dynamicMainBullets - 1) {
15333            dynamicBulletIndex = params.dynamicMainBullets - 1;
15334          } else if (dynamicBulletIndex < 0) {
15335            dynamicBulletIndex = 0;
15336          }
15337        }
15338        firstIndex = Math.max(current - dynamicBulletIndex, 0);
15339        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
15340        midIndex = (lastIndex + firstIndex) / 2;
15341      }
15342      bullets.forEach(bulletEl => {
15343        const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();
15344        bulletEl.classList.remove(...classesToRemove);
15345      });
15346      if (el.length > 1) {
15347        bullets.forEach(bullet => {
15348          const bulletIndex = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_2__.g)(bullet);
15349          if (bulletIndex === current) {
15350            bullet.classList.add(...params.bulletActiveClass.split(' '));
15351          } else if (swiper.isElement) {
15352            bullet.setAttribute('part', 'bullet');
15353          }
15354          if (params.dynamicBullets) {
15355            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
15356              bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));
15357            }
15358            if (bulletIndex === firstIndex) {
15359              setSideBullets(bullet, 'prev');
15360            }
15361            if (bulletIndex === lastIndex) {
15362              setSideBullets(bullet, 'next');
15363            }
15364          }
15365        });
15366      } else {
15367        const bullet = bullets[current];
15368        if (bullet) {
15369          bullet.classList.add(...params.bulletActiveClass.split(' '));
15370        }
15371        if (swiper.isElement) {
15372          bullets.forEach((bulletEl, bulletIndex) => {
15373            bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');
15374          });
15375        }
15376        if (params.dynamicBullets) {
15377          const firstDisplayedBullet = bullets[firstIndex];
15378          const lastDisplayedBullet = bullets[lastIndex];
15379          for (let i = firstIndex; i <= lastIndex; i += 1) {
15380            if (bullets[i]) {
15381              bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));
15382            }
15383          }
15384          setSideBullets(firstDisplayedBullet, 'prev');
15385          setSideBullets(lastDisplayedBullet, 'next');
15386        }
15387      }
15388      if (params.dynamicBullets) {
15389        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
15390        const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;
15391        const offsetProp = rtl ? 'right' : 'left';
15392        bullets.forEach(bullet => {
15393          bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;
15394        });
15395      }
15396    }
15397    el.forEach((subEl, subElIndex) => {
15398      if (params.type === 'fraction') {
15399        subEl.querySelectorAll((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(params.currentClass)).forEach(fractionEl => {
15400          fractionEl.textContent = params.formatFractionCurrent(current + 1);
15401        });
15402        subEl.querySelectorAll((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(params.totalClass)).forEach(totalEl => {
15403          totalEl.textContent = params.formatFractionTotal(total);
15404        });
15405      }
15406      if (params.type === 'progressbar') {
15407        let progressbarDirection;
15408        if (params.progressbarOpposite) {
15409          progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
15410        } else {
15411          progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
15412        }
15413        const scale = (current + 1) / total;
15414        let scaleX = 1;
15415        let scaleY = 1;
15416        if (progressbarDirection === 'horizontal') {
15417          scaleX = scale;
15418        } else {
15419          scaleY = scale;
15420        }
15421        subEl.querySelectorAll((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(params.progressbarFillClass)).forEach(progressEl => {
15422          progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;
15423          progressEl.style.transitionDuration = `${swiper.params.speed}ms`;
15424        });
15425      }
15426      if (params.type === 'custom' && params.renderCustom) {
15427        subEl.innerHTML = params.renderCustom(swiper, current + 1, total);
15428        if (subElIndex === 0) emit('paginationRender', subEl);
15429      } else {
15430        if (subElIndex === 0) emit('paginationRender', subEl);
15431        emit('paginationUpdate', subEl);
15432      }
15433      if (swiper.params.watchOverflow && swiper.enabled) {
15434        subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);
15435      }
15436    });
15437  }
15438  function render() {
15439    // Render Container
15440    const params = swiper.params.pagination;
15441    if (isPaginationDisabled()) return;
15442    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;
15443    let el = swiper.pagination.el;
15444    el = makeElementsArray(el);
15445    let paginationHTML = '';
15446    if (params.type === 'bullets') {
15447      let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
15448      if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {
15449        numberOfBullets = slidesLength;
15450      }
15451      for (let i = 0; i < numberOfBullets; i += 1) {
15452        if (params.renderBullet) {
15453          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
15454        } else {
15455          // prettier-ignore
15456          paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part="bullet"' : ''} class="${params.bulletClass}"></${params.bulletElement}>`;
15457        }
15458      }
15459    }
15460    if (params.type === 'fraction') {
15461      if (params.renderFraction) {
15462        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
15463      } else {
15464        paginationHTML = `<span class="${params.currentClass}"></span>` + ' / ' + `<span class="${params.totalClass}"></span>`;
15465      }
15466    }
15467    if (params.type === 'progressbar') {
15468      if (params.renderProgressbar) {
15469        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
15470      } else {
15471        paginationHTML = `<span class="${params.progressbarFillClass}"></span>`;
15472      }
15473    }
15474    swiper.pagination.bullets = [];
15475    el.forEach(subEl => {
15476      if (params.type !== 'custom') {
15477        subEl.innerHTML = paginationHTML || '';
15478      }
15479      if (params.type === 'bullets') {
15480        swiper.pagination.bullets.push(...subEl.querySelectorAll((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(params.bulletClass)));
15481      }
15482    });
15483    if (params.type !== 'custom') {
15484      emit('paginationRender', el[0]);
15485    }
15486  }
15487  function init() {
15488    swiper.params.pagination = (0,_shared_create_element_if_not_defined_mjs__WEBPACK_IMPORTED_MODULE_1__.c)(swiper, swiper.originalParams.pagination, swiper.params.pagination, {
15489      el: 'swiper-pagination'
15490    });
15491    const params = swiper.params.pagination;
15492    if (!params.el) return;
15493    let el;
15494    if (typeof params.el === 'string' && swiper.isElement) {
15495      el = swiper.el.querySelector(params.el);
15496    }
15497    if (!el && typeof params.el === 'string') {
15498      el = [...document.querySelectorAll(params.el)];
15499    }
15500    if (!el) {
15501      el = params.el;
15502    }
15503    if (!el || el.length === 0) return;
15504    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {
15505      el = [...swiper.el.querySelectorAll(params.el)];
15506      // check if it belongs to another nested Swiper
15507      if (el.length > 1) {
15508        el = el.filter(subEl => {
15509          if ((0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_2__.a)(subEl, '.swiper')[0] !== swiper.el) return false;
15510          return true;
15511        })[0];
15512      }
15513    }
15514    if (Array.isArray(el) && el.length === 1) el = el[0];
15515    Object.assign(swiper.pagination, {
15516      el
15517    });
15518    el = makeElementsArray(el);
15519    el.forEach(subEl => {
15520      if (params.type === 'bullets' && params.clickable) {
15521        subEl.classList.add(...(params.clickableClass || '').split(' '));
15522      }
15523      subEl.classList.add(params.modifierClass + params.type);
15524      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
15525      if (params.type === 'bullets' && params.dynamicBullets) {
15526        subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);
15527        dynamicBulletIndex = 0;
15528        if (params.dynamicMainBullets < 1) {
15529          params.dynamicMainBullets = 1;
15530        }
15531      }
15532      if (params.type === 'progressbar' && params.progressbarOpposite) {
15533        subEl.classList.add(params.progressbarOppositeClass);
15534      }
15535      if (params.clickable) {
15536        subEl.addEventListener('click', onBulletClick);
15537      }
15538      if (!swiper.enabled) {
15539        subEl.classList.add(params.lockClass);
15540      }
15541    });
15542  }
15543  function destroy() {
15544    const params = swiper.params.pagination;
15545    if (isPaginationDisabled()) return;
15546    let el = swiper.pagination.el;
15547    if (el) {
15548      el = makeElementsArray(el);
15549      el.forEach(subEl => {
15550        subEl.classList.remove(params.hiddenClass);
15551        subEl.classList.remove(params.modifierClass + params.type);
15552        subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
15553        if (params.clickable) {
15554          subEl.classList.remove(...(params.clickableClass || '').split(' '));
15555          subEl.removeEventListener('click', onBulletClick);
15556        }
15557      });
15558    }
15559    if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));
15560  }
15561  on('changeDirection', () => {
15562    if (!swiper.pagination || !swiper.pagination.el) return;
15563    const params = swiper.params.pagination;
15564    let {
15565      el
15566    } = swiper.pagination;
15567    el = makeElementsArray(el);
15568    el.forEach(subEl => {
15569      subEl.classList.remove(params.horizontalClass, params.verticalClass);
15570      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
15571    });
15572  });
15573  on('init', () => {
15574    if (swiper.params.pagination.enabled === false) {
15575      // eslint-disable-next-line
15576      disable();
15577    } else {
15578      init();
15579      render();
15580      update();
15581    }
15582  });
15583  on('activeIndexChange', () => {
15584    if (typeof swiper.snapIndex === 'undefined') {
15585      update();
15586    }
15587  });
15588  on('snapIndexChange', () => {
15589    update();
15590  });
15591  on('snapGridLengthChange', () => {
15592    render();
15593    update();
15594  });
15595  on('destroy', () => {
15596    destroy();
15597  });
15598  on('enable disable', () => {
15599    let {
15600      el
15601    } = swiper.pagination;
15602    if (el) {
15603      el = makeElementsArray(el);
15604      el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));
15605    }
15606  });
15607  on('lock unlock', () => {
15608    update();
15609  });
15610  on('click', (_s, e) => {
15611    const targetEl = e.target;
15612    const el = makeElementsArray(swiper.pagination.el);
15613    if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {
15614      if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;
15615      const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);
15616      if (isHidden === true) {
15617        emit('paginationShow');
15618      } else {
15619        emit('paginationHide');
15620      }
15621      el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));
15622    }
15623  });
15624  const enable = () => {
15625    swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);
15626    let {
15627      el
15628    } = swiper.pagination;
15629    if (el) {
15630      el = makeElementsArray(el);
15631      el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));
15632    }
15633    init();
15634    render();
15635    update();
15636  };
15637  const disable = () => {
15638    swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);
15639    let {
15640      el
15641    } = swiper.pagination;
15642    if (el) {
15643      el = makeElementsArray(el);
15644      el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));
15645    }
15646    destroy();
15647  };
15648  Object.assign(swiper.pagination, {
15649    enable,
15650    disable,
15651    render,
15652    update,
15653    init,
15654    destroy
15655  });
15656}
15657
15658
15659
15660
15661/***/ }),
15662
vendor: 4,698 bytes, lines 15663-15802
15663/***/ "./node_modules/swiper/modules/parallax.mjs":
15664/*!**************************************************!*\
15665  !*** ./node_modules/swiper/modules/parallax.mjs ***!
15666  \**************************************************/
15667/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
15668
15669"use strict";
15670__webpack_require__.r(__webpack_exports__);
15671/* harmony export */ __webpack_require__.d(__webpack_exports__, {
15672/* harmony export */   "default": () => (/* binding */ Parallax)
15673/* harmony export */ });
15674/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
15675
15676
15677function Parallax(_ref) {
15678  let {
15679    swiper,
15680    extendParams,
15681    on
15682  } = _ref;
15683  extendParams({
15684    parallax: {
15685      enabled: false
15686    }
15687  });
15688  const elementsSelector = '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]';
15689  const setTransform = (el, progress) => {
15690    const {
15691      rtl
15692    } = swiper;
15693    const rtlFactor = rtl ? -1 : 1;
15694    const p = el.getAttribute('data-swiper-parallax') || '0';
15695    let x = el.getAttribute('data-swiper-parallax-x');
15696    let y = el.getAttribute('data-swiper-parallax-y');
15697    const scale = el.getAttribute('data-swiper-parallax-scale');
15698    const opacity = el.getAttribute('data-swiper-parallax-opacity');
15699    const rotate = el.getAttribute('data-swiper-parallax-rotate');
15700    if (x || y) {
15701      x = x || '0';
15702      y = y || '0';
15703    } else if (swiper.isHorizontal()) {
15704      x = p;
15705      y = '0';
15706    } else {
15707      y = p;
15708      x = '0';
15709    }
15710    if (x.indexOf('%') >= 0) {
15711      x = `${parseInt(x, 10) * progress * rtlFactor}%`;
15712    } else {
15713      x = `${x * progress * rtlFactor}px`;
15714    }
15715    if (y.indexOf('%') >= 0) {
15716      y = `${parseInt(y, 10) * progress}%`;
15717    } else {
15718      y = `${y * progress}px`;
15719    }
15720    if (typeof opacity !== 'undefined' && opacity !== null) {
15721      const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));
15722      el.style.opacity = currentOpacity;
15723    }
15724    let transform = `translate3d(${x}, ${y}, 0px)`;
15725    if (typeof scale !== 'undefined' && scale !== null) {
15726      const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));
15727      transform += ` scale(${currentScale})`;
15728    }
15729    if (rotate && typeof rotate !== 'undefined' && rotate !== null) {
15730      const currentRotate = rotate * progress * -1;
15731      transform += ` rotate(${currentRotate}deg)`;
15732    }
15733    el.style.transform = transform;
15734  };
15735  const setTranslate = () => {
15736    const {
15737      el,
15738      slides,
15739      progress,
15740      snapGrid,
15741      isElement
15742    } = swiper;
15743    const elements = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.e)(el, elementsSelector);
15744    if (swiper.isElement) {
15745      elements.push(...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.e)(swiper.hostEl, elementsSelector));
15746    }
15747    elements.forEach(subEl => {
15748      setTransform(subEl, progress);
15749    });
15750    slides.forEach((slideEl, slideIndex) => {
15751      let slideProgress = slideEl.progress;
15752      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
15753        slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);
15754      }
15755      slideProgress = Math.min(Math.max(slideProgress, -1), 1);
15756      slideEl.querySelectorAll(`${elementsSelector}, [data-swiper-parallax-rotate]`).forEach(subEl => {
15757        setTransform(subEl, slideProgress);
15758      });
15759    });
15760  };
15761  const setTransition = function (duration) {
15762    if (duration === void 0) {
15763      duration = swiper.params.speed;
15764    }
15765    const {
15766      el,
15767      hostEl
15768    } = swiper;
15769    const elements = [...el.querySelectorAll(elementsSelector)];
15770    if (swiper.isElement) {
15771      elements.push(...hostEl.querySelectorAll(elementsSelector));
15772    }
15773    elements.forEach(parallaxEl => {
15774      let parallaxDuration = parseInt(parallaxEl.getAttribute('data-swiper-parallax-duration'), 10) || duration;
15775      if (duration === 0) parallaxDuration = 0;
15776      parallaxEl.style.transitionDuration = `${parallaxDuration}ms`;
15777    });
15778  };
15779  on('beforeInit', () => {
15780    if (!swiper.params.parallax.enabled) return;
15781    swiper.params.watchSlidesProgress = true;
15782    swiper.originalParams.watchSlidesProgress = true;
15783  });
15784  on('init', () => {
15785    if (!swiper.params.parallax.enabled) return;
15786    setTranslate();
15787  });
15788  on('setTranslate', () => {
15789    if (!swiper.params.parallax.enabled) return;
15790    setTranslate();
15791  });
15792  on('setTransition', (_swiper, duration) => {
15793    if (!swiper.params.parallax.enabled) return;
15794    setTransition(duration);
15795  });
15796}
15797
15798
15799
15800
15801/***/ }),
15802
vendor: 12,038 bytes, lines 15803-16175
15803/***/ "./node_modules/swiper/modules/scrollbar.mjs":
15804/*!***************************************************!*\
15805  !*** ./node_modules/swiper/modules/scrollbar.mjs ***!
15806  \***************************************************/
15807/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
15808
15809"use strict";
15810__webpack_require__.r(__webpack_exports__);
15811/* harmony export */ __webpack_require__.d(__webpack_exports__, {
15812/* harmony export */   "default": () => (/* binding */ Scrollbar)
15813/* harmony export */ });
15814/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs");
15815/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
15816/* harmony import */ var _shared_create_element_if_not_defined_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/create-element-if-not-defined.mjs */ "./node_modules/swiper/shared/create-element-if-not-defined.mjs");
15817/* harmony import */ var _shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/classes-to-selector.mjs */ "./node_modules/swiper/shared/classes-to-selector.mjs");
15818
15819
15820
15821
15822
15823function Scrollbar(_ref) {
15824  let {
15825    swiper,
15826    extendParams,
15827    on,
15828    emit
15829  } = _ref;
15830  const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)();
15831  let isTouched = false;
15832  let timeout = null;
15833  let dragTimeout = null;
15834  let dragStartPos;
15835  let dragSize;
15836  let trackSize;
15837  let divider;
15838  extendParams({
15839    scrollbar: {
15840      el: null,
15841      dragSize: 'auto',
15842      hide: false,
15843      draggable: false,
15844      snapOnRelease: true,
15845      lockClass: 'swiper-scrollbar-lock',
15846      dragClass: 'swiper-scrollbar-drag',
15847      scrollbarDisabledClass: 'swiper-scrollbar-disabled',
15848      horizontalClass: `swiper-scrollbar-horizontal`,
15849      verticalClass: `swiper-scrollbar-vertical`
15850    }
15851  });
15852  swiper.scrollbar = {
15853    el: null,
15854    dragEl: null
15855  };
15856  function setTranslate() {
15857    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
15858    const {
15859      scrollbar,
15860      rtlTranslate: rtl
15861    } = swiper;
15862    const {
15863      dragEl,
15864      el
15865    } = scrollbar;
15866    const params = swiper.params.scrollbar;
15867    const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;
15868    let newSize = dragSize;
15869    let newPos = (trackSize - dragSize) * progress;
15870    if (rtl) {
15871      newPos = -newPos;
15872      if (newPos > 0) {
15873        newSize = dragSize - newPos;
15874        newPos = 0;
15875      } else if (-newPos + dragSize > trackSize) {
15876        newSize = trackSize + newPos;
15877      }
15878    } else if (newPos < 0) {
15879      newSize = dragSize + newPos;
15880      newPos = 0;
15881    } else if (newPos + dragSize > trackSize) {
15882      newSize = trackSize - newPos;
15883    }
15884    if (swiper.isHorizontal()) {
15885      dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;
15886      dragEl.style.width = `${newSize}px`;
15887    } else {
15888      dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;
15889      dragEl.style.height = `${newSize}px`;
15890    }
15891    if (params.hide) {
15892      clearTimeout(timeout);
15893      el.style.opacity = 1;
15894      timeout = setTimeout(() => {
15895        el.style.opacity = 0;
15896        el.style.transitionDuration = '400ms';
15897      }, 1000);
15898    }
15899  }
15900  function setTransition(duration) {
15901    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
15902    swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;
15903  }
15904  function updateSize() {
15905    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
15906    const {
15907      scrollbar
15908    } = swiper;
15909    const {
15910      dragEl,
15911      el
15912    } = scrollbar;
15913    dragEl.style.width = '';
15914    dragEl.style.height = '';
15915    trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;
15916    divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));
15917    if (swiper.params.scrollbar.dragSize === 'auto') {
15918      dragSize = trackSize * divider;
15919    } else {
15920      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
15921    }
15922    if (swiper.isHorizontal()) {
15923      dragEl.style.width = `${dragSize}px`;
15924    } else {
15925      dragEl.style.height = `${dragSize}px`;
15926    }
15927    if (divider >= 1) {
15928      el.style.display = 'none';
15929    } else {
15930      el.style.display = '';
15931    }
15932    if (swiper.params.scrollbar.hide) {
15933      el.style.opacity = 0;
15934    }
15935    if (swiper.params.watchOverflow && swiper.enabled) {
15936      scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);
15937    }
15938  }
15939  function getPointerPosition(e) {
15940    return swiper.isHorizontal() ? e.clientX : e.clientY;
15941  }
15942  function setDragPosition(e) {
15943    const {
15944      scrollbar,
15945      rtlTranslate: rtl
15946    } = swiper;
15947    const {
15948      el
15949    } = scrollbar;
15950    let positionRatio;
15951    positionRatio = (getPointerPosition(e) - (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.b)(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);
15952    positionRatio = Math.max(Math.min(positionRatio, 1), 0);
15953    if (rtl) {
15954      positionRatio = 1 - positionRatio;
15955    }
15956    const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;
15957    swiper.updateProgress(position);
15958    swiper.setTranslate(position);
15959    swiper.updateActiveIndex();
15960    swiper.updateSlidesClasses();
15961  }
15962  function onDragStart(e) {
15963    const params = swiper.params.scrollbar;
15964    const {
15965      scrollbar,
15966      wrapperEl
15967    } = swiper;
15968    const {
15969      el,
15970      dragEl
15971    } = scrollbar;
15972    isTouched = true;
15973    dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;
15974    e.preventDefault();
15975    e.stopPropagation();
15976    wrapperEl.style.transitionDuration = '100ms';
15977    dragEl.style.transitionDuration = '100ms';
15978    setDragPosition(e);
15979    clearTimeout(dragTimeout);
15980    el.style.transitionDuration = '0ms';
15981    if (params.hide) {
15982      el.style.opacity = 1;
15983    }
15984    if (swiper.params.cssMode) {
15985      swiper.wrapperEl.style['scroll-snap-type'] = 'none';
15986    }
15987    emit('scrollbarDragStart', e);
15988  }
15989  function onDragMove(e) {
15990    const {
15991      scrollbar,
15992      wrapperEl
15993    } = swiper;
15994    const {
15995      el,
15996      dragEl
15997    } = scrollbar;
15998    if (!isTouched) return;
15999    if (e.preventDefault) e.preventDefault();else e.returnValue = false;
16000    setDragPosition(e);
16001    wrapperEl.style.transitionDuration = '0ms';
16002    el.style.transitionDuration = '0ms';
16003    dragEl.style.transitionDuration = '0ms';
16004    emit('scrollbarDragMove', e);
16005  }
16006  function onDragEnd(e) {
16007    const params = swiper.params.scrollbar;
16008    const {
16009      scrollbar,
16010      wrapperEl
16011    } = swiper;
16012    const {
16013      el
16014    } = scrollbar;
16015    if (!isTouched) return;
16016    isTouched = false;
16017    if (swiper.params.cssMode) {
16018      swiper.wrapperEl.style['scroll-snap-type'] = '';
16019      wrapperEl.style.transitionDuration = '';
16020    }
16021    if (params.hide) {
16022      clearTimeout(dragTimeout);
16023      dragTimeout = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.n)(() => {
16024        el.style.opacity = 0;
16025        el.style.transitionDuration = '400ms';
16026      }, 1000);
16027    }
16028    emit('scrollbarDragEnd', e);
16029    if (params.snapOnRelease) {
16030      swiper.slideToClosest();
16031    }
16032  }
16033  function events(method) {
16034    const {
16035      scrollbar,
16036      params
16037    } = swiper;
16038    const el = scrollbar.el;
16039    if (!el) return;
16040    const target = el;
16041    const activeListener = params.passiveListeners ? {
16042      passive: false,
16043      capture: false
16044    } : false;
16045    const passiveListener = params.passiveListeners ? {
16046      passive: true,
16047      capture: false
16048    } : false;
16049    if (!target) return;
16050    const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';
16051    target[eventMethod]('pointerdown', onDragStart, activeListener);
16052    document[eventMethod]('pointermove', onDragMove, activeListener);
16053    document[eventMethod]('pointerup', onDragEnd, passiveListener);
16054  }
16055  function enableDraggable() {
16056    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
16057    events('on');
16058  }
16059  function disableDraggable() {
16060    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
16061    events('off');
16062  }
16063  function init() {
16064    const {
16065      scrollbar,
16066      el: swiperEl
16067    } = swiper;
16068    swiper.params.scrollbar = (0,_shared_create_element_if_not_defined_mjs__WEBPACK_IMPORTED_MODULE_2__.c)(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {
16069      el: 'swiper-scrollbar'
16070    });
16071    const params = swiper.params.scrollbar;
16072    if (!params.el) return;
16073    let el;
16074    if (typeof params.el === 'string' && swiper.isElement) {
16075      el = swiper.el.querySelector(params.el);
16076    }
16077    if (!el && typeof params.el === 'string') {
16078      el = document.querySelectorAll(params.el);
16079      if (!el.length) return;
16080    } else if (!el) {
16081      el = params.el;
16082    }
16083    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {
16084      el = swiperEl.querySelector(params.el);
16085    }
16086    if (el.length > 0) el = el[0];
16087    el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
16088    let dragEl;
16089    if (el) {
16090      dragEl = el.querySelector((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_3__.c)(swiper.params.scrollbar.dragClass));
16091      if (!dragEl) {
16092        dragEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', swiper.params.scrollbar.dragClass);
16093        el.append(dragEl);
16094      }
16095    }
16096    Object.assign(scrollbar, {
16097      el,
16098      dragEl
16099    });
16100    if (params.draggable) {
16101      enableDraggable();
16102    }
16103    if (el) {
16104      el.classList[swiper.enabled ? 'remove' : 'add'](...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.h)(swiper.params.scrollbar.lockClass));
16105    }
16106  }
16107  function destroy() {
16108    const params = swiper.params.scrollbar;
16109    const el = swiper.scrollbar.el;
16110    if (el) {
16111      el.classList.remove(...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.h)(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass));
16112    }
16113    disableDraggable();
16114  }
16115  on('init', () => {
16116    if (swiper.params.scrollbar.enabled === false) {
16117      // eslint-disable-next-line
16118      disable();
16119    } else {
16120      init();
16121      updateSize();
16122      setTranslate();
16123    }
16124  });
16125  on('update resize observerUpdate lock unlock', () => {
16126    updateSize();
16127  });
16128  on('setTranslate', () => {
16129    setTranslate();
16130  });
16131  on('setTransition', (_s, duration) => {
16132    setTransition(duration);
16133  });
16134  on('enable disable', () => {
16135    const {
16136      el
16137    } = swiper.scrollbar;
16138    if (el) {
16139      el.classList[swiper.enabled ? 'remove' : 'add'](...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.h)(swiper.params.scrollbar.lockClass));
16140    }
16141  });
16142  on('destroy', () => {
16143    destroy();
16144  });
16145  const enable = () => {
16146    swiper.el.classList.remove(...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.h)(swiper.params.scrollbar.scrollbarDisabledClass));
16147    if (swiper.scrollbar.el) {
16148      swiper.scrollbar.el.classList.remove(...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.h)(swiper.params.scrollbar.scrollbarDisabledClass));
16149    }
16150    init();
16151    updateSize();
16152    setTranslate();
16153  };
16154  const disable = () => {
16155    swiper.el.classList.add(...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.h)(swiper.params.scrollbar.scrollbarDisabledClass));
16156    if (swiper.scrollbar.el) {
16157      swiper.scrollbar.el.classList.add(...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.h)(swiper.params.scrollbar.scrollbarDisabledClass));
16158    }
16159    destroy();
16160  };
16161  Object.assign(swiper.scrollbar, {
16162    enable,
16163    disable,
16164    updateSize,
16165    setTranslate,
16166    init,
16167    destroy
16168  });
16169}
16170
16171
16172
16173
16174/***/ }),
16175
vendor: 8,025 bytes, lines 16176-16384
16176/***/ "./node_modules/swiper/modules/thumbs.mjs":
16177/*!************************************************!*\
16178  !*** ./node_modules/swiper/modules/thumbs.mjs ***!
16179  \************************************************/
16180/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
16181
16182"use strict";
16183__webpack_require__.r(__webpack_exports__);
16184/* harmony export */ __webpack_require__.d(__webpack_exports__, {
16185/* harmony export */   "default": () => (/* binding */ Thumb)
16186/* harmony export */ });
16187/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs");
16188/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
16189
16190
16191
16192function Thumb(_ref) {
16193  let {
16194    swiper,
16195    extendParams,
16196    on
16197  } = _ref;
16198  extendParams({
16199    thumbs: {
16200      swiper: null,
16201      multipleActiveThumbs: true,
16202      autoScrollOffset: 0,
16203      slideThumbActiveClass: 'swiper-slide-thumb-active',
16204      thumbsContainerClass: 'swiper-thumbs'
16205    }
16206  });
16207  let initialized = false;
16208  let swiperCreated = false;
16209  swiper.thumbs = {
16210    swiper: null
16211  };
16212  function onThumbClick() {
16213    const thumbsSwiper = swiper.thumbs.swiper;
16214    if (!thumbsSwiper || thumbsSwiper.destroyed) return;
16215    const clickedIndex = thumbsSwiper.clickedIndex;
16216    const clickedSlide = thumbsSwiper.clickedSlide;
16217    if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;
16218    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;
16219    let slideToIndex;
16220    if (thumbsSwiper.params.loop) {
16221      slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);
16222    } else {
16223      slideToIndex = clickedIndex;
16224    }
16225    if (swiper.params.loop) {
16226      swiper.slideToLoop(slideToIndex);
16227    } else {
16228      swiper.slideTo(slideToIndex);
16229    }
16230  }
16231  function init() {
16232    const {
16233      thumbs: thumbsParams
16234    } = swiper.params;
16235    if (initialized) return false;
16236    initialized = true;
16237    const SwiperClass = swiper.constructor;
16238    if (thumbsParams.swiper instanceof SwiperClass) {
16239      swiper.thumbs.swiper = thumbsParams.swiper;
16240      Object.assign(swiper.thumbs.swiper.originalParams, {
16241        watchSlidesProgress: true,
16242        slideToClickedSlide: false
16243      });
16244      Object.assign(swiper.thumbs.swiper.params, {
16245        watchSlidesProgress: true,
16246        slideToClickedSlide: false
16247      });
16248      swiper.thumbs.swiper.update();
16249    } else if ((0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.k)(thumbsParams.swiper)) {
16250      const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);
16251      Object.assign(thumbsSwiperParams, {
16252        watchSlidesProgress: true,
16253        slideToClickedSlide: false
16254      });
16255      swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);
16256      swiperCreated = true;
16257    }
16258    swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);
16259    swiper.thumbs.swiper.on('tap', onThumbClick);
16260    return true;
16261  }
16262  function update(initial) {
16263    const thumbsSwiper = swiper.thumbs.swiper;
16264    if (!thumbsSwiper || thumbsSwiper.destroyed) return;
16265    const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;
16266
16267    // Activate thumbs
16268    let thumbsToActivate = 1;
16269    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;
16270    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
16271      thumbsToActivate = swiper.params.slidesPerView;
16272    }
16273    if (!swiper.params.thumbs.multipleActiveThumbs) {
16274      thumbsToActivate = 1;
16275    }
16276    thumbsToActivate = Math.floor(thumbsToActivate);
16277    thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass));
16278    if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {
16279      for (let i = 0; i < thumbsToActivate; i += 1) {
16280        (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(thumbsSwiper.slidesEl, `[data-swiper-slide-index="${swiper.realIndex + i}"]`).forEach(slideEl => {
16281          slideEl.classList.add(thumbActiveClass);
16282        });
16283      }
16284    } else {
16285      for (let i = 0; i < thumbsToActivate; i += 1) {
16286        if (thumbsSwiper.slides[swiper.realIndex + i]) {
16287          thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);
16288        }
16289      }
16290    }
16291    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;
16292    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;
16293    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {
16294      const currentThumbsIndex = thumbsSwiper.activeIndex;
16295      let newThumbsIndex;
16296      let direction;
16297      if (thumbsSwiper.params.loop) {
16298        const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0];
16299        newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);
16300        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';
16301      } else {
16302        newThumbsIndex = swiper.realIndex;
16303        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';
16304      }
16305      if (useOffset) {
16306        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;
16307      }
16308      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
16309        if (thumbsSwiper.params.centeredSlides) {
16310          if (newThumbsIndex > currentThumbsIndex) {
16311            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
16312          } else {
16313            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
16314          }
16315        } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ;
16316        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
16317      }
16318    }
16319  }
16320  on('beforeInit', () => {
16321    const {
16322      thumbs
16323    } = swiper.params;
16324    if (!thumbs || !thumbs.swiper) return;
16325    if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {
16326      const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)();
16327      const getThumbsElementAndInit = () => {
16328        const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;
16329        if (thumbsElement && thumbsElement.swiper) {
16330          thumbs.swiper = thumbsElement.swiper;
16331          init();
16332          update(true);
16333        } else if (thumbsElement) {
16334          const onThumbsSwiper = e => {
16335            thumbs.swiper = e.detail[0];
16336            thumbsElement.removeEventListener('init', onThumbsSwiper);
16337            init();
16338            update(true);
16339            thumbs.swiper.update();
16340            swiper.update();
16341          };
16342          thumbsElement.addEventListener('init', onThumbsSwiper);
16343        }
16344        return thumbsElement;
16345      };
16346      const watchForThumbsToAppear = () => {
16347        if (swiper.destroyed) return;
16348        const thumbsElement = getThumbsElementAndInit();
16349        if (!thumbsElement) {
16350          requestAnimationFrame(watchForThumbsToAppear);
16351        }
16352      };
16353      requestAnimationFrame(watchForThumbsToAppear);
16354    } else {
16355      init();
16356      update(true);
16357    }
16358  });
16359  on('slideChange update resize observerUpdate', () => {
16360    update();
16361  });
16362  on('setTransition', (_s, duration) => {
16363    const thumbsSwiper = swiper.thumbs.swiper;
16364    if (!thumbsSwiper || thumbsSwiper.destroyed) return;
16365    thumbsSwiper.setTransition(duration);
16366  });
16367  on('beforeDestroy', () => {
16368    const thumbsSwiper = swiper.thumbs.swiper;
16369    if (!thumbsSwiper || thumbsSwiper.destroyed) return;
16370    if (swiperCreated) {
16371      thumbsSwiper.destroy();
16372    }
16373  });
16374  Object.assign(swiper.thumbs, {
16375    init,
16376    update
16377  });
16378}
16379
16380
16381
16382
16383/***/ }),
16384
vendor: 12,287 bytes, lines 16385-16746
16385/***/ "./node_modules/swiper/modules/virtual.mjs":
16386/*!*************************************************!*\
16387  !*** ./node_modules/swiper/modules/virtual.mjs ***!
16388  \*************************************************/
16389/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
16390
16391"use strict";
16392__webpack_require__.r(__webpack_exports__);
16393/* harmony export */ __webpack_require__.d(__webpack_exports__, {
16394/* harmony export */   "default": () => (/* binding */ Virtual)
16395/* harmony export */ });
16396/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs");
16397/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
16398
16399
16400
16401function Virtual(_ref) {
16402  let {
16403    swiper,
16404    extendParams,
16405    on,
16406    emit
16407  } = _ref;
16408  extendParams({
16409    virtual: {
16410      enabled: false,
16411      slides: [],
16412      cache: true,
16413      renderSlide: null,
16414      renderExternal: null,
16415      renderExternalUpdate: true,
16416      addSlidesBefore: 0,
16417      addSlidesAfter: 0
16418    }
16419  });
16420  let cssModeTimeout;
16421  const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)();
16422  swiper.virtual = {
16423    cache: {},
16424    from: undefined,
16425    to: undefined,
16426    slides: [],
16427    offset: 0,
16428    slidesGrid: []
16429  };
16430  const tempDOM = document.createElement('div');
16431  function renderSlide(slide, index) {
16432    const params = swiper.params.virtual;
16433    if (params.cache && swiper.virtual.cache[index]) {
16434      return swiper.virtual.cache[index];
16435    }
16436    // eslint-disable-next-line
16437    let slideEl;
16438    if (params.renderSlide) {
16439      slideEl = params.renderSlide.call(swiper, slide, index);
16440      if (typeof slideEl === 'string') {
16441        tempDOM.innerHTML = slideEl;
16442        slideEl = tempDOM.children[0];
16443      }
16444    } else if (swiper.isElement) {
16445      slideEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('swiper-slide');
16446    } else {
16447      slideEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', swiper.params.slideClass);
16448    }
16449    slideEl.setAttribute('data-swiper-slide-index', index);
16450    if (!params.renderSlide) {
16451      slideEl.innerHTML = slide;
16452    }
16453    if (params.cache) {
16454      swiper.virtual.cache[index] = slideEl;
16455    }
16456    return slideEl;
16457  }
16458  function update(force) {
16459    const {
16460      slidesPerView,
16461      slidesPerGroup,
16462      centeredSlides,
16463      loop: isLoop
16464    } = swiper.params;
16465    const {
16466      addSlidesBefore,
16467      addSlidesAfter
16468    } = swiper.params.virtual;
16469    const {
16470      from: previousFrom,
16471      to: previousTo,
16472      slides,
16473      slidesGrid: previousSlidesGrid,
16474      offset: previousOffset
16475    } = swiper.virtual;
16476    if (!swiper.params.cssMode) {
16477      swiper.updateActiveIndex();
16478    }
16479    const activeIndex = swiper.activeIndex || 0;
16480    let offsetProp;
16481    if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';
16482    let slidesAfter;
16483    let slidesBefore;
16484    if (centeredSlides) {
16485      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
16486      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
16487    } else {
16488      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;
16489      slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore;
16490    }
16491    let from = activeIndex - slidesBefore;
16492    let to = activeIndex + slidesAfter;
16493    if (!isLoop) {
16494      from = Math.max(from, 0);
16495      to = Math.min(to, slides.length - 1);
16496    }
16497    let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
16498    if (isLoop && activeIndex >= slidesBefore) {
16499      from -= slidesBefore;
16500      if (!centeredSlides) offset += swiper.slidesGrid[0];
16501    } else if (isLoop && activeIndex < slidesBefore) {
16502      from = -slidesBefore;
16503      if (centeredSlides) offset += swiper.slidesGrid[0];
16504    }
16505    Object.assign(swiper.virtual, {
16506      from,
16507      to,
16508      offset,
16509      slidesGrid: swiper.slidesGrid,
16510      slidesBefore,
16511      slidesAfter
16512    });
16513    function onRendered() {
16514      swiper.updateSlides();
16515      swiper.updateProgress();
16516      swiper.updateSlidesClasses();
16517      emit('virtualUpdate');
16518    }
16519    if (previousFrom === from && previousTo === to && !force) {
16520      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
16521        swiper.slides.forEach(slideEl => {
16522          slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;
16523        });
16524      }
16525      swiper.updateProgress();
16526      emit('virtualUpdate');
16527      return;
16528    }
16529    if (swiper.params.virtual.renderExternal) {
16530      swiper.params.virtual.renderExternal.call(swiper, {
16531        offset,
16532        from,
16533        to,
16534        slides: function getSlides() {
16535          const slidesToRender = [];
16536          for (let i = from; i <= to; i += 1) {
16537            slidesToRender.push(slides[i]);
16538          }
16539          return slidesToRender;
16540        }()
16541      });
16542      if (swiper.params.virtual.renderExternalUpdate) {
16543        onRendered();
16544      } else {
16545        emit('virtualUpdate');
16546      }
16547      return;
16548    }
16549    const prependIndexes = [];
16550    const appendIndexes = [];
16551    const getSlideIndex = index => {
16552      let slideIndex = index;
16553      if (index < 0) {
16554        slideIndex = slides.length + index;
16555      } else if (slideIndex >= slides.length) {
16556        // eslint-disable-next-line
16557        slideIndex = slideIndex - slides.length;
16558      }
16559      return slideIndex;
16560    };
16561    if (force) {
16562      swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`)).forEach(slideEl => {
16563        slideEl.remove();
16564      });
16565    } else {
16566      for (let i = previousFrom; i <= previousTo; i += 1) {
16567        if (i < from || i > to) {
16568          const slideIndex = getSlideIndex(i);
16569          swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}[data-swiper-slide-index="${slideIndex}"], swiper-slide[data-swiper-slide-index="${slideIndex}"]`)).forEach(slideEl => {
16570            slideEl.remove();
16571          });
16572        }
16573      }
16574    }
16575    const loopFrom = isLoop ? -slides.length : 0;
16576    const loopTo = isLoop ? slides.length * 2 : slides.length;
16577    for (let i = loopFrom; i < loopTo; i += 1) {
16578      if (i >= from && i <= to) {
16579        const slideIndex = getSlideIndex(i);
16580        if (typeof previousTo === 'undefined' || force) {
16581          appendIndexes.push(slideIndex);
16582        } else {
16583          if (i > previousTo) appendIndexes.push(slideIndex);
16584          if (i < previousFrom) prependIndexes.push(slideIndex);
16585        }
16586      }
16587    }
16588    appendIndexes.forEach(index => {
16589      swiper.slidesEl.append(renderSlide(slides[index], index));
16590    });
16591    if (isLoop) {
16592      for (let i = prependIndexes.length - 1; i >= 0; i -= 1) {
16593        const index = prependIndexes[i];
16594        swiper.slidesEl.prepend(renderSlide(slides[index], index));
16595      }
16596    } else {
16597      prependIndexes.sort((a, b) => b - a);
16598      prependIndexes.forEach(index => {
16599        swiper.slidesEl.prepend(renderSlide(slides[index], index));
16600      });
16601    }
16602    (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach(slideEl => {
16603      slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;
16604    });
16605    onRendered();
16606  }
16607  function appendSlide(slides) {
16608    if (typeof slides === 'object' && 'length' in slides) {
16609      for (let i = 0; i < slides.length; i += 1) {
16610        if (slides[i]) swiper.virtual.slides.push(slides[i]);
16611      }
16612    } else {
16613      swiper.virtual.slides.push(slides);
16614    }
16615    update(true);
16616  }
16617  function prependSlide(slides) {
16618    const activeIndex = swiper.activeIndex;
16619    let newActiveIndex = activeIndex + 1;
16620    let numberOfNewSlides = 1;
16621    if (Array.isArray(slides)) {
16622      for (let i = 0; i < slides.length; i += 1) {
16623        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
16624      }
16625      newActiveIndex = activeIndex + slides.length;
16626      numberOfNewSlides = slides.length;
16627    } else {
16628      swiper.virtual.slides.unshift(slides);
16629    }
16630    if (swiper.params.virtual.cache) {
16631      const cache = swiper.virtual.cache;
16632      const newCache = {};
16633      Object.keys(cache).forEach(cachedIndex => {
16634        const cachedEl = cache[cachedIndex];
16635        const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index');
16636        if (cachedElIndex) {
16637          cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);
16638        }
16639        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;
16640      });
16641      swiper.virtual.cache = newCache;
16642    }
16643    update(true);
16644    swiper.slideTo(newActiveIndex, 0);
16645  }
16646  function removeSlide(slidesIndexes) {
16647    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;
16648    let activeIndex = swiper.activeIndex;
16649    if (Array.isArray(slidesIndexes)) {
16650      for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {
16651        if (swiper.params.virtual.cache) {
16652          delete swiper.virtual.cache[slidesIndexes[i]];
16653          // shift cache indexes
16654          Object.keys(swiper.virtual.cache).forEach(key => {
16655            if (key > slidesIndexes) {
16656              swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];
16657              swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1);
16658              delete swiper.virtual.cache[key];
16659            }
16660          });
16661        }
16662        swiper.virtual.slides.splice(slidesIndexes[i], 1);
16663        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
16664        activeIndex = Math.max(activeIndex, 0);
16665      }
16666    } else {
16667      if (swiper.params.virtual.cache) {
16668        delete swiper.virtual.cache[slidesIndexes];
16669        // shift cache indexes
16670        Object.keys(swiper.virtual.cache).forEach(key => {
16671          if (key > slidesIndexes) {
16672            swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];
16673            swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1);
16674            delete swiper.virtual.cache[key];
16675          }
16676        });
16677      }
16678      swiper.virtual.slides.splice(slidesIndexes, 1);
16679      if (slidesIndexes < activeIndex) activeIndex -= 1;
16680      activeIndex = Math.max(activeIndex, 0);
16681    }
16682    update(true);
16683    swiper.slideTo(activeIndex, 0);
16684  }
16685  function removeAllSlides() {
16686    swiper.virtual.slides = [];
16687    if (swiper.params.virtual.cache) {
16688      swiper.virtual.cache = {};
16689    }
16690    update(true);
16691    swiper.slideTo(0, 0);
16692  }
16693  on('beforeInit', () => {
16694    if (!swiper.params.virtual.enabled) return;
16695    let domSlidesAssigned;
16696    if (typeof swiper.passedParams.virtual.slides === 'undefined') {
16697      const slides = [...swiper.slidesEl.children].filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`));
16698      if (slides && slides.length) {
16699        swiper.virtual.slides = [...slides];
16700        domSlidesAssigned = true;
16701        slides.forEach((slideEl, slideIndex) => {
16702          slideEl.setAttribute('data-swiper-slide-index', slideIndex);
16703          swiper.virtual.cache[slideIndex] = slideEl;
16704          slideEl.remove();
16705        });
16706      }
16707    }
16708    if (!domSlidesAssigned) {
16709      swiper.virtual.slides = swiper.params.virtual.slides;
16710    }
16711    swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);
16712    swiper.params.watchSlidesProgress = true;
16713    swiper.originalParams.watchSlidesProgress = true;
16714    update();
16715  });
16716  on('setTranslate', () => {
16717    if (!swiper.params.virtual.enabled) return;
16718    if (swiper.params.cssMode && !swiper._immediateVirtual) {
16719      clearTimeout(cssModeTimeout);
16720      cssModeTimeout = setTimeout(() => {
16721        update();
16722      }, 100);
16723    } else {
16724      update();
16725    }
16726  });
16727  on('init update resize', () => {
16728    if (!swiper.params.virtual.enabled) return;
16729    if (swiper.params.cssMode) {
16730      (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.s)(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);
16731    }
16732  });
16733  Object.assign(swiper.virtual, {
16734    appendSlide,
16735    prependSlide,
16736    removeSlide,
16737    removeAllSlides,
16738    update
16739  });
16740}
16741
16742
16743
16744
16745/***/ }),
16746
vendor: 22,561 bytes, lines 16747-17354
16747/***/ "./node_modules/swiper/modules/zoom.mjs":
16748/*!**********************************************!*\
16749  !*** ./node_modules/swiper/modules/zoom.mjs ***!
16750  \**********************************************/
16751/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
16752
16753"use strict";
16754__webpack_require__.r(__webpack_exports__);
16755/* harmony export */ __webpack_require__.d(__webpack_exports__, {
16756/* harmony export */   "default": () => (/* binding */ Zoom)
16757/* harmony export */ });
16758/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs");
16759/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
16760
16761
16762
16763function Zoom(_ref) {
16764  let {
16765    swiper,
16766    extendParams,
16767    on,
16768    emit
16769  } = _ref;
16770  const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
16771  extendParams({
16772    zoom: {
16773      enabled: false,
16774      maxRatio: 3,
16775      minRatio: 1,
16776      toggle: true,
16777      containerClass: 'swiper-zoom-container',
16778      zoomedSlideClass: 'swiper-slide-zoomed'
16779    }
16780  });
16781  swiper.zoom = {
16782    enabled: false
16783  };
16784  let currentScale = 1;
16785  let isScaling = false;
16786  let fakeGestureTouched;
16787  let fakeGestureMoved;
16788  const evCache = [];
16789  const gesture = {
16790    originX: 0,
16791    originY: 0,
16792    slideEl: undefined,
16793    slideWidth: undefined,
16794    slideHeight: undefined,
16795    imageEl: undefined,
16796    imageWrapEl: undefined,
16797    maxRatio: 3
16798  };
16799  const image = {
16800    isTouched: undefined,
16801    isMoved: undefined,
16802    currentX: undefined,
16803    currentY: undefined,
16804    minX: undefined,
16805    minY: undefined,
16806    maxX: undefined,
16807    maxY: undefined,
16808    width: undefined,
16809    height: undefined,
16810    startX: undefined,
16811    startY: undefined,
16812    touchesStart: {},
16813    touchesCurrent: {}
16814  };
16815  const velocity = {
16816    x: undefined,
16817    y: undefined,
16818    prevPositionX: undefined,
16819    prevPositionY: undefined,
16820    prevTime: undefined
16821  };
16822  let scale = 1;
16823  Object.defineProperty(swiper.zoom, 'scale', {
16824    get() {
16825      return scale;
16826    },
16827    set(value) {
16828      if (scale !== value) {
16829        const imageEl = gesture.imageEl;
16830        const slideEl = gesture.slideEl;
16831        emit('zoomChange', value, imageEl, slideEl);
16832      }
16833      scale = value;
16834    }
16835  });
16836  function getDistanceBetweenTouches() {
16837    if (evCache.length < 2) return 1;
16838    const x1 = evCache[0].pageX;
16839    const y1 = evCache[0].pageY;
16840    const x2 = evCache[1].pageX;
16841    const y2 = evCache[1].pageY;
16842    const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
16843    return distance;
16844  }
16845  function getScaleOrigin() {
16846    if (evCache.length < 2) return {
16847      x: null,
16848      y: null
16849    };
16850    const box = gesture.imageEl.getBoundingClientRect();
16851    return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x - window.scrollX) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y - window.scrollY) / currentScale];
16852  }
16853  function getSlideSelector() {
16854    return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;
16855  }
16856  function eventWithinSlide(e) {
16857    const slideSelector = getSlideSelector();
16858    if (e.target.matches(slideSelector)) return true;
16859    if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;
16860    return false;
16861  }
16862  function eventWithinZoomContainer(e) {
16863    const selector = `.${swiper.params.zoom.containerClass}`;
16864    if (e.target.matches(selector)) return true;
16865    if ([...swiper.hostEl.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;
16866    return false;
16867  }
16868
16869  // Events
16870  function onGestureStart(e) {
16871    if (e.pointerType === 'mouse') {
16872      evCache.splice(0, evCache.length);
16873    }
16874    if (!eventWithinSlide(e)) return;
16875    const params = swiper.params.zoom;
16876    fakeGestureTouched = false;
16877    fakeGestureMoved = false;
16878    evCache.push(e);
16879    if (evCache.length < 2) {
16880      return;
16881    }
16882    fakeGestureTouched = true;
16883    gesture.scaleStart = getDistanceBetweenTouches();
16884    if (!gesture.slideEl) {
16885      gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);
16886      if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];
16887      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
16888      if (imageEl) {
16889        imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];
16890      }
16891      gesture.imageEl = imageEl;
16892      if (imageEl) {
16893        gesture.imageWrapEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.a)(gesture.imageEl, `.${params.containerClass}`)[0];
16894      } else {
16895        gesture.imageWrapEl = undefined;
16896      }
16897      if (!gesture.imageWrapEl) {
16898        gesture.imageEl = undefined;
16899        return;
16900      }
16901      gesture.maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;
16902    }
16903    if (gesture.imageEl) {
16904      const [originX, originY] = getScaleOrigin();
16905      gesture.originX = originX;
16906      gesture.originY = originY;
16907      gesture.imageEl.style.transitionDuration = '0ms';
16908    }
16909    isScaling = true;
16910  }
16911  function onGestureChange(e) {
16912    if (!eventWithinSlide(e)) return;
16913    const params = swiper.params.zoom;
16914    const zoom = swiper.zoom;
16915    const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);
16916    if (pointerIndex >= 0) evCache[pointerIndex] = e;
16917    if (evCache.length < 2) {
16918      return;
16919    }
16920    fakeGestureMoved = true;
16921    gesture.scaleMove = getDistanceBetweenTouches();
16922    if (!gesture.imageEl) {
16923      return;
16924    }
16925    zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;
16926    if (zoom.scale > gesture.maxRatio) {
16927      zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;
16928    }
16929    if (zoom.scale < params.minRatio) {
16930      zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;
16931    }
16932    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
16933  }
16934  function onGestureEnd(e) {
16935    if (!eventWithinSlide(e)) return;
16936    if (e.pointerType === 'mouse' && e.type === 'pointerout') return;
16937    const params = swiper.params.zoom;
16938    const zoom = swiper.zoom;
16939    const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);
16940    if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);
16941    if (!fakeGestureTouched || !fakeGestureMoved) {
16942      return;
16943    }
16944    fakeGestureTouched = false;
16945    fakeGestureMoved = false;
16946    if (!gesture.imageEl) return;
16947    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
16948    gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;
16949    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
16950    currentScale = zoom.scale;
16951    isScaling = false;
16952    if (zoom.scale > 1 && gesture.slideEl) {
16953      gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);
16954    } else if (zoom.scale <= 1 && gesture.slideEl) {
16955      gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);
16956    }
16957    if (zoom.scale === 1) {
16958      gesture.originX = 0;
16959      gesture.originY = 0;
16960      gesture.slideEl = undefined;
16961    }
16962  }
16963  function onTouchStart(e) {
16964    const device = swiper.device;
16965    if (!gesture.imageEl) return;
16966    if (image.isTouched) return;
16967    if (device.android && e.cancelable) e.preventDefault();
16968    image.isTouched = true;
16969    const event = evCache.length > 0 ? evCache[0] : e;
16970    image.touchesStart.x = event.pageX;
16971    image.touchesStart.y = event.pageY;
16972  }
16973  function onTouchMove(e) {
16974    if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;
16975    const zoom = swiper.zoom;
16976    if (!gesture.imageEl) return;
16977    if (!image.isTouched || !gesture.slideEl) return;
16978    if (!image.isMoved) {
16979      image.width = gesture.imageEl.offsetWidth;
16980      image.height = gesture.imageEl.offsetHeight;
16981      image.startX = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.i)(gesture.imageWrapEl, 'x') || 0;
16982      image.startY = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.i)(gesture.imageWrapEl, 'y') || 0;
16983      gesture.slideWidth = gesture.slideEl.offsetWidth;
16984      gesture.slideHeight = gesture.slideEl.offsetHeight;
16985      gesture.imageWrapEl.style.transitionDuration = '0ms';
16986    }
16987    // Define if we need image drag
16988    const scaledWidth = image.width * zoom.scale;
16989    const scaledHeight = image.height * zoom.scale;
16990    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;
16991    image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
16992    image.maxX = -image.minX;
16993    image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
16994    image.maxY = -image.minY;
16995    image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;
16996    image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;
16997    const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y));
16998    if (touchesDiff > 5) {
16999      swiper.allowClick = false;
17000    }
17001    if (!image.isMoved && !isScaling) {
17002      if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {
17003        image.isTouched = false;
17004        return;
17005      }
17006      if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {
17007        image.isTouched = false;
17008        return;
17009      }
17010    }
17011    if (e.cancelable) {
17012      e.preventDefault();
17013    }
17014    e.stopPropagation();
17015    image.isMoved = true;
17016    const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);
17017    const {
17018      originX,
17019      originY
17020    } = gesture;
17021    image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2);
17022    image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2);
17023    if (image.currentX < image.minX) {
17024      image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;
17025    }
17026    if (image.currentX > image.maxX) {
17027      image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;
17028    }
17029    if (image.currentY < image.minY) {
17030      image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;
17031    }
17032    if (image.currentY > image.maxY) {
17033      image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;
17034    }
17035
17036    // Velocity
17037    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;
17038    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;
17039    if (!velocity.prevTime) velocity.prevTime = Date.now();
17040    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
17041    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
17042    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;
17043    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;
17044    velocity.prevPositionX = image.touchesCurrent.x;
17045    velocity.prevPositionY = image.touchesCurrent.y;
17046    velocity.prevTime = Date.now();
17047    gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;
17048  }
17049  function onTouchEnd() {
17050    const zoom = swiper.zoom;
17051    if (!gesture.imageEl) return;
17052    if (!image.isTouched || !image.isMoved) {
17053      image.isTouched = false;
17054      image.isMoved = false;
17055      return;
17056    }
17057    image.isTouched = false;
17058    image.isMoved = false;
17059    let momentumDurationX = 300;
17060    let momentumDurationY = 300;
17061    const momentumDistanceX = velocity.x * momentumDurationX;
17062    const newPositionX = image.currentX + momentumDistanceX;
17063    const momentumDistanceY = velocity.y * momentumDurationY;
17064    const newPositionY = image.currentY + momentumDistanceY;
17065
17066    // Fix duration
17067    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
17068    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
17069    const momentumDuration = Math.max(momentumDurationX, momentumDurationY);
17070    image.currentX = newPositionX;
17071    image.currentY = newPositionY;
17072    // Define if we need image drag
17073    const scaledWidth = image.width * zoom.scale;
17074    const scaledHeight = image.height * zoom.scale;
17075    image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
17076    image.maxX = -image.minX;
17077    image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
17078    image.maxY = -image.minY;
17079    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
17080    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
17081    gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;
17082    gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;
17083  }
17084  function onTransitionEnd() {
17085    const zoom = swiper.zoom;
17086    if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {
17087      if (gesture.imageEl) {
17088        gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';
17089      }
17090      if (gesture.imageWrapEl) {
17091        gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';
17092      }
17093      gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);
17094      zoom.scale = 1;
17095      currentScale = 1;
17096      gesture.slideEl = undefined;
17097      gesture.imageEl = undefined;
17098      gesture.imageWrapEl = undefined;
17099      gesture.originX = 0;
17100      gesture.originY = 0;
17101    }
17102  }
17103  function zoomIn(e) {
17104    const zoom = swiper.zoom;
17105    const params = swiper.params.zoom;
17106    if (!gesture.slideEl) {
17107      if (e && e.target) {
17108        gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);
17109      }
17110      if (!gesture.slideEl) {
17111        if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
17112          gesture.slideEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];
17113        } else {
17114          gesture.slideEl = swiper.slides[swiper.activeIndex];
17115        }
17116      }
17117      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
17118      if (imageEl) {
17119        imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];
17120      }
17121      gesture.imageEl = imageEl;
17122      if (imageEl) {
17123        gesture.imageWrapEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.a)(gesture.imageEl, `.${params.containerClass}`)[0];
17124      } else {
17125        gesture.imageWrapEl = undefined;
17126      }
17127    }
17128    if (!gesture.imageEl || !gesture.imageWrapEl) return;
17129    if (swiper.params.cssMode) {
17130      swiper.wrapperEl.style.overflow = 'hidden';
17131      swiper.wrapperEl.style.touchAction = 'none';
17132    }
17133    gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);
17134    let touchX;
17135    let touchY;
17136    let offsetX;
17137    let offsetY;
17138    let diffX;
17139    let diffY;
17140    let translateX;
17141    let translateY;
17142    let imageWidth;
17143    let imageHeight;
17144    let scaledWidth;
17145    let scaledHeight;
17146    let translateMinX;
17147    let translateMinY;
17148    let translateMaxX;
17149    let translateMaxY;
17150    let slideWidth;
17151    let slideHeight;
17152    if (typeof image.touchesStart.x === 'undefined' && e) {
17153      touchX = e.pageX;
17154      touchY = e.pageY;
17155    } else {
17156      touchX = image.touchesStart.x;
17157      touchY = image.touchesStart.y;
17158    }
17159    const forceZoomRatio = typeof e === 'number' ? e : null;
17160    if (currentScale === 1 && forceZoomRatio) {
17161      touchX = undefined;
17162      touchY = undefined;
17163    }
17164    zoom.scale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;
17165    currentScale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;
17166    if (e && !(currentScale === 1 && forceZoomRatio)) {
17167      slideWidth = gesture.slideEl.offsetWidth;
17168      slideHeight = gesture.slideEl.offsetHeight;
17169      offsetX = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.b)(gesture.slideEl).left + window.scrollX;
17170      offsetY = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.b)(gesture.slideEl).top + window.scrollY;
17171      diffX = offsetX + slideWidth / 2 - touchX;
17172      diffY = offsetY + slideHeight / 2 - touchY;
17173      imageWidth = gesture.imageEl.offsetWidth;
17174      imageHeight = gesture.imageEl.offsetHeight;
17175      scaledWidth = imageWidth * zoom.scale;
17176      scaledHeight = imageHeight * zoom.scale;
17177      translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);
17178      translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);
17179      translateMaxX = -translateMinX;
17180      translateMaxY = -translateMinY;
17181      translateX = diffX * zoom.scale;
17182      translateY = diffY * zoom.scale;
17183      if (translateX < translateMinX) {
17184        translateX = translateMinX;
17185      }
17186      if (translateX > translateMaxX) {
17187        translateX = translateMaxX;
17188      }
17189      if (translateY < translateMinY) {
17190        translateY = translateMinY;
17191      }
17192      if (translateY > translateMaxY) {
17193        translateY = translateMaxY;
17194      }
17195    } else {
17196      translateX = 0;
17197      translateY = 0;
17198    }
17199    if (forceZoomRatio && zoom.scale === 1) {
17200      gesture.originX = 0;
17201      gesture.originY = 0;
17202    }
17203    gesture.imageWrapEl.style.transitionDuration = '300ms';
17204    gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;
17205    gesture.imageEl.style.transitionDuration = '300ms';
17206    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
17207  }
17208  function zoomOut() {
17209    const zoom = swiper.zoom;
17210    const params = swiper.params.zoom;
17211    if (!gesture.slideEl) {
17212      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
17213        gesture.slideEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];
17214      } else {
17215        gesture.slideEl = swiper.slides[swiper.activeIndex];
17216      }
17217      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
17218      if (imageEl) {
17219        imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];
17220      }
17221      gesture.imageEl = imageEl;
17222      if (imageEl) {
17223        gesture.imageWrapEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.a)(gesture.imageEl, `.${params.containerClass}`)[0];
17224      } else {
17225        gesture.imageWrapEl = undefined;
17226      }
17227    }
17228    if (!gesture.imageEl || !gesture.imageWrapEl) return;
17229    if (swiper.params.cssMode) {
17230      swiper.wrapperEl.style.overflow = '';
17231      swiper.wrapperEl.style.touchAction = '';
17232    }
17233    zoom.scale = 1;
17234    currentScale = 1;
17235    gesture.imageWrapEl.style.transitionDuration = '300ms';
17236    gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';
17237    gesture.imageEl.style.transitionDuration = '300ms';
17238    gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';
17239    gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);
17240    gesture.slideEl = undefined;
17241    gesture.originX = 0;
17242    gesture.originY = 0;
17243  }
17244
17245  // Toggle Zoom
17246  function zoomToggle(e) {
17247    const zoom = swiper.zoom;
17248    if (zoom.scale && zoom.scale !== 1) {
17249      // Zoom Out
17250      zoomOut();
17251    } else {
17252      // Zoom In
17253      zoomIn(e);
17254    }
17255  }
17256  function getListeners() {
17257    const passiveListener = swiper.params.passiveListeners ? {
17258      passive: true,
17259      capture: false
17260    } : false;
17261    const activeListenerWithCapture = swiper.params.passiveListeners ? {
17262      passive: false,
17263      capture: true
17264    } : true;
17265    return {
17266      passiveListener,
17267      activeListenerWithCapture
17268    };
17269  }
17270
17271  // Attach/Detach Events
17272  function enable() {
17273    const zoom = swiper.zoom;
17274    if (zoom.enabled) return;
17275    zoom.enabled = true;
17276    const {
17277      passiveListener,
17278      activeListenerWithCapture
17279    } = getListeners();
17280
17281    // Scale image
17282    swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);
17283    swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);
17284    ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {
17285      swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);
17286    });
17287
17288    // Move image
17289    swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);
17290  }
17291  function disable() {
17292    const zoom = swiper.zoom;
17293    if (!zoom.enabled) return;
17294    zoom.enabled = false;
17295    const {
17296      passiveListener,
17297      activeListenerWithCapture
17298    } = getListeners();
17299
17300    // Scale image
17301    swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);
17302    swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);
17303    ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {
17304      swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);
17305    });
17306
17307    // Move image
17308    swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);
17309  }
17310  on('init', () => {
17311    if (swiper.params.zoom.enabled) {
17312      enable();
17313    }
17314  });
17315  on('destroy', () => {
17316    disable();
17317  });
17318  on('touchStart', (_s, e) => {
17319    if (!swiper.zoom.enabled) return;
17320    onTouchStart(e);
17321  });
17322  on('touchEnd', (_s, e) => {
17323    if (!swiper.zoom.enabled) return;
17324    onTouchEnd();
17325  });
17326  on('doubleTap', (_s, e) => {
17327    if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
17328      zoomToggle(e);
17329    }
17330  });
17331  on('transitionEnd', () => {
17332    if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
17333      onTransitionEnd();
17334    }
17335  });
17336  on('slideChange', () => {
17337    if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {
17338      onTransitionEnd();
17339    }
17340  });
17341  Object.assign(swiper.zoom, {
17342    enable,
17343    disable,
17344    in: zoomIn,
17345    out: zoomOut,
17346    toggle: zoomToggle
17347  });
17348}
17349
17350
17351
17352
17353/***/ }),
17354
vendor: 780 bytes, lines 17355-17378
17355/***/ "./node_modules/swiper/shared/classes-to-selector.mjs":
17356/*!************************************************************!*\
17357  !*** ./node_modules/swiper/shared/classes-to-selector.mjs ***!
17358  \************************************************************/
17359/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
17360
17361"use strict";
17362__webpack_require__.r(__webpack_exports__);
17363/* harmony export */ __webpack_require__.d(__webpack_exports__, {
17364/* harmony export */   c: () => (/* binding */ classesToSelector)
17365/* harmony export */ });
17366function classesToSelector(classes) {
17367  if (classes === void 0) {
17368    classes = '';
17369  }
17370  return `.${classes.trim().replace(/([\.:!+\/])/g, '\\$1') // eslint-disable-line
17371  .replace(/ /g, '.')}`;
17372}
17373
17374
17375
17376
17377/***/ }),
17378
vendor: 1,419 bytes, lines 17379-17415
17379/***/ "./node_modules/swiper/shared/create-element-if-not-defined.mjs":
17380/*!**********************************************************************!*\
17381  !*** ./node_modules/swiper/shared/create-element-if-not-defined.mjs ***!
17382  \**********************************************************************/
17383/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
17384
17385"use strict";
17386__webpack_require__.r(__webpack_exports__);
17387/* harmony export */ __webpack_require__.d(__webpack_exports__, {
17388/* harmony export */   c: () => (/* binding */ createElementIfNotDefined)
17389/* harmony export */ });
17390/* harmony import */ var _utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
17391
17392
17393function createElementIfNotDefined(swiper, originalParams, params, checkProps) {
17394  if (swiper.params.createElements) {
17395    Object.keys(checkProps).forEach(key => {
17396      if (!params[key] && params.auto === true) {
17397        let element = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.e)(swiper.el, `.${checkProps[key]}`)[0];
17398        if (!element) {
17399          element = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('div', checkProps[key]);
17400          element.className = checkProps[key];
17401          swiper.el.append(element);
17402        }
17403        params[key] = element;
17404        originalParams[key] = element;
17405      }
17406    });
17407  }
17408  return params;
17409}
17410
17411
17412
17413
17414/***/ }),
17415
vendor: 1,215 bytes, lines 17416-17445
17416/***/ "./node_modules/swiper/shared/create-shadow.mjs":
17417/*!******************************************************!*\
17418  !*** ./node_modules/swiper/shared/create-shadow.mjs ***!
17419  \******************************************************/
17420/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
17421
17422"use strict";
17423__webpack_require__.r(__webpack_exports__);
17424/* harmony export */ __webpack_require__.d(__webpack_exports__, {
17425/* harmony export */   c: () => (/* binding */ createShadow)
17426/* harmony export */ });
17427/* harmony import */ var _utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
17428
17429
17430function createShadow(suffix, slideEl, side) {
17431  const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}${suffix ? ` swiper-slide-shadow-${suffix}` : ''}`;
17432  const shadowContainer = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.l)(slideEl);
17433  let shadowEl = shadowContainer.querySelector(`.${shadowClass.split(' ').join('.')}`);
17434  if (!shadowEl) {
17435    shadowEl = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('div', shadowClass.split(' '));
17436    shadowContainer.append(shadowEl);
17437  }
17438  return shadowEl;
17439}
17440
17441
17442
17443
17444/***/ }),
17445
vendor: 2,338 bytes, lines 17446-17518
17446/***/ "./node_modules/swiper/shared/effect-init.mjs":
17447/*!****************************************************!*\
17448  !*** ./node_modules/swiper/shared/effect-init.mjs ***!
17449  \****************************************************/
17450/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
17451
17452"use strict";
17453__webpack_require__.r(__webpack_exports__);
17454/* harmony export */ __webpack_require__.d(__webpack_exports__, {
17455/* harmony export */   e: () => (/* binding */ effectInit)
17456/* harmony export */ });
17457function effectInit(params) {
17458  const {
17459    effect,
17460    swiper,
17461    on,
17462    setTranslate,
17463    setTransition,
17464    overwriteParams,
17465    perspective,
17466    recreateShadows,
17467    getEffectParams
17468  } = params;
17469  on('beforeInit', () => {
17470    if (swiper.params.effect !== effect) return;
17471    swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);
17472    if (perspective && perspective()) {
17473      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
17474    }
17475    const overwriteParamsResult = overwriteParams ? overwriteParams() : {};
17476    Object.assign(swiper.params, overwriteParamsResult);
17477    Object.assign(swiper.originalParams, overwriteParamsResult);
17478  });
17479  on('setTranslate', () => {
17480    if (swiper.params.effect !== effect) return;
17481    setTranslate();
17482  });
17483  on('setTransition', (_s, duration) => {
17484    if (swiper.params.effect !== effect) return;
17485    setTransition(duration);
17486  });
17487  on('transitionEnd', () => {
17488    if (swiper.params.effect !== effect) return;
17489    if (recreateShadows) {
17490      if (!getEffectParams || !getEffectParams().slideShadows) return;
17491      // remove shadows
17492      swiper.slides.forEach(slideEl => {
17493        slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => shadowEl.remove());
17494      });
17495      // create new one
17496      recreateShadows();
17497    }
17498  });
17499  let requireUpdateOnVirtual;
17500  on('virtualUpdate', () => {
17501    if (swiper.params.effect !== effect) return;
17502    if (!swiper.slides.length) {
17503      requireUpdateOnVirtual = true;
17504    }
17505    requestAnimationFrame(() => {
17506      if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {
17507        setTranslate();
17508        requireUpdateOnVirtual = false;
17509      }
17510    });
17511  });
17512}
17513
17514
17515
17516
17517/***/ }),
17518
vendor: 1,008 bytes, lines 17519-17546
17519/***/ "./node_modules/swiper/shared/effect-target.mjs":
17520/*!******************************************************!*\
17521  !*** ./node_modules/swiper/shared/effect-target.mjs ***!
17522  \******************************************************/
17523/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
17524
17525"use strict";
17526__webpack_require__.r(__webpack_exports__);
17527/* harmony export */ __webpack_require__.d(__webpack_exports__, {
17528/* harmony export */   e: () => (/* binding */ effectTarget)
17529/* harmony export */ });
17530/* harmony import */ var _utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
17531
17532
17533function effectTarget(effectParams, slideEl) {
17534  const transformEl = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.l)(slideEl);
17535  if (transformEl !== slideEl) {
17536    transformEl.style.backfaceVisibility = 'hidden';
17537    transformEl.style['-webkit-backface-visibility'] = 'hidden';
17538  }
17539  return transformEl;
17540}
17541
17542
17543
17544
17545/***/ }),
17546
vendor: 2,116 bytes, lines 17547-17610
17547/***/ "./node_modules/swiper/shared/effect-virtual-transition-end.mjs":
17548/*!**********************************************************************!*\
17549  !*** ./node_modules/swiper/shared/effect-virtual-transition-end.mjs ***!
17550  \**********************************************************************/
17551/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
17552
17553"use strict";
17554__webpack_require__.r(__webpack_exports__);
17555/* harmony export */ __webpack_require__.d(__webpack_exports__, {
17556/* harmony export */   e: () => (/* binding */ effectVirtualTransitionEnd)
17557/* harmony export */ });
17558/* harmony import */ var _utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
17559
17560
17561function effectVirtualTransitionEnd(_ref) {
17562  let {
17563    swiper,
17564    duration,
17565    transformElements,
17566    allSlides
17567  } = _ref;
17568  const {
17569    activeIndex
17570  } = swiper;
17571  const getSlide = el => {
17572    if (!el.parentElement) {
17573      // assume shadow root
17574      const slide = swiper.slides.filter(slideEl => slideEl.shadowRoot && slideEl.shadowRoot === el.parentNode)[0];
17575      return slide;
17576    }
17577    return el.parentElement;
17578  };
17579  if (swiper.params.virtualTranslate && duration !== 0) {
17580    let eventTriggered = false;
17581    let transitionEndTarget;
17582    if (allSlides) {
17583      transitionEndTarget = transformElements;
17584    } else {
17585      transitionEndTarget = transformElements.filter(transformEl => {
17586        const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl;
17587        return swiper.getSlideIndex(el) === activeIndex;
17588      });
17589    }
17590    transitionEndTarget.forEach(el => {
17591      (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(el, () => {
17592        if (eventTriggered) return;
17593        if (!swiper || swiper.destroyed) return;
17594        eventTriggered = true;
17595        swiper.animating = false;
17596        const evt = new window.CustomEvent('transitionend', {
17597          bubbles: true,
17598          cancelable: true
17599        });
17600        swiper.wrapperEl.dispatchEvent(evt);
17601      });
17602    });
17603  }
17604}
17605
17606
17607
17608
17609/***/ }),
17610
vendor: 3,334 bytes, lines 17611-17771
17611/***/ "./node_modules/swiper/shared/ssr-window.esm.mjs":
17612/*!*******************************************************!*\
17613  !*** ./node_modules/swiper/shared/ssr-window.esm.mjs ***!
17614  \*******************************************************/
17615/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
17616
17617"use strict";
17618__webpack_require__.r(__webpack_exports__);
17619/* harmony export */ __webpack_require__.d(__webpack_exports__, {
17620/* harmony export */   a: () => (/* binding */ getWindow),
17621/* harmony export */   g: () => (/* binding */ getDocument)
17622/* harmony export */ });
17623/**
17624 * SSR Window 4.0.2
17625 * Better handling for window object in SSR environment
17626 * https://github.com/nolimits4web/ssr-window
17627 *
17628 * Copyright 2021, Vladimir Kharlampidi
17629 *
17630 * Licensed under MIT
17631 *
17632 * Released on: December 13, 2021
17633 */
17634/* eslint-disable no-param-reassign */
17635function isObject(obj) {
17636  return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;
17637}
17638function extend(target, src) {
17639  if (target === void 0) {
17640    target = {};
17641  }
17642  if (src === void 0) {
17643    src = {};
17644  }
17645  Object.keys(src).forEach(key => {
17646    if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {
17647      extend(target[key], src[key]);
17648    }
17649  });
17650}
17651const ssrDocument = {
17652  body: {},
17653  addEventListener() {},
17654  removeEventListener() {},
17655  activeElement: {
17656    blur() {},
17657    nodeName: ''
17658  },
17659  querySelector() {
17660    return null;
17661  },
17662  querySelectorAll() {
17663    return [];
17664  },
17665  getElementById() {
17666    return null;
17667  },
17668  createEvent() {
17669    return {
17670      initEvent() {}
17671    };
17672  },
17673  createElement() {
17674    return {
17675      children: [],
17676      childNodes: [],
17677      style: {},
17678      setAttribute() {},
17679      getElementsByTagName() {
17680        return [];
17681      }
17682    };
17683  },
17684  createElementNS() {
17685    return {};
17686  },
17687  importNode() {
17688    return null;
17689  },
17690  location: {
17691    hash: '',
17692    host: '',
17693    hostname: '',
17694    href: '',
17695    origin: '',
17696    pathname: '',
17697    protocol: '',
17698    search: ''
17699  }
17700};
17701function getDocument() {
17702  const doc = typeof document !== 'undefined' ? document : {};
17703  extend(doc, ssrDocument);
17704  return doc;
17705}
17706const ssrWindow = {
17707  document: ssrDocument,
17708  navigator: {
17709    userAgent: ''
17710  },
17711  location: {
17712    hash: '',
17713    host: '',
17714    hostname: '',
17715    href: '',
17716    origin: '',
17717    pathname: '',
17718    protocol: '',
17719    search: ''
17720  },
17721  history: {
17722    replaceState() {},
17723    pushState() {},
17724    go() {},
17725    back() {}
17726  },
17727  CustomEvent: function CustomEvent() {
17728    return this;
17729  },
17730  addEventListener() {},
17731  removeEventListener() {},
17732  getComputedStyle() {
17733    return {
17734      getPropertyValue() {
17735        return '';
17736      }
17737    };
17738  },
17739  Image() {},
17740  Date() {},
17741  screen: {},
17742  setTimeout() {},
17743  clearTimeout() {},
17744  matchMedia() {
17745    return {};
17746  },
17747  requestAnimationFrame(callback) {
17748    if (typeof setTimeout === 'undefined') {
17749      callback();
17750      return null;
17751    }
17752    return setTimeout(callback, 0);
17753  },
17754  cancelAnimationFrame(id) {
17755    if (typeof setTimeout === 'undefined') {
17756      return;
17757    }
17758    clearTimeout(id);
17759  }
17760};
17761function getWindow() {
17762  const win = typeof window !== 'undefined' ? window : {};
17763  extend(win, ssrWindow);
17764  return win;
17765}
17766
17767
17768
17769
17770/***/ }),
17771
vendor: 130,311 bytes, lines 17772-21669
17772/***/ "./node_modules/swiper/shared/swiper-core.mjs":
17773/*!****************************************************!*\
17774  !*** ./node_modules/swiper/shared/swiper-core.mjs ***!
17775  \****************************************************/
17776/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
17777
17778"use strict";
17779__webpack_require__.r(__webpack_exports__);
17780/* harmony export */ __webpack_require__.d(__webpack_exports__, {
17781/* harmony export */   S: () => (/* binding */ Swiper),
17782/* harmony export */   d: () => (/* binding */ defaults)
17783/* harmony export */ });
17784/* harmony import */ var _ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs");
17785/* harmony import */ var _utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.mjs */ "./node_modules/swiper/shared/utils.mjs");
17786
17787
17788
17789let support;
17790function calcSupport() {
17791  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
17792  const document = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)();
17793  return {
17794    smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,
17795    touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)
17796  };
17797}
17798function getSupport() {
17799  if (!support) {
17800    support = calcSupport();
17801  }
17802  return support;
17803}
17804
17805let deviceCached;
17806function calcDevice(_temp) {
17807  let {
17808    userAgent
17809  } = _temp === void 0 ? {} : _temp;
17810  const support = getSupport();
17811  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
17812  const platform = window.navigator.platform;
17813  const ua = userAgent || window.navigator.userAgent;
17814  const device = {
17815    ios: false,
17816    android: false
17817  };
17818  const screenWidth = window.screen.width;
17819  const screenHeight = window.screen.height;
17820  const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
17821  let ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
17822  const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
17823  const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
17824  const windows = platform === 'Win32';
17825  let macos = platform === 'MacIntel';
17826
17827  // iPadOs 13 fix
17828  const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];
17829  if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {
17830    ipad = ua.match(/(Version)\/([\d.]+)/);
17831    if (!ipad) ipad = [0, 1, '13_0_0'];
17832    macos = false;
17833  }
17834
17835  // Android
17836  if (android && !windows) {
17837    device.os = 'android';
17838    device.android = true;
17839  }
17840  if (ipad || iphone || ipod) {
17841    device.os = 'ios';
17842    device.ios = true;
17843  }
17844
17845  // Export object
17846  return device;
17847}
17848function getDevice(overrides) {
17849  if (overrides === void 0) {
17850    overrides = {};
17851  }
17852  if (!deviceCached) {
17853    deviceCached = calcDevice(overrides);
17854  }
17855  return deviceCached;
17856}
17857
17858let browser;
17859function calcBrowser() {
17860  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
17861  let needPerspectiveFix = false;
17862  function isSafari() {
17863    const ua = window.navigator.userAgent.toLowerCase();
17864    return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;
17865  }
17866  if (isSafari()) {
17867    const ua = String(window.navigator.userAgent);
17868    if (ua.includes('Version/')) {
17869      const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));
17870      needPerspectiveFix = major < 16 || major === 16 && minor < 2;
17871    }
17872  }
17873  return {
17874    isSafari: needPerspectiveFix || isSafari(),
17875    needPerspectiveFix,
17876    isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)
17877  };
17878}
17879function getBrowser() {
17880  if (!browser) {
17881    browser = calcBrowser();
17882  }
17883  return browser;
17884}
17885
17886function Resize(_ref) {
17887  let {
17888    swiper,
17889    on,
17890    emit
17891  } = _ref;
17892  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
17893  let observer = null;
17894  let animationFrame = null;
17895  const resizeHandler = () => {
17896    if (!swiper || swiper.destroyed || !swiper.initialized) return;
17897    emit('beforeResize');
17898    emit('resize');
17899  };
17900  const createObserver = () => {
17901    if (!swiper || swiper.destroyed || !swiper.initialized) return;
17902    observer = new ResizeObserver(entries => {
17903      animationFrame = window.requestAnimationFrame(() => {
17904        const {
17905          width,
17906          height
17907        } = swiper;
17908        let newWidth = width;
17909        let newHeight = height;
17910        entries.forEach(_ref2 => {
17911          let {
17912            contentBoxSize,
17913            contentRect,
17914            target
17915          } = _ref2;
17916          if (target && target !== swiper.el) return;
17917          newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;
17918          newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;
17919        });
17920        if (newWidth !== width || newHeight !== height) {
17921          resizeHandler();
17922        }
17923      });
17924    });
17925    observer.observe(swiper.el);
17926  };
17927  const removeObserver = () => {
17928    if (animationFrame) {
17929      window.cancelAnimationFrame(animationFrame);
17930    }
17931    if (observer && observer.unobserve && swiper.el) {
17932      observer.unobserve(swiper.el);
17933      observer = null;
17934    }
17935  };
17936  const orientationChangeHandler = () => {
17937    if (!swiper || swiper.destroyed || !swiper.initialized) return;
17938    emit('orientationchange');
17939  };
17940  on('init', () => {
17941    if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {
17942      createObserver();
17943      return;
17944    }
17945    window.addEventListener('resize', resizeHandler);
17946    window.addEventListener('orientationchange', orientationChangeHandler);
17947  });
17948  on('destroy', () => {
17949    removeObserver();
17950    window.removeEventListener('resize', resizeHandler);
17951    window.removeEventListener('orientationchange', orientationChangeHandler);
17952  });
17953}
17954
17955function Observer(_ref) {
17956  let {
17957    swiper,
17958    extendParams,
17959    on,
17960    emit
17961  } = _ref;
17962  const observers = [];
17963  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
17964  const attach = function (target, options) {
17965    if (options === void 0) {
17966      options = {};
17967    }
17968    const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
17969    const observer = new ObserverFunc(mutations => {
17970      // The observerUpdate event should only be triggered
17971      // once despite the number of mutations.  Additional
17972      // triggers are redundant and are very costly
17973      if (swiper.__preventObserver__) return;
17974      if (mutations.length === 1) {
17975        emit('observerUpdate', mutations[0]);
17976        return;
17977      }
17978      const observerUpdate = function observerUpdate() {
17979        emit('observerUpdate', mutations[0]);
17980      };
17981      if (window.requestAnimationFrame) {
17982        window.requestAnimationFrame(observerUpdate);
17983      } else {
17984        window.setTimeout(observerUpdate, 0);
17985      }
17986    });
17987    observer.observe(target, {
17988      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
17989      childList: typeof options.childList === 'undefined' ? true : options.childList,
17990      characterData: typeof options.characterData === 'undefined' ? true : options.characterData
17991    });
17992    observers.push(observer);
17993  };
17994  const init = () => {
17995    if (!swiper.params.observer) return;
17996    if (swiper.params.observeParents) {
17997      const containerParents = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.a)(swiper.hostEl);
17998      for (let i = 0; i < containerParents.length; i += 1) {
17999        attach(containerParents[i]);
18000      }
18001    }
18002    // Observe container
18003    attach(swiper.hostEl, {
18004      childList: swiper.params.observeSlideChildren
18005    });
18006
18007    // Observe wrapper
18008    attach(swiper.wrapperEl, {
18009      attributes: false
18010    });
18011  };
18012  const destroy = () => {
18013    observers.forEach(observer => {
18014      observer.disconnect();
18015    });
18016    observers.splice(0, observers.length);
18017  };
18018  extendParams({
18019    observer: false,
18020    observeParents: false,
18021    observeSlideChildren: false
18022  });
18023  on('init', init);
18024  on('destroy', destroy);
18025}
18026
18027/* eslint-disable no-underscore-dangle */
18028
18029var eventsEmitter = {
18030  on(events, handler, priority) {
18031    const self = this;
18032    if (!self.eventsListeners || self.destroyed) return self;
18033    if (typeof handler !== 'function') return self;
18034    const method = priority ? 'unshift' : 'push';
18035    events.split(' ').forEach(event => {
18036      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
18037      self.eventsListeners[event][method](handler);
18038    });
18039    return self;
18040  },
18041  once(events, handler, priority) {
18042    const self = this;
18043    if (!self.eventsListeners || self.destroyed) return self;
18044    if (typeof handler !== 'function') return self;
18045    function onceHandler() {
18046      self.off(events, onceHandler);
18047      if (onceHandler.__emitterProxy) {
18048        delete onceHandler.__emitterProxy;
18049      }
18050      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
18051        args[_key] = arguments[_key];
18052      }
18053      handler.apply(self, args);
18054    }
18055    onceHandler.__emitterProxy = handler;
18056    return self.on(events, onceHandler, priority);
18057  },
18058  onAny(handler, priority) {
18059    const self = this;
18060    if (!self.eventsListeners || self.destroyed) return self;
18061    if (typeof handler !== 'function') return self;
18062    const method = priority ? 'unshift' : 'push';
18063    if (self.eventsAnyListeners.indexOf(handler) < 0) {
18064      self.eventsAnyListeners[method](handler);
18065    }
18066    return self;
18067  },
18068  offAny(handler) {
18069    const self = this;
18070    if (!self.eventsListeners || self.destroyed) return self;
18071    if (!self.eventsAnyListeners) return self;
18072    const index = self.eventsAnyListeners.indexOf(handler);
18073    if (index >= 0) {
18074      self.eventsAnyListeners.splice(index, 1);
18075    }
18076    return self;
18077  },
18078  off(events, handler) {
18079    const self = this;
18080    if (!self.eventsListeners || self.destroyed) return self;
18081    if (!self.eventsListeners) return self;
18082    events.split(' ').forEach(event => {
18083      if (typeof handler === 'undefined') {
18084        self.eventsListeners[event] = [];
18085      } else if (self.eventsListeners[event]) {
18086        self.eventsListeners[event].forEach((eventHandler, index) => {
18087          if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {
18088            self.eventsListeners[event].splice(index, 1);
18089          }
18090        });
18091      }
18092    });
18093    return self;
18094  },
18095  emit() {
18096    const self = this;
18097    if (!self.eventsListeners || self.destroyed) return self;
18098    if (!self.eventsListeners) return self;
18099    let events;
18100    let data;
18101    let context;
18102    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
18103      args[_key2] = arguments[_key2];
18104    }
18105    if (typeof args[0] === 'string' || Array.isArray(args[0])) {
18106      events = args[0];
18107      data = args.slice(1, args.length);
18108      context = self;
18109    } else {
18110      events = args[0].events;
18111      data = args[0].data;
18112      context = args[0].context || self;
18113    }
18114    data.unshift(context);
18115    const eventsArray = Array.isArray(events) ? events : events.split(' ');
18116    eventsArray.forEach(event => {
18117      if (self.eventsAnyListeners && self.eventsAnyListeners.length) {
18118        self.eventsAnyListeners.forEach(eventHandler => {
18119          eventHandler.apply(context, [event, ...data]);
18120        });
18121      }
18122      if (self.eventsListeners && self.eventsListeners[event]) {
18123        self.eventsListeners[event].forEach(eventHandler => {
18124          eventHandler.apply(context, data);
18125        });
18126      }
18127    });
18128    return self;
18129  }
18130};
18131
18132function updateSize() {
18133  const swiper = this;
18134  let width;
18135  let height;
18136  const el = swiper.el;
18137  if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {
18138    width = swiper.params.width;
18139  } else {
18140    width = el.clientWidth;
18141  }
18142  if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {
18143    height = swiper.params.height;
18144  } else {
18145    height = el.clientHeight;
18146  }
18147  if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {
18148    return;
18149  }
18150
18151  // Subtract paddings
18152  width = width - parseInt((0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(el, 'padding-left') || 0, 10) - parseInt((0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(el, 'padding-right') || 0, 10);
18153  height = height - parseInt((0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(el, 'padding-top') || 0, 10) - parseInt((0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(el, 'padding-bottom') || 0, 10);
18154  if (Number.isNaN(width)) width = 0;
18155  if (Number.isNaN(height)) height = 0;
18156  Object.assign(swiper, {
18157    width,
18158    height,
18159    size: swiper.isHorizontal() ? width : height
18160  });
18161}
18162
18163function updateSlides() {
18164  const swiper = this;
18165  function getDirectionPropertyValue(node, label) {
18166    return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);
18167  }
18168  const params = swiper.params;
18169  const {
18170    wrapperEl,
18171    slidesEl,
18172    size: swiperSize,
18173    rtlTranslate: rtl,
18174    wrongRTL
18175  } = swiper;
18176  const isVirtual = swiper.virtual && params.virtual.enabled;
18177  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
18178  const slides = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);
18179  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
18180  let snapGrid = [];
18181  const slidesGrid = [];
18182  const slidesSizesGrid = [];
18183  let offsetBefore = params.slidesOffsetBefore;
18184  if (typeof offsetBefore === 'function') {
18185    offsetBefore = params.slidesOffsetBefore.call(swiper);
18186  }
18187  let offsetAfter = params.slidesOffsetAfter;
18188  if (typeof offsetAfter === 'function') {
18189    offsetAfter = params.slidesOffsetAfter.call(swiper);
18190  }
18191  const previousSnapGridLength = swiper.snapGrid.length;
18192  const previousSlidesGridLength = swiper.slidesGrid.length;
18193  let spaceBetween = params.spaceBetween;
18194  let slidePosition = -offsetBefore;
18195  let prevSlideSize = 0;
18196  let index = 0;
18197  if (typeof swiperSize === 'undefined') {
18198    return;
18199  }
18200  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
18201    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;
18202  } else if (typeof spaceBetween === 'string') {
18203    spaceBetween = parseFloat(spaceBetween);
18204  }
18205  swiper.virtualSize = -spaceBetween;
18206
18207  // reset margins
18208  slides.forEach(slideEl => {
18209    if (rtl) {
18210      slideEl.style.marginLeft = '';
18211    } else {
18212      slideEl.style.marginRight = '';
18213    }
18214    slideEl.style.marginBottom = '';
18215    slideEl.style.marginTop = '';
18216  });
18217
18218  // reset cssMode offsets
18219  if (params.centeredSlides && params.cssMode) {
18220    (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.s)(wrapperEl, '--swiper-centered-offset-before', '');
18221    (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.s)(wrapperEl, '--swiper-centered-offset-after', '');
18222  }
18223  const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;
18224  if (gridEnabled) {
18225    swiper.grid.initSlides(slides);
18226  } else if (swiper.grid) {
18227    swiper.grid.unsetSlides();
18228  }
18229
18230  // Calc slides
18231  let slideSize;
18232  const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {
18233    return typeof params.breakpoints[key].slidesPerView !== 'undefined';
18234  }).length > 0;
18235  for (let i = 0; i < slidesLength; i += 1) {
18236    slideSize = 0;
18237    let slide;
18238    if (slides[i]) slide = slides[i];
18239    if (gridEnabled) {
18240      swiper.grid.updateSlide(i, slide, slides);
18241    }
18242    if (slides[i] && (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(slide, 'display') === 'none') continue; // eslint-disable-line
18243
18244    if (params.slidesPerView === 'auto') {
18245      if (shouldResetSlideSize) {
18246        slides[i].style[swiper.getDirectionLabel('width')] = ``;
18247      }
18248      const slideStyles = getComputedStyle(slide);
18249      const currentTransform = slide.style.transform;
18250      const currentWebKitTransform = slide.style.webkitTransform;
18251      if (currentTransform) {
18252        slide.style.transform = 'none';
18253      }
18254      if (currentWebKitTransform) {
18255        slide.style.webkitTransform = 'none';
18256      }
18257      if (params.roundLengths) {
18258        slideSize = swiper.isHorizontal() ? (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.f)(slide, 'width', true) : (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.f)(slide, 'height', true);
18259      } else {
18260        // eslint-disable-next-line
18261        const width = getDirectionPropertyValue(slideStyles, 'width');
18262        const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');
18263        const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');
18264        const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');
18265        const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');
18266        const boxSizing = slideStyles.getPropertyValue('box-sizing');
18267        if (boxSizing && boxSizing === 'border-box') {
18268          slideSize = width + marginLeft + marginRight;
18269        } else {
18270          const {
18271            clientWidth,
18272            offsetWidth
18273          } = slide;
18274          slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);
18275        }
18276      }
18277      if (currentTransform) {
18278        slide.style.transform = currentTransform;
18279      }
18280      if (currentWebKitTransform) {
18281        slide.style.webkitTransform = currentWebKitTransform;
18282      }
18283      if (params.roundLengths) slideSize = Math.floor(slideSize);
18284    } else {
18285      slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;
18286      if (params.roundLengths) slideSize = Math.floor(slideSize);
18287      if (slides[i]) {
18288        slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;
18289      }
18290    }
18291    if (slides[i]) {
18292      slides[i].swiperSlideSize = slideSize;
18293    }
18294    slidesSizesGrid.push(slideSize);
18295    if (params.centeredSlides) {
18296      slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
18297      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
18298      if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
18299      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
18300      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
18301      if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
18302      slidesGrid.push(slidePosition);
18303    } else {
18304      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
18305      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);
18306      slidesGrid.push(slidePosition);
18307      slidePosition = slidePosition + slideSize + spaceBetween;
18308    }
18309    swiper.virtualSize += slideSize + spaceBetween;
18310    prevSlideSize = slideSize;
18311    index += 1;
18312  }
18313  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
18314  if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
18315    wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;
18316  }
18317  if (params.setWrapperSize) {
18318    wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;
18319  }
18320  if (gridEnabled) {
18321    swiper.grid.updateWrapperSize(slideSize, snapGrid);
18322  }
18323
18324  // Remove last grid elements depending on width
18325  if (!params.centeredSlides) {
18326    const newSlidesGrid = [];
18327    for (let i = 0; i < snapGrid.length; i += 1) {
18328      let slidesGridItem = snapGrid[i];
18329      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
18330      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {
18331        newSlidesGrid.push(slidesGridItem);
18332      }
18333    }
18334    snapGrid = newSlidesGrid;
18335    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
18336      snapGrid.push(swiper.virtualSize - swiperSize);
18337    }
18338  }
18339  if (isVirtual && params.loop) {
18340    const size = slidesSizesGrid[0] + spaceBetween;
18341    if (params.slidesPerGroup > 1) {
18342      const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);
18343      const groupSize = size * params.slidesPerGroup;
18344      for (let i = 0; i < groups; i += 1) {
18345        snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);
18346      }
18347    }
18348    for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {
18349      if (params.slidesPerGroup === 1) {
18350        snapGrid.push(snapGrid[snapGrid.length - 1] + size);
18351      }
18352      slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);
18353      swiper.virtualSize += size;
18354    }
18355  }
18356  if (snapGrid.length === 0) snapGrid = [0];
18357  if (spaceBetween !== 0) {
18358    const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');
18359    slides.filter((_, slideIndex) => {
18360      if (!params.cssMode || params.loop) return true;
18361      if (slideIndex === slides.length - 1) {
18362        return false;
18363      }
18364      return true;
18365    }).forEach(slideEl => {
18366      slideEl.style[key] = `${spaceBetween}px`;
18367    });
18368  }
18369  if (params.centeredSlides && params.centeredSlidesBounds) {
18370    let allSlidesSize = 0;
18371    slidesSizesGrid.forEach(slideSizeValue => {
18372      allSlidesSize += slideSizeValue + (spaceBetween || 0);
18373    });
18374    allSlidesSize -= spaceBetween;
18375    const maxSnap = allSlidesSize - swiperSize;
18376    snapGrid = snapGrid.map(snap => {
18377      if (snap <= 0) return -offsetBefore;
18378      if (snap > maxSnap) return maxSnap + offsetAfter;
18379      return snap;
18380    });
18381  }
18382  if (params.centerInsufficientSlides) {
18383    let allSlidesSize = 0;
18384    slidesSizesGrid.forEach(slideSizeValue => {
18385      allSlidesSize += slideSizeValue + (spaceBetween || 0);
18386    });
18387    allSlidesSize -= spaceBetween;
18388    if (allSlidesSize < swiperSize) {
18389      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;
18390      snapGrid.forEach((snap, snapIndex) => {
18391        snapGrid[snapIndex] = snap - allSlidesOffset;
18392      });
18393      slidesGrid.forEach((snap, snapIndex) => {
18394        slidesGrid[snapIndex] = snap + allSlidesOffset;
18395      });
18396    }
18397  }
18398  Object.assign(swiper, {
18399    slides,
18400    snapGrid,
18401    slidesGrid,
18402    slidesSizesGrid
18403  });
18404  if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {
18405    (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.s)(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);
18406    (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.s)(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);
18407    const addToSnapGrid = -swiper.snapGrid[0];
18408    const addToSlidesGrid = -swiper.slidesGrid[0];
18409    swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);
18410    swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);
18411  }
18412  if (slidesLength !== previousSlidesLength) {
18413    swiper.emit('slidesLengthChange');
18414  }
18415  if (snapGrid.length !== previousSnapGridLength) {
18416    if (swiper.params.watchOverflow) swiper.checkOverflow();
18417    swiper.emit('snapGridLengthChange');
18418  }
18419  if (slidesGrid.length !== previousSlidesGridLength) {
18420    swiper.emit('slidesGridLengthChange');
18421  }
18422  if (params.watchSlidesProgress) {
18423    swiper.updateSlidesOffset();
18424  }
18425  swiper.emit('slidesUpdated');
18426  if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {
18427    const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;
18428    const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);
18429    if (slidesLength <= params.maxBackfaceHiddenSlides) {
18430      if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);
18431    } else if (hasClassBackfaceClassAdded) {
18432      swiper.el.classList.remove(backFaceHiddenClass);
18433    }
18434  }
18435}
18436
18437function updateAutoHeight(speed) {
18438  const swiper = this;
18439  const activeSlides = [];
18440  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
18441  let newHeight = 0;
18442  let i;
18443  if (typeof speed === 'number') {
18444    swiper.setTransition(speed);
18445  } else if (speed === true) {
18446    swiper.setTransition(swiper.params.speed);
18447  }
18448  const getSlideByIndex = index => {
18449    if (isVirtual) {
18450      return swiper.slides[swiper.getSlideIndexByData(index)];
18451    }
18452    return swiper.slides[index];
18453  };
18454  // Find slides currently in view
18455  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
18456    if (swiper.params.centeredSlides) {
18457      (swiper.visibleSlides || []).forEach(slide => {
18458        activeSlides.push(slide);
18459      });
18460    } else {
18461      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
18462        const index = swiper.activeIndex + i;
18463        if (index > swiper.slides.length && !isVirtual) break;
18464        activeSlides.push(getSlideByIndex(index));
18465      }
18466    }
18467  } else {
18468    activeSlides.push(getSlideByIndex(swiper.activeIndex));
18469  }
18470
18471  // Find new height from highest slide in view
18472  for (i = 0; i < activeSlides.length; i += 1) {
18473    if (typeof activeSlides[i] !== 'undefined') {
18474      const height = activeSlides[i].offsetHeight;
18475      newHeight = height > newHeight ? height : newHeight;
18476    }
18477  }
18478
18479  // Update Height
18480  if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;
18481}
18482
18483function updateSlidesOffset() {
18484  const swiper = this;
18485  const slides = swiper.slides;
18486  // eslint-disable-next-line
18487  const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;
18488  for (let i = 0; i < slides.length; i += 1) {
18489    slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();
18490  }
18491}
18492
18493function updateSlidesProgress(translate) {
18494  if (translate === void 0) {
18495    translate = this && this.translate || 0;
18496  }
18497  const swiper = this;
18498  const params = swiper.params;
18499  const {
18500    slides,
18501    rtlTranslate: rtl,
18502    snapGrid
18503  } = swiper;
18504  if (slides.length === 0) return;
18505  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();
18506  let offsetCenter = -translate;
18507  if (rtl) offsetCenter = translate;
18508
18509  // Visible Slides
18510  slides.forEach(slideEl => {
18511    slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass);
18512  });
18513  swiper.visibleSlidesIndexes = [];
18514  swiper.visibleSlides = [];
18515  let spaceBetween = params.spaceBetween;
18516  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
18517    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;
18518  } else if (typeof spaceBetween === 'string') {
18519    spaceBetween = parseFloat(spaceBetween);
18520  }
18521  for (let i = 0; i < slides.length; i += 1) {
18522    const slide = slides[i];
18523    let slideOffset = slide.swiperSlideOffset;
18524    if (params.cssMode && params.centeredSlides) {
18525      slideOffset -= slides[0].swiperSlideOffset;
18526    }
18527    const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);
18528    const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);
18529    const slideBefore = -(offsetCenter - slideOffset);
18530    const slideAfter = slideBefore + swiper.slidesSizesGrid[i];
18531    const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];
18532    const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;
18533    if (isVisible) {
18534      swiper.visibleSlides.push(slide);
18535      swiper.visibleSlidesIndexes.push(i);
18536      slides[i].classList.add(params.slideVisibleClass);
18537    }
18538    if (isFullyVisible) {
18539      slides[i].classList.add(params.slideFullyVisibleClass);
18540    }
18541    slide.progress = rtl ? -slideProgress : slideProgress;
18542    slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;
18543  }
18544}
18545
18546function updateProgress(translate) {
18547  const swiper = this;
18548  if (typeof translate === 'undefined') {
18549    const multiplier = swiper.rtlTranslate ? -1 : 1;
18550    // eslint-disable-next-line
18551    translate = swiper && swiper.translate && swiper.translate * multiplier || 0;
18552  }
18553  const params = swiper.params;
18554  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
18555  let {
18556    progress,
18557    isBeginning,
18558    isEnd,
18559    progressLoop
18560  } = swiper;
18561  const wasBeginning = isBeginning;
18562  const wasEnd = isEnd;
18563  if (translatesDiff === 0) {
18564    progress = 0;
18565    isBeginning = true;
18566    isEnd = true;
18567  } else {
18568    progress = (translate - swiper.minTranslate()) / translatesDiff;
18569    const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;
18570    const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;
18571    isBeginning = isBeginningRounded || progress <= 0;
18572    isEnd = isEndRounded || progress >= 1;
18573    if (isBeginningRounded) progress = 0;
18574    if (isEndRounded) progress = 1;
18575  }
18576  if (params.loop) {
18577    const firstSlideIndex = swiper.getSlideIndexByData(0);
18578    const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);
18579    const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];
18580    const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];
18581    const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];
18582    const translateAbs = Math.abs(translate);
18583    if (translateAbs >= firstSlideTranslate) {
18584      progressLoop = (translateAbs - firstSlideTranslate) / translateMax;
18585    } else {
18586      progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;
18587    }
18588    if (progressLoop > 1) progressLoop -= 1;
18589  }
18590  Object.assign(swiper, {
18591    progress,
18592    progressLoop,
18593    isBeginning,
18594    isEnd
18595  });
18596  if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);
18597  if (isBeginning && !wasBeginning) {
18598    swiper.emit('reachBeginning toEdge');
18599  }
18600  if (isEnd && !wasEnd) {
18601    swiper.emit('reachEnd toEdge');
18602  }
18603  if (wasBeginning && !isBeginning || wasEnd && !isEnd) {
18604    swiper.emit('fromEdge');
18605  }
18606  swiper.emit('progress', progress);
18607}
18608
18609function updateSlidesClasses() {
18610  const swiper = this;
18611  const {
18612    slides,
18613    params,
18614    slidesEl,
18615    activeIndex
18616  } = swiper;
18617  const isVirtual = swiper.virtual && params.virtual.enabled;
18618  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
18619  const getFilteredSlide = selector => {
18620    return (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];
18621  };
18622  slides.forEach(slideEl => {
18623    slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);
18624  });
18625  let activeSlide;
18626  let prevSlide;
18627  let nextSlide;
18628  if (isVirtual) {
18629    if (params.loop) {
18630      let slideIndex = activeIndex - swiper.virtual.slidesBefore;
18631      if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;
18632      if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;
18633      activeSlide = getFilteredSlide(`[data-swiper-slide-index="${slideIndex}"]`);
18634    } else {
18635      activeSlide = getFilteredSlide(`[data-swiper-slide-index="${activeIndex}"]`);
18636    }
18637  } else {
18638    if (gridEnabled) {
18639      activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0];
18640      nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0];
18641      prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0];
18642    } else {
18643      activeSlide = slides[activeIndex];
18644    }
18645  }
18646  if (activeSlide) {
18647    // Active classes
18648    activeSlide.classList.add(params.slideActiveClass);
18649    if (gridEnabled) {
18650      if (nextSlide) {
18651        nextSlide.classList.add(params.slideNextClass);
18652      }
18653      if (prevSlide) {
18654        prevSlide.classList.add(params.slidePrevClass);
18655      }
18656    } else {
18657      // Next Slide
18658      nextSlide = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.o)(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
18659      if (params.loop && !nextSlide) {
18660        nextSlide = slides[0];
18661      }
18662      if (nextSlide) {
18663        nextSlide.classList.add(params.slideNextClass);
18664      }
18665
18666      // Prev Slide
18667      prevSlide = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.p)(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
18668      if (params.loop && !prevSlide === 0) {
18669        prevSlide = slides[slides.length - 1];
18670      }
18671      if (prevSlide) {
18672        prevSlide.classList.add(params.slidePrevClass);
18673      }
18674    }
18675  }
18676  swiper.emitSlidesClasses();
18677}
18678
18679const processLazyPreloader = (swiper, imageEl) => {
18680  if (!swiper || swiper.destroyed || !swiper.params) return;
18681  const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;
18682  const slideEl = imageEl.closest(slideSelector());
18683  if (slideEl) {
18684    let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);
18685    if (!lazyEl && swiper.isElement) {
18686      if (slideEl.shadowRoot) {
18687        lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);
18688      } else {
18689        // init later
18690        requestAnimationFrame(() => {
18691          if (slideEl.shadowRoot) {
18692            lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);
18693            if (lazyEl) lazyEl.remove();
18694          }
18695        });
18696      }
18697    }
18698    if (lazyEl) lazyEl.remove();
18699  }
18700};
18701const unlazy = (swiper, index) => {
18702  if (!swiper.slides[index]) return;
18703  const imageEl = swiper.slides[index].querySelector('[loading="lazy"]');
18704  if (imageEl) imageEl.removeAttribute('loading');
18705};
18706const preload = swiper => {
18707  if (!swiper || swiper.destroyed || !swiper.params) return;
18708  let amount = swiper.params.lazyPreloadPrevNext;
18709  const len = swiper.slides.length;
18710  if (!len || !amount || amount < 0) return;
18711  amount = Math.min(amount, len);
18712  const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);
18713  const activeIndex = swiper.activeIndex;
18714  if (swiper.params.grid && swiper.params.grid.rows > 1) {
18715    const activeColumn = activeIndex;
18716    const preloadColumns = [activeColumn - amount];
18717    preloadColumns.push(...Array.from({
18718      length: amount
18719    }).map((_, i) => {
18720      return activeColumn + slidesPerView + i;
18721    }));
18722    swiper.slides.forEach((slideEl, i) => {
18723      if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);
18724    });
18725    return;
18726  }
18727  const slideIndexLastInView = activeIndex + slidesPerView - 1;
18728  if (swiper.params.rewind || swiper.params.loop) {
18729    for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {
18730      const realIndex = (i % len + len) % len;
18731      if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);
18732    }
18733  } else {
18734    for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {
18735      if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {
18736        unlazy(swiper, i);
18737      }
18738    }
18739  }
18740};
18741
18742function getActiveIndexByTranslate(swiper) {
18743  const {
18744    slidesGrid,
18745    params
18746  } = swiper;
18747  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
18748  let activeIndex;
18749  for (let i = 0; i < slidesGrid.length; i += 1) {
18750    if (typeof slidesGrid[i + 1] !== 'undefined') {
18751      if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {
18752        activeIndex = i;
18753      } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
18754        activeIndex = i + 1;
18755      }
18756    } else if (translate >= slidesGrid[i]) {
18757      activeIndex = i;
18758    }
18759  }
18760  // Normalize slideIndex
18761  if (params.normalizeSlideIndex) {
18762    if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
18763  }
18764  return activeIndex;
18765}
18766function updateActiveIndex(newActiveIndex) {
18767  const swiper = this;
18768  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
18769  const {
18770    snapGrid,
18771    params,
18772    activeIndex: previousIndex,
18773    realIndex: previousRealIndex,
18774    snapIndex: previousSnapIndex
18775  } = swiper;
18776  let activeIndex = newActiveIndex;
18777  let snapIndex;
18778  const getVirtualRealIndex = aIndex => {
18779    let realIndex = aIndex - swiper.virtual.slidesBefore;
18780    if (realIndex < 0) {
18781      realIndex = swiper.virtual.slides.length + realIndex;
18782    }
18783    if (realIndex >= swiper.virtual.slides.length) {
18784      realIndex -= swiper.virtual.slides.length;
18785    }
18786    return realIndex;
18787  };
18788  if (typeof activeIndex === 'undefined') {
18789    activeIndex = getActiveIndexByTranslate(swiper);
18790  }
18791  if (snapGrid.indexOf(translate) >= 0) {
18792    snapIndex = snapGrid.indexOf(translate);
18793  } else {
18794    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);
18795    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
18796  }
18797  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
18798  if (activeIndex === previousIndex && !swiper.params.loop) {
18799    if (snapIndex !== previousSnapIndex) {
18800      swiper.snapIndex = snapIndex;
18801      swiper.emit('snapIndexChange');
18802    }
18803    return;
18804  }
18805  if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
18806    swiper.realIndex = getVirtualRealIndex(activeIndex);
18807    return;
18808  }
18809  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
18810
18811  // Get real index
18812  let realIndex;
18813  if (swiper.virtual && params.virtual.enabled && params.loop) {
18814    realIndex = getVirtualRealIndex(activeIndex);
18815  } else if (gridEnabled) {
18816    const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0];
18817    let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);
18818    if (Number.isNaN(activeSlideIndex)) {
18819      activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);
18820    }
18821    realIndex = Math.floor(activeSlideIndex / params.grid.rows);
18822  } else if (swiper.slides[activeIndex]) {
18823    const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');
18824    if (slideIndex) {
18825      realIndex = parseInt(slideIndex, 10);
18826    } else {
18827      realIndex = activeIndex;
18828    }
18829  } else {
18830    realIndex = activeIndex;
18831  }
18832  Object.assign(swiper, {
18833    previousSnapIndex,
18834    snapIndex,
18835    previousRealIndex,
18836    realIndex,
18837    previousIndex,
18838    activeIndex
18839  });
18840  if (swiper.initialized) {
18841    preload(swiper);
18842  }
18843  swiper.emit('activeIndexChange');
18844  swiper.emit('snapIndexChange');
18845  if (swiper.initialized || swiper.params.runCallbacksOnInit) {
18846    if (previousRealIndex !== realIndex) {
18847      swiper.emit('realIndexChange');
18848    }
18849    swiper.emit('slideChange');
18850  }
18851}
18852
18853function updateClickedSlide(el, path) {
18854  const swiper = this;
18855  const params = swiper.params;
18856  let slide = el.closest(`.${params.slideClass}, swiper-slide`);
18857  if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {
18858    [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {
18859      if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {
18860        slide = pathEl;
18861      }
18862    });
18863  }
18864  let slideFound = false;
18865  let slideIndex;
18866  if (slide) {
18867    for (let i = 0; i < swiper.slides.length; i += 1) {
18868      if (swiper.slides[i] === slide) {
18869        slideFound = true;
18870        slideIndex = i;
18871        break;
18872      }
18873    }
18874  }
18875  if (slide && slideFound) {
18876    swiper.clickedSlide = slide;
18877    if (swiper.virtual && swiper.params.virtual.enabled) {
18878      swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);
18879    } else {
18880      swiper.clickedIndex = slideIndex;
18881    }
18882  } else {
18883    swiper.clickedSlide = undefined;
18884    swiper.clickedIndex = undefined;
18885    return;
18886  }
18887  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
18888    swiper.slideToClickedSlide();
18889  }
18890}
18891
18892var update = {
18893  updateSize,
18894  updateSlides,
18895  updateAutoHeight,
18896  updateSlidesOffset,
18897  updateSlidesProgress,
18898  updateProgress,
18899  updateSlidesClasses,
18900  updateActiveIndex,
18901  updateClickedSlide
18902};
18903
18904function getSwiperTranslate(axis) {
18905  if (axis === void 0) {
18906    axis = this.isHorizontal() ? 'x' : 'y';
18907  }
18908  const swiper = this;
18909  const {
18910    params,
18911    rtlTranslate: rtl,
18912    translate,
18913    wrapperEl
18914  } = swiper;
18915  if (params.virtualTranslate) {
18916    return rtl ? -translate : translate;
18917  }
18918  if (params.cssMode) {
18919    return translate;
18920  }
18921  let currentTranslate = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.i)(wrapperEl, axis);
18922  currentTranslate += swiper.cssOverflowAdjustment();
18923  if (rtl) currentTranslate = -currentTranslate;
18924  return currentTranslate || 0;
18925}
18926
18927function setTranslate(translate, byController) {
18928  const swiper = this;
18929  const {
18930    rtlTranslate: rtl,
18931    params,
18932    wrapperEl,
18933    progress
18934  } = swiper;
18935  let x = 0;
18936  let y = 0;
18937  const z = 0;
18938  if (swiper.isHorizontal()) {
18939    x = rtl ? -translate : translate;
18940  } else {
18941    y = translate;
18942  }
18943  if (params.roundLengths) {
18944    x = Math.floor(x);
18945    y = Math.floor(y);
18946  }
18947  swiper.previousTranslate = swiper.translate;
18948  swiper.translate = swiper.isHorizontal() ? x : y;
18949  if (params.cssMode) {
18950    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
18951  } else if (!params.virtualTranslate) {
18952    if (swiper.isHorizontal()) {
18953      x -= swiper.cssOverflowAdjustment();
18954    } else {
18955      y -= swiper.cssOverflowAdjustment();
18956    }
18957    wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;
18958  }
18959
18960  // Check if we need to update progress
18961  let newProgress;
18962  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
18963  if (translatesDiff === 0) {
18964    newProgress = 0;
18965  } else {
18966    newProgress = (translate - swiper.minTranslate()) / translatesDiff;
18967  }
18968  if (newProgress !== progress) {
18969    swiper.updateProgress(translate);
18970  }
18971  swiper.emit('setTranslate', swiper.translate, byController);
18972}
18973
18974function minTranslate() {
18975  return -this.snapGrid[0];
18976}
18977
18978function maxTranslate() {
18979  return -this.snapGrid[this.snapGrid.length - 1];
18980}
18981
18982function translateTo(translate, speed, runCallbacks, translateBounds, internal) {
18983  if (translate === void 0) {
18984    translate = 0;
18985  }
18986  if (speed === void 0) {
18987    speed = this.params.speed;
18988  }
18989  if (runCallbacks === void 0) {
18990    runCallbacks = true;
18991  }
18992  if (translateBounds === void 0) {
18993    translateBounds = true;
18994  }
18995  const swiper = this;
18996  const {
18997    params,
18998    wrapperEl
18999  } = swiper;
19000  if (swiper.animating && params.preventInteractionOnTransition) {
19001    return false;
19002  }
19003  const minTranslate = swiper.minTranslate();
19004  const maxTranslate = swiper.maxTranslate();
19005  let newTranslate;
19006  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;
19007
19008  // Update progress
19009  swiper.updateProgress(newTranslate);
19010  if (params.cssMode) {
19011    const isH = swiper.isHorizontal();
19012    if (speed === 0) {
19013      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
19014    } else {
19015      if (!swiper.support.smoothScroll) {
19016        (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.q)({
19017          swiper,
19018          targetPosition: -newTranslate,
19019          side: isH ? 'left' : 'top'
19020        });
19021        return true;
19022      }
19023      wrapperEl.scrollTo({
19024        [isH ? 'left' : 'top']: -newTranslate,
19025        behavior: 'smooth'
19026      });
19027    }
19028    return true;
19029  }
19030  if (speed === 0) {
19031    swiper.setTransition(0);
19032    swiper.setTranslate(newTranslate);
19033    if (runCallbacks) {
19034      swiper.emit('beforeTransitionStart', speed, internal);
19035      swiper.emit('transitionEnd');
19036    }
19037  } else {
19038    swiper.setTransition(speed);
19039    swiper.setTranslate(newTranslate);
19040    if (runCallbacks) {
19041      swiper.emit('beforeTransitionStart', speed, internal);
19042      swiper.emit('transitionStart');
19043    }
19044    if (!swiper.animating) {
19045      swiper.animating = true;
19046      if (!swiper.onTranslateToWrapperTransitionEnd) {
19047        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
19048          if (!swiper || swiper.destroyed) return;
19049          if (e.target !== this) return;
19050          swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
19051          swiper.onTranslateToWrapperTransitionEnd = null;
19052          delete swiper.onTranslateToWrapperTransitionEnd;
19053          if (runCallbacks) {
19054            swiper.emit('transitionEnd');
19055          }
19056        };
19057      }
19058      swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
19059    }
19060  }
19061  return true;
19062}
19063
19064var translate = {
19065  getTranslate: getSwiperTranslate,
19066  setTranslate,
19067  minTranslate,
19068  maxTranslate,
19069  translateTo
19070};
19071
19072function setTransition(duration, byController) {
19073  const swiper = this;
19074  if (!swiper.params.cssMode) {
19075    swiper.wrapperEl.style.transitionDuration = `${duration}ms`;
19076    swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';
19077  }
19078  swiper.emit('setTransition', duration, byController);
19079}
19080
19081function transitionEmit(_ref) {
19082  let {
19083    swiper,
19084    runCallbacks,
19085    direction,
19086    step
19087  } = _ref;
19088  const {
19089    activeIndex,
19090    previousIndex
19091  } = swiper;
19092  let dir = direction;
19093  if (!dir) {
19094    if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';
19095  }
19096  swiper.emit(`transition${step}`);
19097  if (runCallbacks && activeIndex !== previousIndex) {
19098    if (dir === 'reset') {
19099      swiper.emit(`slideResetTransition${step}`);
19100      return;
19101    }
19102    swiper.emit(`slideChangeTransition${step}`);
19103    if (dir === 'next') {
19104      swiper.emit(`slideNextTransition${step}`);
19105    } else {
19106      swiper.emit(`slidePrevTransition${step}`);
19107    }
19108  }
19109}
19110
19111function transitionStart(runCallbacks, direction) {
19112  if (runCallbacks === void 0) {
19113    runCallbacks = true;
19114  }
19115  const swiper = this;
19116  const {
19117    params
19118  } = swiper;
19119  if (params.cssMode) return;
19120  if (params.autoHeight) {
19121    swiper.updateAutoHeight();
19122  }
19123  transitionEmit({
19124    swiper,
19125    runCallbacks,
19126    direction,
19127    step: 'Start'
19128  });
19129}
19130
19131function transitionEnd(runCallbacks, direction) {
19132  if (runCallbacks === void 0) {
19133    runCallbacks = true;
19134  }
19135  const swiper = this;
19136  const {
19137    params
19138  } = swiper;
19139  swiper.animating = false;
19140  if (params.cssMode) return;
19141  swiper.setTransition(0);
19142  transitionEmit({
19143    swiper,
19144    runCallbacks,
19145    direction,
19146    step: 'End'
19147  });
19148}
19149
19150var transition = {
19151  setTransition,
19152  transitionStart,
19153  transitionEnd
19154};
19155
19156function slideTo(index, speed, runCallbacks, internal, initial) {
19157  if (index === void 0) {
19158    index = 0;
19159  }
19160  if (speed === void 0) {
19161    speed = this.params.speed;
19162  }
19163  if (runCallbacks === void 0) {
19164    runCallbacks = true;
19165  }
19166  if (typeof index === 'string') {
19167    index = parseInt(index, 10);
19168  }
19169  const swiper = this;
19170  let slideIndex = index;
19171  if (slideIndex < 0) slideIndex = 0;
19172  const {
19173    params,
19174    snapGrid,
19175    slidesGrid,
19176    previousIndex,
19177    activeIndex,
19178    rtlTranslate: rtl,
19179    wrapperEl,
19180    enabled
19181  } = swiper;
19182  if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {
19183    return false;
19184  }
19185  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
19186  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
19187  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
19188  const translate = -snapGrid[snapIndex];
19189  // Normalize slideIndex
19190  if (params.normalizeSlideIndex) {
19191    for (let i = 0; i < slidesGrid.length; i += 1) {
19192      const normalizedTranslate = -Math.floor(translate * 100);
19193      const normalizedGrid = Math.floor(slidesGrid[i] * 100);
19194      const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);
19195      if (typeof slidesGrid[i + 1] !== 'undefined') {
19196        if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {
19197          slideIndex = i;
19198        } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {
19199          slideIndex = i + 1;
19200        }
19201      } else if (normalizedTranslate >= normalizedGrid) {
19202        slideIndex = i;
19203      }
19204    }
19205  }
19206  // Directions locks
19207  if (swiper.initialized && slideIndex !== activeIndex) {
19208    if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {
19209      return false;
19210    }
19211    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
19212      if ((activeIndex || 0) !== slideIndex) {
19213        return false;
19214      }
19215    }
19216  }
19217  if (slideIndex !== (previousIndex || 0) && runCallbacks) {
19218    swiper.emit('beforeSlideChangeStart');
19219  }
19220
19221  // Update progress
19222  swiper.updateProgress(translate);
19223  let direction;
19224  if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';
19225
19226  // Update Index
19227  if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {
19228    swiper.updateActiveIndex(slideIndex);
19229    // Update Height
19230    if (params.autoHeight) {
19231      swiper.updateAutoHeight();
19232    }
19233    swiper.updateSlidesClasses();
19234    if (params.effect !== 'slide') {
19235      swiper.setTranslate(translate);
19236    }
19237    if (direction !== 'reset') {
19238      swiper.transitionStart(runCallbacks, direction);
19239      swiper.transitionEnd(runCallbacks, direction);
19240    }
19241    return false;
19242  }
19243  if (params.cssMode) {
19244    const isH = swiper.isHorizontal();
19245    const t = rtl ? translate : -translate;
19246    if (speed === 0) {
19247      const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
19248      if (isVirtual) {
19249        swiper.wrapperEl.style.scrollSnapType = 'none';
19250        swiper._immediateVirtual = true;
19251      }
19252      if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {
19253        swiper._cssModeVirtualInitialSet = true;
19254        requestAnimationFrame(() => {
19255          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
19256        });
19257      } else {
19258        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
19259      }
19260      if (isVirtual) {
19261        requestAnimationFrame(() => {
19262          swiper.wrapperEl.style.scrollSnapType = '';
19263          swiper._immediateVirtual = false;
19264        });
19265      }
19266    } else {
19267      if (!swiper.support.smoothScroll) {
19268        (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.q)({
19269          swiper,
19270          targetPosition: t,
19271          side: isH ? 'left' : 'top'
19272        });
19273        return true;
19274      }
19275      wrapperEl.scrollTo({
19276        [isH ? 'left' : 'top']: t,
19277        behavior: 'smooth'
19278      });
19279    }
19280    return true;
19281  }
19282  swiper.setTransition(speed);
19283  swiper.setTranslate(translate);
19284  swiper.updateActiveIndex(slideIndex);
19285  swiper.updateSlidesClasses();
19286  swiper.emit('beforeTransitionStart', speed, internal);
19287  swiper.transitionStart(runCallbacks, direction);
19288  if (speed === 0) {
19289    swiper.transitionEnd(runCallbacks, direction);
19290  } else if (!swiper.animating) {
19291    swiper.animating = true;
19292    if (!swiper.onSlideToWrapperTransitionEnd) {
19293      swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
19294        if (!swiper || swiper.destroyed) return;
19295        if (e.target !== this) return;
19296        swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
19297        swiper.onSlideToWrapperTransitionEnd = null;
19298        delete swiper.onSlideToWrapperTransitionEnd;
19299        swiper.transitionEnd(runCallbacks, direction);
19300      };
19301    }
19302    swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
19303  }
19304  return true;
19305}
19306
19307function slideToLoop(index, speed, runCallbacks, internal) {
19308  if (index === void 0) {
19309    index = 0;
19310  }
19311  if (speed === void 0) {
19312    speed = this.params.speed;
19313  }
19314  if (runCallbacks === void 0) {
19315    runCallbacks = true;
19316  }
19317  if (typeof index === 'string') {
19318    const indexAsNumber = parseInt(index, 10);
19319    index = indexAsNumber;
19320  }
19321  const swiper = this;
19322  const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;
19323  let newIndex = index;
19324  if (swiper.params.loop) {
19325    if (swiper.virtual && swiper.params.virtual.enabled) {
19326      // eslint-disable-next-line
19327      newIndex = newIndex + swiper.virtual.slidesBefore;
19328    } else {
19329      let targetSlideIndex;
19330      if (gridEnabled) {
19331        const slideIndex = newIndex * swiper.params.grid.rows;
19332        targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;
19333      } else {
19334        targetSlideIndex = swiper.getSlideIndexByData(newIndex);
19335      }
19336      const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;
19337      const {
19338        centeredSlides
19339      } = swiper.params;
19340      let slidesPerView = swiper.params.slidesPerView;
19341      if (slidesPerView === 'auto') {
19342        slidesPerView = swiper.slidesPerViewDynamic();
19343      } else {
19344        slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));
19345        if (centeredSlides && slidesPerView % 2 === 0) {
19346          slidesPerView = slidesPerView + 1;
19347        }
19348      }
19349      let needLoopFix = cols - targetSlideIndex < slidesPerView;
19350      if (centeredSlides) {
19351        needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);
19352      }
19353      if (needLoopFix) {
19354        const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';
19355        swiper.loopFix({
19356          direction,
19357          slideTo: true,
19358          activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,
19359          slideRealIndex: direction === 'next' ? swiper.realIndex : undefined
19360        });
19361      }
19362      if (gridEnabled) {
19363        const slideIndex = newIndex * swiper.params.grid.rows;
19364        newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;
19365      } else {
19366        newIndex = swiper.getSlideIndexByData(newIndex);
19367      }
19368    }
19369  }
19370  requestAnimationFrame(() => {
19371    swiper.slideTo(newIndex, speed, runCallbacks, internal);
19372  });
19373  return swiper;
19374}
19375
19376/* eslint no-unused-vars: "off" */
19377function slideNext(speed, runCallbacks, internal) {
19378  if (speed === void 0) {
19379    speed = this.params.speed;
19380  }
19381  if (runCallbacks === void 0) {
19382    runCallbacks = true;
19383  }
19384  const swiper = this;
19385  const {
19386    enabled,
19387    params,
19388    animating
19389  } = swiper;
19390  if (!enabled) return swiper;
19391  let perGroup = params.slidesPerGroup;
19392  if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
19393    perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);
19394  }
19395  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;
19396  const isVirtual = swiper.virtual && params.virtual.enabled;
19397  if (params.loop) {
19398    if (animating && !isVirtual && params.loopPreventsSliding) return false;
19399    swiper.loopFix({
19400      direction: 'next'
19401    });
19402    // eslint-disable-next-line
19403    swiper._clientLeft = swiper.wrapperEl.clientLeft;
19404    if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {
19405      requestAnimationFrame(() => {
19406        swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
19407      });
19408      return true;
19409    }
19410  }
19411  if (params.rewind && swiper.isEnd) {
19412    return swiper.slideTo(0, speed, runCallbacks, internal);
19413  }
19414  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
19415}
19416
19417/* eslint no-unused-vars: "off" */
19418function slidePrev(speed, runCallbacks, internal) {
19419  if (speed === void 0) {
19420    speed = this.params.speed;
19421  }
19422  if (runCallbacks === void 0) {
19423    runCallbacks = true;
19424  }
19425  const swiper = this;
19426  const {
19427    params,
19428    snapGrid,
19429    slidesGrid,
19430    rtlTranslate,
19431    enabled,
19432    animating
19433  } = swiper;
19434  if (!enabled) return swiper;
19435  const isVirtual = swiper.virtual && params.virtual.enabled;
19436  if (params.loop) {
19437    if (animating && !isVirtual && params.loopPreventsSliding) return false;
19438    swiper.loopFix({
19439      direction: 'prev'
19440    });
19441    // eslint-disable-next-line
19442    swiper._clientLeft = swiper.wrapperEl.clientLeft;
19443  }
19444  const translate = rtlTranslate ? swiper.translate : -swiper.translate;
19445  function normalize(val) {
19446    if (val < 0) return -Math.floor(Math.abs(val));
19447    return Math.floor(val);
19448  }
19449  const normalizedTranslate = normalize(translate);
19450  const normalizedSnapGrid = snapGrid.map(val => normalize(val));
19451  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
19452  if (typeof prevSnap === 'undefined' && params.cssMode) {
19453    let prevSnapIndex;
19454    snapGrid.forEach((snap, snapIndex) => {
19455      if (normalizedTranslate >= snap) {
19456        // prevSnap = snap;
19457        prevSnapIndex = snapIndex;
19458      }
19459    });
19460    if (typeof prevSnapIndex !== 'undefined') {
19461      prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];
19462    }
19463  }
19464  let prevIndex = 0;
19465  if (typeof prevSnap !== 'undefined') {
19466    prevIndex = slidesGrid.indexOf(prevSnap);
19467    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
19468    if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
19469      prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;
19470      prevIndex = Math.max(prevIndex, 0);
19471    }
19472  }
19473  if (params.rewind && swiper.isBeginning) {
19474    const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;
19475    return swiper.slideTo(lastIndex, speed, runCallbacks, internal);
19476  } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {
19477    requestAnimationFrame(() => {
19478      swiper.slideTo(prevIndex, speed, runCallbacks, internal);
19479    });
19480    return true;
19481  }
19482  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
19483}
19484
19485/* eslint no-unused-vars: "off" */
19486function slideReset(speed, runCallbacks, internal) {
19487  if (speed === void 0) {
19488    speed = this.params.speed;
19489  }
19490  if (runCallbacks === void 0) {
19491    runCallbacks = true;
19492  }
19493  const swiper = this;
19494  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
19495}
19496
19497/* eslint no-unused-vars: "off" */
19498function slideToClosest(speed, runCallbacks, internal, threshold) {
19499  if (speed === void 0) {
19500    speed = this.params.speed;
19501  }
19502  if (runCallbacks === void 0) {
19503    runCallbacks = true;
19504  }
19505  if (threshold === void 0) {
19506    threshold = 0.5;
19507  }
19508  const swiper = this;
19509  let index = swiper.activeIndex;
19510  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);
19511  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
19512  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
19513  if (translate >= swiper.snapGrid[snapIndex]) {
19514    // The current translate is on or after the current snap index, so the choice
19515    // is between the current index and the one after it.
19516    const currentSnap = swiper.snapGrid[snapIndex];
19517    const nextSnap = swiper.snapGrid[snapIndex + 1];
19518    if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {
19519      index += swiper.params.slidesPerGroup;
19520    }
19521  } else {
19522    // The current translate is before the current snap index, so the choice
19523    // is between the current index and the one before it.
19524    const prevSnap = swiper.snapGrid[snapIndex - 1];
19525    const currentSnap = swiper.snapGrid[snapIndex];
19526    if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {
19527      index -= swiper.params.slidesPerGroup;
19528    }
19529  }
19530  index = Math.max(index, 0);
19531  index = Math.min(index, swiper.slidesGrid.length - 1);
19532  return swiper.slideTo(index, speed, runCallbacks, internal);
19533}
19534
19535function slideToClickedSlide() {
19536  const swiper = this;
19537  const {
19538    params,
19539    slidesEl
19540  } = swiper;
19541  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
19542  let slideToIndex = swiper.clickedIndex;
19543  let realIndex;
19544  const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;
19545  if (params.loop) {
19546    if (swiper.animating) return;
19547    realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);
19548    if (params.centeredSlides) {
19549      if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {
19550        swiper.loopFix();
19551        slideToIndex = swiper.getSlideIndex((0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]);
19552        (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.n)(() => {
19553          swiper.slideTo(slideToIndex);
19554        });
19555      } else {
19556        swiper.slideTo(slideToIndex);
19557      }
19558    } else if (slideToIndex > swiper.slides.length - slidesPerView) {
19559      swiper.loopFix();
19560      slideToIndex = swiper.getSlideIndex((0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]);
19561      (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.n)(() => {
19562        swiper.slideTo(slideToIndex);
19563      });
19564    } else {
19565      swiper.slideTo(slideToIndex);
19566    }
19567  } else {
19568    swiper.slideTo(slideToIndex);
19569  }
19570}
19571
19572var slide = {
19573  slideTo,
19574  slideToLoop,
19575  slideNext,
19576  slidePrev,
19577  slideReset,
19578  slideToClosest,
19579  slideToClickedSlide
19580};
19581
19582function loopCreate(slideRealIndex) {
19583  const swiper = this;
19584  const {
19585    params,
19586    slidesEl
19587  } = swiper;
19588  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;
19589  const initSlides = () => {
19590    const slides = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(slidesEl, `.${params.slideClass}, swiper-slide`);
19591    slides.forEach((el, index) => {
19592      el.setAttribute('data-swiper-slide-index', index);
19593    });
19594  };
19595  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
19596  const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);
19597  const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;
19598  const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;
19599  const addBlankSlides = amountOfSlides => {
19600    for (let i = 0; i < amountOfSlides; i += 1) {
19601      const slideEl = swiper.isElement ? (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('swiper-slide', [params.slideBlankClass]) : (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', [params.slideClass, params.slideBlankClass]);
19602      swiper.slidesEl.append(slideEl);
19603    }
19604  };
19605  if (shouldFillGroup) {
19606    if (params.loopAddBlankSlides) {
19607      const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;
19608      addBlankSlides(slidesToAdd);
19609      swiper.recalcSlides();
19610      swiper.updateSlides();
19611    } else {
19612      (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.r)('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');
19613    }
19614    initSlides();
19615  } else if (shouldFillGrid) {
19616    if (params.loopAddBlankSlides) {
19617      const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;
19618      addBlankSlides(slidesToAdd);
19619      swiper.recalcSlides();
19620      swiper.updateSlides();
19621    } else {
19622      (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.r)('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');
19623    }
19624    initSlides();
19625  } else {
19626    initSlides();
19627  }
19628  swiper.loopFix({
19629    slideRealIndex,
19630    direction: params.centeredSlides ? undefined : 'next'
19631  });
19632}
19633
19634function loopFix(_temp) {
19635  let {
19636    slideRealIndex,
19637    slideTo = true,
19638    direction,
19639    setTranslate,
19640    activeSlideIndex,
19641    byController,
19642    byMousewheel
19643  } = _temp === void 0 ? {} : _temp;
19644  const swiper = this;
19645  if (!swiper.params.loop) return;
19646  swiper.emit('beforeLoopFix');
19647  const {
19648    slides,
19649    allowSlidePrev,
19650    allowSlideNext,
19651    slidesEl,
19652    params
19653  } = swiper;
19654  const {
19655    centeredSlides
19656  } = params;
19657  swiper.allowSlidePrev = true;
19658  swiper.allowSlideNext = true;
19659  if (swiper.virtual && params.virtual.enabled) {
19660    if (slideTo) {
19661      if (!params.centeredSlides && swiper.snapIndex === 0) {
19662        swiper.slideTo(swiper.virtual.slides.length, 0, false, true);
19663      } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {
19664        swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);
19665      } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {
19666        swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);
19667      }
19668    }
19669    swiper.allowSlidePrev = allowSlidePrev;
19670    swiper.allowSlideNext = allowSlideNext;
19671    swiper.emit('loopFix');
19672    return;
19673  }
19674  let slidesPerView = params.slidesPerView;
19675  if (slidesPerView === 'auto') {
19676    slidesPerView = swiper.slidesPerViewDynamic();
19677  } else {
19678    slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));
19679    if (centeredSlides && slidesPerView % 2 === 0) {
19680      slidesPerView = slidesPerView + 1;
19681    }
19682  }
19683  const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;
19684  let loopedSlides = slidesPerGroup;
19685  if (loopedSlides % slidesPerGroup !== 0) {
19686    loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;
19687  }
19688  loopedSlides += params.loopAdditionalSlides;
19689  swiper.loopedSlides = loopedSlides;
19690  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
19691  if (slides.length < slidesPerView + loopedSlides) {
19692    (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.r)('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');
19693  } else if (gridEnabled && params.grid.fill === 'row') {
19694    (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.r)('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');
19695  }
19696  const prependSlidesIndexes = [];
19697  const appendSlidesIndexes = [];
19698  let activeIndex = swiper.activeIndex;
19699  if (typeof activeSlideIndex === 'undefined') {
19700    activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);
19701  } else {
19702    activeIndex = activeSlideIndex;
19703  }
19704  const isNext = direction === 'next' || !direction;
19705  const isPrev = direction === 'prev' || !direction;
19706  let slidesPrepended = 0;
19707  let slidesAppended = 0;
19708  const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;
19709  const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;
19710  const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);
19711  // prepend last slides before start
19712  if (activeColIndexWithShift < loopedSlides) {
19713    slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);
19714    for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {
19715      const index = i - Math.floor(i / cols) * cols;
19716      if (gridEnabled) {
19717        const colIndexToPrepend = cols - index - 1;
19718        for (let i = slides.length - 1; i >= 0; i -= 1) {
19719          if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);
19720        }
19721        // slides.forEach((slide, slideIndex) => {
19722        //   if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);
19723        // });
19724      } else {
19725        prependSlidesIndexes.push(cols - index - 1);
19726      }
19727    }
19728  } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {
19729    slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);
19730    for (let i = 0; i < slidesAppended; i += 1) {
19731      const index = i - Math.floor(i / cols) * cols;
19732      if (gridEnabled) {
19733        slides.forEach((slide, slideIndex) => {
19734          if (slide.column === index) appendSlidesIndexes.push(slideIndex);
19735        });
19736      } else {
19737        appendSlidesIndexes.push(index);
19738      }
19739    }
19740  }
19741  swiper.__preventObserver__ = true;
19742  requestAnimationFrame(() => {
19743    swiper.__preventObserver__ = false;
19744  });
19745  if (isPrev) {
19746    prependSlidesIndexes.forEach(index => {
19747      slides[index].swiperLoopMoveDOM = true;
19748      slidesEl.prepend(slides[index]);
19749      slides[index].swiperLoopMoveDOM = false;
19750    });
19751  }
19752  if (isNext) {
19753    appendSlidesIndexes.forEach(index => {
19754      slides[index].swiperLoopMoveDOM = true;
19755      slidesEl.append(slides[index]);
19756      slides[index].swiperLoopMoveDOM = false;
19757    });
19758  }
19759  swiper.recalcSlides();
19760  if (params.slidesPerView === 'auto') {
19761    swiper.updateSlides();
19762  } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {
19763    swiper.slides.forEach((slide, slideIndex) => {
19764      swiper.grid.updateSlide(slideIndex, slide, swiper.slides);
19765    });
19766  }
19767  if (params.watchSlidesProgress) {
19768    swiper.updateSlidesOffset();
19769  }
19770  if (slideTo) {
19771    if (prependSlidesIndexes.length > 0 && isPrev) {
19772      if (typeof slideRealIndex === 'undefined') {
19773        const currentSlideTranslate = swiper.slidesGrid[activeIndex];
19774        const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];
19775        const diff = newSlideTranslate - currentSlideTranslate;
19776        if (byMousewheel) {
19777          swiper.setTranslate(swiper.translate - diff);
19778        } else {
19779          swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);
19780          if (setTranslate) {
19781            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;
19782            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;
19783          }
19784        }
19785      } else {
19786        if (setTranslate) {
19787          const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;
19788          swiper.slideTo(swiper.activeIndex + shift, 0, false, true);
19789          swiper.touchEventsData.currentTranslate = swiper.translate;
19790        }
19791      }
19792    } else if (appendSlidesIndexes.length > 0 && isNext) {
19793      if (typeof slideRealIndex === 'undefined') {
19794        const currentSlideTranslate = swiper.slidesGrid[activeIndex];
19795        const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];
19796        const diff = newSlideTranslate - currentSlideTranslate;
19797        if (byMousewheel) {
19798          swiper.setTranslate(swiper.translate - diff);
19799        } else {
19800          swiper.slideTo(activeIndex - slidesAppended, 0, false, true);
19801          if (setTranslate) {
19802            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;
19803            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;
19804          }
19805        }
19806      } else {
19807        const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;
19808        swiper.slideTo(swiper.activeIndex - shift, 0, false, true);
19809      }
19810    }
19811  }
19812  swiper.allowSlidePrev = allowSlidePrev;
19813  swiper.allowSlideNext = allowSlideNext;
19814  if (swiper.controller && swiper.controller.control && !byController) {
19815    const loopParams = {
19816      slideRealIndex,
19817      direction,
19818      setTranslate,
19819      activeSlideIndex,
19820      byController: true
19821    };
19822    if (Array.isArray(swiper.controller.control)) {
19823      swiper.controller.control.forEach(c => {
19824        if (!c.destroyed && c.params.loop) c.loopFix({
19825          ...loopParams,
19826          slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false
19827        });
19828      });
19829    } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {
19830      swiper.controller.control.loopFix({
19831        ...loopParams,
19832        slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false
19833      });
19834    }
19835  }
19836  swiper.emit('loopFix');
19837}
19838
19839function loopDestroy() {
19840  const swiper = this;
19841  const {
19842    params,
19843    slidesEl
19844  } = swiper;
19845  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;
19846  swiper.recalcSlides();
19847  const newSlidesOrder = [];
19848  swiper.slides.forEach(slideEl => {
19849    const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;
19850    newSlidesOrder[index] = slideEl;
19851  });
19852  swiper.slides.forEach(slideEl => {
19853    slideEl.removeAttribute('data-swiper-slide-index');
19854  });
19855  newSlidesOrder.forEach(slideEl => {
19856    slidesEl.append(slideEl);
19857  });
19858  swiper.recalcSlides();
19859  swiper.slideTo(swiper.realIndex, 0);
19860}
19861
19862var loop = {
19863  loopCreate,
19864  loopFix,
19865  loopDestroy
19866};
19867
19868function setGrabCursor(moving) {
19869  const swiper = this;
19870  if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;
19871  const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;
19872  if (swiper.isElement) {
19873    swiper.__preventObserver__ = true;
19874  }
19875  el.style.cursor = 'move';
19876  el.style.cursor = moving ? 'grabbing' : 'grab';
19877  if (swiper.isElement) {
19878    requestAnimationFrame(() => {
19879      swiper.__preventObserver__ = false;
19880    });
19881  }
19882}
19883
19884function unsetGrabCursor() {
19885  const swiper = this;
19886  if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {
19887    return;
19888  }
19889  if (swiper.isElement) {
19890    swiper.__preventObserver__ = true;
19891  }
19892  swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';
19893  if (swiper.isElement) {
19894    requestAnimationFrame(() => {
19895      swiper.__preventObserver__ = false;
19896    });
19897  }
19898}
19899
19900var grabCursor = {
19901  setGrabCursor,
19902  unsetGrabCursor
19903};
19904
19905// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd
19906function closestElement(selector, base) {
19907  if (base === void 0) {
19908    base = this;
19909  }
19910  function __closestFrom(el) {
19911    if (!el || el === (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)() || el === (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)()) return null;
19912    if (el.assignedSlot) el = el.assignedSlot;
19913    const found = el.closest(selector);
19914    if (!found && !el.getRootNode) {
19915      return null;
19916    }
19917    return found || __closestFrom(el.getRootNode().host);
19918  }
19919  return __closestFrom(base);
19920}
19921function preventEdgeSwipe(swiper, event, startX) {
19922  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
19923  const {
19924    params
19925  } = swiper;
19926  const edgeSwipeDetection = params.edgeSwipeDetection;
19927  const edgeSwipeThreshold = params.edgeSwipeThreshold;
19928  if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {
19929    if (edgeSwipeDetection === 'prevent') {
19930      event.preventDefault();
19931      return true;
19932    }
19933    return false;
19934  }
19935  return true;
19936}
19937function onTouchStart(event) {
19938  const swiper = this;
19939  const document = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)();
19940  let e = event;
19941  if (e.originalEvent) e = e.originalEvent;
19942  const data = swiper.touchEventsData;
19943  if (e.type === 'pointerdown') {
19944    if (data.pointerId !== null && data.pointerId !== e.pointerId) {
19945      return;
19946    }
19947    data.pointerId = e.pointerId;
19948  } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {
19949    data.touchId = e.targetTouches[0].identifier;
19950  }
19951  if (e.type === 'touchstart') {
19952    // don't proceed touch event
19953    preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);
19954    return;
19955  }
19956  const {
19957    params,
19958    touches,
19959    enabled
19960  } = swiper;
19961  if (!enabled) return;
19962  if (!params.simulateTouch && e.pointerType === 'mouse') return;
19963  if (swiper.animating && params.preventInteractionOnTransition) {
19964    return;
19965  }
19966  if (!swiper.animating && params.cssMode && params.loop) {
19967    swiper.loopFix();
19968  }
19969  let targetEl = e.target;
19970  if (params.touchEventsTarget === 'wrapper') {
19971    if (!swiper.wrapperEl.contains(targetEl)) return;
19972  }
19973  if ('which' in e && e.which === 3) return;
19974  if ('button' in e && e.button > 0) return;
19975  if (data.isTouched && data.isMoved) return;
19976
19977  // change target el for shadow root component
19978  const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';
19979  // eslint-disable-next-line
19980  const eventPath = e.composedPath ? e.composedPath() : e.path;
19981  if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {
19982    targetEl = eventPath[0];
19983  }
19984  const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;
19985  const isTargetShadow = !!(e.target && e.target.shadowRoot);
19986
19987  // use closestElement for shadow root element to get the actual closest for nested shadow root element
19988  if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {
19989    swiper.allowClick = true;
19990    return;
19991  }
19992  if (params.swipeHandler) {
19993    if (!targetEl.closest(params.swipeHandler)) return;
19994  }
19995  touches.currentX = e.pageX;
19996  touches.currentY = e.pageY;
19997  const startX = touches.currentX;
19998  const startY = touches.currentY;
19999
20000  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore
20001
20002  if (!preventEdgeSwipe(swiper, e, startX)) {
20003    return;
20004  }
20005  Object.assign(data, {
20006    isTouched: true,
20007    isMoved: false,
20008    allowTouchCallbacks: true,
20009    isScrolling: undefined,
20010    startMoving: undefined
20011  });
20012  touches.startX = startX;
20013  touches.startY = startY;
20014  data.touchStartTime = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)();
20015  swiper.allowClick = true;
20016  swiper.updateSize();
20017  swiper.swipeDirection = undefined;
20018  if (params.threshold > 0) data.allowThresholdMove = false;
20019  let preventDefault = true;
20020  if (targetEl.matches(data.focusableElements)) {
20021    preventDefault = false;
20022    if (targetEl.nodeName === 'SELECT') {
20023      data.isTouched = false;
20024    }
20025  }
20026  if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {
20027    document.activeElement.blur();
20028  }
20029  const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
20030  if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {
20031    e.preventDefault();
20032  }
20033  if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {
20034    swiper.freeMode.onTouchStart();
20035  }
20036  swiper.emit('touchStart', e);
20037}
20038
20039function onTouchMove(event) {
20040  const document = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)();
20041  const swiper = this;
20042  const data = swiper.touchEventsData;
20043  const {
20044    params,
20045    touches,
20046    rtlTranslate: rtl,
20047    enabled
20048  } = swiper;
20049  if (!enabled) return;
20050  if (!params.simulateTouch && event.pointerType === 'mouse') return;
20051  let e = event;
20052  if (e.originalEvent) e = e.originalEvent;
20053  if (e.type === 'pointermove') {
20054    if (data.touchId !== null) return; // return from pointer if we use touch
20055    const id = e.pointerId;
20056    if (id !== data.pointerId) return;
20057  }
20058  let targetTouch;
20059  if (e.type === 'touchmove') {
20060    targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];
20061    if (!targetTouch || targetTouch.identifier !== data.touchId) return;
20062  } else {
20063    targetTouch = e;
20064  }
20065  if (!data.isTouched) {
20066    if (data.startMoving && data.isScrolling) {
20067      swiper.emit('touchMoveOpposite', e);
20068    }
20069    return;
20070  }
20071  const pageX = targetTouch.pageX;
20072  const pageY = targetTouch.pageY;
20073  if (e.preventedByNestedSwiper) {
20074    touches.startX = pageX;
20075    touches.startY = pageY;
20076    return;
20077  }
20078  if (!swiper.allowTouchMove) {
20079    if (!e.target.matches(data.focusableElements)) {
20080      swiper.allowClick = false;
20081    }
20082    if (data.isTouched) {
20083      Object.assign(touches, {
20084        startX: pageX,
20085        startY: pageY,
20086        currentX: pageX,
20087        currentY: pageY
20088      });
20089      data.touchStartTime = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)();
20090    }
20091    return;
20092  }
20093  if (params.touchReleaseOnEdges && !params.loop) {
20094    if (swiper.isVertical()) {
20095      // Vertical
20096      if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {
20097        data.isTouched = false;
20098        data.isMoved = false;
20099        return;
20100      }
20101    } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {
20102      return;
20103    }
20104  }
20105  if (document.activeElement) {
20106    if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {
20107      data.isMoved = true;
20108      swiper.allowClick = false;
20109      return;
20110    }
20111  }
20112  if (data.allowTouchCallbacks) {
20113    swiper.emit('touchMove', e);
20114  }
20115  touches.previousX = touches.currentX;
20116  touches.previousY = touches.currentY;
20117  touches.currentX = pageX;
20118  touches.currentY = pageY;
20119  const diffX = touches.currentX - touches.startX;
20120  const diffY = touches.currentY - touches.startY;
20121  if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;
20122  if (typeof data.isScrolling === 'undefined') {
20123    let touchAngle;
20124    if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {
20125      data.isScrolling = false;
20126    } else {
20127      // eslint-disable-next-line
20128      if (diffX * diffX + diffY * diffY >= 25) {
20129        touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;
20130        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;
20131      }
20132    }
20133  }
20134  if (data.isScrolling) {
20135    swiper.emit('touchMoveOpposite', e);
20136  }
20137  if (typeof data.startMoving === 'undefined') {
20138    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
20139      data.startMoving = true;
20140    }
20141  }
20142  if (data.isScrolling) {
20143    data.isTouched = false;
20144    return;
20145  }
20146  if (!data.startMoving) {
20147    return;
20148  }
20149  swiper.allowClick = false;
20150  if (!params.cssMode && e.cancelable) {
20151    e.preventDefault();
20152  }
20153  if (params.touchMoveStopPropagation && !params.nested) {
20154    e.stopPropagation();
20155  }
20156  let diff = swiper.isHorizontal() ? diffX : diffY;
20157  let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;
20158  if (params.oneWayMovement) {
20159    diff = Math.abs(diff) * (rtl ? 1 : -1);
20160    touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);
20161  }
20162  touches.diff = diff;
20163  diff *= params.touchRatio;
20164  if (rtl) {
20165    diff = -diff;
20166    touchesDiff = -touchesDiff;
20167  }
20168  const prevTouchesDirection = swiper.touchesDirection;
20169  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
20170  swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';
20171  const isLoop = swiper.params.loop && !params.cssMode;
20172  const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;
20173  if (!data.isMoved) {
20174    if (isLoop && allowLoopFix) {
20175      swiper.loopFix({
20176        direction: swiper.swipeDirection
20177      });
20178    }
20179    data.startTranslate = swiper.getTranslate();
20180    swiper.setTransition(0);
20181    if (swiper.animating) {
20182      const evt = new window.CustomEvent('transitionend', {
20183        bubbles: true,
20184        cancelable: true
20185      });
20186      swiper.wrapperEl.dispatchEvent(evt);
20187    }
20188    data.allowMomentumBounce = false;
20189    // Grab Cursor
20190    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
20191      swiper.setGrabCursor(true);
20192    }
20193    swiper.emit('sliderFirstMove', e);
20194  }
20195  let loopFixed;
20196  new Date().getTime();
20197  if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {
20198    Object.assign(touches, {
20199      startX: pageX,
20200      startY: pageY,
20201      currentX: pageX,
20202      currentY: pageY,
20203      startTranslate: data.currentTranslate
20204    });
20205    data.loopSwapReset = true;
20206    data.startTranslate = data.currentTranslate;
20207    return;
20208  }
20209  swiper.emit('sliderMove', e);
20210  data.isMoved = true;
20211  data.currentTranslate = diff + data.startTranslate;
20212  let disableParentSwiper = true;
20213  let resistanceRatio = params.resistanceRatio;
20214  if (params.touchReleaseOnEdges) {
20215    resistanceRatio = 0;
20216  }
20217  if (diff > 0) {
20218    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] : swiper.minTranslate())) {
20219      swiper.loopFix({
20220        direction: 'prev',
20221        setTranslate: true,
20222        activeSlideIndex: 0
20223      });
20224    }
20225    if (data.currentTranslate > swiper.minTranslate()) {
20226      disableParentSwiper = false;
20227      if (params.resistance) {
20228        data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;
20229      }
20230    }
20231  } else if (diff < 0) {
20232    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] : swiper.maxTranslate())) {
20233      swiper.loopFix({
20234        direction: 'next',
20235        setTranslate: true,
20236        activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))
20237      });
20238    }
20239    if (data.currentTranslate < swiper.maxTranslate()) {
20240      disableParentSwiper = false;
20241      if (params.resistance) {
20242        data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;
20243      }
20244    }
20245  }
20246  if (disableParentSwiper) {
20247    e.preventedByNestedSwiper = true;
20248  }
20249
20250  // Directions locks
20251  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
20252    data.currentTranslate = data.startTranslate;
20253  }
20254  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
20255    data.currentTranslate = data.startTranslate;
20256  }
20257  if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {
20258    data.currentTranslate = data.startTranslate;
20259  }
20260
20261  // Threshold
20262  if (params.threshold > 0) {
20263    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
20264      if (!data.allowThresholdMove) {
20265        data.allowThresholdMove = true;
20266        touches.startX = touches.currentX;
20267        touches.startY = touches.currentY;
20268        data.currentTranslate = data.startTranslate;
20269        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
20270        return;
20271      }
20272    } else {
20273      data.currentTranslate = data.startTranslate;
20274      return;
20275    }
20276  }
20277  if (!params.followFinger || params.cssMode) return;
20278
20279  // Update active index in free mode
20280  if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {
20281    swiper.updateActiveIndex();
20282    swiper.updateSlidesClasses();
20283  }
20284  if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {
20285    swiper.freeMode.onTouchMove();
20286  }
20287  // Update progress
20288  swiper.updateProgress(data.currentTranslate);
20289  // Update translate
20290  swiper.setTranslate(data.currentTranslate);
20291}
20292
20293function onTouchEnd(event) {
20294  const swiper = this;
20295  const data = swiper.touchEventsData;
20296  let e = event;
20297  if (e.originalEvent) e = e.originalEvent;
20298  let targetTouch;
20299  const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';
20300  if (!isTouchEvent) {
20301    if (data.touchId !== null) return; // return from pointer if we use touch
20302    if (e.pointerId !== data.pointerId) return;
20303    targetTouch = e;
20304  } else {
20305    targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];
20306    if (!targetTouch || targetTouch.identifier !== data.touchId) return;
20307  }
20308  if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {
20309    const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);
20310    if (!proceed) {
20311      return;
20312    }
20313  }
20314  data.pointerId = null;
20315  data.touchId = null;
20316  const {
20317    params,
20318    touches,
20319    rtlTranslate: rtl,
20320    slidesGrid,
20321    enabled
20322  } = swiper;
20323  if (!enabled) return;
20324  if (!params.simulateTouch && e.pointerType === 'mouse') return;
20325  if (data.allowTouchCallbacks) {
20326    swiper.emit('touchEnd', e);
20327  }
20328  data.allowTouchCallbacks = false;
20329  if (!data.isTouched) {
20330    if (data.isMoved && params.grabCursor) {
20331      swiper.setGrabCursor(false);
20332    }
20333    data.isMoved = false;
20334    data.startMoving = false;
20335    return;
20336  }
20337
20338  // Return Grab Cursor
20339  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
20340    swiper.setGrabCursor(false);
20341  }
20342
20343  // Time diff
20344  const touchEndTime = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)();
20345  const timeDiff = touchEndTime - data.touchStartTime;
20346
20347  // Tap, doubleTap, Click
20348  if (swiper.allowClick) {
20349    const pathTree = e.path || e.composedPath && e.composedPath();
20350    swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);
20351    swiper.emit('tap click', e);
20352    if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {
20353      swiper.emit('doubleTap doubleClick', e);
20354    }
20355  }
20356  data.lastClickTime = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)();
20357  (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.n)(() => {
20358    if (!swiper.destroyed) swiper.allowClick = true;
20359  });
20360  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {
20361    data.isTouched = false;
20362    data.isMoved = false;
20363    data.startMoving = false;
20364    return;
20365  }
20366  data.isTouched = false;
20367  data.isMoved = false;
20368  data.startMoving = false;
20369  let currentPos;
20370  if (params.followFinger) {
20371    currentPos = rtl ? swiper.translate : -swiper.translate;
20372  } else {
20373    currentPos = -data.currentTranslate;
20374  }
20375  if (params.cssMode) {
20376    return;
20377  }
20378  if (params.freeMode && params.freeMode.enabled) {
20379    swiper.freeMode.onTouchEnd({
20380      currentPos
20381    });
20382    return;
20383  }
20384
20385  // Find current slide
20386  const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;
20387  let stopIndex = 0;
20388  let groupSize = swiper.slidesSizesGrid[0];
20389  for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {
20390    const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
20391    if (typeof slidesGrid[i + increment] !== 'undefined') {
20392      if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {
20393        stopIndex = i;
20394        groupSize = slidesGrid[i + increment] - slidesGrid[i];
20395      }
20396    } else if (swipeToLast || currentPos >= slidesGrid[i]) {
20397      stopIndex = i;
20398      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
20399    }
20400  }
20401  let rewindFirstIndex = null;
20402  let rewindLastIndex = null;
20403  if (params.rewind) {
20404    if (swiper.isBeginning) {
20405      rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;
20406    } else if (swiper.isEnd) {
20407      rewindFirstIndex = 0;
20408    }
20409  }
20410  // Find current slide size
20411  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
20412  const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
20413  if (timeDiff > params.longSwipesMs) {
20414    // Long touches
20415    if (!params.longSwipes) {
20416      swiper.slideTo(swiper.activeIndex);
20417      return;
20418    }
20419    if (swiper.swipeDirection === 'next') {
20420      if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);
20421    }
20422    if (swiper.swipeDirection === 'prev') {
20423      if (ratio > 1 - params.longSwipesRatio) {
20424        swiper.slideTo(stopIndex + increment);
20425      } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {
20426        swiper.slideTo(rewindLastIndex);
20427      } else {
20428        swiper.slideTo(stopIndex);
20429      }
20430    }
20431  } else {
20432    // Short swipes
20433    if (!params.shortSwipes) {
20434      swiper.slideTo(swiper.activeIndex);
20435      return;
20436    }
20437    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
20438    if (!isNavButtonTarget) {
20439      if (swiper.swipeDirection === 'next') {
20440        swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);
20441      }
20442      if (swiper.swipeDirection === 'prev') {
20443        swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);
20444      }
20445    } else if (e.target === swiper.navigation.nextEl) {
20446      swiper.slideTo(stopIndex + increment);
20447    } else {
20448      swiper.slideTo(stopIndex);
20449    }
20450  }
20451}
20452
20453function onResize() {
20454  const swiper = this;
20455  const {
20456    params,
20457    el
20458  } = swiper;
20459  if (el && el.offsetWidth === 0) return;
20460
20461  // Breakpoints
20462  if (params.breakpoints) {
20463    swiper.setBreakpoint();
20464  }
20465
20466  // Save locks
20467  const {
20468    allowSlideNext,
20469    allowSlidePrev,
20470    snapGrid
20471  } = swiper;
20472  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
20473
20474  // Disable locks on resize
20475  swiper.allowSlideNext = true;
20476  swiper.allowSlidePrev = true;
20477  swiper.updateSize();
20478  swiper.updateSlides();
20479  swiper.updateSlidesClasses();
20480  const isVirtualLoop = isVirtual && params.loop;
20481  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {
20482    swiper.slideTo(swiper.slides.length - 1, 0, false, true);
20483  } else {
20484    if (swiper.params.loop && !isVirtual) {
20485      swiper.slideToLoop(swiper.realIndex, 0, false, true);
20486    } else {
20487      swiper.slideTo(swiper.activeIndex, 0, false, true);
20488    }
20489  }
20490  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
20491    clearTimeout(swiper.autoplay.resizeTimeout);
20492    swiper.autoplay.resizeTimeout = setTimeout(() => {
20493      if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
20494        swiper.autoplay.resume();
20495      }
20496    }, 500);
20497  }
20498  // Return locks after resize
20499  swiper.allowSlidePrev = allowSlidePrev;
20500  swiper.allowSlideNext = allowSlideNext;
20501  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
20502    swiper.checkOverflow();
20503  }
20504}
20505
20506function onClick(e) {
20507  const swiper = this;
20508  if (!swiper.enabled) return;
20509  if (!swiper.allowClick) {
20510    if (swiper.params.preventClicks) e.preventDefault();
20511    if (swiper.params.preventClicksPropagation && swiper.animating) {
20512      e.stopPropagation();
20513      e.stopImmediatePropagation();
20514    }
20515  }
20516}
20517
20518function onScroll() {
20519  const swiper = this;
20520  const {
20521    wrapperEl,
20522    rtlTranslate,
20523    enabled
20524  } = swiper;
20525  if (!enabled) return;
20526  swiper.previousTranslate = swiper.translate;
20527  if (swiper.isHorizontal()) {
20528    swiper.translate = -wrapperEl.scrollLeft;
20529  } else {
20530    swiper.translate = -wrapperEl.scrollTop;
20531  }
20532  // eslint-disable-next-line
20533  if (swiper.translate === 0) swiper.translate = 0;
20534  swiper.updateActiveIndex();
20535  swiper.updateSlidesClasses();
20536  let newProgress;
20537  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
20538  if (translatesDiff === 0) {
20539    newProgress = 0;
20540  } else {
20541    newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;
20542  }
20543  if (newProgress !== swiper.progress) {
20544    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
20545  }
20546  swiper.emit('setTranslate', swiper.translate, false);
20547}
20548
20549function onLoad(e) {
20550  const swiper = this;
20551  processLazyPreloader(swiper, e.target);
20552  if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {
20553    return;
20554  }
20555  swiper.update();
20556}
20557
20558function onDocumentTouchStart() {
20559  const swiper = this;
20560  if (swiper.documentTouchHandlerProceeded) return;
20561  swiper.documentTouchHandlerProceeded = true;
20562  if (swiper.params.touchReleaseOnEdges) {
20563    swiper.el.style.touchAction = 'auto';
20564  }
20565}
20566
20567const events = (swiper, method) => {
20568  const document = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)();
20569  const {
20570    params,
20571    el,
20572    wrapperEl,
20573    device
20574  } = swiper;
20575  const capture = !!params.nested;
20576  const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';
20577  const swiperMethod = method;
20578
20579  // Touch Events
20580  document[domMethod]('touchstart', swiper.onDocumentTouchStart, {
20581    passive: false,
20582    capture
20583  });
20584  el[domMethod]('touchstart', swiper.onTouchStart, {
20585    passive: false
20586  });
20587  el[domMethod]('pointerdown', swiper.onTouchStart, {
20588    passive: false
20589  });
20590  document[domMethod]('touchmove', swiper.onTouchMove, {
20591    passive: false,
20592    capture
20593  });
20594  document[domMethod]('pointermove', swiper.onTouchMove, {
20595    passive: false,
20596    capture
20597  });
20598  document[domMethod]('touchend', swiper.onTouchEnd, {
20599    passive: true
20600  });
20601  document[domMethod]('pointerup', swiper.onTouchEnd, {
20602    passive: true
20603  });
20604  document[domMethod]('pointercancel', swiper.onTouchEnd, {
20605    passive: true
20606  });
20607  document[domMethod]('touchcancel', swiper.onTouchEnd, {
20608    passive: true
20609  });
20610  document[domMethod]('pointerout', swiper.onTouchEnd, {
20611    passive: true
20612  });
20613  document[domMethod]('pointerleave', swiper.onTouchEnd, {
20614    passive: true
20615  });
20616  document[domMethod]('contextmenu', swiper.onTouchEnd, {
20617    passive: true
20618  });
20619
20620  // Prevent Links Clicks
20621  if (params.preventClicks || params.preventClicksPropagation) {
20622    el[domMethod]('click', swiper.onClick, true);
20623  }
20624  if (params.cssMode) {
20625    wrapperEl[domMethod]('scroll', swiper.onScroll);
20626  }
20627
20628  // Resize handler
20629  if (params.updateOnWindowResize) {
20630    swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);
20631  } else {
20632    swiper[swiperMethod]('observerUpdate', onResize, true);
20633  }
20634
20635  // Images loader
20636  el[domMethod]('load', swiper.onLoad, {
20637    capture: true
20638  });
20639};
20640function attachEvents() {
20641  const swiper = this;
20642  const {
20643    params
20644  } = swiper;
20645  swiper.onTouchStart = onTouchStart.bind(swiper);
20646  swiper.onTouchMove = onTouchMove.bind(swiper);
20647  swiper.onTouchEnd = onTouchEnd.bind(swiper);
20648  swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);
20649  if (params.cssMode) {
20650    swiper.onScroll = onScroll.bind(swiper);
20651  }
20652  swiper.onClick = onClick.bind(swiper);
20653  swiper.onLoad = onLoad.bind(swiper);
20654  events(swiper, 'on');
20655}
20656function detachEvents() {
20657  const swiper = this;
20658  events(swiper, 'off');
20659}
20660var events$1 = {
20661  attachEvents,
20662  detachEvents
20663};
20664
20665const isGridEnabled = (swiper, params) => {
20666  return swiper.grid && params.grid && params.grid.rows > 1;
20667};
20668function setBreakpoint() {
20669  const swiper = this;
20670  const {
20671    realIndex,
20672    initialized,
20673    params,
20674    el
20675  } = swiper;
20676  const breakpoints = params.breakpoints;
20677  if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;
20678
20679  // Get breakpoint for window width and update parameters
20680  const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);
20681  if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;
20682  const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
20683  const breakpointParams = breakpointOnlyParams || swiper.originalParams;
20684  const wasMultiRow = isGridEnabled(swiper, params);
20685  const isMultiRow = isGridEnabled(swiper, breakpointParams);
20686  const wasEnabled = params.enabled;
20687  if (wasMultiRow && !isMultiRow) {
20688    el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);
20689    swiper.emitContainerClasses();
20690  } else if (!wasMultiRow && isMultiRow) {
20691    el.classList.add(`${params.containerModifierClass}grid`);
20692    if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {
20693      el.classList.add(`${params.containerModifierClass}grid-column`);
20694    }
20695    swiper.emitContainerClasses();
20696  }
20697
20698  // Toggle navigation, pagination, scrollbar
20699  ['navigation', 'pagination', 'scrollbar'].forEach(prop => {
20700    if (typeof breakpointParams[prop] === 'undefined') return;
20701    const wasModuleEnabled = params[prop] && params[prop].enabled;
20702    const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;
20703    if (wasModuleEnabled && !isModuleEnabled) {
20704      swiper[prop].disable();
20705    }
20706    if (!wasModuleEnabled && isModuleEnabled) {
20707      swiper[prop].enable();
20708    }
20709  });
20710  const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
20711  const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
20712  const wasLoop = params.loop;
20713  if (directionChanged && initialized) {
20714    swiper.changeDirection();
20715  }
20716  (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)(swiper.params, breakpointParams);
20717  const isEnabled = swiper.params.enabled;
20718  const hasLoop = swiper.params.loop;
20719  Object.assign(swiper, {
20720    allowTouchMove: swiper.params.allowTouchMove,
20721    allowSlideNext: swiper.params.allowSlideNext,
20722    allowSlidePrev: swiper.params.allowSlidePrev
20723  });
20724  if (wasEnabled && !isEnabled) {
20725    swiper.disable();
20726  } else if (!wasEnabled && isEnabled) {
20727    swiper.enable();
20728  }
20729  swiper.currentBreakpoint = breakpoint;
20730  swiper.emit('_beforeBreakpoint', breakpointParams);
20731  if (initialized) {
20732    if (needsReLoop) {
20733      swiper.loopDestroy();
20734      swiper.loopCreate(realIndex);
20735      swiper.updateSlides();
20736    } else if (!wasLoop && hasLoop) {
20737      swiper.loopCreate(realIndex);
20738      swiper.updateSlides();
20739    } else if (wasLoop && !hasLoop) {
20740      swiper.loopDestroy();
20741    }
20742  }
20743  swiper.emit('breakpoint', breakpointParams);
20744}
20745
20746function getBreakpoint(breakpoints, base, containerEl) {
20747  if (base === void 0) {
20748    base = 'window';
20749  }
20750  if (!breakpoints || base === 'container' && !containerEl) return undefined;
20751  let breakpoint = false;
20752  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
20753  const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;
20754  const points = Object.keys(breakpoints).map(point => {
20755    if (typeof point === 'string' && point.indexOf('@') === 0) {
20756      const minRatio = parseFloat(point.substr(1));
20757      const value = currentHeight * minRatio;
20758      return {
20759        value,
20760        point
20761      };
20762    }
20763    return {
20764      value: point,
20765      point
20766    };
20767  });
20768  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));
20769  for (let i = 0; i < points.length; i += 1) {
20770    const {
20771      point,
20772      value
20773    } = points[i];
20774    if (base === 'window') {
20775      if (window.matchMedia(`(min-width: ${value}px)`).matches) {
20776        breakpoint = point;
20777      }
20778    } else if (value <= containerEl.clientWidth) {
20779      breakpoint = point;
20780    }
20781  }
20782  return breakpoint || 'max';
20783}
20784
20785var breakpoints = {
20786  setBreakpoint,
20787  getBreakpoint
20788};
20789
20790function prepareClasses(entries, prefix) {
20791  const resultClasses = [];
20792  entries.forEach(item => {
20793    if (typeof item === 'object') {
20794      Object.keys(item).forEach(classNames => {
20795        if (item[classNames]) {
20796          resultClasses.push(prefix + classNames);
20797        }
20798      });
20799    } else if (typeof item === 'string') {
20800      resultClasses.push(prefix + item);
20801    }
20802  });
20803  return resultClasses;
20804}
20805function addClasses() {
20806  const swiper = this;
20807  const {
20808    classNames,
20809    params,
20810    rtl,
20811    el,
20812    device
20813  } = swiper;
20814  // prettier-ignore
20815  const suffixes = prepareClasses(['initialized', params.direction, {
20816    'free-mode': swiper.params.freeMode && params.freeMode.enabled
20817  }, {
20818    'autoheight': params.autoHeight
20819  }, {
20820    'rtl': rtl
20821  }, {
20822    'grid': params.grid && params.grid.rows > 1
20823  }, {
20824    'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'
20825  }, {
20826    'android': device.android
20827  }, {
20828    'ios': device.ios
20829  }, {
20830    'css-mode': params.cssMode
20831  }, {
20832    'centered': params.cssMode && params.centeredSlides
20833  }, {
20834    'watch-progress': params.watchSlidesProgress
20835  }], params.containerModifierClass);
20836  classNames.push(...suffixes);
20837  el.classList.add(...classNames);
20838  swiper.emitContainerClasses();
20839}
20840
20841function removeClasses() {
20842  const swiper = this;
20843  const {
20844    el,
20845    classNames
20846  } = swiper;
20847  el.classList.remove(...classNames);
20848  swiper.emitContainerClasses();
20849}
20850
20851var classes = {
20852  addClasses,
20853  removeClasses
20854};
20855
20856function checkOverflow() {
20857  const swiper = this;
20858  const {
20859    isLocked: wasLocked,
20860    params
20861  } = swiper;
20862  const {
20863    slidesOffsetBefore
20864  } = params;
20865  if (slidesOffsetBefore) {
20866    const lastSlideIndex = swiper.slides.length - 1;
20867    const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;
20868    swiper.isLocked = swiper.size > lastSlideRightEdge;
20869  } else {
20870    swiper.isLocked = swiper.snapGrid.length === 1;
20871  }
20872  if (params.allowSlideNext === true) {
20873    swiper.allowSlideNext = !swiper.isLocked;
20874  }
20875  if (params.allowSlidePrev === true) {
20876    swiper.allowSlidePrev = !swiper.isLocked;
20877  }
20878  if (wasLocked && wasLocked !== swiper.isLocked) {
20879    swiper.isEnd = false;
20880  }
20881  if (wasLocked !== swiper.isLocked) {
20882    swiper.emit(swiper.isLocked ? 'lock' : 'unlock');
20883  }
20884}
20885var checkOverflow$1 = {
20886  checkOverflow
20887};
20888
20889var defaults = {
20890  init: true,
20891  direction: 'horizontal',
20892  oneWayMovement: false,
20893  touchEventsTarget: 'wrapper',
20894  initialSlide: 0,
20895  speed: 300,
20896  cssMode: false,
20897  updateOnWindowResize: true,
20898  resizeObserver: true,
20899  nested: false,
20900  createElements: false,
20901  eventsPrefix: 'swiper',
20902  enabled: true,
20903  focusableElements: 'input, select, option, textarea, button, video, label',
20904  // Overrides
20905  width: null,
20906  height: null,
20907  //
20908  preventInteractionOnTransition: false,
20909  // ssr
20910  userAgent: null,
20911  url: null,
20912  // To support iOS's swipe-to-go-back gesture (when being used in-app).
20913  edgeSwipeDetection: false,
20914  edgeSwipeThreshold: 20,
20915  // Autoheight
20916  autoHeight: false,
20917  // Set wrapper width
20918  setWrapperSize: false,
20919  // Virtual Translate
20920  virtualTranslate: false,
20921  // Effects
20922  effect: 'slide',
20923  // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
20924
20925  // Breakpoints
20926  breakpoints: undefined,
20927  breakpointsBase: 'window',
20928  // Slides grid
20929  spaceBetween: 0,
20930  slidesPerView: 1,
20931  slidesPerGroup: 1,
20932  slidesPerGroupSkip: 0,
20933  slidesPerGroupAuto: false,
20934  centeredSlides: false,
20935  centeredSlidesBounds: false,
20936  slidesOffsetBefore: 0,
20937  // in px
20938  slidesOffsetAfter: 0,
20939  // in px
20940  normalizeSlideIndex: true,
20941  centerInsufficientSlides: false,
20942  // Disable swiper and hide navigation when container not overflow
20943  watchOverflow: true,
20944  // Round length
20945  roundLengths: false,
20946  // Touches
20947  touchRatio: 1,
20948  touchAngle: 45,
20949  simulateTouch: true,
20950  shortSwipes: true,
20951  longSwipes: true,
20952  longSwipesRatio: 0.5,
20953  longSwipesMs: 300,
20954  followFinger: true,
20955  allowTouchMove: true,
20956  threshold: 5,
20957  touchMoveStopPropagation: false,
20958  touchStartPreventDefault: true,
20959  touchStartForcePreventDefault: false,
20960  touchReleaseOnEdges: false,
20961  // Unique Navigation Elements
20962  uniqueNavElements: true,
20963  // Resistance
20964  resistance: true,
20965  resistanceRatio: 0.85,
20966  // Progress
20967  watchSlidesProgress: false,
20968  // Cursor
20969  grabCursor: false,
20970  // Clicks
20971  preventClicks: true,
20972  preventClicksPropagation: true,
20973  slideToClickedSlide: false,
20974  // loop
20975  loop: false,
20976  loopAddBlankSlides: true,
20977  loopAdditionalSlides: 0,
20978  loopPreventsSliding: true,
20979  // rewind
20980  rewind: false,
20981  // Swiping/no swiping
20982  allowSlidePrev: true,
20983  allowSlideNext: true,
20984  swipeHandler: null,
20985  // '.swipe-handler',
20986  noSwiping: true,
20987  noSwipingClass: 'swiper-no-swiping',
20988  noSwipingSelector: null,
20989  // Passive Listeners
20990  passiveListeners: true,
20991  maxBackfaceHiddenSlides: 10,
20992  // NS
20993  containerModifierClass: 'swiper-',
20994  // NEW
20995  slideClass: 'swiper-slide',
20996  slideBlankClass: 'swiper-slide-blank',
20997  slideActiveClass: 'swiper-slide-active',
20998  slideVisibleClass: 'swiper-slide-visible',
20999  slideFullyVisibleClass: 'swiper-slide-fully-visible',
21000  slideNextClass: 'swiper-slide-next',
21001  slidePrevClass: 'swiper-slide-prev',
21002  wrapperClass: 'swiper-wrapper',
21003  lazyPreloaderClass: 'swiper-lazy-preloader',
21004  lazyPreloadPrevNext: 0,
21005  // Callbacks
21006  runCallbacksOnInit: true,
21007  // Internals
21008  _emitClasses: false
21009};
21010
21011function moduleExtendParams(params, allModulesParams) {
21012  return function extendParams(obj) {
21013    if (obj === void 0) {
21014      obj = {};
21015    }
21016    const moduleParamName = Object.keys(obj)[0];
21017    const moduleParams = obj[moduleParamName];
21018    if (typeof moduleParams !== 'object' || moduleParams === null) {
21019      (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)(allModulesParams, obj);
21020      return;
21021    }
21022    if (params[moduleParamName] === true) {
21023      params[moduleParamName] = {
21024        enabled: true
21025      };
21026    }
21027    if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {
21028      params[moduleParamName].auto = true;
21029    }
21030    if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {
21031      params[moduleParamName].auto = true;
21032    }
21033    if (!(moduleParamName in params && 'enabled' in moduleParams)) {
21034      (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)(allModulesParams, obj);
21035      return;
21036    }
21037    if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {
21038      params[moduleParamName].enabled = true;
21039    }
21040    if (!params[moduleParamName]) params[moduleParamName] = {
21041      enabled: false
21042    };
21043    (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)(allModulesParams, obj);
21044  };
21045}
21046
21047/* eslint no-param-reassign: "off" */
21048const prototypes = {
21049  eventsEmitter,
21050  update,
21051  translate,
21052  transition,
21053  slide,
21054  loop,
21055  grabCursor,
21056  events: events$1,
21057  breakpoints,
21058  checkOverflow: checkOverflow$1,
21059  classes
21060};
21061const extendedDefaults = {};
21062class Swiper {
21063  constructor() {
21064    let el;
21065    let params;
21066    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
21067      args[_key] = arguments[_key];
21068    }
21069    if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {
21070      params = args[0];
21071    } else {
21072      [el, params] = args;
21073    }
21074    if (!params) params = {};
21075    params = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)({}, params);
21076    if (el && !params.el) params.el = el;
21077    const document = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)();
21078    if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {
21079      const swipers = [];
21080      document.querySelectorAll(params.el).forEach(containerEl => {
21081        const newParams = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)({}, params, {
21082          el: containerEl
21083        });
21084        swipers.push(new Swiper(newParams));
21085      });
21086      // eslint-disable-next-line no-constructor-return
21087      return swipers;
21088    }
21089
21090    // Swiper Instance
21091    const swiper = this;
21092    swiper.__swiper__ = true;
21093    swiper.support = getSupport();
21094    swiper.device = getDevice({
21095      userAgent: params.userAgent
21096    });
21097    swiper.browser = getBrowser();
21098    swiper.eventsListeners = {};
21099    swiper.eventsAnyListeners = [];
21100    swiper.modules = [...swiper.__modules__];
21101    if (params.modules && Array.isArray(params.modules)) {
21102      swiper.modules.push(...params.modules);
21103    }
21104    const allModulesParams = {};
21105    swiper.modules.forEach(mod => {
21106      mod({
21107        params,
21108        swiper,
21109        extendParams: moduleExtendParams(params, allModulesParams),
21110        on: swiper.on.bind(swiper),
21111        once: swiper.once.bind(swiper),
21112        off: swiper.off.bind(swiper),
21113        emit: swiper.emit.bind(swiper)
21114      });
21115    });
21116
21117    // Extend defaults with modules params
21118    const swiperParams = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)({}, defaults, allModulesParams);
21119
21120    // Extend defaults with passed params
21121    swiper.params = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)({}, swiperParams, extendedDefaults, params);
21122    swiper.originalParams = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)({}, swiper.params);
21123    swiper.passedParams = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)({}, params);
21124
21125    // add event listeners
21126    if (swiper.params && swiper.params.on) {
21127      Object.keys(swiper.params.on).forEach(eventName => {
21128        swiper.on(eventName, swiper.params.on[eventName]);
21129      });
21130    }
21131    if (swiper.params && swiper.params.onAny) {
21132      swiper.onAny(swiper.params.onAny);
21133    }
21134
21135    // Extend Swiper
21136    Object.assign(swiper, {
21137      enabled: swiper.params.enabled,
21138      el,
21139      // Classes
21140      classNames: [],
21141      // Slides
21142      slides: [],
21143      slidesGrid: [],
21144      snapGrid: [],
21145      slidesSizesGrid: [],
21146      // isDirection
21147      isHorizontal() {
21148        return swiper.params.direction === 'horizontal';
21149      },
21150      isVertical() {
21151        return swiper.params.direction === 'vertical';
21152      },
21153      // Indexes
21154      activeIndex: 0,
21155      realIndex: 0,
21156      //
21157      isBeginning: true,
21158      isEnd: false,
21159      // Props
21160      translate: 0,
21161      previousTranslate: 0,
21162      progress: 0,
21163      velocity: 0,
21164      animating: false,
21165      cssOverflowAdjustment() {
21166        // Returns 0 unless `translate` is > 2**23
21167        // Should be subtracted from css values to prevent overflow
21168        return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;
21169      },
21170      // Locks
21171      allowSlideNext: swiper.params.allowSlideNext,
21172      allowSlidePrev: swiper.params.allowSlidePrev,
21173      // Touch Events
21174      touchEventsData: {
21175        isTouched: undefined,
21176        isMoved: undefined,
21177        allowTouchCallbacks: undefined,
21178        touchStartTime: undefined,
21179        isScrolling: undefined,
21180        currentTranslate: undefined,
21181        startTranslate: undefined,
21182        allowThresholdMove: undefined,
21183        // Form elements to match
21184        focusableElements: swiper.params.focusableElements,
21185        // Last click time
21186        lastClickTime: 0,
21187        clickTimeout: undefined,
21188        // Velocities
21189        velocities: [],
21190        allowMomentumBounce: undefined,
21191        startMoving: undefined,
21192        pointerId: null,
21193        touchId: null
21194      },
21195      // Clicks
21196      allowClick: true,
21197      // Touches
21198      allowTouchMove: swiper.params.allowTouchMove,
21199      touches: {
21200        startX: 0,
21201        startY: 0,
21202        currentX: 0,
21203        currentY: 0,
21204        diff: 0
21205      },
21206      // Images
21207      imagesToLoad: [],
21208      imagesLoaded: 0
21209    });
21210    swiper.emit('_swiper');
21211
21212    // Init
21213    if (swiper.params.init) {
21214      swiper.init();
21215    }
21216
21217    // Return app instance
21218    // eslint-disable-next-line no-constructor-return
21219    return swiper;
21220  }
21221  getDirectionLabel(property) {
21222    if (this.isHorizontal()) {
21223      return property;
21224    }
21225    // prettier-ignore
21226    return {
21227      'width': 'height',
21228      'margin-top': 'margin-left',
21229      'margin-bottom ': 'margin-right',
21230      'margin-left': 'margin-top',
21231      'margin-right': 'margin-bottom',
21232      'padding-left': 'padding-top',
21233      'padding-right': 'padding-bottom',
21234      'marginRight': 'marginBottom'
21235    }[property];
21236  }
21237  getSlideIndex(slideEl) {
21238    const {
21239      slidesEl,
21240      params
21241    } = this;
21242    const slides = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(slidesEl, `.${params.slideClass}, swiper-slide`);
21243    const firstSlideIndex = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.g)(slides[0]);
21244    return (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.g)(slideEl) - firstSlideIndex;
21245  }
21246  getSlideIndexByData(index) {
21247    return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);
21248  }
21249  recalcSlides() {
21250    const swiper = this;
21251    const {
21252      slidesEl,
21253      params
21254    } = swiper;
21255    swiper.slides = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(slidesEl, `.${params.slideClass}, swiper-slide`);
21256  }
21257  enable() {
21258    const swiper = this;
21259    if (swiper.enabled) return;
21260    swiper.enabled = true;
21261    if (swiper.params.grabCursor) {
21262      swiper.setGrabCursor();
21263    }
21264    swiper.emit('enable');
21265  }
21266  disable() {
21267    const swiper = this;
21268    if (!swiper.enabled) return;
21269    swiper.enabled = false;
21270    if (swiper.params.grabCursor) {
21271      swiper.unsetGrabCursor();
21272    }
21273    swiper.emit('disable');
21274  }
21275  setProgress(progress, speed) {
21276    const swiper = this;
21277    progress = Math.min(Math.max(progress, 0), 1);
21278    const min = swiper.minTranslate();
21279    const max = swiper.maxTranslate();
21280    const current = (max - min) * progress + min;
21281    swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);
21282    swiper.updateActiveIndex();
21283    swiper.updateSlidesClasses();
21284  }
21285  emitContainerClasses() {
21286    const swiper = this;
21287    if (!swiper.params._emitClasses || !swiper.el) return;
21288    const cls = swiper.el.className.split(' ').filter(className => {
21289      return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;
21290    });
21291    swiper.emit('_containerClasses', cls.join(' '));
21292  }
21293  getSlideClasses(slideEl) {
21294    const swiper = this;
21295    if (swiper.destroyed) return '';
21296    return slideEl.className.split(' ').filter(className => {
21297      return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;
21298    }).join(' ');
21299  }
21300  emitSlidesClasses() {
21301    const swiper = this;
21302    if (!swiper.params._emitClasses || !swiper.el) return;
21303    const updates = [];
21304    swiper.slides.forEach(slideEl => {
21305      const classNames = swiper.getSlideClasses(slideEl);
21306      updates.push({
21307        slideEl,
21308        classNames
21309      });
21310      swiper.emit('_slideClass', slideEl, classNames);
21311    });
21312    swiper.emit('_slideClasses', updates);
21313  }
21314  slidesPerViewDynamic(view, exact) {
21315    if (view === void 0) {
21316      view = 'current';
21317    }
21318    if (exact === void 0) {
21319      exact = false;
21320    }
21321    const swiper = this;
21322    const {
21323      params,
21324      slides,
21325      slidesGrid,
21326      slidesSizesGrid,
21327      size: swiperSize,
21328      activeIndex
21329    } = swiper;
21330    let spv = 1;
21331    if (typeof params.slidesPerView === 'number') return params.slidesPerView;
21332    if (params.centeredSlides) {
21333      let slideSize = slides[activeIndex] ? slides[activeIndex].swiperSlideSize : 0;
21334      let breakLoop;
21335      for (let i = activeIndex + 1; i < slides.length; i += 1) {
21336        if (slides[i] && !breakLoop) {
21337          slideSize += slides[i].swiperSlideSize;
21338          spv += 1;
21339          if (slideSize > swiperSize) breakLoop = true;
21340        }
21341      }
21342      for (let i = activeIndex - 1; i >= 0; i -= 1) {
21343        if (slides[i] && !breakLoop) {
21344          slideSize += slides[i].swiperSlideSize;
21345          spv += 1;
21346          if (slideSize > swiperSize) breakLoop = true;
21347        }
21348      }
21349    } else {
21350      // eslint-disable-next-line
21351      if (view === 'current') {
21352        for (let i = activeIndex + 1; i < slides.length; i += 1) {
21353          const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;
21354          if (slideInView) {
21355            spv += 1;
21356          }
21357        }
21358      } else {
21359        // previous
21360        for (let i = activeIndex - 1; i >= 0; i -= 1) {
21361          const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;
21362          if (slideInView) {
21363            spv += 1;
21364          }
21365        }
21366      }
21367    }
21368    return spv;
21369  }
21370  update() {
21371    const swiper = this;
21372    if (!swiper || swiper.destroyed) return;
21373    const {
21374      snapGrid,
21375      params
21376    } = swiper;
21377    // Breakpoints
21378    if (params.breakpoints) {
21379      swiper.setBreakpoint();
21380    }
21381    [...swiper.el.querySelectorAll('[loading="lazy"]')].forEach(imageEl => {
21382      if (imageEl.complete) {
21383        processLazyPreloader(swiper, imageEl);
21384      }
21385    });
21386    swiper.updateSize();
21387    swiper.updateSlides();
21388    swiper.updateProgress();
21389    swiper.updateSlidesClasses();
21390    function setTranslate() {
21391      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
21392      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
21393      swiper.setTranslate(newTranslate);
21394      swiper.updateActiveIndex();
21395      swiper.updateSlidesClasses();
21396    }
21397    let translated;
21398    if (params.freeMode && params.freeMode.enabled && !params.cssMode) {
21399      setTranslate();
21400      if (params.autoHeight) {
21401        swiper.updateAutoHeight();
21402      }
21403    } else {
21404      if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {
21405        const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;
21406        translated = swiper.slideTo(slides.length - 1, 0, false, true);
21407      } else {
21408        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
21409      }
21410      if (!translated) {
21411        setTranslate();
21412      }
21413    }
21414    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
21415      swiper.checkOverflow();
21416    }
21417    swiper.emit('update');
21418  }
21419  changeDirection(newDirection, needUpdate) {
21420    if (needUpdate === void 0) {
21421      needUpdate = true;
21422    }
21423    const swiper = this;
21424    const currentDirection = swiper.params.direction;
21425    if (!newDirection) {
21426      // eslint-disable-next-line
21427      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
21428    }
21429    if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {
21430      return swiper;
21431    }
21432    swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);
21433    swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);
21434    swiper.emitContainerClasses();
21435    swiper.params.direction = newDirection;
21436    swiper.slides.forEach(slideEl => {
21437      if (newDirection === 'vertical') {
21438        slideEl.style.width = '';
21439      } else {
21440        slideEl.style.height = '';
21441      }
21442    });
21443    swiper.emit('changeDirection');
21444    if (needUpdate) swiper.update();
21445    return swiper;
21446  }
21447  changeLanguageDirection(direction) {
21448    const swiper = this;
21449    if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;
21450    swiper.rtl = direction === 'rtl';
21451    swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;
21452    if (swiper.rtl) {
21453      swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);
21454      swiper.el.dir = 'rtl';
21455    } else {
21456      swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);
21457      swiper.el.dir = 'ltr';
21458    }
21459    swiper.update();
21460  }
21461  mount(element) {
21462    const swiper = this;
21463    if (swiper.mounted) return true;
21464
21465    // Find el
21466    let el = element || swiper.params.el;
21467    if (typeof el === 'string') {
21468      el = document.querySelector(el);
21469    }
21470    if (!el) {
21471      return false;
21472    }
21473    el.swiper = swiper;
21474    if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === 'SWIPER-CONTAINER') {
21475      swiper.isElement = true;
21476    }
21477    const getWrapperSelector = () => {
21478      return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;
21479    };
21480    const getWrapper = () => {
21481      if (el && el.shadowRoot && el.shadowRoot.querySelector) {
21482        const res = el.shadowRoot.querySelector(getWrapperSelector());
21483        // Children needs to return slot items
21484        return res;
21485      }
21486      return (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(el, getWrapperSelector())[0];
21487    };
21488    // Find Wrapper
21489    let wrapperEl = getWrapper();
21490    if (!wrapperEl && swiper.params.createElements) {
21491      wrapperEl = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', swiper.params.wrapperClass);
21492      el.append(wrapperEl);
21493      (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(el, `.${swiper.params.slideClass}`).forEach(slideEl => {
21494        wrapperEl.append(slideEl);
21495      });
21496    }
21497    Object.assign(swiper, {
21498      el,
21499      wrapperEl,
21500      slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,
21501      hostEl: swiper.isElement ? el.parentNode.host : el,
21502      mounted: true,
21503      // RTL
21504      rtl: el.dir.toLowerCase() === 'rtl' || (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(el, 'direction') === 'rtl',
21505      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(el, 'direction') === 'rtl'),
21506      wrongRTL: (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(wrapperEl, 'display') === '-webkit-box'
21507    });
21508    return true;
21509  }
21510  init(el) {
21511    const swiper = this;
21512    if (swiper.initialized) return swiper;
21513    const mounted = swiper.mount(el);
21514    if (mounted === false) return swiper;
21515    swiper.emit('beforeInit');
21516
21517    // Set breakpoint
21518    if (swiper.params.breakpoints) {
21519      swiper.setBreakpoint();
21520    }
21521
21522    // Add Classes
21523    swiper.addClasses();
21524
21525    // Update size
21526    swiper.updateSize();
21527
21528    // Update slides
21529    swiper.updateSlides();
21530    if (swiper.params.watchOverflow) {
21531      swiper.checkOverflow();
21532    }
21533
21534    // Set Grab Cursor
21535    if (swiper.params.grabCursor && swiper.enabled) {
21536      swiper.setGrabCursor();
21537    }
21538
21539    // Slide To Initial Slide
21540    if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
21541      swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);
21542    } else {
21543      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);
21544    }
21545
21546    // Create loop
21547    if (swiper.params.loop) {
21548      swiper.loopCreate();
21549    }
21550
21551    // Attach events
21552    swiper.attachEvents();
21553    const lazyElements = [...swiper.el.querySelectorAll('[loading="lazy"]')];
21554    if (swiper.isElement) {
21555      lazyElements.push(...swiper.hostEl.querySelectorAll('[loading="lazy"]'));
21556    }
21557    lazyElements.forEach(imageEl => {
21558      if (imageEl.complete) {
21559        processLazyPreloader(swiper, imageEl);
21560      } else {
21561        imageEl.addEventListener('load', e => {
21562          processLazyPreloader(swiper, e.target);
21563        });
21564      }
21565    });
21566    preload(swiper);
21567
21568    // Init Flag
21569    swiper.initialized = true;
21570    preload(swiper);
21571
21572    // Emit
21573    swiper.emit('init');
21574    swiper.emit('afterInit');
21575    return swiper;
21576  }
21577  destroy(deleteInstance, cleanStyles) {
21578    if (deleteInstance === void 0) {
21579      deleteInstance = true;
21580    }
21581    if (cleanStyles === void 0) {
21582      cleanStyles = true;
21583    }
21584    const swiper = this;
21585    const {
21586      params,
21587      el,
21588      wrapperEl,
21589      slides
21590    } = swiper;
21591    if (typeof swiper.params === 'undefined' || swiper.destroyed) {
21592      return null;
21593    }
21594    swiper.emit('beforeDestroy');
21595
21596    // Init Flag
21597    swiper.initialized = false;
21598
21599    // Detach events
21600    swiper.detachEvents();
21601
21602    // Destroy loop
21603    if (params.loop) {
21604      swiper.loopDestroy();
21605    }
21606
21607    // Cleanup styles
21608    if (cleanStyles) {
21609      swiper.removeClasses();
21610      el.removeAttribute('style');
21611      wrapperEl.removeAttribute('style');
21612      if (slides && slides.length) {
21613        slides.forEach(slideEl => {
21614          slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);
21615          slideEl.removeAttribute('style');
21616          slideEl.removeAttribute('data-swiper-slide-index');
21617        });
21618      }
21619    }
21620    swiper.emit('destroy');
21621
21622    // Detach emitter events
21623    Object.keys(swiper.eventsListeners).forEach(eventName => {
21624      swiper.off(eventName);
21625    });
21626    if (deleteInstance !== false) {
21627      swiper.el.swiper = null;
21628      (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.u)(swiper);
21629    }
21630    swiper.destroyed = true;
21631    return null;
21632  }
21633  static extendDefaults(newDefaults) {
21634    (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)(extendedDefaults, newDefaults);
21635  }
21636  static get extendedDefaults() {
21637    return extendedDefaults;
21638  }
21639  static get defaults() {
21640    return defaults;
21641  }
21642  static installModule(mod) {
21643    if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];
21644    const modules = Swiper.prototype.__modules__;
21645    if (typeof mod === 'function' && modules.indexOf(mod) < 0) {
21646      modules.push(mod);
21647    }
21648  }
21649  static use(module) {
21650    if (Array.isArray(module)) {
21651      module.forEach(m => Swiper.installModule(m));
21652      return Swiper;
21653    }
21654    Swiper.installModule(module);
21655    return Swiper;
21656  }
21657}
21658Object.keys(prototypes).forEach(prototypeGroup => {
21659  Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {
21660    Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
21661  });
21662});
21663Swiper.use([Resize, Observer]);
21664
21665
21666
21667
21668/***/ }),
21669
vendor: 11,471 bytes, lines 21670-21994
21670/***/ "./node_modules/swiper/shared/utils.mjs":
21671/*!**********************************************!*\
21672  !*** ./node_modules/swiper/shared/utils.mjs ***!
21673  \**********************************************/
21674/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
21675
21676"use strict";
21677__webpack_require__.r(__webpack_exports__);
21678/* harmony export */ __webpack_require__.d(__webpack_exports__, {
21679/* harmony export */   a: () => (/* binding */ elementParents),
21680/* harmony export */   b: () => (/* binding */ elementOffset),
21681/* harmony export */   c: () => (/* binding */ createElement),
21682/* harmony export */   d: () => (/* binding */ now),
21683/* harmony export */   e: () => (/* binding */ elementChildren),
21684/* harmony export */   f: () => (/* binding */ elementOuterSize),
21685/* harmony export */   g: () => (/* binding */ elementIndex),
21686/* harmony export */   h: () => (/* binding */ classesToTokens),
21687/* harmony export */   i: () => (/* binding */ getTranslate),
21688/* harmony export */   j: () => (/* binding */ elementTransitionEnd),
21689/* harmony export */   k: () => (/* binding */ isObject),
21690/* harmony export */   l: () => (/* binding */ getSlideTransformEl),
21691/* harmony export */   m: () => (/* binding */ elementStyle),
21692/* harmony export */   n: () => (/* binding */ nextTick),
21693/* harmony export */   o: () => (/* binding */ elementNextAll),
21694/* harmony export */   p: () => (/* binding */ elementPrevAll),
21695/* harmony export */   q: () => (/* binding */ animateCSSModeScroll),
21696/* harmony export */   r: () => (/* binding */ showWarning),
21697/* harmony export */   s: () => (/* binding */ setCSSProperty),
21698/* harmony export */   t: () => (/* binding */ extend),
21699/* harmony export */   u: () => (/* binding */ deleteProps)
21700/* harmony export */ });
21701/* harmony import */ var _ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs");
21702
21703
21704function classesToTokens(classes) {
21705  if (classes === void 0) {
21706    classes = '';
21707  }
21708  return classes.trim().split(' ').filter(c => !!c.trim());
21709}
21710
21711function deleteProps(obj) {
21712  const object = obj;
21713  Object.keys(object).forEach(key => {
21714    try {
21715      object[key] = null;
21716    } catch (e) {
21717      // no getter for object
21718    }
21719    try {
21720      delete object[key];
21721    } catch (e) {
21722      // something got wrong
21723    }
21724  });
21725}
21726function nextTick(callback, delay) {
21727  if (delay === void 0) {
21728    delay = 0;
21729  }
21730  return setTimeout(callback, delay);
21731}
21732function now() {
21733  return Date.now();
21734}
21735function getComputedStyle(el) {
21736  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
21737  let style;
21738  if (window.getComputedStyle) {
21739    style = window.getComputedStyle(el, null);
21740  }
21741  if (!style && el.currentStyle) {
21742    style = el.currentStyle;
21743  }
21744  if (!style) {
21745    style = el.style;
21746  }
21747  return style;
21748}
21749function getTranslate(el, axis) {
21750  if (axis === void 0) {
21751    axis = 'x';
21752  }
21753  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
21754  let matrix;
21755  let curTransform;
21756  let transformMatrix;
21757  const curStyle = getComputedStyle(el);
21758  if (window.WebKitCSSMatrix) {
21759    curTransform = curStyle.transform || curStyle.webkitTransform;
21760    if (curTransform.split(',').length > 6) {
21761      curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');
21762    }
21763    // Some old versions of Webkit choke when 'none' is passed; pass
21764    // empty string instead in this case
21765    transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
21766  } else {
21767    transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
21768    matrix = transformMatrix.toString().split(',');
21769  }
21770  if (axis === 'x') {
21771    // Latest Chrome and webkits Fix
21772    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;
21773    // Crazy IE10 Matrix
21774    else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);
21775    // Normal Browsers
21776    else curTransform = parseFloat(matrix[4]);
21777  }
21778  if (axis === 'y') {
21779    // Latest Chrome and webkits Fix
21780    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;
21781    // Crazy IE10 Matrix
21782    else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);
21783    // Normal Browsers
21784    else curTransform = parseFloat(matrix[5]);
21785  }
21786  return curTransform || 0;
21787}
21788function isObject(o) {
21789  return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';
21790}
21791function isNode(node) {
21792  // eslint-disable-next-line
21793  if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {
21794    return node instanceof HTMLElement;
21795  }
21796  return node && (node.nodeType === 1 || node.nodeType === 11);
21797}
21798function extend() {
21799  const to = Object(arguments.length <= 0 ? undefined : arguments[0]);
21800  const noExtend = ['__proto__', 'constructor', 'prototype'];
21801  for (let i = 1; i < arguments.length; i += 1) {
21802    const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];
21803    if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {
21804      const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);
21805      for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
21806        const nextKey = keysArray[nextIndex];
21807        const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
21808        if (desc !== undefined && desc.enumerable) {
21809          if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
21810            if (nextSource[nextKey].__swiper__) {
21811              to[nextKey] = nextSource[nextKey];
21812            } else {
21813              extend(to[nextKey], nextSource[nextKey]);
21814            }
21815          } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
21816            to[nextKey] = {};
21817            if (nextSource[nextKey].__swiper__) {
21818              to[nextKey] = nextSource[nextKey];
21819            } else {
21820              extend(to[nextKey], nextSource[nextKey]);
21821            }
21822          } else {
21823            to[nextKey] = nextSource[nextKey];
21824          }
21825        }
21826      }
21827    }
21828  }
21829  return to;
21830}
21831function setCSSProperty(el, varName, varValue) {
21832  el.style.setProperty(varName, varValue);
21833}
21834function animateCSSModeScroll(_ref) {
21835  let {
21836    swiper,
21837    targetPosition,
21838    side
21839  } = _ref;
21840  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
21841  const startPosition = -swiper.translate;
21842  let startTime = null;
21843  let time;
21844  const duration = swiper.params.speed;
21845  swiper.wrapperEl.style.scrollSnapType = 'none';
21846  window.cancelAnimationFrame(swiper.cssModeFrameID);
21847  const dir = targetPosition > startPosition ? 'next' : 'prev';
21848  const isOutOfBound = (current, target) => {
21849    return dir === 'next' && current >= target || dir === 'prev' && current <= target;
21850  };
21851  const animate = () => {
21852    time = new Date().getTime();
21853    if (startTime === null) {
21854      startTime = time;
21855    }
21856    const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);
21857    const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;
21858    let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);
21859    if (isOutOfBound(currentPosition, targetPosition)) {
21860      currentPosition = targetPosition;
21861    }
21862    swiper.wrapperEl.scrollTo({
21863      [side]: currentPosition
21864    });
21865    if (isOutOfBound(currentPosition, targetPosition)) {
21866      swiper.wrapperEl.style.overflow = 'hidden';
21867      swiper.wrapperEl.style.scrollSnapType = '';
21868      setTimeout(() => {
21869        swiper.wrapperEl.style.overflow = '';
21870        swiper.wrapperEl.scrollTo({
21871          [side]: currentPosition
21872        });
21873      });
21874      window.cancelAnimationFrame(swiper.cssModeFrameID);
21875      return;
21876    }
21877    swiper.cssModeFrameID = window.requestAnimationFrame(animate);
21878  };
21879  animate();
21880}
21881function getSlideTransformEl(slideEl) {
21882  return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;
21883}
21884function elementChildren(element, selector) {
21885  if (selector === void 0) {
21886    selector = '';
21887  }
21888  return [...element.children].filter(el => el.matches(selector));
21889}
21890function showWarning(text) {
21891  try {
21892    console.warn(text);
21893    return;
21894  } catch (err) {
21895    // err
21896  }
21897}
21898function createElement(tag, classes) {
21899  if (classes === void 0) {
21900    classes = [];
21901  }
21902  const el = document.createElement(tag);
21903  el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));
21904  return el;
21905}
21906function elementOffset(el) {
21907  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
21908  const document = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)();
21909  const box = el.getBoundingClientRect();
21910  const body = document.body;
21911  const clientTop = el.clientTop || body.clientTop || 0;
21912  const clientLeft = el.clientLeft || body.clientLeft || 0;
21913  const scrollTop = el === window ? window.scrollY : el.scrollTop;
21914  const scrollLeft = el === window ? window.scrollX : el.scrollLeft;
21915  return {
21916    top: box.top + scrollTop - clientTop,
21917    left: box.left + scrollLeft - clientLeft
21918  };
21919}
21920function elementPrevAll(el, selector) {
21921  const prevEls = [];
21922  while (el.previousElementSibling) {
21923    const prev = el.previousElementSibling; // eslint-disable-line
21924    if (selector) {
21925      if (prev.matches(selector)) prevEls.push(prev);
21926    } else prevEls.push(prev);
21927    el = prev;
21928  }
21929  return prevEls;
21930}
21931function elementNextAll(el, selector) {
21932  const nextEls = [];
21933  while (el.nextElementSibling) {
21934    const next = el.nextElementSibling; // eslint-disable-line
21935    if (selector) {
21936      if (next.matches(selector)) nextEls.push(next);
21937    } else nextEls.push(next);
21938    el = next;
21939  }
21940  return nextEls;
21941}
21942function elementStyle(el, prop) {
21943  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
21944  return window.getComputedStyle(el, null).getPropertyValue(prop);
21945}
21946function elementIndex(el) {
21947  let child = el;
21948  let i;
21949  if (child) {
21950    i = 0;
21951    // eslint-disable-next-line
21952    while ((child = child.previousSibling) !== null) {
21953      if (child.nodeType === 1) i += 1;
21954    }
21955    return i;
21956  }
21957  return undefined;
21958}
21959function elementParents(el, selector) {
21960  const parents = []; // eslint-disable-line
21961  let parent = el.parentElement; // eslint-disable-line
21962  while (parent) {
21963    if (selector) {
21964      if (parent.matches(selector)) parents.push(parent);
21965    } else {
21966      parents.push(parent);
21967    }
21968    parent = parent.parentElement;
21969  }
21970  return parents;
21971}
21972function elementTransitionEnd(el, callback) {
21973  function fireCallBack(e) {
21974    if (e.target !== el) return;
21975    callback.call(el, e);
21976    el.removeEventListener('transitionend', fireCallBack);
21977  }
21978  if (callback) {
21979    el.addEventListener('transitionend', fireCallBack);
21980  }
21981}
21982function elementOuterSize(el, size, includeMargins) {
21983  const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)();
21984  if (includeMargins) {
21985    return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));
21986  }
21987  return el.offsetWidth;
21988}
21989
21990
21991
21992
21993/***/ }),
21994
vendor: 6,894 bytes, lines 21995-22075
21995/***/ "./node_modules/swiper/swiper-bundle.mjs":
21996/*!***********************************************!*\
21997  !*** ./node_modules/swiper/swiper-bundle.mjs ***!
21998  \***********************************************/
21999/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
22000
22001"use strict";
22002__webpack_require__.r(__webpack_exports__);
22003/* harmony export */ __webpack_require__.d(__webpack_exports__, {
22004/* harmony export */   Swiper: () => (/* reexport safe */ _shared_swiper_core_mjs__WEBPACK_IMPORTED_MODULE_0__.S),
22005/* harmony export */   "default": () => (/* reexport safe */ _shared_swiper_core_mjs__WEBPACK_IMPORTED_MODULE_0__.S)
22006/* harmony export */ });
22007/* harmony import */ var _shared_swiper_core_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./shared/swiper-core.mjs */ "./node_modules/swiper/shared/swiper-core.mjs");
22008/* harmony import */ var _modules_virtual_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/virtual.mjs */ "./node_modules/swiper/modules/virtual.mjs");
22009/* harmony import */ var _modules_keyboard_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/keyboard.mjs */ "./node_modules/swiper/modules/keyboard.mjs");
22010/* harmony import */ var _modules_mousewheel_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/mousewheel.mjs */ "./node_modules/swiper/modules/mousewheel.mjs");
22011/* harmony import */ var _modules_navigation_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/navigation.mjs */ "./node_modules/swiper/modules/navigation.mjs");
22012/* harmony import */ var _modules_pagination_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/pagination.mjs */ "./node_modules/swiper/modules/pagination.mjs");
22013/* harmony import */ var _modules_scrollbar_mjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/scrollbar.mjs */ "./node_modules/swiper/modules/scrollbar.mjs");
22014/* harmony import */ var _modules_parallax_mjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modules/parallax.mjs */ "./node_modules/swiper/modules/parallax.mjs");
22015/* harmony import */ var _modules_zoom_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modules/zoom.mjs */ "./node_modules/swiper/modules/zoom.mjs");
22016/* harmony import */ var _modules_controller_mjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./modules/controller.mjs */ "./node_modules/swiper/modules/controller.mjs");
22017/* harmony import */ var _modules_a11y_mjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./modules/a11y.mjs */ "./node_modules/swiper/modules/a11y.mjs");
22018/* harmony import */ var _modules_history_mjs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./modules/history.mjs */ "./node_modules/swiper/modules/history.mjs");
22019/* harmony import */ var _modules_hash_navigation_mjs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modules/hash-navigation.mjs */ "./node_modules/swiper/modules/hash-navigation.mjs");
22020/* harmony import */ var _modules_autoplay_mjs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./modules/autoplay.mjs */ "./node_modules/swiper/modules/autoplay.mjs");
22021/* harmony import */ var _modules_thumbs_mjs__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./modules/thumbs.mjs */ "./node_modules/swiper/modules/thumbs.mjs");
22022/* harmony import */ var _modules_free_mode_mjs__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./modules/free-mode.mjs */ "./node_modules/swiper/modules/free-mode.mjs");
22023/* harmony import */ var _modules_grid_mjs__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./modules/grid.mjs */ "./node_modules/swiper/modules/grid.mjs");
22024/* harmony import */ var _modules_manipulation_mjs__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modules/manipulation.mjs */ "./node_modules/swiper/modules/manipulation.mjs");
22025/* harmony import */ var _modules_effect_fade_mjs__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./modules/effect-fade.mjs */ "./node_modules/swiper/modules/effect-fade.mjs");
22026/* harmony import */ var _modules_effect_cube_mjs__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./modules/effect-cube.mjs */ "./node_modules/swiper/modules/effect-cube.mjs");
22027/* harmony import */ var _modules_effect_flip_mjs__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./modules/effect-flip.mjs */ "./node_modules/swiper/modules/effect-flip.mjs");
22028/* harmony import */ var _modules_effect_coverflow_mjs__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./modules/effect-coverflow.mjs */ "./node_modules/swiper/modules/effect-coverflow.mjs");
22029/* harmony import */ var _modules_effect_creative_mjs__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./modules/effect-creative.mjs */ "./node_modules/swiper/modules/effect-creative.mjs");
22030/* harmony import */ var _modules_effect_cards_mjs__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./modules/effect-cards.mjs */ "./node_modules/swiper/modules/effect-cards.mjs");
22031/**
22032 * Swiper 11.0.5
22033 * Most modern mobile touch slider and framework with hardware accelerated transitions
22034 * https://swiperjs.com
22035 *
22036 * Copyright 2014-2023 Vladimir Kharlampidi
22037 *
22038 * Released under the MIT License
22039 *
22040 * Released on: November 22, 2023
22041 */
22042
22043
22044
22045
22046
22047
22048
22049
22050
22051
22052
22053
22054
22055
22056
22057
22058
22059
22060
22061
22062
22063
22064
22065
22066
22067
22068// Swiper Class
22069const modules = [_modules_virtual_mjs__WEBPACK_IMPORTED_MODULE_1__["default"], _modules_keyboard_mjs__WEBPACK_IMPORTED_MODULE_2__["default"], _modules_mousewheel_mjs__WEBPACK_IMPORTED_MODULE_3__["default"], _modules_navigation_mjs__WEBPACK_IMPORTED_MODULE_4__["default"], _modules_pagination_mjs__WEBPACK_IMPORTED_MODULE_5__["default"], _modules_scrollbar_mjs__WEBPACK_IMPORTED_MODULE_6__["default"], _modules_parallax_mjs__WEBPACK_IMPORTED_MODULE_7__["default"], _modules_zoom_mjs__WEBPACK_IMPORTED_MODULE_8__["default"], _modules_controller_mjs__WEBPACK_IMPORTED_MODULE_9__["default"], _modules_a11y_mjs__WEBPACK_IMPORTED_MODULE_10__["default"], _modules_history_mjs__WEBPACK_IMPORTED_MODULE_11__["default"], _modules_hash_navigation_mjs__WEBPACK_IMPORTED_MODULE_12__["default"], _modules_autoplay_mjs__WEBPACK_IMPORTED_MODULE_13__["default"], _modules_thumbs_mjs__WEBPACK_IMPORTED_MODULE_14__["default"], _modules_free_mode_mjs__WEBPACK_IMPORTED_MODULE_15__["default"], _modules_grid_mjs__WEBPACK_IMPORTED_MODULE_16__["default"], _modules_manipulation_mjs__WEBPACK_IMPORTED_MODULE_17__["default"], _modules_effect_fade_mjs__WEBPACK_IMPORTED_MODULE_18__["default"], _modules_effect_cube_mjs__WEBPACK_IMPORTED_MODULE_19__["default"], _modules_effect_flip_mjs__WEBPACK_IMPORTED_MODULE_20__["default"], _modules_effect_coverflow_mjs__WEBPACK_IMPORTED_MODULE_21__["default"], _modules_effect_creative_mjs__WEBPACK_IMPORTED_MODULE_22__["default"], _modules_effect_cards_mjs__WEBPACK_IMPORTED_MODULE_23__["default"]];
22070_shared_swiper_core_mjs__WEBPACK_IMPORTED_MODULE_0__.S.use(modules);
22071
22072
22073
22074
22075/***/ })
vendor: 7,692 bytes, lines 22075-22253
22075
22076
22077/******/ 	});
22078/************************************************************************/
22079/******/ 	// The module cache
22080/******/ 	var __webpack_module_cache__ = {};
22081/******/ 	
22082/******/ 	// The require function
22083/******/ 	function __webpack_require__(moduleId) {
22084/******/ 		// Check if module is in cache
22085/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
22086/******/ 		if (cachedModule !== undefined) {
22087/******/ 			return cachedModule.exports;
22088/******/ 		}
22089/******/ 		// Create a new module (and put it into the cache)
22090/******/ 		var module = __webpack_module_cache__[moduleId] = {
22091/******/ 			id: moduleId,
22092/******/ 			// no module.loaded needed
22093/******/ 			exports: {}
22094/******/ 		};
22095/******/ 	
22096/******/ 		// Execute the module function
22097/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
22098/******/ 	
22099/******/ 		// Return the exports of the module
22100/******/ 		return module.exports;
22101/******/ 	}
22102/******/ 	
22103/******/ 	// expose the modules object (__webpack_modules__)
22104/******/ 	__webpack_require__.m = __webpack_modules__;
22105/******/ 	
22106/************************************************************************/
22107/******/ 	/* webpack/runtime/chunk loaded */
22108/******/ 	(() => {
22109/******/ 		var deferred = [];
22110/******/ 		__webpack_require__.O = (result, chunkIds, fn, priority) => {
22111/******/ 			if(chunkIds) {
22112/******/ 				priority = priority || 0;
22113/******/ 				for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
22114/******/ 				deferred[i] = [chunkIds, fn, priority];
22115/******/ 				return;
22116/******/ 			}
22117/******/ 			var notFulfilled = Infinity;
22118/******/ 			for (var i = 0; i < deferred.length; i++) {
22119/******/ 				var [chunkIds, fn, priority] = deferred[i];
22120/******/ 				var fulfilled = true;
22121/******/ 				for (var j = 0; j < chunkIds.length; j++) {
22122/******/ 					if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
22123/******/ 						chunkIds.splice(j--, 1);
22124/******/ 					} else {
22125/******/ 						fulfilled = false;
22126/******/ 						if(priority < notFulfilled) notFulfilled = priority;
22127/******/ 					}
22128/******/ 				}
22129/******/ 				if(fulfilled) {
22130/******/ 					deferred.splice(i--, 1)
22131/******/ 					var r = fn();
22132/******/ 					if (r !== undefined) result = r;
22133/******/ 				}
22134/******/ 			}
22135/******/ 			return result;
22136/******/ 		};
22137/******/ 	})();
22138/******/ 	
22139/******/ 	/* webpack/runtime/compat get default export */
22140/******/ 	(() => {
22141/******/ 		// getDefaultExport function for compatibility with non-harmony modules
22142/******/ 		__webpack_require__.n = (module) => {
22143/******/ 			var getter = module && module.__esModule ?
22144/******/ 				() => (module['default']) :
22145/******/ 				() => (module);
22146/******/ 			__webpack_require__.d(getter, { a: getter });
22147/******/ 			return getter;
22148/******/ 		};
22149/******/ 	})();
22150/******/ 	
22151/******/ 	/* webpack/runtime/define property getters */
22152/******/ 	(() => {
22153/******/ 		// define getter functions for harmony exports
22154/******/ 		__webpack_require__.d = (exports, definition) => {
22155/******/ 			for(var key in definition) {
22156/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
22157/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
22158/******/ 				}
22159/******/ 			}
22160/******/ 		};
22161/******/ 	})();
22162/******/ 	
22163/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
22164/******/ 	(() => {
22165/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
22166/******/ 	})();
22167/******/ 	
22168/******/ 	/* webpack/runtime/make namespace object */
22169/******/ 	(() => {
22170/******/ 		// define __esModule on exports
22171/******/ 		__webpack_require__.r = (exports) => {
22172/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
22173/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
22174/******/ 			}
22175/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
22176/******/ 		};
22177/******/ 	})();
22178/******/ 	
22179/******/ 	/* webpack/runtime/jsonp chunk loading */
22180/******/ 	(() => {
22181/******/ 		// no baseURI
22182/******/ 		
22183/******/ 		// object to store loaded and loading chunks
22184/******/ 		// undefined = chunk not loaded, null = chunk preloaded/prefetched
22185/******/ 		// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
22186/******/ 		var installedChunks = {
22187/******/ 			"/library/js/scripts.min": 0,
22188/******/ 			"library/css/style": 0,
22189/******/ 			"library/css/plugin-a11y": 0
22190/******/ 		};
22191/******/ 		
22192/******/ 		// no chunk on demand loading
22193/******/ 		
22194/******/ 		// no prefetching
22195/******/ 		
22196/******/ 		// no preloaded
22197/******/ 		
22198/******/ 		// no HMR
22199/******/ 		
22200/******/ 		// no HMR manifest
22201/******/ 		
22202/******/ 		__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
22203/******/ 		
22204/******/ 		// install a JSONP callback for chunk loading
22205/******/ 		var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
22206/******/ 			var [chunkIds, moreModules, runtime] = data;
22207/******/ 			// add "moreModules" to the modules object,
22208/******/ 			// then flag all "chunkIds" as loaded and fire callback
22209/******/ 			var moduleId, chunkId, i = 0;
22210/******/ 			if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
22211/******/ 				for(moduleId in moreModules) {
22212/******/ 					if(__webpack_require__.o(moreModules, moduleId)) {
22213/******/ 						__webpack_require__.m[moduleId] = moreModules[moduleId];
22214/******/ 					}
22215/******/ 				}
22216/******/ 				if(runtime) var result = runtime(__webpack_require__);
22217/******/ 			}
22218/******/ 			if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
22219/******/ 			for(;i < chunkIds.length; i++) {
22220/******/ 				chunkId = chunkIds[i];
22221/******/ 				if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
22222/******/ 					installedChunks[chunkId][0]();
22223/******/ 				}
22224/******/ 				installedChunks[chunkId] = 0;
22225/******/ 			}
22226/******/ 			return __webpack_require__.O(result);
22227/******/ 		}
22228/******/ 		
22229/******/ 		var chunkLoadingGlobal = self["webpackChunkplatform81"] = self["webpackChunkplatform81"] || [];
22230/******/ 		chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
22231/******/ 		chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
22232/******/ 	})();
22233/******/ 	
22234/******/ 	/* webpack/runtime/nonce */
22235/******/ 	(() => {
22236/******/ 		__webpack_require__.nc = undefined;
22237/******/ 	})();
22238/******/ 	
22239/************************************************************************/
22240/******/ 	
22241/******/ 	// startup
22242/******/ 	// Load entry module and return exports
22243/******/ 	// This entry module depends on other loaded chunks and execution need to be delayed
22244/******/ 	__webpack_require__.O(undefined, ["library/css/style","library/css/plugin-a11y"], () => (__webpack_require__("./library/js/libs/p81-sliders.js")))
22245/******/ 	__webpack_require__.O(undefined, ["library/css/style","library/css/plugin-a11y"], () => (__webpack_require__("./library/js/libs/p81-accordion.js")))
22246/******/ 	__webpack_require__.O(undefined, ["library/css/style","library/css/plugin-a11y"], () => (__webpack_require__("./library/js/scripts.js")))
22247/******/ 	__webpack_require__.O(undefined, ["library/css/style","library/css/plugin-a11y"], () => (__webpack_require__("./library/scss/style.scss")))
22248/******/ 	var __webpack_exports__ = __webpack_require__.O(undefined, ["library/css/style","library/css/plugin-a11y"], () => (__webpack_require__("./library/scss/plugin-a11y.scss")))
22249/******/ 	__webpack_exports__ = __webpack_require__.O(__webpack_exports__);
22250/******/ 	
22251/******/ })()
22252;
22253//# sourceMappingURL=scripts.min.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.