{"version":3,"sources":["classList.js","modernizr.js","ofi.js","svg4everybody.js","jquery.fitvids.js","jquery.menu-aim.js","swiper.js","global.js","menu.js","page-home.js","singular.js"],"names":["self","document","createElement","createElementNS","view","elemCtrProto","Element","objCtr","Object","strTrim","String","trim","this","replace","arrIndexOf","Array","indexOf","item","i","len","length","DOMEx","type","message","name","code","DOMException","checkTokenAndGetIndex","classList","token","test","call","ClassList","elem","trimmedClasses","getAttribute","classes","split","push","_updateClassName","setAttribute","toString","classListProto","classListGetter","Error","contains","add","tokens","arguments","l","updated","remove","index","splice","toggle","force","result","method","replacement_token","join","defineProperty","classListPropDesc","get","enumerable","configurable","ex","undefined","number","__defineGetter__","testElement","createMethod","original","DOMTokenList","prototype","_toggle","slice","apply","window","tests","ModernizrProto","_version","_config","classPrefix","enableClasses","enableJSClass","usePrefixes","_q","on","cb","setTimeout","addTest","fn","options","addAsyncTest","Modernizr","is","obj","createSVGRect","docElement","documentElement","isSVG","nodeName","toLowerCase","domPrefixes","cssToDOM","str","m1","m2","toUpperCase","_domPrefixes","newSyntax","CSS","oldSyntax","computedStyle","pseudo","prop","getComputedStyle","console","getPropertyValue","error","currentStyle","injectElementWithStyles","rule","callback","nodes","testnames","style","ret","node","docOverflow","mod","div","body","fake","getBody","parseInt","id","appendChild","styleSheet","cssText","createTextNode","background","overflow","parentNode","removeChild","offsetHeight","matchMedia","mq","msMatchMedia","mql","matches","bool","position","ua","webos","wppre8","testStyles","navigator","userAgent","match","parseFloat","RegExp","$1","getElementById","sheet","cssRules","height","innerHeight","compStyle","width","innerWidth","cssomPrefixes","_cssomPrefixes","atRule","prefixes","cssrule","CSSRule","prefix","fnBind","that","modElem","mStyle","domToCSS","testProps","props","prefixed","value","skipValueTest","supports","conditionText","nativeTestProps","afterInit","propsLength","before","elems","shift","cleanElems","e","unshift","testProp","useValue","testPropsAll","ucProp","charAt","testDOMProps","testAllProps","aliases","usePrefix","offsetWidth","featureNames","feature","aliasIdx","nameIdx","featureNameSplit","featureIdx","hasOwnProperty","Boolean","testRunner","className","baseVal","reJS","setClasses","objectFitImages","OFI","propRegex","testImg","Image","object-position","supportsObjectFit","supportsObjectPosition","supportsOFI","supportsCurrentSrc","currentSrc","nativeGetAttribute","nativeSetAttribute","autoModeEnabled","setPlaceholder","img","placeholder","onImageReady","naturalWidth","fixOne","el","parsed","fontFamily","exec","getStyle","ofi","skipTest","srcset","src","naturalHeight","descriptors","set","ss","keepSrcUsable","err","warn","picturefill","pf","_","ns","evaled","fillImg","reselect","curSrc","supported","polyfillCurrentSrc","backgroundImage","backgroundPosition","backgroundRepeat","backgroundOrigin","backgroundSize","fix","imgs","opts","startAutoMode","getElementsByTagName","querySelectorAll","addEventListener","target","tagName","watchMQ","bind","getOfiImageMaybe","HTMLImageElement","hijackAttributes","root","factory","define","amd","svg4everybody","module","exports","embed","parent","svg","fragment","createDocumentFragment","viewBox","hasAttribute","clone","cloneNode","childNodes","firstChild","loadreadystatechange","xhr","onreadystatechange","readyState","cachedDocument","_cachedDocument","implementation","createHTMLDocument","innerHTML","responseText","_cachedTarget","_embeds","map","getSVGAncestor","rawopts","polyfill","inIframe","top","requests","requestAnimationFrame","uses","numberOfSvgUseElementsToBypass","oninterval","use","attributeName","validate","srcSplit","url","XMLHttpRequest","open","send","$","fitVids","settings","customSelector","ignore","head","extend","each","selectors","ignoreList","$allVideos","find","not","$this","parents","css","isNaN","attr","aspectRatio","videoName","_count","wrap","removeAttr","jQuery","Zepto","init","$menu","activeRow","mouseLocs","lastDelayLoc","timeoutId","rowSelector","submenuSelector","submenuDirection","tolerance","enter","noop","exit","activate","deactivate","exitMenu","row","possiblyActivate","delay","activationDelay","offset","upperLeft","x","left","y","upperRight","outerWidth","lowerLeft","outerHeight","lowerRight","loc","prevLoc","slope","a","b","decreasingCorner","increasingCorner","decreasingSlope","increasingSlope","prevDecreasingSlope","prevIncreasingSlope","mouseleave","clearTimeout","mouseenter","click","mousemove","pageX","pageY","menuAim","global","Swiper","doc","removeEventListener","activeElement","blur","querySelector","createEvent","initEvent","children","location","hash","win","history","CustomEvent","Date","screen","Dom7","arr","selector","context","els","tempParent","html","toCreate","nodeType","unique","uniqueArray","Class","Methods","addClass","j","removeClass","hasClass","toggleClass","attrs","arguments$1","attrName","removeAttribute","data","key","dom7ElementDataStorage","dataKey","transform","elStyle","webkitTransform","transition","duration","webkitTransitionDuration","transitionDuration","assign","args","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","k","handleEvent","events","event$1","dom7LiveListeners","proxyListener","event","dom7Listeners","off","handlers","handler","trigger","evt","detail","bubbles","cancelable","filter","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","includeMargins","styles","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","text","textContent","compareWith","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","returnIndex","append","newChild","tempDiv","prepend","insertBefore","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","closest","foundElements","found","toAdd","keys","forEach","methodName","testDiv","Utils","deleteProps","object","nextTick","now","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","parseUrlQuery","params","param","query","urlToParse","href","paramsPart","decodeURIComponent","isObject","o","constructor","len$1","to","nextSource","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","Support","touch","maxTouchPoints","DocumentTouch","pointerEvents","pointerEnabled","PointerEvent","prefixedPointerEvents","msPointerEnabled","transforms3d","csstransforms3d","flexbox","observer","passiveListener","supportsPassive","gestures","SwiperClass","eventsListeners","eventName","staticAccessors","components","priority","once","onceHandler","eventHandler","emit","isArray","eventsArray","useModulesParams","instanceParams","instance","modules","moduleName","useModules","modulesParams","moduleParams","modulePropName","moduleProp","moduleEventName","create","installModule","proto","static","install","m","concat","defineProperties","update","updateSize","$el","clientWidth","clientHeight","isHorizontal","isVertical","size","updateSlides","$wrapperEl","swiperSize","rtl","rtlTranslate","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","slidesNumberEvenToRows","slideSize","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesPerColumn","Math","floor","ceil","slidesPerView","slidesPerColumnFill","max","newSlidesGrid","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","column","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","paddingTop","paddingBottom","boxSizing$1","swiperSlideSize","centeredSlides","abs","slidesPerGroup","effect","setWrapperSize","i$1","slidesGridItem","i$2","slidesGridItem$1","centerInsufficientSlides","allSlidesSize","slideSizeValue","allSlidesOffset","snap","snapIndex","watchOverflow","checkOverflow","watchSlidesProgress","watchSlidesVisibility","updateSlidesOffset","updateAutoHeight","speed","activeSlides","newHeight","setTransition","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","translate","offsetCenter","slideVisibleClass","visibleSlidesIndexes","visibleSlides","slideProgress","minTranslate","slideBefore","slideAfter","progress","updateProgress","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","updateSlidesClasses","activeSlide","realIndex","slideActiveClass","loop","slideDuplicateClass","slideDuplicateActiveClass","nextSlide","slideNextClass","prevSlide","slidePrevClass","slideDuplicateNextClass","slideDuplicatePrevClass","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","currentTranslate","setTranslate","byController","previousTranslate","transition$1","transitionStart","runCallbacks","direction","autoHeight","dir","animating","slideTo","internal","swiper","slideIndex","preventInteractionOnTransition","initialSlide","initialized","allowSlideNext","allowSlidePrev","onSlideToWrapperTransitionEnd","destroyed","slideToLoop","newIndex","loopedSlides","slideNext","loopFix","_clientLeft","slidePrev","normalize","val","prevIndex","normalizedTranslate","normalizedSnapGrid","prevSnap","slideReset","slideToClosest","currentSnap","slidesPerViewDynamic","slideToIndex","loopCreate","loopFillGroupWithBlank","blankSlidesNum","blankNode","loopAdditionalSlides","prependSlides","appendSlides","diff","loopDestroy","grabCursor","setGrabCursor","moving","simulateTouch","isLocked","cursor","unsetGrabCursor","manipulation","appendSlide","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","Device","device","ios","android","androidChrome","desktop","windows","iphone","ipod","ipad","cordova","phonegap","os","osVersion","webView","osVersionArr","metaViewport","minimalUi","pixelRatio","devicePixelRatio","onTouchStart","touchEventsData","touches","originalEvent","isTouchEvent","which","button","isTouched","isMoved","noSwiping","noSwipingSelector","allowClick","swipeHandler","currentX","targetTouches","currentY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","threshold","allowThresholdMove","preventDefault","formElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","onTouchMove","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","pow","touchAngle","atan2","PI","touchMoveStopPropagation","nested","stopPropagation","startTranslate","allowMomentumBounce","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","velocities","time","onTouchEnd","currentPos","touchEndTime","timeDiff","lastClickTime","clickTimeout","freeModeMomentum","lastMoveEvent","pop","velocityEvent","distance","velocity","freeModeMinimumVelocity","freeModeMomentumVelocityRatio","momentumDuration","freeModeMomentumRatio","momentumDistance","newPosition","afterBouncePosition","needsLoopFix","doBounce","bounceAmount","freeModeMomentumBounceRatio","freeModeMomentumBounce","freeModeSticky","longSwipesMs","stopIndex","groupSize","ratio","longSwipes","longSwipesRatio","shortSwipes","onResize","breakpoints","setBreakpoint","newTranslate","min","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","attachEvents","touchEvents","wrapperEl","touchEventsTarget","start","passiveListeners","passive","move","end","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointOnlyParams","paramValue","breakpointParams","originalParams","needsReLoop","points","point","sort","breakpointsInverse","Browser","isIE","isEdge","isSafari","isUiWebView","defaults","uniqueNavElements","preloadImages","updateOnImagesReady","noSwipingClass","containerModifierClass","slideClass","slideBlankClass","wrapperClass","runCallbacksOnInit","prototypes","wasLocked","navigation","addClasses","classNames","suffixes","suffix","removeClasses","images","loadImage","imageEl","sizes","checkForComplete","image","onReady","complete","onload","onerror","imagesLoaded","imagesToLoad","extendedDefaults","SwiperClass$$1","prototypeGroup","protoMethod","moduleParamName","swiperParams","passedParams","swipers","containerEl","newParams","touchEventsTouch","touchEventsDesktop","__proto__","spv","breakLoop","translateValue","destroy","deleteInstance","cleanStyles","extendDefaults","newDefaults","Device$1","Support$1","support","Browser$1","browser","Resize","resize","resizeHandler","orientationChangeHandler","Observer","func","MutationObserver","WebkitMutationObserver","attach","ObserverFunc","mutations","observerUpdate","observe","attributes","childList","characterData","observers","observeParents","containerParents","observeSlideChildren","disconnect","Observer$1","Mousewheel","lastScrollTime","isSupported","element","hasFeature","isEventSupported","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","handleMouseEnter","mouseEntered","handleMouseLeave","handle","mousewheel","releaseOnEdges","delta","rtlFactor","forceToAxis","invert","sensitivity","timeout","autoplay","autoplayDisableOnInteraction","stop","getTime","returnValue","enable","eventsTarged","disable","Navigation","ref","$nextEl","$prevEl","disabledClass","lockClass","onPrevClick","onNextClick","nextEl","prevEl","Pagination","pagination","current","total","paginationType","bullets","firstIndex","lastIndex","midIndex","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bullet","$bullet","bulletIndex","bulletActiveClass","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","formatFractionCurrent","formatFractionTotal","progressbarDirection","progressbarOpposite","scale","scaleX","scaleY","renderCustom","render","paginationHTML","numberOfBullets","renderBullet","bulletClass","renderFraction","currentClass","totalClass","renderProgressbar","progressbarFillClass","clickable","clickableClass","modifierClass","progressbarOppositeClass","hiddenClass","Lazy","loadInSlide","loadInDuplicate","lazy","$slideEl","$images","elementClass","loadedClass","loadingClass","imageIndex","$imageEl","slideOriginalIndex","originalSlide","duplicatedSlide","load","slideExist","slideEl","initialImageLoaded","elIndex","loadPrevNext","loadPrevNextAmount","amount","maxIndex","minIndex","a11y","makeElFocusable","addElRole","role","addElLabel","label","disableEl","enableEl","onEnterKey","keyCode","$targetEl","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","notification","liveRegion","updateNavigation","updatePagination","bulletEl","$bulletEl","paginationBulletMessage","Autoplay","run","$activeSlideEl","reverseDirection","stopOnLastSlide","running","pause","paused","waitForTransition","onTransitionEnd","Fade","tx","ty","slideOpacity","fadeEffect","crossFade","opacity","eventTriggered","triggerEvents","hideOnClick","toEdge","fromEdge","bulletElement","activeIndexChange","snapIndexChange","slidesLengthChange","snapGridLengthChange","loadOnTransitionStart","preloaderClass","beforeInit","scroll","scrollbarDragMove","notificationClass","paginationUpdate","disableOnInteraction","beforeTransitionStart","sliderFirstMove","overwriteParams","video","hide","iframe","show","backTop","getElementsByClassName","scrolling","checkBackToTop","windowTop","reg","toggleNav","navIsVisible","one","selected","1200","breakpointChecker","enableSwiper","titles","addListener","shareSticky","topPos","table","th","headers","cells"],"mappings":"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","file":"scripts.min.js","sourcesContent":["/*\n * classList.js: Cross-browser full element.classList implementation.\n * 1.2.20171210\n *\n * By Eli Grey, http://eligrey.com\n * License: Dedicated to the public domain.\n *   See https://github.com/eligrey/classList.js/blob/master/LICENSE.md\n */\n\n/*global self, document, DOMException */\n\n/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js */\n\nif (\"document\" in self) {\n\n// Full polyfill for browsers with no classList support\n// Including IE < Edge missing SVGElement.classList\nif (\n\t   !(\"classList\" in document.createElement(\"_\"))\n\t|| document.createElementNS\n\t&& !(\"classList\" in document.createElementNS(\"http://www.w3.org/2000/svg\",\"g\"))\n) {\n\n(function (view) {\n\n\"use strict\";\n\nif (!('Element' in view)) return;\n\nvar\n\t  classListProp = \"classList\"\n\t, protoProp = \"prototype\"\n\t, elemCtrProto = view.Element[protoProp]\n\t, objCtr = Object\n\t, strTrim = String[protoProp].trim || function () {\n\t\treturn this.replace(/^\\s+|\\s+$/g, \"\");\n\t}\n\t, arrIndexOf = Array[protoProp].indexOf || function (item) {\n\t\tvar\n\t\t\t  i = 0\n\t\t\t, len = this.length\n\t\t;\n\t\tfor (; i < len; i++) {\n\t\t\tif (i in this && this[i] === item) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\t// Vendors: please allow content code to instantiate DOMExceptions\n\t, DOMEx = function (type, message) {\n\t\tthis.name = type;\n\t\tthis.code = DOMException[type];\n\t\tthis.message = message;\n\t}\n\t, checkTokenAndGetIndex = function (classList, token) {\n\t\tif (token === \"\") {\n\t\t\tthrow new DOMEx(\n\t\t\t\t  \"SYNTAX_ERR\"\n\t\t\t\t, \"The token must not be empty.\"\n\t\t\t);\n\t\t}\n\t\tif (/\\s/.test(token)) {\n\t\t\tthrow new DOMEx(\n\t\t\t\t  \"INVALID_CHARACTER_ERR\"\n\t\t\t\t, \"The token must not contain space characters.\"\n\t\t\t);\n\t\t}\n\t\treturn arrIndexOf.call(classList, token);\n\t}\n\t, ClassList = function (elem) {\n\t\tvar\n\t\t\t  trimmedClasses = strTrim.call(elem.getAttribute(\"class\") || \"\")\n\t\t\t, classes = trimmedClasses ? trimmedClasses.split(/\\s+/) : []\n\t\t\t, i = 0\n\t\t\t, len = classes.length\n\t\t;\n\t\tfor (; i < len; i++) {\n\t\t\tthis.push(classes[i]);\n\t\t}\n\t\tthis._updateClassName = function () {\n\t\t\telem.setAttribute(\"class\", this.toString());\n\t\t};\n\t}\n\t, classListProto = ClassList[protoProp] = []\n\t, classListGetter = function () {\n\t\treturn new ClassList(this);\n\t}\n;\n// Most DOMException implementations don't allow calling DOMException's toString()\n// on non-DOMExceptions. Error's toString() is sufficient here.\nDOMEx[protoProp] = Error[protoProp];\nclassListProto.item = function (i) {\n\treturn this[i] || null;\n};\nclassListProto.contains = function (token) {\n\treturn ~checkTokenAndGetIndex(this, token + \"\");\n};\nclassListProto.add = function () {\n\tvar\n\t\t  tokens = arguments\n\t\t, i = 0\n\t\t, l = tokens.length\n\t\t, token\n\t\t, updated = false\n\t;\n\tdo {\n\t\ttoken = tokens[i] + \"\";\n\t\tif (!~checkTokenAndGetIndex(this, token)) {\n\t\t\tthis.push(token);\n\t\t\tupdated = true;\n\t\t}\n\t}\n\twhile (++i < l);\n\n\tif (updated) {\n\t\tthis._updateClassName();\n\t}\n};\nclassListProto.remove = function () {\n\tvar\n\t\t  tokens = arguments\n\t\t, i = 0\n\t\t, l = tokens.length\n\t\t, token\n\t\t, updated = false\n\t\t, index\n\t;\n\tdo {\n\t\ttoken = tokens[i] + \"\";\n\t\tindex = checkTokenAndGetIndex(this, token);\n\t\twhile (~index) {\n\t\t\tthis.splice(index, 1);\n\t\t\tupdated = true;\n\t\t\tindex = checkTokenAndGetIndex(this, token);\n\t\t}\n\t}\n\twhile (++i < l);\n\n\tif (updated) {\n\t\tthis._updateClassName();\n\t}\n};\nclassListProto.toggle = function (token, force) {\n\tvar\n\t\t  result = this.contains(token)\n\t\t, method = result ?\n\t\t\tforce !== true && \"remove\"\n\t\t:\n\t\t\tforce !== false && \"add\"\n\t;\n\n\tif (method) {\n\t\tthis[method](token);\n\t}\n\n\tif (force === true || force === false) {\n\t\treturn force;\n\t} else {\n\t\treturn !result;\n\t}\n};\nclassListProto.replace = function (token, replacement_token) {\n\tvar index = checkTokenAndGetIndex(token + \"\");\n\tif (~index) {\n\t\tthis.splice(index, 1, replacement_token);\n\t\tthis._updateClassName();\n\t}\n}\nclassListProto.toString = function () {\n\treturn this.join(\" \");\n};\n\nif (objCtr.defineProperty) {\n\tvar classListPropDesc = {\n\t\t  get: classListGetter\n\t\t, enumerable: true\n\t\t, configurable: true\n\t};\n\ttry {\n\t\tobjCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n\t} catch (ex) { // IE 8 doesn't support enumerable:true\n\t\t// adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36\n\t\t// modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected\n\t\tif (ex.number === undefined || ex.number === -0x7FF5EC54) {\n\t\t\tclassListPropDesc.enumerable = false;\n\t\t\tobjCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n\t\t}\n\t}\n} else if (objCtr[protoProp].__defineGetter__) {\n\telemCtrProto.__defineGetter__(classListProp, classListGetter);\n}\n\n}(self));\n\n}\n\n// There is full or partial native classList support, so just check if we need\n// to normalize the add/remove and toggle APIs.\n\n(function () {\n\t\"use strict\";\n\n\tvar testElement = document.createElement(\"_\");\n\n\ttestElement.classList.add(\"c1\", \"c2\");\n\n\t// Polyfill for IE 10/11 and Firefox <26, where classList.add and\n\t// classList.remove exist but support only one argument at a time.\n\tif (!testElement.classList.contains(\"c2\")) {\n\t\tvar createMethod = function(method) {\n\t\t\tvar original = DOMTokenList.prototype[method];\n\n\t\t\tDOMTokenList.prototype[method] = function(token) {\n\t\t\t\tvar i, len = arguments.length;\n\n\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\ttoken = arguments[i];\n\t\t\t\t\toriginal.call(this, token);\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t\tcreateMethod('add');\n\t\tcreateMethod('remove');\n\t}\n\n\ttestElement.classList.toggle(\"c3\", false);\n\n\t// Polyfill for IE 10 and Firefox <24, where classList.toggle does not\n\t// support the second argument.\n\tif (testElement.classList.contains(\"c3\")) {\n\t\tvar _toggle = DOMTokenList.prototype.toggle;\n\n\t\tDOMTokenList.prototype.toggle = function(token, force) {\n\t\t\tif (1 in arguments && !this.contains(token) === !force) {\n\t\t\t\treturn force;\n\t\t\t} else {\n\t\t\t\treturn _toggle.call(this, token);\n\t\t\t}\n\t\t};\n\n\t}\n\n\t// replace() polyfill\n\tif (!(\"replace\" in document.createElement(\"_\").classList)) {\n\t\tDOMTokenList.prototype.replace = function (token, replacement_token) {\n\t\t\tvar\n\t\t\t\t  tokens = this.toString().split(\" \")\n\t\t\t\t, index = tokens.indexOf(token + \"\")\n\t\t\t;\n\t\t\tif (~index) {\n\t\t\t\ttokens = tokens.slice(index);\n\t\t\t\tthis.remove.apply(this, tokens);\n\t\t\t\tthis.add(replacement_token);\n\t\t\t\tthis.add.apply(this, tokens.slice(1));\n\t\t\t}\n\t\t}\n\t}\n\n\ttestElement = null;\n}());\n\n}","/*!\n * modernizr v3.5.0\n * Build https://modernizr.com/download?-cssanimations-csstransforms-csstransforms3d-csstransitions-cssvhunit-cssvwunit-flexbox-fontface-objectfit-overflowscrolling-svg-domprefixes-mq-prefixed-setclasses-testallprops-testprop-dontmin\n *\n * Copyright (c)\n *  Faruk Ates\n *  Paul Irish\n *  Alex Sexton\n *  Ryan Seddon\n *  Patrick Kettner\n *  Stu Cox\n *  Richard Herrera\n\n * MIT License\n */\n\n/*\n * Modernizr tests which native CSS3 and HTML5 features are available in the\n * current UA and makes the results available to you in two ways: as properties on\n * a global `Modernizr` object, and as classes on the `<html>` element. This\n * information allows you to progressively enhance your pages with a granular level\n * of control over the experience.\n*/\n\n;(function(window, document, undefined){\n    var classes = [];\n\n\n    var tests = [];\n\n\n    /**\n     *\n     * ModernizrProto is the constructor for Modernizr\n     *\n     * @class\n     * @access public\n     */\n\n    var ModernizrProto = {\n        // The current version, dummy\n        _version: '3.5.0',\n\n        // Any settings that don't work as separate modules\n        // can go in here as configuration.\n        _config: {\n            'classPrefix': '',\n            'enableClasses': true,\n            'enableJSClass': true,\n            'usePrefixes': true\n        },\n\n        // Queue of tests\n        _q: [],\n\n        // Stub these for people who are listening\n        on: function(test, cb) {\n            // I don't really think people should do this, but we can\n            // safe guard it a bit.\n            // -- NOTE:: this gets WAY overridden in src/addTest for actual async tests.\n            // This is in case people listen to synchronous tests. I would leave it out,\n            // but the code to *disallow* sync tests in the real version of this\n            // function is actually larger than this.\n            var self = this;\n            setTimeout(function() {\n                cb(self[test]);\n            }, 0);\n        },\n\n        addTest: function(name, fn, options) {\n            tests.push({name: name, fn: fn, options: options});\n        },\n\n        addAsyncTest: function(fn) {\n            tests.push({name: null, fn: fn});\n        }\n    };\n\n\n\n    // Fake some of Object.create so we can force non test results to be non \"own\" properties.\n    var Modernizr = function() {};\n    Modernizr.prototype = ModernizrProto;\n\n    // Leak modernizr globally when you `require` it rather than force it here.\n    // Overwrite name so constructor name is nicer :D\n    Modernizr = new Modernizr();\n\n\n    /*!\n    {\n      \"name\": \"SVG\",\n      \"property\": \"svg\",\n      \"caniuse\": \"svg\",\n      \"tags\": [\"svg\"],\n      \"authors\": [\"Erik Dahlstrom\"],\n      \"polyfills\": [\n        \"svgweb\",\n        \"raphael\",\n        \"amplesdk\",\n        \"canvg\",\n        \"svg-boilerplate\",\n        \"sie\",\n        \"dojogfx\",\n        \"fabricjs\"\n      ]\n    }\n    !*/\n    /* DOC\n    Detects support for SVG in `<embed>` or `<object>` elements.\n    */\n\n    Modernizr.addTest('svg', !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect);\n\n\n    /**\n     * is returns a boolean if the typeof an obj is exactly type.\n     *\n     * @access private\n     * @function is\n     * @param {*} obj - A thing we want to check the type of\n     * @param {string} type - A string to compare the typeof against\n     * @returns {boolean}\n     */\n\n    function is(obj, type) {\n        return typeof obj === type;\n    }\n    ;\n\n    /**\n     * Run through all tests and detect their support in the current UA.\n     *\n     * @access private\n     */\n\n    function testRunner() {\n        var featureNames;\n        var feature;\n        var aliasIdx;\n        var result;\n        var nameIdx;\n        var featureName;\n        var featureNameSplit;\n\n        for (var featureIdx in tests) {\n            if (tests.hasOwnProperty(featureIdx)) {\n                featureNames = [];\n                feature = tests[featureIdx];\n                // run the test, throw the return value into the Modernizr,\n                // then based on that boolean, define an appropriate className\n                // and push it into an array of classes we'll join later.\n                //\n                // If there is no name, it's an 'async' test that is run,\n                // but not directly added to the object. That should\n                // be done with a post-run addTest call.\n                if (feature.name) {\n                    featureNames.push(feature.name.toLowerCase());\n\n                    if (feature.options && feature.options.aliases && feature.options.aliases.length) {\n                        // Add all the aliases into the names list\n                        for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) {\n                            featureNames.push(feature.options.aliases[aliasIdx].toLowerCase());\n                        }\n                    }\n                }\n\n                // Run the test, or use the raw value if it's not a function\n                result = is(feature.fn, 'function') ? feature.fn() : feature.fn;\n\n\n                // Set each of the names on the Modernizr object\n                for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) {\n                    featureName = featureNames[nameIdx];\n                    // Support dot properties as sub tests. We don't do checking to make sure\n                    // that the implied parent tests have been added. You must call them in\n                    // order (either in the test, or make the parent test a dependency).\n                    //\n                    // Cap it to TWO to make the logic simple and because who needs that kind of subtesting\n                    // hashtag famous last words\n                    featureNameSplit = featureName.split('.');\n\n                    if (featureNameSplit.length === 1) {\n                        Modernizr[featureNameSplit[0]] = result;\n                    } else {\n                        // cast to a Boolean, if not one already\n                        if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {\n                            Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);\n                        }\n\n                        Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result;\n                    }\n\n                    classes.push((result ? '' : 'no-') + featureNameSplit.join('-'));\n                }\n            }\n        }\n    }\n    ;\n\n    /**\n     * docElement is a convenience wrapper to grab the root element of the document\n     *\n     * @access private\n     * @returns {HTMLElement|SVGElement} The root element of the document\n     */\n\n    var docElement = document.documentElement;\n\n\n    /**\n     * A convenience helper to check if the document we are running in is an SVG document\n     *\n     * @access private\n     * @returns {boolean}\n     */\n\n    var isSVG = docElement.nodeName.toLowerCase() === 'svg';\n\n\n    /**\n     * setClasses takes an array of class names and adds them to the root element\n     *\n     * @access private\n     * @function setClasses\n     * @param {string[]} classes - Array of class names\n     */\n\n    // Pass in an and array of class names, e.g.:\n    //  ['no-webp', 'borderradius', ...]\n    function setClasses(classes) {\n        var className = docElement.className;\n        var classPrefix = Modernizr._config.classPrefix || '';\n\n        if (isSVG) {\n            className = className.baseVal;\n        }\n\n        // Change `no-js` to `js` (independently of the `enableClasses` option)\n        // Handle classPrefix on this too\n        if (Modernizr._config.enableJSClass) {\n            var reJS = new RegExp('(^|\\\\s)' + classPrefix + 'no-js(\\\\s|$)');\n            className = className.replace(reJS, '$1' + classPrefix + 'js$2');\n        }\n\n        if (Modernizr._config.enableClasses) {\n            // Add the new classes\n            className += ' ' + classPrefix + classes.join(' ' + classPrefix);\n            if (isSVG) {\n                docElement.className.baseVal = className;\n            } else {\n                docElement.className = className;\n            }\n        }\n\n    }\n\n    ;\n\n    /**\n     * If the browsers follow the spec, then they would expose vendor-specific styles as:\n     *   elem.style.WebkitBorderRadius\n     * instead of something like the following (which is technically incorrect):\n     *   elem.style.webkitBorderRadius\n\n     * WebKit ghosts their properties in lowercase but Opera & Moz do not.\n     * Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+\n     *   erik.eae.net/archives/2008/03/10/21.48.10/\n\n     * More here: github.com/Modernizr/Modernizr/issues/issue/21\n     *\n     * @access private\n     * @returns {string} The string representing the vendor-specific style properties\n     */\n\n    var omPrefixes = 'Moz O ms Webkit';\n\n\n    /**\n     * List of JavaScript DOM values used for tests\n     *\n     * @memberof Modernizr\n     * @name Modernizr._domPrefixes\n     * @optionName Modernizr._domPrefixes\n     * @optionProp domPrefixes\n     * @access public\n     * @example\n     *\n     * Modernizr._domPrefixes is exactly the same as [_prefixes](#modernizr-_prefixes), but rather\n     * than kebab-case properties, all properties are their Capitalized variant\n     *\n     * ```js\n     * Modernizr._domPrefixes === [ \"Moz\", \"O\", \"ms\", \"Webkit\" ];\n     * ```\n     */\n\n    var domPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.toLowerCase().split(' ') : []);\n    ModernizrProto._domPrefixes = domPrefixes;\n\n\n    /**\n     * cssToDOM takes a kebab-case string and converts it to camelCase\n     * e.g. box-sizing -> boxSizing\n     *\n     * @access private\n     * @function cssToDOM\n     * @param {string} name - String name of kebab-case prop we want to convert\n     * @returns {string} The camelCase version of the supplied name\n     */\n\n    function cssToDOM(name) {\n        return name.replace(/([a-z])-([a-z])/g, function(str, m1, m2) {\n            return m1 + m2.toUpperCase();\n        }).replace(/^-/, '');\n    }\n    ;\n    /*!\n    {\n      \"name\": \"CSS Supports\",\n      \"property\": \"supports\",\n      \"caniuse\": \"css-featurequeries\",\n      \"tags\": [\"css\"],\n      \"builderAliases\": [\"css_supports\"],\n      \"notes\": [{\n        \"name\": \"W3 Spec\",\n        \"href\": \"http://dev.w3.org/csswg/css3-conditional/#at-supports\"\n      },{\n        \"name\": \"Related Github Issue\",\n        \"href\": \"https://github.com/Modernizr/Modernizr/issues/648\"\n      },{\n        \"name\": \"W3 Info\",\n        \"href\": \"http://dev.w3.org/csswg/css3-conditional/#the-csssupportsrule-interface\"\n      }]\n    }\n    !*/\n\n    var newSyntax = 'CSS' in window && 'supports' in window.CSS;\n    var oldSyntax = 'supportsCSS' in window;\n    Modernizr.addTest('supports', newSyntax || oldSyntax);\n\n\n\n    /**\n     * wrapper around getComputedStyle, to fix issues with Firefox returning null when\n     * called inside of a hidden iframe\n     *\n     * @access private\n     * @function computedStyle\n     * @param {HTMLElement|SVGElement} - The element we want to find the computed styles of\n     * @param {string|null} [pseudoSelector]- An optional pseudo element selector (e.g. :before), of null if none\n     * @returns {CSSStyleDeclaration}\n     */\n\n    function computedStyle(elem, pseudo, prop) {\n        var result;\n\n        if ('getComputedStyle' in window) {\n            result = getComputedStyle.call(window, elem, pseudo);\n            var console = window.console;\n\n            if (result !== null) {\n                if (prop) {\n                    result = result.getPropertyValue(prop);\n                }\n            } else {\n                if (console) {\n                    var method = console.error ? 'error' : 'log';\n                    console[method].call(console, 'getComputedStyle returning null, its possible modernizr test results are inaccurate');\n                }\n            }\n        } else {\n            result = !pseudo && elem.currentStyle && elem.currentStyle[prop];\n        }\n\n        return result;\n    }\n\n    ;\n\n    /**\n     * createElement is a convenience wrapper around document.createElement. Since we\n     * use createElement all over the place, this allows for (slightly) smaller code\n     * as well as abstracting away issues with creating elements in contexts other than\n     * HTML documents (e.g. SVG documents).\n     *\n     * @access private\n     * @function createElement\n     * @returns {HTMLElement|SVGElement} An HTML or SVG element\n     */\n\n    function createElement() {\n        if (typeof document.createElement !== 'function') {\n            // This is the case in IE7, where the type of createElement is \"object\".\n            // For this reason, we cannot call apply() as Object is not a Function.\n            return document.createElement(arguments[0]);\n        } else if (isSVG) {\n            return document.createElementNS.call(document, 'http://www.w3.org/2000/svg', arguments[0]);\n        } else {\n            return document.createElement.apply(document, arguments);\n        }\n    }\n\n    ;\n\n    /**\n     * getBody returns the body of a document, or an element that can stand in for\n     * the body if a real body does not exist\n     *\n     * @access private\n     * @function getBody\n     * @returns {HTMLElement|SVGElement} Returns the real body of a document, or an\n     * artificially created element that stands in for the body\n     */\n\n    function getBody() {\n        // After page load injecting a fake body doesn't work so check if body exists\n        var body = document.body;\n\n        if (!body) {\n            // Can't use the real body create a fake one.\n            body = createElement(isSVG ? 'svg' : 'body');\n            body.fake = true;\n        }\n\n        return body;\n    }\n\n    ;\n\n    /**\n     * injectElementWithStyles injects an element with style element and some CSS rules\n     *\n     * @access private\n     * @function injectElementWithStyles\n     * @param {string} rule - String representing a css rule\n     * @param {function} callback - A function that is used to test the injected element\n     * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\n     * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\n     * @returns {boolean}\n     */\n\n    function injectElementWithStyles(rule, callback, nodes, testnames) {\n        var mod = 'modernizr';\n        var style;\n        var ret;\n        var node;\n        var docOverflow;\n        var div = createElement('div');\n        var body = getBody();\n\n        if (parseInt(nodes, 10)) {\n            // In order not to give false positives we create a node for each test\n            // This also allows the method to scale for unspecified uses\n            while (nodes--) {\n                node = createElement('div');\n                node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n                div.appendChild(node);\n            }\n        }\n\n        style = createElement('style');\n        style.type = 'text/css';\n        style.id = 's' + mod;\n\n        // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n        // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n        (!body.fake ? div : body).appendChild(style);\n        body.appendChild(div);\n\n        if (style.styleSheet) {\n            style.styleSheet.cssText = rule;\n        } else {\n            style.appendChild(document.createTextNode(rule));\n        }\n        div.id = mod;\n\n        if (body.fake) {\n            //avoid crashing IE8, if background image is used\n            body.style.background = '';\n            //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n            body.style.overflow = 'hidden';\n            docOverflow = docElement.style.overflow;\n            docElement.style.overflow = 'hidden';\n            docElement.appendChild(body);\n        }\n\n        ret = callback(div, rule);\n        // If this is done after page load we don't want to remove the body so check if body exists\n        if (body.fake) {\n            body.parentNode.removeChild(body);\n            docElement.style.overflow = docOverflow;\n            // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n            // eslint-disable-next-line\n            docElement.offsetHeight;\n        } else {\n            div.parentNode.removeChild(div);\n        }\n\n        return !!ret;\n\n    }\n\n    ;\n\n    /**\n     * Modernizr.mq tests a given media query, live against the current state of the window\n     * adapted from matchMedia polyfill by Scott Jehl and Paul Irish\n     * gist.github.com/786768\n     *\n     * @memberof Modernizr\n     * @name Modernizr.mq\n     * @optionName Modernizr.mq()\n     * @optionProp mq\n     * @access public\n     * @function mq\n     * @param {string} mq - String of the media query we want to test\n     * @returns {boolean}\n     * @example\n     * Modernizr.mq allows for you to programmatically check if the current browser\n     * window state matches a media query.\n     *\n     * ```js\n     *  var query = Modernizr.mq('(min-width: 900px)');\n     *\n     *  if (query) {\n   *    // the browser window is larger than 900px\n   *  }\n     * ```\n     *\n     * Only valid media queries are supported, therefore you must always include values\n     * with your media query\n     *\n     * ```js\n     * // good\n     *  Modernizr.mq('(min-width: 900px)');\n     *\n     * // bad\n     *  Modernizr.mq('min-width');\n     * ```\n     *\n     * If you would just like to test that media queries are supported in general, use\n     *\n     * ```js\n     *  Modernizr.mq('only all'); // true if MQ are supported, false if not\n     * ```\n     *\n     *\n     * Note that if the browser does not support media queries (e.g. old IE) mq will\n     * always return false.\n     */\n\n    var mq = (function() {\n        var matchMedia = window.matchMedia || window.msMatchMedia;\n        if (matchMedia) {\n            return function(mq) {\n                var mql = matchMedia(mq);\n                return mql && mql.matches || false;\n            };\n        }\n\n        return function(mq) {\n            var bool = false;\n\n            injectElementWithStyles('@media ' + mq + ' { #modernizr { position: absolute; } }', function(node) {\n                bool = (window.getComputedStyle ?\n                    window.getComputedStyle(node, null) :\n                    node.currentStyle).position == 'absolute';\n            });\n\n            return bool;\n        };\n    })();\n\n\n    ModernizrProto.mq = mq;\n\n\n\n    /**\n     * testStyles injects an element with style element and some CSS rules\n     *\n     * @memberof Modernizr\n     * @name Modernizr.testStyles\n     * @optionName Modernizr.testStyles()\n     * @optionProp testStyles\n     * @access public\n     * @function testStyles\n     * @param {string} rule - String representing a css rule\n     * @param {function} callback - A function that is used to test the injected element\n     * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\n     * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\n     * @returns {boolean}\n     * @example\n     *\n     * `Modernizr.testStyles` takes a CSS rule and injects it onto the current page\n     * along with (possibly multiple) DOM elements. This lets you check for features\n     * that can not be detected by simply checking the [IDL](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Interface_development_guide/IDL_interface_rules).\n     *\n     * ```js\n     * Modernizr.testStyles('#modernizr { width: 9px; color: papayawhip; }', function(elem, rule) {\n   *   // elem is the first DOM node in the page (by default #modernizr)\n   *   // rule is the first argument you supplied - the CSS rule in string form\n   *\n   *   addTest('widthworks', elem.style.width === '9px')\n   * });\n     * ```\n     *\n     * If your test requires multiple nodes, you can include a third argument\n     * indicating how many additional div elements to include on the page. The\n     * additional nodes are injected as children of the `elem` that is returned as\n     * the first argument to the callback.\n     *\n     * ```js\n     * Modernizr.testStyles('#modernizr {width: 1px}; #modernizr2 {width: 2px}', function(elem) {\n   *   document.getElementById('modernizr').style.width === '1px'; // true\n   *   document.getElementById('modernizr2').style.width === '2px'; // true\n   *   elem.firstChild === document.getElementById('modernizr2'); // true\n   * }, 1);\n     * ```\n     *\n     * By default, all of the additional elements have an ID of `modernizr[n]`, where\n     * `n` is its index (e.g. the first additional, second overall is `#modernizr2`,\n     * the second additional is `#modernizr3`, etc.).\n     * If you want to have more meaningful IDs for your function, you can provide\n     * them as the fourth argument, as an array of strings\n     *\n     * ```js\n     * Modernizr.testStyles('#foo {width: 10px}; #bar {height: 20px}', function(elem) {\n   *   elem.firstChild === document.getElementById('foo'); // true\n   *   elem.lastChild === document.getElementById('bar'); // true\n   * }, 2, ['foo', 'bar']);\n     * ```\n     *\n     */\n\n    var testStyles = ModernizrProto.testStyles = injectElementWithStyles;\n\n    /*!\n    {\n      \"name\": \"@font-face\",\n      \"property\": \"fontface\",\n      \"authors\": [\"Diego Perini\", \"Mat Marquis\"],\n      \"tags\": [\"css\"],\n      \"knownBugs\": [\n        \"False Positive: WebOS https://github.com/Modernizr/Modernizr/issues/342\",\n        \"False Postive: WP7 https://github.com/Modernizr/Modernizr/issues/538\"\n      ],\n      \"notes\": [{\n        \"name\": \"@font-face detection routine by Diego Perini\",\n        \"href\": \"http://javascript.nwbox.com/CSSSupport/\"\n      },{\n        \"name\": \"Filament Group @font-face compatibility research\",\n        \"href\": \"https://docs.google.com/presentation/d/1n4NyG4uPRjAA8zn_pSQ_Ket0RhcWC6QlZ6LMjKeECo0/edit#slide=id.p\"\n      },{\n        \"name\": \"Filament Grunticon/@font-face device testing results\",\n        \"href\": \"https://docs.google.com/spreadsheet/ccc?key=0Ag5_yGvxpINRdHFYeUJPNnZMWUZKR2ItMEpRTXZPdUE#gid=0\"\n      },{\n        \"name\": \"CSS fonts on Android\",\n        \"href\": \"https://stackoverflow.com/questions/3200069/css-fonts-on-android\"\n      },{\n        \"name\": \"@font-face and Android\",\n        \"href\": \"http://archivist.incutio.com/viewlist/css-discuss/115960\"\n      }]\n    }\n    !*/\n\n    var blacklist = (function() {\n        var ua = navigator.userAgent;\n        var webos = ua.match(/w(eb)?osbrowser/gi);\n        var wppre8 = ua.match(/windows phone/gi) && ua.match(/iemobile\\/([0-9])+/gi) && parseFloat(RegExp.$1) >= 9;\n        return webos || wppre8;\n    }());\n    if (blacklist) {\n        Modernizr.addTest('fontface', false);\n    } else {\n        testStyles('@font-face {font-family:\"font\";src:url(\"https://\")}', function(node, rule) {\n            var style = document.getElementById('smodernizr');\n            var sheet = style.sheet || style.styleSheet;\n            var cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';\n            var bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;\n            Modernizr.addTest('fontface', bool);\n        });\n    }\n    ;\n    /*!\n    {\n      \"name\": \"CSS vh unit\",\n      \"property\": \"cssvhunit\",\n      \"caniuse\": \"viewport-units\",\n      \"tags\": [\"css\"],\n      \"builderAliases\": [\"css_vhunit\"],\n      \"notes\": [{\n        \"name\": \"Related Modernizr Issue\",\n        \"href\": \"https://github.com/Modernizr/Modernizr/issues/572\"\n      },{\n        \"name\": \"Similar JSFiddle\",\n        \"href\": \"https://jsfiddle.net/FWeinb/etnYC/\"\n      }]\n    }\n    !*/\n\n    testStyles('#modernizr { height: 50vh; }', function(elem) {\n        var height = parseInt(window.innerHeight / 2, 10);\n        var compStyle = parseInt(computedStyle(elem, null, 'height'), 10);\n        Modernizr.addTest('cssvhunit', compStyle == height);\n    });\n\n    /*!\n    {\n      \"name\": \"CSS vw unit\",\n      \"property\": \"cssvwunit\",\n      \"caniuse\": \"viewport-units\",\n      \"tags\": [\"css\"],\n      \"builderAliases\": [\"css_vwunit\"],\n      \"notes\": [{\n        \"name\": \"Related Modernizr Issue\",\n        \"href\": \"https://github.com/Modernizr/Modernizr/issues/572\"\n      },{\n        \"name\": \"JSFiddle Example\",\n        \"href\": \"https://jsfiddle.net/FWeinb/etnYC/\"\n      }]\n    }\n    !*/\n\n    testStyles('#modernizr { width: 50vw; }', function(elem) {\n        var width = parseInt(window.innerWidth / 2, 10);\n        var compStyle = parseInt(computedStyle(elem, null, 'width'), 10);\n\n        Modernizr.addTest('cssvwunit', compStyle == width);\n    });\n\n\n    var cssomPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.split(' ') : []);\n    ModernizrProto._cssomPrefixes = cssomPrefixes;\n\n\n    /**\n     * atRule returns a given CSS property at-rule (eg @keyframes), possibly in\n     * some prefixed form, or false, in the case of an unsupported rule\n     *\n     * @memberof Modernizr\n     * @name Modernizr.atRule\n     * @optionName Modernizr.atRule()\n     * @optionProp atRule\n     * @access public\n     * @function atRule\n     * @param {string} prop - String name of the @-rule to test for\n     * @returns {string|boolean} The string representing the (possibly prefixed)\n     * valid version of the @-rule, or `false` when it is unsupported.\n     * @example\n     * ```js\n     *  var keyframes = Modernizr.atRule('@keyframes');\n     *\n     *  if (keyframes) {\n   *    // keyframes are supported\n   *    // could be `@-webkit-keyframes` or `@keyframes`\n   *  } else {\n   *    // keyframes === `false`\n   *  }\n     * ```\n     *\n     */\n\n    var atRule = function(prop) {\n        var length = prefixes.length;\n        var cssrule = window.CSSRule;\n        var rule;\n\n        if (typeof cssrule === 'undefined') {\n            return undefined;\n        }\n\n        if (!prop) {\n            return false;\n        }\n\n        // remove literal @ from beginning of provided property\n        prop = prop.replace(/^@/, '');\n\n        // CSSRules use underscores instead of dashes\n        rule = prop.replace(/-/g, '_').toUpperCase() + '_RULE';\n\n        if (rule in cssrule) {\n            return '@' + prop;\n        }\n\n        for (var i = 0; i < length; i++) {\n            // prefixes gives us something like -o-, and we want O_\n            var prefix = prefixes[i];\n            var thisRule = prefix.toUpperCase() + '_' + rule;\n\n            if (thisRule in cssrule) {\n                return '@-' + prefix.toLowerCase() + '-' + prop;\n            }\n        }\n\n        return false;\n    };\n\n    ModernizrProto.atRule = atRule;\n\n\n\n\n    /**\n     * contains checks to see if a string contains another string\n     *\n     * @access private\n     * @function contains\n     * @param {string} str - The string we want to check for substrings\n     * @param {string} substr - The substring we want to search the first string for\n     * @returns {boolean}\n     */\n\n    function contains(str, substr) {\n        return !!~('' + str).indexOf(substr);\n    }\n\n    ;\n\n    /**\n     * fnBind is a super small [bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) polyfill.\n     *\n     * @access private\n     * @function fnBind\n     * @param {function} fn - a function you want to change `this` reference to\n     * @param {object} that - the `this` you want to call the function with\n     * @returns {function} The wrapped version of the supplied function\n     */\n\n    function fnBind(fn, that) {\n        return function() {\n            return fn.apply(that, arguments);\n        };\n    }\n\n    ;\n\n    /**\n     * testDOMProps is a generic DOM property test; if a browser supports\n     *   a certain property, it won't return undefined for it.\n     *\n     * @access private\n     * @function testDOMProps\n     * @param {array.<string>} props - An array of properties to test for\n     * @param {object} obj - An object or Element you want to use to test the parameters again\n     * @param {boolean|object} elem - An Element to bind the property lookup again. Use `false` to prevent the check\n     * @returns {false|*} returns false if the prop is unsupported, otherwise the value that is supported\n     */\n    function testDOMProps(props, obj, elem) {\n        var item;\n\n        for (var i in props) {\n            if (props[i] in obj) {\n\n                // return the property name as a string\n                if (elem === false) {\n                    return props[i];\n                }\n\n                item = obj[props[i]];\n\n                // let's bind a function\n                if (is(item, 'function')) {\n                    // bind to obj unless overriden\n                    return fnBind(item, elem || obj);\n                }\n\n                // return the unbound function or obj or value\n                return item;\n            }\n        }\n        return false;\n    }\n\n    ;\n\n    /**\n     * Create our \"modernizr\" element that we do most feature tests on.\n     *\n     * @access private\n     */\n\n    var modElem = {\n        elem: createElement('modernizr')\n    };\n\n    // Clean up this element\n    Modernizr._q.push(function() {\n        delete modElem.elem;\n    });\n\n\n\n    var mStyle = {\n        style: modElem.elem.style\n    };\n\n    // kill ref for gc, must happen before mod.elem is removed, so we unshift on to\n    // the front of the queue.\n    Modernizr._q.unshift(function() {\n        delete mStyle.style;\n    });\n\n\n\n    /**\n     * domToCSS takes a camelCase string and converts it to kebab-case\n     * e.g. boxSizing -> box-sizing\n     *\n     * @access private\n     * @function domToCSS\n     * @param {string} name - String name of camelCase prop we want to convert\n     * @returns {string} The kebab-case version of the supplied name\n     */\n\n    function domToCSS(name) {\n        return name.replace(/([A-Z])/g, function(str, m1) {\n            return '-' + m1.toLowerCase();\n        }).replace(/^ms-/, '-ms-');\n    }\n    ;\n\n    /**\n     * nativeTestProps allows for us to use native feature detection functionality if available.\n     * some prefixed form, or false, in the case of an unsupported rule\n     *\n     * @access private\n     * @function nativeTestProps\n     * @param {array} props - An array of property names\n     * @param {string} value - A string representing the value we want to check via @supports\n     * @returns {boolean|undefined} A boolean when @supports exists, undefined otherwise\n     */\n\n    // Accepts a list of property names and a single value\n    // Returns `undefined` if native detection not available\n    function nativeTestProps(props, value) {\n        var i = props.length;\n        // Start with the JS API: http://www.w3.org/TR/css3-conditional/#the-css-interface\n        if ('CSS' in window && 'supports' in window.CSS) {\n            // Try every prefixed variant of the property\n            while (i--) {\n                if (window.CSS.supports(domToCSS(props[i]), value)) {\n                    return true;\n                }\n            }\n            return false;\n        }\n        // Otherwise fall back to at-rule (for Opera 12.x)\n        else if ('CSSSupportsRule' in window) {\n            // Build a condition string for every prefixed variant\n            var conditionText = [];\n            while (i--) {\n                conditionText.push('(' + domToCSS(props[i]) + ':' + value + ')');\n            }\n            conditionText = conditionText.join(' or ');\n            return injectElementWithStyles('@supports (' + conditionText + ') { #modernizr { position: absolute; } }', function(node) {\n                return computedStyle(node, null, 'position') == 'absolute';\n            });\n        }\n        return undefined;\n    }\n    ;\n\n    // testProps is a generic CSS / DOM property test.\n\n    // In testing support for a given CSS property, it's legit to test:\n    //    `elem.style[styleName] !== undefined`\n    // If the property is supported it will return an empty string,\n    // if unsupported it will return undefined.\n\n    // We'll take advantage of this quick test and skip setting a style\n    // on our modernizr element, but instead just testing undefined vs\n    // empty string.\n\n    // Property names can be provided in either camelCase or kebab-case.\n\n    function testProps(props, prefixed, value, skipValueTest) {\n        skipValueTest = is(skipValueTest, 'undefined') ? false : skipValueTest;\n\n        // Try native detect first\n        if (!is(value, 'undefined')) {\n            var result = nativeTestProps(props, value);\n            if (!is(result, 'undefined')) {\n                return result;\n            }\n        }\n\n        // Otherwise do it properly\n        var afterInit, i, propsLength, prop, before;\n\n        // If we don't have a style element, that means we're running async or after\n        // the core tests, so we'll need to create our own elements to use\n\n        // inside of an SVG element, in certain browsers, the `style` element is only\n        // defined for valid tags. Therefore, if `modernizr` does not have one, we\n        // fall back to a less used element and hope for the best.\n        // for strict XHTML browsers the hardly used samp element is used\n        var elems = ['modernizr', 'tspan', 'samp'];\n        while (!mStyle.style && elems.length) {\n            afterInit = true;\n            mStyle.modElem = createElement(elems.shift());\n            mStyle.style = mStyle.modElem.style;\n        }\n\n        // Delete the objects if we created them.\n        function cleanElems() {\n            if (afterInit) {\n                delete mStyle.style;\n                delete mStyle.modElem;\n            }\n        }\n\n        propsLength = props.length;\n        for (i = 0; i < propsLength; i++) {\n            prop = props[i];\n            before = mStyle.style[prop];\n\n            if (contains(prop, '-')) {\n                prop = cssToDOM(prop);\n            }\n\n            if (mStyle.style[prop] !== undefined) {\n\n                // If value to test has been passed in, do a set-and-check test.\n                // 0 (integer) is a valid property value, so check that `value` isn't\n                // undefined, rather than just checking it's truthy.\n                if (!skipValueTest && !is(value, 'undefined')) {\n\n                    // Needs a try catch block because of old IE. This is slow, but will\n                    // be avoided in most cases because `skipValueTest` will be used.\n                    try {\n                        mStyle.style[prop] = value;\n                    } catch (e) {}\n\n                    // If the property value has changed, we assume the value used is\n                    // supported. If `value` is empty string, it'll fail here (because\n                    // it hasn't changed), which matches how browsers have implemented\n                    // CSS.supports()\n                    if (mStyle.style[prop] != before) {\n                        cleanElems();\n                        return prefixed == 'pfx' ? prop : true;\n                    }\n                }\n                // Otherwise just return true, or the property name if this is a\n                // `prefixed()` call\n                else {\n                    cleanElems();\n                    return prefixed == 'pfx' ? prop : true;\n                }\n            }\n        }\n        cleanElems();\n        return false;\n    }\n\n    ;\n\n    /**\n     * testProp() investigates whether a given style property is recognized\n     * Property names can be provided in either camelCase or kebab-case.\n     *\n     * @memberof Modernizr\n     * @name Modernizr.testProp\n     * @access public\n     * @optionName Modernizr.testProp()\n     * @optionProp testProp\n     * @function testProp\n     * @param {string} prop - Name of the CSS property to check\n     * @param {string} [value] - Name of the CSS value to check\n     * @param {boolean} [useValue] - Whether or not to check the value if @supports isn't supported\n     * @returns {boolean}\n     * @example\n     *\n     * Just like [testAllProps](#modernizr-testallprops), only it does not check any vendor prefixed\n     * version of the string.\n     *\n     * Note that the property name must be provided in camelCase (e.g. boxSizing not box-sizing)\n     *\n     * ```js\n     * Modernizr.testProp('pointerEvents')  // true\n     * ```\n     *\n     * You can also provide a value as an optional second argument to check if a\n     * specific value is supported\n     *\n     * ```js\n     * Modernizr.testProp('pointerEvents', 'none') // true\n     * Modernizr.testProp('pointerEvents', 'penguin') // false\n     * ```\n     */\n\n    var testProp = ModernizrProto.testProp = function(prop, value, useValue) {\n        return testProps([prop], undefined, value, useValue);\n    };\n\n\n    /**\n     * testPropsAll tests a list of DOM properties we want to check against.\n     * We specify literally ALL possible (known and/or likely) properties on\n     * the element including the non-vendor prefixed one, for forward-\n     * compatibility.\n     *\n     * @access private\n     * @function testPropsAll\n     * @param {string} prop - A string of the property to test for\n     * @param {string|object} [prefixed] - An object to check the prefixed properties on. Use a string to skip\n     * @param {HTMLElement|SVGElement} [elem] - An element used to test the property and value against\n     * @param {string} [value] - A string of a css value\n     * @param {boolean} [skipValueTest] - An boolean representing if you want to test if value sticks when set\n     * @returns {false|string} returns the string version of the property, or false if it is unsupported\n     */\n    function testPropsAll(prop, prefixed, elem, value, skipValueTest) {\n\n        var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),\n            props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\n        // did they call .prefixed('boxSizing') or are we just testing a prop?\n        if (is(prefixed, 'string') || is(prefixed, 'undefined')) {\n            return testProps(props, prefixed, value, skipValueTest);\n\n            // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n        } else {\n            props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n            return testDOMProps(props, prefixed, elem);\n        }\n    }\n\n    // Modernizr.testAllProps() investigates whether a given style property,\n    // or any of its vendor-prefixed variants, is recognized\n    //\n    // Note that the property names must be provided in the camelCase variant.\n    // Modernizr.testAllProps('boxSizing')\n    ModernizrProto.testAllProps = testPropsAll;\n\n\n\n    /**\n     * prefixed returns the prefixed or nonprefixed property name variant of your input\n     *\n     * @memberof Modernizr\n     * @name Modernizr.prefixed\n     * @optionName Modernizr.prefixed()\n     * @optionProp prefixed\n     * @access public\n     * @function prefixed\n     * @param {string} prop - String name of the property to test for\n     * @param {object} [obj] - An object to test for the prefixed properties on\n     * @param {HTMLElement} [elem] - An element used to test specific properties against\n     * @returns {string|false} The string representing the (possibly prefixed) valid\n     * version of the property, or `false` when it is unsupported.\n     * @example\n     *\n     * Modernizr.prefixed takes a string css value in the DOM style camelCase (as\n     * opposed to the css style kebab-case) form and returns the (possibly prefixed)\n     * version of that property that the browser actually supports.\n     *\n     * For example, in older Firefox...\n     * ```js\n     * prefixed('boxSizing')\n     * ```\n     * returns 'MozBoxSizing'\n     *\n     * In newer Firefox, as well as any other browser that support the unprefixed\n     * version would simply return `boxSizing`. Any browser that does not support\n     * the property at all, it will return `false`.\n     *\n     * By default, prefixed is checked against a DOM element. If you want to check\n     * for a property on another object, just pass it as a second argument\n     *\n     * ```js\n     * var rAF = prefixed('requestAnimationFrame', window);\n     *\n     * raf(function() {\n   *  renderFunction();\n   * })\n     * ```\n     *\n     * Note that this will return _the actual function_ - not the name of the function.\n     * If you need the actual name of the property, pass in `false` as a third argument\n     *\n     * ```js\n     * var rAFProp = prefixed('requestAnimationFrame', window, false);\n     *\n     * rafProp === 'WebkitRequestAnimationFrame' // in older webkit\n     * ```\n     *\n     * One common use case for prefixed is if you're trying to determine which transition\n     * end event to bind to, you might do something like...\n     * ```js\n     * var transEndEventNames = {\n   *     'WebkitTransition' : 'webkitTransitionEnd', * Saf 6, Android Browser\n   *     'MozTransition'    : 'transitionend',       * only for FF < 15\n   *     'transition'       : 'transitionend'        * IE10, Opera, Chrome, FF 15+, Saf 7+\n   * };\n     *\n     * var transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];\n     * ```\n     *\n     * If you want a similar lookup, but in kebab-case, you can use [prefixedCSS](#modernizr-prefixedcss).\n     */\n\n    var prefixed = ModernizrProto.prefixed = function(prop, obj, elem) {\n        if (prop.indexOf('@') === 0) {\n            return atRule(prop);\n        }\n\n        if (prop.indexOf('-') != -1) {\n            // Convert kebab-case to camelCase\n            prop = cssToDOM(prop);\n        }\n        if (!obj) {\n            return testPropsAll(prop, 'pfx');\n        } else {\n            // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'\n            return testPropsAll(prop, obj, elem);\n        }\n    };\n\n\n    /*!\n    {\n      \"name\": \"CSS Object Fit\",\n      \"caniuse\": \"object-fit\",\n      \"property\": \"objectfit\",\n      \"tags\": [\"css\"],\n      \"builderAliases\": [\"css_objectfit\"],\n      \"notes\": [{\n        \"name\": \"Opera Article on Object Fit\",\n        \"href\": \"https://dev.opera.com/articles/css3-object-fit-object-position/\"\n      }]\n    }\n    !*/\n\n    Modernizr.addTest('objectfit', !!prefixed('objectFit'), {aliases: ['object-fit']});\n\n\n    /**\n     * testAllProps determines whether a given CSS property is supported in the browser\n     *\n     * @memberof Modernizr\n     * @name Modernizr.testAllProps\n     * @optionName Modernizr.testAllProps()\n     * @optionProp testAllProps\n     * @access public\n     * @function testAllProps\n     * @param {string} prop - String naming the property to test (either camelCase or kebab-case)\n     * @param {string} [value] - String of the value to test\n     * @param {boolean} [skipValueTest=false] - Whether to skip testing that the value is supported when using non-native detection\n     * @example\n     *\n     * testAllProps determines whether a given CSS property, in some prefixed form,\n     * is supported by the browser.\n     *\n     * ```js\n     * testAllProps('boxSizing')  // true\n     * ```\n     *\n     * It can optionally be given a CSS value in string form to test if a property\n     * value is valid\n     *\n     * ```js\n     * testAllProps('display', 'block') // true\n     * testAllProps('display', 'penguin') // false\n     * ```\n     *\n     * A boolean can be passed as a third parameter to skip the value check when\n     * native detection (@supports) isn't available.\n     *\n     * ```js\n     * testAllProps('shapeOutside', 'content-box', true);\n     * ```\n     */\n\n    function testAllProps(prop, value, skipValueTest) {\n        return testPropsAll(prop, undefined, undefined, value, skipValueTest);\n    }\n    ModernizrProto.testAllProps = testAllProps;\n\n    /*!\n    {\n      \"name\": \"CSS Animations\",\n      \"property\": \"cssanimations\",\n      \"caniuse\": \"css-animation\",\n      \"polyfills\": [\"transformie\", \"csssandpaper\"],\n      \"tags\": [\"css\"],\n      \"warnings\": [\"Android < 4 will pass this test, but can only animate a single property at a time\"],\n      \"notes\": [{\n        \"name\" : \"Article: 'Dispelling the Android CSS animation myths'\",\n        \"href\": \"https://goo.gl/OGw5Gm\"\n      }]\n    }\n    !*/\n    /* DOC\n    Detects whether or not elements can be animated using CSS\n    */\n\n    Modernizr.addTest('cssanimations', testAllProps('animationName', 'a', true));\n\n    /*!\n    {\n      \"name\": \"Flexbox\",\n      \"property\": \"flexbox\",\n      \"caniuse\": \"flexbox\",\n      \"tags\": [\"css\"],\n      \"notes\": [{\n        \"name\": \"The _new_ flexbox\",\n        \"href\": \"http://dev.w3.org/csswg/css3-flexbox\"\n      }],\n      \"warnings\": [\n        \"A `true` result for this detect does not imply that the `flex-wrap` property is supported; see the `flexwrap` detect.\"\n      ]\n    }\n    !*/\n    /* DOC\n    Detects support for the Flexible Box Layout model, a.k.a. Flexbox, which allows easy manipulation of layout order and sizing within a container.\n    */\n\n    Modernizr.addTest('flexbox', testAllProps('flexBasis', '1px', true));\n\n    /*!\n    {\n      \"name\": \"CSS Overflow Scrolling\",\n      \"property\": \"overflowscrolling\",\n      \"tags\": [\"css\"],\n      \"builderAliases\": [\"css_overflow_scrolling\"],\n      \"warnings\": [\"Introduced in iOS5b2. API is subject to change.\"],\n      \"notes\": [{\n        \"name\": \"Article on iOS overflow scrolling\",\n        \"href\": \"https://css-tricks.com/snippets/css/momentum-scrolling-on-ios-overflow-elements/\"\n      }]\n    }\n    !*/\n\n    Modernizr.addTest('overflowscrolling', testAllProps('overflowScrolling', 'touch', true));\n\n    /*!\n    {\n      \"name\": \"CSS Transforms\",\n      \"property\": \"csstransforms\",\n      \"caniuse\": \"transforms2d\",\n      \"tags\": [\"css\"]\n    }\n    !*/\n\n    Modernizr.addTest('csstransforms', function() {\n        // Android < 3.0 is buggy, so we sniff and blacklist\n        // http://git.io/hHzL7w\n        return navigator.userAgent.indexOf('Android 2.') === -1 &&\n            testAllProps('transform', 'scale(1)', true);\n    });\n\n    /*!\n    {\n      \"name\": \"CSS Transforms 3D\",\n      \"property\": \"csstransforms3d\",\n      \"caniuse\": \"transforms3d\",\n      \"tags\": [\"css\"],\n      \"warnings\": [\n        \"Chrome may occassionally fail this test on some systems; more info: https://code.google.com/p/chromium/issues/detail?id=129004\"\n      ]\n    }\n    !*/\n\n    Modernizr.addTest('csstransforms3d', function() {\n        var ret = !!testAllProps('perspective', '1px', true);\n        var usePrefix = Modernizr._config.usePrefixes;\n\n        // Webkit's 3D transforms are passed off to the browser's own graphics renderer.\n        //   It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in\n        //   some conditions. As a result, Webkit typically recognizes the syntax but\n        //   will sometimes throw a false positive, thus we must do a more thorough check:\n        if (ret && (!usePrefix || 'webkitPerspective' in docElement.style)) {\n            var mq;\n            var defaultStyle = '#modernizr{width:0;height:0}';\n            // Use CSS Conditional Rules if available\n            if (Modernizr.supports) {\n                mq = '@supports (perspective: 1px)';\n            } else {\n                // Otherwise, Webkit allows this media query to succeed only if the feature is enabled.\n                // `@media (transform-3d),(-webkit-transform-3d){ ... }`\n                mq = '@media (transform-3d)';\n                if (usePrefix) {\n                    mq += ',(-webkit-transform-3d)';\n                }\n            }\n\n            mq += '{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}';\n\n            testStyles(defaultStyle + mq, function(elem) {\n                ret = elem.offsetWidth === 7 && elem.offsetHeight === 18;\n            });\n        }\n\n        return ret;\n    });\n\n    /*!\n    {\n      \"name\": \"CSS Transitions\",\n      \"property\": \"csstransitions\",\n      \"caniuse\": \"css-transitions\",\n      \"tags\": [\"css\"]\n    }\n    !*/\n\n    Modernizr.addTest('csstransitions', testAllProps('transition', 'all', true));\n\n\n    // Run each test\n    testRunner();\n\n    // Remove the \"no-js\" class if it exists\n    setClasses(classes);\n\n    delete ModernizrProto.addTest;\n    delete ModernizrProto.addAsyncTest;\n\n    // Run the things that are supposed to run after the tests\n    for (var i = 0; i < Modernizr._q.length; i++) {\n        Modernizr._q[i]();\n    }\n\n    // Leak Modernizr namespace\n    window.Modernizr = Modernizr;\n\n\n    ;\n\n})(window, document);","/*! npm.im/object-fit-images 3.2.4 */\nvar objectFitImages = (function () {\n\t'use strict';\n\n\tvar OFI = 'fregante:object-fit-images';\n\tvar propRegex = /(object-fit|object-position)\\s*:\\s*([-.\\w\\s%]+)/g;\n\tvar testImg = typeof Image === 'undefined' ? {style: {'object-position': 1}} : new Image();\n\tvar supportsObjectFit = 'object-fit' in testImg.style;\n\tvar supportsObjectPosition = 'object-position' in testImg.style;\n\tvar supportsOFI = 'background-size' in testImg.style;\n\tvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\n\tvar nativeGetAttribute = testImg.getAttribute;\n\tvar nativeSetAttribute = testImg.setAttribute;\n\tvar autoModeEnabled = false;\n\n\tfunction createPlaceholder(w, h) {\n\t\treturn (\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\");\n\t}\n\n\tfunction polyfillCurrentSrc(el) {\n\t\tif (el.srcset && !supportsCurrentSrc && window.picturefill) {\n\t\t\tvar pf = window.picturefill._;\n\t\t\t// parse srcset with picturefill where currentSrc isn't available\n\t\t\tif (!el[pf.ns] || !el[pf.ns].evaled) {\n\t\t\t\t// force synchronous srcset parsing\n\t\t\t\tpf.fillImg(el, {reselect: true});\n\t\t\t}\n\n\t\t\tif (!el[pf.ns].curSrc) {\n\t\t\t\t// force picturefill to parse srcset\n\t\t\t\tel[pf.ns].supported = false;\n\t\t\t\tpf.fillImg(el, {reselect: true});\n\t\t\t}\n\n\t\t\t// retrieve parsed currentSrc, if any\n\t\t\tel.currentSrc = el[pf.ns].curSrc || el.src;\n\t\t}\n\t}\n\n\tfunction getStyle(el) {\n\t\tvar style = getComputedStyle(el).fontFamily;\n\t\tvar parsed;\n\t\tvar props = {};\n\t\twhile ((parsed = propRegex.exec(style)) !== null) {\n\t\t\tprops[parsed[1]] = parsed[2];\n\t\t}\n\t\treturn props;\n\t}\n\n\tfunction setPlaceholder(img, width, height) {\n\t\t// Default: fill width, no height\n\t\tvar placeholder = createPlaceholder(width || 1, height || 0);\n\n\t\t// Only set placeholder if it's different\n\t\tif (nativeGetAttribute.call(img, 'src') !== placeholder) {\n\t\t\tnativeSetAttribute.call(img, 'src', placeholder);\n\t\t}\n\t}\n\n\tfunction onImageReady(img, callback) {\n\t\t// naturalWidth is only available when the image headers are loaded,\n\t\t// this loop will poll it every 100ms.\n\t\tif (img.naturalWidth) {\n\t\t\tcallback(img);\n\t\t} else {\n\t\t\tsetTimeout(onImageReady, 100, img, callback);\n\t\t}\n\t}\n\n\tfunction fixOne(el) {\n\t\tvar style = getStyle(el);\n\t\tvar ofi = el[OFI];\n\t\tstyle['object-fit'] = style['object-fit'] || 'fill'; // default value\n\n\t\t// Avoid running where unnecessary, unless OFI had already done its deed\n\t\tif (!ofi.img) {\n\t\t\t// fill is the default behavior so no action is necessary\n\t\t\tif (style['object-fit'] === 'fill') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Where object-fit is supported and object-position isn't (Safari < 10)\n\t\t\tif (\n\t\t\t\t!ofi.skipTest && // unless user wants to apply regardless of browser support\n\t\t\t\tsupportsObjectFit && // if browser already supports object-fit\n\t\t\t\t!style['object-position'] // unless object-position is used\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// keep a clone in memory while resetting the original to a blank\n\t\tif (!ofi.img) {\n\t\t\tofi.img = new Image(el.width, el.height);\n\t\t\tofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n\t\t\tofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src;\n\n\t\t\t// preserve for any future cloneNode calls\n\t\t\t// https://github.com/fregante/object-fit-images/issues/53\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\t\t\tif (el.srcset) {\n\t\t\t\tnativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n\t\t\t}\n\n\t\t\tsetPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height);\n\n\t\t\t// remove srcset because it overrides src\n\t\t\tif (el.srcset) {\n\t\t\t\tel.srcset = '';\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tkeepSrcUsable(el);\n\t\t\t} catch (err) {\n\t\t\t\tif (window.console) {\n\t\t\t\t\tconsole.warn('https://bit.ly/ofi-old-browser');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tpolyfillCurrentSrc(ofi.img);\n\n\t\tel.style.backgroundImage = \"url(\\\"\" + ((ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"')) + \"\\\")\";\n\t\tel.style.backgroundPosition = style['object-position'] || 'center';\n\t\tel.style.backgroundRepeat = 'no-repeat';\n\t\tel.style.backgroundOrigin = 'content-box';\n\n\t\tif (/scale-down/.test(style['object-fit'])) {\n\t\t\tonImageReady(ofi.img, function () {\n\t\t\t\tif (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n\t\t\t\t\tel.style.backgroundSize = 'contain';\n\t\t\t\t} else {\n\t\t\t\t\tel.style.backgroundSize = 'auto';\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tel.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n\t\t}\n\n\t\tonImageReady(ofi.img, function (img) {\n\t\t\tsetPlaceholder(el, img.naturalWidth, img.naturalHeight);\n\t\t});\n\t}\n\n\tfunction keepSrcUsable(el) {\n\t\tvar descriptors = {\n\t\t\tget: function get(prop) {\n\t\t\t\treturn el[OFI].img[prop ? prop : 'src'];\n\t\t\t},\n\t\t\tset: function set(value, prop) {\n\t\t\t\tel[OFI].img[prop ? prop : 'src'] = value;\n\t\t\t\tnativeSetAttribute.call(el, (\"data-ofi-\" + prop), value); // preserve for any future cloneNode\n\t\t\t\tfixOne(el);\n\t\t\t\treturn value;\n\t\t\t}\n\t\t};\n\t\tObject.defineProperty(el, 'src', descriptors);\n\t\tObject.defineProperty(el, 'currentSrc', {\n\t\t\tget: function () { return descriptors.get('currentSrc'); }\n\t\t});\n\t\tObject.defineProperty(el, 'srcset', {\n\t\t\tget: function () { return descriptors.get('srcset'); },\n\t\t\tset: function (ss) { return descriptors.set(ss, 'srcset'); }\n\t\t});\n\t}\n\n\tfunction hijackAttributes() {\n\t\tfunction getOfiImageMaybe(el, name) {\n\t\t\treturn el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n\t\t}\n\t\tif (!supportsObjectPosition) {\n\t\t\tHTMLImageElement.prototype.getAttribute = function (name) {\n\t\t\t\treturn nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n\t\t\t};\n\n\t\t\tHTMLImageElement.prototype.setAttribute = function (name, value) {\n\t\t\t\treturn nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction fix(imgs, opts) {\n\t\tvar startAutoMode = !autoModeEnabled && !imgs;\n\t\topts = opts || {};\n\t\timgs = imgs || 'img';\n\n\t\tif ((supportsObjectPosition && !opts.skipTest) || !supportsOFI) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// use imgs as a selector or just select all images\n\t\tif (imgs === 'img') {\n\t\t\timgs = document.getElementsByTagName('img');\n\t\t} else if (typeof imgs === 'string') {\n\t\t\timgs = document.querySelectorAll(imgs);\n\t\t} else if (!('length' in imgs)) {\n\t\t\timgs = [imgs];\n\t\t}\n\n\t\t// apply fix to all\n\t\tfor (var i = 0; i < imgs.length; i++) {\n\t\t\timgs[i][OFI] = imgs[i][OFI] || {\n\t\t\t\tskipTest: opts.skipTest\n\t\t\t};\n\t\t\tfixOne(imgs[i]);\n\t\t}\n\n\t\tif (startAutoMode) {\n\t\t\tdocument.body.addEventListener('load', function (e) {\n\t\t\t\tif (e.target.tagName === 'IMG') {\n\t\t\t\t\tfix(e.target, {\n\t\t\t\t\t\tskipTest: opts.skipTest\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, true);\n\t\t\tautoModeEnabled = true;\n\t\t\timgs = 'img'; // reset to a generic selector for watchMQ\n\t\t}\n\n\t\t// if requested, watch media queries for object-fit change\n\t\tif (opts.watchMQ) {\n\t\t\twindow.addEventListener('resize', fix.bind(null, imgs, {\n\t\t\t\tskipTest: opts.skipTest\n\t\t\t}));\n\t\t}\n\t}\n\n\tfix.supportsObjectFit = supportsObjectFit;\n\tfix.supportsObjectPosition = supportsObjectPosition;\n\n\thijackAttributes();\n\n\treturn fix;\n\n}());\n","!function(root, factory) {\n    \"function\" == typeof define && define.amd ? // AMD. Register as an anonymous module unless amdModuleId is set\n        define([], function() {\n            return root.svg4everybody = factory();\n        }) : \"object\" == typeof module && module.exports ? // Node. Does not work with strict CommonJS, but\n        // only CommonJS-like environments that support module.exports,\n        // like Node.\n        module.exports = factory() : root.svg4everybody = factory();\n}(this, function() {\n    /*! svg4everybody v2.1.9 | github.com/jonathantneal/svg4everybody */\n    function embed(parent, svg, target) {\n        // if the target exists\n        if (target) {\n            // create a document fragment to hold the contents of the target\n            var fragment = document.createDocumentFragment(), viewBox = !svg.hasAttribute(\"viewBox\") && target.getAttribute(\"viewBox\");\n            // conditionally set the viewBox on the svg\n            viewBox && svg.setAttribute(\"viewBox\", viewBox);\n            // copy the contents of the clone into the fragment\n            for (// clone the target\n                var clone = target.cloneNode(!0); clone.childNodes.length; ) {\n                fragment.appendChild(clone.firstChild);\n            }\n            // append the fragment into the svg\n            parent.appendChild(fragment);\n        }\n    }\n    function loadreadystatechange(xhr) {\n        // listen to changes in the request\n        xhr.onreadystatechange = function() {\n            // if the request is ready\n            if (4 === xhr.readyState) {\n                // get the cached html document\n                var cachedDocument = xhr._cachedDocument;\n                // ensure the cached html document based on the xhr response\n                cachedDocument || (cachedDocument = xhr._cachedDocument = document.implementation.createHTMLDocument(\"\"),\n                    cachedDocument.body.innerHTML = xhr.responseText, xhr._cachedTarget = {}), // clear the xhr embeds list and embed each item\n                    xhr._embeds.splice(0).map(function(item) {\n                        // get the cached target\n                        var target = xhr._cachedTarget[item.id];\n                        // ensure the cached target\n                        target || (target = xhr._cachedTarget[item.id] = cachedDocument.getElementById(item.id)),\n                            // embed the target into the svg\n                            embed(item.parent, item.svg, target);\n                    });\n            }\n        }, // test the ready state change immediately\n            xhr.onreadystatechange();\n    }\n    function svg4everybody(rawopts) {\n        function oninterval() {\n            // while the index exists in the live <use> collection\n            for (// get the cached <use> index\n                var index = 0; index < uses.length; ) {\n                // get the current <use>\n                var use = uses[index], parent = use.parentNode, svg = getSVGAncestor(parent), src = use.getAttribute(\"xlink:href\") || use.getAttribute(\"href\");\n                if (!src && opts.attributeName && (src = use.getAttribute(opts.attributeName)),\n                svg && src) {\n                    if (polyfill) {\n                        if (!opts.validate || opts.validate(src, svg, use)) {\n                            // remove the <use> element\n                            parent.removeChild(use);\n                            // parse the src and get the url and id\n                            var srcSplit = src.split(\"#\"), url = srcSplit.shift(), id = srcSplit.join(\"#\");\n                            // if the link is external\n                            if (url.length) {\n                                // get the cached xhr request\n                                var xhr = requests[url];\n                                // ensure the xhr request exists\n                                xhr || (xhr = requests[url] = new XMLHttpRequest(), xhr.open(\"GET\", url), xhr.send(),\n                                    xhr._embeds = []), // add the svg and id as an item to the xhr embeds list\n                                    xhr._embeds.push({\n                                        parent: parent,\n                                        svg: svg,\n                                        id: id\n                                    }), // prepare the xhr ready state change event\n                                    loadreadystatechange(xhr);\n                            } else {\n                                // embed the local id into the svg\n                                embed(parent, svg, document.getElementById(id));\n                            }\n                        } else {\n                            // increase the index when the previous value was not \"valid\"\n                            ++index, ++numberOfSvgUseElementsToBypass;\n                        }\n                    }\n                } else {\n                    // increase the index when the previous value was not \"valid\"\n                    ++index;\n                }\n            }\n            // continue the interval\n            (!uses.length || uses.length - numberOfSvgUseElementsToBypass > 0) && requestAnimationFrame(oninterval, 67);\n        }\n        var polyfill, opts = Object(rawopts), newerIEUA = /\\bTrident\\/[567]\\b|\\bMSIE (?:9|10)\\.0\\b/, webkitUA = /\\bAppleWebKit\\/(\\d+)\\b/, olderEdgeUA = /\\bEdge\\/12\\.(\\d+)\\b/, edgeUA = /\\bEdge\\/.(\\d+)\\b/, inIframe = window.top !== window.self;\n        polyfill = \"polyfill\" in opts ? opts.polyfill : newerIEUA.test(navigator.userAgent) || (navigator.userAgent.match(olderEdgeUA) || [])[1] < 10547 || (navigator.userAgent.match(webkitUA) || [])[1] < 537 || edgeUA.test(navigator.userAgent) && inIframe;\n        // create xhr requests object\n        var requests = {}, requestAnimationFrame = window.requestAnimationFrame || setTimeout, uses = document.getElementsByTagName(\"use\"), numberOfSvgUseElementsToBypass = 0;\n        // conditionally start the interval if the polyfill is active\n        polyfill && oninterval();\n    }\n    function getSVGAncestor(node) {\n        for (var svg = node; \"svg\" !== svg.nodeName.toLowerCase() && (svg = svg.parentNode); ) {}\n        return svg;\n    }\n    return svg4everybody;\n});\n","/*jshint browser:true */\n/*!\n * FitVids 1.1\n *\n * Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com\n * Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/\n * Released under the WTFPL license - http://sam.zoy.org/wtfpl/\n *\n */\n\n;(function( $ ){\n\n    'use strict';\n\n    $.fn.fitVids = function( options ) {\n        var settings = {\n            customSelector: null,\n            ignore: null\n        };\n\n        if(!document.getElementById('fit-vids-style')) {\n            // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js\n            var head = document.head || document.getElementsByTagName('head')[0];\n            var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';\n            var div = document.createElement(\"div\");\n            div.innerHTML = '<p>x</p><style id=\"fit-vids-style\">' + css + '</style>';\n            head.appendChild(div.childNodes[1]);\n        }\n\n        if ( options ) {\n            $.extend( settings, options );\n        }\n\n        return this.each(function(){\n            var selectors = [\n                'iframe[src*=\"player.vimeo.com\"]',\n                'iframe[src*=\"youtube.com\"]',\n                'iframe[src*=\"youtube-nocookie.com\"]',\n                'iframe[src*=\"kickstarter.com\"][src*=\"video.html\"]',\n                'object',\n                'embed'\n            ];\n\n            if (settings.customSelector) {\n                selectors.push(settings.customSelector);\n            }\n\n            var ignoreList = '.fitvidsignore';\n\n            if(settings.ignore) {\n                ignoreList = ignoreList + ', ' + settings.ignore;\n            }\n\n            var $allVideos = $(this).find(selectors.join(','));\n            $allVideos = $allVideos.not('object object'); // SwfObj conflict patch\n            $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video.\n\n            $allVideos.each(function(){\n                var $this = $(this);\n                if($this.parents(ignoreList).length > 0) {\n                    return; // Disable FitVids on this video.\n                }\n                if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }\n                if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width'))))\n                {\n                    $this.attr('height', 9);\n                    $this.attr('width', 16);\n                }\n                var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),\n                    width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),\n                    aspectRatio = height / width;\n                if(!$this.attr('name')){\n                    var videoName = 'fitvid' + $.fn.fitVids._count;\n                    $this.attr('name', videoName);\n                    $.fn.fitVids._count++;\n                }\n                $this.wrap('<div class=\"fluid-width-video-wrapper\"></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%');\n                $this.removeAttr('height').removeAttr('width');\n            });\n        });\n    };\n\n    // Internal counter for unique video names.\n    $.fn.fitVids._count = 0;\n\n// Works with either jQuery or Zepto\n})( window.jQuery || window.Zepto );","/**\n * menu-aim is a jQuery plugin for dropdown menus that can differentiate\n * between a user trying hover over a dropdown item vs trying to navigate into\n * a submenu's contents.\n *\n * menu-aim assumes that you have are using a menu with submenus that expand\n * to the menu's right. It will fire events when the user's mouse enters a new\n * dropdown item *and* when that item is being intentionally hovered over.\n *\n * __________________________\n * | Monkeys  >|   Gorilla  |\n * | Gorillas >|   Content  |\n * | Chimps   >|   Here     |\n * |___________|____________|\n *\n * In the above example, \"Gorillas\" is selected and its submenu content is\n * being shown on the right. Imagine that the user's cursor is hovering over\n * \"Gorillas.\" When they move their mouse into the \"Gorilla Content\" area, they\n * may briefly hover over \"Chimps.\" This shouldn't close the \"Gorilla Content\"\n * area.\n *\n * This problem is normally solved using timeouts and delays. menu-aim tries to\n * solve this by detecting the direction of the user's mouse movement. This can\n * make for quicker transitions when navigating up and down the menu. The\n * experience is hopefully similar to amazon.com/'s \"Shop by Department\"\n * dropdown.\n *\n * Use like so:\n *\n *      $(\"#menu\").menuAim({\n *          activate: $.noop,  // fired on row activation\n *          deactivate: $.noop  // fired on row deactivation\n *      });\n *\n *  ...to receive events when a menu's row has been purposefully (de)activated.\n *\n * The following options can be passed to menuAim. All functions execute with\n * the relevant row's HTML element as the execution context ('this'):\n *\n *      .menuAim({\n *          // Function to call when a row is purposefully activated. Use this\n *          // to show a submenu's content for the activated row.\n *          activate: function() {},\n *\n *          // Function to call when a row is deactivated.\n *          deactivate: function() {},\n *\n *          // Function to call when mouse enters a menu row. Entering a row\n *          // does not mean the row has been activated, as the user may be\n *          // mousing over to a submenu.\n *          enter: function() {},\n *\n *          // Function to call when mouse exits a menu row.\n *          exit: function() {},\n *\n *          // Selector for identifying which elements in the menu are rows\n *          // that can trigger the above events. Defaults to \"> li\".\n *          rowSelector: \"> li\",\n *\n *          // You may have some menu rows that aren't submenus and therefore\n *          // shouldn't ever need to \"activate.\" If so, filter submenu rows w/\n *          // this selector. Defaults to \"*\" (all elements).\n *          submenuSelector: \"*\",\n *\n *          // Direction the submenu opens relative to the main menu. Can be\n *          // left, right, above, or below. Defaults to \"right\".\n *          submenuDirection: \"right\"\n *      });\n *\n * https://github.com/kamens/jQuery-menu-aim\n * MIT License\n*/\n(function($) {\n\n    $.fn.menuAim = function(opts) {\n        // Initialize menu-aim for all elements in jQuery collection\n        this.each(function() {\n            init.call(this, opts);\n        });\n\n        return this;\n    };\n\n    function init(opts) {\n        var $menu = $(this),\n            activeRow = null,\n            mouseLocs = [],\n            lastDelayLoc = null,\n            timeoutId = null,\n            options = $.extend({\n                rowSelector: \"> li\",\n                submenuSelector: \"*\",\n                submenuDirection: \"right\",\n                tolerance: 75,  // bigger = more forgivey when entering submenu\n                enter: $.noop,\n                exit: $.noop,\n                activate: $.noop,\n                deactivate: $.noop,\n                exitMenu: $.noop\n            }, opts);\n\n        var MOUSE_LOCS_TRACKED = 3,  // number of past mouse locations to track\n            DELAY = 300;  // ms delay when user appears to be entering submenu\n\n        /**\n         * Keep track of the last few locations of the mouse.\n         */\n        var mousemoveDocument = function(e) {\n                mouseLocs.push({x: e.pageX, y: e.pageY});\n\n                if (mouseLocs.length > MOUSE_LOCS_TRACKED) {\n                    mouseLocs.shift();\n                }\n            };\n\n        /**\n         * Cancel possible row activations when leaving the menu entirely\n         */\n        var mouseleaveMenu = function() {\n                if (timeoutId) {\n                    clearTimeout(timeoutId);\n                }\n\n                // If exitMenu is supplied and returns true, deactivate the\n                // currently active row on menu exit.\n                if (options.exitMenu(this)) {\n                    if (activeRow) {\n                        options.deactivate(activeRow);\n                    }\n\n                    activeRow = null;\n                }\n            };\n\n        /**\n         * Trigger a possible row activation whenever entering a new row.\n         */\n        var mouseenterRow = function() {\n                if (timeoutId) {\n                    // Cancel any previous activation delays\n                    clearTimeout(timeoutId);\n                }\n\n                options.enter(this);\n                possiblyActivate(this);\n            },\n            mouseleaveRow = function() {\n                options.exit(this);\n            };\n\n        /*\n         * Immediately activate a row if the user clicks on it.\n         */\n        var clickRow = function() {\n                activate(this);\n            };\n\n        /**\n         * Activate a menu row.\n         */\n        var activate = function(row) {\n                if (row == activeRow) {\n                    return;\n                }\n\n                if (activeRow) {\n                    options.deactivate(activeRow);\n                }\n\n                options.activate(row);\n                activeRow = row;\n            };\n\n        /**\n         * Possibly activate a menu row. If mouse movement indicates that we\n         * shouldn't activate yet because user may be trying to enter\n         * a submenu's content, then delay and check again later.\n         */\n        var possiblyActivate = function(row) {\n                var delay = activationDelay();\n\n                if (delay) {\n                    timeoutId = setTimeout(function() {\n                        possiblyActivate(row);\n                    }, delay);\n                } else {\n                    activate(row);\n                }\n            };\n\n        /**\n         * Return the amount of time that should be used as a delay before the\n         * currently hovered row is activated.\n         *\n         * Returns 0 if the activation should happen immediately. Otherwise,\n         * returns the number of milliseconds that should be delayed before\n         * checking again to see if the row should be activated.\n         */\n        var activationDelay = function() {\n                if (!activeRow || !$(activeRow).is(options.submenuSelector)) {\n                    // If there is no other submenu row already active, then\n                    // go ahead and activate immediately.\n                    return 0;\n                }\n\n                var offset = $menu.offset(),\n                    upperLeft = {\n                        x: offset.left,\n                        y: offset.top - options.tolerance\n                    },\n                    upperRight = {\n                        x: offset.left + $menu.outerWidth(),\n                        y: upperLeft.y\n                    },\n                    lowerLeft = {\n                        x: offset.left,\n                        y: offset.top + $menu.outerHeight() + options.tolerance\n                    },\n                    lowerRight = {\n                        x: offset.left + $menu.outerWidth(),\n                        y: lowerLeft.y\n                    },\n                    loc = mouseLocs[mouseLocs.length - 1],\n                    prevLoc = mouseLocs[0];\n\n                if (!loc) {\n                    return 0;\n                }\n\n                if (!prevLoc) {\n                    prevLoc = loc;\n                }\n\n                if (prevLoc.x < offset.left || prevLoc.x > lowerRight.x ||\n                    prevLoc.y < offset.top || prevLoc.y > lowerRight.y) {\n                    // If the previous mouse location was outside of the entire\n                    // menu's bounds, immediately activate.\n                    return 0;\n                }\n\n                if (lastDelayLoc &&\n                        loc.x == lastDelayLoc.x && loc.y == lastDelayLoc.y) {\n                    // If the mouse hasn't moved since the last time we checked\n                    // for activation status, immediately activate.\n                    return 0;\n                }\n\n                // Detect if the user is moving towards the currently activated\n                // submenu.\n                //\n                // If the mouse is heading relatively clearly towards\n                // the submenu's content, we should wait and give the user more\n                // time before activating a new row. If the mouse is heading\n                // elsewhere, we can immediately activate a new row.\n                //\n                // We detect this by calculating the slope formed between the\n                // current mouse location and the upper/lower right points of\n                // the menu. We do the same for the previous mouse location.\n                // If the current mouse location's slopes are\n                // increasing/decreasing appropriately compared to the\n                // previous's, we know the user is moving toward the submenu.\n                //\n                // Note that since the y-axis increases as the cursor moves\n                // down the screen, we are looking for the slope between the\n                // cursor and the upper right corner to decrease over time, not\n                // increase (somewhat counterintuitively).\n                function slope(a, b) {\n                    return (b.y - a.y) / (b.x - a.x);\n                };\n\n                var decreasingCorner = upperRight,\n                    increasingCorner = lowerRight;\n\n                // Our expectations for decreasing or increasing slope values\n                // depends on which direction the submenu opens relative to the\n                // main menu. By default, if the menu opens on the right, we\n                // expect the slope between the cursor and the upper right\n                // corner to decrease over time, as explained above. If the\n                // submenu opens in a different direction, we change our slope\n                // expectations.\n                if (options.submenuDirection == \"left\") {\n                    decreasingCorner = lowerLeft;\n                    increasingCorner = upperLeft;\n                } else if (options.submenuDirection == \"below\") {\n                    decreasingCorner = lowerRight;\n                    increasingCorner = lowerLeft;\n                } else if (options.submenuDirection == \"above\") {\n                    decreasingCorner = upperLeft;\n                    increasingCorner = upperRight;\n                }\n\n                var decreasingSlope = slope(loc, decreasingCorner),\n                    increasingSlope = slope(loc, increasingCorner),\n                    prevDecreasingSlope = slope(prevLoc, decreasingCorner),\n                    prevIncreasingSlope = slope(prevLoc, increasingCorner);\n\n                if (decreasingSlope < prevDecreasingSlope &&\n                        increasingSlope > prevIncreasingSlope) {\n                    // Mouse is moving from previous location towards the\n                    // currently activated submenu. Delay before activating a\n                    // new menu row, because user may be moving into submenu.\n                    lastDelayLoc = loc;\n                    return DELAY;\n                }\n\n                lastDelayLoc = null;\n                return 0;\n            };\n\n        /**\n         * Hook up initial menu events\n         */\n        $menu\n            .mouseleave(mouseleaveMenu)\n            .find(options.rowSelector)\n                .mouseenter(mouseenterRow)\n                .mouseleave(mouseleaveRow)\n                .click(clickRow);\n\n        $(document).mousemove(mousemoveDocument);\n\n    };\n})(jQuery);\n\n","/**\n * Swiper 4.4.6\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://www.idangero.us/swiper/\n *\n * Copyright 2014-2018 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: December 19, 2018\n */\n\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n        typeof define === 'function' && define.amd ? define(factory) :\n            (global.Swiper = factory());\n}(this, (function () { 'use strict';\n\n    /**\n     * SSR Window 1.0.1\n     * Better handling for window object in SSR environment\n     * https://github.com/nolimits4web/ssr-window\n     *\n     * Copyright 2018, Vladimir Kharlampidi\n     *\n     * Licensed under MIT\n     *\n     * Released on: July 18, 2018\n     */\n    var doc = (typeof document === 'undefined') ? {\n        body: {},\n        addEventListener: function addEventListener() {},\n        removeEventListener: function removeEventListener() {},\n        activeElement: {\n            blur: function blur() {},\n            nodeName: '',\n        },\n        querySelector: function querySelector() {\n            return null;\n        },\n        querySelectorAll: function querySelectorAll() {\n            return [];\n        },\n        getElementById: function getElementById() {\n            return null;\n        },\n        createEvent: function createEvent() {\n            return {\n                initEvent: function initEvent() {},\n            };\n        },\n        createElement: function createElement() {\n            return {\n                children: [],\n                childNodes: [],\n                style: {},\n                setAttribute: function setAttribute() {},\n                getElementsByTagName: function getElementsByTagName() {\n                    return [];\n                },\n            };\n        },\n        location: { hash: '' },\n    } : document; // eslint-disable-line\n\n    var win = (typeof window === 'undefined') ? {\n        document: doc,\n        navigator: {\n            userAgent: '',\n        },\n        location: {},\n        history: {},\n        CustomEvent: function CustomEvent() {\n            return this;\n        },\n        addEventListener: function addEventListener() {},\n        removeEventListener: function removeEventListener() {},\n        getComputedStyle: function getComputedStyle() {\n            return {\n                getPropertyValue: function getPropertyValue() {\n                    return '';\n                },\n            };\n        },\n        Image: function Image() {},\n        Date: function Date() {},\n        screen: {},\n        setTimeout: function setTimeout() {},\n        clearTimeout: function clearTimeout() {},\n    } : window; // eslint-disable-line\n\n    /**\n     * Dom7 2.1.2\n     * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n     * http://framework7.io/docs/dom.html\n     *\n     * Copyright 2018, Vladimir Kharlampidi\n     * The iDangero.us\n     * http://www.idangero.us/\n     *\n     * Licensed under MIT\n     *\n     * Released on: September 13, 2018\n     */\n\n    var Dom7 = function Dom7(arr) {\n        var self = this;\n        // Create array-like object\n        for (var i = 0; i < arr.length; i += 1) {\n            self[i] = arr[i];\n        }\n        self.length = arr.length;\n        // Return collection with methods\n        return this;\n    };\n\n    function $(selector, context) {\n        var arr = [];\n        var i = 0;\n        if (selector && !context) {\n            if (selector instanceof Dom7) {\n                return selector;\n            }\n        }\n        if (selector) {\n            // String\n            if (typeof selector === 'string') {\n                var els;\n                var tempParent;\n                var html = selector.trim();\n                if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n                    var toCreate = 'div';\n                    if (html.indexOf('<li') === 0) { toCreate = 'ul'; }\n                    if (html.indexOf('<tr') === 0) { toCreate = 'tbody'; }\n                    if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) { toCreate = 'tr'; }\n                    if (html.indexOf('<tbody') === 0) { toCreate = 'table'; }\n                    if (html.indexOf('<option') === 0) { toCreate = 'select'; }\n                    tempParent = doc.createElement(toCreate);\n                    tempParent.innerHTML = html;\n                    for (i = 0; i < tempParent.childNodes.length; i += 1) {\n                        arr.push(tempParent.childNodes[i]);\n                    }\n                } else {\n                    if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {\n                        // Pure ID selector\n                        els = [doc.getElementById(selector.trim().split('#')[1])];\n                    } else {\n                        // Other selectors\n                        els = (context || doc).querySelectorAll(selector.trim());\n                    }\n                    for (i = 0; i < els.length; i += 1) {\n                        if (els[i]) { arr.push(els[i]); }\n                    }\n                }\n            } else if (selector.nodeType || selector === win || selector === doc) {\n                // Node/element\n                arr.push(selector);\n            } else if (selector.length > 0 && selector[0].nodeType) {\n                // Array of elements or instance of Dom\n                for (i = 0; i < selector.length; i += 1) {\n                    arr.push(selector[i]);\n                }\n            }\n        }\n        return new Dom7(arr);\n    }\n\n    $.fn = Dom7.prototype;\n    $.Class = Dom7;\n    $.Dom7 = Dom7;\n\n    function unique(arr) {\n        var uniqueArray = [];\n        for (var i = 0; i < arr.length; i += 1) {\n            if (uniqueArray.indexOf(arr[i]) === -1) { uniqueArray.push(arr[i]); }\n        }\n        return uniqueArray;\n    }\n\n    // Classes and attributes\n    function addClass(className) {\n        if (typeof className === 'undefined') {\n            return this;\n        }\n        var classes = className.split(' ');\n        for (var i = 0; i < classes.length; i += 1) {\n            for (var j = 0; j < this.length; j += 1) {\n                if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.add(classes[i]); }\n            }\n        }\n        return this;\n    }\n    function removeClass(className) {\n        var classes = className.split(' ');\n        for (var i = 0; i < classes.length; i += 1) {\n            for (var j = 0; j < this.length; j += 1) {\n                if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.remove(classes[i]); }\n            }\n        }\n        return this;\n    }\n    function hasClass(className) {\n        if (!this[0]) { return false; }\n        return this[0].classList.contains(className);\n    }\n    function toggleClass(className) {\n        var classes = className.split(' ');\n        for (var i = 0; i < classes.length; i += 1) {\n            for (var j = 0; j < this.length; j += 1) {\n                if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.toggle(classes[i]); }\n            }\n        }\n        return this;\n    }\n    function attr(attrs, value) {\n        var arguments$1 = arguments;\n\n        if (arguments.length === 1 && typeof attrs === 'string') {\n            // Get attr\n            if (this[0]) { return this[0].getAttribute(attrs); }\n            return undefined;\n        }\n\n        // Set attrs\n        for (var i = 0; i < this.length; i += 1) {\n            if (arguments$1.length === 2) {\n                // String\n                this[i].setAttribute(attrs, value);\n            } else {\n                // Object\n                // eslint-disable-next-line\n                for (var attrName in attrs) {\n                    this[i][attrName] = attrs[attrName];\n                    this[i].setAttribute(attrName, attrs[attrName]);\n                }\n            }\n        }\n        return this;\n    }\n    // eslint-disable-next-line\n    function removeAttr(attr) {\n        for (var i = 0; i < this.length; i += 1) {\n            this[i].removeAttribute(attr);\n        }\n        return this;\n    }\n    function data(key, value) {\n        var el;\n        if (typeof value === 'undefined') {\n            el = this[0];\n            // Get value\n            if (el) {\n                if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {\n                    return el.dom7ElementDataStorage[key];\n                }\n\n                var dataKey = el.getAttribute((\"data-\" + key));\n                if (dataKey) {\n                    return dataKey;\n                }\n                return undefined;\n            }\n            return undefined;\n        }\n\n        // Set value\n        for (var i = 0; i < this.length; i += 1) {\n            el = this[i];\n            if (!el.dom7ElementDataStorage) { el.dom7ElementDataStorage = {}; }\n            el.dom7ElementDataStorage[key] = value;\n        }\n        return this;\n    }\n    // Transforms\n    // eslint-disable-next-line\n    function transform(transform) {\n        for (var i = 0; i < this.length; i += 1) {\n            var elStyle = this[i].style;\n            elStyle.webkitTransform = transform;\n            elStyle.transform = transform;\n        }\n        return this;\n    }\n    function transition(duration) {\n        if (typeof duration !== 'string') {\n            duration = duration + \"ms\"; // eslint-disable-line\n        }\n        for (var i = 0; i < this.length; i += 1) {\n            var elStyle = this[i].style;\n            elStyle.webkitTransitionDuration = duration;\n            elStyle.transitionDuration = duration;\n        }\n        return this;\n    }\n    // Events\n    function on() {\n        var assign;\n\n        var args = [], len = arguments.length;\n        while ( len-- ) args[ len ] = arguments[ len ];\n        var eventType = args[0];\n        var targetSelector = args[1];\n        var listener = args[2];\n        var capture = args[3];\n        if (typeof args[1] === 'function') {\n            (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n            targetSelector = undefined;\n        }\n        if (!capture) { capture = false; }\n\n        function handleLiveEvent(e) {\n            var target = e.target;\n            if (!target) { return; }\n            var eventData = e.target.dom7EventData || [];\n            if (eventData.indexOf(e) < 0) {\n                eventData.unshift(e);\n            }\n            if ($(target).is(targetSelector)) { listener.apply(target, eventData); }\n            else {\n                var parents = $(target).parents(); // eslint-disable-line\n                for (var k = 0; k < parents.length; k += 1) {\n                    if ($(parents[k]).is(targetSelector)) { listener.apply(parents[k], eventData); }\n                }\n            }\n        }\n        function handleEvent(e) {\n            var eventData = e && e.target ? e.target.dom7EventData || [] : [];\n            if (eventData.indexOf(e) < 0) {\n                eventData.unshift(e);\n            }\n            listener.apply(this, eventData);\n        }\n        var events = eventType.split(' ');\n        var j;\n        for (var i = 0; i < this.length; i += 1) {\n            var el = this[i];\n            if (!targetSelector) {\n                for (j = 0; j < events.length; j += 1) {\n                    var event = events[j];\n                    if (!el.dom7Listeners) { el.dom7Listeners = {}; }\n                    if (!el.dom7Listeners[event]) { el.dom7Listeners[event] = []; }\n                    el.dom7Listeners[event].push({\n                        listener: listener,\n                        proxyListener: handleEvent,\n                    });\n                    el.addEventListener(event, handleEvent, capture);\n                }\n            } else {\n                // Live events\n                for (j = 0; j < events.length; j += 1) {\n                    var event$1 = events[j];\n                    if (!el.dom7LiveListeners) { el.dom7LiveListeners = {}; }\n                    if (!el.dom7LiveListeners[event$1]) { el.dom7LiveListeners[event$1] = []; }\n                    el.dom7LiveListeners[event$1].push({\n                        listener: listener,\n                        proxyListener: handleLiveEvent,\n                    });\n                    el.addEventListener(event$1, handleLiveEvent, capture);\n                }\n            }\n        }\n        return this;\n    }\n    function off() {\n        var assign;\n\n        var args = [], len = arguments.length;\n        while ( len-- ) args[ len ] = arguments[ len ];\n        var eventType = args[0];\n        var targetSelector = args[1];\n        var listener = args[2];\n        var capture = args[3];\n        if (typeof args[1] === 'function') {\n            (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n            targetSelector = undefined;\n        }\n        if (!capture) { capture = false; }\n\n        var events = eventType.split(' ');\n        for (var i = 0; i < events.length; i += 1) {\n            var event = events[i];\n            for (var j = 0; j < this.length; j += 1) {\n                var el = this[j];\n                var handlers = (void 0);\n                if (!targetSelector && el.dom7Listeners) {\n                    handlers = el.dom7Listeners[event];\n                } else if (targetSelector && el.dom7LiveListeners) {\n                    handlers = el.dom7LiveListeners[event];\n                }\n                if (handlers && handlers.length) {\n                    for (var k = handlers.length - 1; k >= 0; k -= 1) {\n                        var handler = handlers[k];\n                        if (listener && handler.listener === listener) {\n                            el.removeEventListener(event, handler.proxyListener, capture);\n                            handlers.splice(k, 1);\n                        } else if (!listener) {\n                            el.removeEventListener(event, handler.proxyListener, capture);\n                            handlers.splice(k, 1);\n                        }\n                    }\n                }\n            }\n        }\n        return this;\n    }\n    function trigger() {\n        var args = [], len = arguments.length;\n        while ( len-- ) args[ len ] = arguments[ len ];\n\n        var events = args[0].split(' ');\n        var eventData = args[1];\n        for (var i = 0; i < events.length; i += 1) {\n            var event = events[i];\n            for (var j = 0; j < this.length; j += 1) {\n                var el = this[j];\n                var evt = (void 0);\n                try {\n                    evt = new win.CustomEvent(event, {\n                        detail: eventData,\n                        bubbles: true,\n                        cancelable: true,\n                    });\n                } catch (e) {\n                    evt = doc.createEvent('Event');\n                    evt.initEvent(event, true, true);\n                    evt.detail = eventData;\n                }\n                // eslint-disable-next-line\n                el.dom7EventData = args.filter(function (data, dataIndex) { return dataIndex > 0; });\n                el.dispatchEvent(evt);\n                el.dom7EventData = [];\n                delete el.dom7EventData;\n            }\n        }\n        return this;\n    }\n    function transitionEnd(callback) {\n        var events = ['webkitTransitionEnd', 'transitionend'];\n        var dom = this;\n        var i;\n        function fireCallBack(e) {\n            /* jshint validthis:true */\n            if (e.target !== this) { return; }\n            callback.call(this, e);\n            for (i = 0; i < events.length; i += 1) {\n                dom.off(events[i], fireCallBack);\n            }\n        }\n        if (callback) {\n            for (i = 0; i < events.length; i += 1) {\n                dom.on(events[i], fireCallBack);\n            }\n        }\n        return this;\n    }\n    function outerWidth(includeMargins) {\n        if (this.length > 0) {\n            if (includeMargins) {\n                // eslint-disable-next-line\n                var styles = this.styles();\n                return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n            }\n            return this[0].offsetWidth;\n        }\n        return null;\n    }\n    function outerHeight(includeMargins) {\n        if (this.length > 0) {\n            if (includeMargins) {\n                // eslint-disable-next-line\n                var styles = this.styles();\n                return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n            }\n            return this[0].offsetHeight;\n        }\n        return null;\n    }\n    function offset() {\n        if (this.length > 0) {\n            var el = this[0];\n            var box = el.getBoundingClientRect();\n            var body = doc.body;\n            var clientTop = el.clientTop || body.clientTop || 0;\n            var clientLeft = el.clientLeft || body.clientLeft || 0;\n            var scrollTop = el === win ? win.scrollY : el.scrollTop;\n            var scrollLeft = el === win ? win.scrollX : el.scrollLeft;\n            return {\n                top: (box.top + scrollTop) - clientTop,\n                left: (box.left + scrollLeft) - clientLeft,\n            };\n        }\n\n        return null;\n    }\n    function styles() {\n        if (this[0]) { return win.getComputedStyle(this[0], null); }\n        return {};\n    }\n    function css(props, value) {\n        var i;\n        if (arguments.length === 1) {\n            if (typeof props === 'string') {\n                if (this[0]) { return win.getComputedStyle(this[0], null).getPropertyValue(props); }\n            } else {\n                for (i = 0; i < this.length; i += 1) {\n                    // eslint-disable-next-line\n                    for (var prop in props) {\n                        this[i].style[prop] = props[prop];\n                    }\n                }\n                return this;\n            }\n        }\n        if (arguments.length === 2 && typeof props === 'string') {\n            for (i = 0; i < this.length; i += 1) {\n                this[i].style[props] = value;\n            }\n            return this;\n        }\n        return this;\n    }\n    // Iterate over the collection passing elements to `callback`\n    function each(callback) {\n        // Don't bother continuing without a callback\n        if (!callback) { return this; }\n        // Iterate over the current collection\n        for (var i = 0; i < this.length; i += 1) {\n            // If the callback returns false\n            if (callback.call(this[i], i, this[i]) === false) {\n                // End the loop early\n                return this;\n            }\n        }\n        // Return `this` to allow chained DOM operations\n        return this;\n    }\n    // eslint-disable-next-line\n    function html(html) {\n        if (typeof html === 'undefined') {\n            return this[0] ? this[0].innerHTML : undefined;\n        }\n\n        for (var i = 0; i < this.length; i += 1) {\n            this[i].innerHTML = html;\n        }\n        return this;\n    }\n    // eslint-disable-next-line\n    function text(text) {\n        if (typeof text === 'undefined') {\n            if (this[0]) {\n                return this[0].textContent.trim();\n            }\n            return null;\n        }\n\n        for (var i = 0; i < this.length; i += 1) {\n            this[i].textContent = text;\n        }\n        return this;\n    }\n    function is(selector) {\n        var el = this[0];\n        var compareWith;\n        var i;\n        if (!el || typeof selector === 'undefined') { return false; }\n        if (typeof selector === 'string') {\n            if (el.matches) { return el.matches(selector); }\n            else if (el.webkitMatchesSelector) { return el.webkitMatchesSelector(selector); }\n            else if (el.msMatchesSelector) { return el.msMatchesSelector(selector); }\n\n            compareWith = $(selector);\n            for (i = 0; i < compareWith.length; i += 1) {\n                if (compareWith[i] === el) { return true; }\n            }\n            return false;\n        } else if (selector === doc) { return el === doc; }\n        else if (selector === win) { return el === win; }\n\n        if (selector.nodeType || selector instanceof Dom7) {\n            compareWith = selector.nodeType ? [selector] : selector;\n            for (i = 0; i < compareWith.length; i += 1) {\n                if (compareWith[i] === el) { return true; }\n            }\n            return false;\n        }\n        return false;\n    }\n    function index() {\n        var child = this[0];\n        var i;\n        if (child) {\n            i = 0;\n            // eslint-disable-next-line\n            while ((child = child.previousSibling) !== null) {\n                if (child.nodeType === 1) { i += 1; }\n            }\n            return i;\n        }\n        return undefined;\n    }\n    // eslint-disable-next-line\n    function eq(index) {\n        if (typeof index === 'undefined') { return this; }\n        var length = this.length;\n        var returnIndex;\n        if (index > length - 1) {\n            return new Dom7([]);\n        }\n        if (index < 0) {\n            returnIndex = length + index;\n            if (returnIndex < 0) { return new Dom7([]); }\n            return new Dom7([this[returnIndex]]);\n        }\n        return new Dom7([this[index]]);\n    }\n    function append() {\n        var args = [], len = arguments.length;\n        while ( len-- ) args[ len ] = arguments[ len ];\n\n        var newChild;\n\n        for (var k = 0; k < args.length; k += 1) {\n            newChild = args[k];\n            for (var i = 0; i < this.length; i += 1) {\n                if (typeof newChild === 'string') {\n                    var tempDiv = doc.createElement('div');\n                    tempDiv.innerHTML = newChild;\n                    while (tempDiv.firstChild) {\n                        this[i].appendChild(tempDiv.firstChild);\n                    }\n                } else if (newChild instanceof Dom7) {\n                    for (var j = 0; j < newChild.length; j += 1) {\n                        this[i].appendChild(newChild[j]);\n                    }\n                } else {\n                    this[i].appendChild(newChild);\n                }\n            }\n        }\n\n        return this;\n    }\n    function prepend(newChild) {\n        var i;\n        var j;\n        for (i = 0; i < this.length; i += 1) {\n            if (typeof newChild === 'string') {\n                var tempDiv = doc.createElement('div');\n                tempDiv.innerHTML = newChild;\n                for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n                    this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n                }\n            } else if (newChild instanceof Dom7) {\n                for (j = 0; j < newChild.length; j += 1) {\n                    this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n                }\n            } else {\n                this[i].insertBefore(newChild, this[i].childNodes[0]);\n            }\n        }\n        return this;\n    }\n    function next(selector) {\n        if (this.length > 0) {\n            if (selector) {\n                if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n                    return new Dom7([this[0].nextElementSibling]);\n                }\n                return new Dom7([]);\n            }\n\n            if (this[0].nextElementSibling) { return new Dom7([this[0].nextElementSibling]); }\n            return new Dom7([]);\n        }\n        return new Dom7([]);\n    }\n    function nextAll(selector) {\n        var nextEls = [];\n        var el = this[0];\n        if (!el) { return new Dom7([]); }\n        while (el.nextElementSibling) {\n            var next = el.nextElementSibling; // eslint-disable-line\n            if (selector) {\n                if ($(next).is(selector)) { nextEls.push(next); }\n            } else { nextEls.push(next); }\n            el = next;\n        }\n        return new Dom7(nextEls);\n    }\n    function prev(selector) {\n        if (this.length > 0) {\n            var el = this[0];\n            if (selector) {\n                if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n                    return new Dom7([el.previousElementSibling]);\n                }\n                return new Dom7([]);\n            }\n\n            if (el.previousElementSibling) { return new Dom7([el.previousElementSibling]); }\n            return new Dom7([]);\n        }\n        return new Dom7([]);\n    }\n    function prevAll(selector) {\n        var prevEls = [];\n        var el = this[0];\n        if (!el) { return new Dom7([]); }\n        while (el.previousElementSibling) {\n            var prev = el.previousElementSibling; // eslint-disable-line\n            if (selector) {\n                if ($(prev).is(selector)) { prevEls.push(prev); }\n            } else { prevEls.push(prev); }\n            el = prev;\n        }\n        return new Dom7(prevEls);\n    }\n    function parent(selector) {\n        var parents = []; // eslint-disable-line\n        for (var i = 0; i < this.length; i += 1) {\n            if (this[i].parentNode !== null) {\n                if (selector) {\n                    if ($(this[i].parentNode).is(selector)) { parents.push(this[i].parentNode); }\n                } else {\n                    parents.push(this[i].parentNode);\n                }\n            }\n        }\n        return $(unique(parents));\n    }\n    function parents(selector) {\n        var parents = []; // eslint-disable-line\n        for (var i = 0; i < this.length; i += 1) {\n            var parent = this[i].parentNode; // eslint-disable-line\n            while (parent) {\n                if (selector) {\n                    if ($(parent).is(selector)) { parents.push(parent); }\n                } else {\n                    parents.push(parent);\n                }\n                parent = parent.parentNode;\n            }\n        }\n        return $(unique(parents));\n    }\n    function closest(selector) {\n        var closest = this; // eslint-disable-line\n        if (typeof selector === 'undefined') {\n            return new Dom7([]);\n        }\n        if (!closest.is(selector)) {\n            closest = closest.parents(selector).eq(0);\n        }\n        return closest;\n    }\n    function find(selector) {\n        var foundElements = [];\n        for (var i = 0; i < this.length; i += 1) {\n            var found = this[i].querySelectorAll(selector);\n            for (var j = 0; j < found.length; j += 1) {\n                foundElements.push(found[j]);\n            }\n        }\n        return new Dom7(foundElements);\n    }\n    function children(selector) {\n        var children = []; // eslint-disable-line\n        for (var i = 0; i < this.length; i += 1) {\n            var childNodes = this[i].childNodes;\n\n            for (var j = 0; j < childNodes.length; j += 1) {\n                if (!selector) {\n                    if (childNodes[j].nodeType === 1) { children.push(childNodes[j]); }\n                } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {\n                    children.push(childNodes[j]);\n                }\n            }\n        }\n        return new Dom7(unique(children));\n    }\n    function remove() {\n        for (var i = 0; i < this.length; i += 1) {\n            if (this[i].parentNode) { this[i].parentNode.removeChild(this[i]); }\n        }\n        return this;\n    }\n    function add() {\n        var args = [], len = arguments.length;\n        while ( len-- ) args[ len ] = arguments[ len ];\n\n        var dom = this;\n        var i;\n        var j;\n        for (i = 0; i < args.length; i += 1) {\n            var toAdd = $(args[i]);\n            for (j = 0; j < toAdd.length; j += 1) {\n                dom[dom.length] = toAdd[j];\n                dom.length += 1;\n            }\n        }\n        return dom;\n    }\n\n    var Methods = {\n        addClass: addClass,\n        removeClass: removeClass,\n        hasClass: hasClass,\n        toggleClass: toggleClass,\n        attr: attr,\n        removeAttr: removeAttr,\n        data: data,\n        transform: transform,\n        transition: transition,\n        on: on,\n        off: off,\n        trigger: trigger,\n        transitionEnd: transitionEnd,\n        outerWidth: outerWidth,\n        outerHeight: outerHeight,\n        offset: offset,\n        css: css,\n        each: each,\n        html: html,\n        text: text,\n        is: is,\n        index: index,\n        eq: eq,\n        append: append,\n        prepend: prepend,\n        next: next,\n        nextAll: nextAll,\n        prev: prev,\n        prevAll: prevAll,\n        parent: parent,\n        parents: parents,\n        closest: closest,\n        find: find,\n        children: children,\n        remove: remove,\n        add: add,\n        styles: styles,\n    };\n\n    Object.keys(Methods).forEach(function (methodName) {\n        $.fn[methodName] = Methods[methodName];\n    });\n\n    var Utils = {\n        deleteProps: function deleteProps(obj) {\n            var object = obj;\n            Object.keys(object).forEach(function (key) {\n                try {\n                    object[key] = null;\n                } catch (e) {\n                    // no getter for object\n                }\n                try {\n                    delete object[key];\n                } catch (e) {\n                    // something got wrong\n                }\n            });\n        },\n        nextTick: function nextTick(callback, delay) {\n            if ( delay === void 0 ) delay = 0;\n\n            return setTimeout(callback, delay);\n        },\n        now: function now() {\n            return Date.now();\n        },\n        getTranslate: function getTranslate(el, axis) {\n            if ( axis === void 0 ) axis = 'x';\n\n            var matrix;\n            var curTransform;\n            var transformMatrix;\n\n            var curStyle = win.getComputedStyle(el, null);\n\n            if (win.WebKitCSSMatrix) {\n                curTransform = curStyle.transform || curStyle.webkitTransform;\n                if (curTransform.split(',').length > 6) {\n                    curTransform = curTransform.split(', ').map(function (a) { return a.replace(',', '.'); }).join(', ');\n                }\n                // Some old versions of Webkit choke when 'none' is passed; pass\n                // empty string instead in this case\n                transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n            } else {\n                transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n                matrix = transformMatrix.toString().split(',');\n            }\n\n            if (axis === 'x') {\n                // Latest Chrome and webkits Fix\n                if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m41; }\n                // Crazy IE10 Matrix\n                else if (matrix.length === 16) { curTransform = parseFloat(matrix[12]); }\n                // Normal Browsers\n                else { curTransform = parseFloat(matrix[4]); }\n            }\n            if (axis === 'y') {\n                // Latest Chrome and webkits Fix\n                if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m42; }\n                // Crazy IE10 Matrix\n                else if (matrix.length === 16) { curTransform = parseFloat(matrix[13]); }\n                // Normal Browsers\n                else { curTransform = parseFloat(matrix[5]); }\n            }\n            return curTransform || 0;\n        },\n        parseUrlQuery: function parseUrlQuery(url) {\n            var query = {};\n            var urlToParse = url || win.location.href;\n            var i;\n            var params;\n            var param;\n            var length;\n            if (typeof urlToParse === 'string' && urlToParse.length) {\n                urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n                params = urlToParse.split('&').filter(function (paramsPart) { return paramsPart !== ''; });\n                length = params.length;\n\n                for (i = 0; i < length; i += 1) {\n                    param = params[i].replace(/#\\S+/g, '').split('=');\n                    query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n                }\n            }\n            return query;\n        },\n        isObject: function isObject(o) {\n            return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n        },\n        extend: function extend() {\n            var args = [], len$1 = arguments.length;\n            while ( len$1-- ) args[ len$1 ] = arguments[ len$1 ];\n\n            var to = Object(args[0]);\n            for (var i = 1; i < args.length; i += 1) {\n                var nextSource = args[i];\n                if (nextSource !== undefined && nextSource !== null) {\n                    var keysArray = Object.keys(Object(nextSource));\n                    for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n                        var nextKey = keysArray[nextIndex];\n                        var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n                        if (desc !== undefined && desc.enumerable) {\n                            if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n                                Utils.extend(to[nextKey], nextSource[nextKey]);\n                            } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n                                to[nextKey] = {};\n                                Utils.extend(to[nextKey], nextSource[nextKey]);\n                            } else {\n                                to[nextKey] = nextSource[nextKey];\n                            }\n                        }\n                    }\n                }\n            }\n            return to;\n        },\n    };\n\n    var Support = (function Support() {\n        var testDiv = doc.createElement('div');\n        return {\n            touch: (win.Modernizr && win.Modernizr.touch === true) || (function checkTouch() {\n                return !!((win.navigator.maxTouchPoints > 0) || ('ontouchstart' in win) || (win.DocumentTouch && doc instanceof win.DocumentTouch));\n            }()),\n\n            pointerEvents: !!(win.navigator.pointerEnabled || win.PointerEvent || ('maxTouchPoints' in win.navigator)),\n            prefixedPointerEvents: !!win.navigator.msPointerEnabled,\n\n            transition: (function checkTransition() {\n                var style = testDiv.style;\n                return ('transition' in style || 'webkitTransition' in style || 'MozTransition' in style);\n            }()),\n            transforms3d: (win.Modernizr && win.Modernizr.csstransforms3d === true) || (function checkTransforms3d() {\n                var style = testDiv.style;\n                return ('webkitPerspective' in style || 'MozPerspective' in style || 'OPerspective' in style || 'MsPerspective' in style || 'perspective' in style);\n            }()),\n\n            flexbox: (function checkFlexbox() {\n                var style = testDiv.style;\n                var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n                for (var i = 0; i < styles.length; i += 1) {\n                    if (styles[i] in style) { return true; }\n                }\n                return false;\n            }()),\n\n            observer: (function checkObserver() {\n                return ('MutationObserver' in win || 'WebkitMutationObserver' in win);\n            }()),\n\n            passiveListener: (function checkPassiveListener() {\n                var supportsPassive = false;\n                try {\n                    var opts = Object.defineProperty({}, 'passive', {\n                        // eslint-disable-next-line\n                        get: function get() {\n                            supportsPassive = true;\n                        },\n                    });\n                    win.addEventListener('testPassiveListener', null, opts);\n                } catch (e) {\n                    // No support\n                }\n                return supportsPassive;\n            }()),\n\n            gestures: (function checkGestures() {\n                return 'ongesturestart' in win;\n            }()),\n        };\n    }());\n\n    var SwiperClass = function SwiperClass(params) {\n        if ( params === void 0 ) params = {};\n\n        var self = this;\n        self.params = params;\n\n        // Events\n        self.eventsListeners = {};\n\n        if (self.params && self.params.on) {\n            Object.keys(self.params.on).forEach(function (eventName) {\n                self.on(eventName, self.params.on[eventName]);\n            });\n        }\n    };\n\n    var staticAccessors = { components: { configurable: true } };\n\n    SwiperClass.prototype.on = function on (events, handler, priority) {\n        var self = this;\n        if (typeof handler !== 'function') { return self; }\n        var method = priority ? 'unshift' : 'push';\n        events.split(' ').forEach(function (event) {\n            if (!self.eventsListeners[event]) { self.eventsListeners[event] = []; }\n            self.eventsListeners[event][method](handler);\n        });\n        return self;\n    };\n\n    SwiperClass.prototype.once = function once (events, handler, priority) {\n        var self = this;\n        if (typeof handler !== 'function') { return self; }\n        function onceHandler() {\n            var args = [], len = arguments.length;\n            while ( len-- ) args[ len ] = arguments[ len ];\n\n            handler.apply(self, args);\n            self.off(events, onceHandler);\n        }\n        return self.on(events, onceHandler, priority);\n    };\n\n    SwiperClass.prototype.off = function off (events, handler) {\n        var self = this;\n        if (!self.eventsListeners) { return self; }\n        events.split(' ').forEach(function (event) {\n            if (typeof handler === 'undefined') {\n                self.eventsListeners[event] = [];\n            } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {\n                self.eventsListeners[event].forEach(function (eventHandler, index) {\n                    if (eventHandler === handler) {\n                        self.eventsListeners[event].splice(index, 1);\n                    }\n                });\n            }\n        });\n        return self;\n    };\n\n    SwiperClass.prototype.emit = function emit () {\n        var args = [], len = arguments.length;\n        while ( len-- ) args[ len ] = arguments[ len ];\n\n        var self = this;\n        if (!self.eventsListeners) { return self; }\n        var events;\n        var data;\n        var context;\n        if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n            events = args[0];\n            data = args.slice(1, args.length);\n            context = self;\n        } else {\n            events = args[0].events;\n            data = args[0].data;\n            context = args[0].context || self;\n        }\n        var eventsArray = Array.isArray(events) ? events : events.split(' ');\n        eventsArray.forEach(function (event) {\n            if (self.eventsListeners && self.eventsListeners[event]) {\n                var handlers = [];\n                self.eventsListeners[event].forEach(function (eventHandler) {\n                    handlers.push(eventHandler);\n                });\n                handlers.forEach(function (eventHandler) {\n                    eventHandler.apply(context, data);\n                });\n            }\n        });\n        return self;\n    };\n\n    SwiperClass.prototype.useModulesParams = function useModulesParams (instanceParams) {\n        var instance = this;\n        if (!instance.modules) { return; }\n        Object.keys(instance.modules).forEach(function (moduleName) {\n            var module = instance.modules[moduleName];\n            // Extend params\n            if (module.params) {\n                Utils.extend(instanceParams, module.params);\n            }\n        });\n    };\n\n    SwiperClass.prototype.useModules = function useModules (modulesParams) {\n        if ( modulesParams === void 0 ) modulesParams = {};\n\n        var instance = this;\n        if (!instance.modules) { return; }\n        Object.keys(instance.modules).forEach(function (moduleName) {\n            var module = instance.modules[moduleName];\n            var moduleParams = modulesParams[moduleName] || {};\n            // Extend instance methods and props\n            if (module.instance) {\n                Object.keys(module.instance).forEach(function (modulePropName) {\n                    var moduleProp = module.instance[modulePropName];\n                    if (typeof moduleProp === 'function') {\n                        instance[modulePropName] = moduleProp.bind(instance);\n                    } else {\n                        instance[modulePropName] = moduleProp;\n                    }\n                });\n            }\n            // Add event listeners\n            if (module.on && instance.on) {\n                Object.keys(module.on).forEach(function (moduleEventName) {\n                    instance.on(moduleEventName, module.on[moduleEventName]);\n                });\n            }\n\n            // Module create callback\n            if (module.create) {\n                module.create.bind(instance)(moduleParams);\n            }\n        });\n    };\n\n    staticAccessors.components.set = function (components) {\n        var Class = this;\n        if (!Class.use) { return; }\n        Class.use(components);\n    };\n\n    SwiperClass.installModule = function installModule (module) {\n        var params = [], len = arguments.length - 1;\n        while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];\n\n        var Class = this;\n        if (!Class.prototype.modules) { Class.prototype.modules = {}; }\n        var name = module.name || (((Object.keys(Class.prototype.modules).length) + \"_\" + (Utils.now())));\n        Class.prototype.modules[name] = module;\n        // Prototype\n        if (module.proto) {\n            Object.keys(module.proto).forEach(function (key) {\n                Class.prototype[key] = module.proto[key];\n            });\n        }\n        // Class\n        if (module.static) {\n            Object.keys(module.static).forEach(function (key) {\n                Class[key] = module.static[key];\n            });\n        }\n        // Callback\n        if (module.install) {\n            module.install.apply(Class, params);\n        }\n        return Class;\n    };\n\n    SwiperClass.use = function use (module) {\n        var params = [], len = arguments.length - 1;\n        while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];\n\n        var Class = this;\n        if (Array.isArray(module)) {\n            module.forEach(function (m) { return Class.installModule(m); });\n            return Class;\n        }\n        return Class.installModule.apply(Class, [ module ].concat( params ));\n    };\n\n    Object.defineProperties( SwiperClass, staticAccessors );\n\n    function updateSize () {\n        var swiper = this;\n        var width;\n        var height;\n        var $el = swiper.$el;\n        if (typeof swiper.params.width !== 'undefined') {\n            width = swiper.params.width;\n        } else {\n            width = $el[0].clientWidth;\n        }\n        if (typeof swiper.params.height !== 'undefined') {\n            height = swiper.params.height;\n        } else {\n            height = $el[0].clientHeight;\n        }\n        if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n            return;\n        }\n\n        // Subtract paddings\n        width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n        height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n        Utils.extend(swiper, {\n            width: width,\n            height: height,\n            size: swiper.isHorizontal() ? width : height,\n        });\n    }\n\n    function updateSlides () {\n        var swiper = this;\n        var params = swiper.params;\n\n        var $wrapperEl = swiper.$wrapperEl;\n        var swiperSize = swiper.size;\n        var rtl = swiper.rtlTranslate;\n        var wrongRTL = swiper.wrongRTL;\n        var isVirtual = swiper.virtual && params.virtual.enabled;\n        var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n        var slides = $wrapperEl.children((\".\" + (swiper.params.slideClass)));\n        var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n        var snapGrid = [];\n        var slidesGrid = [];\n        var slidesSizesGrid = [];\n\n        var offsetBefore = params.slidesOffsetBefore;\n        if (typeof offsetBefore === 'function') {\n            offsetBefore = params.slidesOffsetBefore.call(swiper);\n        }\n\n        var offsetAfter = params.slidesOffsetAfter;\n        if (typeof offsetAfter === 'function') {\n            offsetAfter = params.slidesOffsetAfter.call(swiper);\n        }\n\n        var previousSnapGridLength = swiper.snapGrid.length;\n        var previousSlidesGridLength = swiper.snapGrid.length;\n\n        var spaceBetween = params.spaceBetween;\n        var slidePosition = -offsetBefore;\n        var prevSlideSize = 0;\n        var index = 0;\n        if (typeof swiperSize === 'undefined') {\n            return;\n        }\n        if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n            spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n        }\n\n        swiper.virtualSize = -spaceBetween;\n\n        // reset margins\n        if (rtl) { slides.css({ marginLeft: '', marginTop: '' }); }\n        else { slides.css({ marginRight: '', marginBottom: '' }); }\n\n        var slidesNumberEvenToRows;\n        if (params.slidesPerColumn > 1) {\n            if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n                slidesNumberEvenToRows = slidesLength;\n            } else {\n                slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n            }\n            if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n                slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n            }\n        }\n\n        // Calc slides\n        var slideSize;\n        var slidesPerColumn = params.slidesPerColumn;\n        var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n        var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n        for (var i = 0; i < slidesLength; i += 1) {\n            slideSize = 0;\n            var slide = slides.eq(i);\n            if (params.slidesPerColumn > 1) {\n                // Set slides order\n                var newSlideOrderIndex = (void 0);\n                var column = (void 0);\n                var row = (void 0);\n                if (params.slidesPerColumnFill === 'column') {\n                    column = Math.floor(i / slidesPerColumn);\n                    row = i - (column * slidesPerColumn);\n                    if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n                        row += 1;\n                        if (row >= slidesPerColumn) {\n                            row = 0;\n                            column += 1;\n                        }\n                    }\n                    newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n                    slide\n                        .css({\n                            '-webkit-box-ordinal-group': newSlideOrderIndex,\n                            '-moz-box-ordinal-group': newSlideOrderIndex,\n                            '-ms-flex-order': newSlideOrderIndex,\n                            '-webkit-order': newSlideOrderIndex,\n                            order: newSlideOrderIndex,\n                        });\n                } else {\n                    row = Math.floor(i / slidesPerRow);\n                    column = i - (row * slidesPerRow);\n                }\n                slide\n                    .css(\n                        (\"margin-\" + (swiper.isHorizontal() ? 'top' : 'left')),\n                        (row !== 0 && params.spaceBetween) && (((params.spaceBetween) + \"px\"))\n                    )\n                    .attr('data-swiper-column', column)\n                    .attr('data-swiper-row', row);\n            }\n            if (slide.css('display') === 'none') { continue; } // eslint-disable-line\n\n            if (params.slidesPerView === 'auto') {\n                var slideStyles = win.getComputedStyle(slide[0], null);\n                var currentTransform = slide[0].style.transform;\n                var currentWebKitTransform = slide[0].style.webkitTransform;\n                if (currentTransform) {\n                    slide[0].style.transform = 'none';\n                }\n                if (currentWebKitTransform) {\n                    slide[0].style.webkitTransform = 'none';\n                }\n                if (params.roundLengths) {\n                    slideSize = swiper.isHorizontal()\n                        ? slide.outerWidth(true)\n                        : slide.outerHeight(true);\n                } else {\n                    // eslint-disable-next-line\n                    if (swiper.isHorizontal()) {\n                        var width = parseFloat(slideStyles.getPropertyValue('width'));\n                        var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));\n                        var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));\n                        var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));\n                        var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));\n                        var boxSizing = slideStyles.getPropertyValue('box-sizing');\n                        if (boxSizing && boxSizing === 'border-box') {\n                            slideSize = width + marginLeft + marginRight;\n                        } else {\n                            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n                        }\n                    } else {\n                        var height = parseFloat(slideStyles.getPropertyValue('height'));\n                        var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));\n                        var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));\n                        var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));\n                        var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n                        var boxSizing$1 = slideStyles.getPropertyValue('box-sizing');\n                        if (boxSizing$1 && boxSizing$1 === 'border-box') {\n                            slideSize = height + marginTop + marginBottom;\n                        } else {\n                            slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n                        }\n                    }\n                }\n                if (currentTransform) {\n                    slide[0].style.transform = currentTransform;\n                }\n                if (currentWebKitTransform) {\n                    slide[0].style.webkitTransform = currentWebKitTransform;\n                }\n                if (params.roundLengths) { slideSize = Math.floor(slideSize); }\n            } else {\n                slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;\n                if (params.roundLengths) { slideSize = Math.floor(slideSize); }\n\n                if (slides[i]) {\n                    if (swiper.isHorizontal()) {\n                        slides[i].style.width = slideSize + \"px\";\n                    } else {\n                        slides[i].style.height = slideSize + \"px\";\n                    }\n                }\n            }\n            if (slides[i]) {\n                slides[i].swiperSlideSize = slideSize;\n            }\n            slidesSizesGrid.push(slideSize);\n\n\n            if (params.centeredSlides) {\n                slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;\n                if (prevSlideSize === 0 && i !== 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }\n                if (i === 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }\n                if (Math.abs(slidePosition) < 1 / 1000) { slidePosition = 0; }\n                if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }\n                if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }\n                slidesGrid.push(slidePosition);\n            } else {\n                if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }\n                if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }\n                slidesGrid.push(slidePosition);\n                slidePosition = slidePosition + slideSize + spaceBetween;\n            }\n\n            swiper.virtualSize += slideSize + spaceBetween;\n\n            prevSlideSize = slideSize;\n\n            index += 1;\n        }\n        swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n        var newSlidesGrid;\n\n        if (\n            rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n            $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") });\n        }\n        if (!Support.flexbox || params.setWrapperSize) {\n            if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n            else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n        }\n\n        if (params.slidesPerColumn > 1) {\n            swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n            swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n            if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n            else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n            if (params.centeredSlides) {\n                newSlidesGrid = [];\n                for (var i$1 = 0; i$1 < snapGrid.length; i$1 += 1) {\n                    var slidesGridItem = snapGrid[i$1];\n                    if (params.roundLengths) { slidesGridItem = Math.floor(slidesGridItem); }\n                    if (snapGrid[i$1] < swiper.virtualSize + snapGrid[0]) { newSlidesGrid.push(slidesGridItem); }\n                }\n                snapGrid = newSlidesGrid;\n            }\n        }\n\n        // Remove last grid elements depending on width\n        if (!params.centeredSlides) {\n            newSlidesGrid = [];\n            for (var i$2 = 0; i$2 < snapGrid.length; i$2 += 1) {\n                var slidesGridItem$1 = snapGrid[i$2];\n                if (params.roundLengths) { slidesGridItem$1 = Math.floor(slidesGridItem$1); }\n                if (snapGrid[i$2] <= swiper.virtualSize - swiperSize) {\n                    newSlidesGrid.push(slidesGridItem$1);\n                }\n            }\n            snapGrid = newSlidesGrid;\n            if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n                snapGrid.push(swiper.virtualSize - swiperSize);\n            }\n        }\n        if (snapGrid.length === 0) { snapGrid = [0]; }\n\n        if (params.spaceBetween !== 0) {\n            if (swiper.isHorizontal()) {\n                if (rtl) { slides.css({ marginLeft: (spaceBetween + \"px\") }); }\n                else { slides.css({ marginRight: (spaceBetween + \"px\") }); }\n            } else { slides.css({ marginBottom: (spaceBetween + \"px\") }); }\n        }\n\n        if (params.centerInsufficientSlides) {\n            var allSlidesSize = 0;\n            slidesSizesGrid.forEach(function (slideSizeValue) {\n                allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n            });\n            allSlidesSize -= params.spaceBetween;\n            if (allSlidesSize < swiperSize) {\n                var allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n                snapGrid.forEach(function (snap, snapIndex) {\n                    snapGrid[snapIndex] = snap - allSlidesOffset;\n                });\n                slidesGrid.forEach(function (snap, snapIndex) {\n                    slidesGrid[snapIndex] = snap + allSlidesOffset;\n                });\n            }\n        }\n\n        Utils.extend(swiper, {\n            slides: slides,\n            snapGrid: snapGrid,\n            slidesGrid: slidesGrid,\n            slidesSizesGrid: slidesSizesGrid,\n        });\n\n        if (slidesLength !== previousSlidesLength) {\n            swiper.emit('slidesLengthChange');\n        }\n        if (snapGrid.length !== previousSnapGridLength) {\n            if (swiper.params.watchOverflow) { swiper.checkOverflow(); }\n            swiper.emit('snapGridLengthChange');\n        }\n        if (slidesGrid.length !== previousSlidesGridLength) {\n            swiper.emit('slidesGridLengthChange');\n        }\n\n        if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n            swiper.updateSlidesOffset();\n        }\n    }\n\n    function updateAutoHeight (speed) {\n        var swiper = this;\n        var activeSlides = [];\n        var newHeight = 0;\n        var i;\n        if (typeof speed === 'number') {\n            swiper.setTransition(speed);\n        } else if (speed === true) {\n            swiper.setTransition(swiper.params.speed);\n        }\n        // Find slides currently in view\n        if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n            for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n                var index = swiper.activeIndex + i;\n                if (index > swiper.slides.length) { break; }\n                activeSlides.push(swiper.slides.eq(index)[0]);\n            }\n        } else {\n            activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n        }\n\n        // Find new height from highest slide in view\n        for (i = 0; i < activeSlides.length; i += 1) {\n            if (typeof activeSlides[i] !== 'undefined') {\n                var height = activeSlides[i].offsetHeight;\n                newHeight = height > newHeight ? height : newHeight;\n            }\n        }\n\n        // Update Height\n        if (newHeight) { swiper.$wrapperEl.css('height', (newHeight + \"px\")); }\n    }\n\n    function updateSlidesOffset () {\n        var swiper = this;\n        var slides = swiper.slides;\n        for (var i = 0; i < slides.length; i += 1) {\n            slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n        }\n    }\n\n    function updateSlidesProgress (translate) {\n        if ( translate === void 0 ) translate = (this && this.translate) || 0;\n\n        var swiper = this;\n        var params = swiper.params;\n\n        var slides = swiper.slides;\n        var rtl = swiper.rtlTranslate;\n\n        if (slides.length === 0) { return; }\n        if (typeof slides[0].swiperSlideOffset === 'undefined') { swiper.updateSlidesOffset(); }\n\n        var offsetCenter = -translate;\n        if (rtl) { offsetCenter = translate; }\n\n        // Visible Slides\n        slides.removeClass(params.slideVisibleClass);\n\n        swiper.visibleSlidesIndexes = [];\n        swiper.visibleSlides = [];\n\n        for (var i = 0; i < slides.length; i += 1) {\n            var slide = slides[i];\n            var slideProgress = (\n                (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n            ) / (slide.swiperSlideSize + params.spaceBetween);\n            if (params.watchSlidesVisibility) {\n                var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n                var slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n                var isVisible = (slideBefore >= 0 && slideBefore < swiper.size)\n                    || (slideAfter > 0 && slideAfter <= swiper.size)\n                    || (slideBefore <= 0 && slideAfter >= swiper.size);\n                if (isVisible) {\n                    swiper.visibleSlides.push(slide);\n                    swiper.visibleSlidesIndexes.push(i);\n                    slides.eq(i).addClass(params.slideVisibleClass);\n                }\n            }\n            slide.progress = rtl ? -slideProgress : slideProgress;\n        }\n        swiper.visibleSlides = $(swiper.visibleSlides);\n    }\n\n    function updateProgress (translate) {\n        if ( translate === void 0 ) translate = (this && this.translate) || 0;\n\n        var swiper = this;\n        var params = swiper.params;\n\n        var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n        var progress = swiper.progress;\n        var isBeginning = swiper.isBeginning;\n        var isEnd = swiper.isEnd;\n        var wasBeginning = isBeginning;\n        var wasEnd = isEnd;\n        if (translatesDiff === 0) {\n            progress = 0;\n            isBeginning = true;\n            isEnd = true;\n        } else {\n            progress = (translate - swiper.minTranslate()) / (translatesDiff);\n            isBeginning = progress <= 0;\n            isEnd = progress >= 1;\n        }\n        Utils.extend(swiper, {\n            progress: progress,\n            isBeginning: isBeginning,\n            isEnd: isEnd,\n        });\n\n        if (params.watchSlidesProgress || params.watchSlidesVisibility) { swiper.updateSlidesProgress(translate); }\n\n        if (isBeginning && !wasBeginning) {\n            swiper.emit('reachBeginning toEdge');\n        }\n        if (isEnd && !wasEnd) {\n            swiper.emit('reachEnd toEdge');\n        }\n        if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n            swiper.emit('fromEdge');\n        }\n\n        swiper.emit('progress', progress);\n    }\n\n    function updateSlidesClasses () {\n        var swiper = this;\n\n        var slides = swiper.slides;\n        var params = swiper.params;\n        var $wrapperEl = swiper.$wrapperEl;\n        var activeIndex = swiper.activeIndex;\n        var realIndex = swiper.realIndex;\n        var isVirtual = swiper.virtual && params.virtual.enabled;\n\n        slides.removeClass(((params.slideActiveClass) + \" \" + (params.slideNextClass) + \" \" + (params.slidePrevClass) + \" \" + (params.slideDuplicateActiveClass) + \" \" + (params.slideDuplicateNextClass) + \" \" + (params.slideDuplicatePrevClass)));\n\n        var activeSlide;\n        if (isVirtual) {\n            activeSlide = swiper.$wrapperEl.find((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + activeIndex + \"\\\"]\"));\n        } else {\n            activeSlide = slides.eq(activeIndex);\n        }\n\n        // Active classes\n        activeSlide.addClass(params.slideActiveClass);\n\n        if (params.loop) {\n            // Duplicate to all looped slides\n            if (activeSlide.hasClass(params.slideDuplicateClass)) {\n                $wrapperEl\n                    .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n                    .addClass(params.slideDuplicateActiveClass);\n            } else {\n                $wrapperEl\n                    .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n                    .addClass(params.slideDuplicateActiveClass);\n            }\n        }\n        // Next Slide\n        var nextSlide = activeSlide.nextAll((\".\" + (params.slideClass))).eq(0).addClass(params.slideNextClass);\n        if (params.loop && nextSlide.length === 0) {\n            nextSlide = slides.eq(0);\n            nextSlide.addClass(params.slideNextClass);\n        }\n        // Prev Slide\n        var prevSlide = activeSlide.prevAll((\".\" + (params.slideClass))).eq(0).addClass(params.slidePrevClass);\n        if (params.loop && prevSlide.length === 0) {\n            prevSlide = slides.eq(-1);\n            prevSlide.addClass(params.slidePrevClass);\n        }\n        if (params.loop) {\n            // Duplicate to all looped slides\n            if (nextSlide.hasClass(params.slideDuplicateClass)) {\n                $wrapperEl\n                    .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n                    .addClass(params.slideDuplicateNextClass);\n            } else {\n                $wrapperEl\n                    .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n                    .addClass(params.slideDuplicateNextClass);\n            }\n            if (prevSlide.hasClass(params.slideDuplicateClass)) {\n                $wrapperEl\n                    .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n                    .addClass(params.slideDuplicatePrevClass);\n            } else {\n                $wrapperEl\n                    .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n                    .addClass(params.slideDuplicatePrevClass);\n            }\n        }\n    }\n\n    function updateActiveIndex (newActiveIndex) {\n        var swiper = this;\n        var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n        var slidesGrid = swiper.slidesGrid;\n        var snapGrid = swiper.snapGrid;\n        var params = swiper.params;\n        var previousIndex = swiper.activeIndex;\n        var previousRealIndex = swiper.realIndex;\n        var previousSnapIndex = swiper.snapIndex;\n        var activeIndex = newActiveIndex;\n        var snapIndex;\n        if (typeof activeIndex === 'undefined') {\n            for (var i = 0; i < slidesGrid.length; i += 1) {\n                if (typeof slidesGrid[i + 1] !== 'undefined') {\n                    if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {\n                        activeIndex = i;\n                    } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n                        activeIndex = i + 1;\n                    }\n                } else if (translate >= slidesGrid[i]) {\n                    activeIndex = i;\n                }\n            }\n            // Normalize slideIndex\n            if (params.normalizeSlideIndex) {\n                if (activeIndex < 0 || typeof activeIndex === 'undefined') { activeIndex = 0; }\n            }\n        }\n        if (snapGrid.indexOf(translate) >= 0) {\n            snapIndex = snapGrid.indexOf(translate);\n        } else {\n            snapIndex = Math.floor(activeIndex / params.slidesPerGroup);\n        }\n        if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }\n        if (activeIndex === previousIndex) {\n            if (snapIndex !== previousSnapIndex) {\n                swiper.snapIndex = snapIndex;\n                swiper.emit('snapIndexChange');\n            }\n            return;\n        }\n\n        // Get real index\n        var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n        Utils.extend(swiper, {\n            snapIndex: snapIndex,\n            realIndex: realIndex,\n            previousIndex: previousIndex,\n            activeIndex: activeIndex,\n        });\n        swiper.emit('activeIndexChange');\n        swiper.emit('snapIndexChange');\n        if (previousRealIndex !== realIndex) {\n            swiper.emit('realIndexChange');\n        }\n        swiper.emit('slideChange');\n    }\n\n    function updateClickedSlide (e) {\n        var swiper = this;\n        var params = swiper.params;\n        var slide = $(e.target).closest((\".\" + (params.slideClass)))[0];\n        var slideFound = false;\n        if (slide) {\n            for (var i = 0; i < swiper.slides.length; i += 1) {\n                if (swiper.slides[i] === slide) { slideFound = true; }\n            }\n        }\n\n        if (slide && slideFound) {\n            swiper.clickedSlide = slide;\n            if (swiper.virtual && swiper.params.virtual.enabled) {\n                swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n            } else {\n                swiper.clickedIndex = $(slide).index();\n            }\n        } else {\n            swiper.clickedSlide = undefined;\n            swiper.clickedIndex = undefined;\n            return;\n        }\n        if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n            swiper.slideToClickedSlide();\n        }\n    }\n\n    var update = {\n        updateSize: updateSize,\n        updateSlides: updateSlides,\n        updateAutoHeight: updateAutoHeight,\n        updateSlidesOffset: updateSlidesOffset,\n        updateSlidesProgress: updateSlidesProgress,\n        updateProgress: updateProgress,\n        updateSlidesClasses: updateSlidesClasses,\n        updateActiveIndex: updateActiveIndex,\n        updateClickedSlide: updateClickedSlide,\n    };\n\n    function getTranslate (axis) {\n        if ( axis === void 0 ) axis = this.isHorizontal() ? 'x' : 'y';\n\n        var swiper = this;\n\n        var params = swiper.params;\n        var rtl = swiper.rtlTranslate;\n        var translate = swiper.translate;\n        var $wrapperEl = swiper.$wrapperEl;\n\n        if (params.virtualTranslate) {\n            return rtl ? -translate : translate;\n        }\n\n        var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n        if (rtl) { currentTranslate = -currentTranslate; }\n\n        return currentTranslate || 0;\n    }\n\n    function setTranslate (translate, byController) {\n        var swiper = this;\n        var rtl = swiper.rtlTranslate;\n        var params = swiper.params;\n        var $wrapperEl = swiper.$wrapperEl;\n        var progress = swiper.progress;\n        var x = 0;\n        var y = 0;\n        var z = 0;\n\n        if (swiper.isHorizontal()) {\n            x = rtl ? -translate : translate;\n        } else {\n            y = translate;\n        }\n\n        if (params.roundLengths) {\n            x = Math.floor(x);\n            y = Math.floor(y);\n        }\n\n        if (!params.virtualTranslate) {\n            if (Support.transforms3d) { $wrapperEl.transform((\"translate3d(\" + x + \"px, \" + y + \"px, \" + z + \"px)\")); }\n            else { $wrapperEl.transform((\"translate(\" + x + \"px, \" + y + \"px)\")); }\n        }\n        swiper.previousTranslate = swiper.translate;\n        swiper.translate = swiper.isHorizontal() ? x : y;\n\n        // Check if we need to update progress\n        var newProgress;\n        var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n        if (translatesDiff === 0) {\n            newProgress = 0;\n        } else {\n            newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\n        }\n        if (newProgress !== progress) {\n            swiper.updateProgress(translate);\n        }\n\n        swiper.emit('setTranslate', swiper.translate, byController);\n    }\n\n    function minTranslate () {\n        return (-this.snapGrid[0]);\n    }\n\n    function maxTranslate () {\n        return (-this.snapGrid[this.snapGrid.length - 1]);\n    }\n\n    var translate = {\n        getTranslate: getTranslate,\n        setTranslate: setTranslate,\n        minTranslate: minTranslate,\n        maxTranslate: maxTranslate,\n    };\n\n    function setTransition (duration, byController) {\n        var swiper = this;\n\n        swiper.$wrapperEl.transition(duration);\n\n        swiper.emit('setTransition', duration, byController);\n    }\n\n    function transitionStart (runCallbacks, direction) {\n        if ( runCallbacks === void 0 ) runCallbacks = true;\n\n        var swiper = this;\n        var activeIndex = swiper.activeIndex;\n        var params = swiper.params;\n        var previousIndex = swiper.previousIndex;\n        if (params.autoHeight) {\n            swiper.updateAutoHeight();\n        }\n\n        var dir = direction;\n        if (!dir) {\n            if (activeIndex > previousIndex) { dir = 'next'; }\n            else if (activeIndex < previousIndex) { dir = 'prev'; }\n            else { dir = 'reset'; }\n        }\n\n        swiper.emit('transitionStart');\n\n        if (runCallbacks && activeIndex !== previousIndex) {\n            if (dir === 'reset') {\n                swiper.emit('slideResetTransitionStart');\n                return;\n            }\n            swiper.emit('slideChangeTransitionStart');\n            if (dir === 'next') {\n                swiper.emit('slideNextTransitionStart');\n            } else {\n                swiper.emit('slidePrevTransitionStart');\n            }\n        }\n    }\n\n    function transitionEnd$1 (runCallbacks, direction) {\n        if ( runCallbacks === void 0 ) runCallbacks = true;\n\n        var swiper = this;\n        var activeIndex = swiper.activeIndex;\n        var previousIndex = swiper.previousIndex;\n        swiper.animating = false;\n        swiper.setTransition(0);\n\n        var dir = direction;\n        if (!dir) {\n            if (activeIndex > previousIndex) { dir = 'next'; }\n            else if (activeIndex < previousIndex) { dir = 'prev'; }\n            else { dir = 'reset'; }\n        }\n\n        swiper.emit('transitionEnd');\n\n        if (runCallbacks && activeIndex !== previousIndex) {\n            if (dir === 'reset') {\n                swiper.emit('slideResetTransitionEnd');\n                return;\n            }\n            swiper.emit('slideChangeTransitionEnd');\n            if (dir === 'next') {\n                swiper.emit('slideNextTransitionEnd');\n            } else {\n                swiper.emit('slidePrevTransitionEnd');\n            }\n        }\n    }\n\n    var transition$1 = {\n        setTransition: setTransition,\n        transitionStart: transitionStart,\n        transitionEnd: transitionEnd$1,\n    };\n\n    function slideTo (index, speed, runCallbacks, internal) {\n        if ( index === void 0 ) index = 0;\n        if ( speed === void 0 ) speed = this.params.speed;\n        if ( runCallbacks === void 0 ) runCallbacks = true;\n\n        var swiper = this;\n        var slideIndex = index;\n        if (slideIndex < 0) { slideIndex = 0; }\n\n        var params = swiper.params;\n        var snapGrid = swiper.snapGrid;\n        var slidesGrid = swiper.slidesGrid;\n        var previousIndex = swiper.previousIndex;\n        var activeIndex = swiper.activeIndex;\n        var rtl = swiper.rtlTranslate;\n        if (swiper.animating && params.preventInteractionOnTransition) {\n            return false;\n        }\n\n        var snapIndex = Math.floor(slideIndex / params.slidesPerGroup);\n        if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }\n\n        if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n            swiper.emit('beforeSlideChangeStart');\n        }\n\n        var translate = -snapGrid[snapIndex];\n\n        // Update progress\n        swiper.updateProgress(translate);\n\n        // Normalize slideIndex\n        if (params.normalizeSlideIndex) {\n            for (var i = 0; i < slidesGrid.length; i += 1) {\n                if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n                    slideIndex = i;\n                }\n            }\n        }\n        // Directions locks\n        if (swiper.initialized && slideIndex !== activeIndex) {\n            if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n                return false;\n            }\n            if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n                if ((activeIndex || 0) !== slideIndex) { return false; }\n            }\n        }\n\n        var direction;\n        if (slideIndex > activeIndex) { direction = 'next'; }\n        else if (slideIndex < activeIndex) { direction = 'prev'; }\n        else { direction = 'reset'; }\n\n\n        // Update Index\n        if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n            swiper.updateActiveIndex(slideIndex);\n            // Update Height\n            if (params.autoHeight) {\n                swiper.updateAutoHeight();\n            }\n            swiper.updateSlidesClasses();\n            if (params.effect !== 'slide') {\n                swiper.setTranslate(translate);\n            }\n            if (direction !== 'reset') {\n                swiper.transitionStart(runCallbacks, direction);\n                swiper.transitionEnd(runCallbacks, direction);\n            }\n            return false;\n        }\n\n        if (speed === 0 || !Support.transition) {\n            swiper.setTransition(0);\n            swiper.setTranslate(translate);\n            swiper.updateActiveIndex(slideIndex);\n            swiper.updateSlidesClasses();\n            swiper.emit('beforeTransitionStart', speed, internal);\n            swiper.transitionStart(runCallbacks, direction);\n            swiper.transitionEnd(runCallbacks, direction);\n        } else {\n            swiper.setTransition(speed);\n            swiper.setTranslate(translate);\n            swiper.updateActiveIndex(slideIndex);\n            swiper.updateSlidesClasses();\n            swiper.emit('beforeTransitionStart', speed, internal);\n            swiper.transitionStart(runCallbacks, direction);\n            if (!swiper.animating) {\n                swiper.animating = true;\n                if (!swiper.onSlideToWrapperTransitionEnd) {\n                    swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n                        if (!swiper || swiper.destroyed) { return; }\n                        if (e.target !== this) { return; }\n                        swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n                        swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n                        swiper.onSlideToWrapperTransitionEnd = null;\n                        delete swiper.onSlideToWrapperTransitionEnd;\n                        swiper.transitionEnd(runCallbacks, direction);\n                    };\n                }\n                swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n                swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n            }\n        }\n\n        return true;\n    }\n\n    function slideToLoop (index, speed, runCallbacks, internal) {\n        if ( index === void 0 ) index = 0;\n        if ( speed === void 0 ) speed = this.params.speed;\n        if ( runCallbacks === void 0 ) runCallbacks = true;\n\n        var swiper = this;\n        var newIndex = index;\n        if (swiper.params.loop) {\n            newIndex += swiper.loopedSlides;\n        }\n\n        return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n    }\n\n    /* eslint no-unused-vars: \"off\" */\n    function slideNext (speed, runCallbacks, internal) {\n        if ( speed === void 0 ) speed = this.params.speed;\n        if ( runCallbacks === void 0 ) runCallbacks = true;\n\n        var swiper = this;\n        var params = swiper.params;\n        var animating = swiper.animating;\n        if (params.loop) {\n            if (animating) { return false; }\n            swiper.loopFix();\n            // eslint-disable-next-line\n            swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n            return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);\n        }\n        return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);\n    }\n\n    /* eslint no-unused-vars: \"off\" */\n    function slidePrev (speed, runCallbacks, internal) {\n        if ( speed === void 0 ) speed = this.params.speed;\n        if ( runCallbacks === void 0 ) runCallbacks = true;\n\n        var swiper = this;\n        var params = swiper.params;\n        var animating = swiper.animating;\n        var snapGrid = swiper.snapGrid;\n        var slidesGrid = swiper.slidesGrid;\n        var rtlTranslate = swiper.rtlTranslate;\n\n        if (params.loop) {\n            if (animating) { return false; }\n            swiper.loopFix();\n            // eslint-disable-next-line\n            swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n        }\n        var translate = rtlTranslate ? swiper.translate : -swiper.translate;\n        function normalize(val) {\n            if (val < 0) { return -Math.floor(Math.abs(val)); }\n            return Math.floor(val);\n        }\n        var normalizedTranslate = normalize(translate);\n        var normalizedSnapGrid = snapGrid.map(function (val) { return normalize(val); });\n        var normalizedSlidesGrid = slidesGrid.map(function (val) { return normalize(val); });\n\n        var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n        var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n        var prevIndex;\n        if (typeof prevSnap !== 'undefined') {\n            prevIndex = slidesGrid.indexOf(prevSnap);\n            if (prevIndex < 0) { prevIndex = swiper.activeIndex - 1; }\n        }\n        return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n    }\n\n    /* eslint no-unused-vars: \"off\" */\n    function slideReset (speed, runCallbacks, internal) {\n        if ( speed === void 0 ) speed = this.params.speed;\n        if ( runCallbacks === void 0 ) runCallbacks = true;\n\n        var swiper = this;\n        return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n    }\n\n    /* eslint no-unused-vars: \"off\" */\n    function slideToClosest (speed, runCallbacks, internal) {\n        if ( speed === void 0 ) speed = this.params.speed;\n        if ( runCallbacks === void 0 ) runCallbacks = true;\n\n        var swiper = this;\n        var index = swiper.activeIndex;\n        var snapIndex = Math.floor(index / swiper.params.slidesPerGroup);\n\n        if (snapIndex < swiper.snapGrid.length - 1) {\n            var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n            var currentSnap = swiper.snapGrid[snapIndex];\n            var nextSnap = swiper.snapGrid[snapIndex + 1];\n\n            if ((translate - currentSnap) > (nextSnap - currentSnap) / 2) {\n                index = swiper.params.slidesPerGroup;\n            }\n        }\n\n        return swiper.slideTo(index, speed, runCallbacks, internal);\n    }\n\n    function slideToClickedSlide () {\n        var swiper = this;\n        var params = swiper.params;\n        var $wrapperEl = swiper.$wrapperEl;\n\n        var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n        var slideToIndex = swiper.clickedIndex;\n        var realIndex;\n        if (params.loop) {\n            if (swiper.animating) { return; }\n            realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n            if (params.centeredSlides) {\n                if (\n                    (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))\n                    || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n                ) {\n                    swiper.loopFix();\n                    slideToIndex = $wrapperEl\n                        .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n                        .eq(0)\n                        .index();\n\n                    Utils.nextTick(function () {\n                        swiper.slideTo(slideToIndex);\n                    });\n                } else {\n                    swiper.slideTo(slideToIndex);\n                }\n            } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n                swiper.loopFix();\n                slideToIndex = $wrapperEl\n                    .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n                    .eq(0)\n                    .index();\n\n                Utils.nextTick(function () {\n                    swiper.slideTo(slideToIndex);\n                });\n            } else {\n                swiper.slideTo(slideToIndex);\n            }\n        } else {\n            swiper.slideTo(slideToIndex);\n        }\n    }\n\n    var slide = {\n        slideTo: slideTo,\n        slideToLoop: slideToLoop,\n        slideNext: slideNext,\n        slidePrev: slidePrev,\n        slideReset: slideReset,\n        slideToClosest: slideToClosest,\n        slideToClickedSlide: slideToClickedSlide,\n    };\n\n    function loopCreate () {\n        var swiper = this;\n        var params = swiper.params;\n        var $wrapperEl = swiper.$wrapperEl;\n        // Remove duplicated slides\n        $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass))).remove();\n\n        var slides = $wrapperEl.children((\".\" + (params.slideClass)));\n\n        if (params.loopFillGroupWithBlank) {\n            var blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n            if (blankSlidesNum !== params.slidesPerGroup) {\n                for (var i = 0; i < blankSlidesNum; i += 1) {\n                    var blankNode = $(doc.createElement('div')).addClass(((params.slideClass) + \" \" + (params.slideBlankClass)));\n                    $wrapperEl.append(blankNode);\n                }\n                slides = $wrapperEl.children((\".\" + (params.slideClass)));\n            }\n        }\n\n        if (params.slidesPerView === 'auto' && !params.loopedSlides) { params.loopedSlides = slides.length; }\n\n        swiper.loopedSlides = parseInt(params.loopedSlides || params.slidesPerView, 10);\n        swiper.loopedSlides += params.loopAdditionalSlides;\n        if (swiper.loopedSlides > slides.length) {\n            swiper.loopedSlides = slides.length;\n        }\n\n        var prependSlides = [];\n        var appendSlides = [];\n        slides.each(function (index, el) {\n            var slide = $(el);\n            if (index < swiper.loopedSlides) { appendSlides.push(el); }\n            if (index < slides.length && index >= slides.length - swiper.loopedSlides) { prependSlides.push(el); }\n            slide.attr('data-swiper-slide-index', index);\n        });\n        for (var i$1 = 0; i$1 < appendSlides.length; i$1 += 1) {\n            $wrapperEl.append($(appendSlides[i$1].cloneNode(true)).addClass(params.slideDuplicateClass));\n        }\n        for (var i$2 = prependSlides.length - 1; i$2 >= 0; i$2 -= 1) {\n            $wrapperEl.prepend($(prependSlides[i$2].cloneNode(true)).addClass(params.slideDuplicateClass));\n        }\n    }\n\n    function loopFix () {\n        var swiper = this;\n        var params = swiper.params;\n        var activeIndex = swiper.activeIndex;\n        var slides = swiper.slides;\n        var loopedSlides = swiper.loopedSlides;\n        var allowSlidePrev = swiper.allowSlidePrev;\n        var allowSlideNext = swiper.allowSlideNext;\n        var snapGrid = swiper.snapGrid;\n        var rtl = swiper.rtlTranslate;\n        var newIndex;\n        swiper.allowSlidePrev = true;\n        swiper.allowSlideNext = true;\n\n        var snapTranslate = -snapGrid[activeIndex];\n        var diff = snapTranslate - swiper.getTranslate();\n\n\n        // Fix For Negative Oversliding\n        if (activeIndex < loopedSlides) {\n            newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n            newIndex += loopedSlides;\n            var slideChanged = swiper.slideTo(newIndex, 0, false, true);\n            if (slideChanged && diff !== 0) {\n                swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n            }\n        } else if ((params.slidesPerView === 'auto' && activeIndex >= loopedSlides * 2) || (activeIndex >= slides.length - loopedSlides)) {\n            // Fix For Positive Oversliding\n            newIndex = -slides.length + activeIndex + loopedSlides;\n            newIndex += loopedSlides;\n            var slideChanged$1 = swiper.slideTo(newIndex, 0, false, true);\n            if (slideChanged$1 && diff !== 0) {\n                swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n            }\n        }\n        swiper.allowSlidePrev = allowSlidePrev;\n        swiper.allowSlideNext = allowSlideNext;\n    }\n\n    function loopDestroy () {\n        var swiper = this;\n        var $wrapperEl = swiper.$wrapperEl;\n        var params = swiper.params;\n        var slides = swiper.slides;\n        $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \",.\" + (params.slideClass) + \".\" + (params.slideBlankClass))).remove();\n        slides.removeAttr('data-swiper-slide-index');\n    }\n\n    var loop = {\n        loopCreate: loopCreate,\n        loopFix: loopFix,\n        loopDestroy: loopDestroy,\n    };\n\n    function setGrabCursor (moving) {\n        var swiper = this;\n        if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked)) { return; }\n        var el = swiper.el;\n        el.style.cursor = 'move';\n        el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n        el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n        el.style.cursor = moving ? 'grabbing' : 'grab';\n    }\n\n    function unsetGrabCursor () {\n        var swiper = this;\n        if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked)) { return; }\n        swiper.el.style.cursor = '';\n    }\n\n    var grabCursor = {\n        setGrabCursor: setGrabCursor,\n        unsetGrabCursor: unsetGrabCursor,\n    };\n\n    function appendSlide (slides) {\n        var swiper = this;\n        var $wrapperEl = swiper.$wrapperEl;\n        var params = swiper.params;\n        if (params.loop) {\n            swiper.loopDestroy();\n        }\n        if (typeof slides === 'object' && 'length' in slides) {\n            for (var i = 0; i < slides.length; i += 1) {\n                if (slides[i]) { $wrapperEl.append(slides[i]); }\n            }\n        } else {\n            $wrapperEl.append(slides);\n        }\n        if (params.loop) {\n            swiper.loopCreate();\n        }\n        if (!(params.observer && Support.observer)) {\n            swiper.update();\n        }\n    }\n\n    function prependSlide (slides) {\n        var swiper = this;\n        var params = swiper.params;\n        var $wrapperEl = swiper.$wrapperEl;\n        var activeIndex = swiper.activeIndex;\n\n        if (params.loop) {\n            swiper.loopDestroy();\n        }\n        var newActiveIndex = activeIndex + 1;\n        if (typeof slides === 'object' && 'length' in slides) {\n            for (var i = 0; i < slides.length; i += 1) {\n                if (slides[i]) { $wrapperEl.prepend(slides[i]); }\n            }\n            newActiveIndex = activeIndex + slides.length;\n        } else {\n            $wrapperEl.prepend(slides);\n        }\n        if (params.loop) {\n            swiper.loopCreate();\n        }\n        if (!(params.observer && Support.observer)) {\n            swiper.update();\n        }\n        swiper.slideTo(newActiveIndex, 0, false);\n    }\n\n    function addSlide (index, slides) {\n        var swiper = this;\n        var $wrapperEl = swiper.$wrapperEl;\n        var params = swiper.params;\n        var activeIndex = swiper.activeIndex;\n        var activeIndexBuffer = activeIndex;\n        if (params.loop) {\n            activeIndexBuffer -= swiper.loopedSlides;\n            swiper.loopDestroy();\n            swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n        }\n        var baseLength = swiper.slides.length;\n        if (index <= 0) {\n            swiper.prependSlide(slides);\n            return;\n        }\n        if (index >= baseLength) {\n            swiper.appendSlide(slides);\n            return;\n        }\n        var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n        var slidesBuffer = [];\n        for (var i = baseLength - 1; i >= index; i -= 1) {\n            var currentSlide = swiper.slides.eq(i);\n            currentSlide.remove();\n            slidesBuffer.unshift(currentSlide);\n        }\n\n        if (typeof slides === 'object' && 'length' in slides) {\n            for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {\n                if (slides[i$1]) { $wrapperEl.append(slides[i$1]); }\n            }\n            newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n        } else {\n            $wrapperEl.append(slides);\n        }\n\n        for (var i$2 = 0; i$2 < slidesBuffer.length; i$2 += 1) {\n            $wrapperEl.append(slidesBuffer[i$2]);\n        }\n\n        if (params.loop) {\n            swiper.loopCreate();\n        }\n        if (!(params.observer && Support.observer)) {\n            swiper.update();\n        }\n        if (params.loop) {\n            swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n        } else {\n            swiper.slideTo(newActiveIndex, 0, false);\n        }\n    }\n\n    function removeSlide (slidesIndexes) {\n        var swiper = this;\n        var params = swiper.params;\n        var $wrapperEl = swiper.$wrapperEl;\n        var activeIndex = swiper.activeIndex;\n\n        var activeIndexBuffer = activeIndex;\n        if (params.loop) {\n            activeIndexBuffer -= swiper.loopedSlides;\n            swiper.loopDestroy();\n            swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n        }\n        var newActiveIndex = activeIndexBuffer;\n        var indexToRemove;\n\n        if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n            for (var i = 0; i < slidesIndexes.length; i += 1) {\n                indexToRemove = slidesIndexes[i];\n                if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }\n                if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }\n            }\n            newActiveIndex = Math.max(newActiveIndex, 0);\n        } else {\n            indexToRemove = slidesIndexes;\n            if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }\n            if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }\n            newActiveIndex = Math.max(newActiveIndex, 0);\n        }\n\n        if (params.loop) {\n            swiper.loopCreate();\n        }\n\n        if (!(params.observer && Support.observer)) {\n            swiper.update();\n        }\n        if (params.loop) {\n            swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n        } else {\n            swiper.slideTo(newActiveIndex, 0, false);\n        }\n    }\n\n    function removeAllSlides () {\n        var swiper = this;\n\n        var slidesIndexes = [];\n        for (var i = 0; i < swiper.slides.length; i += 1) {\n            slidesIndexes.push(i);\n        }\n        swiper.removeSlide(slidesIndexes);\n    }\n\n    var manipulation = {\n        appendSlide: appendSlide,\n        prependSlide: prependSlide,\n        addSlide: addSlide,\n        removeSlide: removeSlide,\n        removeAllSlides: removeAllSlides,\n    };\n\n    var Device = (function Device() {\n        var ua = win.navigator.userAgent;\n\n        var device = {\n            ios: false,\n            android: false,\n            androidChrome: false,\n            desktop: false,\n            windows: false,\n            iphone: false,\n            ipod: false,\n            ipad: false,\n            cordova: win.cordova || win.phonegap,\n            phonegap: win.cordova || win.phonegap,\n        };\n\n        var windows = ua.match(/(Windows Phone);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n        var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n        var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n        var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n        var iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n\n\n        // Windows\n        if (windows) {\n            device.os = 'windows';\n            device.osVersion = windows[2];\n            device.windows = true;\n        }\n        // Android\n        if (android && !windows) {\n            device.os = 'android';\n            device.osVersion = android[2];\n            device.android = true;\n            device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n        }\n        if (ipad || iphone || ipod) {\n            device.os = 'ios';\n            device.ios = true;\n        }\n        // iOS\n        if (iphone && !ipod) {\n            device.osVersion = iphone[2].replace(/_/g, '.');\n            device.iphone = true;\n        }\n        if (ipad) {\n            device.osVersion = ipad[2].replace(/_/g, '.');\n            device.ipad = true;\n        }\n        if (ipod) {\n            device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n            device.iphone = true;\n        }\n        // iOS 8+ changed UA\n        if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n            if (device.osVersion.split('.')[0] === '10') {\n                device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n            }\n        }\n\n        // Desktop\n        device.desktop = !(device.os || device.android || device.webView);\n\n        // Webview\n        device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);\n\n        // Minimal UI\n        if (device.os && device.os === 'ios') {\n            var osVersionArr = device.osVersion.split('.');\n            var metaViewport = doc.querySelector('meta[name=\"viewport\"]');\n            device.minimalUi = !device.webView\n                && (ipod || iphone)\n                && (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7)\n                && metaViewport && metaViewport.getAttribute('content').indexOf('minimal-ui') >= 0;\n        }\n\n        // Pixel Ratio\n        device.pixelRatio = win.devicePixelRatio || 1;\n\n        // Export object\n        return device;\n    }());\n\n    function onTouchStart (event) {\n        var swiper = this;\n        var data = swiper.touchEventsData;\n        var params = swiper.params;\n        var touches = swiper.touches;\n        if (swiper.animating && params.preventInteractionOnTransition) {\n            return;\n        }\n        var e = event;\n        if (e.originalEvent) { e = e.originalEvent; }\n        data.isTouchEvent = e.type === 'touchstart';\n        if (!data.isTouchEvent && 'which' in e && e.which === 3) { return; }\n        if (!data.isTouchEvent && 'button' in e && e.button > 0) { return; }\n        if (data.isTouched && data.isMoved) { return; }\n        if (params.noSwiping && $(e.target).closest(params.noSwipingSelector ? params.noSwipingSelector : (\".\" + (params.noSwipingClass)))[0]) {\n            swiper.allowClick = true;\n            return;\n        }\n        if (params.swipeHandler) {\n            if (!$(e).closest(params.swipeHandler)[0]) { return; }\n        }\n\n        touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n        touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n        var startX = touches.currentX;\n        var startY = touches.currentY;\n\n        // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n\n        var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n        var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n        if (\n            edgeSwipeDetection\n            && ((startX <= edgeSwipeThreshold)\n            || (startX >= win.screen.width - edgeSwipeThreshold))\n        ) {\n            return;\n        }\n\n        Utils.extend(data, {\n            isTouched: true,\n            isMoved: false,\n            allowTouchCallbacks: true,\n            isScrolling: undefined,\n            startMoving: undefined,\n        });\n\n        touches.startX = startX;\n        touches.startY = startY;\n        data.touchStartTime = Utils.now();\n        swiper.allowClick = true;\n        swiper.updateSize();\n        swiper.swipeDirection = undefined;\n        if (params.threshold > 0) { data.allowThresholdMove = false; }\n        if (e.type !== 'touchstart') {\n            var preventDefault = true;\n            if ($(e.target).is(data.formElements)) { preventDefault = false; }\n            if (\n                doc.activeElement\n                && $(doc.activeElement).is(data.formElements)\n                && doc.activeElement !== e.target\n            ) {\n                doc.activeElement.blur();\n            }\n\n            var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n            if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n                e.preventDefault();\n            }\n        }\n        swiper.emit('touchStart', e);\n    }\n\n    function onTouchMove (event) {\n        var swiper = this;\n        var data = swiper.touchEventsData;\n        var params = swiper.params;\n        var touches = swiper.touches;\n        var rtl = swiper.rtlTranslate;\n        var e = event;\n        if (e.originalEvent) { e = e.originalEvent; }\n        if (!data.isTouched) {\n            if (data.startMoving && data.isScrolling) {\n                swiper.emit('touchMoveOpposite', e);\n            }\n            return;\n        }\n        if (data.isTouchEvent && e.type === 'mousemove') { return; }\n        var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n        var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n        if (e.preventedByNestedSwiper) {\n            touches.startX = pageX;\n            touches.startY = pageY;\n            return;\n        }\n        if (!swiper.allowTouchMove) {\n            // isMoved = true;\n            swiper.allowClick = false;\n            if (data.isTouched) {\n                Utils.extend(touches, {\n                    startX: pageX,\n                    startY: pageY,\n                    currentX: pageX,\n                    currentY: pageY,\n                });\n                data.touchStartTime = Utils.now();\n            }\n            return;\n        }\n        if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n            if (swiper.isVertical()) {\n                // Vertical\n                if (\n                    (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())\n                    || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n                ) {\n                    data.isTouched = false;\n                    data.isMoved = false;\n                    return;\n                }\n            } else if (\n                (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())\n                || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n            ) {\n                return;\n            }\n        }\n        if (data.isTouchEvent && doc.activeElement) {\n            if (e.target === doc.activeElement && $(e.target).is(data.formElements)) {\n                data.isMoved = true;\n                swiper.allowClick = false;\n                return;\n            }\n        }\n        if (data.allowTouchCallbacks) {\n            swiper.emit('touchMove', e);\n        }\n        if (e.targetTouches && e.targetTouches.length > 1) { return; }\n\n        touches.currentX = pageX;\n        touches.currentY = pageY;\n\n        var diffX = touches.currentX - touches.startX;\n        var diffY = touches.currentY - touches.startY;\n        if (swiper.params.threshold && Math.sqrt((Math.pow( diffX, 2 )) + (Math.pow( diffY, 2 ))) < swiper.params.threshold) { return; }\n\n        if (typeof data.isScrolling === 'undefined') {\n            var touchAngle;\n            if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {\n                data.isScrolling = false;\n            } else {\n                // eslint-disable-next-line\n                if ((diffX * diffX) + (diffY * diffY) >= 25) {\n                    touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n                    data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);\n                }\n            }\n        }\n        if (data.isScrolling) {\n            swiper.emit('touchMoveOpposite', e);\n        }\n        if (typeof data.startMoving === 'undefined') {\n            if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n                data.startMoving = true;\n            }\n        }\n        if (data.isScrolling) {\n            data.isTouched = false;\n            return;\n        }\n        if (!data.startMoving) {\n            return;\n        }\n        swiper.allowClick = false;\n        e.preventDefault();\n        if (params.touchMoveStopPropagation && !params.nested) {\n            e.stopPropagation();\n        }\n\n        if (!data.isMoved) {\n            if (params.loop) {\n                swiper.loopFix();\n            }\n            data.startTranslate = swiper.getTranslate();\n            swiper.setTransition(0);\n            if (swiper.animating) {\n                swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n            }\n            data.allowMomentumBounce = false;\n            // Grab Cursor\n            if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n                swiper.setGrabCursor(true);\n            }\n            swiper.emit('sliderFirstMove', e);\n        }\n        swiper.emit('sliderMove', e);\n        data.isMoved = true;\n\n        var diff = swiper.isHorizontal() ? diffX : diffY;\n        touches.diff = diff;\n\n        diff *= params.touchRatio;\n        if (rtl) { diff = -diff; }\n\n        swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n        data.currentTranslate = diff + data.startTranslate;\n\n        var disableParentSwiper = true;\n        var resistanceRatio = params.resistanceRatio;\n        if (params.touchReleaseOnEdges) {\n            resistanceRatio = 0;\n        }\n        if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {\n            disableParentSwiper = false;\n            if (params.resistance) { data.currentTranslate = (swiper.minTranslate() - 1) + (Math.pow( (-swiper.minTranslate() + data.startTranslate + diff), resistanceRatio )); }\n        } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n            disableParentSwiper = false;\n            if (params.resistance) { data.currentTranslate = (swiper.maxTranslate() + 1) - (Math.pow( (swiper.maxTranslate() - data.startTranslate - diff), resistanceRatio )); }\n        }\n\n        if (disableParentSwiper) {\n            e.preventedByNestedSwiper = true;\n        }\n\n        // Directions locks\n        if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n            data.currentTranslate = data.startTranslate;\n        }\n        if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n            data.currentTranslate = data.startTranslate;\n        }\n\n\n        // Threshold\n        if (params.threshold > 0) {\n            if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n                if (!data.allowThresholdMove) {\n                    data.allowThresholdMove = true;\n                    touches.startX = touches.currentX;\n                    touches.startY = touches.currentY;\n                    data.currentTranslate = data.startTranslate;\n                    touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n                    return;\n                }\n            } else {\n                data.currentTranslate = data.startTranslate;\n                return;\n            }\n        }\n\n        if (!params.followFinger) { return; }\n\n        // Update active index in free mode\n        if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n            swiper.updateActiveIndex();\n            swiper.updateSlidesClasses();\n        }\n        if (params.freeMode) {\n            // Velocity\n            if (data.velocities.length === 0) {\n                data.velocities.push({\n                    position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n                    time: data.touchStartTime,\n                });\n            }\n            data.velocities.push({\n                position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n                time: Utils.now(),\n            });\n        }\n        // Update progress\n        swiper.updateProgress(data.currentTranslate);\n        // Update translate\n        swiper.setTranslate(data.currentTranslate);\n    }\n\n    function onTouchEnd (event) {\n        var swiper = this;\n        var data = swiper.touchEventsData;\n\n        var params = swiper.params;\n        var touches = swiper.touches;\n        var rtl = swiper.rtlTranslate;\n        var $wrapperEl = swiper.$wrapperEl;\n        var slidesGrid = swiper.slidesGrid;\n        var snapGrid = swiper.snapGrid;\n        var e = event;\n        if (e.originalEvent) { e = e.originalEvent; }\n        if (data.allowTouchCallbacks) {\n            swiper.emit('touchEnd', e);\n        }\n        data.allowTouchCallbacks = false;\n        if (!data.isTouched) {\n            if (data.isMoved && params.grabCursor) {\n                swiper.setGrabCursor(false);\n            }\n            data.isMoved = false;\n            data.startMoving = false;\n            return;\n        }\n        // Return Grab Cursor\n        if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n            swiper.setGrabCursor(false);\n        }\n\n        // Time diff\n        var touchEndTime = Utils.now();\n        var timeDiff = touchEndTime - data.touchStartTime;\n\n        // Tap, doubleTap, Click\n        if (swiper.allowClick) {\n            swiper.updateClickedSlide(e);\n            swiper.emit('tap', e);\n            if (timeDiff < 300 && (touchEndTime - data.lastClickTime) > 300) {\n                if (data.clickTimeout) { clearTimeout(data.clickTimeout); }\n                data.clickTimeout = Utils.nextTick(function () {\n                    if (!swiper || swiper.destroyed) { return; }\n                    swiper.emit('click', e);\n                }, 300);\n            }\n            if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {\n                if (data.clickTimeout) { clearTimeout(data.clickTimeout); }\n                swiper.emit('doubleTap', e);\n            }\n        }\n\n        data.lastClickTime = Utils.now();\n        Utils.nextTick(function () {\n            if (!swiper.destroyed) { swiper.allowClick = true; }\n        });\n\n        if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n            data.isTouched = false;\n            data.isMoved = false;\n            data.startMoving = false;\n            return;\n        }\n        data.isTouched = false;\n        data.isMoved = false;\n        data.startMoving = false;\n\n        var currentPos;\n        if (params.followFinger) {\n            currentPos = rtl ? swiper.translate : -swiper.translate;\n        } else {\n            currentPos = -data.currentTranslate;\n        }\n\n        if (params.freeMode) {\n            if (currentPos < -swiper.minTranslate()) {\n                swiper.slideTo(swiper.activeIndex);\n                return;\n            }\n            if (currentPos > -swiper.maxTranslate()) {\n                if (swiper.slides.length < snapGrid.length) {\n                    swiper.slideTo(snapGrid.length - 1);\n                } else {\n                    swiper.slideTo(swiper.slides.length - 1);\n                }\n                return;\n            }\n\n            if (params.freeModeMomentum) {\n                if (data.velocities.length > 1) {\n                    var lastMoveEvent = data.velocities.pop();\n                    var velocityEvent = data.velocities.pop();\n\n                    var distance = lastMoveEvent.position - velocityEvent.position;\n                    var time = lastMoveEvent.time - velocityEvent.time;\n                    swiper.velocity = distance / time;\n                    swiper.velocity /= 2;\n                    if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n                        swiper.velocity = 0;\n                    }\n                    // this implies that the user stopped moving a finger then released.\n                    // There would be no events with distance zero, so the last event is stale.\n                    if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {\n                        swiper.velocity = 0;\n                    }\n                } else {\n                    swiper.velocity = 0;\n                }\n                swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n                data.velocities.length = 0;\n                var momentumDuration = 1000 * params.freeModeMomentumRatio;\n                var momentumDistance = swiper.velocity * momentumDuration;\n\n                var newPosition = swiper.translate + momentumDistance;\n                if (rtl) { newPosition = -newPosition; }\n\n                var doBounce = false;\n                var afterBouncePosition;\n                var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n                var needsLoopFix;\n                if (newPosition < swiper.maxTranslate()) {\n                    if (params.freeModeMomentumBounce) {\n                        if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n                            newPosition = swiper.maxTranslate() - bounceAmount;\n                        }\n                        afterBouncePosition = swiper.maxTranslate();\n                        doBounce = true;\n                        data.allowMomentumBounce = true;\n                    } else {\n                        newPosition = swiper.maxTranslate();\n                    }\n                    if (params.loop && params.centeredSlides) { needsLoopFix = true; }\n                } else if (newPosition > swiper.minTranslate()) {\n                    if (params.freeModeMomentumBounce) {\n                        if (newPosition - swiper.minTranslate() > bounceAmount) {\n                            newPosition = swiper.minTranslate() + bounceAmount;\n                        }\n                        afterBouncePosition = swiper.minTranslate();\n                        doBounce = true;\n                        data.allowMomentumBounce = true;\n                    } else {\n                        newPosition = swiper.minTranslate();\n                    }\n                    if (params.loop && params.centeredSlides) { needsLoopFix = true; }\n                } else if (params.freeModeSticky) {\n                    var nextSlide;\n                    for (var j = 0; j < snapGrid.length; j += 1) {\n                        if (snapGrid[j] > -newPosition) {\n                            nextSlide = j;\n                            break;\n                        }\n                    }\n\n                    if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n                        newPosition = snapGrid[nextSlide];\n                    } else {\n                        newPosition = snapGrid[nextSlide - 1];\n                    }\n                    newPosition = -newPosition;\n                }\n                if (needsLoopFix) {\n                    swiper.once('transitionEnd', function () {\n                        swiper.loopFix();\n                    });\n                }\n                // Fix duration\n                if (swiper.velocity !== 0) {\n                    if (rtl) {\n                        momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n                    } else {\n                        momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n                    }\n                } else if (params.freeModeSticky) {\n                    swiper.slideToClosest();\n                    return;\n                }\n\n                if (params.freeModeMomentumBounce && doBounce) {\n                    swiper.updateProgress(afterBouncePosition);\n                    swiper.setTransition(momentumDuration);\n                    swiper.setTranslate(newPosition);\n                    swiper.transitionStart(true, swiper.swipeDirection);\n                    swiper.animating = true;\n                    $wrapperEl.transitionEnd(function () {\n                        if (!swiper || swiper.destroyed || !data.allowMomentumBounce) { return; }\n                        swiper.emit('momentumBounce');\n\n                        swiper.setTransition(params.speed);\n                        swiper.setTranslate(afterBouncePosition);\n                        $wrapperEl.transitionEnd(function () {\n                            if (!swiper || swiper.destroyed) { return; }\n                            swiper.transitionEnd();\n                        });\n                    });\n                } else if (swiper.velocity) {\n                    swiper.updateProgress(newPosition);\n                    swiper.setTransition(momentumDuration);\n                    swiper.setTranslate(newPosition);\n                    swiper.transitionStart(true, swiper.swipeDirection);\n                    if (!swiper.animating) {\n                        swiper.animating = true;\n                        $wrapperEl.transitionEnd(function () {\n                            if (!swiper || swiper.destroyed) { return; }\n                            swiper.transitionEnd();\n                        });\n                    }\n                } else {\n                    swiper.updateProgress(newPosition);\n                }\n\n                swiper.updateActiveIndex();\n                swiper.updateSlidesClasses();\n            } else if (params.freeModeSticky) {\n                swiper.slideToClosest();\n                return;\n            }\n\n            if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n                swiper.updateProgress();\n                swiper.updateActiveIndex();\n                swiper.updateSlidesClasses();\n            }\n            return;\n        }\n\n        // Find current slide\n        var stopIndex = 0;\n        var groupSize = swiper.slidesSizesGrid[0];\n        for (var i = 0; i < slidesGrid.length; i += params.slidesPerGroup) {\n            if (typeof slidesGrid[i + params.slidesPerGroup] !== 'undefined') {\n                if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + params.slidesPerGroup]) {\n                    stopIndex = i;\n                    groupSize = slidesGrid[i + params.slidesPerGroup] - slidesGrid[i];\n                }\n            } else if (currentPos >= slidesGrid[i]) {\n                stopIndex = i;\n                groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n            }\n        }\n\n        // Find current slide size\n        var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n\n        if (timeDiff > params.longSwipesMs) {\n            // Long touches\n            if (!params.longSwipes) {\n                swiper.slideTo(swiper.activeIndex);\n                return;\n            }\n            if (swiper.swipeDirection === 'next') {\n                if (ratio >= params.longSwipesRatio) { swiper.slideTo(stopIndex + params.slidesPerGroup); }\n                else { swiper.slideTo(stopIndex); }\n            }\n            if (swiper.swipeDirection === 'prev') {\n                if (ratio > (1 - params.longSwipesRatio)) { swiper.slideTo(stopIndex + params.slidesPerGroup); }\n                else { swiper.slideTo(stopIndex); }\n            }\n        } else {\n            // Short swipes\n            if (!params.shortSwipes) {\n                swiper.slideTo(swiper.activeIndex);\n                return;\n            }\n            if (swiper.swipeDirection === 'next') {\n                swiper.slideTo(stopIndex + params.slidesPerGroup);\n            }\n            if (swiper.swipeDirection === 'prev') {\n                swiper.slideTo(stopIndex);\n            }\n        }\n    }\n\n    function onResize () {\n        var swiper = this;\n\n        var params = swiper.params;\n        var el = swiper.el;\n\n        if (el && el.offsetWidth === 0) { return; }\n\n        // Breakpoints\n        if (params.breakpoints) {\n            swiper.setBreakpoint();\n        }\n\n        // Save locks\n        var allowSlideNext = swiper.allowSlideNext;\n        var allowSlidePrev = swiper.allowSlidePrev;\n        var snapGrid = swiper.snapGrid;\n\n        // Disable locks on resize\n        swiper.allowSlideNext = true;\n        swiper.allowSlidePrev = true;\n\n        swiper.updateSize();\n        swiper.updateSlides();\n\n        if (params.freeMode) {\n            var newTranslate = Math.min(Math.max(swiper.translate, swiper.maxTranslate()), swiper.minTranslate());\n            swiper.setTranslate(newTranslate);\n            swiper.updateActiveIndex();\n            swiper.updateSlidesClasses();\n\n            if (params.autoHeight) {\n                swiper.updateAutoHeight();\n            }\n        } else {\n            swiper.updateSlidesClasses();\n            if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n                swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n            } else {\n                swiper.slideTo(swiper.activeIndex, 0, false, true);\n            }\n        }\n        // Return locks after resize\n        swiper.allowSlidePrev = allowSlidePrev;\n        swiper.allowSlideNext = allowSlideNext;\n\n        if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n            swiper.checkOverflow();\n        }\n    }\n\n    function onClick (e) {\n        var swiper = this;\n        if (!swiper.allowClick) {\n            if (swiper.params.preventClicks) { e.preventDefault(); }\n            if (swiper.params.preventClicksPropagation && swiper.animating) {\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n            }\n        }\n    }\n\n    function attachEvents() {\n        var swiper = this;\n        var params = swiper.params;\n        var touchEvents = swiper.touchEvents;\n        var el = swiper.el;\n        var wrapperEl = swiper.wrapperEl;\n\n        {\n            swiper.onTouchStart = onTouchStart.bind(swiper);\n            swiper.onTouchMove = onTouchMove.bind(swiper);\n            swiper.onTouchEnd = onTouchEnd.bind(swiper);\n        }\n\n        swiper.onClick = onClick.bind(swiper);\n\n        var target = params.touchEventsTarget === 'container' ? el : wrapperEl;\n        var capture = !!params.nested;\n\n        // Touch Events\n        {\n            if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n                target.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n                doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n                doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n            } else {\n                if (Support.touch) {\n                    var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n                    target.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n                    target.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture: capture } : capture);\n                    target.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n                }\n                if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n                    target.addEventListener('mousedown', swiper.onTouchStart, false);\n                    doc.addEventListener('mousemove', swiper.onTouchMove, capture);\n                    doc.addEventListener('mouseup', swiper.onTouchEnd, false);\n                }\n            }\n            // Prevent Links Clicks\n            if (params.preventClicks || params.preventClicksPropagation) {\n                target.addEventListener('click', swiper.onClick, true);\n            }\n        }\n\n        // Resize handler\n        swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);\n    }\n\n    function detachEvents() {\n        var swiper = this;\n\n        var params = swiper.params;\n        var touchEvents = swiper.touchEvents;\n        var el = swiper.el;\n        var wrapperEl = swiper.wrapperEl;\n\n        var target = params.touchEventsTarget === 'container' ? el : wrapperEl;\n        var capture = !!params.nested;\n\n        // Touch Events\n        {\n            if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n                target.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n                doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n                doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n            } else {\n                if (Support.touch) {\n                    var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n                    target.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n                    target.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n                    target.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n                }\n                if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n                    target.removeEventListener('mousedown', swiper.onTouchStart, false);\n                    doc.removeEventListener('mousemove', swiper.onTouchMove, capture);\n                    doc.removeEventListener('mouseup', swiper.onTouchEnd, false);\n                }\n            }\n            // Prevent Links Clicks\n            if (params.preventClicks || params.preventClicksPropagation) {\n                target.removeEventListener('click', swiper.onClick, true);\n            }\n        }\n\n        // Resize handler\n        swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);\n    }\n\n    var events = {\n        attachEvents: attachEvents,\n        detachEvents: detachEvents,\n    };\n\n    function setBreakpoint () {\n        var swiper = this;\n        var activeIndex = swiper.activeIndex;\n        var initialized = swiper.initialized;\n        var loopedSlides = swiper.loopedSlides; if ( loopedSlides === void 0 ) loopedSlides = 0;\n        var params = swiper.params;\n        var breakpoints = params.breakpoints;\n        if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) { return; }\n\n        // Set breakpoint for window width and update parameters\n        var breakpoint = swiper.getBreakpoint(breakpoints);\n\n        if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n            var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n            if (breakpointOnlyParams) {\n                ['slidesPerView', 'spaceBetween', 'slidesPerGroup'].forEach(function (param) {\n                    var paramValue = breakpointOnlyParams[param];\n                    if (typeof paramValue === 'undefined') { return; }\n                    if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n                        breakpointOnlyParams[param] = 'auto';\n                    } else if (param === 'slidesPerView') {\n                        breakpointOnlyParams[param] = parseFloat(paramValue);\n                    } else {\n                        breakpointOnlyParams[param] = parseInt(paramValue, 10);\n                    }\n                });\n            }\n\n            var breakpointParams = breakpointOnlyParams || swiper.originalParams;\n            var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView);\n\n            Utils.extend(swiper.params, breakpointParams);\n\n            Utils.extend(swiper, {\n                allowTouchMove: swiper.params.allowTouchMove,\n                allowSlideNext: swiper.params.allowSlideNext,\n                allowSlidePrev: swiper.params.allowSlidePrev,\n            });\n\n            swiper.currentBreakpoint = breakpoint;\n\n            if (needsReLoop && initialized) {\n                swiper.loopDestroy();\n                swiper.loopCreate();\n                swiper.updateSlides();\n                swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);\n            }\n            swiper.emit('breakpoint', breakpointParams);\n        }\n    }\n\n    function getBreakpoint (breakpoints) {\n        var swiper = this;\n        // Get breakpoint for window width\n        if (!breakpoints) { return undefined; }\n        var breakpoint = false;\n        var points = [];\n        Object.keys(breakpoints).forEach(function (point) {\n            points.push(point);\n        });\n        points.sort(function (a, b) { return parseInt(a, 10) - parseInt(b, 10); });\n        for (var i = 0; i < points.length; i += 1) {\n            var point = points[i];\n            if (swiper.params.breakpointsInverse) {\n                if (point <= win.innerWidth) {\n                    breakpoint = point;\n                }\n            } else if (point >= win.innerWidth && !breakpoint) {\n                breakpoint = point;\n            }\n        }\n        return breakpoint || 'max';\n    }\n\n    var breakpoints = { setBreakpoint: setBreakpoint, getBreakpoint: getBreakpoint };\n\n    var Browser = (function Browser() {\n        function isSafari() {\n            var ua = win.navigator.userAgent.toLowerCase();\n            return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n        }\n        return {\n            isIE: !!win.navigator.userAgent.match(/Trident/g) || !!win.navigator.userAgent.match(/MSIE/g),\n            isEdge: !!win.navigator.userAgent.match(/Edge/g),\n            isSafari: isSafari(),\n            isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent),\n        };\n    }());\n\n    function addClasses () {\n        var swiper = this;\n        var classNames = swiper.classNames;\n        var params = swiper.params;\n        var rtl = swiper.rtl;\n        var $el = swiper.$el;\n        var suffixes = [];\n\n        suffixes.push(params.direction);\n\n        if (params.freeMode) {\n            suffixes.push('free-mode');\n        }\n        if (!Support.flexbox) {\n            suffixes.push('no-flexbox');\n        }\n        if (params.autoHeight) {\n            suffixes.push('autoheight');\n        }\n        if (rtl) {\n            suffixes.push('rtl');\n        }\n        if (params.slidesPerColumn > 1) {\n            suffixes.push('multirow');\n        }\n        if (Device.android) {\n            suffixes.push('android');\n        }\n        if (Device.ios) {\n            suffixes.push('ios');\n        }\n        // WP8 Touch Events Fix\n        if ((Browser.isIE || Browser.isEdge) && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n            suffixes.push((\"wp8-\" + (params.direction)));\n        }\n\n        suffixes.forEach(function (suffix) {\n            classNames.push(params.containerModifierClass + suffix);\n        });\n\n        $el.addClass(classNames.join(' '));\n    }\n\n    function removeClasses () {\n        var swiper = this;\n        var $el = swiper.$el;\n        var classNames = swiper.classNames;\n\n        $el.removeClass(classNames.join(' '));\n    }\n\n    var classes = { addClasses: addClasses, removeClasses: removeClasses };\n\n    function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {\n        var image;\n        function onReady() {\n            if (callback) { callback(); }\n        }\n        if (!imageEl.complete || !checkForComplete) {\n            if (src) {\n                image = new win.Image();\n                image.onload = onReady;\n                image.onerror = onReady;\n                if (sizes) {\n                    image.sizes = sizes;\n                }\n                if (srcset) {\n                    image.srcset = srcset;\n                }\n                if (src) {\n                    image.src = src;\n                }\n            } else {\n                onReady();\n            }\n        } else {\n            // image already loaded...\n            onReady();\n        }\n    }\n\n    function preloadImages () {\n        var swiper = this;\n        swiper.imagesToLoad = swiper.$el.find('img');\n        function onReady() {\n            if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) { return; }\n            if (swiper.imagesLoaded !== undefined) { swiper.imagesLoaded += 1; }\n            if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n                if (swiper.params.updateOnImagesReady) { swiper.update(); }\n                swiper.emit('imagesReady');\n            }\n        }\n        for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {\n            var imageEl = swiper.imagesToLoad[i];\n            swiper.loadImage(\n                imageEl,\n                imageEl.currentSrc || imageEl.getAttribute('src'),\n                imageEl.srcset || imageEl.getAttribute('srcset'),\n                imageEl.sizes || imageEl.getAttribute('sizes'),\n                true,\n                onReady\n            );\n        }\n    }\n\n    var images = {\n        loadImage: loadImage,\n        preloadImages: preloadImages,\n    };\n\n    function checkOverflow() {\n        var swiper = this;\n        var wasLocked = swiper.isLocked;\n\n        swiper.isLocked = swiper.snapGrid.length === 1;\n        swiper.allowSlideNext = !swiper.isLocked;\n        swiper.allowSlidePrev = !swiper.isLocked;\n\n        // events\n        if (wasLocked !== swiper.isLocked) { swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); }\n\n        if (wasLocked && wasLocked !== swiper.isLocked) {\n            swiper.isEnd = false;\n            swiper.navigation.update();\n        }\n    }\n\n    var checkOverflow$1 = { checkOverflow: checkOverflow };\n\n    var defaults = {\n        init: true,\n        direction: 'horizontal',\n        touchEventsTarget: 'container',\n        initialSlide: 0,\n        speed: 300,\n        //\n        preventInteractionOnTransition: false,\n\n        // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n        edgeSwipeDetection: false,\n        edgeSwipeThreshold: 20,\n\n        // Free mode\n        freeMode: false,\n        freeModeMomentum: true,\n        freeModeMomentumRatio: 1,\n        freeModeMomentumBounce: true,\n        freeModeMomentumBounceRatio: 1,\n        freeModeMomentumVelocityRatio: 1,\n        freeModeSticky: false,\n        freeModeMinimumVelocity: 0.02,\n\n        // Autoheight\n        autoHeight: false,\n\n        // Set wrapper width\n        setWrapperSize: false,\n\n        // Virtual Translate\n        virtualTranslate: false,\n\n        // Effects\n        effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n        // Breakpoints\n        breakpoints: undefined,\n        breakpointsInverse: false,\n\n        // Slides grid\n        spaceBetween: 0,\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerColumnFill: 'column',\n        slidesPerGroup: 1,\n        centeredSlides: false,\n        slidesOffsetBefore: 0, // in px\n        slidesOffsetAfter: 0, // in px\n        normalizeSlideIndex: true,\n        centerInsufficientSlides: false,\n\n        // Disable swiper and hide navigation when container not overflow\n        watchOverflow: false,\n\n        // Round length\n        roundLengths: false,\n\n        // Touches\n        touchRatio: 1,\n        touchAngle: 45,\n        simulateTouch: true,\n        shortSwipes: true,\n        longSwipes: true,\n        longSwipesRatio: 0.5,\n        longSwipesMs: 300,\n        followFinger: true,\n        allowTouchMove: true,\n        threshold: 0,\n        touchMoveStopPropagation: true,\n        touchStartPreventDefault: true,\n        touchStartForcePreventDefault: false,\n        touchReleaseOnEdges: false,\n\n        // Unique Navigation Elements\n        uniqueNavElements: true,\n\n        // Resistance\n        resistance: true,\n        resistanceRatio: 0.85,\n\n        // Progress\n        watchSlidesProgress: false,\n        watchSlidesVisibility: false,\n\n        // Cursor\n        grabCursor: false,\n\n        // Clicks\n        preventClicks: true,\n        preventClicksPropagation: true,\n        slideToClickedSlide: false,\n\n        // Images\n        preloadImages: true,\n        updateOnImagesReady: true,\n\n        // loop\n        loop: false,\n        loopAdditionalSlides: 0,\n        loopedSlides: null,\n        loopFillGroupWithBlank: false,\n\n        // Swiping/no swiping\n        allowSlidePrev: true,\n        allowSlideNext: true,\n        swipeHandler: null, // '.swipe-handler',\n        noSwiping: true,\n        noSwipingClass: 'swiper-no-swiping',\n        noSwipingSelector: null,\n\n        // Passive Listeners\n        passiveListeners: true,\n\n        // NS\n        containerModifierClass: 'swiper-container-', // NEW\n        slideClass: 'swiper-slide',\n        slideBlankClass: 'swiper-slide-invisible-blank',\n        slideActiveClass: 'swiper-slide-active',\n        slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n        slideVisibleClass: 'swiper-slide-visible',\n        slideDuplicateClass: 'swiper-slide-duplicate',\n        slideNextClass: 'swiper-slide-next',\n        slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n        slidePrevClass: 'swiper-slide-prev',\n        slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n        wrapperClass: 'swiper-wrapper',\n\n        // Callbacks\n        runCallbacksOnInit: true,\n    };\n\n    var prototypes = {\n        update: update,\n        translate: translate,\n        transition: transition$1,\n        slide: slide,\n        loop: loop,\n        grabCursor: grabCursor,\n        manipulation: manipulation,\n        events: events,\n        breakpoints: breakpoints,\n        checkOverflow: checkOverflow$1,\n        classes: classes,\n        images: images,\n    };\n\n    var extendedDefaults = {};\n\n    var Swiper = /*@__PURE__*/(function (SwiperClass$$1) {\n        function Swiper() {\n            var assign;\n\n            var args = [], len = arguments.length;\n            while ( len-- ) args[ len ] = arguments[ len ];\n            var el;\n            var params;\n            if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n                params = args[0];\n            } else {\n                (assign = args, el = assign[0], params = assign[1]);\n            }\n            if (!params) { params = {}; }\n\n            params = Utils.extend({}, params);\n            if (el && !params.el) { params.el = el; }\n\n            SwiperClass$$1.call(this, params);\n\n            Object.keys(prototypes).forEach(function (prototypeGroup) {\n                Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {\n                    if (!Swiper.prototype[protoMethod]) {\n                        Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n                    }\n                });\n            });\n\n            // Swiper Instance\n            var swiper = this;\n            if (typeof swiper.modules === 'undefined') {\n                swiper.modules = {};\n            }\n            Object.keys(swiper.modules).forEach(function (moduleName) {\n                var module = swiper.modules[moduleName];\n                if (module.params) {\n                    var moduleParamName = Object.keys(module.params)[0];\n                    var moduleParams = module.params[moduleParamName];\n                    if (typeof moduleParams !== 'object' || moduleParams === null) { return; }\n                    if (!(moduleParamName in params && 'enabled' in moduleParams)) { return; }\n                    if (params[moduleParamName] === true) {\n                        params[moduleParamName] = { enabled: true };\n                    }\n                    if (\n                        typeof params[moduleParamName] === 'object'\n                        && !('enabled' in params[moduleParamName])\n                    ) {\n                        params[moduleParamName].enabled = true;\n                    }\n                    if (!params[moduleParamName]) { params[moduleParamName] = { enabled: false }; }\n                }\n            });\n\n            // Extend defaults with modules params\n            var swiperParams = Utils.extend({}, defaults);\n            swiper.useModulesParams(swiperParams);\n\n            // Extend defaults with passed params\n            swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n            swiper.originalParams = Utils.extend({}, swiper.params);\n            swiper.passedParams = Utils.extend({}, params);\n\n            // Save Dom lib\n            swiper.$ = $;\n\n            // Find el\n            var $el = $(swiper.params.el);\n            el = $el[0];\n\n            if (!el) {\n                return undefined;\n            }\n\n            if ($el.length > 1) {\n                var swipers = [];\n                $el.each(function (index, containerEl) {\n                    var newParams = Utils.extend({}, params, { el: containerEl });\n                    swipers.push(new Swiper(newParams));\n                });\n                return swipers;\n            }\n\n            el.swiper = swiper;\n            $el.data('swiper', swiper);\n\n            // Find Wrapper\n            var $wrapperEl = $el.children((\".\" + (swiper.params.wrapperClass)));\n\n            // Extend Swiper\n            Utils.extend(swiper, {\n                $el: $el,\n                el: el,\n                $wrapperEl: $wrapperEl,\n                wrapperEl: $wrapperEl[0],\n\n                // Classes\n                classNames: [],\n\n                // Slides\n                slides: $(),\n                slidesGrid: [],\n                snapGrid: [],\n                slidesSizesGrid: [],\n\n                // isDirection\n                isHorizontal: function isHorizontal() {\n                    return swiper.params.direction === 'horizontal';\n                },\n                isVertical: function isVertical() {\n                    return swiper.params.direction === 'vertical';\n                },\n                // RTL\n                rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n                rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n                wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n\n                // Indexes\n                activeIndex: 0,\n                realIndex: 0,\n\n                //\n                isBeginning: true,\n                isEnd: false,\n\n                // Props\n                translate: 0,\n                previousTranslate: 0,\n                progress: 0,\n                velocity: 0,\n                animating: false,\n\n                // Locks\n                allowSlideNext: swiper.params.allowSlideNext,\n                allowSlidePrev: swiper.params.allowSlidePrev,\n\n                // Touch Events\n                touchEvents: (function touchEvents() {\n                    var touch = ['touchstart', 'touchmove', 'touchend'];\n                    var desktop = ['mousedown', 'mousemove', 'mouseup'];\n                    if (Support.pointerEvents) {\n                        desktop = ['pointerdown', 'pointermove', 'pointerup'];\n                    } else if (Support.prefixedPointerEvents) {\n                        desktop = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];\n                    }\n                    swiper.touchEventsTouch = {\n                        start: touch[0],\n                        move: touch[1],\n                        end: touch[2],\n                    };\n                    swiper.touchEventsDesktop = {\n                        start: desktop[0],\n                        move: desktop[1],\n                        end: desktop[2],\n                    };\n                    return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n                }()),\n                touchEventsData: {\n                    isTouched: undefined,\n                    isMoved: undefined,\n                    allowTouchCallbacks: undefined,\n                    touchStartTime: undefined,\n                    isScrolling: undefined,\n                    currentTranslate: undefined,\n                    startTranslate: undefined,\n                    allowThresholdMove: undefined,\n                    // Form elements to match\n                    formElements: 'input, select, option, textarea, button, video',\n                    // Last click time\n                    lastClickTime: Utils.now(),\n                    clickTimeout: undefined,\n                    // Velocities\n                    velocities: [],\n                    allowMomentumBounce: undefined,\n                    isTouchEvent: undefined,\n                    startMoving: undefined,\n                },\n\n                // Clicks\n                allowClick: true,\n\n                // Touches\n                allowTouchMove: swiper.params.allowTouchMove,\n\n                touches: {\n                    startX: 0,\n                    startY: 0,\n                    currentX: 0,\n                    currentY: 0,\n                    diff: 0,\n                },\n\n                // Images\n                imagesToLoad: [],\n                imagesLoaded: 0,\n\n            });\n\n            // Install Modules\n            swiper.useModules();\n\n            // Init\n            if (swiper.params.init) {\n                swiper.init();\n            }\n\n            // Return app instance\n            return swiper;\n        }\n\n        if ( SwiperClass$$1 ) Swiper.__proto__ = SwiperClass$$1;\n        Swiper.prototype = Object.create( SwiperClass$$1 && SwiperClass$$1.prototype );\n        Swiper.prototype.constructor = Swiper;\n\n        var staticAccessors = { extendedDefaults: { configurable: true },defaults: { configurable: true },Class: { configurable: true },$: { configurable: true } };\n\n        Swiper.prototype.slidesPerViewDynamic = function slidesPerViewDynamic () {\n            var swiper = this;\n            var params = swiper.params;\n            var slides = swiper.slides;\n            var slidesGrid = swiper.slidesGrid;\n            var swiperSize = swiper.size;\n            var activeIndex = swiper.activeIndex;\n            var spv = 1;\n            if (params.centeredSlides) {\n                var slideSize = slides[activeIndex].swiperSlideSize;\n                var breakLoop;\n                for (var i = activeIndex + 1; i < slides.length; i += 1) {\n                    if (slides[i] && !breakLoop) {\n                        slideSize += slides[i].swiperSlideSize;\n                        spv += 1;\n                        if (slideSize > swiperSize) { breakLoop = true; }\n                    }\n                }\n                for (var i$1 = activeIndex - 1; i$1 >= 0; i$1 -= 1) {\n                    if (slides[i$1] && !breakLoop) {\n                        slideSize += slides[i$1].swiperSlideSize;\n                        spv += 1;\n                        if (slideSize > swiperSize) { breakLoop = true; }\n                    }\n                }\n            } else {\n                for (var i$2 = activeIndex + 1; i$2 < slides.length; i$2 += 1) {\n                    if (slidesGrid[i$2] - slidesGrid[activeIndex] < swiperSize) {\n                        spv += 1;\n                    }\n                }\n            }\n            return spv;\n        };\n\n        Swiper.prototype.update = function update$$1 () {\n            var swiper = this;\n            if (!swiper || swiper.destroyed) { return; }\n            var snapGrid = swiper.snapGrid;\n            var params = swiper.params;\n            // Breakpoints\n            if (params.breakpoints) {\n                swiper.setBreakpoint();\n            }\n            swiper.updateSize();\n            swiper.updateSlides();\n            swiper.updateProgress();\n            swiper.updateSlidesClasses();\n\n            function setTranslate() {\n                var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n                var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n                swiper.setTranslate(newTranslate);\n                swiper.updateActiveIndex();\n                swiper.updateSlidesClasses();\n            }\n            var translated;\n            if (swiper.params.freeMode) {\n                setTranslate();\n                if (swiper.params.autoHeight) {\n                    swiper.updateAutoHeight();\n                }\n            } else {\n                if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n                    translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n                } else {\n                    translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n                }\n                if (!translated) {\n                    setTranslate();\n                }\n            }\n            if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n                swiper.checkOverflow();\n            }\n            swiper.emit('update');\n        };\n\n        Swiper.prototype.init = function init () {\n            var swiper = this;\n            if (swiper.initialized) { return; }\n\n            swiper.emit('beforeInit');\n\n            // Set breakpoint\n            if (swiper.params.breakpoints) {\n                swiper.setBreakpoint();\n            }\n\n            // Add Classes\n            swiper.addClasses();\n\n            // Create loop\n            if (swiper.params.loop) {\n                swiper.loopCreate();\n            }\n\n            // Update size\n            swiper.updateSize();\n\n            // Update slides\n            swiper.updateSlides();\n\n            if (swiper.params.watchOverflow) {\n                swiper.checkOverflow();\n            }\n\n            // Set Grab Cursor\n            if (swiper.params.grabCursor) {\n                swiper.setGrabCursor();\n            }\n\n            if (swiper.params.preloadImages) {\n                swiper.preloadImages();\n            }\n\n            // Slide To Initial Slide\n            if (swiper.params.loop) {\n                swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n            } else {\n                swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n            }\n\n            // Attach events\n            swiper.attachEvents();\n\n            // Init Flag\n            swiper.initialized = true;\n\n            // Emit\n            swiper.emit('init');\n        };\n\n        Swiper.prototype.destroy = function destroy (deleteInstance, cleanStyles) {\n            if ( deleteInstance === void 0 ) deleteInstance = true;\n            if ( cleanStyles === void 0 ) cleanStyles = true;\n\n            var swiper = this;\n            var params = swiper.params;\n            var $el = swiper.$el;\n            var $wrapperEl = swiper.$wrapperEl;\n            var slides = swiper.slides;\n\n            if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n                return null;\n            }\n\n            swiper.emit('beforeDestroy');\n\n            // Init Flag\n            swiper.initialized = false;\n\n            // Detach events\n            swiper.detachEvents();\n\n            // Destroy loop\n            if (params.loop) {\n                swiper.loopDestroy();\n            }\n\n            // Cleanup styles\n            if (cleanStyles) {\n                swiper.removeClasses();\n                $el.removeAttr('style');\n                $wrapperEl.removeAttr('style');\n                if (slides && slides.length) {\n                    slides\n                        .removeClass([\n                            params.slideVisibleClass,\n                            params.slideActiveClass,\n                            params.slideNextClass,\n                            params.slidePrevClass ].join(' '))\n                        .removeAttr('style')\n                        .removeAttr('data-swiper-slide-index')\n                        .removeAttr('data-swiper-column')\n                        .removeAttr('data-swiper-row');\n                }\n            }\n\n            swiper.emit('destroy');\n\n            // Detach emitter events\n            Object.keys(swiper.eventsListeners).forEach(function (eventName) {\n                swiper.off(eventName);\n            });\n\n            if (deleteInstance !== false) {\n                swiper.$el[0].swiper = null;\n                swiper.$el.data('swiper', null);\n                Utils.deleteProps(swiper);\n            }\n            swiper.destroyed = true;\n\n            return null;\n        };\n\n        Swiper.extendDefaults = function extendDefaults (newDefaults) {\n            Utils.extend(extendedDefaults, newDefaults);\n        };\n\n        staticAccessors.extendedDefaults.get = function () {\n            return extendedDefaults;\n        };\n\n        staticAccessors.defaults.get = function () {\n            return defaults;\n        };\n\n        staticAccessors.Class.get = function () {\n            return SwiperClass$$1;\n        };\n\n        staticAccessors.$.get = function () {\n            return $;\n        };\n\n        Object.defineProperties( Swiper, staticAccessors );\n\n        return Swiper;\n    }(SwiperClass));\n\n    var Device$1 = {\n        name: 'device',\n        proto: {\n            device: Device,\n        },\n        static: {\n            device: Device,\n        },\n    };\n\n    var Support$1 = {\n        name: 'support',\n        proto: {\n            support: Support,\n        },\n        static: {\n            support: Support,\n        },\n    };\n\n    var Browser$1 = {\n        name: 'browser',\n        proto: {\n            browser: Browser,\n        },\n        static: {\n            browser: Browser,\n        },\n    };\n\n    var Resize = {\n        name: 'resize',\n        create: function create() {\n            var swiper = this;\n            Utils.extend(swiper, {\n                resize: {\n                    resizeHandler: function resizeHandler() {\n                        if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n                        swiper.emit('beforeResize');\n                        swiper.emit('resize');\n                    },\n                    orientationChangeHandler: function orientationChangeHandler() {\n                        if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n                        swiper.emit('orientationchange');\n                    },\n                },\n            });\n        },\n        on: {\n            init: function init() {\n                var swiper = this;\n                // Emit resize\n                win.addEventListener('resize', swiper.resize.resizeHandler);\n\n                // Emit orientationchange\n                win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n            },\n            destroy: function destroy() {\n                var swiper = this;\n                win.removeEventListener('resize', swiper.resize.resizeHandler);\n                win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n            },\n        },\n    };\n\n    var Observer = {\n        func: win.MutationObserver || win.WebkitMutationObserver,\n        attach: function attach(target, options) {\n            if ( options === void 0 ) options = {};\n\n            var swiper = this;\n\n            var ObserverFunc = Observer.func;\n            var observer = new ObserverFunc(function (mutations) {\n                // The observerUpdate event should only be triggered\n                // once despite the number of mutations.  Additional\n                // triggers are redundant and are very costly\n                if (mutations.length === 1) {\n                    swiper.emit('observerUpdate', mutations[0]);\n                    return;\n                }\n                var observerUpdate = function observerUpdate() {\n                    swiper.emit('observerUpdate', mutations[0]);\n                };\n\n                if (win.requestAnimationFrame) {\n                    win.requestAnimationFrame(observerUpdate);\n                } else {\n                    win.setTimeout(observerUpdate, 0);\n                }\n            });\n\n            observer.observe(target, {\n                attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n                childList: typeof options.childList === 'undefined' ? true : options.childList,\n                characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n            });\n\n            swiper.observer.observers.push(observer);\n        },\n        init: function init() {\n            var swiper = this;\n            if (!Support.observer || !swiper.params.observer) { return; }\n            if (swiper.params.observeParents) {\n                var containerParents = swiper.$el.parents();\n                for (var i = 0; i < containerParents.length; i += 1) {\n                    swiper.observer.attach(containerParents[i]);\n                }\n            }\n            // Observe container\n            swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });\n\n            // Observe wrapper\n            swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n        },\n        destroy: function destroy() {\n            var swiper = this;\n            swiper.observer.observers.forEach(function (observer) {\n                observer.disconnect();\n            });\n            swiper.observer.observers = [];\n        },\n    };\n\n    var Observer$1 = {\n        name: 'observer',\n        params: {\n            observer: false,\n            observeParents: false,\n            observeSlideChildren: false,\n        },\n        create: function create() {\n            var swiper = this;\n            Utils.extend(swiper, {\n                observer: {\n                    init: Observer.init.bind(swiper),\n                    attach: Observer.attach.bind(swiper),\n                    destroy: Observer.destroy.bind(swiper),\n                    observers: [],\n                },\n            });\n        },\n        on: {\n            init: function init() {\n                var swiper = this;\n                swiper.observer.init();\n            },\n            destroy: function destroy() {\n                var swiper = this;\n                swiper.observer.destroy();\n            },\n        },\n    };\n\n    function isEventSupported() {\n        var eventName = 'onwheel';\n        var isSupported = eventName in doc;\n\n        if (!isSupported) {\n            var element = doc.createElement('div');\n            element.setAttribute(eventName, 'return;');\n            isSupported = typeof element[eventName] === 'function';\n        }\n\n        if (!isSupported\n            && doc.implementation\n            && doc.implementation.hasFeature\n            // always returns true in newer browsers as per the standard.\n            // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n            && doc.implementation.hasFeature('', '') !== true\n        ) {\n            // This is the only way to test support for the `wheel` event in IE9+.\n            isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');\n        }\n\n        return isSupported;\n    }\n    var Mousewheel = {\n        lastScrollTime: Utils.now(),\n        event: (function getEvent() {\n            if (win.navigator.userAgent.indexOf('firefox') > -1) { return 'DOMMouseScroll'; }\n            return isEventSupported() ? 'wheel' : 'mousewheel';\n        }()),\n        normalize: function normalize(e) {\n            // Reasonable defaults\n            var PIXEL_STEP = 10;\n            var LINE_HEIGHT = 40;\n            var PAGE_HEIGHT = 800;\n\n            var sX = 0;\n            var sY = 0; // spinX, spinY\n            var pX = 0;\n            var pY = 0; // pixelX, pixelY\n\n            // Legacy\n            if ('detail' in e) {\n                sY = e.detail;\n            }\n            if ('wheelDelta' in e) {\n                sY = -e.wheelDelta / 120;\n            }\n            if ('wheelDeltaY' in e) {\n                sY = -e.wheelDeltaY / 120;\n            }\n            if ('wheelDeltaX' in e) {\n                sX = -e.wheelDeltaX / 120;\n            }\n\n            // side scrolling on FF with DOMMouseScroll\n            if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n                sX = sY;\n                sY = 0;\n            }\n\n            pX = sX * PIXEL_STEP;\n            pY = sY * PIXEL_STEP;\n\n            if ('deltaY' in e) {\n                pY = e.deltaY;\n            }\n            if ('deltaX' in e) {\n                pX = e.deltaX;\n            }\n\n            if ((pX || pY) && e.deltaMode) {\n                if (e.deltaMode === 1) { // delta in LINE units\n                    pX *= LINE_HEIGHT;\n                    pY *= LINE_HEIGHT;\n                } else { // delta in PAGE units\n                    pX *= PAGE_HEIGHT;\n                    pY *= PAGE_HEIGHT;\n                }\n            }\n\n            // Fall-back if spin cannot be determined\n            if (pX && !sX) {\n                sX = (pX < 1) ? -1 : 1;\n            }\n            if (pY && !sY) {\n                sY = (pY < 1) ? -1 : 1;\n            }\n\n            return {\n                spinX: sX,\n                spinY: sY,\n                pixelX: pX,\n                pixelY: pY,\n            };\n        },\n        handleMouseEnter: function handleMouseEnter() {\n            var swiper = this;\n            swiper.mouseEntered = true;\n        },\n        handleMouseLeave: function handleMouseLeave() {\n            var swiper = this;\n            swiper.mouseEntered = false;\n        },\n        handle: function handle(event) {\n            var e = event;\n            var swiper = this;\n            var params = swiper.params.mousewheel;\n\n            if (!swiper.mouseEntered && !params.releaseOnEdges) { return true; }\n\n            if (e.originalEvent) { e = e.originalEvent; } // jquery fix\n            var delta = 0;\n            var rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n            var data = Mousewheel.normalize(e);\n\n            if (params.forceToAxis) {\n                if (swiper.isHorizontal()) {\n                    if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) { delta = data.pixelX * rtlFactor; }\n                    else { return true; }\n                } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) { delta = data.pixelY; }\n                else { return true; }\n            } else {\n                delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n            }\n\n            if (delta === 0) { return true; }\n\n            if (params.invert) { delta = -delta; }\n\n            if (!swiper.params.freeMode) {\n                if (Utils.now() - swiper.mousewheel.lastScrollTime > 60) {\n                    if (delta < 0) {\n                        if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n                            swiper.slideNext();\n                            swiper.emit('scroll', e);\n                        } else if (params.releaseOnEdges) { return true; }\n                    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n                        swiper.slidePrev();\n                        swiper.emit('scroll', e);\n                    } else if (params.releaseOnEdges) { return true; }\n                }\n                swiper.mousewheel.lastScrollTime = (new win.Date()).getTime();\n            } else {\n                // Freemode or scrollContainer:\n                if (swiper.params.loop) {\n                    swiper.loopFix();\n                }\n                var position = swiper.getTranslate() + (delta * params.sensitivity);\n                var wasBeginning = swiper.isBeginning;\n                var wasEnd = swiper.isEnd;\n\n                if (position >= swiper.minTranslate()) { position = swiper.minTranslate(); }\n                if (position <= swiper.maxTranslate()) { position = swiper.maxTranslate(); }\n\n                swiper.setTransition(0);\n                swiper.setTranslate(position);\n                swiper.updateProgress();\n                swiper.updateActiveIndex();\n                swiper.updateSlidesClasses();\n\n                if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n                    swiper.updateSlidesClasses();\n                }\n\n                if (swiper.params.freeModeSticky) {\n                    clearTimeout(swiper.mousewheel.timeout);\n                    swiper.mousewheel.timeout = Utils.nextTick(function () {\n                        swiper.slideToClosest();\n                    }, 300);\n                }\n                // Emit event\n                swiper.emit('scroll', e);\n\n                // Stop autoplay\n                if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) { swiper.autoplay.stop(); }\n                // Return page scroll on edge positions\n                if (position === swiper.minTranslate() || position === swiper.maxTranslate()) { return true; }\n            }\n\n            if (e.preventDefault) { e.preventDefault(); }\n            else { e.returnValue = false; }\n            return false;\n        },\n        enable: function enable() {\n            var swiper = this;\n            if (!Mousewheel.event) { return false; }\n            if (swiper.mousewheel.enabled) { return false; }\n            var target = swiper.$el;\n            if (swiper.params.mousewheel.eventsTarged !== 'container') {\n                target = $(swiper.params.mousewheel.eventsTarged);\n            }\n            target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n            target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n            target.on(Mousewheel.event, swiper.mousewheel.handle);\n            swiper.mousewheel.enabled = true;\n            return true;\n        },\n        disable: function disable() {\n            var swiper = this;\n            if (!Mousewheel.event) { return false; }\n            if (!swiper.mousewheel.enabled) { return false; }\n            var target = swiper.$el;\n            if (swiper.params.mousewheel.eventsTarged !== 'container') {\n                target = $(swiper.params.mousewheel.eventsTarged);\n            }\n            target.off(Mousewheel.event, swiper.mousewheel.handle);\n            swiper.mousewheel.enabled = false;\n            return true;\n        },\n    };\n\n    var Mousewheel$1 = {\n        name: 'mousewheel',\n        params: {\n            mousewheel: {\n                enabled: false,\n                releaseOnEdges: false,\n                invert: false,\n                forceToAxis: false,\n                sensitivity: 1,\n                eventsTarged: 'container',\n            },\n        },\n        create: function create() {\n            var swiper = this;\n            Utils.extend(swiper, {\n                mousewheel: {\n                    enabled: false,\n                    enable: Mousewheel.enable.bind(swiper),\n                    disable: Mousewheel.disable.bind(swiper),\n                    handle: Mousewheel.handle.bind(swiper),\n                    handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n                    handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n                    lastScrollTime: Utils.now(),\n                },\n            });\n        },\n        on: {\n            init: function init() {\n                var swiper = this;\n                if (swiper.params.mousewheel.enabled) { swiper.mousewheel.enable(); }\n            },\n            destroy: function destroy() {\n                var swiper = this;\n                if (swiper.mousewheel.enabled) { swiper.mousewheel.disable(); }\n            },\n        },\n    };\n\n    var Navigation = {\n        update: function update() {\n            // Update Navigation Buttons\n            var swiper = this;\n            var params = swiper.params.navigation;\n\n            if (swiper.params.loop) { return; }\n            var ref = swiper.navigation;\n            var $nextEl = ref.$nextEl;\n            var $prevEl = ref.$prevEl;\n\n            if ($prevEl && $prevEl.length > 0) {\n                if (swiper.isBeginning) {\n                    $prevEl.addClass(params.disabledClass);\n                } else {\n                    $prevEl.removeClass(params.disabledClass);\n                }\n                $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n            }\n            if ($nextEl && $nextEl.length > 0) {\n                if (swiper.isEnd) {\n                    $nextEl.addClass(params.disabledClass);\n                } else {\n                    $nextEl.removeClass(params.disabledClass);\n                }\n                $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n            }\n        },\n        onPrevClick: function onPrevClick(e) {\n            var swiper = this;\n            e.preventDefault();\n            if (swiper.isBeginning && !swiper.params.loop) { return; }\n            swiper.slidePrev();\n        },\n        onNextClick: function onNextClick(e) {\n            var swiper = this;\n            e.preventDefault();\n            if (swiper.isEnd && !swiper.params.loop) { return; }\n            swiper.slideNext();\n        },\n        init: function init() {\n            var swiper = this;\n            var params = swiper.params.navigation;\n            if (!(params.nextEl || params.prevEl)) { return; }\n\n            var $nextEl;\n            var $prevEl;\n            if (params.nextEl) {\n                $nextEl = $(params.nextEl);\n                if (\n                    swiper.params.uniqueNavElements\n                    && typeof params.nextEl === 'string'\n                    && $nextEl.length > 1\n                    && swiper.$el.find(params.nextEl).length === 1\n                ) {\n                    $nextEl = swiper.$el.find(params.nextEl);\n                }\n            }\n            if (params.prevEl) {\n                $prevEl = $(params.prevEl);\n                if (\n                    swiper.params.uniqueNavElements\n                    && typeof params.prevEl === 'string'\n                    && $prevEl.length > 1\n                    && swiper.$el.find(params.prevEl).length === 1\n                ) {\n                    $prevEl = swiper.$el.find(params.prevEl);\n                }\n            }\n\n            if ($nextEl && $nextEl.length > 0) {\n                $nextEl.on('click', swiper.navigation.onNextClick);\n            }\n            if ($prevEl && $prevEl.length > 0) {\n                $prevEl.on('click', swiper.navigation.onPrevClick);\n            }\n\n            Utils.extend(swiper.navigation, {\n                $nextEl: $nextEl,\n                nextEl: $nextEl && $nextEl[0],\n                $prevEl: $prevEl,\n                prevEl: $prevEl && $prevEl[0],\n            });\n        },\n        destroy: function destroy() {\n            var swiper = this;\n            var ref = swiper.navigation;\n            var $nextEl = ref.$nextEl;\n            var $prevEl = ref.$prevEl;\n            if ($nextEl && $nextEl.length) {\n                $nextEl.off('click', swiper.navigation.onNextClick);\n                $nextEl.removeClass(swiper.params.navigation.disabledClass);\n            }\n            if ($prevEl && $prevEl.length) {\n                $prevEl.off('click', swiper.navigation.onPrevClick);\n                $prevEl.removeClass(swiper.params.navigation.disabledClass);\n            }\n        },\n    };\n\n    var Navigation$1 = {\n        name: 'navigation',\n        params: {\n            navigation: {\n                nextEl: null,\n                prevEl: null,\n\n                hideOnClick: false,\n                disabledClass: 'swiper-button-disabled',\n                hiddenClass: 'swiper-button-hidden',\n                lockClass: 'swiper-button-lock',\n            },\n        },\n        create: function create() {\n            var swiper = this;\n            Utils.extend(swiper, {\n                navigation: {\n                    init: Navigation.init.bind(swiper),\n                    update: Navigation.update.bind(swiper),\n                    destroy: Navigation.destroy.bind(swiper),\n                    onNextClick: Navigation.onNextClick.bind(swiper),\n                    onPrevClick: Navigation.onPrevClick.bind(swiper),\n                },\n            });\n        },\n        on: {\n            init: function init() {\n                var swiper = this;\n                swiper.navigation.init();\n                swiper.navigation.update();\n            },\n            toEdge: function toEdge() {\n                var swiper = this;\n                swiper.navigation.update();\n            },\n            fromEdge: function fromEdge() {\n                var swiper = this;\n                swiper.navigation.update();\n            },\n            destroy: function destroy() {\n                var swiper = this;\n                swiper.navigation.destroy();\n            },\n            click: function click(e) {\n                var swiper = this;\n                var ref = swiper.navigation;\n                var $nextEl = ref.$nextEl;\n                var $prevEl = ref.$prevEl;\n                if (\n                    swiper.params.navigation.hideOnClick\n                    && !$(e.target).is($prevEl)\n                    && !$(e.target).is($nextEl)\n                ) {\n                    if ($nextEl) { $nextEl.toggleClass(swiper.params.navigation.hiddenClass); }\n                    if ($prevEl) { $prevEl.toggleClass(swiper.params.navigation.hiddenClass); }\n                }\n            },\n        },\n    };\n\n    var Pagination = {\n        update: function update() {\n            // Render || Update Pagination bullets/items\n            var swiper = this;\n            var rtl = swiper.rtl;\n            var params = swiper.params.pagination;\n            if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n            var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n            var $el = swiper.pagination.$el;\n            // Current/Total\n            var current;\n            var total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n            if (swiper.params.loop) {\n                current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n                if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {\n                    current -= (slidesLength - (swiper.loopedSlides * 2));\n                }\n                if (current > total - 1) { current -= total; }\n                if (current < 0 && swiper.params.paginationType !== 'bullets') { current = total + current; }\n            } else if (typeof swiper.snapIndex !== 'undefined') {\n                current = swiper.snapIndex;\n            } else {\n                current = swiper.activeIndex || 0;\n            }\n            // Types\n            if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n                var bullets = swiper.pagination.bullets;\n                var firstIndex;\n                var lastIndex;\n                var midIndex;\n                if (params.dynamicBullets) {\n                    swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n                    $el.css(swiper.isHorizontal() ? 'width' : 'height', ((swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)) + \"px\"));\n                    if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n                        swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n                        if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {\n                            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n                        } else if (swiper.pagination.dynamicBulletIndex < 0) {\n                            swiper.pagination.dynamicBulletIndex = 0;\n                        }\n                    }\n                    firstIndex = current - swiper.pagination.dynamicBulletIndex;\n                    lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n                    midIndex = (lastIndex + firstIndex) / 2;\n                }\n                bullets.removeClass(((params.bulletActiveClass) + \" \" + (params.bulletActiveClass) + \"-next \" + (params.bulletActiveClass) + \"-next-next \" + (params.bulletActiveClass) + \"-prev \" + (params.bulletActiveClass) + \"-prev-prev \" + (params.bulletActiveClass) + \"-main\"));\n                if ($el.length > 1) {\n                    bullets.each(function (index, bullet) {\n                        var $bullet = $(bullet);\n                        var bulletIndex = $bullet.index();\n                        if (bulletIndex === current) {\n                            $bullet.addClass(params.bulletActiveClass);\n                        }\n                        if (params.dynamicBullets) {\n                            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n                                $bullet.addClass(((params.bulletActiveClass) + \"-main\"));\n                            }\n                            if (bulletIndex === firstIndex) {\n                                $bullet\n                                    .prev()\n                                    .addClass(((params.bulletActiveClass) + \"-prev\"))\n                                    .prev()\n                                    .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n                            }\n                            if (bulletIndex === lastIndex) {\n                                $bullet\n                                    .next()\n                                    .addClass(((params.bulletActiveClass) + \"-next\"))\n                                    .next()\n                                    .addClass(((params.bulletActiveClass) + \"-next-next\"));\n                            }\n                        }\n                    });\n                } else {\n                    var $bullet = bullets.eq(current);\n                    $bullet.addClass(params.bulletActiveClass);\n                    if (params.dynamicBullets) {\n                        var $firstDisplayedBullet = bullets.eq(firstIndex);\n                        var $lastDisplayedBullet = bullets.eq(lastIndex);\n                        for (var i = firstIndex; i <= lastIndex; i += 1) {\n                            bullets.eq(i).addClass(((params.bulletActiveClass) + \"-main\"));\n                        }\n                        $firstDisplayedBullet\n                            .prev()\n                            .addClass(((params.bulletActiveClass) + \"-prev\"))\n                            .prev()\n                            .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n                        $lastDisplayedBullet\n                            .next()\n                            .addClass(((params.bulletActiveClass) + \"-next\"))\n                            .next()\n                            .addClass(((params.bulletActiveClass) + \"-next-next\"));\n                    }\n                }\n                if (params.dynamicBullets) {\n                    var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n                    var bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n                    var offsetProp = rtl ? 'right' : 'left';\n                    bullets.css(swiper.isHorizontal() ? offsetProp : 'top', (bulletsOffset + \"px\"));\n                }\n            }\n            if (params.type === 'fraction') {\n                $el.find((\".\" + (params.currentClass))).text(params.formatFractionCurrent(current + 1));\n                $el.find((\".\" + (params.totalClass))).text(params.formatFractionTotal(total));\n            }\n            if (params.type === 'progressbar') {\n                var progressbarDirection;\n                if (params.progressbarOpposite) {\n                    progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n                } else {\n                    progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n                }\n                var scale = (current + 1) / total;\n                var scaleX = 1;\n                var scaleY = 1;\n                if (progressbarDirection === 'horizontal') {\n                    scaleX = scale;\n                } else {\n                    scaleY = scale;\n                }\n                $el.find((\".\" + (params.progressbarFillClass))).transform((\"translate3d(0,0,0) scaleX(\" + scaleX + \") scaleY(\" + scaleY + \")\")).transition(swiper.params.speed);\n            }\n            if (params.type === 'custom' && params.renderCustom) {\n                $el.html(params.renderCustom(swiper, current + 1, total));\n                swiper.emit('paginationRender', swiper, $el[0]);\n            } else {\n                swiper.emit('paginationUpdate', swiper, $el[0]);\n            }\n            $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n        },\n        render: function render() {\n            // Render Container\n            var swiper = this;\n            var params = swiper.params.pagination;\n            if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n            var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n            var $el = swiper.pagination.$el;\n            var paginationHTML = '';\n            if (params.type === 'bullets') {\n                var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n                for (var i = 0; i < numberOfBullets; i += 1) {\n                    if (params.renderBullet) {\n                        paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n                    } else {\n                        paginationHTML += \"<\" + (params.bulletElement) + \" class=\\\"\" + (params.bulletClass) + \"\\\"></\" + (params.bulletElement) + \">\";\n                    }\n                }\n                $el.html(paginationHTML);\n                swiper.pagination.bullets = $el.find((\".\" + (params.bulletClass)));\n            }\n            if (params.type === 'fraction') {\n                if (params.renderFraction) {\n                    paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n                } else {\n                    paginationHTML = \"<span class=\\\"\" + (params.currentClass) + \"\\\"></span>\"\n                        + ' / '\n                        + \"<span class=\\\"\" + (params.totalClass) + \"\\\"></span>\";\n                }\n                $el.html(paginationHTML);\n            }\n            if (params.type === 'progressbar') {\n                if (params.renderProgressbar) {\n                    paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n                } else {\n                    paginationHTML = \"<span class=\\\"\" + (params.progressbarFillClass) + \"\\\"></span>\";\n                }\n                $el.html(paginationHTML);\n            }\n            if (params.type !== 'custom') {\n                swiper.emit('paginationRender', swiper.pagination.$el[0]);\n            }\n        },\n        init: function init() {\n            var swiper = this;\n            var params = swiper.params.pagination;\n            if (!params.el) { return; }\n\n            var $el = $(params.el);\n            if ($el.length === 0) { return; }\n\n            if (\n                swiper.params.uniqueNavElements\n                && typeof params.el === 'string'\n                && $el.length > 1\n                && swiper.$el.find(params.el).length === 1\n            ) {\n                $el = swiper.$el.find(params.el);\n            }\n\n            if (params.type === 'bullets' && params.clickable) {\n                $el.addClass(params.clickableClass);\n            }\n\n            $el.addClass(params.modifierClass + params.type);\n\n            if (params.type === 'bullets' && params.dynamicBullets) {\n                $el.addClass((\"\" + (params.modifierClass) + (params.type) + \"-dynamic\"));\n                swiper.pagination.dynamicBulletIndex = 0;\n                if (params.dynamicMainBullets < 1) {\n                    params.dynamicMainBullets = 1;\n                }\n            }\n            if (params.type === 'progressbar' && params.progressbarOpposite) {\n                $el.addClass(params.progressbarOppositeClass);\n            }\n\n            if (params.clickable) {\n                $el.on('click', (\".\" + (params.bulletClass)), function onClick(e) {\n                    e.preventDefault();\n                    var index = $(this).index() * swiper.params.slidesPerGroup;\n                    if (swiper.params.loop) { index += swiper.loopedSlides; }\n                    swiper.slideTo(index);\n                });\n            }\n\n            Utils.extend(swiper.pagination, {\n                $el: $el,\n                el: $el[0],\n            });\n        },\n        destroy: function destroy() {\n            var swiper = this;\n            var params = swiper.params.pagination;\n            if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n            var $el = swiper.pagination.$el;\n\n            $el.removeClass(params.hiddenClass);\n            $el.removeClass(params.modifierClass + params.type);\n            if (swiper.pagination.bullets) { swiper.pagination.bullets.removeClass(params.bulletActiveClass); }\n            if (params.clickable) {\n                $el.off('click', (\".\" + (params.bulletClass)));\n            }\n        },\n    };\n\n    var Pagination$1 = {\n        name: 'pagination',\n        params: {\n            pagination: {\n                el: null,\n                bulletElement: 'span',\n                clickable: false,\n                hideOnClick: false,\n                renderBullet: null,\n                renderProgressbar: null,\n                renderFraction: null,\n                renderCustom: null,\n                progressbarOpposite: false,\n                type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n                dynamicBullets: false,\n                dynamicMainBullets: 1,\n                formatFractionCurrent: function (number) { return number; },\n                formatFractionTotal: function (number) { return number; },\n                bulletClass: 'swiper-pagination-bullet',\n                bulletActiveClass: 'swiper-pagination-bullet-active',\n                modifierClass: 'swiper-pagination-', // NEW\n                currentClass: 'swiper-pagination-current',\n                totalClass: 'swiper-pagination-total',\n                hiddenClass: 'swiper-pagination-hidden',\n                progressbarFillClass: 'swiper-pagination-progressbar-fill',\n                progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n                clickableClass: 'swiper-pagination-clickable', // NEW\n                lockClass: 'swiper-pagination-lock',\n            },\n        },\n        create: function create() {\n            var swiper = this;\n            Utils.extend(swiper, {\n                pagination: {\n                    init: Pagination.init.bind(swiper),\n                    render: Pagination.render.bind(swiper),\n                    update: Pagination.update.bind(swiper),\n                    destroy: Pagination.destroy.bind(swiper),\n                    dynamicBulletIndex: 0,\n                },\n            });\n        },\n        on: {\n            init: function init() {\n                var swiper = this;\n                swiper.pagination.init();\n                swiper.pagination.render();\n                swiper.pagination.update();\n            },\n            activeIndexChange: function activeIndexChange() {\n                var swiper = this;\n                if (swiper.params.loop) {\n                    swiper.pagination.update();\n                } else if (typeof swiper.snapIndex === 'undefined') {\n                    swiper.pagination.update();\n                }\n            },\n            snapIndexChange: function snapIndexChange() {\n                var swiper = this;\n                if (!swiper.params.loop) {\n                    swiper.pagination.update();\n                }\n            },\n            slidesLengthChange: function slidesLengthChange() {\n                var swiper = this;\n                if (swiper.params.loop) {\n                    swiper.pagination.render();\n                    swiper.pagination.update();\n                }\n            },\n            snapGridLengthChange: function snapGridLengthChange() {\n                var swiper = this;\n                if (!swiper.params.loop) {\n                    swiper.pagination.render();\n                    swiper.pagination.update();\n                }\n            },\n            destroy: function destroy() {\n                var swiper = this;\n                swiper.pagination.destroy();\n            },\n            click: function click(e) {\n                var swiper = this;\n                if (\n                    swiper.params.pagination.el\n                    && swiper.params.pagination.hideOnClick\n                    && swiper.pagination.$el.length > 0\n                    && !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n                ) {\n                    swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n                }\n            },\n        },\n    };\n\n    var Lazy = {\n        loadInSlide: function loadInSlide(index, loadInDuplicate) {\n            if ( loadInDuplicate === void 0 ) loadInDuplicate = true;\n\n            var swiper = this;\n            var params = swiper.params.lazy;\n            if (typeof index === 'undefined') { return; }\n            if (swiper.slides.length === 0) { return; }\n            var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n            var $slideEl = isVirtual\n                ? swiper.$wrapperEl.children((\".\" + (swiper.params.slideClass) + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\"))\n                : swiper.slides.eq(index);\n\n            var $images = $slideEl.find((\".\" + (params.elementClass) + \":not(.\" + (params.loadedClass) + \"):not(.\" + (params.loadingClass) + \")\"));\n            if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n                $images = $images.add($slideEl[0]);\n            }\n            if ($images.length === 0) { return; }\n\n            $images.each(function (imageIndex, imageEl) {\n                var $imageEl = $(imageEl);\n                $imageEl.addClass(params.loadingClass);\n\n                var background = $imageEl.attr('data-background');\n                var src = $imageEl.attr('data-src');\n                var srcset = $imageEl.attr('data-srcset');\n                var sizes = $imageEl.attr('data-sizes');\n\n                swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, function () {\n                    if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) { return; }\n                    if (background) {\n                        $imageEl.css('background-image', (\"url(\\\"\" + background + \"\\\")\"));\n                        $imageEl.removeAttr('data-background');\n                    } else {\n                        if (srcset) {\n                            $imageEl.attr('srcset', srcset);\n                            $imageEl.removeAttr('data-srcset');\n                        }\n                        if (sizes) {\n                            $imageEl.attr('sizes', sizes);\n                            $imageEl.removeAttr('data-sizes');\n                        }\n                        if (src) {\n                            $imageEl.attr('src', src);\n                            $imageEl.removeAttr('data-src');\n                        }\n                    }\n\n                    $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n                    $slideEl.find((\".\" + (params.preloaderClass))).remove();\n                    if (swiper.params.loop && loadInDuplicate) {\n                        var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n                        if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n                            var originalSlide = swiper.$wrapperEl.children((\"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]:not(.\" + (swiper.params.slideDuplicateClass) + \")\"));\n                            swiper.lazy.loadInSlide(originalSlide.index(), false);\n                        } else {\n                            var duplicatedSlide = swiper.$wrapperEl.children((\".\" + (swiper.params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]\"));\n                            swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n                        }\n                    }\n                    swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n                });\n\n                swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n            });\n        },\n        load: function load() {\n            var swiper = this;\n            var $wrapperEl = swiper.$wrapperEl;\n            var swiperParams = swiper.params;\n            var slides = swiper.slides;\n            var activeIndex = swiper.activeIndex;\n            var isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n            var params = swiperParams.lazy;\n\n            var slidesPerView = swiperParams.slidesPerView;\n            if (slidesPerView === 'auto') {\n                slidesPerView = 0;\n            }\n\n            function slideExist(index) {\n                if (isVirtual) {\n                    if ($wrapperEl.children((\".\" + (swiperParams.slideClass) + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\")).length) {\n                        return true;\n                    }\n                } else if (slides[index]) { return true; }\n                return false;\n            }\n            function slideIndex(slideEl) {\n                if (isVirtual) {\n                    return $(slideEl).attr('data-swiper-slide-index');\n                }\n                return $(slideEl).index();\n            }\n\n            if (!swiper.lazy.initialImageLoaded) { swiper.lazy.initialImageLoaded = true; }\n            if (swiper.params.watchSlidesVisibility) {\n                $wrapperEl.children((\".\" + (swiperParams.slideVisibleClass))).each(function (elIndex, slideEl) {\n                    var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n                    swiper.lazy.loadInSlide(index);\n                });\n            } else if (slidesPerView > 1) {\n                for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n                    if (slideExist(i)) { swiper.lazy.loadInSlide(i); }\n                }\n            } else {\n                swiper.lazy.loadInSlide(activeIndex);\n            }\n            if (params.loadPrevNext) {\n                if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {\n                    var amount = params.loadPrevNextAmount;\n                    var spv = slidesPerView;\n                    var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n                    var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n                    // Next Slides\n                    for (var i$1 = activeIndex + slidesPerView; i$1 < maxIndex; i$1 += 1) {\n                        if (slideExist(i$1)) { swiper.lazy.loadInSlide(i$1); }\n                    }\n                    // Prev Slides\n                    for (var i$2 = minIndex; i$2 < activeIndex; i$2 += 1) {\n                        if (slideExist(i$2)) { swiper.lazy.loadInSlide(i$2); }\n                    }\n                } else {\n                    var nextSlide = $wrapperEl.children((\".\" + (swiperParams.slideNextClass)));\n                    if (nextSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(nextSlide)); }\n\n                    var prevSlide = $wrapperEl.children((\".\" + (swiperParams.slidePrevClass)));\n                    if (prevSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(prevSlide)); }\n                }\n            }\n        },\n    };\n\n    var Lazy$1 = {\n        name: 'lazy',\n        params: {\n            lazy: {\n                enabled: false,\n                loadPrevNext: false,\n                loadPrevNextAmount: 1,\n                loadOnTransitionStart: false,\n\n                elementClass: 'swiper-lazy',\n                loadingClass: 'swiper-lazy-loading',\n                loadedClass: 'swiper-lazy-loaded',\n                preloaderClass: 'swiper-lazy-preloader',\n            },\n        },\n        create: function create() {\n            var swiper = this;\n            Utils.extend(swiper, {\n                lazy: {\n                    initialImageLoaded: false,\n                    load: Lazy.load.bind(swiper),\n                    loadInSlide: Lazy.loadInSlide.bind(swiper),\n                },\n            });\n        },\n        on: {\n            beforeInit: function beforeInit() {\n                var swiper = this;\n                if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n                    swiper.params.preloadImages = false;\n                }\n            },\n            init: function init() {\n                var swiper = this;\n                if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n                    swiper.lazy.load();\n                }\n            },\n            scroll: function scroll() {\n                var swiper = this;\n                if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n                    swiper.lazy.load();\n                }\n            },\n            resize: function resize() {\n                var swiper = this;\n                if (swiper.params.lazy.enabled) {\n                    swiper.lazy.load();\n                }\n            },\n            scrollbarDragMove: function scrollbarDragMove() {\n                var swiper = this;\n                if (swiper.params.lazy.enabled) {\n                    swiper.lazy.load();\n                }\n            },\n            transitionStart: function transitionStart() {\n                var swiper = this;\n                if (swiper.params.lazy.enabled) {\n                    if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {\n                        swiper.lazy.load();\n                    }\n                }\n            },\n            transitionEnd: function transitionEnd() {\n                var swiper = this;\n                if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n                    swiper.lazy.load();\n                }\n            },\n        },\n    };\n\n    var a11y = {\n        makeElFocusable: function makeElFocusable($el) {\n            $el.attr('tabIndex', '0');\n            return $el;\n        },\n        addElRole: function addElRole($el, role) {\n            $el.attr('role', role);\n            return $el;\n        },\n        addElLabel: function addElLabel($el, label) {\n            $el.attr('aria-label', label);\n            return $el;\n        },\n        disableEl: function disableEl($el) {\n            $el.attr('aria-disabled', true);\n            return $el;\n        },\n        enableEl: function enableEl($el) {\n            $el.attr('aria-disabled', false);\n            return $el;\n        },\n        onEnterKey: function onEnterKey(e) {\n            var swiper = this;\n            var params = swiper.params.a11y;\n            if (e.keyCode !== 13) { return; }\n            var $targetEl = $(e.target);\n            if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n                if (!(swiper.isEnd && !swiper.params.loop)) {\n                    swiper.slideNext();\n                }\n                if (swiper.isEnd) {\n                    swiper.a11y.notify(params.lastSlideMessage);\n                } else {\n                    swiper.a11y.notify(params.nextSlideMessage);\n                }\n            }\n            if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n                if (!(swiper.isBeginning && !swiper.params.loop)) {\n                    swiper.slidePrev();\n                }\n                if (swiper.isBeginning) {\n                    swiper.a11y.notify(params.firstSlideMessage);\n                } else {\n                    swiper.a11y.notify(params.prevSlideMessage);\n                }\n            }\n            if (swiper.pagination && $targetEl.is((\".\" + (swiper.params.pagination.bulletClass)))) {\n                $targetEl[0].click();\n            }\n        },\n        notify: function notify(message) {\n            var swiper = this;\n            var notification = swiper.a11y.liveRegion;\n            if (notification.length === 0) { return; }\n            notification.html('');\n            notification.html(message);\n        },\n        updateNavigation: function updateNavigation() {\n            var swiper = this;\n\n            if (swiper.params.loop) { return; }\n            var ref = swiper.navigation;\n            var $nextEl = ref.$nextEl;\n            var $prevEl = ref.$prevEl;\n\n            if ($prevEl && $prevEl.length > 0) {\n                if (swiper.isBeginning) {\n                    swiper.a11y.disableEl($prevEl);\n                } else {\n                    swiper.a11y.enableEl($prevEl);\n                }\n            }\n            if ($nextEl && $nextEl.length > 0) {\n                if (swiper.isEnd) {\n                    swiper.a11y.disableEl($nextEl);\n                } else {\n                    swiper.a11y.enableEl($nextEl);\n                }\n            }\n        },\n        updatePagination: function updatePagination() {\n            var swiper = this;\n            var params = swiper.params.a11y;\n            if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n                swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {\n                    var $bulletEl = $(bulletEl);\n                    swiper.a11y.makeElFocusable($bulletEl);\n                    swiper.a11y.addElRole($bulletEl, 'button');\n                    swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1));\n                });\n            }\n        },\n        init: function init() {\n            var swiper = this;\n\n            swiper.$el.append(swiper.a11y.liveRegion);\n\n            // Navigation\n            var params = swiper.params.a11y;\n            var $nextEl;\n            var $prevEl;\n            if (swiper.navigation && swiper.navigation.$nextEl) {\n                $nextEl = swiper.navigation.$nextEl;\n            }\n            if (swiper.navigation && swiper.navigation.$prevEl) {\n                $prevEl = swiper.navigation.$prevEl;\n            }\n            if ($nextEl) {\n                swiper.a11y.makeElFocusable($nextEl);\n                swiper.a11y.addElRole($nextEl, 'button');\n                swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n                $nextEl.on('keydown', swiper.a11y.onEnterKey);\n            }\n            if ($prevEl) {\n                swiper.a11y.makeElFocusable($prevEl);\n                swiper.a11y.addElRole($prevEl, 'button');\n                swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n                $prevEl.on('keydown', swiper.a11y.onEnterKey);\n            }\n\n            // Pagination\n            if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n                swiper.pagination.$el.on('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n            }\n        },\n        destroy: function destroy() {\n            var swiper = this;\n            if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) { swiper.a11y.liveRegion.remove(); }\n\n            var $nextEl;\n            var $prevEl;\n            if (swiper.navigation && swiper.navigation.$nextEl) {\n                $nextEl = swiper.navigation.$nextEl;\n            }\n            if (swiper.navigation && swiper.navigation.$prevEl) {\n                $prevEl = swiper.navigation.$prevEl;\n            }\n            if ($nextEl) {\n                $nextEl.off('keydown', swiper.a11y.onEnterKey);\n            }\n            if ($prevEl) {\n                $prevEl.off('keydown', swiper.a11y.onEnterKey);\n            }\n\n            // Pagination\n            if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n                swiper.pagination.$el.off('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n            }\n        },\n    };\n    var A11y = {\n        name: 'a11y',\n        params: {\n            a11y: {\n                enabled: true,\n                notificationClass: 'swiper-notification',\n                prevSlideMessage: 'Previous slide',\n                nextSlideMessage: 'Next slide',\n                firstSlideMessage: 'This is the first slide',\n                lastSlideMessage: 'This is the last slide',\n                paginationBulletMessage: 'Go to slide {{index}}',\n            },\n        },\n        create: function create() {\n            var swiper = this;\n            Utils.extend(swiper, {\n                a11y: {\n                    liveRegion: $((\"<span class=\\\"\" + (swiper.params.a11y.notificationClass) + \"\\\" aria-live=\\\"assertive\\\" aria-atomic=\\\"true\\\"></span>\")),\n                },\n            });\n            Object.keys(a11y).forEach(function (methodName) {\n                swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n            });\n        },\n        on: {\n            init: function init() {\n                var swiper = this;\n                if (!swiper.params.a11y.enabled) { return; }\n                swiper.a11y.init();\n                swiper.a11y.updateNavigation();\n            },\n            toEdge: function toEdge() {\n                var swiper = this;\n                if (!swiper.params.a11y.enabled) { return; }\n                swiper.a11y.updateNavigation();\n            },\n            fromEdge: function fromEdge() {\n                var swiper = this;\n                if (!swiper.params.a11y.enabled) { return; }\n                swiper.a11y.updateNavigation();\n            },\n            paginationUpdate: function paginationUpdate() {\n                var swiper = this;\n                if (!swiper.params.a11y.enabled) { return; }\n                swiper.a11y.updatePagination();\n            },\n            destroy: function destroy() {\n                var swiper = this;\n                if (!swiper.params.a11y.enabled) { return; }\n                swiper.a11y.destroy();\n            },\n        },\n    };\n\n    /* eslint no-underscore-dangle: \"off\" */\n\n    var Autoplay = {\n        run: function run() {\n            var swiper = this;\n            var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n            var delay = swiper.params.autoplay.delay;\n            if ($activeSlideEl.attr('data-swiper-autoplay')) {\n                delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n            }\n            swiper.autoplay.timeout = Utils.nextTick(function () {\n                if (swiper.params.autoplay.reverseDirection) {\n                    if (swiper.params.loop) {\n                        swiper.loopFix();\n                        swiper.slidePrev(swiper.params.speed, true, true);\n                        swiper.emit('autoplay');\n                    } else if (!swiper.isBeginning) {\n                        swiper.slidePrev(swiper.params.speed, true, true);\n                        swiper.emit('autoplay');\n                    } else if (!swiper.params.autoplay.stopOnLastSlide) {\n                        swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n                        swiper.emit('autoplay');\n                    } else {\n                        swiper.autoplay.stop();\n                    }\n                } else if (swiper.params.loop) {\n                    swiper.loopFix();\n                    swiper.slideNext(swiper.params.speed, true, true);\n                    swiper.emit('autoplay');\n                } else if (!swiper.isEnd) {\n                    swiper.slideNext(swiper.params.speed, true, true);\n                    swiper.emit('autoplay');\n                } else if (!swiper.params.autoplay.stopOnLastSlide) {\n                    swiper.slideTo(0, swiper.params.speed, true, true);\n                    swiper.emit('autoplay');\n                } else {\n                    swiper.autoplay.stop();\n                }\n            }, delay);\n        },\n        start: function start() {\n            var swiper = this;\n            if (typeof swiper.autoplay.timeout !== 'undefined') { return false; }\n            if (swiper.autoplay.running) { return false; }\n            swiper.autoplay.running = true;\n            swiper.emit('autoplayStart');\n            swiper.autoplay.run();\n            return true;\n        },\n        stop: function stop() {\n            var swiper = this;\n            if (!swiper.autoplay.running) { return false; }\n            if (typeof swiper.autoplay.timeout === 'undefined') { return false; }\n\n            if (swiper.autoplay.timeout) {\n                clearTimeout(swiper.autoplay.timeout);\n                swiper.autoplay.timeout = undefined;\n            }\n            swiper.autoplay.running = false;\n            swiper.emit('autoplayStop');\n            return true;\n        },\n        pause: function pause(speed) {\n            var swiper = this;\n            if (!swiper.autoplay.running) { return; }\n            if (swiper.autoplay.paused) { return; }\n            if (swiper.autoplay.timeout) { clearTimeout(swiper.autoplay.timeout); }\n            swiper.autoplay.paused = true;\n            if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n                swiper.autoplay.paused = false;\n                swiper.autoplay.run();\n            } else {\n                swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n                swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n            }\n        },\n    };\n\n    var Autoplay$1 = {\n        name: 'autoplay',\n        params: {\n            autoplay: {\n                enabled: false,\n                delay: 3000,\n                waitForTransition: true,\n                disableOnInteraction: true,\n                stopOnLastSlide: false,\n                reverseDirection: false,\n            },\n        },\n        create: function create() {\n            var swiper = this;\n            Utils.extend(swiper, {\n                autoplay: {\n                    running: false,\n                    paused: false,\n                    run: Autoplay.run.bind(swiper),\n                    start: Autoplay.start.bind(swiper),\n                    stop: Autoplay.stop.bind(swiper),\n                    pause: Autoplay.pause.bind(swiper),\n                    onTransitionEnd: function onTransitionEnd(e) {\n                        if (!swiper || swiper.destroyed || !swiper.$wrapperEl) { return; }\n                        if (e.target !== this) { return; }\n                        swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n                        swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n                        swiper.autoplay.paused = false;\n                        if (!swiper.autoplay.running) {\n                            swiper.autoplay.stop();\n                        } else {\n                            swiper.autoplay.run();\n                        }\n                    },\n                },\n            });\n        },\n        on: {\n            init: function init() {\n                var swiper = this;\n                if (swiper.params.autoplay.enabled) {\n                    swiper.autoplay.start();\n                }\n            },\n            beforeTransitionStart: function beforeTransitionStart(speed, internal) {\n                var swiper = this;\n                if (swiper.autoplay.running) {\n                    if (internal || !swiper.params.autoplay.disableOnInteraction) {\n                        swiper.autoplay.pause(speed);\n                    } else {\n                        swiper.autoplay.stop();\n                    }\n                }\n            },\n            sliderFirstMove: function sliderFirstMove() {\n                var swiper = this;\n                if (swiper.autoplay.running) {\n                    if (swiper.params.autoplay.disableOnInteraction) {\n                        swiper.autoplay.stop();\n                    } else {\n                        swiper.autoplay.pause();\n                    }\n                }\n            },\n            destroy: function destroy() {\n                var swiper = this;\n                if (swiper.autoplay.running) {\n                    swiper.autoplay.stop();\n                }\n            },\n        },\n    };\n\n    var Fade = {\n        setTranslate: function setTranslate() {\n            var swiper = this;\n            var slides = swiper.slides;\n            for (var i = 0; i < slides.length; i += 1) {\n                var $slideEl = swiper.slides.eq(i);\n                var offset = $slideEl[0].swiperSlideOffset;\n                var tx = -offset;\n                if (!swiper.params.virtualTranslate) { tx -= swiper.translate; }\n                var ty = 0;\n                if (!swiper.isHorizontal()) {\n                    ty = tx;\n                    tx = 0;\n                }\n                var slideOpacity = swiper.params.fadeEffect.crossFade\n                    ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n                    : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n                $slideEl\n                    .css({\n                        opacity: slideOpacity,\n                    })\n                    .transform((\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px)\"));\n            }\n        },\n        setTransition: function setTransition(duration) {\n            var swiper = this;\n            var slides = swiper.slides;\n            var $wrapperEl = swiper.$wrapperEl;\n            slides.transition(duration);\n            if (swiper.params.virtualTranslate && duration !== 0) {\n                var eventTriggered = false;\n                slides.transitionEnd(function () {\n                    if (eventTriggered) { return; }\n                    if (!swiper || swiper.destroyed) { return; }\n                    eventTriggered = true;\n                    swiper.animating = false;\n                    var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n                    for (var i = 0; i < triggerEvents.length; i += 1) {\n                        $wrapperEl.trigger(triggerEvents[i]);\n                    }\n                });\n            }\n        },\n    };\n\n    var EffectFade = {\n        name: 'effect-fade',\n        params: {\n            fadeEffect: {\n                crossFade: false,\n            },\n        },\n        create: function create() {\n            var swiper = this;\n            Utils.extend(swiper, {\n                fadeEffect: {\n                    setTranslate: Fade.setTranslate.bind(swiper),\n                    setTransition: Fade.setTransition.bind(swiper),\n                },\n            });\n        },\n        on: {\n            beforeInit: function beforeInit() {\n                var swiper = this;\n                if (swiper.params.effect !== 'fade') { return; }\n                swiper.classNames.push(((swiper.params.containerModifierClass) + \"fade\"));\n                var overwriteParams = {\n                    slidesPerView: 1,\n                    slidesPerColumn: 1,\n                    slidesPerGroup: 1,\n                    watchSlidesProgress: true,\n                    spaceBetween: 0,\n                    virtualTranslate: true,\n                };\n                Utils.extend(swiper.params, overwriteParams);\n                Utils.extend(swiper.originalParams, overwriteParams);\n            },\n            setTranslate: function setTranslate() {\n                var swiper = this;\n                if (swiper.params.effect !== 'fade') { return; }\n                swiper.fadeEffect.setTranslate();\n            },\n            setTransition: function setTransition(duration) {\n                var swiper = this;\n                if (swiper.params.effect !== 'fade') { return; }\n                swiper.fadeEffect.setTransition(duration);\n            },\n        },\n    };\n\n    // Swiper Class\n\n    var components = [\n        Device$1,\n        Support$1,\n        Browser$1,\n        Resize,\n        Observer$1,\n        Mousewheel$1,\n        Navigation$1,\n        Pagination$1,\n        Lazy$1,\n        A11y,\n        Autoplay$1,\n        EffectFade\n    ];\n\n    if (typeof Swiper.use === 'undefined') {\n        Swiper.use = Swiper.Class.use;\n        Swiper.installModule = Swiper.Class.installModule;\n    }\n\n    Swiper.use(components);\n\n    return Swiper;\n\n})));\n","/**\n * Global\n *\n * 01. SVG\n * 02. Object-Fit Image\n * 03. Social Share\n * 04. Video Replacement\n * 05. Fluid Video\n * 06. Search\n *\n * @global jQuery\n * @author Matteo Casonato\n */\n\n\n(function ($) {\n    'use strict';\n\n    /**\n     * SVG\n     *\n     * @see {@link libraries/svg4everybody.js}\n     */\n    svg4everybody();\n\n\n    /**\n     * Object-Fit Image\n     *\n     * @see {@link libraries/ofi.js}\n     */\n    objectFitImages();\n\n\n    /**\n     * Video Replacement\n     *\n     * @global jQuery\n     * @author Daniele De Nobili\n     */\n    (function () {\n        $('.js-video').each(function () {\n            var self = $(this),\n                image = self.find('.js-videoimage'),\n                video = self.find('.js-videoiframe');\n\n            image.on('click', function () {\n                var url = '';\n\n                image.hide();\n\n                if (video.data('source') === 'vimeo') {\n                    url = 'https://player.vimeo.com/video/' + video.data('video-id') + '?autoplay=1&byline=0&badge=0&title=0&loop=1';\n                } else {\n                    url = 'https://www.youtube.com/embed/' + video.data('video-id') + '?autoplay=1&amp;rel=0&amp;showinfo=0&amp;&amp;autohide=1&amp;color=white';\n                }\n\n                var iframe = $('<iframe width=\"1200\" height=\"675\" src=\"' + url + '\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>');\n\n                iframe.attr('data-title', video.data('title'));\n\n                video\n                    .html(iframe)\n                    .show();\n            });\n        });\n    }());\n\n\n    /**\n     * Fluid Video\n     *\n     * @requires plugins/jquery.fitvids.js\n     */\n    $('.single__body iframe[data-src*=\"youtube\"], .single__body iframe[data-src*=\"vimeo\"]').parent().fitVids();\n\n\n    /**\n     * Back To Top\n     *\n     * @see https://github.com/CodyHouse/back-to-top/\n     */\n    (function () {\n        // Back to Top - by CodyHouse.co\n        var backTop = document.getElementsByClassName('js-backtotop')[0],\n            // browser window scroll (in pixels) after which the \"back to top\" link is shown\n            offset = 300,\n            //browser window scroll (in pixels) after which the \"back to top\" link opacity is reduced\n            offsetOpacity = 1200,\n            scrollDuration = 700,\n            scrolling = false;\n        if (backTop) {\n            //update back to top visibility on scrolling\n            window.addEventListener(\"scroll\", function (event) {\n                if (!scrolling) {\n                    scrolling = true;\n                    (!window.requestAnimationFrame) ? setTimeout(checkBackToTop, 250) : window.requestAnimationFrame(checkBackToTop);\n                }\n            });\n        }\n\n        function checkBackToTop() {\n            var windowTop = window.scrollY || document.documentElement.scrollTop;\n            (windowTop > offset) ? addClass(backTop, 'c-backtotop--show') : removeClass(backTop, 'c-backtotop--show', 'c-backtotop--fade-out');\n            (windowTop > offsetOpacity) && addClass(backTop, 'c-backtotop--fade-out');\n            scrolling = false;\n        }\n\n        //class manipulations - needed if classList is not supported\n        function hasClass(el, className) {\n            if (el.classList) return el.classList.contains(className);\n            else return !!el.className.match(new RegExp('(\\\\s|^)' + className + '(\\\\s|$)'));\n        }\n\n        function addClass(el, className) {\n            var classList = className.split(' ');\n            if (el.classList) el.classList.add(classList[0]);\n            else if (!hasClass(el, classList[0])) el.className += \" \" + classList[0];\n            if (classList.length > 1) addClass(el, classList.slice(1).join(' '));\n        }\n\n        function removeClass(el, className) {\n            var classList = className.split(' ');\n            if (el.classList) el.classList.remove(classList[0]);\n            else if (hasClass(el, classList[0])) {\n                var reg = new RegExp('(\\\\s|^)' + classList[0] + '(\\\\s|$)');\n                el.className = el.className.replace(reg, ' ');\n            }\n            if (classList.length > 1) removeClass(el, classList.slice(1).join(' '));\n        }\n    })();\n\n\n    /**\n     * Testimonials\n     */\n    window.addEventListener(\"load\", function () {\n        'use strict';\n\n        setTimeout(function () {\n            new Swiper('.js-testimonialsCarousel', {\n                slidesPerView: 'auto',\n                grabCursor: true,\n                watchOverflow: true,\n                autoplay: {\n                    delay: 5000,\n                    disableOnInteraction: true,\n                },\n                pagination: {\n                    el: '.js-testimonialsCarouselPag',\n                    clickable: true\n                },\n            });\n        }, 1000);\n    });\n\n}(jQuery));\n","/**\n * Menu\n *\n * @global jQuery\n * @author Matteo Casonato\n */\n\n\n(function ($) {\n    'use strict';\n\n    //open/close mega-navigation\n    $('.nav__trigger').on('click', function (event) {\n        event.preventDefault();\n        toggleNav();\n    });\n\n    //close meganavigation\n    $('.nav__dropdown .nav__close').on('click', function (event) {\n        event.preventDefault();\n        toggleNav();\n    });\n\n    //on mobile - open submenu\n    $('.menu__item--parent').children('a').on('click', function (event) {\n        //prevent default clicking on direct children of .menu__item--parent\n        event.preventDefault();\n        var selected = $(this);\n        selected.next('ul').removeClass('is-hidden').end().parent('.menu__item--parent').parent('ul').addClass('move-out');\n    });\n\n    //on desktop - differentiate between a user trying to hover over a dropdown item vs trying to navigate into a submenu's contents\n    var submenuDirection = (!$('.nav').hasClass('open-to-left')) ? 'right' : 'left';\n    $('.menu').menuAim({\n        activate: function (row) {\n            $(row).children().addClass('is-active').removeClass('fade-out');\n            if ($('.menu .fade-in').length == 0) $(row).children('ul').addClass('fade-in');\n        },\n        deactivate: function (row) {\n            $(row).children().removeClass('is-active');\n            if ($('li.menu__item--parent:hover').length == 0 || $('li.menu__item--parent:hover').is($(row))) {\n                $('.menu').find('.fade-in').removeClass('fade-in');\n                $(row).children('ul').addClass('fade-out')\n            }\n        },\n        exitMenu: function () {\n            $('.menu').find('.is-active').removeClass('is-active');\n            return true;\n        },\n        submenuDirection: submenuDirection,\n    });\n\n    //submenu items - go back link\n    $('.go-back').on('click', function () {\n        var selected = $(this),\n            visibleNav = $(this).parent('ul').parent('.menu__item--parent').parent('ul');\n        selected.parent('ul').addClass('is-hidden').parent('.menu__item--parent').parent('ul').removeClass('move-out');\n    });\n\n    function toggleNav() {\n        var navIsVisible = (!$('.nav__dropdown').hasClass('dropdown-is-active')) ? true : false;\n        $('.nav__dropdown').toggleClass('dropdown-is-active', navIsVisible);\n        $('.nav__trigger').toggleClass('dropdown-is-active', navIsVisible);\n        if (!navIsVisible) {\n            $('.nav__dropdown').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function () {\n                $('.menu__item--parent ul').addClass('is-hidden');\n                $('.move-out').removeClass('move-out');\n                $('.is-active').removeClass('is-active');\n            });\n        }\n    }\n\n}(jQuery));\n","/**\n * Home\n *\n * 01. Spotlight\n * 02. Course\n * 03. Therapy\n * 04. Pathology\n *\n * @global jQuery\n * @author Matteo Casonato\n */\n\n(function ($) {\n\t'use strict';\n\n    window.addEventListener(\"load\", function() {\n        'use strict';\n\n        setTimeout(function () {\n\n            /**\n             * Spotlight\n             *\n             * @requires plugins/swiper.js\n             *\n             * @see https://codepen.io/aaronkahlhamer/pen/GveaXP\n             */\n            new Swiper('.js-spotlightCarousel', {\n                spaceBetween: 0,\n                speed: 1600,\n                loop: true,\n                effect: 'fade',\n                autoHeight: true,\n                slidesPerView: 1,\n                grabCursor: false,\n                mousewheel: false,\n                lazy: true,\n                preventClicks: false,\n                autoplay: {\n                    delay: 5000,\n                },\n                pagination: {\n                    el: '.js-spotlightCarouselPagination',\n                    type: 'fraction',\n                },\n                breakpointsInverse: true,\n                breakpoints: {\n                    // >= 1200px\n                    1200: {\n                        autoHeight: false\n                    }\n                },\n            });\n\n\n            /**\n             * Pathology\n             */\n            (function () {\n                var images = $('.js-pathologyImages img');\n\n                $('.js-pathologyLinks').on('mouseover', 'li', function (event) {\n                    var index = $(this).index();\n\n                    images.removeClass('is-active');\n                    images.eq(index).addClass('is-active');\n                });\n            }());\n\n\n            /**\n             * Course\n             *\n             * @requires plugins/swiper.js\n             *\n             * @see https://codepen.io/aaronkahlhamer/pen/GveaXP\n             */\n            (function () {\n                // breakpoint where swiper will be destroyed\n                // and switches to a dual-column layout\n                var breakpoint = window.matchMedia('(max-width: 1199px)');\n\n                // keep track of swiper instances to destroy later\n                var courseCarousel = void 0;\n\n                var breakpointChecker = function breakpointChecker() {\n                    // if larger viewport and multi-row layout needed\n                    if (breakpoint.matches === true) {\n                        // clean up old instances and inline styles when available\n                        if (courseCarousel !== undefined) courseCarousel.destroy(true, true);\n                        // or/and do nothing\n                        return;\n                        // else if a small viewport and single column layout needed\n                    } else if (breakpoint.matches === false) {\n                        // fire small viewport version of swiper\n                        return enableSwiper();\n                    }\n                };\n\n                // title\n                var titles = [];\n\n                $('.js-courseCarousel .o-course').each(function() {\n                    titles.push($(this).find('a').data('title'))\n                });\n\n                var enableSwiper = function enableSwiper() {\n                    new Swiper('.js-courseCarousel', {\n                        speed: 1600,\n                        spaceBetween: 0,\n                        loop: true,\n                        effect: 'fade',\n                        slidesPerView: 1,\n                        grabCursor: false,\n                        pagination: {\n                            el: '.js-courseCarouselPagination',\n                            clickable: true,\n                            renderBullet: function (index, className) {\n                                return '<span class=\"' + className + '\">' + titles[index] + '</span>';\n                            },\n                        }\n                    });\n                };\n\n                // keep an eye on viewport size changes\n                breakpoint.addListener(breakpointChecker);\n\n                // kickstart\n                breakpointChecker();\n            }());\n\n\n\n            /**\n             * Posts\n             *\n             * Imposto il setTimeout perchè altrimenti la slide sbrocca nel caso del css critico.\n             *\n             * @requires plugins/swiper.js\n             *\n             * @see https://codepen.io/aaronkahlhamer/pen/GveaXP\n             */\n            new Swiper('.js-postCarousel', {\n                slidesPerView: 'auto',\n                grabCursor: true,\n                watchOverflow: true,\n                navigation: {\n                    prevEl: '.js-postCarouselPrev',\n                    nextEl: '.js-postCarouselNext'\n                }\n            });\n\n        }, 1000);\n\n    });\n\n}(jQuery));\n\n","/**\n * Singular\n *\n * 01. Sticky Social Bar\n * 02. Responsive Table\n *\n * @global jQuery\n * @author Matteo Casonato\n */\n\n(function ($) {\n\t'use strict';\n\n    /**\n     * Sticky Social Bar\n     */\n    var shareSticky = $(\".js-share\");\n\n    $(window).scroll(function() {\n        var topPos = $(this).scrollTop();\n\n        shareSticky.toggleClass('is-show', topPos >= 200);\n    });\n\n\n    /**\n     * Responsive Table\n     */\n    $('.single__content table').each(function () {\n        var table = $(this),\n            th = table.find('thead th'),\n            headers = [];\n\n        th.each(function () {\n            headers.push($(this).text());\n        });\n\n        table.find('tbody tr').each(function () {\n            var cells = $(this).find('td');\n\n            headers.map(function (value, index) {\n                cells.eq(index).attr('data-label', value);\n            });\n        });\n    });\n\n}(jQuery));\n"]}