{"version":3,"file":"viewer.js","sources":["../_src/js/photoswipe.js","../_src/js/photoswipe-ui-default.js","../_src/js/viewer-template-scroll.js","../_src/js/slick.js","../_src/js/horizontalBox.js","../_src/js/viewer.js","../_src/js/viewer-template.js"],"sourcesContent":["const PhotoSwipe = function(template, UiClass, items, options){\n\n /*>>framework-bridge*/\n /**\n *\n * Set of generic functions used by gallery.\n *\n * You're free to modify anything here as long as functionality is kept.\n *\n */\n var framework = {\n features: null,\n bind: function(target, type, listener, unbind){\n var methodName = (unbind ? 'remove' : 'add') + 'EventListener';\n type = type.split(' ');\n for(var i = 0; i < type.length; i++) {\n if(type[i]) {\n target[methodName](type[i], listener, false);\n }\n }\n },\n isArray: function(obj){\n return (obj instanceof Array);\n },\n createEl: function(classes, tag){\n var el = document.createElement(tag || 'div');\n if(classes) {\n el.className = classes;\n }\n return el;\n },\n getScrollY: function(){\n var yOffset = window.pageYOffset;\n return yOffset !== undefined ? yOffset : document.documentElement.scrollTop;\n },\n unbind: function(target, type, listener){\n framework.bind(target, type, listener, true);\n },\n removeClass: function(el, className){\n var reg = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)');\n el.className = el.className.replace(reg, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n },\n addClass: function(el, className){\n if(!framework.hasClass(el, className)) {\n el.className += (el.className ? ' ' : '') + className;\n }\n },\n hasClass: function(el, className){\n return el.className && new RegExp('(^|\\\\s)' + className + '(\\\\s|$)').test(el.className);\n },\n getChildByClass: function(parentEl, childClassName){\n var node = parentEl.firstChild;\n while(node) {\n if(framework.hasClass(node, childClassName)) {\n return node;\n }\n node = node.nextSibling;\n }\n },\n arraySearch: function(array, value, key){\n var i = array.length;\n while(i--) {\n if(array[i][key] === value) {\n return i;\n }\n }\n return -1;\n },\n extend: function(o1, o2, preventOverwrite){\n for(var prop in o2) {\n if(o2.hasOwnProperty(prop)) {\n if(preventOverwrite && o1.hasOwnProperty(prop)) {\n continue;\n }\n o1[prop] = o2[prop];\n }\n }\n },\n easing: {\n sine: {\n out: function(k){\n return Math.sin(k * (Math.PI / 2));\n },\n inOut: function(k){\n return -(Math.cos(Math.PI * k) - 1) / 2;\n }\n },\n cubic: {\n out: function(k){\n return --k * k * k + 1;\n }\n }\n /*\n\t\t\telastic: {\n\t\t\t\tout: function ( k ) {\n\n\t\t\t\t\tvar s, a = 0.1, p = 0.4;\n\t\t\t\t\tif ( k === 0 ) return 0;\n\t\t\t\t\tif ( k === 1 ) return 1;\n\t\t\t\t\tif ( !a || a < 1 ) { a = 1; s = p / 4; }\n\t\t\t\t\telse s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );\n\t\t\t\t\treturn ( a * Math.pow( 2, - 10 * k) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) + 1 );\n\n\t\t\t\t},\n\t\t\t},\n\t\t\tback: {\n\t\t\t\tout: function ( k ) {\n\t\t\t\t\tvar s = 1.70158;\n\t\t\t\t\treturn --k * k * ( ( s + 1 ) * k + s ) + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t*/\n },\n\n /**\n *\n * @return {object}\n *\n * {\n\t * raf : request animation frame function\n\t * caf : cancel animation frame function\n\t * transfrom : transform property key (with vendor), or null if not supported\n\t * oldIE : IE8 or below\n\t * }\n *\n */\n detectFeatures: function(){\n if(framework.features) {\n return framework.features;\n }\n var helperEl = framework.createEl(),\n helperStyle = helperEl.style,\n vendor = '',\n features = {};\n\n // IE8 and below\n features.oldIE = document.all && !document.addEventListener;\n\n features.touch = 'ontouchstart' in window;\n\n if(window.requestAnimationFrame) {\n features.raf = window.requestAnimationFrame;\n features.caf = window.cancelAnimationFrame;\n }\n\n features.pointerEvent = navigator.pointerEnabled || navigator.msPointerEnabled;\n\n // fix false-positive detection of old Android in new IE\n // (IE11 ua string contains \"Android 4.0\")\n\n if(!features.pointerEvent) {\n\n var ua = navigator.userAgent;\n\n // Detect if device is iPhone or iPod and if it's older than iOS 8\n // http://stackoverflow.com/a/14223920\n //\n // This detection is made because of buggy top/bottom toolbars\n // that don't trigger window.resize event.\n // For more info refer to _isFixedPosition variable in core.js\n\n if(/iP(hone|od)/.test(navigator.platform)) {\n var v = (navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n if(v && v.length > 0) {\n v = parseInt(v[1], 10);\n if(v >= 1 && v < 8) {\n features.isOldIOSPhone = true;\n }\n }\n }\n\n // Detect old Android (before KitKat)\n // due to bugs related to position:fixed\n // http://stackoverflow.com/questions/7184573/pick-up-the-android-version-in-the-browser-by-javascript\n\n var match = ua.match(/Android\\s([0-9\\.]*)/);\n var androidversion = match ? match[1] : 0;\n androidversion = parseFloat(androidversion);\n if(androidversion >= 1) {\n if(androidversion < 4.4) {\n features.isOldAndroid = true; // for fixed position bug & performance\n }\n features.androidVersion = androidversion; // for touchend bug\n }\n features.isMobileOpera = /opera mini|opera mobi/i.test(ua);\n\n // p.s. yes, yes, UA sniffing is bad, propose your solution for above bugs.\n }\n\n var styleChecks = ['transform', 'perspective', 'animationName'],\n vendors = ['', 'webkit', 'Moz', 'ms', 'O'],\n styleCheckItem,\n styleName;\n\n for(var i = 0; i < 4; i++) {\n vendor = vendors[i];\n\n for(var a = 0; a < 3; a++) {\n styleCheckItem = styleChecks[a];\n\n // uppercase first letter of property name, if vendor is present\n styleName = vendor + (vendor ?\n styleCheckItem.charAt(0).toUpperCase() + styleCheckItem.slice(1) :\n styleCheckItem);\n\n if(!features[styleCheckItem] && styleName in helperStyle) {\n features[styleCheckItem] = styleName;\n }\n }\n\n if(vendor && !features.raf) {\n vendor = vendor.toLowerCase();\n features.raf = window[vendor + 'RequestAnimationFrame'];\n if(features.raf) {\n features.caf = window[vendor + 'CancelAnimationFrame'] ||\n window[vendor + 'CancelRequestAnimationFrame'];\n }\n }\n }\n\n if(!features.raf) {\n var lastTime = 0;\n features.raf = function(fn){\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = window.setTimeout(function(){\n fn(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n features.caf = function(id){\n clearTimeout(id);\n };\n }\n\n // Detect SVG support\n features.svg = !!document.createElementNS &&\n !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect;\n\n framework.features = features;\n\n return features;\n }\n };\n\n framework.detectFeatures();\n\n// Override addEventListener for old versions of IE\n if(framework.features.oldIE) {\n\n framework.bind = function(target, type, listener, unbind){\n\n type = type.split(' ');\n\n var methodName = (unbind ? 'detach' : 'attach') + 'Event',\n evName,\n _handleEv = function(){\n listener.handleEvent.call(listener);\n };\n\n for(var i = 0; i < type.length; i++) {\n evName = type[i];\n if(evName) {\n\n if(typeof listener === 'object' && listener.handleEvent) {\n if(!unbind) {\n listener['oldIE' + evName] = _handleEv;\n } else {\n if(!listener['oldIE' + evName]) {\n return false;\n }\n }\n\n target[methodName]('on' + evName, listener['oldIE' + evName]);\n } else {\n target[methodName]('on' + evName, listener);\n }\n\n }\n }\n };\n\n }\n\n /*>>framework-bridge*/\n\n /*>>core*/\n//function(template, UiClass, items, options)\n\n var self = this;\n\n /**\n * Static vars, don't change unless you know what you're doing.\n */\n var DOUBLE_TAP_RADIUS = 25,\n NUM_HOLDERS = 3;\n\n /**\n * Options\n */\n var _options = {\n allowPanToNext: true,\n spacing: 0.12,\n bgOpacity: 1,\n mouseUsed: false,\n loop: true,\n pinchToClose: true,\n closeOnScroll: true,\n closeOnVerticalDrag: true,\n verticalDragRange: 0.75,\n hideAnimationDuration: 333,\n showAnimationDuration: 333,\n showHideOpacity: false,\n focus: true,\n escKey: true,\n arrowKeys: true,\n mainScrollEndFriction: 0.35,\n panEndFriction: 0.35,\n isClickableElement: function(el){\n return el.tagName === 'A';\n },\n getDoubleTapZoom: function(isMouseClick, item){\n if(isMouseClick) {\n return 1;\n } else {\n return item.initialZoomLevel < 0.7 ? 1 : 1.33;\n }\n },\n maxSpreadZoom: 1.33,\n modal: true,\n\n // not fully implemented yet\n scaleMode: 'fit' // TODO\n };\n framework.extend(_options, options);\n\n /**\n * Private helper variables & functions\n */\n\n var _getEmptyPoint = function(){\n return {x: 0, y: 0};\n };\n\n var _isOpen,\n _isDestroying,\n _closedByScroll,\n _currentItemIndex,\n _containerStyle,\n _containerShiftIndex,\n _currPanDist = _getEmptyPoint(),\n _startPanOffset = _getEmptyPoint(),\n _panOffset = _getEmptyPoint(),\n _upMoveEvents, // drag move, drag end & drag cancel events array\n _downEvents, // drag start events array\n _globalEventHandlers,\n _viewportSize = {},\n _currZoomLevel,\n _startZoomLevel,\n _translatePrefix,\n _translateSufix,\n _updateSizeInterval,\n _itemsNeedUpdate,\n _currPositionIndex = 0,\n _offset = {},\n _slideSize = _getEmptyPoint(), // size of slide area, including spacing\n _itemHolders,\n _prevItemIndex,\n _indexDiff = 0, // difference of indexes since last content update\n _dragStartEvent,\n _dragMoveEvent,\n _dragEndEvent,\n _dragCancelEvent,\n _transformKey,\n _pointerEventEnabled,\n _isFixedPosition = true,\n _likelyTouchDevice,\n _modules = [],\n _requestAF,\n _cancelAF,\n _initalClassName,\n _initalWindowScrollY,\n _oldIE,\n _currentWindowScrollY,\n _features,\n _windowVisibleSize = {},\n _renderMaxResolution = false,\n _orientationChangeTimeout,\n\n // Registers PhotoSWipe module (History, Controller ...)\n _registerModule = function(name, module){\n framework.extend(self, module.publicMethods);\n _modules.push(name);\n },\n\n _getLoopedId = function(index){\n var numSlides = _getNumItems();\n if(index > numSlides - 1) {\n return index - numSlides;\n } else if(index < 0) {\n return numSlides + index;\n }\n return index;\n },\n\n // Micro bind/trigger\n _listeners = {},\n _listen = function(name, fn){\n if(!_listeners[name]) {\n _listeners[name] = [];\n }\n return _listeners[name].push(fn);\n },\n _shout = function(name){\n var listeners = _listeners[name];\n\n if(listeners) {\n var args = Array.prototype.slice.call(arguments);\n args.shift();\n\n for(var i = 0; i < listeners.length; i++) {\n listeners[i].apply(self, args);\n }\n }\n },\n\n _getCurrentTime = function(){\n return new Date().getTime();\n },\n _applyBgOpacity = function(opacity){\n _bgOpacity = opacity;\n self.bg.style.opacity = opacity * _options.bgOpacity;\n },\n\n _applyZoomTransform = function(styleObj, x, y, zoom, item){\n if(!_renderMaxResolution || (item && item !== self.currItem)) {\n zoom = zoom / (item ? item.fitRatio : self.currItem.fitRatio);\n }\n\n styleObj[_transformKey] = _translatePrefix + x + 'px, ' + y + 'px' + _translateSufix + ' scale(' + zoom + ')';\n },\n _applyCurrentZoomPan = function(allowRenderResolution){\n if(_currZoomElementStyle) {\n\n if(allowRenderResolution) {\n if(_currZoomLevel > self.currItem.fitRatio) {\n if(!_renderMaxResolution) {\n _setImageSize(self.currItem, false, true);\n _renderMaxResolution = true;\n }\n } else {\n if(_renderMaxResolution) {\n _setImageSize(self.currItem);\n _renderMaxResolution = false;\n }\n }\n }\n\n _applyZoomTransform(_currZoomElementStyle, _panOffset.x, _panOffset.y, _currZoomLevel);\n }\n },\n _applyZoomPanToItem = function(item){\n if(item.container) {\n\n _applyZoomTransform(item.container.style,\n item.initialPosition.x,\n item.initialPosition.y,\n item.initialZoomLevel,\n item);\n }\n },\n _setTranslateX = function(x, elStyle){\n elStyle[_transformKey] = _translatePrefix + x + 'px, 0px' + _translateSufix;\n },\n _moveMainScroll = function(x, dragging){\n\n if(!_options.loop && dragging) {\n var newSlideIndexOffset = _currentItemIndex + (_slideSize.x * _currPositionIndex - x) / _slideSize.x,\n delta = Math.round(x - _mainScrollPos.x);\n\n if((newSlideIndexOffset < 0 && delta > 0) ||\n (newSlideIndexOffset >= _getNumItems() - 1 && delta < 0)) {\n x = _mainScrollPos.x + delta * _options.mainScrollEndFriction;\n }\n }\n\n _mainScrollPos.x = x;\n _setTranslateX(x, _containerStyle);\n },\n _calculatePanOffset = function(axis, zoomLevel){\n var m = _midZoomPoint[axis] - _offset[axis];\n return _startPanOffset[axis] + _currPanDist[axis] + m - m * (zoomLevel / _startZoomLevel);\n },\n\n _equalizePoints = function(p1, p2){\n p1.x = p2.x;\n p1.y = p2.y;\n if(p2.id) {\n p1.id = p2.id;\n }\n },\n _roundPoint = function(p){\n p.x = Math.round(p.x);\n p.y = Math.round(p.y);\n },\n\n _mouseMoveTimeout = null,\n _onFirstMouseMove = function(){\n // Wait until mouse move event is fired at least twice during 100ms\n // We do this, because some mobile browsers trigger it on touchstart\n if(_mouseMoveTimeout) {\n framework.unbind(document, 'mousemove', _onFirstMouseMove);\n framework.addClass(template, 'pswp--has_mouse');\n _options.mouseUsed = true;\n _shout('mouseUsed');\n }\n _mouseMoveTimeout = setTimeout(function(){\n _mouseMoveTimeout = null;\n }, 100);\n },\n\n _bindEvents = function(){\n framework.bind(document, 'keydown', self);\n\n if(_features.transform) {\n // don't bind click event in browsers that don't support transform (mostly IE8)\n framework.bind(self.scrollWrap, 'click', self);\n }\n\n if(!_options.mouseUsed) {\n framework.bind(document, 'mousemove', _onFirstMouseMove);\n }\n\n framework.bind(window, 'resize scroll orientationchange', self);\n\n _shout('bindEvents');\n },\n\n _unbindEvents = function(){\n framework.unbind(window, 'resize scroll orientationchange', self);\n framework.unbind(window, 'scroll', _globalEventHandlers.scroll);\n framework.unbind(document, 'keydown', self);\n framework.unbind(document, 'mousemove', _onFirstMouseMove);\n\n if(_features.transform) {\n framework.unbind(self.scrollWrap, 'click', self);\n }\n\n if(_isDragging) {\n framework.unbind(window, _upMoveEvents, self);\n }\n\n clearTimeout(_orientationChangeTimeout);\n\n _shout('unbindEvents');\n },\n\n _calculatePanBounds = function(zoomLevel, update){\n var bounds = _calculateItemSize(self.currItem, _viewportSize, zoomLevel);\n if(update) {\n _currPanBounds = bounds;\n }\n return bounds;\n },\n\n _getMinZoomLevel = function(item){\n if(!item) {\n item = self.currItem;\n }\n return item.initialZoomLevel;\n },\n _getMaxZoomLevel = function(item){\n if(!item) {\n item = self.currItem;\n }\n return item.w > 0 ? _options.maxSpreadZoom : 1;\n },\n\n // Return true if offset is out of the bounds\n _modifyDestPanOffset = function(axis, destPanBounds, destPanOffset, destZoomLevel){\n if(destZoomLevel === self.currItem.initialZoomLevel) {\n destPanOffset[axis] = self.currItem.initialPosition[axis];\n return true;\n } else {\n destPanOffset[axis] = _calculatePanOffset(axis, destZoomLevel);\n\n if(destPanOffset[axis] > destPanBounds.min[axis]) {\n destPanOffset[axis] = destPanBounds.min[axis];\n return true;\n } else if(destPanOffset[axis] < destPanBounds.max[axis]) {\n destPanOffset[axis] = destPanBounds.max[axis];\n return true;\n }\n }\n return false;\n },\n\n _setupTransforms = function(){\n\n if(_transformKey) {\n // setup 3d transforms\n var allow3dTransform = _features.perspective && !_likelyTouchDevice;\n _translatePrefix = 'translate' + (allow3dTransform ? '3d(' : '(');\n _translateSufix = _features.perspective ? ', 0px)' : ')';\n return;\n }\n\n // Override zoom/pan/move functions in case old browser is used (most likely IE)\n // (so they use left/top/width/height, instead of CSS transform)\n\n _transformKey = 'left';\n framework.addClass(template, 'pswp--ie');\n\n _setTranslateX = function(x, elStyle){\n elStyle.left = x + 'px';\n };\n _applyZoomPanToItem = function(item){\n\n var zoomRatio = item.fitRatio > 1 ? 1 : item.fitRatio,\n s = item.container.style,\n w = zoomRatio * item.w,\n h = zoomRatio * item.h;\n\n s.width = w + 'px';\n s.height = h + 'px';\n s.left = item.initialPosition.x + 'px';\n s.top = item.initialPosition.y + 'px';\n\n };\n _applyCurrentZoomPan = function(){\n if(_currZoomElementStyle) {\n\n var s = _currZoomElementStyle,\n item = self.currItem,\n zoomRatio = item.fitRatio > 1 ? 1 : item.fitRatio,\n w = zoomRatio * item.w,\n h = zoomRatio * item.h;\n\n s.width = w + 'px';\n s.height = h + 'px';\n\n s.left = _panOffset.x + 'px';\n s.top = _panOffset.y + 'px';\n }\n\n };\n },\n\n _onKeyDown = function(e){\n var keydownAction = '';\n if(_options.escKey && e.keyCode === 27) {\n keydownAction = 'close';\n } else if(_options.arrowKeys) {\n if(e.keyCode === 37) {\n keydownAction = 'prev';\n } else if(e.keyCode === 39) {\n keydownAction = 'next';\n }\n }\n\n if(keydownAction) {\n // don't do anything if special key pressed to prevent from overriding default browser actions\n // e.g. in Chrome on Mac cmd+arrow-left returns to previous page\n if(!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) {\n if(e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n self[keydownAction]();\n }\n }\n },\n\n _onGlobalClick = function(e){\n if(!e) {\n return;\n }\n\n // don't allow click event to pass through when triggering after drag or some other gesture\n if(_moved || _zoomStarted || _mainScrollAnimating || _verticalDragInitiated) {\n e.preventDefault();\n e.stopPropagation();\n }\n },\n\n _updatePageScrollOffset = function(){\n self.setScrollOffset(0, framework.getScrollY());\n };\n\n// Micro animation engine\n var _animations = {},\n _numAnimations = 0,\n _stopAnimation = function(name){\n if(_animations[name]) {\n if(_animations[name].raf) {\n _cancelAF(_animations[name].raf);\n }\n _numAnimations--;\n delete _animations[name];\n }\n },\n _registerStartAnimation = function(name){\n if(_animations[name]) {\n _stopAnimation(name);\n }\n if(!_animations[name]) {\n _numAnimations++;\n _animations[name] = {};\n }\n },\n _stopAllAnimations = function(){\n for(var prop in _animations) {\n\n if(_animations.hasOwnProperty(prop)) {\n _stopAnimation(prop);\n }\n\n }\n },\n _animateProp = function(name, b, endProp, d, easingFn, onUpdate, onComplete){\n var startAnimTime = _getCurrentTime(), t;\n _registerStartAnimation(name);\n var animloop = function(){\n if(_animations[name]) {\n\n t = _getCurrentTime() - startAnimTime; // time diff\n //b - beginning (start prop)\n //d - anim duration\n\n if(t >= d) {\n _stopAnimation(name);\n onUpdate(endProp);\n if(onComplete) {\n onComplete();\n }\n return;\n }\n onUpdate((endProp - b) * easingFn(t / d) + b);\n\n _animations[name].raf = _requestAF(animloop);\n }\n };\n animloop();\n };\n\n var publicMethods = {\n\n // make a few local variables and functions public\n shout: _shout,\n listen: _listen,\n viewportSize: _viewportSize,\n options: _options,\n\n isMainScrollAnimating: function(){\n return _mainScrollAnimating;\n },\n getZoomLevel: function(){\n return _currZoomLevel;\n },\n getCurrentIndex: function(){\n return _currentItemIndex;\n },\n isDragging: function(){\n return _isDragging;\n },\n isZooming: function(){\n return _isZooming;\n },\n setScrollOffset: function(x, y){\n _offset.x = x;\n _currentWindowScrollY = _offset.y = y;\n _shout('updateScrollOffset', _offset);\n },\n applyZoomPan: function(zoomLevel, panX, panY, allowRenderResolution){\n _panOffset.x = panX;\n _panOffset.y = panY;\n _currZoomLevel = zoomLevel;\n _applyCurrentZoomPan(allowRenderResolution);\n },\n\n init: function(){\n\n if(_isOpen || _isDestroying) {\n return;\n }\n\n var i;\n\n self.framework = framework; // basic functionality\n self.template = template; // root DOM element of PhotoSwipe\n self.bg = framework.getChildByClass(template, 'pswp__bg');\n\n _initalClassName = template.className;\n _isOpen = true;\n\n _features = framework.detectFeatures();\n _requestAF = _features.raf;\n _cancelAF = _features.caf;\n _transformKey = _features.transform;\n _oldIE = _features.oldIE;\n\n self.scrollWrap = framework.getChildByClass(template, 'pswp__scroll-wrap');\n self.container = framework.getChildByClass(self.scrollWrap, 'pswp__container');\n\n _containerStyle = self.container.style; // for fast access\n\n // Objects that hold slides (there are only 3 in DOM)\n self.itemHolders = _itemHolders = [\n {el: self.container.children[0], wrap: 0, index: -1},\n {el: self.container.children[1], wrap: 0, index: -1},\n {el: self.container.children[2], wrap: 0, index: -1}\n ];\n\n // hide nearby item holders until initial zoom animation finishes (to avoid extra Paints)\n _itemHolders[0].el.style.display = _itemHolders[2].el.style.display = 'none';\n\n _setupTransforms();\n\n // Setup global events\n _globalEventHandlers = {\n resize: self.updateSize,\n\n // Fixes: iOS 10.3 resize event\n // does not update scrollWrap.clientWidth instantly after resize\n // https://github.com/dimsemenov/PhotoSwipe/issues/1315\n orientationchange: function(){\n clearTimeout(_orientationChangeTimeout);\n _orientationChangeTimeout = setTimeout(function(){\n if(_viewportSize.x !== self.scrollWrap.clientWidth) {\n self.updateSize();\n }\n }, 500);\n },\n scroll: _updatePageScrollOffset,\n keydown: _onKeyDown,\n click: _onGlobalClick\n };\n\n // disable show/hide effects on old browsers that don't support CSS animations or transforms,\n // old IOS, Android and Opera mobile. Blackberry seems to work fine, even older models.\n var oldPhone = _features.isOldIOSPhone || _features.isOldAndroid || _features.isMobileOpera;\n if(!_features.animationName || !_features.transform || oldPhone) {\n _options.showAnimationDuration = _options.hideAnimationDuration = 0;\n }\n\n // init modules\n for(i = 0; i < _modules.length; i++) {\n self['init' + _modules[i]]();\n }\n\n // init\n if(UiClass) {\n var ui = self.ui = new UiClass(self, framework);\n ui.init();\n }\n\n _shout('firstUpdate');\n _currentItemIndex = _currentItemIndex || _options.index || 0;\n // validate index\n if(isNaN(_currentItemIndex) || _currentItemIndex < 0 || _currentItemIndex >= _getNumItems()) {\n _currentItemIndex = 0;\n }\n self.currItem = _getItemAt(_currentItemIndex);\n\n if(_features.isOldIOSPhone || _features.isOldAndroid) {\n _isFixedPosition = false;\n }\n\n template.setAttribute('aria-hidden', 'false');\n if(_options.modal) {\n if(!_isFixedPosition) {\n template.style.position = 'absolute';\n template.style.top = framework.getScrollY() + 'px';\n } else {\n template.style.position = 'fixed';\n }\n }\n\n if(_currentWindowScrollY === undefined) {\n _shout('initialLayout');\n _currentWindowScrollY = _initalWindowScrollY = framework.getScrollY();\n }\n\n // add classes to root element of PhotoSwipe\n var rootClasses = 'pswp--open ';\n if(_options.mainClass) {\n rootClasses += _options.mainClass + ' ';\n }\n if(_options.showHideOpacity) {\n rootClasses += 'pswp--animate_opacity ';\n }\n rootClasses += _likelyTouchDevice ? 'pswp--touch' : 'pswp--notouch';\n rootClasses += _features.animationName ? ' pswp--css_animation' : '';\n rootClasses += _features.svg ? ' pswp--svg' : '';\n framework.addClass(template, rootClasses);\n\n self.updateSize();\n\n // initial update\n _containerShiftIndex = -1;\n _indexDiff = null;\n for(i = 0; i < NUM_HOLDERS; i++) {\n _setTranslateX((i + _containerShiftIndex) * _slideSize.x, _itemHolders[i].el.style);\n }\n\n if(!_oldIE) {\n framework.bind(self.scrollWrap, _downEvents, self); // no dragging for old IE\n }\n\n _listen('initialZoomInEnd', function(){\n self.setContent(_itemHolders[0], _currentItemIndex - 1);\n self.setContent(_itemHolders[2], _currentItemIndex + 1);\n\n _itemHolders[0].el.style.display = _itemHolders[2].el.style.display = 'block';\n\n if(_options.focus) {\n // focus causes layout,\n // which causes lag during the animation,\n // that's why we delay it untill the initial zoom transition ends\n template.focus();\n }\n\n _bindEvents();\n });\n\n // set content for center slide (first time)\n self.setContent(_itemHolders[1], _currentItemIndex);\n\n self.updateCurrItem();\n\n _shout('afterInit');\n\n $('.pswp__button--download').attr('href', self.currItem.src);\n\n $('.pswp__counter').css({\n top: self.currItem.initialPosition.y - 35,\n right: self.currItem.initialPosition.x\n });\n\n $('.pswp__caption').css({\n top: self.currItem.initialPosition.y - 40\n });\n\n setTimeout(() =>{\n $('.pswp__counter').show();\n $('.pswp__caption').show();\n }, 500);\n\n if(!_isFixedPosition) {\n\n // On all versions of iOS lower than 8.0, we check size of viewport every second.\n //\n // This is done to detect when Safari top & bottom bars appear,\n // as this action doesn't trigger any events (like resize).\n //\n // On iOS8 they fixed this.\n //\n // 10 Nov 2014: iOS 7 usage ~40%. iOS 8 usage 56%.\n\n _updateSizeInterval = setInterval(function(){\n if(!_numAnimations && !_isDragging && !_isZooming && (_currZoomLevel === self.currItem.initialZoomLevel)) {\n self.updateSize();\n }\n }, 1000);\n }\n\n framework.addClass(template, 'pswp--visible');\n },\n\n // Close the gallery, then destroy it\n close: function(){\n if(!_isOpen) {\n return;\n }\n\n _isOpen = false;\n _isDestroying = true;\n _shout('close');\n\n $('.pswp__counter').hide();\n $('.pswp__caption').hide();\n\n _unbindEvents();\n\n _showOrHide(self.currItem, null, true, self.destroy);\n },\n\n // destroys the gallery (unbinds events, cleans up intervals and timeouts to avoid memory leaks)\n destroy: function(){\n _shout('destroy');\n\n if(_showOrHideTimeout) {\n clearTimeout(_showOrHideTimeout);\n }\n\n template.setAttribute('aria-hidden', 'true');\n template.className = _initalClassName;\n\n if(_updateSizeInterval) {\n clearInterval(_updateSizeInterval);\n }\n\n framework.unbind(self.scrollWrap, _downEvents, self);\n\n // we unbind scroll event at the end, as closing animation may depend on it\n framework.unbind(window, 'scroll', self);\n\n _stopDragUpdateLoop();\n\n _stopAllAnimations();\n\n _listeners = null;\n },\n\n /**\n * Pan image to position\n * @param {Number} x\n * @param {Number} y\n * @param {Boolean} force Will ignore bounds if set to true.\n */\n panTo: function(x, y, force){\n if(!force) {\n if(x > _currPanBounds.min.x) {\n x = _currPanBounds.min.x;\n } else if(x < _currPanBounds.max.x) {\n x = _currPanBounds.max.x;\n }\n\n if(y > _currPanBounds.min.y) {\n y = _currPanBounds.min.y;\n } else if(y < _currPanBounds.max.y) {\n y = _currPanBounds.max.y;\n }\n }\n\n _panOffset.x = x;\n _panOffset.y = y;\n _applyCurrentZoomPan();\n },\n\n handleEvent: function(e){\n e = e || window.event;\n\n\n if(_globalEventHandlers[e.type]) {\n _globalEventHandlers[e.type](e);\n }\n },\n\n goTo: function(index, animate = false){\n if(_mainScrollAnimating) return;\n\n _mainScrollAnimating = true;\n $('.pswp__counter').hide();\n $('.pswp__caption').hide();\n\n if(animate) {\n let itemChanged;\n let itemsDiff = _currentItemIndex < index ? 1 : -1;\n\n let nextCircle;\n\n if(itemsDiff) {\n _currentItemIndex += itemsDiff;\n\n if(_currentItemIndex < 0) {\n _currentItemIndex = _options.loop ? _getNumItems() - 1 : 0;\n nextCircle = true;\n } else if(_currentItemIndex >= _getNumItems()) {\n _currentItemIndex = _options.loop ? 0 : _getNumItems() - 1;\n nextCircle = true;\n }\n\n if(!nextCircle || _options.loop) {\n _indexDiff += itemsDiff;\n _currPositionIndex -= itemsDiff;\n itemChanged = true;\n }\n }\n\n let animateToX = _slideSize.x * _currPositionIndex;\n\n _animateProp('mainScrollGoTo', _mainScrollPos.x, animateToX, 333, framework.easing.cubic.out, _moveMainScroll, function(){\n _stopAllAnimations();\n _mainScrollAnimating = false;\n _currZoomedItemIndex = -1;\n\n if(itemChanged || _currZoomedItemIndex !== _currentItemIndex) {\n self.updateCurrItem();\n }\n\n _shout('mainScrollAnimComplete');\n _shout('imagechangeend');\n $('.pswp__button--download').attr('href', self.currItem.src);\n $('.pswp__counter').css({\n top: self.currItem.initialPosition.y - 35,\n right: self.currItem.initialPosition.x\n });\n\n $('.pswp__caption').css({top: self.currItem.initialPosition.y - 40});\n $('.pswp__counter').show();\n $('.pswp__caption').show();\n });\n\n } else {\n\n index = _getLoopedId(index);\n var diff = index - _currentItemIndex;\n _indexDiff = diff;\n _currentItemIndex = index;\n self.currItem = _getItemAt(_currentItemIndex);\n _currPositionIndex -= diff;\n _moveMainScroll(_slideSize.x * _currPositionIndex);\n _stopAllAnimations();\n _mainScrollAnimating = false;\n self.updateCurrItem();\n\n _shout('imagechangeend');\n $('.pswp__button--download').attr('href', self.currItem.src);\n $('.pswp__counter').css({\n top: self.currItem.initialPosition.y - 35,\n right: self.currItem.initialPosition.x\n });\n\n $('.pswp__caption').css({top: self.currItem.initialPosition.y - 40});\n $('.pswp__counter').show();\n $('.pswp__caption').show();\n }\n },\n next: function(){\n self.goTo(_currentItemIndex + 1, true);\n },\n prev: function(){\n self.goTo(_currentItemIndex - 1, true);\n },\n\n // update current zoom/pan objects\n updateCurrZoomItem: function(emulateSetContent){\n if(emulateSetContent) {\n _shout('beforeChange', 0);\n }\n\n // itemHolder[1] is middle (current) item\n if(_itemHolders[1].el.children.length) {\n var zoomElement = _itemHolders[1].el.children[0];\n if(framework.hasClass(zoomElement, 'pswp__zoom-wrap')) {\n _currZoomElementStyle = zoomElement.style;\n } else {\n _currZoomElementStyle = null;\n }\n } else {\n _currZoomElementStyle = null;\n }\n\n _currPanBounds = self.currItem.bounds;\n _startZoomLevel = _currZoomLevel = self.currItem.initialZoomLevel;\n\n _panOffset.x = _currPanBounds.center.x;\n _panOffset.y = _currPanBounds.center.y;\n\n if(emulateSetContent) {\n _shout('afterChange');\n }\n },\n\n invalidateCurrItems: function(){\n _itemsNeedUpdate = true;\n for(var i = 0; i < NUM_HOLDERS; i++) {\n if(_itemHolders[i].item) {\n _itemHolders[i].item.needsUpdate = true;\n }\n }\n },\n\n updateCurrItem: function(beforeAnimation){\n\n if(_indexDiff === 0) {\n return;\n }\n\n var diffAbs = Math.abs(_indexDiff),\n tempHolder;\n\n if(beforeAnimation && diffAbs < 2) {\n return;\n }\n\n self.currItem = _getItemAt(_currentItemIndex);\n _renderMaxResolution = false;\n\n _shout('beforeChange', _indexDiff);\n\n if(diffAbs >= NUM_HOLDERS) {\n _containerShiftIndex += _indexDiff + (_indexDiff > 0 ? -NUM_HOLDERS : NUM_HOLDERS);\n diffAbs = NUM_HOLDERS;\n }\n for(var i = 0; i < diffAbs; i++) {\n if(_indexDiff > 0) {\n tempHolder = _itemHolders.shift();\n _itemHolders[NUM_HOLDERS - 1] = tempHolder; // move first to last\n\n _containerShiftIndex++;\n _setTranslateX((_containerShiftIndex + 2) * _slideSize.x, tempHolder.el.style);\n self.setContent(tempHolder, _currentItemIndex - diffAbs + i + 1 + 1);\n } else {\n tempHolder = _itemHolders.pop();\n _itemHolders.unshift(tempHolder); // move last to first\n\n _containerShiftIndex--;\n _setTranslateX(_containerShiftIndex * _slideSize.x, tempHolder.el.style);\n self.setContent(tempHolder, _currentItemIndex + diffAbs - i - 1 - 1);\n }\n\n }\n\n // reset zoom/pan on previous item\n if(_currZoomElementStyle && Math.abs(_indexDiff) === 1) {\n\n var prevItem = _getItemAt(_prevItemIndex);\n if(prevItem.initialZoomLevel !== _currZoomLevel) {\n _calculateItemSize(prevItem, _viewportSize);\n _setImageSize(prevItem);\n _applyZoomPanToItem(prevItem);\n }\n\n }\n\n // reset diff after update\n _indexDiff = 0;\n\n self.updateCurrZoomItem();\n\n _prevItemIndex = _currentItemIndex;\n\n _shout('afterChange');\n\n },\n\n updateSize: function(force){\n\n if(!_isFixedPosition && _options.modal) {\n var windowScrollY = framework.getScrollY();\n if(_currentWindowScrollY !== windowScrollY) {\n template.style.top = windowScrollY + 'px';\n _currentWindowScrollY = windowScrollY;\n }\n if(!force && _windowVisibleSize.x === window.innerWidth && _windowVisibleSize.y === window.innerHeight) {\n return;\n }\n _windowVisibleSize.x = window.innerWidth;\n _windowVisibleSize.y = window.innerHeight;\n\n //template.style.width = _windowVisibleSize.x + 'px';\n template.style.height = _windowVisibleSize.y + 'px';\n }\n\n _viewportSize.x = self.scrollWrap.clientWidth;\n _viewportSize.y = self.scrollWrap.clientHeight;\n\n _updatePageScrollOffset();\n\n _slideSize.x = _viewportSize.x + Math.round(_viewportSize.x * _options.spacing);\n _slideSize.y = _viewportSize.y;\n\n _moveMainScroll(_slideSize.x * _currPositionIndex);\n\n _shout('beforeResize'); // even may be used for example to switch image sources\n\n // don't re-calculate size on inital size update\n if(_containerShiftIndex !== undefined) {\n\n var holder,\n item,\n hIndex;\n\n for(var i = 0; i < NUM_HOLDERS; i++) {\n holder = _itemHolders[i];\n _setTranslateX((i + _containerShiftIndex) * _slideSize.x, holder.el.style);\n\n hIndex = _currentItemIndex + i - 1;\n\n if(_options.loop && _getNumItems() > 2) {\n hIndex = _getLoopedId(hIndex);\n }\n\n // update zoom level on items and refresh source (if needsUpdate)\n item = _getItemAt(hIndex);\n\n // re-render gallery item if `needsUpdate`,\n // or doesn't have `bounds` (entirely new slide object)\n if(item && (_itemsNeedUpdate || item.needsUpdate || !item.bounds)) {\n\n self.cleanSlide(item);\n\n self.setContent(holder, hIndex);\n\n // if \"center\" slide\n if(i === 1) {\n self.currItem = item;\n self.updateCurrZoomItem(true);\n }\n\n item.needsUpdate = false;\n\n } else if(holder.index === -1 && hIndex >= 0) {\n // add content first time\n self.setContent(holder, hIndex);\n }\n if(item && item.container) {\n _calculateItemSize(item, _viewportSize);\n _setImageSize(item);\n _applyZoomPanToItem(item);\n }\n\n }\n _itemsNeedUpdate = false;\n }\n\n _startZoomLevel = _currZoomLevel = self.currItem.initialZoomLevel;\n _currPanBounds = self.currItem.bounds;\n\n if(_currPanBounds) {\n _panOffset.x = _currPanBounds.center.x;\n _panOffset.y = _currPanBounds.center.y;\n _applyCurrentZoomPan(true);\n }\n\n _shout('resize');\n\n if(self.currItem.initialPosition) {\n $('.pswp__counter').css({\n top: self.currItem.initialPosition.y - 35,\n right: self.currItem.initialPosition.x\n });\n\n $('.pswp__caption').css({\n top: self.currItem.initialPosition.y - 40\n });\n }\n },\n\n // Zoom current item to\n zoomTo: function(destZoomLevel, centerPoint, speed, easingFn, updateFn){\n /*\n\t\t\tif(destZoomLevel === 'fit') {\n\t\t\t\tdestZoomLevel = self.currItem.fitRatio;\n\t\t\t} else if(destZoomLevel === 'fill') {\n\t\t\t\tdestZoomLevel = self.currItem.fillRatio;\n\t\t\t}\n\t\t*/\n\n if(centerPoint) {\n _startZoomLevel = _currZoomLevel;\n _midZoomPoint.x = Math.abs(centerPoint.x) - _panOffset.x;\n _midZoomPoint.y = Math.abs(centerPoint.y) - _panOffset.y;\n _equalizePoints(_startPanOffset, _panOffset);\n }\n\n var destPanBounds = _calculatePanBounds(destZoomLevel, false),\n destPanOffset = {};\n\n _modifyDestPanOffset('x', destPanBounds, destPanOffset, destZoomLevel);\n _modifyDestPanOffset('y', destPanBounds, destPanOffset, destZoomLevel);\n\n var initialZoomLevel = _currZoomLevel;\n var initialPanOffset = {\n x: _panOffset.x,\n y: _panOffset.y\n };\n\n _roundPoint(destPanOffset);\n\n var onUpdate = function(now){\n if(now === 1) {\n _currZoomLevel = destZoomLevel;\n _panOffset.x = destPanOffset.x;\n _panOffset.y = destPanOffset.y;\n } else {\n _currZoomLevel = (destZoomLevel - initialZoomLevel) * now + initialZoomLevel;\n _panOffset.x = (destPanOffset.x - initialPanOffset.x) * now + initialPanOffset.x;\n _panOffset.y = (destPanOffset.y - initialPanOffset.y) * now + initialPanOffset.y;\n }\n\n if(updateFn) {\n updateFn(now);\n }\n\n _applyCurrentZoomPan(now === 1);\n };\n\n if(speed) {\n _animateProp('customZoomTo', 0, 1, speed, easingFn || framework.easing.sine.inOut, onUpdate);\n } else {\n onUpdate(1);\n }\n }\n\n };\n\n /*>>core*/\n\n /*>>gestures*/\n /**\n * Mouse/touch/pointer event handlers.\n *\n * separated from @core.js for readability\n */\n\n var MIN_SWIPE_DISTANCE = 30,\n DIRECTION_CHECK_OFFSET = 10; // amount of pixels to drag to determine direction of swipe\n\n var _gestureStartTime,\n _gestureCheckSpeedTime,\n\n // pool of objects that are used during dragging of zooming\n p = {}, // first point\n p2 = {}, // second point (for zoom gesture)\n delta = {},\n _currPoint = {},\n _startPoint = {},\n _currPointers = [],\n _startMainScrollPos = {},\n _releaseAnimData,\n _posPoints = [], // array of points during dragging, used to determine type of gesture\n _tempPoint = {},\n\n _isZoomingIn,\n _verticalDragInitiated,\n _oldAndroidTouchEndTimeout,\n _currZoomedItemIndex = 0,\n _centerPoint = _getEmptyPoint(),\n _lastReleaseTime = 0,\n _isDragging, // at least one pointer is down\n _isMultitouch, // at least two _pointers are down\n _zoomStarted, // zoom level changed during zoom gesture\n _moved,\n _dragAnimFrame,\n _mainScrollShifted,\n _currentPoints, // array of current touch points\n _isZooming,\n _currPointsDistance,\n _startPointsDistance,\n _currPanBounds,\n _mainScrollPos = _getEmptyPoint(),\n _currZoomElementStyle,\n _mainScrollAnimating, // true, if animation after swipe gesture is running\n _midZoomPoint = _getEmptyPoint(),\n _currCenterPoint = _getEmptyPoint(),\n _direction,\n _isFirstMove,\n _opacityChanged,\n _bgOpacity,\n _wasOverInitialZoom,\n\n _isEqualPoints = function(p1, p2){\n return p1.x === p2.x && p1.y === p2.y;\n },\n _isNearbyPoints = function(touch0, touch1){\n return Math.abs(touch0.x - touch1.x) < DOUBLE_TAP_RADIUS && Math.abs(touch0.y - touch1.y) < DOUBLE_TAP_RADIUS;\n },\n _calculatePointsDistance = function(p1, p2){\n _tempPoint.x = Math.abs(p1.x - p2.x);\n _tempPoint.y = Math.abs(p1.y - p2.y);\n return Math.sqrt(_tempPoint.x * _tempPoint.x + _tempPoint.y * _tempPoint.y);\n },\n _stopDragUpdateLoop = function(){\n if(_dragAnimFrame) {\n _cancelAF(_dragAnimFrame);\n _dragAnimFrame = null;\n }\n },\n _dragUpdateLoop = function(){\n if(_isDragging) {\n _dragAnimFrame = _requestAF(_dragUpdateLoop);\n _renderMovement();\n }\n },\n _canPan = function(){\n return !(_options.scaleMode === 'fit' && _currZoomLevel === self.currItem.initialZoomLevel);\n },\n\n // find the closest parent DOM element\n _closestElement = function(el, fn){\n if(!el || el === document) {\n return false;\n }\n\n // don't search elements above pswp__scroll-wrap\n if(el.getAttribute('class') && el.getAttribute('class').indexOf('pswp__scroll-wrap') > -1) {\n return false;\n }\n\n if(fn(el)) {\n return el;\n }\n\n return _closestElement(el.parentNode, fn);\n },\n\n _preventObj = {},\n _preventDefaultEventBehaviour = function(e, isDown){\n _preventObj.prevent = !_closestElement(e.target, _options.isClickableElement);\n\n _shout('preventDragEvent', e, isDown, _preventObj);\n return _preventObj.prevent;\n\n },\n _convertTouchToPoint = function(touch, p){\n p.x = touch.pageX;\n p.y = touch.pageY;\n p.id = touch.identifier;\n return p;\n },\n _findCenterOfPoints = function(p1, p2, pCenter){\n pCenter.x = (p1.x + p2.x) * 0.5;\n pCenter.y = (p1.y + p2.y) * 0.5;\n },\n _pushPosPoint = function(time, x, y){\n if(time - _gestureCheckSpeedTime > 50) {\n var o = _posPoints.length > 2 ? _posPoints.shift() : {};\n o.x = x;\n o.y = y;\n _posPoints.push(o);\n _gestureCheckSpeedTime = time;\n }\n },\n\n _calculateVerticalDragOpacityRatio = function(){\n var yOffset = _panOffset.y - self.currItem.initialPosition.y; // difference between initial and current position\n return 1 - Math.abs(yOffset / (_viewportSize.y / 2));\n },\n\n // points pool, reused during touch events\n _ePoint1 = {},\n _ePoint2 = {},\n _tempPointsArr = [],\n _tempCounter,\n _getTouchPoints = function(e){\n // clean up previous points, without recreating array\n while(_tempPointsArr.length > 0) {\n _tempPointsArr.pop();\n }\n\n if(!_pointerEventEnabled) {\n if(e.type.indexOf('touch') > -1) {\n\n if(e.touches && e.touches.length > 0) {\n _tempPointsArr[0] = _convertTouchToPoint(e.touches[0], _ePoint1);\n if(e.touches.length > 1) {\n _tempPointsArr[1] = _convertTouchToPoint(e.touches[1], _ePoint2);\n }\n }\n\n } else {\n _ePoint1.x = e.pageX;\n _ePoint1.y = e.pageY;\n _ePoint1.id = '';\n _tempPointsArr[0] = _ePoint1;//_ePoint1;\n }\n } else {\n _tempCounter = 0;\n // we can use forEach, as pointer events are supported only in modern browsers\n _currPointers.forEach(function(p){\n if(_tempCounter === 0) {\n _tempPointsArr[0] = p;\n } else if(_tempCounter === 1) {\n _tempPointsArr[1] = p;\n }\n _tempCounter++;\n\n });\n }\n return _tempPointsArr;\n },\n\n _panOrMoveMainScroll = function(axis, delta){\n\n var panFriction,\n overDiff = 0,\n newOffset = _panOffset[axis] + delta[axis],\n startOverDiff,\n dir = delta[axis] > 0,\n newMainScrollPosition = _mainScrollPos.x + delta.x,\n mainScrollDiff = _mainScrollPos.x - _startMainScrollPos.x,\n newPanPos,\n newMainScrollPos;\n\n // calculate fdistance over the bounds and friction\n if(newOffset > _currPanBounds.min[axis] || newOffset < _currPanBounds.max[axis]) {\n panFriction = _options.panEndFriction;\n // Linear increasing of friction, so at 1/4 of viewport it's at max value.\n // Looks not as nice as was expected. Left for history.\n // panFriction = (1 - (_panOffset[axis] + delta[axis] + panBounds.min[axis]) / (_viewportSize[axis] / 4) );\n } else {\n panFriction = 1;\n }\n\n newOffset = _panOffset[axis] + delta[axis] * panFriction;\n\n // move main scroll or start panning\n if(_options.allowPanToNext || _currZoomLevel === self.currItem.initialZoomLevel) {\n\n if(!_currZoomElementStyle) {\n\n newMainScrollPos = newMainScrollPosition;\n\n } else if(_direction === 'h' && axis === 'x' && !_zoomStarted) {\n\n if(dir) {\n if(newOffset > _currPanBounds.min[axis]) {\n panFriction = _options.panEndFriction;\n overDiff = _currPanBounds.min[axis] - newOffset;\n startOverDiff = _currPanBounds.min[axis] - _startPanOffset[axis];\n }\n\n // drag right\n if((startOverDiff <= 0 || mainScrollDiff < 0) && _getNumItems() > 1) {\n newMainScrollPos = newMainScrollPosition;\n if(mainScrollDiff < 0 && newMainScrollPosition > _startMainScrollPos.x) {\n newMainScrollPos = _startMainScrollPos.x;\n }\n } else {\n if(_currPanBounds.min.x !== _currPanBounds.max.x) {\n newPanPos = newOffset;\n }\n\n }\n\n } else {\n\n if(newOffset < _currPanBounds.max[axis]) {\n panFriction = _options.panEndFriction;\n overDiff = newOffset - _currPanBounds.max[axis];\n startOverDiff = _startPanOffset[axis] - _currPanBounds.max[axis];\n }\n\n if((startOverDiff <= 0 || mainScrollDiff > 0) && _getNumItems() > 1) {\n newMainScrollPos = newMainScrollPosition;\n\n if(mainScrollDiff > 0 && newMainScrollPosition < _startMainScrollPos.x) {\n newMainScrollPos = _startMainScrollPos.x;\n }\n\n } else {\n if(_currPanBounds.min.x !== _currPanBounds.max.x) {\n newPanPos = newOffset;\n }\n }\n\n }\n\n //\n }\n\n if(axis === 'x') {\n\n if(newMainScrollPos !== undefined) {\n _moveMainScroll(newMainScrollPos, true);\n if(newMainScrollPos === _startMainScrollPos.x) {\n _mainScrollShifted = false;\n } else {\n _mainScrollShifted = true;\n }\n }\n\n if(_currPanBounds.min.x !== _currPanBounds.max.x) {\n if(newPanPos !== undefined) {\n _panOffset.x = newPanPos;\n } else if(!_mainScrollShifted) {\n _panOffset.x += delta.x * panFriction;\n }\n }\n\n return newMainScrollPos !== undefined;\n }\n\n }\n\n if(!_mainScrollAnimating) {\n\n if(!_mainScrollShifted) {\n if(_currZoomLevel > self.currItem.fitRatio) {\n _panOffset[axis] += delta[axis] * panFriction;\n\n }\n }\n\n }\n\n },\n\n // Pointerdown/touchstart/mousedown handler\n _onDragStart = function(e){\n\n // Allow dragging only via left mouse button.\n // As this handler is not added in IE8 - we ignore e.which\n //\n // http://www.quirksmode.org/js/events_properties.html\n // https://developer.mozilla.org/en-US/docs/Web/API/event.button\n if(e.type === 'mousedown' && e.button > 0) {\n return;\n }\n\n if(_initialZoomRunning) {\n e.preventDefault();\n return;\n }\n\n if(_oldAndroidTouchEndTimeout && e.type === 'mousedown') {\n return;\n }\n\n if(_preventDefaultEventBehaviour(e, true)) {\n e.preventDefault();\n }\n\n _shout('pointerDown');\n\n if(_pointerEventEnabled) {\n var pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n if(pointerIndex < 0) {\n pointerIndex = _currPointers.length;\n }\n _currPointers[pointerIndex] = {x: e.pageX, y: e.pageY, id: e.pointerId};\n }\n\n var startPointsList = _getTouchPoints(e),\n numPoints = startPointsList.length;\n\n _currentPoints = null;\n\n _stopAllAnimations();\n\n // init drag\n if(!_isDragging || numPoints === 1) {\n\n _isDragging = _isFirstMove = true;\n framework.bind(window, _upMoveEvents, self);\n\n _isZoomingIn =\n _wasOverInitialZoom =\n _opacityChanged =\n _verticalDragInitiated =\n _mainScrollShifted =\n _moved =\n _isMultitouch =\n _zoomStarted = false;\n\n _direction = null;\n\n _shout('firstTouchStart', startPointsList);\n\n _equalizePoints(_startPanOffset, _panOffset);\n\n _currPanDist.x = _currPanDist.y = 0;\n _equalizePoints(_currPoint, startPointsList[0]);\n _equalizePoints(_startPoint, _currPoint);\n\n //_equalizePoints(_startMainScrollPos, _mainScrollPos);\n _startMainScrollPos.x = _slideSize.x * _currPositionIndex;\n\n _posPoints = [{\n x: _currPoint.x,\n y: _currPoint.y\n }];\n\n _gestureCheckSpeedTime = _gestureStartTime = _getCurrentTime();\n\n //_mainScrollAnimationEnd(true);\n _calculatePanBounds(_currZoomLevel, true);\n\n // Start rendering\n _stopDragUpdateLoop();\n _dragUpdateLoop();\n\n }\n\n // init zoom\n // if(!_isZooming && numPoints > 1 && !_mainScrollAnimating && !_mainScrollShifted) {\n // _startZoomLevel = _currZoomLevel;\n // _zoomStarted = false; // true if zoom changed at least once\n //\n // _isZooming = _isMultitouch = true;\n // _currPanDist.y = _currPanDist.x = 0;\n //\n // _equalizePoints(_startPanOffset, _panOffset);\n //\n // _equalizePoints(p, startPointsList[0]);\n // _equalizePoints(p2, startPointsList[1]);\n //\n // _findCenterOfPoints(p, p2, _currCenterPoint);\n //\n // _midZoomPoint.x = Math.abs(_currCenterPoint.x) - _panOffset.x;\n // _midZoomPoint.y = Math.abs(_currCenterPoint.y) - _panOffset.y;\n // _currPointsDistance = _startPointsDistance = _calculatePointsDistance(p, p2);\n // }\n\n },\n\n // Pointermove/touchmove/mousemove handler\n _onDragMove = function(e){\n\n e.preventDefault();\n\n if(_pointerEventEnabled) {\n var pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n if(pointerIndex > -1) {\n var p = _currPointers[pointerIndex];\n p.x = e.pageX;\n p.y = e.pageY;\n }\n }\n\n if(_isDragging) {\n var touchesList = _getTouchPoints(e);\n if(!_direction && !_moved && !_isZooming) {\n\n if(_mainScrollPos.x !== _slideSize.x * _currPositionIndex) {\n // if main scroll position is shifted – direction is always horizontal\n _direction = 'h';\n } else {\n var diff = Math.abs(touchesList[0].x - _currPoint.x) - Math.abs(touchesList[0].y - _currPoint.y);\n // check the direction of movement\n if(Math.abs(diff) >= DIRECTION_CHECK_OFFSET) {\n _direction = diff > 0 ? 'h' : 'v';\n _currentPoints = touchesList;\n }\n }\n\n } else {\n _currentPoints = touchesList;\n }\n }\n\n if(_direction === 'h') {\n $('.pswp__counter').hide();\n $('.pswp__caption').hide();\n }\n },\n //\n _renderMovement = function(){\n\n if(!_currentPoints) {\n return;\n }\n\n var numPoints = _currentPoints.length;\n\n if(numPoints === 0) {\n return;\n }\n\n _equalizePoints(p, _currentPoints[0]);\n\n delta.x = p.x - _currPoint.x;\n delta.y = p.y - _currPoint.y;\n\n if(_isZooming && numPoints > 1) {\n // Handle behaviour for more than 1 point\n\n _currPoint.x = p.x;\n _currPoint.y = p.y;\n\n // check if one of two points changed\n if(!delta.x && !delta.y && _isEqualPoints(_currentPoints[1], p2)) {\n return;\n }\n\n _equalizePoints(p2, _currentPoints[1]);\n\n if(!_zoomStarted) {\n _zoomStarted = true;\n _shout('zoomGestureStarted');\n }\n\n // Distance between two points\n var pointsDistance = _calculatePointsDistance(p, p2);\n\n var zoomLevel = _calculateZoomLevel(pointsDistance);\n\n // slightly over the of initial zoom level\n if(zoomLevel > self.currItem.initialZoomLevel + self.currItem.initialZoomLevel / 15) {\n _wasOverInitialZoom = true;\n }\n\n // Apply the friction if zoom level is out of the bounds\n var zoomFriction = 1,\n minZoomLevel = _getMinZoomLevel(),\n maxZoomLevel = _getMaxZoomLevel();\n\n if(zoomLevel < minZoomLevel) {\n\n if(_options.pinchToClose && !_wasOverInitialZoom && _startZoomLevel <= self.currItem.initialZoomLevel) {\n // fade out background if zooming out\n var minusDiff = minZoomLevel - zoomLevel;\n var percent = 1 - minusDiff / (minZoomLevel / 1.2);\n\n _applyBgOpacity(percent);\n _shout('onPinchClose', percent);\n _opacityChanged = true;\n } else {\n zoomFriction = (minZoomLevel - zoomLevel) / minZoomLevel;\n if(zoomFriction > 1) {\n zoomFriction = 1;\n }\n zoomLevel = minZoomLevel - zoomFriction * (minZoomLevel / 3);\n }\n\n } else if(zoomLevel > maxZoomLevel) {\n // 1.5 - extra zoom level above the max. E.g. if max is x6, real max 6 + 1.5 = 7.5\n zoomFriction = (zoomLevel - maxZoomLevel) / (minZoomLevel * 6);\n if(zoomFriction > 1) {\n zoomFriction = 1;\n }\n zoomLevel = maxZoomLevel + zoomFriction * minZoomLevel;\n }\n\n if(zoomFriction < 0) {\n zoomFriction = 0;\n }\n\n // distance between touch points after friction is applied\n _currPointsDistance = pointsDistance;\n\n // _centerPoint - The point in the middle of two pointers\n _findCenterOfPoints(p, p2, _centerPoint);\n\n // paning with two pointers pressed\n _currPanDist.x += _centerPoint.x - _currCenterPoint.x;\n _currPanDist.y += _centerPoint.y - _currCenterPoint.y;\n _equalizePoints(_currCenterPoint, _centerPoint);\n\n _panOffset.x = _calculatePanOffset('x', zoomLevel);\n _panOffset.y = _calculatePanOffset('y', zoomLevel);\n\n _isZoomingIn = zoomLevel > _currZoomLevel;\n _currZoomLevel = zoomLevel;\n _applyCurrentZoomPan();\n\n } else {\n\n // handle behaviour for one point (dragging or panning)\n\n if(!_direction) {\n return;\n }\n\n if(_isFirstMove) {\n _isFirstMove = false;\n\n // subtract drag distance that was used during the detection direction\n\n if(Math.abs(delta.x) >= DIRECTION_CHECK_OFFSET) {\n delta.x -= _currentPoints[0].x - _startPoint.x;\n }\n\n if(Math.abs(delta.y) >= DIRECTION_CHECK_OFFSET) {\n delta.y -= _currentPoints[0].y - _startPoint.y;\n }\n }\n\n _currPoint.x = p.x;\n _currPoint.y = p.y;\n\n // do nothing if pointers position hasn't changed\n if(delta.x === 0 && delta.y === 0) {\n return;\n }\n\n if(_direction === 'v' && _options.closeOnVerticalDrag) {\n if(!_canPan()) {\n _currPanDist.y += delta.y;\n _panOffset.y += delta.y;\n\n var opacityRatio = _calculateVerticalDragOpacityRatio();\n\n _verticalDragInitiated = true;\n _shout('onVerticalDrag', opacityRatio);\n\n _applyBgOpacity(opacityRatio);\n _applyCurrentZoomPan();\n return;\n }\n }\n\n _pushPosPoint(_getCurrentTime(), p.x, p.y);\n\n _moved = true;\n _currPanBounds = self.currItem.bounds;\n\n var mainScrollChanged = _panOrMoveMainScroll('x', delta);\n if(!mainScrollChanged) {\n _panOrMoveMainScroll('y', delta);\n\n _roundPoint(_panOffset);\n _applyCurrentZoomPan();\n }\n\n }\n\n },\n\n // Pointerup/pointercancel/touchend/touchcancel/mouseup event handler\n _onDragRelease = function(e){\n\n if(_features.isOldAndroid) {\n\n if(_oldAndroidTouchEndTimeout && e.type === 'mouseup') {\n return;\n }\n\n // on Android (v4.1, 4.2, 4.3 & possibly older)\n // ghost mousedown/up event isn't preventable via e.preventDefault,\n // which causes fake mousedown event\n // so we block mousedown/up for 600ms\n if(e.type.indexOf('touch') > -1) {\n clearTimeout(_oldAndroidTouchEndTimeout);\n _oldAndroidTouchEndTimeout = setTimeout(function(){\n _oldAndroidTouchEndTimeout = 0;\n }, 600);\n }\n\n }\n\n _shout('pointerUp');\n\n if(_preventDefaultEventBehaviour(e, false)) {\n e.preventDefault();\n }\n\n var releasePoint;\n\n if(_pointerEventEnabled) {\n var pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\n if(pointerIndex > -1) {\n releasePoint = _currPointers.splice(pointerIndex, 1)[0];\n\n if(navigator.pointerEnabled) {\n releasePoint.type = e.pointerType || 'mouse';\n } else {\n var MSPOINTER_TYPES = {\n 4: 'mouse', // event.MSPOINTER_TYPE_MOUSE\n 2: 'touch', // event.MSPOINTER_TYPE_TOUCH\n 3: 'pen' // event.MSPOINTER_TYPE_PEN\n };\n releasePoint.type = MSPOINTER_TYPES[e.pointerType];\n\n if(!releasePoint.type) {\n releasePoint.type = e.pointerType || 'mouse';\n }\n }\n\n }\n }\n\n var touchList = _getTouchPoints(e),\n gestureType,\n numPoints = touchList.length;\n\n if(e.type === 'mouseup') {\n numPoints = 0;\n }\n\n // Do nothing if there were 3 touch points or more\n if(numPoints === 2) {\n _currentPoints = null;\n return true;\n }\n\n // if second pointer released\n if(numPoints === 1) {\n _equalizePoints(_startPoint, touchList[0]);\n }\n\n // pointer hasn't moved, send \"tap release\" point\n if(numPoints === 0 && !_direction && !_mainScrollAnimating) {\n if(!releasePoint) {\n if(e.type === 'mouseup') {\n releasePoint = {x: e.pageX, y: e.pageY, type: 'mouse'};\n } else if(e.changedTouches && e.changedTouches[0]) {\n releasePoint = {x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY, type: 'touch'};\n }\n }\n\n _shout('touchRelease', e, releasePoint);\n }\n\n // Difference in time between releasing of two last touch points (zoom gesture)\n var releaseTimeDiff = -1;\n\n // Gesture completed, no pointers left\n if(numPoints === 0) {\n _isDragging = false;\n framework.unbind(window, _upMoveEvents, self);\n\n _stopDragUpdateLoop();\n\n if(_isZooming) {\n // Two points released at the same time\n releaseTimeDiff = 0;\n } else if(_lastReleaseTime !== -1) {\n releaseTimeDiff = _getCurrentTime() - _lastReleaseTime;\n }\n }\n _lastReleaseTime = numPoints === 1 ? _getCurrentTime() : -1;\n\n if(releaseTimeDiff !== -1 && releaseTimeDiff < 150) {\n gestureType = 'zoom';\n } else {\n gestureType = 'swipe';\n }\n\n if(_isZooming && numPoints < 2) {\n _isZooming = false;\n\n // Only second point released\n if(numPoints === 1) {\n gestureType = 'zoomPointerUp';\n }\n _shout('zoomGestureEnded');\n }\n\n _currentPoints = null;\n if(!_moved && !_zoomStarted && !_mainScrollAnimating && !_verticalDragInitiated) {\n // nothing to animate\n return;\n }\n\n _stopAllAnimations();\n\n if(!_releaseAnimData) {\n _releaseAnimData = _initDragReleaseAnimationData();\n }\n\n _releaseAnimData.calculateSwipeSpeed('x');\n\n if(_verticalDragInitiated) {\n\n var opacityRatio = _calculateVerticalDragOpacityRatio();\n\n if(opacityRatio < _options.verticalDragRange) {\n self.close();\n } else {\n var initalPanY = _panOffset.y,\n initialBgOpacity = _bgOpacity;\n\n _animateProp('verticalDrag', 0, 1, 300, framework.easing.cubic.out, function(now){\n\n _panOffset.y = (self.currItem.initialPosition.y - initalPanY) * now + initalPanY;\n\n _applyBgOpacity((1 - initialBgOpacity) * now + initialBgOpacity);\n _applyCurrentZoomPan();\n });\n\n _shout('onVerticalDrag', 1);\n }\n\n return;\n }\n\n // main scroll\n if((_mainScrollShifted || _mainScrollAnimating) && numPoints === 0) {\n var itemChanged = _finishSwipeMainScrollGesture(gestureType, _releaseAnimData);\n if(itemChanged) {\n return;\n }\n gestureType = 'zoomPointerUp';\n }\n\n // prevent zoom/pan animation when main scroll animation runs\n if(_mainScrollAnimating) {\n return;\n }\n\n // Complete simple zoom gesture (reset zoom level if it's out of the bounds)\n if(gestureType !== 'swipe') {\n _completeZoomGesture();\n return;\n }\n\n // Complete pan gesture if main scroll is not shifted, and it's possible to pan current image\n if(!_mainScrollShifted && _currZoomLevel > self.currItem.fitRatio) {\n _completePanGesture(_releaseAnimData);\n }\n },\n\n // Returns object with data about gesture\n // It's created only once and then reused\n _initDragReleaseAnimationData = function(){\n // temp local vars\n var lastFlickDuration,\n tempReleasePos;\n\n // s = this\n var s = {\n lastFlickOffset: {},\n lastFlickDist: {},\n lastFlickSpeed: {},\n slowDownRatio: {},\n slowDownRatioReverse: {},\n speedDecelerationRatio: {},\n speedDecelerationRatioAbs: {},\n distanceOffset: {},\n backAnimDestination: {},\n backAnimStarted: {},\n calculateSwipeSpeed: function(axis){\n\n if(_posPoints.length > 1) {\n lastFlickDuration = _getCurrentTime() - _gestureCheckSpeedTime + 50;\n tempReleasePos = _posPoints[_posPoints.length - 2][axis];\n } else {\n lastFlickDuration = _getCurrentTime() - _gestureStartTime; // total gesture duration\n tempReleasePos = _startPoint[axis];\n }\n s.lastFlickOffset[axis] = _currPoint[axis] - tempReleasePos;\n s.lastFlickDist[axis] = Math.abs(s.lastFlickOffset[axis]);\n if(s.lastFlickDist[axis] > 20) {\n s.lastFlickSpeed[axis] = s.lastFlickOffset[axis] / lastFlickDuration;\n } else {\n s.lastFlickSpeed[axis] = 0;\n }\n if(Math.abs(s.lastFlickSpeed[axis]) < 0.1) {\n s.lastFlickSpeed[axis] = 0;\n }\n\n s.slowDownRatio[axis] = 0.95;\n s.slowDownRatioReverse[axis] = 1 - s.slowDownRatio[axis];\n s.speedDecelerationRatio[axis] = 1;\n },\n\n calculateOverBoundsAnimOffset: function(axis, speed){\n if(!s.backAnimStarted[axis]) {\n\n if(_panOffset[axis] > _currPanBounds.min[axis]) {\n s.backAnimDestination[axis] = _currPanBounds.min[axis];\n\n } else if(_panOffset[axis] < _currPanBounds.max[axis]) {\n s.backAnimDestination[axis] = _currPanBounds.max[axis];\n }\n\n if(s.backAnimDestination[axis] !== undefined) {\n s.slowDownRatio[axis] = 0.7;\n s.slowDownRatioReverse[axis] = 1 - s.slowDownRatio[axis];\n if(s.speedDecelerationRatioAbs[axis] < 0.05) {\n\n s.lastFlickSpeed[axis] = 0;\n s.backAnimStarted[axis] = true;\n\n _animateProp('bounceZoomPan' + axis, _panOffset[axis],\n s.backAnimDestination[axis],\n speed || 300,\n framework.easing.sine.out,\n function(pos){\n _panOffset[axis] = pos;\n _applyCurrentZoomPan();\n }\n );\n\n }\n }\n }\n },\n\n // Reduces the speed by slowDownRatio (per 10ms)\n calculateAnimOffset: function(axis){\n if(!s.backAnimStarted[axis]) {\n s.speedDecelerationRatio[axis] = s.speedDecelerationRatio[axis] * (s.slowDownRatio[axis] +\n s.slowDownRatioReverse[axis] -\n s.slowDownRatioReverse[axis] * s.timeDiff / 10);\n\n s.speedDecelerationRatioAbs[axis] = Math.abs(s.lastFlickSpeed[axis] * s.speedDecelerationRatio[axis]);\n s.distanceOffset[axis] = s.lastFlickSpeed[axis] * s.speedDecelerationRatio[axis] * s.timeDiff;\n _panOffset[axis] += s.distanceOffset[axis];\n\n }\n },\n\n panAnimLoop: function(){\n if(_animations.zoomPan) {\n _animations.zoomPan.raf = _requestAF(s.panAnimLoop);\n\n s.now = _getCurrentTime();\n s.timeDiff = s.now - s.lastNow;\n s.lastNow = s.now;\n\n s.calculateAnimOffset('x');\n s.calculateAnimOffset('y');\n\n _applyCurrentZoomPan();\n\n s.calculateOverBoundsAnimOffset('x');\n s.calculateOverBoundsAnimOffset('y');\n\n if(s.speedDecelerationRatioAbs.x < 0.05 && s.speedDecelerationRatioAbs.y < 0.05) {\n\n // round pan position\n _panOffset.x = Math.round(_panOffset.x);\n _panOffset.y = Math.round(_panOffset.y);\n _applyCurrentZoomPan();\n\n _stopAnimation('zoomPan');\n return;\n }\n }\n\n }\n };\n return s;\n },\n\n _completePanGesture = function(animData){\n // calculate swipe speed for Y axis (paanning)\n animData.calculateSwipeSpeed('y');\n\n _currPanBounds = self.currItem.bounds;\n\n animData.backAnimDestination = {};\n animData.backAnimStarted = {};\n\n // Avoid acceleration animation if speed is too low\n if(Math.abs(animData.lastFlickSpeed.x) <= 0.05 && Math.abs(animData.lastFlickSpeed.y) <= 0.05) {\n animData.speedDecelerationRatioAbs.x = animData.speedDecelerationRatioAbs.y = 0;\n\n // Run pan drag release animation. E.g. if you drag image and release finger without momentum.\n animData.calculateOverBoundsAnimOffset('x');\n animData.calculateOverBoundsAnimOffset('y');\n return true;\n }\n\n // Animation loop that controls the acceleration after pan gesture ends\n _registerStartAnimation('zoomPan');\n animData.lastNow = _getCurrentTime();\n animData.panAnimLoop();\n },\n\n _finishSwipeMainScrollGesture = function(gestureType, _releaseAnimData){\n var itemChanged;\n if(!_mainScrollAnimating) {\n _currZoomedItemIndex = _currentItemIndex;\n }\n\n var itemsDiff;\n\n if(gestureType === 'swipe') {\n var totalShiftDist = _currPoint.x - _startPoint.x,\n isFastLastFlick = _releaseAnimData.lastFlickDist.x < 10;\n\n // if container is shifted for more than MIN_SWIPE_DISTANCE,\n // and last flick gesture was in right direction\n if(totalShiftDist > MIN_SWIPE_DISTANCE &&\n (isFastLastFlick || _releaseAnimData.lastFlickOffset.x > 20)) {\n // go to prev item\n itemsDiff = -1;\n } else if(totalShiftDist < -MIN_SWIPE_DISTANCE &&\n (isFastLastFlick || _releaseAnimData.lastFlickOffset.x < -20)) {\n // go to next item\n itemsDiff = 1;\n }\n }\n\n var nextCircle;\n\n if(itemsDiff) {\n\n _currentItemIndex += itemsDiff;\n\n if(_currentItemIndex < 0) {\n _currentItemIndex = _options.loop ? _getNumItems() - 1 : 0;\n nextCircle = true;\n } else if(_currentItemIndex >= _getNumItems()) {\n _currentItemIndex = _options.loop ? 0 : _getNumItems() - 1;\n nextCircle = true;\n }\n\n if(!nextCircle || _options.loop) {\n _indexDiff += itemsDiff;\n _currPositionIndex -= itemsDiff;\n itemChanged = true;\n }\n\n }\n\n var animateToX = _slideSize.x * _currPositionIndex;\n var animateToDist = Math.abs(animateToX - _mainScrollPos.x);\n var finishAnimDuration;\n\n if(!itemChanged && animateToX > _mainScrollPos.x !== _releaseAnimData.lastFlickSpeed.x > 0) {\n // \"return to current\" duration, e.g. when dragging from slide 0 to -1\n finishAnimDuration = 333;\n } else {\n finishAnimDuration = Math.abs(_releaseAnimData.lastFlickSpeed.x) > 0 ?\n animateToDist / Math.abs(_releaseAnimData.lastFlickSpeed.x) :\n 333;\n\n finishAnimDuration = Math.min(finishAnimDuration, 400);\n finishAnimDuration = Math.max(finishAnimDuration, 250);\n }\n\n if(_currZoomedItemIndex === _currentItemIndex) {\n itemChanged = false;\n }\n\n _mainScrollAnimating = true;\n\n _shout('mainScrollAnimStart');\n $('.pswp__counter').hide();\n $('.pswp__caption').hide();\n\n _animateProp('mainScroll', _mainScrollPos.x, animateToX, finishAnimDuration, framework.easing.cubic.out,\n _moveMainScroll,\n function(){\n _stopAllAnimations();\n _mainScrollAnimating = false;\n _currZoomedItemIndex = -1;\n\n if(itemChanged || _currZoomedItemIndex !== _currentItemIndex) {\n self.updateCurrItem();\n }\n\n _shout('mainScrollAnimComplete');\n _shout('imagechangeendwithanimate');\n $('.pswp__button--download').attr('href', self.currItem.src);\n $('.pswp__counter').css({\n top: self.currItem.initialPosition.y - 35,\n right: self.currItem.initialPosition.x\n });\n\n $('.pswp__caption').css({top: self.currItem.initialPosition.y - 40});\n $('.pswp__counter').show();\n $('.pswp__caption').show();\n }\n );\n\n if(itemChanged) {\n self.updateCurrItem(true);\n }\n\n return itemChanged;\n },\n\n _calculateZoomLevel = function(touchesDistance){\n return 1 / _startPointsDistance * touchesDistance * _startZoomLevel;\n },\n\n // Resets zoom if it's out of bounds\n _completeZoomGesture = function(){\n var destZoomLevel = _currZoomLevel,\n minZoomLevel = _getMinZoomLevel(),\n maxZoomLevel = _getMaxZoomLevel();\n\n if(_currZoomLevel < minZoomLevel) {\n destZoomLevel = minZoomLevel;\n } else if(_currZoomLevel > maxZoomLevel) {\n destZoomLevel = maxZoomLevel;\n }\n\n var destOpacity = 1,\n onUpdate,\n initialOpacity = _bgOpacity;\n\n if(_opacityChanged && !_isZoomingIn && !_wasOverInitialZoom && _currZoomLevel < minZoomLevel) {\n //_closedByScroll = true;\n self.close();\n return true;\n }\n\n if(_opacityChanged) {\n onUpdate = function(now){\n _applyBgOpacity((destOpacity - initialOpacity) * now + initialOpacity);\n };\n }\n\n self.zoomTo(destZoomLevel, 0, 200, framework.easing.cubic.out, onUpdate);\n return true;\n };\n\n _registerModule('Gestures', {\n publicMethods: {\n\n initGestures: function(){\n\n // helper function that builds touch/pointer/mouse events\n var addEventNames = function(pref, down, move, up, cancel){\n _dragStartEvent = pref + down;\n _dragMoveEvent = pref + move;\n _dragEndEvent = pref + up;\n if(cancel) {\n _dragCancelEvent = pref + cancel;\n } else {\n _dragCancelEvent = '';\n }\n };\n\n _pointerEventEnabled = _features.pointerEvent;\n if(_pointerEventEnabled && _features.touch) {\n // we don't need touch events, if browser supports pointer events\n _features.touch = false;\n }\n\n if(_pointerEventEnabled) {\n if(navigator.pointerEnabled) {\n addEventNames('pointer', 'down', 'move', 'up', 'cancel');\n } else {\n // IE10 pointer events are case-sensitive\n addEventNames('MSPointer', 'Down', 'Move', 'Up', 'Cancel');\n }\n } else if(_features.touch) {\n addEventNames('touch', 'start', 'move', 'end', 'cancel');\n _likelyTouchDevice = true;\n } else {\n addEventNames('mouse', 'down', 'move', 'up');\n }\n\n _upMoveEvents = _dragMoveEvent + ' ' + _dragEndEvent + ' ' + _dragCancelEvent;\n _downEvents = _dragStartEvent;\n\n if(_pointerEventEnabled && !_likelyTouchDevice) {\n _likelyTouchDevice = (navigator.maxTouchPoints > 1) || (navigator.msMaxTouchPoints > 1);\n }\n // make variable public\n self.likelyTouchDevice = _likelyTouchDevice;\n\n _globalEventHandlers[_dragStartEvent] = _onDragStart;\n _globalEventHandlers[_dragMoveEvent] = _onDragMove;\n _globalEventHandlers[_dragEndEvent] = _onDragRelease; // the Kraken\n\n if(_dragCancelEvent) {\n _globalEventHandlers[_dragCancelEvent] = _globalEventHandlers[_dragEndEvent];\n }\n\n // Bind mouse events on device with detected hardware touch support, in case it supports multiple types of input.\n if(_features.touch) {\n _downEvents += ' mousedown';\n _upMoveEvents += ' mousemove mouseup';\n _globalEventHandlers.mousedown = _globalEventHandlers[_dragStartEvent];\n _globalEventHandlers.mousemove = _globalEventHandlers[_dragMoveEvent];\n _globalEventHandlers.mouseup = _globalEventHandlers[_dragEndEvent];\n }\n\n if(!_likelyTouchDevice) {\n // don't allow pan to next slide from zoomed state on Desktop\n _options.allowPanToNext = false;\n }\n }\n\n }\n });\n\n /*>>gestures*/\n\n /*>>show-hide-transition*/\n /**\n * show-hide-transition.js:\n *\n * Manages initial opening or closing transition.\n *\n * If you're not planning to use transition for gallery at all,\n * you may set options hideAnimationDuration and showAnimationDuration to 0,\n * and just delete startAnimation function.\n *\n */\n\n\n var _showOrHideTimeout,\n _showOrHide = function(item, img, out, completeFn){\n\n if(_showOrHideTimeout) {\n clearTimeout(_showOrHideTimeout);\n }\n\n _initialZoomRunning = true;\n _initialContentSet = true;\n\n // dimensions of small thumbnail {x:,y:,w:}.\n // Height is optional, as calculated based on large image.\n var thumbBounds;\n if(item.initialLayout) {\n thumbBounds = item.initialLayout;\n item.initialLayout = null;\n } else {\n thumbBounds = _options.getThumbBoundsFn && _options.getThumbBoundsFn(_currentItemIndex);\n }\n\n var duration = out ? _options.hideAnimationDuration : _options.showAnimationDuration;\n\n var onComplete = function(){\n _stopAnimation('initialZoom');\n if(!out) {\n _applyBgOpacity(1);\n if(img) {\n img.style.display = 'block';\n }\n framework.addClass(template, 'pswp--animated-in');\n _shout('initialZoom' + (out ? 'OutEnd' : 'InEnd'));\n } else {\n self.template.removeAttribute('style');\n self.bg.removeAttribute('style');\n $(template).next().removeAttr('style');\n $(template).next().removeClass('pswp-navi_animate_opacity');\n }\n\n if(completeFn) {\n completeFn();\n }\n _initialZoomRunning = false;\n };\n\n // if bounds aren't provided, just open gallery without animation\n if(!duration || !thumbBounds || thumbBounds.x === undefined) {\n\n _shout('initialZoom' + (out ? 'Out' : 'In'));\n\n _currZoomLevel = item.initialZoomLevel;\n _equalizePoints(_panOffset, item.initialPosition);\n _applyCurrentZoomPan();\n\n template.style.opacity = out ? 0 : 1;\n _applyBgOpacity(1);\n\n if(duration) {\n setTimeout(function(){\n onComplete();\n }, duration);\n } else {\n onComplete();\n }\n\n return;\n }\n\n var startAnimation = function(){\n var closeWithRaf = _closedByScroll,\n fadeEverything = !self.currItem.src || self.currItem.loadError || _options.showHideOpacity;\n\n // apply hw-acceleration to image\n if(item.miniImg) {\n item.miniImg.style.webkitBackfaceVisibility = 'hidden';\n }\n\n if(!out) {\n _currZoomLevel = thumbBounds.w / item.w;\n _panOffset.x = thumbBounds.x;\n _panOffset.y = thumbBounds.y - _initalWindowScrollY;\n\n self[fadeEverything ? 'template' : 'bg'].style.opacity = 0.5;\n _applyCurrentZoomPan();\n }\n\n _registerStartAnimation('initialZoom');\n\n if(out && !closeWithRaf) {\n framework.removeClass(template, 'pswp--animated-in');\n\n }\n\n if(fadeEverything) {\n if(out) {\n framework[(closeWithRaf ? 'remove' : 'add') + 'Class'](template, 'pswp--animate_opacity');\n } else {\n setTimeout(function(){\n framework.addClass(template, 'pswp--animate_opacity');\n $(template).next().addClass('pswp-navi_animate_opacity');\n }, 30);\n }\n }\n\n _showOrHideTimeout = setTimeout(function(){\n\n _shout('initialZoom' + (out ? 'Out' : 'In'));\n\n if(!out) {\n\n // \"in\" animation always uses CSS transitions (instead of rAF).\n // CSS transition work faster here,\n // as developer may also want to animate other things,\n // like ui on top of sliding area, which can be animated just via CSS\n\n _currZoomLevel = item.initialZoomLevel;\n _equalizePoints(_panOffset, item.initialPosition);\n _applyCurrentZoomPan();\n _applyBgOpacity(1);\n\n if(fadeEverything) {\n template.style.opacity = 1;\n $(template).next().css({\n opacity: 1\n });\n } else {\n _applyBgOpacity(1);\n }\n _showOrHideTimeout = setTimeout(onComplete, duration + 20);\n } else {\n // \"out\" animation uses rAF only when PhotoSwipe is closed by browser scroll, to recalculate position\n var destZoomLevel = thumbBounds.w / item.w,\n initialPanOffset = {\n x: _panOffset.x,\n y: _panOffset.y\n },\n initialZoomLevel = _currZoomLevel,\n initalBgOpacity = _bgOpacity,\n onUpdate = function(now){\n if(now === 1) {\n _currZoomLevel = destZoomLevel;\n _panOffset.x = thumbBounds.x;\n _panOffset.y = thumbBounds.y - _currentWindowScrollY;\n } else {\n _currZoomLevel = (destZoomLevel - initialZoomLevel) * now + initialZoomLevel;\n _panOffset.x = (thumbBounds.x - initialPanOffset.x) * now + initialPanOffset.x;\n _panOffset.y = (thumbBounds.y - _currentWindowScrollY - initialPanOffset.y) * now + initialPanOffset.y;\n }\n\n // _applyCurrentZoomPan();\n if(fadeEverything) {\n template.style.opacity = 1 - now;\n $(template).next().css({\n opacity: 0\n });\n } else {\n _applyBgOpacity(initalBgOpacity - now * initalBgOpacity);\n }\n };\n\n if(closeWithRaf) {\n _animateProp('initialZoom', 0, 1, duration, framework.easing.cubic.out, onUpdate, onComplete);\n } else {\n onUpdate(1);\n _showOrHideTimeout = setTimeout(onComplete, 333);\n }\n }\n\n }, out ? 25 : 90); // Main purpose of this delay is to give browser time to paint and\n // create composite layers of PhotoSwipe UI parts (background, controls, caption, arrows).\n // Which avoids lag at the beginning of scale transition.\n };\n startAnimation();\n\n };\n\n /*>>show-hide-transition*/\n\n /*>>items-controller*/\n /**\n *\n * Controller manages gallery items, their dimensions, and their content.\n *\n */\n\n var _items,\n _tempPanAreaSize = {},\n _imagesToAppendPool = [],\n _initialContentSet,\n _initialZoomRunning,\n _controllerDefaultOptions = {\n index: 0,\n errorMsg: '
The image could not be loaded.
',\n forceProgressiveLoading: false, // TODO\n preload: [1, 1],\n getNumItemsFn: function(){\n return _items.length;\n }\n };\n\n var _getItemAt,\n _getNumItems,\n _initialIsLoop,\n _getZeroBounds = function(){\n return {\n center: {x: 0, y: 0},\n max: {x: 0, y: 0},\n min: {x: 0, y: 0}\n };\n },\n _calculateSingleItemPanBounds = function(item, realPanElementW, realPanElementH){\n var bounds = item.bounds;\n\n // position of element when it's centered\n bounds.center.x = Math.round((_tempPanAreaSize.x - realPanElementW) / 2) + item.vGap.left;\n bounds.center.y = Math.round((_tempPanAreaSize.y - realPanElementH) / 2) + item.vGap.top;\n\n // maximum pan position\n bounds.max.x = (realPanElementW > _tempPanAreaSize.x) ?\n Math.round(_tempPanAreaSize.x - realPanElementW) + item.vGap.left :\n bounds.center.x;\n\n bounds.max.y = (realPanElementH > _tempPanAreaSize.y) ?\n Math.round(_tempPanAreaSize.y - realPanElementH) + item.vGap.top :\n bounds.center.y;\n\n // minimum pan position\n bounds.min.x = (realPanElementW > _tempPanAreaSize.x) ? item.vGap.left : bounds.center.x;\n bounds.min.y = (realPanElementH > _tempPanAreaSize.y) ? item.vGap.top : bounds.center.y;\n },\n _calculateItemSize = function(item, viewportSize, zoomLevel){\n\n if(item.src && !item.loadError) {\n var isInitial = !zoomLevel;\n\n if(isInitial) {\n if(!item.vGap) {\n if($(window).width() > 640) {\n item.vGap = {top: 0, bottom: 0, left: 90, right: 90};\n } else {\n item.vGap = {top: 0, bottom: 0, left: 0, right: 0};\n }\n }\n // allows overriding vertical margin for individual items\n _shout('parseVerticalMargin', item);\n }\n\n _tempPanAreaSize.x = viewportSize.x - item.vGap.left - item.vGap.right;\n _tempPanAreaSize.y = viewportSize.y - item.vGap.top - item.vGap.bottom;\n\n if(isInitial) {\n var hRatio = _tempPanAreaSize.x / item.w;\n var vRatio = _tempPanAreaSize.y / item.h;\n\n item.fitRatio = hRatio < vRatio ? hRatio : vRatio;\n //item.fillRatio = hRatio > vRatio ? hRatio : vRatio;\n\n var scaleMode = _options.scaleMode;\n\n if(scaleMode === 'orig') {\n zoomLevel = 1;\n } else if(scaleMode === 'fit') {\n zoomLevel = item.fitRatio;\n }\n\n if(zoomLevel > 1) {\n zoomLevel = 1;\n }\n\n item.initialZoomLevel = zoomLevel;\n\n if(!item.bounds) {\n // reuse bounds object\n item.bounds = _getZeroBounds();\n }\n }\n\n if(!zoomLevel) {\n return;\n }\n\n _calculateSingleItemPanBounds(item, item.w * zoomLevel, item.h * zoomLevel);\n\n if(isInitial && zoomLevel === item.initialZoomLevel) {\n item.initialPosition = item.bounds.center;\n }\n\n return item.bounds;\n } else {\n item.w = item.h = 0;\n item.initialZoomLevel = item.fitRatio = 1;\n item.bounds = _getZeroBounds();\n item.initialPosition = item.bounds.center;\n\n // if it's not image, we return zero bounds (content is not zoomable)\n return item.bounds;\n }\n\n },\n\n _appendImage = function(index, item, baseDiv, img, preventAnimation, keepPlaceholder){\n\n if(item.loadError) {\n return;\n }\n\n if(img) {\n\n item.imageAppended = true;\n _setImageSize(item, img, (item === self.currItem && _renderMaxResolution));\n\n baseDiv.appendChild(img);\n\n if(keepPlaceholder) {\n setTimeout(function(){\n if(item && item.loaded && item.placeholder) {\n item.placeholder.style.display = 'none';\n item.placeholder = null;\n }\n }, 500);\n }\n }\n },\n\n _preloadImage = function(item){\n item.loading = true;\n item.loaded = false;\n var img = item.img = framework.createEl('pswp__img', 'img');\n var onComplete = function(){\n item.loading = false;\n item.loaded = true;\n\n if(item.loadComplete) {\n item.loadComplete(item);\n } else {\n item.img = null; // no need to store image object\n }\n img.onload = img.onerror = null;\n img = null;\n };\n img.onload = onComplete;\n img.onerror = function(){\n item.loadError = true;\n onComplete();\n };\n\n img.src = item.src;// + '?a=' + Math.random();\n\n return img;\n },\n _checkForError = function(item, cleanUp){\n if(item.src && item.loadError && item.container) {\n\n if(cleanUp) {\n item.container.innerHTML = '';\n }\n\n item.container.innerHTML = _options.errorMsg.replace('%url%', item.src);\n return true;\n\n }\n },\n _setImageSize = function(item, img, maxRes){\n if(!item.src) {\n return;\n }\n\n if(!img) {\n img = item.container.lastChild;\n }\n\n var w = maxRes ? item.w : Math.round(item.w * item.fitRatio),\n h = maxRes ? item.h : Math.round(item.h * item.fitRatio);\n\n if(item.placeholder && !item.loaded) {\n item.placeholder.style.width = w + 'px';\n item.placeholder.style.height = h + 'px';\n }\n\n img.style.width = w + 'px';\n img.style.height = h + 'px';\n },\n _appendImagesPool = function(){\n\n if(_imagesToAppendPool.length) {\n var poolItem;\n\n for(var i = 0; i < _imagesToAppendPool.length; i++) {\n poolItem = _imagesToAppendPool[i];\n if(poolItem.holder.index === poolItem.index) {\n _appendImage(poolItem.index, poolItem.item, poolItem.baseDiv, poolItem.img, false, poolItem.clearPlaceholder);\n }\n }\n _imagesToAppendPool = [];\n }\n };\n\n _registerModule('Controller', {\n\n publicMethods: {\n\n lazyLoadItem: function(index){\n index = _getLoopedId(index);\n var item = _getItemAt(index);\n\n if(!item || ((item.loaded || item.loading) && !_itemsNeedUpdate)) {\n return;\n }\n\n _shout('gettingData', index, item);\n\n if(!item.src) {\n return;\n }\n\n _preloadImage(item);\n },\n initController: function(){\n framework.extend(_options, _controllerDefaultOptions, true);\n self.items = _items = items;\n _getItemAt = self.getItemAt;\n _getNumItems = _options.getNumItemsFn; //self.getNumItems;\n\n _initialIsLoop = _options.loop;\n \n // if(_getNumItems() < 3) {\n // _options.loop = false; // disable loop if less then 3 items\n // }\n //\n \n _listen('beforeChange', function(diff){\n\n var p = _options.preload,\n isNext = diff === null ? true : (diff >= 0),\n preloadBefore = Math.min(p[0], _getNumItems()),\n preloadAfter = Math.min(p[1], _getNumItems()),\n i;\n\n for(i = 1; i <= (isNext ? preloadAfter : preloadBefore); i++) {\n self.lazyLoadItem(_currentItemIndex + i);\n }\n for(i = 1; i <= (isNext ? preloadBefore : preloadAfter); i++) {\n self.lazyLoadItem(_currentItemIndex - i);\n }\n });\n\n _listen('initialLayout', function(){\n self.currItem.initialLayout = _options.getThumbBoundsFn && _options.getThumbBoundsFn(_currentItemIndex);\n });\n\n _listen('mainScrollAnimComplete', _appendImagesPool);\n _listen('initialZoomInEnd', _appendImagesPool);\n\n _listen('destroy', function(){\n var item;\n for(var i = 0; i < _items.length; i++) {\n item = _items[i];\n // remove reference to DOM elements, for GC\n if(item.container) {\n item.container = null;\n }\n if(item.placeholder) {\n item.placeholder = null;\n }\n if(item.img) {\n item.img = null;\n }\n if(item.preloader) {\n item.preloader = null;\n }\n if(item.loadError) {\n item.loaded = item.loadError = false;\n }\n }\n _imagesToAppendPool = null;\n });\n },\n\n getItemAt: function(index){\n if(index >= 0) {\n return _items[index] !== undefined ? _items[index] : false;\n }\n return false;\n },\n\n allowProgressiveImg: function(){\n // 1. Progressive image loading isn't working on webkit/blink\n // when hw-acceleration (e.g. translateZ) is applied to IMG element.\n // That's why in PhotoSwipe parent element gets zoom transform, not image itself.\n //\n // 2. Progressive image loading sometimes blinks in webkit/blink when applying animation to parent element.\n // That's why it's disabled on touch devices (mainly because of swipe transition)\n //\n // 3. Progressive image loading sometimes doesn't work in IE (up to 11).\n\n // Don't allow progressive loading on non-large touch devices\n return _options.forceProgressiveLoading || !_likelyTouchDevice || _options.mouseUsed || screen.width > 1200;\n // 1200 - to eliminate touch devices with large screen (like Chromebook Pixel)\n },\n\n setContent: function(holder, index){\n\n if(_options.loop) {\n index = _getLoopedId(index);\n }\n\n var prevItem = self.getItemAt(holder.index);\n if(prevItem) {\n prevItem.container = null;\n }\n\n var item = self.getItemAt(index),\n img;\n\n if(!item) {\n holder.el.innerHTML = '';\n return;\n }\n\n // allow to override data\n _shout('gettingData', index, item);\n\n holder.index = index;\n holder.item = item;\n\n // base container DIV is created only once for each of 3 holders\n var baseDiv = item.container = framework.createEl('pswp__zoom-wrap');\n\n if(!item.src && item.html) {\n if(item.html.tagName) {\n baseDiv.appendChild(item.html);\n } else {\n baseDiv.innerHTML = item.html;\n }\n }\n\n _checkForError(item);\n\n _calculateItemSize(item, _viewportSize);\n\n if(item.src && !item.loadError && !item.loaded) {\n\n item.loadComplete = function(item){\n\n // gallery closed before image finished loading\n if(!_isOpen) {\n return;\n }\n\n // check if holder hasn't changed while image was loading\n if(holder && holder.index === index) {\n if(_checkForError(item, true)) {\n item.loadComplete = item.img = null;\n _calculateItemSize(item, _viewportSize);\n _applyZoomPanToItem(item);\n\n if(holder.index === _currentItemIndex) {\n // recalculate dimensions\n self.updateCurrZoomItem();\n }\n return;\n }\n if(!item.imageAppended) {\n if(_features.transform && (_mainScrollAnimating || _initialZoomRunning)) {\n _imagesToAppendPool.push({\n item: item,\n baseDiv: baseDiv,\n img: item.img,\n index: index,\n holder: holder,\n clearPlaceholder: true\n });\n } else {\n _appendImage(index, item, baseDiv, item.img, _mainScrollAnimating || _initialZoomRunning, true);\n }\n } else {\n // remove preloader & mini-img\n if(!_initialZoomRunning && item.placeholder) {\n item.placeholder.style.display = 'none';\n item.placeholder = null;\n }\n }\n }\n\n item.loadComplete = null;\n item.img = null; // no need to store image element after it's added\n\n _shout('imageLoadComplete', index, item);\n };\n\n if(framework.features.transform) {\n\n var placeholderClassName = 'pswp__img pswp__img--placeholder';\n placeholderClassName += (item.msrc ? '' : ' pswp__img--placeholder--blank');\n\n var placeholder = framework.createEl(placeholderClassName, item.msrc ? 'img' : '');\n if(item.msrc) {\n placeholder.src = item.msrc;\n }\n\n _setImageSize(item, placeholder);\n\n baseDiv.appendChild(placeholder);\n item.placeholder = placeholder;\n\n }\n\n if(!item.loading) {\n _preloadImage(item);\n }\n\n if(self.allowProgressiveImg()) {\n // just append image\n if(!_initialContentSet && _features.transform) {\n _imagesToAppendPool.push({\n item: item,\n baseDiv: baseDiv,\n img: item.img,\n index: index,\n holder: holder\n });\n } else {\n _appendImage(index, item, baseDiv, item.img, true, true);\n }\n }\n\n } else if(item.src && !item.loadError) {\n // image object is created every time, due to bugs of image loading & delay when switching images\n img = framework.createEl('pswp__img', 'img');\n img.style.opacity = 1;\n img.src = item.src;\n _setImageSize(item, img);\n _appendImage(index, item, baseDiv, img, true);\n }\n\n if(!_initialContentSet && index === _currentItemIndex) {\n _currZoomElementStyle = baseDiv.style;\n _showOrHide(item, (img || item.img));\n } else {\n _applyZoomPanToItem(item);\n }\n\n holder.el.innerHTML = '';\n holder.el.appendChild(baseDiv);\n },\n\n cleanSlide: function(item){\n if(item.img) {\n item.img.onload = item.img.onerror = null;\n }\n item.loaded = item.loading = item.img = item.imageAppended = false;\n }\n\n }\n });\n\n /*>>items-controller*/\n\n /*>>tap*/\n /**\n * tap.js:\n *\n * Displatches tap and double-tap events.\n *\n */\n\n var tapTimer,\n tapReleasePoint = {},\n _dispatchTapEvent = function(origEvent, releasePoint, pointerType){\n var e = document.createEvent('CustomEvent'),\n eDetail = {\n origEvent: origEvent,\n target: origEvent.target,\n releasePoint: releasePoint,\n pointerType: pointerType || 'touch'\n };\n\n e.initCustomEvent('pswpTap', true, true, eDetail);\n origEvent.target.dispatchEvent(e);\n };\n\n _registerModule('Tap', {\n publicMethods: {\n initTap: function(){\n _listen('firstTouchStart', self.onTapStart);\n _listen('touchRelease', self.onTapRelease);\n _listen('destroy', function(){\n tapReleasePoint = {};\n tapTimer = null;\n });\n },\n onTapStart: function(touchList){\n if(touchList.length > 1) {\n clearTimeout(tapTimer);\n tapTimer = null;\n }\n },\n onTapRelease: function(e, releasePoint){\n if(!releasePoint) {\n return;\n }\n\n if(!_moved && !_isMultitouch && !_numAnimations) {\n var p0 = releasePoint;\n if(tapTimer) {\n clearTimeout(tapTimer);\n tapTimer = null;\n\n // Check if taped on the same place\n if(_isNearbyPoints(p0, tapReleasePoint)) {\n _shout('doubleTap', p0);\n return;\n }\n }\n\n if(releasePoint.type === 'mouse') {\n _dispatchTapEvent(e, releasePoint, 'mouse');\n return;\n }\n\n var clickedTagName = e.target.tagName.toUpperCase();\n // avoid double tap delay on buttons and elements that have class pswp__single-tap\n if(clickedTagName === 'BUTTON' || framework.hasClass(e.target, 'pswp__single-tap')) {\n _dispatchTapEvent(e, releasePoint);\n return;\n }\n\n _equalizePoints(tapReleasePoint, p0);\n\n tapTimer = setTimeout(function(){\n _dispatchTapEvent(e, releasePoint);\n tapTimer = null;\n }, 300);\n }\n }\n }\n });\n\n /*>>tap*/\n\n /*>>desktop-zoom*/\n /**\n *\n * desktop-zoom.js:\n *\n * - Binds mousewheel event for paning zoomed image.\n * - Manages \"dragging\", \"zoomed-in\", \"zoom-out\" classes.\n * (which are used for cursors and zoom icon)\n * - Adds toggleDesktopZoom function.\n *\n */\n\n // var _wheelDelta;\n\n // _registerModule('DesktopZoom', {\n //\n // publicMethods: {\n //\n // initDesktopZoom: function(){\n //\n // if(_oldIE) {\n // // no zoom for old IE (<=8)\n // return;\n // }\n //\n // if(_likelyTouchDevice) {\n // // if detected hardware touch support, we wait until mouse is used,\n // // and only then apply desktop-zoom features\n // _listen('mouseUsed', function(){\n // self.setupDesktopZoom();\n // });\n // } else {\n // self.setupDesktopZoom(true);\n // }\n //\n // },\n //\n // setupDesktopZoom: function(onInit){\n //\n // _wheelDelta = {};\n //\n // var events = 'wheel mousewheel DOMMouseScroll';\n //\n // _listen('bindEvents', function(){\n // framework.bind(template, events, self.handleMouseWheel);\n // });\n //\n // _listen('unbindEvents', function(){\n // if(_wheelDelta) {\n // framework.unbind(template, events, self.handleMouseWheel);\n // }\n // });\n //\n // self.mouseZoomedIn = false;\n //\n // var hasDraggingClass,\n // updateZoomable = function(){\n // if(self.mouseZoomedIn) {\n // framework.removeClass(template, 'pswp--zoomed-in');\n // self.mouseZoomedIn = false;\n // }\n // if(_currZoomLevel < 1) {\n // framework.addClass(template, 'pswp--zoom-allowed');\n // } else {\n // framework.removeClass(template, 'pswp--zoom-allowed');\n // }\n // removeDraggingClass();\n // },\n // removeDraggingClass = function(){\n // if(hasDraggingClass) {\n // framework.removeClass(template, 'pswp--dragging');\n // hasDraggingClass = false;\n // }\n // };\n //\n // _listen('resize', updateZoomable);\n // _listen('afterChange', updateZoomable);\n // _listen('pointerDown', function(){\n // if(self.mouseZoomedIn) {\n // hasDraggingClass = true;\n // framework.addClass(template, 'pswp--dragging');\n // }\n // });\n // _listen('pointerUp', removeDraggingClass);\n //\n // if(!onInit) {\n // updateZoomable();\n // }\n //\n // },\n //\n // handleMouseWheel: function(e){\n //\n // if(_currZoomLevel <= self.currItem.fitRatio) {\n // if(_options.modal) {\n //\n // if(!_options.closeOnScroll || _numAnimations || _isDragging) {\n // e.preventDefault();\n // } else if(_transformKey && Math.abs(e.deltaY) > 2) {\n // // close PhotoSwipe\n // // if browser supports transforms & scroll changed enough\n // _closedByScroll = true;\n // self.close();\n // }\n //\n // }\n // return true;\n // }\n //\n // // allow just one event to fire\n // e.stopPropagation();\n //\n // // https://developer.mozilla.org/en-US/docs/Web/Events/wheel\n // _wheelDelta.x = 0;\n //\n // if('deltaX' in e) {\n // if(e.deltaMode === 1 /* DOM_DELTA_LINE */) {\n // // 18 - average line height\n // _wheelDelta.x = e.deltaX * 18;\n // _wheelDelta.y = e.deltaY * 18;\n // } else {\n // _wheelDelta.x = e.deltaX;\n // _wheelDelta.y = e.deltaY;\n // }\n // } else if('wheelDelta' in e) {\n // if(e.wheelDeltaX) {\n // _wheelDelta.x = -0.16 * e.wheelDeltaX;\n // }\n // if(e.wheelDeltaY) {\n // _wheelDelta.y = -0.16 * e.wheelDeltaY;\n // } else {\n // _wheelDelta.y = -0.16 * e.wheelDelta;\n // }\n // } else if('detail' in e) {\n // _wheelDelta.y = e.detail;\n // } else {\n // return;\n // }\n //\n // _calculatePanBounds(_currZoomLevel, true);\n //\n // var newPanX = _panOffset.x - _wheelDelta.x,\n // newPanY = _panOffset.y - _wheelDelta.y;\n //\n // // only prevent scrolling in nonmodal mode when not at edges\n // if(_options.modal ||\n // (\n // newPanX <= _currPanBounds.min.x && newPanX >= _currPanBounds.max.x &&\n // newPanY <= _currPanBounds.min.y && newPanY >= _currPanBounds.max.y\n // )) {\n // e.preventDefault();\n // }\n //\n // // TODO: use rAF instead of mousewheel?\n // self.panTo(newPanX, newPanY);\n // },\n //\n // toggleDesktopZoom: function(centerPoint){\n // centerPoint = centerPoint || {x: _viewportSize.x / 2 + _offset.x, y: _viewportSize.y / 2 + _offset.y};\n //\n // var doubleTapZoomLevel = _options.getDoubleTapZoom(true, self.currItem);\n // var zoomOut = _currZoomLevel === doubleTapZoomLevel;\n //\n // self.mouseZoomedIn = !zoomOut;\n //\n // self.zoomTo(zoomOut ? self.currItem.initialZoomLevel : doubleTapZoomLevel, centerPoint, 333);\n // framework[(!zoomOut ? 'add' : 'remove') + 'Class'](template, 'pswp--zoomed-in');\n // }\n //\n // }\n // });\n\n /*>>desktop-zoom*/\n\n /*>>history*/\n /**\n *\n * history.js:\n *\n * - Back button to close gallery.\n *\n * - Unique URL for each slide: example.com/&pid=1&gid=3\n * (where PID is picture index, and GID and gallery index)\n *\n * - Switch URL when slides change.\n *\n */\n\n // var _historyDefaultOptions = {\n // history: true,\n // galleryUID: 1\n // };\n //\n // var _historyUpdateTimeout,\n // _hashChangeTimeout,\n // _hashAnimCheckTimeout,\n // _hashChangedByScript,\n // _hashChangedByHistory,\n // _hashReseted,\n // _initialHash,\n // _historyChanged,\n // _closedFromURL,\n // _urlChangedOnce,\n // _windowLoc,\n //\n // _supportsPushState,\n //\n // _getHash = function(){\n // return _windowLoc.hash.substring(1);\n // },\n // _cleanHistoryTimeouts = function(){\n //\n // if(_historyUpdateTimeout) {\n // clearTimeout(_historyUpdateTimeout);\n // }\n //\n // if(_hashAnimCheckTimeout) {\n // clearTimeout(_hashAnimCheckTimeout);\n // }\n // },\n //\n // // pid - Picture index\n // // gid - Gallery index\n // _parseItemIndexFromURL = function(){\n // var hash = _getHash(),\n // params = {};\n //\n // if(hash.length < 5) { // pid=1\n // return params;\n // }\n //\n // var i, vars = hash.split('&');\n // for(i = 0; i < vars.length; i++) {\n // if(!vars[i]) {\n // continue;\n // }\n // var pair = vars[i].split('=');\n // if(pair.length < 2) {\n // continue;\n // }\n // params[pair[0]] = pair[1];\n // }\n // if(_options.galleryPIDs) {\n // // detect custom pid in hash and search for it among the items collection\n // var searchfor = params.pid;\n // params.pid = 0; // if custom pid cannot be found, fallback to the first item\n // for(i = 0; i < _items.length; i++) {\n // if(_items[i].pid === searchfor) {\n // params.pid = i;\n // break;\n // }\n // }\n // } else {\n // params.pid = parseInt(params.pid, 10) - 1;\n // }\n // if(params.pid < 0) {\n // params.pid = 0;\n // }\n // return params;\n // },\n // _updateHash = function(){\n //\n // if(_hashAnimCheckTimeout) {\n // clearTimeout(_hashAnimCheckTimeout);\n // }\n //\n // if(_numAnimations || _isDragging) {\n // // changing browser URL forces layout/paint in some browsers, which causes noticable lag during animation\n // // that's why we update hash only when no animations running\n // _hashAnimCheckTimeout = setTimeout(_updateHash, 500);\n // return;\n // }\n //\n // if(_hashChangedByScript) {\n // clearTimeout(_hashChangeTimeout);\n // } else {\n // _hashChangedByScript = true;\n // }\n //\n // var pid = (_currentItemIndex + 1);\n // var item = _getItemAt(_currentItemIndex);\n // if(item.hasOwnProperty('pid')) {\n // // carry forward any custom pid assigned to the item\n // pid = item.pid;\n // }\n // var newHash = _initialHash + '&' + 'gid=' + _options.galleryUID + '&' + 'pid=' + pid;\n //\n // if(!_historyChanged) {\n // if(_windowLoc.hash.indexOf(newHash) === -1) {\n // _urlChangedOnce = true;\n // }\n // // first time - add new hisory record, then just replace\n // }\n //\n // var newURL = _windowLoc.href.split('#')[0] + '#' + newHash;\n //\n // if(_supportsPushState) {\n //\n // if('#' + newHash !== window.location.hash) {\n // history[_historyChanged ? 'replaceState' : 'pushState']('', document.title, newURL);\n // }\n //\n // } else {\n // if(_historyChanged) {\n // _windowLoc.replace(newURL);\n // } else {\n // _windowLoc.hash = newHash;\n // }\n // }\n //\n // _historyChanged = true;\n // _hashChangeTimeout = setTimeout(function(){\n // _hashChangedByScript = false;\n // }, 60);\n // };\n //\n // _registerModule('History', {\n //\n // publicMethods: {\n // initHistory: function(){\n //\n // framework.extend(_options, _historyDefaultOptions, true);\n //\n // if(!_options.history) {\n // return;\n // }\n //\n // _windowLoc = window.location;\n // _urlChangedOnce = false;\n // _closedFromURL = false;\n // _historyChanged = false;\n // _initialHash = _getHash();\n // _supportsPushState = ('pushState' in history);\n //\n // if(_initialHash.indexOf('gid=') > -1) {\n // _initialHash = _initialHash.split('&gid=')[0];\n // _initialHash = _initialHash.split('?gid=')[0];\n // }\n //\n // _listen('afterChange', self.updateURL);\n // _listen('unbindEvents', function(){\n // framework.unbind(window, 'hashchange', self.onHashChange);\n // });\n //\n // var returnToOriginal = function(){\n // _hashReseted = true;\n // if(!_closedFromURL) {\n //\n // if(_urlChangedOnce) {\n // history.back();\n // } else {\n //\n // if(_initialHash) {\n // _windowLoc.hash = _initialHash;\n // } else {\n // if(_supportsPushState) {\n //\n // // remove hash from url without refreshing it or scrolling to top\n // history.pushState('', document.title, _windowLoc.pathname + _windowLoc.search);\n // } else {\n // _windowLoc.hash = '';\n // }\n // }\n // }\n //\n // }\n //\n // _cleanHistoryTimeouts();\n // };\n //\n // _listen('unbindEvents', function(){\n // if(_closedByScroll) {\n // // if PhotoSwipe is closed by scroll, we go \"back\" before the closing animation starts\n // // this is done to keep the scroll position\n // returnToOriginal();\n // }\n // });\n // _listen('destroy', function(){\n // if(!_hashReseted) {\n // returnToOriginal();\n // }\n // });\n // _listen('firstUpdate', function(){\n // _currentItemIndex = _parseItemIndexFromURL().pid;\n // });\n //\n // var index = _initialHash.indexOf('pid=');\n // if(index > -1) {\n // _initialHash = _initialHash.substring(0, index);\n // if(_initialHash.slice(-1) === '&') {\n // _initialHash = _initialHash.slice(0, -1);\n // }\n // }\n //\n // setTimeout(function(){\n // if(_isOpen) { // hasn't destroyed yet\n // framework.bind(window, 'hashchange', self.onHashChange);\n // }\n // }, 40);\n //\n // },\n // onHashChange: function(){\n //\n // if(_getHash() === _initialHash) {\n //\n // _closedFromURL = true;\n // self.close();\n // return;\n // }\n // if(!_hashChangedByScript) {\n //\n // _hashChangedByHistory = true;\n // self.goTo(_parseItemIndexFromURL().pid);\n // _hashChangedByHistory = false;\n // }\n //\n // },\n // updateURL: function(){\n //\n // // Delay the update of URL, to avoid lag during transition,\n // // and to not to trigger actions like \"refresh page sound\" or \"blinking favicon\" to often\n //\n // _cleanHistoryTimeouts();\n //\n // if(_hashChangedByHistory) {\n // return;\n // }\n //\n // if(!_historyChanged) {\n // _updateHash(); // first time\n // } else {\n // _historyUpdateTimeout = setTimeout(_updateHash, 800);\n // }\n // }\n //\n // }\n // });\n\n /*>>history*/\n framework.extend(self, publicMethods);\n};\n\nexport default PhotoSwipe;\n","const PhotoSwipeUI_Default = function(pswp, framework){\n\n var ui = this;\n var _overlayUIUpdated = false,\n _controlsVisible = true,\n _fullscrenAPI,\n _controls,\n _captionContainer,\n _fakeCaptionContainer,\n _indexIndicator,\n _shareButton,\n _shareModal,\n _shareModalHidden = true,\n _initalCloseOnScrollValue,\n _isIdle,\n _listen,\n\n _loadingIndicator,\n _loadingIndicatorHidden,\n _loadingIndicatorTimeout,\n\n _galleryHasOneSlide,\n\n _options,\n _defaultUIOptions = {\n barsSize: {top: 90, bottom: 50},\n closeElClasses: ['item', 'caption', 'zoom-wrap', 'ui', 'top-bar'],\n timeToIdle: 4000,\n timeToIdleOutside: 1000,\n loadingIndicatorDelay: 1000, // 2s\n\n addCaptionHTMLFn: function(item, captionEl /*, isFake */){\n if(!item.title) {\n captionEl.children[0].innerHTML = '';\n return false;\n }\n captionEl.children[0].innerHTML = item.title;\n return true;\n },\n\n closeEl: true,\n captionEl: true,\n fullscreenEl: true,\n zoomEl: true,\n shareEl: true,\n counterEl: true,\n arrowEl: true,\n preloaderEl: false,\n\n tapToClose: false,\n tapToToggleControls: true,\n\n clickToCloseNonZoomable: true,\n\n shareButtons: [\n {id: 'facebook', label: 'Share on Facebook', url: 'https://www.facebook.com/sharer/sharer.php?u={{url}}'},\n {id: 'twitter', label: 'Tweet', url: 'https://twitter.com/intent/tweet?text={{text}}&url={{url}}'},\n {\n id: 'pinterest', label: 'Pin it', url: 'http://www.pinterest.com/pin/create/button/' +\n '?url={{url}}&media={{image_url}}&description={{text}}'\n },\n {id: 'download', label: 'Download image', url: '{{raw_image_url}}', download: true}\n ],\n getImageURLForShare: function(/* shareButtonData */){\n return pswp.currItem.src || '';\n },\n getPageURLForShare: function(/* shareButtonData */){\n return window.location.href;\n },\n getTextForShare: function(/* shareButtonData */){\n return pswp.currItem.title || '';\n },\n\n indexIndicatorSep: ' / ',\n fitControlsWidth: 1200\n\n },\n _blockControlsTap,\n _blockControlsTapTimeout;\n\n var _onControlsTap = function(e){\n if(_blockControlsTap) {\n return true;\n }\n\n e = e || window.event;\n\n if(_options.timeToIdle && _options.mouseUsed && !_isIdle) {\n // reset idle timer\n _onIdleMouseMove();\n }\n\n var target = e.target || e.srcElement,\n uiElement,\n clickedClass = target.getAttribute('class') || '',\n found;\n\n for(var i = 0; i < _uiElements.length; i++) {\n uiElement = _uiElements[i];\n if(uiElement.onTap && clickedClass.indexOf('pswp__' + uiElement.name) > -1) {\n uiElement.onTap();\n found = true;\n\n }\n }\n\n if(found) {\n if(e.stopPropagation) {\n e.stopPropagation();\n }\n _blockControlsTap = true;\n\n // Some versions of Android don't prevent ghost click event\n // when preventDefault() was called on touchstart and/or touchend.\n //\n // This happens on v4.3, 4.2, 4.1,\n // older versions strangely work correctly,\n // but just in case we add delay on all of them)\n var tapDelay = framework.features.isOldAndroid ? 600 : 30;\n _blockControlsTapTimeout = setTimeout(function(){\n _blockControlsTap = false;\n }, tapDelay);\n }\n\n },\n _fitControlsInViewport = function(){\n return !pswp.likelyTouchDevice || _options.mouseUsed || screen.width > _options.fitControlsWidth;\n },\n _togglePswpClass = function(el, cName, add){\n framework[(add ? 'add' : 'remove') + 'Class'](el, 'pswp__' + cName);\n },\n\n // add class when there is just one item in the gallery\n // (by default it hides left/right arrows and 1ofX counter)\n _countNumItems = function(){\n var hasOneSlide = (_options.getNumItemsFn() === 1);\n\n if(hasOneSlide !== _galleryHasOneSlide) {\n _togglePswpClass(_controls, 'ui--one-slide', hasOneSlide);\n _galleryHasOneSlide = hasOneSlide;\n }\n },\n _toggleShareModalClass = function(){\n _togglePswpClass(_shareModal, 'share-modal--hidden', _shareModalHidden);\n },\n _toggleShareModal = function(){\n\n _shareModalHidden = !_shareModalHidden;\n\n if(!_shareModalHidden) {\n _toggleShareModalClass();\n setTimeout(function(){\n if(!_shareModalHidden) {\n framework.addClass(_shareModal, 'pswp__share-modal--fade-in');\n }\n }, 30);\n } else {\n framework.removeClass(_shareModal, 'pswp__share-modal--fade-in');\n setTimeout(function(){\n if(_shareModalHidden) {\n _toggleShareModalClass();\n }\n }, 300);\n }\n\n if(!_shareModalHidden) {\n _updateShareURLs();\n }\n return false;\n },\n\n _openWindowPopup = function(e){\n e = e || window.event;\n var target = e.target || e.srcElement;\n\n pswp.shout('shareLinkClick', e, target);\n\n if(!target.href) {\n return false;\n }\n\n if(target.hasAttribute('download')) {\n return true;\n }\n\n window.open(target.href, 'pswp_share', 'scrollbars=yes,resizable=yes,toolbar=no,' +\n 'location=yes,width=550,height=420,top=100,left=' +\n (window.screen ? Math.round(screen.width / 2 - 275) : 100));\n\n if(!_shareModalHidden) {\n _toggleShareModal();\n }\n\n return false;\n },\n _updateShareURLs = function(){\n var shareButtonOut = '',\n shareButtonData,\n shareURL,\n image_url,\n page_url,\n share_text;\n\n for(var i = 0; i < _options.shareButtons.length; i++) {\n shareButtonData = _options.shareButtons[i];\n\n image_url = _options.getImageURLForShare(shareButtonData);\n page_url = _options.getPageURLForShare(shareButtonData);\n share_text = _options.getTextForShare(shareButtonData);\n\n shareURL = shareButtonData.url.replace('{{url}}', encodeURIComponent(page_url))\n .replace('{{image_url}}', encodeURIComponent(image_url))\n .replace('{{raw_image_url}}', image_url)\n .replace('{{text}}', encodeURIComponent(share_text));\n\n shareButtonOut += '' +\n shareButtonData.label + '';\n\n if(_options.parseShareButtonOut) {\n shareButtonOut = _options.parseShareButtonOut(shareButtonData, shareButtonOut);\n }\n }\n _shareModal.children[0].innerHTML = shareButtonOut;\n _shareModal.children[0].onclick = _openWindowPopup;\n\n },\n _hasCloseClass = function(target){\n for(var i = 0; i < _options.closeElClasses.length; i++) {\n if(framework.hasClass(target, 'pswp__' + _options.closeElClasses[i])) {\n return true;\n }\n }\n },\n _idleInterval,\n _idleTimer,\n _idleIncrement = 0,\n _onIdleMouseMove = function(){\n clearTimeout(_idleTimer);\n _idleIncrement = 0;\n if(_isIdle) {\n ui.setIdle(false);\n }\n },\n _onMouseLeaveWindow = function(e){\n e = e ? e : window.event;\n var from = e.relatedTarget || e.toElement;\n if(!from || from.nodeName === 'HTML') {\n clearTimeout(_idleTimer);\n _idleTimer = setTimeout(function(){\n ui.setIdle(true);\n }, _options.timeToIdleOutside);\n }\n },\n _setupFullscreenAPI = function(){\n if(_options.fullscreenEl && !framework.features.isOldAndroid) {\n if(!_fullscrenAPI) {\n _fullscrenAPI = ui.getFullscreenAPI();\n }\n if(_fullscrenAPI) {\n framework.bind(document, _fullscrenAPI.eventK, ui.updateFullscreen);\n ui.updateFullscreen();\n framework.addClass(pswp.template, 'pswp--supports-fs');\n } else {\n framework.removeClass(pswp.template, 'pswp--supports-fs');\n }\n }\n },\n _setupLoadingIndicator = function(){\n // Setup loading indicator\n if(_options.preloaderEl) {\n\n _toggleLoadingIndicator(true);\n\n _listen('beforeChange', function(){\n\n clearTimeout(_loadingIndicatorTimeout);\n\n // display loading indicator with delay\n _loadingIndicatorTimeout = setTimeout(function(){\n\n if(pswp.currItem && pswp.currItem.loading) {\n\n if(!pswp.allowProgressiveImg() || (pswp.currItem.img && !pswp.currItem.img.naturalWidth)) {\n // show preloader if progressive loading is not enabled,\n // or image width is not defined yet (because of slow connection)\n _toggleLoadingIndicator(false);\n // items-controller.js function allowProgressiveImg\n }\n\n } else {\n _toggleLoadingIndicator(true); // hide preloader\n }\n\n }, _options.loadingIndicatorDelay);\n\n });\n _listen('imageLoadComplete', function(index, item){\n if(pswp.currItem === item) {\n _toggleLoadingIndicator(true);\n }\n });\n\n }\n },\n _toggleLoadingIndicator = function(hide){\n if(_loadingIndicatorHidden !== hide) {\n _togglePswpClass(_loadingIndicator, 'preloader--active', !hide);\n _loadingIndicatorHidden = hide;\n }\n },\n _applyNavBarGaps = function(item){\n var gap = item.vGap;\n\n if(_fitControlsInViewport()) {\n\n var bars = _options.barsSize;\n if(_options.captionEl && bars.bottom === 'auto') {\n if(!_fakeCaptionContainer) {\n _fakeCaptionContainer = framework.createEl('pswp__caption pswp__caption--fake');\n _fakeCaptionContainer.appendChild(framework.createEl('pswp__caption__center'));\n _controls.insertBefore(_fakeCaptionContainer, _captionContainer);\n framework.addClass(_controls, 'pswp__ui--fit');\n }\n if(_options.addCaptionHTMLFn(item, _fakeCaptionContainer, true)) {\n\n var captionSize = _fakeCaptionContainer.clientHeight;\n gap.bottom = parseInt(captionSize, 10) || 44;\n } else {\n gap.bottom = bars.top; // if no caption, set size of bottom gap to size of top\n }\n } else {\n gap.bottom = bars.bottom === 'auto' ? 0 : bars.bottom;\n }\n\n // height of top bar is static, no need to calculate it\n gap.top = bars.top;\n } else {\n gap.top = gap.bottom = 0;\n }\n },\n _setupIdle = function(){\n // Hide controls when mouse is used\n if(_options.timeToIdle) {\n _listen('mouseUsed', function(){\n\n framework.bind(document, 'mousemove', _onIdleMouseMove);\n framework.bind(document, 'mouseout', _onMouseLeaveWindow);\n\n _idleInterval = setInterval(function(){\n _idleIncrement++;\n if(_idleIncrement === 2) {\n ui.setIdle(true);\n }\n }, _options.timeToIdle / 2);\n });\n }\n },\n _setupHidingControlsDuringGestures = function(){\n\n // Hide controls on vertical drag\n _listen('onVerticalDrag', function(now){\n if(_controlsVisible && now < 0.95) {\n ui.hideControls();\n } else if(!_controlsVisible && now >= 0.95) {\n ui.showControls();\n }\n });\n\n // Hide controls when pinching to close\n var pinchControlsHidden;\n _listen('onPinchClose', function(now){\n if(_controlsVisible && now < 0.9) {\n ui.hideControls();\n pinchControlsHidden = true;\n } else if(pinchControlsHidden && !_controlsVisible && now > 0.9) {\n ui.showControls();\n }\n });\n\n _listen('zoomGestureEnded', function(){\n pinchControlsHidden = false;\n if(pinchControlsHidden && !_controlsVisible) {\n ui.showControls();\n }\n });\n\n };\n\n var _uiElements = [\n {\n name: 'caption',\n option: 'captionEl',\n onInit: function(el){\n _captionContainer = el;\n }\n },\n {\n name: 'share-modal',\n option: 'shareEl',\n onInit: function(el){\n _shareModal = el;\n },\n onTap: function(){\n _toggleShareModal();\n }\n },\n {\n name: 'button--share',\n option: 'shareEl',\n onInit: function(el){\n _shareButton = el;\n },\n onTap: function(){\n _toggleShareModal();\n }\n },\n // {\n // \tname: 'button--zoom',\n // \toption: 'zoomEl',\n // \tonTap: pswp.toggleDesktopZoom\n // },\n {\n name: 'counter',\n option: 'counterEl',\n onInit: function(el){\n _indexIndicator = el;\n }\n },\n {\n name: 'button--close',\n option: 'closeEl',\n onTap: pswp.close\n },\n {\n name: 'button--arrow--left',\n option: 'arrowEl',\n onTap: pswp.prev\n },\n {\n name: 'button--arrow--right',\n option: 'arrowEl',\n onTap: pswp.next\n },\n {\n name: 'button--fs',\n option: 'fullscreenEl',\n onTap: function(){\n if(_fullscrenAPI.isFullscreen()) {\n _fullscrenAPI.exit();\n } else {\n _fullscrenAPI.enter();\n }\n }\n },\n {\n name: 'preloader',\n option: 'preloaderEl',\n onInit: function(el){\n _loadingIndicator = el;\n }\n }\n\n ];\n\n var _setupUIElements = function(){\n var item,\n classAttr,\n uiElement;\n\n var loopThroughChildElements = function(sChildren){\n if(!sChildren) {\n return;\n }\n\n var l = sChildren.length;\n for(var i = 0; i < l; i++) {\n item = sChildren[i];\n classAttr = item.className;\n\n for(var a = 0; a < _uiElements.length; a++) {\n uiElement = _uiElements[a];\n\n if(classAttr.indexOf('pswp__' + uiElement.name) > -1) {\n\n if(_options[uiElement.option]) { // if element is not disabled from options\n\n framework.removeClass(item, 'pswp__element--disabled');\n if(uiElement.onInit) {\n uiElement.onInit(item);\n }\n\n //item.style.display = 'block';\n } else {\n framework.addClass(item, 'pswp__element--disabled');\n //item.style.display = 'none';\n }\n }\n }\n }\n };\n loopThroughChildElements(_controls.children);\n\n var topBar = framework.getChildByClass(_controls, 'pswp__top-bar');\n if(topBar) {\n loopThroughChildElements(topBar.children);\n }\n };\n\n ui.init = function(){\n\n // extend options\n framework.extend(pswp.options, _defaultUIOptions, true);\n\n // create local link for fast access\n _options = pswp.options;\n\n // find pswp__ui element\n _controls = framework.getChildByClass(pswp.scrollWrap, 'pswp__ui');\n\n // create local link\n _listen = pswp.listen;\n\n _setupHidingControlsDuringGestures();\n\n // update controls when slides change\n _listen('beforeChange', ui.update);\n\n // toggle zoom on double-tap\n _listen('doubleTap', function(point){\n // var initialZoomLevel = pswp.currItem.initialZoomLevel;\n // if(pswp.getZoomLevel() !== initialZoomLevel) {\n // pswp.zoomTo(initialZoomLevel, point, 333);\n // } else {\n // pswp.zoomTo(_options.getDoubleTapZoom(false, pswp.currItem), point, 333);\n // }\n });\n\n // Allow text selection in caption\n _listen('preventDragEvent', function(e, isDown, preventObj){\n var t = e.target || e.srcElement;\n if(\n t &&\n t.getAttribute('class') && e.type.indexOf('mouse') > -1 &&\n (t.getAttribute('class').indexOf('__caption') > 0 || (/(SMALL|STRONG|EM)/i).test(t.tagName))\n ) {\n preventObj.prevent = false;\n }\n });\n\n // bind events for UI\n _listen('bindEvents', function(){\n framework.bind(_controls, 'pswpTap click', _onControlsTap);\n framework.bind(pswp.scrollWrap, 'pswpTap', ui.onGlobalTap);\n\n if(!pswp.likelyTouchDevice) {\n framework.bind(pswp.scrollWrap, 'mouseover', ui.onMouseOver);\n }\n });\n\n // unbind events for UI\n _listen('unbindEvents', function(){\n if(!_shareModalHidden) {\n _toggleShareModal();\n }\n\n if(_idleInterval) {\n clearInterval(_idleInterval);\n }\n framework.unbind(document, 'mouseout', _onMouseLeaveWindow);\n framework.unbind(document, 'mousemove', _onIdleMouseMove);\n framework.unbind(_controls, 'pswpTap click', _onControlsTap);\n framework.unbind(pswp.scrollWrap, 'pswpTap', ui.onGlobalTap);\n framework.unbind(pswp.scrollWrap, 'mouseover', ui.onMouseOver);\n\n if(_fullscrenAPI) {\n framework.unbind(document, _fullscrenAPI.eventK, ui.updateFullscreen);\n if(_fullscrenAPI.isFullscreen()) {\n _options.hideAnimationDuration = 0;\n _fullscrenAPI.exit();\n }\n _fullscrenAPI = null;\n }\n });\n\n // clean up things when gallery is destroyed\n _listen('destroy', function(){\n if(_options.captionEl) {\n if(_fakeCaptionContainer) {\n _controls.removeChild(_fakeCaptionContainer);\n }\n framework.removeClass(_captionContainer, 'pswp__caption--empty');\n }\n\n if(_shareModal) {\n _shareModal.children[0].onclick = null;\n }\n framework.removeClass(_controls, 'pswp__ui--over-close');\n framework.addClass(_controls, 'pswp__ui--hidden');\n ui.setIdle(false);\n });\n\n if(!_options.showAnimationDuration) {\n framework.removeClass(_controls, 'pswp__ui--hidden');\n }\n _listen('initialZoomIn', function(){\n if(_options.showAnimationDuration) {\n framework.removeClass(_controls, 'pswp__ui--hidden');\n }\n });\n _listen('initialZoomOut', function(){\n framework.addClass(_controls, 'pswp__ui--hidden');\n });\n\n _listen('parseVerticalMargin', _applyNavBarGaps);\n\n _setupUIElements();\n\n if(_options.shareEl && _shareButton && _shareModal) {\n _shareModalHidden = true;\n }\n\n _countNumItems();\n\n _setupIdle();\n\n _setupFullscreenAPI();\n\n _setupLoadingIndicator();\n };\n\n ui.setIdle = function(isIdle){\n _isIdle = isIdle;\n _togglePswpClass(_controls, 'ui--idle', isIdle);\n };\n\n ui.update = function(){\n // Don't update UI if it's hidden\n if(_controlsVisible && pswp.currItem) {\n\n ui.updateIndexIndicator();\n\n if(_options.captionEl) {\n _options.addCaptionHTMLFn(pswp.currItem, _captionContainer);\n\n _togglePswpClass(_captionContainer, 'caption--empty', !pswp.currItem.title);\n }\n\n _overlayUIUpdated = true;\n\n } else {\n _overlayUIUpdated = false;\n }\n\n if(!_shareModalHidden) {\n _toggleShareModal();\n }\n\n _countNumItems();\n };\n\n ui.updateFullscreen = function(e){\n\n if(e) {\n // some browsers change window scroll position during the fullscreen\n // so PhotoSwipe updates it just in case\n setTimeout(function(){\n pswp.setScrollOffset(0, framework.getScrollY());\n }, 50);\n }\n\n // toogle pswp--fs class on root element\n framework[(_fullscrenAPI.isFullscreen() ? 'add' : 'remove') + 'Class'](pswp.template, 'pswp--fs');\n };\n\n ui.updateIndexIndicator = function(){\n if(_options.counterEl) {\n _indexIndicator.innerHTML = (pswp.getCurrentIndex() + 1) +\n _options.indexIndicatorSep +\n _options.getNumItemsFn();\n }\n };\n\n ui.onGlobalTap = function(e){\n e = e || window.event;\n var target = e.target || e.srcElement;\n\n if(_blockControlsTap) {\n return;\n }\n\n if(e.detail && e.detail.pointerType === 'mouse') {\n\n // close gallery if clicked outside of the image\n if(_hasCloseClass(target)) {\n // pswp.close();\n return;\n }\n\n if(framework.hasClass(target, 'pswp__img')) {\n if(pswp.getZoomLevel() === 1 && pswp.getZoomLevel() <= pswp.currItem.fitRatio) {\n if(_options.clickToCloseNonZoomable) {\n // pswp.close();\n }\n } else {\n // pswp.toggleDesktopZoom(e.detail.releasePoint);\n }\n }\n\n } else {\n\n // tap anywhere (except buttons) to toggle visibility of controls\n if(_options.tapToToggleControls) {\n if(_controlsVisible) {\n ui.hideControls();\n } else {\n ui.showControls();\n }\n }\n\n // tap to close gallery\n if(_options.tapToClose && (framework.hasClass(target, 'pswp__img') || _hasCloseClass(target))) {\n pswp.close();\n return;\n }\n\n }\n };\n ui.onMouseOver = function(e){\n e = e || window.event;\n var target = e.target || e.srcElement;\n\n // add class when mouse is over an element that should close the gallery\n _togglePswpClass(_controls, 'ui--over-close', _hasCloseClass(target));\n };\n\n ui.hideControls = function(){\n framework.addClass(_controls, 'pswp__ui--hidden');\n framework.addClass(pswp.template, 'pswp__ui--out');\n _controlsVisible = false;\n };\n\n ui.showControls = function(){\n _controlsVisible = true;\n if(!_overlayUIUpdated) {\n ui.update();\n }\n framework.removeClass(_controls, 'pswp__ui--hidden');\n framework.removeClass(pswp.template, 'pswp__ui--out');\n };\n\n ui.supportsFullscreen = function(){\n var d = document;\n return !!(d.exitFullscreen || d.mozCancelFullScreen || d.webkitExitFullscreen || d.msExitFullscreen);\n };\n\n ui.getFullscreenAPI = function(){\n var dE = document.documentElement,\n api,\n tF = 'fullscreenchange';\n\n if(dE.requestFullscreen) {\n api = {\n enterK: 'requestFullscreen',\n exitK: 'exitFullscreen',\n elementK: 'fullscreenElement',\n eventK: tF\n };\n\n } else if(dE.mozRequestFullScreen) {\n api = {\n enterK: 'mozRequestFullScreen',\n exitK: 'mozCancelFullScreen',\n elementK: 'mozFullScreenElement',\n eventK: 'moz' + tF\n };\n\n } else if(dE.webkitRequestFullscreen) {\n api = {\n enterK: 'webkitRequestFullscreen',\n exitK: 'webkitExitFullscreen',\n elementK: 'webkitFullscreenElement',\n eventK: 'webkit' + tF\n };\n\n } else if(dE.msRequestFullscreen) {\n api = {\n enterK: 'msRequestFullscreen',\n exitK: 'msExitFullscreen',\n elementK: 'msFullscreenElement',\n eventK: 'MSFullscreenChange'\n };\n }\n\n if(api) {\n api.enter = function(){\n // disable close-on-scroll in fullscreen\n _initalCloseOnScrollValue = _options.closeOnScroll;\n _options.closeOnScroll = false;\n\n if(this.enterK === 'webkitRequestFullscreen') {\n pswp.template[this.enterK](Element.ALLOW_KEYBOARD_INPUT);\n } else {\n return pswp.template[this.enterK]();\n }\n };\n api.exit = function(){\n _options.closeOnScroll = _initalCloseOnScrollValue;\n\n return document[this.exitK]();\n\n };\n api.isFullscreen = function(){\n return document[this.elementK];\n };\n }\n\n return api;\n };\n\n};\n\nexport default PhotoSwipeUI_Default;","const viewerTemplateScroll = (list) =>{\n let listView = ``;\n\n for(let i = 0, max = list.length; i < max; i++) {\n listView += `
`;\n }\n\n return `${listView}`;\n};\n\nexport default viewerTemplateScroll;","/*\n _ _ _ _\n ___| (_) ___| | __ (_)___\n/ __| | |/ __| |/ / | / __|\n\\__ \\ | | (__| < _ | \\__ \\\n|___/_|_|\\___|_|\\_(_)/ |___/\n |__/\n\n Version: 1.6.0\n Author: Ken Wheeler\n Website: http://kenwheeler.github.io\n Docs: http://kenwheeler.github.io/slick\n Repo: http://github.com/kenwheeler/slick\n Issues: http://github.com/kenwheeler/slick/issues\n\n */\n/* global window, document, define, jQuery, setInterval, clearInterval */\n;(function(factory) {\n 'use strict';\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (typeof exports !== 'undefined') {\n module.exports = factory(require('jquery'));\n } else {\n factory(jQuery);\n }\n\n}(function($) {\n 'use strict';\n var Slick = window.Slick || {};\n\n Slick = (function() {\n\n var instanceUid = 0;\n\n function Slick(element, settings) {\n\n var _ = this, dataSettings;\n\n _.defaults = {\n accessibility: true,\n adaptiveHeight: false,\n appendArrows: $(element),\n appendDots: $(element),\n arrows: true,\n asNavFor: null,\n prevArrow: '',\n nextArrow: '',\n autoplay: false,\n autoplaySpeed: 3000,\n centerMode: false,\n centerPadding: '50px',\n cssEase: 'ease',\n customPaging: function(slider, i) {\n return $('';\n button += '';\n this.wrapper.find('> .indicator').prepend(button);\n\n this.wrapper.find('.prev').on('click', function(){\n scope._flick('left');\n });\n\n this.wrapper.find('.next').on('click', function(){\n scope._flick('right');\n });\n }\n },\n\n _autoPlay: function(speed){\n var scope = this,\n play;\n\n function interval(){\n scope._flick('right');\n }\n\n play = setInterval(interval, speed);\n\n if(this.detect.isMobile) {\n this.wrapper.on('touchstart', function(){\n clearInterval(play);\n });\n\n this.wrapper.on('touchend', function(){\n play = setInterval(interval, speed);\n });\n } else {\n this.wrapper.hover(function(){\n clearInterval(play);\n }, function(){\n play = setInterval(interval, speed);\n });\n }\n },\n\n _initNavi: function(){\n var scope = this;\n var wrapper = $(this.options.navi.wrapper),\n scroller = wrapper.children().eq(0),\n data = wrapper.data()[pluginName];\n\n data.detect.naviTarget = this;\n\n scroller.find(data.options.item).find('a').on('click', function(e){\n e.preventDefault();\n var buttonID = $(this)[0].hash.split(\"#\")[1];\n var index = 0;\n\n for(var i = 0; i < scope.detect.flickList.length; i++) {\n if(scope.detect.flickList[i][0].id == buttonID) {\n index = i;\n }\n }\n scope.detect.flickCount = index;\n scope._appendFlickData.call(scope, scope.detect.flickCount);\n $(this).parent().addClass('selected').add().siblings().removeClass('selected');\n data._startPosition();\n scope._indicator(scope.detect.flickCount);\n });\n },\n\n _naviMove: function(num){\n num = num || 0;\n\n var wrapper = $(this.options.navi.wrapper),\n scroller = wrapper.children().eq(0),\n target = wrapper.find(this.options.navi.onTarget),\n x,\n scope = this,\n time = 300,\n data = wrapper.data()[pluginName];\n\n $(target.selector + '.selected').removeClass('selected');\n target.eq(num).addClass('selected');\n\n x = this._utils._scrollMoveValue(data.detect.itemRightPositon[num - 2], data.detect.maxScrollX);\n\n if(!data.detect.hasHorizontalScroll) {\n return;\n }\n\n this._transitionTimingFunction(scroller);\n this._transitionTime(scroller, time);\n this._translate(scroller, x);\n\n function func(){\n scope._transitionTime(scroller);\n }\n\n setTimeout(func, 300);\n },\n\n _indicator: function(num){\n\n var indicator = this.wrapper.find('>.indicator');\n\n if(this.options.indicatorType == 'number') {\n indicator.find('.cur').html(this.detect.flickCount + 1);\n return;\n }\n\n indicator.find('ul li.on').removeClass('on');\n indicator.find('ul li').eq(num).addClass('on');\n },\n\n _scrollTo: function(target, x, time, func){\n func = func || 'cubic-bezier(0.1, 0.54, 0.4, 1)';\n this.detect.isInTransition = time > 0;\n this._transitionTimingFunction(target, func);\n this._transitionTime(target, time);\n this._translate(target, x);\n },\n\n _transitionTime: function(target, time){\n time = time || 0;\n target.css(this._utils._style.transitionDuration, time + \"ms\");\n },\n\n _transitionTimingFunction: function(target, easing){\n target.css(this._utils._style.transitionTimingFunction, easing);\n },\n\n _translate: function(target, x){\n target.css(this._utils._style.transform, 'translate3d(' + x + 'px, 0, 0)');\n this.detect.x = x;\n },\n\n _transitionEnd: function(){\n var moveTarget = (this.options.ui == \"flick\" || this.options.ui == \"card\") ? this.scroller.find('>' + this.options.flickPanelName) : this.scroller;\n this._transitionTime(moveTarget);\n this.detect.isInTransition = false;\n },\n\n _getComputedPosition: function(target){\n var matrix = window.getComputedStyle(target, null),\n x,\n y;\n matrix = matrix[this._utils._style.transform].split(')')[0].split(', ');\n x = +(matrix[12] || matrix[4]);\n y = +(matrix[13] || matrix[5]);\n return {\n x: x,\n y: y\n };\n },\n\n _resize: function(){\n this._refresh();\n\n if(this.options.ui == \"flick\" || this.options.ui == \"card\") {\n this._setFlickPosition(this.detect.flickCount);\n }\n\n if(!this.detect.hasHorizontalScroll) {\n this._scrollTo(this.scroller, 0, 0);\n } else {\n // if(this.options.navi) {\n // this._naviMove(this.detect.flickCount);\n // return;\n // }\n // this._startPosition();\n }\n }\n };\n\n $.fn[pluginName] = function(param){\n return this.each(function(){\n var $this = $(this);\n var data = $this.data(pluginName);\n if(!data) {\n $(this).data(pluginName, new Plugin($this, param));\n }\n });\n };\n\n $.fn[pluginName].constructor = Plugin;\n}(window.jQuery));","import PhotoSwipe from './photoswipe';\nimport PhotoSwipeUI_Default from './photoswipe-ui-default';\nimport viewerTemplate from './viewer-template';\nimport viewerTemplateScroll from './viewer-template-scroll';\nimport './slick.js';\nimport './horizontalBox.js';\n\nclass Viewer {\n constructor(options) {\n this.photoswipe = null;\n this.slide = null;\n this.scroller = false;\n this.config = options;\n this.image = this.config.image;\n this.imageLength = this.image.length;\n this.imageLoaded = 0;\n this.nowIndex = 0;\n this.DOM_SLIDE = null;\n this.DOM_SLIDEBUTTON = null;\n this.scrollWidth = 0;\n\n this.items = [];\n\n window.galleryNum = window.galleryNum ? window.galleryNum + 1 : 1;\n\n this.uid = window.galleryNum;\n this.setTemplate();\n this.loadImage(0);\n\n }\n\n loadImage(loadIndex, updateImage) {\n const img = new Image();\n\n let imageLength = updateImage ? updateImage.length : this.imageLength;\n\n img.src = updateImage ? updateImage[loadIndex].src : this.image[loadIndex].src;\n\n img.onload = () => {\n\n this.items.push({\n src: img.src,\n msrc: img.src,\n w: img.width,\n h: img.height,\n title: updateImage ? updateImage[loadIndex].title : this.image[loadIndex].title\n });\n\n this.imageLoaded = this.imageLoaded + 1;\n\n if (this.imageLoaded < imageLength) {\n this.loadImage(this.imageLoaded, updateImage);\n } else {\n\n if (updateImage) {\n this.image = updateImage;\n }\n\n this.setView(this.config, updateImage);\n this.setSlide(this.uid - 1, updateImage);\n }\n\n console.log(img.src);\n };\n\n img.onerror = () => {\n this.items.push({\n src: img.src,\n msrc: img.src,\n w: 40,\n h: 40,\n title: ''\n });\n\n this.imageLoaded = this.imageLoaded + 1;\n\n if (this.imageLoaded < imageLength) {\n this.loadImage(this.imageLoaded, updateImage);\n } else {\n\n if (updateImage) {\n this.image = updateImage;\n }\n\n this.setView(this.config, updateImage);\n this.setSlide(this.uid - 1, updateImage);\n }\n\n console.log('error', img.src);\n };\n }\n\n getDelegateTarget(eventTarget, findTarget) {\n let target = $(eventTarget);\n const checkName = (checkNode) => {\n if (!checkNode.is(findTarget)) {\n checkName(checkNode.parent());\n } else {\n target = checkNode;\n }\n };\n checkName(target);\n return target;\n }\n\n setTemplate(image = this.config.image) {\n $('body').append(viewerTemplate(image));\n }\n\n setView(config, update) {\n const thumbElements = $(config.btn);\n\n thumbElements.each(function(index) {\n $(this).data('imageIndex', $(this).attr('data-open-index') ? $(this).attr('data-open-Index') : index);\n });\n\n if (update) return;\n\n $(document).on(`click.viewer`, config.btn, (e) => {\n e.preventDefault();\n const target = this.getDelegateTarget(e.target, 'a');\n $(document).off('click.thumbnail');\n this.openViewer(target[0], target.data('imageIndex'), this.uid, update);\n\n $('body').addClass('viewer--opened');\n });\n }\n\n openViewer(thumbnail, index, galleryUid, update) {\n const pswpElement = $('.pswp')[galleryUid - 1];\n const config = {\n galleryUID: galleryUid,\n getThumbBoundsFn: function() {\n const pageYScroll = window.pageYOffset || document.documentElement.scrollTop;\n const rect = thumbnail.getBoundingClientRect();\n return {\n x: rect.left,\n y: rect.top + pageYScroll,\n w: rect.width\n };\n },\n maxSpreadZoom: 1,\n showHideOpacity: true,\n history: false,\n closeOnScroll: false,\n bgOpacity: 0.9,\n timeToIdle: false,\n clickToCloseNonZoomable: false,\n pinchToClose: false,\n index: +index\n };\n\n this.photoSwipe = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, this.items, config);\n\n this.photoSwipe.listen('destroy', () => {\n $(document).off('click.thumbnail');\n $(window).trigger('viewer.close');\n $('body').removeClass('viewer--opened');\n });\n\n this.photoSwipe.listen('afterInit', () => {\n this.DOM_SLIDEBUTTON.removeClass('pswp-navi__thumbnail-link_active');\n this.DOM_SLIDEBUTTON.eq(this.photoSwipe.getCurrentIndex()).addClass('pswp-navi__thumbnail-link_active');\n setTimeout(() => {\n $(window).width() < 641 && this.mobileSlidePosition();\n }, 600);\n });\n\n this.photoSwipe.listen('imagechangeendwithanimate', () => {\n this.DOM_SLIDEBUTTON.removeClass('pswp-navi__thumbnail-link_active');\n this.DOM_SLIDEBUTTON.eq(this.photoSwipe.getCurrentIndex()).addClass('pswp-navi__thumbnail-link_active');\n this.slide && this.DOM_SLICKSLIDE.slick('slickGoTo', this.photoSwipe.getCurrentIndex());\n this.nowIndex = this.photoSwipe.getCurrentIndex();\n if ($(window).width() > 640) return;\n this.mobileSlidePosition();\n });\n\n this.photoSwipe.listen('imagechangeend', () => {\n this.DOM_SLIDEBUTTON.removeClass('pswp-navi__thumbnail-link_active');\n this.DOM_SLIDEBUTTON.eq(this.photoSwipe.getCurrentIndex()).addClass('pswp-navi__thumbnail-link_active');\n this.slide && this.DOM_SLICKSLIDE.slick('slickGoTo', this.photoSwipe.getCurrentIndex());\n this.nowIndex = this.photoSwipe.getCurrentIndex();\n });\n\n this.nowIndex = index;\n\n this.slide && this.DOM_SLICKSLIDE.slick('slickGoTo', index);\n\n this.photoSwipe.init();\n\n $(document).on(`click.thumbnail`, '.pswp-navi__thumbnail-link', (e) => {\n e.preventDefault();\n const target = this.getDelegateTarget(e.target, 'a');\n this.photoSwipe.goTo(target.data('imageIndex'), false);\n });\n\n $(window).trigger('viewer.open');\n }\n\n setSlide(index, update) {\n const list = $('.pswp-navi__list');\n this.DOM_SLIDE = list[index];\n this.DOM_SLICKSLIDE = $(this.DOM_SLIDE).find('.scroller');\n\n if (update) {\n this.slide && this.DOM_SLICKSLIDE.slick('unslick');\n this.slide = false;\n this.DOM_SLICKSLIDE.empty();\n this.DOM_SLICKSLIDE.append(viewerTemplateScroll(this.image));\n this.DOM_SLIDE = list[index];\n }\n\n this.DOM_SLIDEBUTTON = $(this.DOM_SLIDE).find('.pswp-navi__thumbnail-link');\n\n this.scrollWidth = this.DOM_SLIDEBUTTON.last().outerWidth(true) * this.DOM_SLIDEBUTTON.length;\n\n this.DOM_SLIDEBUTTON.each(function(index) {\n $(this).data('imageIndex', index);\n });\n\n if ($(window).width() > 640) {\n if (this.scrollWidth > $('.pswp-navi__list').width()) {\n this.slide = this.DOM_SLICKSLIDE.slick({\n infinite: false,\n slidesToShow: 10,\n slidesToScroll: 10,\n variableWidth: true,\n responsive: [\n {\n breakpoint: 1000,\n settings: {\n slidesToShow: 8,\n slidesToScroll: 8\n }\n },\n {\n breakpoint: 810,\n settings: {\n slidesToShow: 6,\n slidesToScroll: 6\n }\n }\n ]\n });\n }\n } else {\n if ($(window).width() < 641) {\n $(this.DOM_SLIDE).horizontalBox({\n 'snap': true,\n 'item': '.pswp-navi__thumbnail'\n });\n }\n }\n\n if (update) return;\n\n $(this.DOM_SLIDE).on('breakpoint', () => {\n setTimeout(() => {\n this.DOM_SLICKSLIDE.slick('slickGoTo', this.nowIndex);\n }, 600);\n });\n\n $(window).on(`resize.viewer`, () => {\n this.resize && clearTimeout(this.resize);\n\n this.resize = setTimeout(() => {\n this.scrollWidth = this.DOM_SLIDEBUTTON.last().outerWidth(true) * this.DOM_SLIDEBUTTON.length;\n this.refreshSlide();\n if ($(window).width() > 640) return;\n this.mobileSlidePosition();\n }, 250);\n });\n }\n\n refreshSlide() {\n if ($(window).width() > 640) {\n if (this.scrollWidth > $('.pswp-navi__list').width()) {\n if (!this.slide) {\n this.slide && this.DOM_SLICKSLIDE.slick('unslick');\n\n this.slide = this.DOM_SLICKSLIDE.slick({\n infinite: false,\n slidesToShow: 10,\n slidesToScroll: 10,\n variableWidth: true,\n responsive: [\n {\n breakpoint: 1000,\n settings: {\n slidesToShow: 8,\n slidesToScroll: 8\n }\n },\n {\n breakpoint: 810,\n settings: {\n slidesToShow: 6,\n slidesToScroll: 6\n }\n }\n ]\n });\n\n $(this.DOM_SLIDE).trigger('breakpoint');\n }\n }\n } else {\n if ($(window).width() < 641) {\n if (this.scroller) {\n return;\n }\n\n this.slide && this.DOM_SLICKSLIDE.slick('unslick');\n this.slide = false;\n\n $(this.DOM_SLIDE).horizontalBox({\n 'snap': true,\n 'item': '.pswp-navi__thumbnail'\n });\n }\n }\n }\n\n mobileSlidePosition() {\n if (!$(this.DOM_SLIDE).data('horizontalBox')) return;\n\n $(this.DOM_SLIDE).data('horizontalBox')._resize();\n\n if (-65 * this.nowIndex < $(this.DOM_SLIDE).data('horizontalBox').detect.maxScrollX) {\n $(this.DOM_SLIDE).data('horizontalBox')._scrollTo($(this.DOM_SLICKSLIDE), $(this.DOM_SLIDE).data('horizontalBox').detect.maxScrollX, 400);\n $(this.DOM_SLIDE).data('horizontalBox')._resetPosition(400);\n } else {\n $(this.DOM_SLIDE).data('horizontalBox')._scrollTo($(this.DOM_SLICKSLIDE), -65 * this.nowIndex, 400);\n $(this.DOM_SLIDE).data('horizontalBox')._resetPosition(400);\n }\n }\n\n updateData(image) {\n this.imageLoaded = 0;\n this.items = [];\n this.loadImage(0, image);\n }\n}\n\nexport default Viewer;\n","import viewerTemplateScroll from './viewer-template-scroll';\n\nconst viewerTemplate = (list) =>{\n return `
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n \n \n \n 다운로드\n
\n
\n
\n
\n
\n
\n
\n
\n
\n ${viewerTemplateScroll(list)}\n
\n
\n
\n `;\n};\n\nexport default viewerTemplate;"],"names":["PhotoSwipe","template","UiClass","items","options","framework","target","type","listener","unbind","methodName","split","i","length","obj","Array","classes","tag","el","document","createElement","className","yOffset","window","pageYOffset","undefined","documentElement","scrollTop","bind","reg","RegExp","replace","hasClass","test","parentEl","childClassName","node","firstChild","nextSibling","array","value","key","o1","o2","preventOverwrite","prop","hasOwnProperty","k","Math","sin","PI","cos","features","helperStyle","createEl","style","vendor","oldIE","all","addEventListener","touch","requestAnimationFrame","raf","caf","cancelAnimationFrame","pointerEvent","navigator","pointerEnabled","msPointerEnabled","ua","userAgent","platform","v","appVersion","match","parseInt","isOldIOSPhone","androidversion","parseFloat","isOldAndroid","androidVersion","isMobileOpera","styleCheckItem","styleName","styleChecks","vendors","a","charAt","toUpperCase","slice","toLowerCase","lastTime","fn","currTime","Date","getTime","timeToCall","max","id","setTimeout","svg","createElementNS","createSVGRect","detectFeatures","evName","_handleEv","handleEvent","call","self","this","_options","tagName","isMouseClick","item","initialZoomLevel","name","module","extend","publicMethods","push","_getLoopedId","index","numSlides","_getNumItems","_listen","_listeners","_shout","listeners","args","prototype","arguments","shift","apply","_getCurrentTime","_applyBgOpacity","opacity","bg","bgOpacity","_applyZoomTransform","styleObj","x","y","zoom","_renderMaxResolution","currItem","fitRatio","_transformKey","_translatePrefix","_translateSufix","_moveMainScroll","dragging","loop","newSlideIndexOffset","_currentItemIndex","_slideSize","_currPositionIndex","delta","round","_mainScrollPos","mainScrollEndFriction","_containerStyle","_calculatePanOffset","axis","zoomLevel","m","_midZoomPoint","_offset","_startPanOffset","_currPanDist","_startZoomLevel","_equalizePoints","p1","p2","_roundPoint","p","_onFirstMouseMove","_mouseMoveTimeout","addClass","mouseUsed","_calculatePanBounds","update","bounds","_calculateItemSize","_viewportSize","_getMinZoomLevel","_getMaxZoomLevel","w","maxSpreadZoom","destPanBounds","destPanOffset","destZoomLevel","initialPosition","min","_onKeyDown","e","keydownAction","escKey","keyCode","arrowKeys","ctrlKey","altKey","shiftKey","metaKey","preventDefault","returnValue","_onGlobalClick","_moved","_zoomStarted","_mainScrollAnimating","_verticalDragInitiated","stopPropagation","_updatePageScrollOffset","setScrollOffset","getScrollY","_stopAnimation","_animations","_registerStartAnimation","_stopAllAnimations","_animateProp","b","endProp","d","easingFn","onUpdate","onComplete","t","startAnimTime","animloop","_requestAF","_preventDefaultEventBehaviour","isDown","prevent","_closestElement","getAttribute","indexOf","parentNode","isClickableElement","_preventObj","_convertTouchToPoint","pageX","pageY","identifier","_calculateVerticalDragOpacityRatio","_panOffset","abs","_getTouchPoints","_tempPointsArr","pop","_pointerEventEnabled","forEach","_tempCounter","touches","_ePoint1","_ePoint2","_panOrMoveMainScroll","panFriction","startOverDiff","newPanPos","newMainScrollPos","newOffset","dir","newMainScrollPosition","mainScrollDiff","_startMainScrollPos","_currPanBounds","panEndFriction","allowPanToNext","_currZoomLevel","_currZoomElementStyle","_direction","_mainScrollShifted","button","_initialZoomRunning","_oldAndroidTouchEndTimeout","pointerIndex","arraySearch","_currPointers","pointerId","startPointsList","numPoints","_isDragging","_isFirstMove","_upMoveEvents","_wasOverInitialZoom","_opacityChanged","_isMultitouch","_currPoint","_startPoint","_gestureStartTime","_dragUpdateLoop","touchesList","_isZooming","diff","hide","_features","releasePoint","splice","pointerType","gestureType","touchList","changedTouches","releaseTimeDiff","_lastReleaseTime","_releaseAnimData","_initDragReleaseAnimationData","calculateSwipeSpeed","verticalDragRange","close","initalPanY","initialBgOpacity","_bgOpacity","easing","cubic","out","now","_finishSwipeMainScrollGesture","_isOpen","_isDestroying","_containerShiftIndex","_updateSizeInterval","_itemsNeedUpdate","_prevItemIndex","_dragMoveEvent","_dragEndEvent","_dragCancelEvent","_likelyTouchDevice","_cancelAF","_initalClassName","_initalWindowScrollY","_oldIE","_currentWindowScrollY","_orientationChangeTimeout","_gestureCheckSpeedTime","_isZoomingIn","_dragAnimFrame","_currentPoints","_indexDiff","_isFixedPosition","_modules","_windowVisibleSize","_applyCurrentZoomPan","allowRenderResolution","_applyZoomPanToItem","container","_setTranslateX","elStyle","_numAnimations","panX","panY","getChildByClass","transform","scrollWrap","itemHolders","_itemHolders","children","wrap","display","allow3dTransform","perspective","left","zoomRatio","s","h","width","height","top","updateSize","clientWidth","oldPhone","animationName","showAnimationDuration","hideAnimationDuration","ui","init","isNaN","_getItemAt","setAttribute","modal","position","rootClasses","mainClass","showHideOpacity","_downEvents","setContent","focus","updateCurrItem","attr","src","css","show","setInterval","_globalEventHandlers","scroll","destroy","_showOrHideTimeout","force","event","animate","itemChanged","itemsDiff","nextCircle","animateToX","_currZoomedItemIndex","goTo","emulateSetContent","zoomElement","center","needsUpdate","beforeAnimation","tempHolder","diffAbs","NUM_HOLDERS","unshift","prevItem","updateCurrZoomItem","windowScrollY","innerWidth","innerHeight","clientHeight","spacing","holder","hIndex","cleanSlide","centerPoint","speed","updateFn","initialPanOffset","sine","inOut","_posPoints","_centerPoint","_currCenterPoint","_stopDragUpdateLoop","_isEqualPoints","pointsDistance","sqrt","_tempPoint","_calculatePointsDistance","_calculateZoomLevel","zoomFriction","minZoomLevel","maxZoomLevel","pinchToClose","percent","pCenter","closeOnVerticalDrag","scaleMode","opacityRatio","time","o","lastFlickDuration","tempReleasePos","lastFlickOffset","lastFlickDist","lastFlickSpeed","slowDownRatio","slowDownRatioReverse","speedDecelerationRatio","backAnimStarted","backAnimDestination","speedDecelerationRatioAbs","pos","timeDiff","distanceOffset","zoomPan","panAnimLoop","lastNow","calculateAnimOffset","calculateOverBoundsAnimOffset","_completePanGesture","animData","totalShiftDist","isFastLastFlick","finishAnimDuration","animateToDist","touchesDistance","initialOpacity","zoomTo","_appendImage","baseDiv","img","preventAnimation","keepPlaceholder","loadError","imageAppended","appendChild","loaded","placeholder","_preloadImage","loading","loadComplete","onload","onerror","_checkForError","cleanUp","innerHTML","errorMsg","_appendImagesPool","_imagesToAppendPool","poolItem","clearPlaceholder","addEventNames","pref","down","move","up","cancel","_dragStartEvent","maxTouchPoints","msMaxTouchPoints","likelyTouchDevice","_onDragStart","_onDragMove","_onDragRelease","mousedown","mousemove","mouseup","_items","_initialContentSet","_showOrHide","completeFn","thumbBounds","initialLayout","getThumbBoundsFn","removeAttribute","next","removeAttr","removeClass","duration","fadeEverything","miniImg","webkitBackfaceVisibility","initalBgOpacity","_tempPanAreaSize","_controllerDefaultOptions","viewportSize","isInitial","vGap","$","bottom","right","hRatio","vRatio","realPanElementW","realPanElementH","_setImageSize","maxRes","lastChild","_dispatchTapEvent","origEvent","createEvent","eDetail","initCustomEvent","dispatchEvent","getItemAt","getNumItemsFn","preload","isNext","preloadBefore","preloadAfter","lazyLoadItem","preloader","forceProgressiveLoading","screen","html","placeholderClassName","msrc","allowProgressiveImg","tapTimer","tapReleasePoint","onTapStart","onTapRelease","p0","touch0","touch1","_isNearbyPoints","PhotoSwipeUI_Default","pswp","_onControlsTap","_blockControlsTap","timeToIdle","_isIdle","uiElement","found","clickedClass","srcElement","_uiElements","onTap","tapDelay","_togglePswpClass","cName","add","hasOneSlide","_galleryHasOneSlide","_controls","_toggleShareModalClass","_shareModal","_shareModalHidden","_toggleShareModal","_openWindowPopup","shout","href","hasAttribute","open","_hasCloseClass","closeElClasses","_onMouseLeaveWindow","from","relatedTarget","toElement","nodeName","_idleTimer","setIdle","timeToIdleOutside","_applyNavBarGaps","gap","fitControlsWidth","bars","barsSize","captionEl","_fakeCaptionContainer","insertBefore","_captionContainer","addCaptionHTMLFn","captionSize","_setupUIElements","loopThroughChildElements","sChildren","l","classAttr","option","onInit","topBar","_fullscrenAPI","_indexIndicator","_shareButton","_initalCloseOnScrollValue","_loadingIndicator","_loadingIndicatorHidden","_loadingIndicatorTimeout","_idleInterval","_overlayUIUpdated","_controlsVisible","_defaultUIOptions","title","label","url","download","location","_updateShareURLs","shareButtonData","image_url","page_url","share_text","shareButtonOut","shareButtons","getImageURLForShare","getPageURLForShare","getTextForShare","encodeURIComponent","parseShareButtonOut","onclick","_idleIncrement","_onIdleMouseMove","_toggleLoadingIndicator","prev","isFullscreen","exit","enter","listen","pinchControlsHidden","hideControls","showControls","point","preventObj","onGlobalTap","onMouseOver","eventK","updateFullscreen","removeChild","shareEl","fullscreenEl","getFullscreenAPI","preloaderEl","naturalWidth","loadingIndicatorDelay","isIdle","updateIndexIndicator","counterEl","getCurrentIndex","indexIndicatorSep","detail","getZoomLevel","tapToToggleControls","tapToClose","supportsFullscreen","exitFullscreen","mozCancelFullScreen","webkitExitFullscreen","msExitFullscreen","api","dE","tF","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","closeOnScroll","enterK","Element","ALLOW_KEYBOARD_INPUT","exitK","elementK","viewerTemplateScroll","list","listView","factory","_vendor","pluginName","Plugin","param","defaults","wrapper","scroller","eq","detect","_init","_prefixStyle","substr","photoswipe","slide","config","image","imageLength","imageLoaded","nowIndex","DOM_SLIDE","DOM_SLIDEBUTTON","scrollWidth","galleryNum","uid","setTemplate","loadImage","instanceUid","Slick","element","settings","dataSettings","_","slider","text","initials","activeBreakpoint","animType","animProp","breakpoints","breakpointSettings","cssTransitions","focussed","interrupted","hidden","paused","positionProp","respondTo","rowCount","shouldClick","$slider","$slidesCache","transformType","transitionType","visibilityChange","windowWidth","windowTimer","data","currentSlide","initialSlide","originalSettings","mozHidden","webkitHidden","autoPlay","proxy","autoPlayClear","autoPlayIterator","changeSlide","clickHandler","selectHandler","setPosition","swipeHandler","dragHandler","keyHandler","htmlExpr","registerBreakpoints","activateADA","$slideTrack","find","addSlide","slickAdd","markup","addBefore","slideCount","unload","$slides","appendTo","insertAfter","prependTo","detach","append","each","reinit","animateHeight","slidesToShow","adaptiveHeight","vertical","targetHeight","outerHeight","$list","animateSlide","targetLeft","callback","animProps","rtl","transformsEnabled","currentLeft","ceil","applyTransition","disableTransition","getNavTarget","asNavFor","not","slick","unslicked","slideHandler","transition","fade","cssEase","autoPlayTimer","autoplaySpeed","slideTo","slidesToScroll","infinite","direction","buildArrows","arrows","$prevArrow","prevArrow","$nextArrow","nextArrow","appendArrows","buildDots","dot","dots","dotsClass","getDotCount","customPaging","$dots","appendDots","first","buildOut","wrapAll","parent","centerMode","swipeToSlide","setupInfinite","updateDots","setSlideClasses","draggable","buildRows","c","newSlides","numOfSlides","originalSlides","slidesPerSection","createDocumentFragment","rows","slidesPerRow","row","get","empty","checkResponsive","initial","forceUpdate","breakpoint","targetBreakpoint","respondToWidth","triggerBreakpoint","sliderWidth","responsive","mobileFirst","unslick","refresh","trigger","dontAnimate","indexOffset","slideOffset","$target","currentTarget","is","closest","message","checkNavigable","navigables","prevNavigable","getNavigableIndexes","n","cleanUpEvents","off","interrupt","visibility","cleanUpSlideEvents","accessibility","focusOnSelect","orientationChange","resize","cleanUpRows","stopImmediatePropagation","touchObject","remove","fadeSlide","slideIndex","zIndex","fadeSlideOut","filterSlides","slickFilter","filter","focusHandler","on","$sf","pauseOnFocus","getCurrent","slickCurrentSlide","breakPoint","counter","pagerQty","getLeft","verticalHeight","targetSlide","verticalOffset","slideWidth","floor","variableWidth","offsetLeft","outerWidth","getOption","slickGetOption","indexes","getSlick","getSlideCount","swipedSlide","centerOffset","swipeLeft","slickGoTo","creation","setProps","startLoad","loadSlider","initializeEvents","updateArrows","initADA","autoplay","describedBySlideId","end","initArrowEvents","initDotEvents","pauseOnDotsHover","initSlideEvents","pauseOnHover","initUI","lazyLoad","loadRange","rangeStart","rangeEnd","loadImages","imagesScope","imageSource","imageSrcSet","imageSizes","imageToLoad","prevSlide","nextSlide","progressiveLazyLoad","slickNext","pause","slickPause","play","slickPlay","postSlide","animating","slickPrev","tryCount","$imgsToLoad","initializing","lastVisibleIndex","currentBreakpoint","responsiveSettings","sort","windowDelay","removeSlide","slickRemove","removeBefore","removeAll","setCSS","positionProps","setDimensions","centerPadding","listWidth","listHeight","offset","setFade","setHeight","setOption","slickSetOption","opt","val","bodyStyle","body","WebkitTransition","MozTransition","msTransition","useCSS","OTransform","perspectiveProperty","webkitPerspective","MozTransform","MozPerspective","webkitTransform","msTransform","useTransform","allSlides","remainder","infiniteCount","clone","toggle","targetElement","parents","sync","animSlide","oldSlide","slideLeft","navTarget","waitForAnimate","swipeDirection","xDist","yDist","r","swipeAngle","startX","curX","startY","curY","atan2","verticalSwiping","swipeEnd","swiping","scrolling","swipeLength","edgeHit","minSwipe","currentDirection","swipe","fingerCount","originalEvent","touchThreshold","action","swipeStart","swipeMove","curLeft","positionOffset","verticalSwipeLength","clientX","clientY","pow","edgeFriction","touchMove","unfilterSlides","slickUnfilter","fromBreakpoint","ret","define","amd","exports","require","jQuery","scope","offsetTop","offsetParent","current","start","lowerMargin","wrapperSize","destination","distance","isMobile","_utils","_isMobile","_setEvents","_setScroll","_refresh","_startPosition","_initFlick","_addEvent","_resize","_transitionEnd","_start","_move","_end","_removeEvent","selector","parentWidth","itemLength","scrollerWidth","itemLeftPositon","itemRightPositon","wrapperWidth","flickSize","offsetWidth","maxScrollX","endTime","wrapperOffset","hasHorizontalScroll","selectedItemIndex","_scrollMoveValue","_scrollTo","scrollTarget","flickPanelName","isInTransition","_getComputedPosition","_isBadAndroid","_style","transitionDuration","isInflick","startTime","_getTime","isScrolling","enabled","_stop","distanceX","distanceY","pointX","pointY","pointer-events","newX","absDistX","absDistY","deltaX","deltaY","timestamp","directionX","_translate","momentumX","distX","_resetPosition","bounceTime","momentum","delay","_momentum","_transitionTime","snap","_snap","query","_flick","itemWidth","snapId","flickCount","_updateFlickList","_appendFlickData","_setFlickPosition","flickList","indicator","_setFlickControl","navi","_naviMove","_initNavi","_autoPlay","playSpeed","num","updateItem","contents","flickEnabled","flickPositionNumber","_flickMapList","leftprev","rightnext","cardWidth","count","_indicator","_flickCallback","indicatorType","control","prepend","interval","hover","naviTarget","buttonID","hash","siblings","onTarget","_transitionTimingFunction","func","transitionTimingFunction","moveTarget","matrix","getComputedStyle","$this","constructor","loadIndex","updateImage","Image","_this","setView","setSlide","log","eventTarget","findTarget","checkName","checkNode","viewerTemplate","btn","_this2","getDelegateTarget","openViewer","thumbnail","galleryUid","pswpElement","pageYScroll","rect","getBoundingClientRect","photoSwipe","_this3","mobileSlidePosition","DOM_SLICKSLIDE","last","horizontalBox","_this4","clearTimeout","refreshSlide"],"mappings":";;;;;;;6hDAAmB,SAAbA,EAAsBC,EAAUC,EAASC,EAAOC,OAU9CC,EAAY,UACF,UACJ,SAASC,EAAQC,EAAMC,EAAUC,OAC/BC,GAAcD,EAAS,SAAW,OAAS,kBACxCF,EAAKI,MAAM,SACd,IAAIC,EAAI,EAAGA,EAAIL,EAAKM,OAAQD,IACzBL,EAAKK,MACGF,GAAYH,EAAKK,GAAIJ,GAAU,YAIzC,SAASM,UACNA,aAAeC,gBAEjB,SAASC,EAASC,OACpBC,EAAKC,SAASC,cAAcH,GAAO,cACpCD,MACIK,UAAYL,GAEZE,cAEC,eACJI,EAAUC,OAAOC,wBACFC,IAAZH,EAAwBA,EAAUH,SAASO,gBAAgBC,kBAE9D,SAASrB,EAAQC,EAAMC,KACjBoB,KAAKtB,EAAQC,EAAMC,GAAU,gBAE9B,SAASU,EAAIG,OAClBQ,EAAM,IAAIC,OAAO,UAAYT,EAAY,aAC1CA,UAAYH,EAAGG,UAAUU,QAAQF,EAAK,KAAKE,QAAQ,SAAU,IAAIA,QAAQ,SAAU,cAEhF,SAASb,EAAIG,GACfhB,EAAU2B,SAASd,EAAIG,OACpBA,YAAcH,EAAGG,UAAY,IAAM,IAAMA,aAG1C,SAASH,EAAIG,UACZH,EAAGG,WAAa,IAAIS,OAAO,UAAYT,EAAY,WAAWY,KAAKf,EAAGG,4BAEhE,SAASa,EAAUC,WAC5BC,EAAOF,EAASG,WACdD,GAAM,IACL/B,EAAU2B,SAASI,EAAMD,UACjBC,IAEJA,EAAKE,0BAGP,SAASC,EAAOC,EAAOC,WAC5B7B,EAAI2B,EAAM1B,OACRD,QACC2B,EAAM3B,GAAG6B,KAASD,SACV5B,SAGP,UAEJ,SAAS8B,EAAIC,EAAIC,OACjB,IAAIC,KAAQF,KACTA,EAAGG,eAAeD,GAAO,IACrBD,GAAoBF,EAAGI,eAAeD,cAGtCA,GAAQF,EAAGE,YAIlB,MACE,KACG,SAASE,UACHC,KAAKC,IAAIF,GAAKC,KAAKE,GAAK,WAE5B,SAASH,WACHC,KAAKG,IAAIH,KAAKE,GAAKH,GAAK,GAAK,UAGvC,KACE,SAASA,WACDA,EAAIA,EAAIA,EAAI,oBAqCjB,cACT1C,EAAU+C,gBACF/C,EAAU+C,aAGjBC,EADWhD,EAAUiD,WACEC,MACvBC,EAAS,GACTJ,EAAW,QAGNK,MAAQtC,SAASuC,MAAQvC,SAASwC,mBAElCC,MAAQ,iBAAkBrC,OAEhCA,OAAOsC,0BACGC,IAAMvC,OAAOsC,wBACbE,IAAMxC,OAAOyC,wBAGjBC,aAAeC,UAAUC,gBAAkBD,UAAUE,kBAK1DhB,EAASa,aAAc,KAEnBI,EAAKH,UAAUI,aAShB,cAAcrC,KAAKiC,UAAUK,UAAW,KACnCC,EAAKN,UAAUO,WAAYC,MAAM,0BAClCF,GAAgB,EAAXA,EAAE3D,QAEE,MADJ8D,SAASH,EAAE,GAAI,MACNA,EAAI,MACJI,eAAgB,OASjCF,EAAQL,EAAGK,MAAM,uBACjBG,EAAiBH,EAAQA,EAAM,GAAK,EAEnB,MADJI,WAAWD,MAErBA,EAAiB,QACPE,cAAe,KAEnBC,eAAiBH,KAErBI,cAAgB,yBAAyBhD,KAAKoC,WAOvDa,EACAC,EAHAC,EAAc,CAAC,YAAa,cAAe,iBAC3CC,EAAU,CAAC,GAAI,SAAU,MAAO,KAAM,KAIlCzE,EAAI,EAAGA,EAAI,EAAGA,IAAK,GACdyE,EAAQzE,OAEb,IAAI0E,EAAI,EAAGA,EAAI,EAAGA,MACDF,EAAYE,KAGjB9B,GAAUA,EAClB0B,EAAeK,OAAO,GAAGC,cAAgBN,EAAeO,MAAM,GAC9DP,IAEA9B,EAAS8B,IAAmBC,KAAa9B,MAChC6B,GAAkBC,GAIhC3B,IAAWJ,EAASU,QACVN,EAAOkC,gBACP5B,IAAMvC,OAAOiC,EAAS,yBAC5BJ,EAASU,QACCC,IAAMxC,OAAOiC,EAAS,yBAC3BjC,OAAOiC,EAAS,qCAK5BJ,EAASU,IAAK,KACV6B,EAAW,IACN7B,IAAM,SAAS8B,OAChBC,GAAW,IAAIC,MAAOC,UACtBC,EAAahD,KAAKiD,IAAI,EAAG,IAAMJ,EAAWF,IAC1CO,EAAK3E,OAAO4E,WAAW,aACpBN,EAAWG,IACfA,YACQH,EAAWG,EACfE,KAEFnC,IAAM,SAASmC,gBACPA,aAKZE,MAAQjF,SAASkF,mBACpBlF,SAASkF,gBAAgB,6BAA8B,OAAOC,gBAE1DlD,SAAWA,MAMnBmD,iBAGPlG,EAAU+C,SAASK,UAER7B,KAAO,SAAStB,EAAQC,EAAMC,EAAUC,KAEvCF,EAAKI,MAAM,aAGd6F,EADA9F,GAAcD,EAAS,SAAW,UAAY,QAE9CgG,EAAY,aACCC,YAAYC,KAAKnG,IAG1BI,EAAI,EAAGA,EAAIL,EAAKM,OAAQD,SACnBL,EAAKK,MAGa,qBAAbJ,iBAAAA,KAAyBA,EAASkG,YAAa,IACjDjG,OAGID,EAAS,QAAUgG,UACZ,SAHF,QAAUA,GAAUC,IAO1B/F,GAAY,KAAO8F,EAAQhG,EAAS,QAAUgG,WAE9C9F,GAAY,KAAO8F,EAAQhG,SAclDoG,EAAOC,KAWPC,EAAW,iBACK,UACP,cACE,aACA,QACL,gBACQ,iBACC,uBACM,oBACF,0BACI,0BACA,qBACN,SACV,UACC,aACG,wBACY,mBACP,uBACI,SAAS5F,SACH,MAAfA,EAAG6F,0BAEI,SAASC,EAAcC,UAClCD,EACQ,EAEAC,EAAKC,iBAAmB,GAAM,EAAI,oBAGlC,YACR,YAGI,OA0DO,WAASC,EAAMC,KACnBC,OAAOT,EAAMQ,EAAOE,kBACrBC,KAAKJ,GAGH,SAAfK,EAAwBC,OAChBC,EAAYC,YACLD,EAAY,EAApBD,EACQA,EAAQC,EACTD,EAAQ,EACPC,EAAYD,EAEhBA,EAKD,SAAVG,EAAmBT,EAAMvB,UACjBiC,GAAWV,QACAA,GAAQ,IAEhBU,GAAWV,GAAMI,KAAK3B,GAExB,SAATkC,EAAkBX,OACVY,EAAYF,GAAWV,MAExBY,EAAW,KACNC,EAAOjH,MAAMkH,UAAUxC,MAAMkB,KAAKuB,aACjCC,YAED,IAAIvH,EAAI,EAAGA,EAAImH,EAAUlH,OAAQD,MACvBA,GAAGwH,MAAMxB,EAAMoB,IAKnB,SAAlBK,WACW,IAAIvC,MAAOC,UAEJ,SAAlBuC,EAA2BC,MACVA,IACRC,GAAGjF,MAAMgF,QAAUA,EAAUzB,EAAS2B,UAGzB,SAAtBC,EAA+BC,EAAUC,EAAGC,EAAGC,EAAM7B,KAC7C8B,IAAyB9B,GAAQA,IAASL,EAAKoC,eAChC/B,EAAOA,EAAKgC,SAAWrC,EAAKoC,SAASC,YAG/CC,IAAiBC,EAAmBP,EAAI,OAASC,EAAI,KAAOO,EAAkB,UAAYN,EAAO,IAmC5F,SAAlBO,EAA2BT,EAAGU,OAEtBxC,EAASyC,MAAQD,EAAU,KACvBE,EAAsBC,GAAqBC,GAAWd,EAAIe,GAAqBf,GAAKc,GAAWd,EAC/FgB,EAAQ5G,KAAK6G,MAAMjB,EAAIkB,GAAelB,IAEtCY,EAAsB,GAAa,EAARI,GAC1BJ,GAAuB7B,KAAiB,GAAKiC,EAAQ,OAClDE,GAAelB,EAAIgB,EAAQ9C,EAASiD,0BAIjCnB,EAAIA,KACJA,EAAGoB,GAEA,SAAtBC,EAA+BC,EAAMC,OAC7BC,EAAIC,GAAcH,GAAQI,GAAQJ,UAC/BK,GAAgBL,GAAQM,GAAaN,GAAQE,EAASD,EAAYM,EAAjBL,EAG1C,SAAlBM,EAA2BC,EAAIC,KACxBhC,EAAIgC,EAAGhC,IACPC,EAAI+B,EAAG/B,EACP+B,EAAG1E,OACCA,GAAK0E,EAAG1E,IAGL,SAAd2E,EAAuBC,KACjBlC,EAAI5F,KAAK6G,MAAMiB,EAAElC,KACjBC,EAAI7F,KAAK6G,MAAMiB,EAAEjC,GAIH,SAApBkC,IAGOC,OACWvK,OAAOU,SAAU,YAAa4J,KAC9BE,SAAShL,EAAU,qBACpBiL,WAAY,IACd,iBAES/E,WAAW,cACP,MACrB,KAuCe,SAAtBgF,EAA+BhB,EAAWiB,OAClCC,EAASC,GAAmB1E,EAAKoC,SAAUuC,GAAepB,UAC3DiB,OACkBC,GAEdA,EAGQ,SAAnBG,EAA4BvE,YACpBA,GACOL,EAAKoC,UAEJ9B,iBAEG,SAAnBuE,EAA4BxE,UAIR,KAHZA,GACOL,EAAKoC,UAEJ0C,EAAQ5E,EAAS6E,cAAgB,EAI1B,WAASzB,EAAM0B,EAAeC,EAAeC,UAC7DA,IAAkBlF,EAAKoC,SAAS9B,oBACjBgD,GAAQtD,EAAKoC,SAAS+C,gBAAgB7B,IAC7C,MAEOA,GAAQD,EAAoBC,EAAM4B,GAE7CD,EAAc3B,GAAQ0B,EAAcI,IAAI9B,MACzBA,GAAQ0B,EAAcI,IAAI9B,IACjC,GACD2B,EAAc3B,GAAQ0B,EAAc3F,IAAIiE,OAChCA,GAAQ0B,EAAc3F,IAAIiE,IACjC,IAyDN,SAAb+B,EAAsBC,OACdC,EAAgB,GACjBrF,EAASsF,QAAwB,KAAdF,EAAEG,UACJ,QACVvF,EAASwF,YACE,KAAdJ,EAAEG,UACe,OACI,KAAdH,EAAEG,YACQ,SAIrBF,IAGKD,EAAEK,SAAYL,EAAEM,QAAWN,EAAEO,UAAaP,EAAEQ,UACzCR,EAAES,iBACCA,mBAEAC,aAAc,IAEfT,OAKA,SAAjBU,EAA0BX,GAClBA,IAKDY,IAAUC,IAAgBC,IAAwBC,QAC/CN,mBACAO,mBAIgB,SAA1BC,MACSC,gBAAgB,EAAG/M,EAAUgN,cAMrB,SAAjBC,EAA0BnG,GACnBoG,GAAYpG,KACRoG,GAAYpG,GAAMrD,QACPyJ,GAAYpG,GAAMrD,iBAGzByJ,GAAYpG,IAGD,SAA1BqG,EAAmCrG,GAC5BoG,GAAYpG,MACIA,GAEfoG,GAAYpG,aAEAA,GAAQ,IAGP,SAArBsG,QACQ,IAAI5K,KAAQ0K,GAETA,GAAYzK,eAAeD,MACXA,GAKZ,SAAf6K,EAAwBvG,EAAMwG,EAAGC,EAASC,EAAGC,EAAUC,EAAUC,OACtBC,EAAnCC,EAAgB7F,MACIlB,GACT,SAAXgH,OACGZ,GAAYpG,GAAO,MAEdkB,IAAoB6F,EAIhBL,GAALI,WACgB9G,KACNyG,QACNI,WAKGJ,EAAUD,GAAKG,EAASG,EAAIJ,GAAKF,MAE/BxG,GAAMrD,IAAMsK,GAAWD,OAyvBf,SAAhCE,EAAyCnC,EAAGoC,aAC5BC,SAnBE,SAAlBC,EAA2BtN,EAAI0E,YACvB1E,GAAMA,IAAOC,cAKdD,EAAGuN,aAAa,WAAqE,EAAzDvN,EAAGuN,aAAa,SAASC,QAAQ,wBAI7D9I,EAAG1E,GACKA,EAGJsN,EAAgBtN,EAAGyN,WAAY/I,KAKf4I,CAAgBtC,EAAE5L,OAAQwG,EAAS8H,sBAEnD,mBAAoB1C,EAAGoC,EAAQO,IAC/BA,GAAYN,QAGA,SAAvBO,EAAgClL,EAAOkH,YACjClC,EAAIhF,EAAMmL,QACVlG,EAAIjF,EAAMoL,QACV9I,GAAKtC,EAAMqL,WACNnE,EAgB0B,SAArCoE,QACQ5N,EAAU6N,GAAWtG,EAAIjC,EAAKoC,SAAS+C,gBAAgBlD,SACpD,EAAI7F,KAAKoM,IAAI9N,GAAWiK,GAAc1C,EAAI,IAQnC,SAAlBwG,EAA2BnD,QAEO,EAAxBoD,GAAezO,WACF0O,aAGfC,OAiBe,KAEDC,QAAQ,SAAS3E,GACP,IAAjB4E,MACgB,GAAK5E,EACG,IAAjB4E,QACS,GAAK5E,YAtBE,EAA3BoB,EAAE3L,KAAKmO,QAAQ,SAEXxC,EAAEyD,SAA8B,EAAnBzD,EAAEyD,QAAQ9O,YACP,GAAKiO,EAAqB5C,EAAEyD,QAAQ,GAAIC,IACjC,EAAnB1D,EAAEyD,QAAQ9O,YACM,GAAKiO,EAAqB5C,EAAEyD,QAAQ,GAAIE,UAKtDjH,EAAIsD,EAAE6C,SACNlG,EAAIqD,EAAE8C,SACN9I,GAAK,MACC,GAAK0J,IAerBN,GAGY,SAAvBQ,EAAgC5F,EAAMN,OAE9BmG,EAGAC,EAIAC,EACAC,EANAC,EAAYhB,GAAWjF,GAAQN,EAAMM,GAErCkG,EAAoB,EAAdxG,EAAMM,GACZmG,EAAwBvG,GAAelB,EAAIgB,EAAMhB,EACjD0H,EAAiBxG,GAAelB,EAAI2H,GAAoB3H,OAKzDuH,EAAYK,GAAexE,IAAI9B,IAASiG,EAAYK,GAAevK,IAAIiE,GACxDpD,EAAS2J,eAKT,IAGNtB,GAAWjF,GAAQN,EAAMM,GAAQ6F,GAG1CjJ,EAAS4J,gBAAkBC,IAAmB/J,EAAKoC,SAAS9B,oBAEvD0J,GAIqB,MAAfC,IAA+B,MAAT3G,GAAiB6C,KAE1CqD,GACID,EAAYK,GAAexE,IAAI9B,OAChBpD,EAAS2J,iBAEPD,GAAexE,IAAI9B,GAAQK,GAAgBL,KAI3D8F,GAAiB,GAAKM,EAAiB,IAAuB,EAAjB3I,QAC1B0I,EAChBC,EAAiB,GAAKD,EAAwBE,GAAoB3H,MAC9C2H,GAAoB3H,IAGxC4H,GAAexE,IAAIpD,IAAM4H,GAAevK,IAAI2C,MAC/BuH,KAOjBA,EAAYK,GAAevK,IAAIiE,OAChBpD,EAAS2J,iBAEPlG,GAAgBL,GAAQsG,GAAevK,IAAIiE,KAG3D8F,GAAiB,GAAsB,EAAjBM,IAAwC,EAAjB3I,QAC1B0I,EAEC,EAAjBC,GAAsBD,EAAwBE,GAAoB3H,MAC9C2H,GAAoB3H,IAIxC4H,GAAexE,IAAIpD,IAAM4H,GAAevK,IAAI2C,MAC/BuH,OAzCLE,EAkDX,MAATnG,eAEyBzI,IAArByO,MACiBA,GAAkB,MAC/BA,IAAqBK,GAAoB3H,GAO7C4H,GAAexE,IAAIpD,IAAM4H,GAAevK,IAAI2C,SAC1BnH,IAAdwO,KACYrH,EAAIqH,EACRa,QACIlI,GAAKgB,EAAMhB,EAAImH,SAINtO,IAArByO,EAKXlD,IAEI8D,IACGH,EAAiB/J,EAAKoC,SAASC,cACnBiB,IAASN,EAAMM,GAAQ6F,GAUnC,WAAS7D,QAON,cAAXA,EAAE3L,MAAmC,EAAX2L,EAAE6E,WAI5BC,KACGrE,0BAIHsE,IAAyC,cAAX/E,EAAE3L,SAIhC8N,EAA8BnC,GAAG,MAC9BS,mBAGC,eAEJ6C,GAAsB,KACjB0B,EAAe7Q,EAAU8Q,YAAYC,GAAelF,EAAEmF,UAAW,MAClEH,EAAe,MACCE,GAAcvQ,WAEnBqQ,GAAgB,CAACtI,EAAGsD,EAAE6C,MAAOlG,EAAGqD,EAAE8C,MAAO9I,GAAIgG,EAAEmF,eAG7DC,EAAkBjC,EAAgBnD,GAClCqF,EAAYD,EAAgBzQ,UAEf,SAKb2Q,IAA6B,IAAdD,OAEDE,IAAe,IACnB7P,KAAKL,OAAQmQ,EAAe9K,MAGlC+K,GACIC,GACI3E,GACI6D,GACIhE,GACI+E,GACI9E,IAAe,KAE9B,OAEN,kBAAmBuE,KAEV/G,GAAiB4E,OAEpBvG,EAAI4B,GAAa3B,EAAI,IAClBiJ,GAAYR,EAAgB,MAC5BS,GAAaD,OAGTlJ,EAAIc,GAAWd,EAAIe,MAE1B,CAAC,GACPmI,GAAWlJ,IACXkJ,GAAWjJ,OAGOmJ,GAAoB3J,MAGzBsI,GAAgB,QA1S1B,SAAlBsB,IACOT,QACkBpD,GAAW6D,cAuUtB,WAAS/F,QAEjBS,iBAEC6C,GAAsB,KACjB0B,EAAe7Q,EAAU8Q,YAAYC,GAAelF,EAAEmF,UAAW,UAClD,EAAhBH,EAAmB,KACdpG,EAAIsG,GAAcF,KACpBtI,EAAIsD,EAAE6C,QACNlG,EAAIqD,EAAE8C,UAIbwC,GAAa,KACRU,EAAc7C,EAAgBnD,MAC9B2E,IAAe/D,IAAWqF,MAeTD,UAbdpI,GAAelB,IAAMc,GAAWd,EAAIe,MAEtB,QACV,KACCyI,EAAOpP,KAAKoM,IAAI8C,EAAY,GAAGtJ,EAAIkJ,GAAWlJ,GAAK5F,KAAKoM,IAAI8C,EAAY,GAAGrJ,EAAIiJ,GAAWjJ,GA5ZrF,IA8ZN7F,KAAKoM,IAAIgD,QACY,EAAPA,EAAW,IAAM,OACbF,IASf,MAAfrB,OACG,kBAAkBwB,SAClB,kBAAkBA,QAuKX,WAASnG,MAEnBoG,GAAUvN,aAAc,IAEpBkM,IAAyC,YAAX/E,EAAE3L,aAQL,EAA3B2L,EAAE3L,KAAKmO,QAAQ,wBACDuC,OACgB9K,WAAW,cACP,GAC9B,UAWPoM,OANG,aAEJlE,EAA8BnC,GAAG,MAC9BS,iBAKH6C,GAAsB,KACjB0B,EAAe7Q,EAAU8Q,YAAYC,GAAelF,EAAEmF,UAAW,UAElD,EAAhBH,OACgBE,GAAcoB,OAAOtB,EAAc,GAAG,GAElDhN,UAAUC,iBACI5D,KAAO2L,EAAEuG,aAAe,YAClC,GAMUlS,KALS,GACf,UACA,UACA,OAE6B2L,EAAEuG,aAElCF,EAAahS,SACAA,KAAO2L,EAAEuG,aAAe,cAQjDC,EADAC,EAAYtD,EAAgBnD,GAE5BqF,EAAYoB,EAAU9R,UAEZ,YAAXqL,EAAE3L,SACW,GAIC,IAAdgR,aACkB,MAKJ,IAAdA,KACiBQ,GAAaY,EAAU,IAI1B,IAAdpB,GAAoBV,IAAe7D,KAC9BuF,IACc,YAAXrG,EAAE3L,OACc,CAACqI,EAAGsD,EAAE6C,MAAOlG,EAAGqD,EAAE8C,MAAOzO,KAAM,SACxC2L,EAAE0G,gBAAkB1G,EAAE0G,eAAe,OAC5B,CAAChK,EAAGsD,EAAE0G,eAAe,GAAG7D,MAAOlG,EAAGqD,EAAE0G,eAAe,GAAG5D,MAAOzO,KAAM,aAInF,eAAgB2L,EAAGqG,QAI1BM,GAAmB,KAGN,IAAdtB,QACe,IACJ9Q,OAAOc,OAAQmQ,EAAe9K,QAIrCuL,KAEmB,GACU,IAAtBW,OACYzK,IAAoByK,QAGb,IAAdvB,EAAkBlJ,KAAqB,KAElC,IAArBwK,GAA0BA,EAAkB,IAC7B,OAEA,QAGfV,IAAcZ,EAAY,QACZ,EAGI,IAAdA,MACe,mBAEX,wBAGM,KACbzE,IAAWC,IAAiBC,IAAyBC,cAOrD8F,IACmBC,MAGNC,oBAAoB,KAElChG,OAEoBiC,IAEDpI,EAASoM,oBAClBC,YACF,KACCC,EAAajE,GAAWtG,EACxBwK,EAAmBC,KAEV,eAAgB,EAAG,EAAG,IAAKjT,EAAUkT,OAAOC,MAAMC,IAAK,SAASC,MAE9D7K,GAAKjC,EAAKoC,SAAS+C,gBAAgBlD,EAAIuK,GAAcM,EAAMN,KAErD,EAAIC,GAAoBK,EAAML,YAI5C,iBAAkB,aAO7BvC,IAAsB9D,KAAuC,IAAduE,EAAiB,IAC9CoC,GAA8BjB,EAAaK,aAI/C,gBAIf/F,KAKgB,UAAhB0F,GAMC5B,IAAsBH,EAAiB/J,EAAKoC,SAASC,aACjC8J,aA1zDtB1L,OAAOP,EAAU1G,OAUvBwT,EACAC,EAEApK,EACAO,EACA8J,EAIApC,MAIAf,EACAlG,EACAtB,EACAC,EACA2K,EACAC,IAKAC,MAGAC,GACAC,GACAC,GACAlL,GACAsG,GAEA6E,GAEAjG,GACAkG,GACAC,GACAC,GACAC,GACAC,GACApC,GAGAqC,GAigCA3C,GACA4C,GAUA7B,GAIA8B,GACA5H,GACAgE,GAIAO,YAIAsD,GACAhE,GACAiE,MAIAvE,GAEAI,GACA5D,GAGA6D,GACAY,GACAG,GACA0B,GACA3B,GAoFAjC,GAnqCAlF,GATO,CAAC5B,EAAG,EAAGC,EAAG,GAUjB0B,GAVO,CAAC3B,EAAG,EAAGC,EAAG,GAWjBsG,GAXO,CAACvG,EAAG,EAAGC,EAAG,GAejB0C,GAAgB,GAOhB5B,GAAqB,EACrBW,GAAU,GACVZ,GAxBO,CAACd,EAAG,EAAGC,EAAG,GA2BjBmM,GAAa,EAObC,IAAmB,EAEnBC,GAAW,GAQXC,GAAqB,GACrBpM,IAAuB,KAoBV,GAmCbqM,GAAuB,SAASC,GACzBzE,KAEIyE,IACI1E,EAAiB/J,EAAKoC,SAASC,SAC1BF,QACcnC,EAAKoC,UAAU,GAAO,OACb,GAGxBD,QACenC,EAAKoC,cACI,MAKf4H,GAAuBzB,GAAWvG,EAAGuG,GAAWtG,EAAG8H,KAG/E2E,GAAsB,SAASrO,GACxBA,EAAKsO,aAEgBtO,EAAKsO,UAAUhS,MAC/B0D,EAAK8E,gBAAgBnD,EACrB3B,EAAK8E,gBAAgBlD,EACrB5B,EAAKC,iBACLD,IAGZuO,GAAiB,SAAS5M,EAAG6M,KACjBvM,IAAiBC,EAAmBP,EAAI,UAAYQ,GAkChE4B,GAAoB,KAyLpBuC,GAAc,GACdmI,GAAiB,EAsDjBpO,GAAgB,OAGTQ,SACCF,eACM2D,WACLzE,wBAEc,kBACZkG,iBAEG,kBACH2D,mBAEM,kBACNlH,cAEC,kBACD+H,cAEA,kBACAW,oBAEM,SAASvJ,EAAGC,MACjBD,EAAIA,KACY0B,GAAQzB,EAAIA,IAC7B,qBAAsByB,kBAEnB,SAASH,EAAWwL,EAAMC,EAAMP,MAC/BzM,EAAI+M,KACJ9M,EAAI+M,IACEzL,KACIkL,SAGnB,eAECzB,IAAWC,OAIVjT,IAECP,UAAYA,IACZJ,SAAWA,IACXuI,GAAKnI,EAAUwV,gBAAgB5V,EAAU,eAE3BA,EAASoB,aAClB,KAEEhB,EAAUkG,oBACT+L,GAAUxO,OACXwO,GAAUvO,OACNuO,GAAUwD,aACjBxD,GAAU7O,QAEdsS,WAAa1V,EAAUwV,gBAAgB5V,EAAU,uBACjDsV,UAAYlV,EAAUwV,gBAAgBjP,EAAKmP,WAAY,qBAE1CnP,EAAK2O,UAAUhS,QAG5ByS,YAAcC,EAAe,CAC9B,CAAC/U,GAAI0F,EAAK2O,UAAUW,SAAS,GAAIC,KAAM,EAAG1O,OAAQ,GAClD,CAACvG,GAAI0F,EAAK2O,UAAUW,SAAS,GAAIC,KAAM,EAAG1O,OAAQ,GAClD,CAACvG,GAAI0F,EAAK2O,UAAUW,SAAS,GAAIC,KAAM,EAAG1O,OAAQ,MAIzC,GAAGvG,GAAGqC,MAAM6S,QAAUH,EAAa,GAAG/U,GAAGqC,MAAM6S,QAAU,OA1NvD,cAEZlN,GAAe,KAEVmN,EAAmB/D,GAAUgE,cAAgBjC,YAC9B,aAAegC,EAAmB,MAAQ,OAC3C/D,GAAUgE,YAAc,SAAW,OAOzC,SACNrL,SAAShL,EAAU,eAEZ,SAAS2I,EAAG6M,KACjBc,KAAO3N,EAAI,SAED,SAAS3B,OAEvBuP,EAA4B,EAAhBvP,EAAKgC,SAAe,EAAIhC,EAAKgC,SACzCwN,EAAIxP,EAAKsO,UAAUhS,MACnBmI,EAAI8K,EAAYvP,EAAKyE,EACrBgL,EAAIF,EAAYvP,EAAKyP,IAEvBC,MAAQjL,EAAI,OACZkL,OAASF,EAAI,OACbH,KAAOtP,EAAK8E,gBAAgBnD,EAAI,OAChCiO,IAAM5P,EAAK8E,gBAAgBlD,EAAI,SAGd,cAChB+H,GAAuB,KAElB6F,EAAI7F,GACJ3J,EAAOL,EAAKoC,SACZwN,EAA4B,EAAhBvP,EAAKgC,SAAe,EAAIhC,EAAKgC,SACzCyC,EAAI8K,EAAYvP,EAAKyE,EACrBgL,EAAIF,EAAYvP,EAAKyP,IAEvBC,MAAQjL,EAAI,OACZkL,OAASF,EAAI,OAEbH,KAAOpH,GAAWvG,EAAI,OACtBiO,IAAM1H,GAAWtG,EAAI,YAkLR,QACXjC,EAAKkQ,6BAKM,wBACFnC,OACexO,WAAW,WAChCoF,GAAc3C,IAAMhC,EAAKmP,WAAWgB,eAC9BD,cAEV,aAEC3J,UACClB,QACFY,OAKPmK,EAAW1E,GAAU1N,eAAiB0N,GAAUvN,cAAgBuN,GAAUrN,kBAC1EqN,GAAU2E,eAAkB3E,GAAUwD,YAAakB,MAC1CE,sBAAwBpQ,EAASqQ,sBAAwB,GAIlEvW,EAAI,EAAGA,EAAIsU,GAASrU,OAAQD,MACvB,OAASsU,GAAStU,SAIxBV,GACU0G,EAAKwQ,GAAK,IAAIlX,EAAQ0G,EAAMvG,IAClCgX,SAGA,iBACa5N,GAAqB3C,EAASW,OAAS,GAExD6P,MAAM7N,IAAsBA,EAAoB,GAAKA,GAAqB9B,UACrD,KAEnBqB,SAAWuO,GAAW9N,IAExB6I,GAAU1N,eAAiB0N,GAAUvN,oBACjB,KAGdyS,aAAa,cAAe,SAClC1Q,EAAS2Q,QACJxC,KAIS1R,MAAMmU,SAAW,WAHjBnU,MAAMmU,SAAW,aACjBnU,MAAMsT,IAAMxW,EAAUgN,aAAe,YAMzB5L,IAA1BiT,OACQ,oBACiBF,GAAuBnU,EAAUgN,kBAIzDsK,EAAc,kBACf7Q,EAAS8Q,eACO9Q,EAAS8Q,UAAY,KAErC9Q,EAAS+Q,qBACO,6BAEJxD,GAAqB,cAAgB,mBACrC/B,GAAU2E,cAAgB,uBAAyB,MACnD3E,GAAUlM,IAAM,aAAe,KACpC6E,SAAShL,EAAU0X,KAExBb,gBAGmB,KACX,KACTlW,EAAI,EAAGA,EA/lBD,EA+lBkBA,QACRA,EAAIkT,GAAwBpK,GAAWd,EAAGqN,EAAarV,GAAGM,GAAGqC,OAG7EkR,MACU7S,KAAKgF,EAAKmP,WAAY+B,EAAalR,KAGzC,mBAAoB,aACnBmR,WAAW9B,EAAa,GAAIxM,EAAoB,KAChDsO,WAAW9B,EAAa,GAAIxM,EAAoB,KAExC,GAAGvI,GAAGqC,MAAM6S,QAAUH,EAAa,GAAG/U,GAAGqC,MAAM6S,QAAU,QAEnEtP,EAASkR,SAICA,UA9YPpW,KAAKT,SAAU,UAAWyF,GAEjC0L,GAAUwD,aAEClU,KAAKgF,EAAKmP,WAAY,QAASnP,GAGzCE,EAASoE,aACCtJ,KAAKT,SAAU,YAAa4J,KAGhCnJ,KAAKL,OAAQ,kCAAmCqF,KAEnD,kBAwYFmR,WAAW9B,EAAa,GAAIxM,KAE5BwO,mBAEE,eAEL,2BAA2BC,KAAK,OAAQtR,EAAKoC,SAASmP,OAEtD,kBAAkBC,IAAI,KACfxR,EAAKoC,SAAS+C,gBAAgBlD,EAAI,SAChCjC,EAAKoC,SAAS+C,gBAAgBnD,MAGvC,kBAAkBwP,IAAI,KACfxR,EAAKoC,SAAS+C,gBAAgBlD,EAAI,gBAGhC,aACL,kBAAkBwP,SAClB,kBAAkBA,QACrB,KAECpD,OAWsBqD,YAAY,WAC1B5C,IAAmBlE,IAAgBW,IAAexB,IAAmB/J,EAAKoC,SAAS9B,oBAC9E4P,cAEV,QAGG7L,SAAShL,EAAU,yBAI1B,WACC2T,WAIM,KAEH,WAEL,kBAAkBvB,SAClB,kBAAkBA,SA1bV5R,OAAOc,OAAQ,kCAAmCqF,KAClDnG,OAAOc,OAAQ,SAAUgX,EAAqBC,UAC9C/X,OAAOU,SAAU,UAAWyF,KAC5BnG,OAAOU,SAAU,YAAa4J,GAErCuH,GAAUwD,aACCrV,OAAOmG,EAAKmP,WAAY,QAASnP,GAG5C4K,MACW/Q,OAAOc,OAAQmQ,EAAe9K,gBAG/B+N,MAEN,mBA+aK/N,EAAKoC,SAAU,MAAM,EAAMpC,EAAK6R,mBAIvC,aACE,WAEJC,iBACcA,MAGRlB,aAAa,cAAe,UAC5BnW,UAAYkT,GAElBR,iBACeA,KAGRtT,OAAOmG,EAAKmP,WAAY+B,EAAalR,KAGrCnG,OAAOc,OAAQ,SAAUqF,eAMtB,YASV,SAASgC,EAAGC,EAAG8P,GACdA,IACG/P,EAAI4H,GAAexE,IAAIpD,IAClB4H,GAAexE,IAAIpD,EACjBA,EAAI4H,GAAevK,IAAI2C,MACzB4H,GAAevK,IAAI2C,GAGxBC,EAAI2H,GAAexE,IAAInD,IAClB2H,GAAexE,IAAInD,EACjBA,EAAI2H,GAAevK,IAAI4C,MACzB2H,GAAevK,IAAI4C,OAIpBD,EAAIA,KACJC,EAAIA,oBAIN,SAASqD,KACdA,GAAK3K,OAAOqX,MAGbL,EAAqBrM,EAAE3L,SACD2L,EAAE3L,MAAM2L,SAI/B,SAASzE,EAAT,OAAgBoR,+BAAhB,GAAA,MACC7L,UAEoB,IACrB,kBAAkBqF,SAClB,kBAAkBA,OAEjBwG,EAAS,KACJC,SACAC,EAAYtP,EAAoBhC,EAAQ,GAAK,EAE7CuR,SAEDD,QACsBA,GAEE,KACCjS,EAASyC,KAAO5B,KAAiB,EAAI,KAC5C,GACP8B,GAAqB9B,SACPb,EAASyC,KAAO,EAAI5B,KAAiB,KAC5C,GAGbqR,IAAclS,EAASyC,WACTwP,MACQA,KACR,QAIlBE,EAAavP,GAAWd,EAAIe,KAEnB,iBAAkBG,GAAelB,EAAGqQ,EAAY,IAAK5Y,EAAUkT,OAAOC,MAAMC,IAAKpK,EAAiB,mBAEpF,MACC,GAErByP,GAAeI,KAAyBzP,KAClCwO,mBAGF,4BACA,oBACL,2BAA2BC,KAAK,OAAQtR,EAAKoC,SAASmP,OACtD,kBAAkBC,IAAI,KACfxR,EAAKoC,SAAS+C,gBAAgBlD,EAAI,SAChCjC,EAAKoC,SAAS+C,gBAAgBnD,MAGvC,kBAAkBwP,IAAI,CAACvB,IAAKjQ,EAAKoC,SAAS+C,gBAAgBlD,EAAI,OAC9D,kBAAkBwP,SAClB,kBAAkBA,aAGrB,KAGCjG,KADI5K,EAAaC,IACFgC,KACN2I,IACO3K,IACfuB,SAAWuO,GAAW9N,OACL2I,IACN1I,GAAWd,EAAIe,YAER,IAClBsO,mBAEE,oBACL,2BAA2BC,KAAK,OAAQtR,EAAKoC,SAASmP,OACtD,kBAAkBC,IAAI,KACfxR,EAAKoC,SAAS+C,gBAAgBlD,EAAI,SAChCjC,EAAKoC,SAAS+C,gBAAgBnD,MAGvC,kBAAkBwP,IAAI,CAACvB,IAAKjQ,EAAKoC,SAAS+C,gBAAgBlD,EAAI,OAC9D,kBAAkBwP,SAClB,kBAAkBA,cAGtB,aACGc,KAAK1P,EAAoB,GAAG,SAE/B,aACG0P,KAAK1P,EAAoB,GAAG,uBAIjB,SAAS2P,MACtBA,KACQ,eAAgB,GAIxBnD,EAAa,GAAG/U,GAAGgV,SAASrV,OAAQ,KAC/BwY,EAAcpD,EAAa,GAAG/U,GAAGgV,SAAS,MAC3C7V,EAAU2B,SAASqX,EAAa,mBACPA,EAAY9V,MAEZ,aAGJ,QAGXqD,EAAKoC,SAASqC,SACbsF,EAAiB/J,EAAKoC,SAAS9B,oBAEtC0B,EAAI4H,GAAe8I,OAAO1Q,KAC1BC,EAAI2H,GAAe8I,OAAOzQ,EAElCuQ,KACQ,oCAIM,cACE,MACf,IAAIxY,EAAI,EAAGA,EAz2BL,EAy2BsBA,IACzBqV,EAAarV,GAAGqG,SACFrG,GAAGqG,KAAKsS,aAAc,mBAK/B,SAASC,MAEH,IAAfxE,QAKCyE,EADAC,EAAU1W,KAAKoM,IAAI4F,SAGpBwE,GAAmBE,EAAU,MAI3B1Q,SAAWuO,GAAW9N,OACJ,IAEhB,eAAgBuL,IAh4Bb,GAk4BP0E,OACyB1E,IAA2B,EAAbA,IAn4BhC,EAAA,KAAA,OAs4BN,IAAIpU,EAAI,EAAGA,EAAI8Y,EAAS9Y,IACR,EAAboU,MACciB,EAAa9N,UACbwR,GAAmBF,UAGO,GAAK/P,GAAWd,EAAG6Q,EAAWvY,GAAGqC,SACnEwU,WAAW0B,EAAYhQ,EAAoBiQ,EAAU9Y,EAAI,EAAI,OAErDqV,EAAa1G,QACbqK,QAAQH,UAGiB/P,GAAWd,EAAG6Q,EAAWvY,GAAGqC,SAC7DwU,WAAW0B,EAAYhQ,EAAoBiQ,EAAU9Y,EAAI,EAAI,OAMvEgQ,IAAkD,IAAzB5N,KAAKoM,IAAI4F,IAAmB,KAEhD6E,EAAWtC,GAAWtD,IACvB4F,EAAS3S,mBAAqByJ,OACVkJ,EAAUtO,OACfsO,MACMA,OAMf,IAERC,wBAEYrQ,IAEV,6BAIC,SAASkP,OAEb1D,IAAoBnO,EAAS2Q,MAAO,KAChCsC,EAAgB1Z,EAAUgN,gBAC3BqH,KAA0BqF,MAChBxW,MAAMsT,IAAMkD,EAAgB,QACbA,IAExBpB,GAASxD,GAAmBvM,IAAMrH,OAAOyY,YAAc7E,GAAmBtM,IAAMtH,OAAO0Y,sBAGxErR,EAAIrH,OAAOyY,cACXnR,EAAItH,OAAO0Y,cAGrB1W,MAAMqT,OAASzB,GAAmBtM,EAAI,WAGrCD,EAAIhC,EAAKmP,WAAWgB,eACpBlO,EAAIjC,EAAKmP,WAAWmE,oBAIvBtR,EAAI2C,GAAc3C,EAAI5F,KAAK6G,MAAM0B,GAAc3C,EAAI9B,EAASqT,YAC5DtR,EAAI0C,GAAc1C,IAEba,GAAWd,EAAIe,MAExB,qBAGqBlI,IAAzBqS,EAAoC,SAE/BsG,EACAnT,EACAoT,EAEIzZ,EAAI,EAAGA,EAr9BT,EAq9B0BA,MACnBqV,EAAarV,OACNA,EAAIkT,GAAwBpK,GAAWd,EAAGwR,EAAOlZ,GAAGqC,SAE3DkG,EAAoB7I,EAAI,EAE9BkG,EAASyC,MAAyB,EAAjB5B,SACPH,EAAa6S,OAInB9C,GAAW8C,MAINrG,GAAoB/M,EAAKsS,cAAgBtS,EAAKoE,WAEjDiP,WAAWrT,KAEX8Q,WAAWqC,EAAQC,GAGf,IAANzZ,MACMoI,SAAW/B,IACX6S,oBAAmB,MAGvBP,aAAc,IAEK,IAAlBa,EAAO3S,OAA0B,GAAV4S,KAExBtC,WAAWqC,EAAQC,GAEzBpT,GAAQA,EAAKsO,eACOtO,EAAMsE,OACXtE,MACMA,OAIT,IAGL0J,EAAiB/J,EAAKoC,SAAS9B,qBAChCN,EAAKoC,SAASqC,aAGhBzC,EAAI4H,GAAe8I,OAAO1Q,KAC1BC,EAAI2H,GAAe8I,OAAOzQ,MAChB,MAGlB,UAEJjC,EAAKoC,SAAS+C,oBACX,kBAAkBqM,IAAI,KACfxR,EAAKoC,SAAS+C,gBAAgBlD,EAAI,SAChCjC,EAAKoC,SAAS+C,gBAAgBnD,MAGvC,kBAAkBwP,IAAI,KACfxR,EAAKoC,SAAS+C,gBAAgBlD,EAAI,cAM3C,SAASiD,EAAeyO,EAAaC,EAAO1M,EAAU2M,GASvDF,MACmB5J,KACJ/H,EAAI5F,KAAKoM,IAAImL,EAAY3R,GAAKuG,GAAWvG,KACzCC,EAAI7F,KAAKoM,IAAImL,EAAY1R,GAAKsG,GAAWtG,IACvC0B,GAAiB4E,SAGjCvD,EAAgBT,EAAoBW,GAAe,GACnDD,EAAgB,KAEC,IAAKD,EAAeC,EAAeC,KACnC,IAAKF,EAAeC,EAAeC,OAEpD5E,EAAmByJ,EACnB+J,EACGvL,GAAWvG,EADd8R,EAEGvL,GAAWtG,IAGNgD,GAEG,SAAXkC,EAAoB2F,GACT,IAARA,KACkB5H,KACNlD,EAAIiD,EAAcjD,KAClBC,EAAIgD,EAAchD,OAEXiD,EAAgB5E,GAAoBwM,EAAMxM,KACjD0B,GAAKiD,EAAcjD,EAAI8R,GAAsBhH,EAAMgH,KACnD7R,GAAKgD,EAAchD,EAAI6R,GAAsBhH,EAAMgH,GAG/DD,KACU/G,MAGgB,IAARA,GAGtB8G,IACc,eAAgB,EAAG,EAAGA,EAAO1M,GAAYzN,EAAUkT,OAAOoH,KAAKC,MAAO7M,KAE1E,QAsBb,MACC,MACG,GACR+D,GAAa,GACbC,GAAc,GACdX,GAAgB,GAChBb,GAAsB,GAEtBsK,GAAa,MACA,GAKb3B,GAAuB,EACvB4B,GAlkCO,CAAClS,EAAG,EAAGC,EAAG,GAmkCjBiK,GAAmB,EAYnBhJ,GA/kCO,CAAClB,EAAG,EAAGC,EAAG,MAAV,CAACD,EAAG,EAAGC,EAAG,GAmlCjBkS,GAnlCO,CAACnS,EAAG,EAAGC,EAAG,GAqmCjBmS,GAAsB,WACflG,QACWA,OACO,OA+BzBjG,GAAc,MAkCH,GACXgB,GAAW,GACXP,GAAiB,MAiTC,cAEVyF,QAIAxD,EAAYwD,GAAelU,UAEd,IAAd0Q,OAIazG,GAAGiK,GAAe,OAE5BnM,EAAIkC,GAAElC,EAAIkJ,GAAWlJ,KACrBC,EAAIiC,GAAEjC,EAAIiJ,GAAWjJ,EAExBsJ,IAA0B,EAAZZ,EAAe,OAGjB3I,EAAIkC,GAAElC,KACNC,EAAIiC,GAAEjC,GAGbe,GAAMhB,IAAMgB,GAAMf,GA1Zb,SAAS8B,EAAIC,UACnBD,EAAG/B,IAAMgC,EAAGhC,GAAK+B,EAAG9B,IAAM+B,EAAG/B,EAyZLoS,CAAelG,GAAe,GAAInK,aAI7CA,GAAImK,GAAe,IAE/BhI,SACe,IACR,2BAIPmO,EAhae,SAASvQ,EAAIC,aACzBhC,EAAI5F,KAAKoM,IAAIzE,EAAG/B,EAAIgC,EAAGhC,MACvBC,EAAI7F,KAAKoM,IAAIzE,EAAG9B,EAAI+B,EAAG/B,GAC3B7F,KAAKmY,KAAKC,GAAWxS,EAAIwS,GAAWxS,EAAIwS,GAAWvS,EAAIuS,GAAWvS,GA6ZhDwS,CAAyBvQ,GAAGF,IAE7CT,EAAYmR,GAAoBJ,GAGjC/Q,EAAYvD,EAAKoC,SAAS9B,iBAAmBN,EAAKoC,SAAS9B,iBAAmB,SACvD,OAItBqU,EAAe,EACfC,EAAehQ,IACfiQ,EAAehQ,OAEhBtB,EAAYqR,KAER1U,EAAS4U,eAAiB/J,IAAuBlH,GAAmB7D,EAAKoC,SAAS9B,iBAAkB,KAG/FyU,EAAU,GADEH,EAAerR,IACAqR,EAAe,OAE9BG,KACT,eAAgBA,OACL,OAGA,MADFH,EAAerR,GAAaqR,OAEzB,KAEPA,EAAeD,GAAgBC,EAAe,QAG5CC,EAAZtR,IAGY,MADFA,EAAYsR,IAAgC,EAAfD,QAE1B,KAEPC,EAAeF,EAAeC,GAG3CD,EAAe,MACC,GArZL,SAAS5Q,EAAIC,EAAIgR,KAC3BhT,EAAoB,IAAf+B,EAAG/B,EAAIgC,EAAGhC,KACfC,EAAoB,IAAf8B,EAAG9B,EAAI+B,EAAG/B,IA0ZCiC,GAAGF,GAAIkQ,OAGdlS,GAAKkS,GAAalS,EAAImS,GAAiBnS,KACvCC,GAAKiS,GAAajS,EAAIkS,GAAiBlS,IACpCkS,GAAkBD,OAEvBlS,EAAIqB,EAAoB,IAAKE,MAC7BtB,EAAIoB,EAAoB,IAAKE,MAEbwG,EAAZxG,IACEA,WAGd,KAIC0G,aAIDY,SACgB,EA3hBF,IA+hBVzO,KAAKoM,IAAIxF,GAAMhB,QACRA,GAAKmM,GAAe,GAAGnM,EAAImJ,GAAYnJ,GAhiBpC,IAmiBV5F,KAAKoM,IAAIxF,GAAMf,QACRA,GAAKkM,GAAe,GAAGlM,EAAIkJ,GAAYlJ,OAI1CD,EAAIkC,GAAElC,KACNC,EAAIiC,GAAEjC,EAGF,IAAZe,GAAMhB,GAAuB,IAAZgB,GAAMf,YAIR,MAAfgI,IAAsB/J,EAAS+U,qBA3eN,QAAvB/U,EAASgV,WAAuBnL,IAAmB/J,EAAKoC,SAAS9B,iBA4enD,IACE2B,GAAKe,GAAMf,KACbA,GAAKe,GAAMf,MAElBkT,EAAe7M,eAEM,IAClB,iBAAkB6M,KAETA,cA9chB,SAASC,EAAMpT,EAAGC,MACK,GAAhCmT,EAAOpH,GAA6B,KAC/BqH,EAAwB,EAApBpB,GAAWha,OAAaga,GAAW1S,QAAU,KACnDS,EAAIA,IACJC,EAAIA,KACKtB,KAAK0U,MACSD,IA8cX3T,IAAmByC,GAAElC,EAAGkC,GAAEjC,OAE/B,KACQjC,EAAKoC,SAASqC,OAEPyE,EAAqB,IAAKlG,QAEzB,IAAKA,MAEduF,gBAmMQ,eAExB+M,EACAC,EAGA1F,EAAI,iBACa,iBACF,kBACC,iBACD,wBACO,0BACE,6BACG,kBACX,uBACK,mBACJ,uBACI,SAASvM,KAEH,EAApB2Q,GAAWha,UACUwH,IAAoBuM,GAAyB,GAChDiG,GAAWA,GAAWha,OAAS,GAAGqJ,OAE/B7B,IAAoB2J,GACvBD,GAAY7H,MAE/BkS,gBAAgBlS,GAAQ4H,GAAW5H,GAAQiS,IAC3CE,cAAcnS,GAAQlH,KAAKoM,IAAIqH,EAAE2F,gBAAgBlS,IACxB,GAAxBuM,EAAE4F,cAAcnS,KACboS,eAAepS,GAAQuM,EAAE2F,gBAAgBlS,GAAQgS,IAEjDI,eAAepS,GAAQ,EAE1BlH,KAAKoM,IAAIqH,EAAE6F,eAAepS,IAAS,OAChCoS,eAAepS,GAAQ,KAG3BqS,cAAcrS,GAAQ,MACtBsS,qBAAqBtS,GAAQ,EAAIuM,EAAE8F,cAAcrS,KACjDuS,uBAAuBvS,GAAQ,iCAGN,SAASA,EAAMsQ,GACtC/D,EAAEiG,gBAAgBxS,KAEfiF,GAAWjF,GAAQsG,GAAexE,IAAI9B,KACnCyS,oBAAoBzS,GAAQsG,GAAexE,IAAI9B,GAE3CiF,GAAWjF,GAAQsG,GAAevK,IAAIiE,OAC1CyS,oBAAoBzS,GAAQsG,GAAevK,IAAIiE,SAGlBzI,IAAhCgV,EAAEkG,oBAAoBzS,OACnBqS,cAAcrS,GAAQ,KACtBsS,qBAAqBtS,GAAQ,EAAIuM,EAAE8F,cAAcrS,GAChDuM,EAAEmG,0BAA0B1S,GAAQ,QAEjCoS,eAAepS,GAAQ,IACvBwS,gBAAgBxS,IAAQ,IAEb,gBAAkBA,EAAMiF,GAAWjF,GAC5CuM,EAAEkG,oBAAoBzS,GACtBsQ,GAAS,IACTna,EAAUkT,OAAOoH,KAAKlH,IACtB,SAASoJ,MACM3S,GAAQ2S,iCAWtB,SAAS3S,GACtBuM,EAAEiG,gBAAgBxS,OAChBuS,uBAAuBvS,GAAQuM,EAAEgG,uBAAuBvS,IAASuM,EAAE8F,cAAcrS,GAC/EuM,EAAE+F,qBAAqBtS,GACvBuM,EAAE+F,qBAAqBtS,GAAQuM,EAAEqG,SAAW,MAE9CF,0BAA0B1S,GAAQlH,KAAKoM,IAAIqH,EAAE6F,eAAepS,GAAQuM,EAAEgG,uBAAuBvS,MAC7F6S,eAAe7S,GAAQuM,EAAE6F,eAAepS,GAAQuM,EAAEgG,uBAAuBvS,GAAQuM,EAAEqG,YAC1E5S,IAASuM,EAAEsG,eAAe7S,iBAKhC,cACNqD,GAAYyP,aACCA,QAAQlZ,IAAMsK,GAAWqI,EAAEwG,eAErCvJ,IAAMrL,MACNyU,SAAWrG,EAAE/C,IAAM+C,EAAEyG,UACrBA,QAAUzG,EAAE/C,MAEZyJ,oBAAoB,OACpBA,oBAAoB,YAIpBC,8BAA8B,OAC9BA,8BAA8B,KAE7B3G,EAAEmG,0BAA0BhU,EAAI,KAAQ6N,EAAEmG,0BAA0B/T,EAAI,eAG5DD,EAAI5F,KAAK6G,MAAMsF,GAAWvG,MAC1BC,EAAI7F,KAAK6G,MAAMsF,GAAWtG,eAGtB,oBAOxB4N,GAGX4G,GAAsB,SAASC,QAElBrK,oBAAoB,QAEZrM,EAAKoC,SAASqC,SAEtBsR,oBAAsB,KACtBD,gBAAkB,GAGxB1Z,KAAKoM,IAAIkO,EAAShB,eAAe1T,IAAM,KAAQ5F,KAAKoM,IAAIkO,EAAShB,eAAezT,IAAM,aAC5E+T,0BAA0BhU,EAAI0U,EAASV,0BAA0B/T,EAAI,IAGrEuU,8BAA8B,OAC9BA,8BAA8B,MAChC,IAIa,aACfF,QAAU7U,MACV4U,eAGbtJ,GAAgC,SAASjB,EAAaK,OAC9C+F,EAKAC,EAmBAC,KAvBAhM,QACuBvD,GAKR,UAAhBiJ,EAAyB,KACpB6K,EAAiBzL,GAAWlJ,EAAImJ,GAAYnJ,EAC5C4U,EAAkBzK,EAAiBsJ,cAAczT,EAAI,GA16B5C,GA86BV2U,IACEC,GAAwD,GAArCzK,EAAiBqJ,gBAAgBxT,MAExC,EACP2U,GAl7BG,KAm7BRC,GAAmBzK,EAAiBqJ,gBAAgBxT,GAAK,QAE9C,GAMjBmQ,QAEsBA,GAEE,KACCjS,EAASyC,KAAO5B,KAAiB,EAAI,KAC5C,GACP8B,GAAqB9B,SACPb,EAASyC,KAAO,EAAI5B,KAAiB,KAC5C,GAGbqR,IAAclS,EAASyC,WACTwP,MACQA,KACR,QAOlB0E,EAFAxE,EAAavP,GAAWd,EAAIe,GAC5B+T,EAAgB1a,KAAKoM,IAAI6J,EAAanP,GAAelB,YAGrDkQ,GAAeG,EAAanP,GAAelB,GAA0C,EAApCmK,EAAiBuJ,eAAe1T,KAId,EAA9C5F,KAAKoM,IAAI2D,EAAiBuJ,eAAe1T,GAC1D8U,EAAgB1a,KAAKoM,IAAI2D,EAAiBuJ,eAAe1T,GACzD,MAEiB5F,KAAKgJ,IAAIyR,EAAoB,KAC7Bza,KAAKiD,IAAIwX,EAAoB,MAP7B,IAUtBvE,KAAyBzP,OACV,OAGK,IAEhB,yBACL,kBAAkB4I,SAClB,kBAAkBA,SAEP,aAAcvI,GAAelB,EAAGqQ,EAAYwE,EAAoBpd,EAAUkT,OAAOC,MAAMC,IAChGpK,EACA,mBAE2B,MACC,GAErByP,GAAeI,KAAyBzP,KAClCwO,mBAGF,4BACA,+BACL,2BAA2BC,KAAK,OAAQtR,EAAKoC,SAASmP,OACtD,kBAAkBC,IAAI,KACfxR,EAAKoC,SAAS+C,gBAAgBlD,EAAI,SAChCjC,EAAKoC,SAAS+C,gBAAgBnD,MAGvC,kBAAkBwP,IAAI,CAACvB,IAAKjQ,EAAKoC,SAAS+C,gBAAgBlD,EAAI,OAC9D,kBAAkBwP,SAClB,kBAAkBA,SAIzBS,KACMb,gBAAe,GAGjBa,GAGXwC,GAAsB,SAASqC,UACpB,IAA2BA,EAAkBlT,MAIjC,eACfqB,EAAgB6E,EAChB6K,EAAehQ,IACfiQ,EAAehQ,IAEhBkF,EAAiB6K,IACAA,EACOC,EAAjB9K,MACU8K,OAIhB1N,EACA6P,EAAiBtK,UAElB1B,KAAoBiD,KAAiBlD,IAAuBhB,EAAiB6K,IAEvErI,SAINvB,OACY,SAAS8B,MAXN,EAYqBkK,GAAkBlK,EAAMkK,OAI1DC,OAAO/R,EAAe,EAAG,IAAKzL,EAAUkT,OAAOC,MAAMC,IAAK1F,KATpD,GA+YA,SAAf+P,GAAwBrW,EAAOR,EAAM8W,EAASC,EAAKC,EAAkBC,GAE9DjX,EAAKkX,WAILH,MAEMI,eAAgB,KACPnX,EAAM+W,EAAM/W,IAASL,EAAKoC,UAAYD,MAE5CsV,YAAYL,GAEjBE,cACY,WACJjX,GAAQA,EAAKqX,QAAUrX,EAAKsX,gBACtBA,YAAYhb,MAAM6S,QAAU,SAC5BmI,YAAc,OAExB,MAKC,SAAhBC,GAAyBvX,GAIJ,SAAb+G,MACKyQ,SAAU,IACVH,QAAS,EAEXrX,EAAKyX,eACCA,aAAazX,KAEb+W,IAAM,OAEXW,OAASX,EAAIY,QAAU,OACrB,OAbLH,SAAU,IACVH,QAAS,MACVN,EAAM/W,EAAK+W,IAAM3d,EAAUiD,SAAS,YAAa,gBAajDqb,OAAS3Q,IACT4Q,QAAU,aACLT,WAAY,SAIjBhG,IAAMlR,EAAKkR,IAER6F,EAEM,SAAjBa,GAA0B5X,EAAM6X,MACzB7X,EAAKkR,KAAOlR,EAAKkX,WAAalX,EAAKsO,iBAE/BuJ,MACMvJ,UAAUwJ,UAAY,MAG1BxJ,UAAUwJ,UAAYjY,EAASkY,SAASjd,QAAQ,QAASkF,EAAKkR,MAC5D,EAwBK,SAApB8G,QAEOC,GAAoBre,OAAQ,SACvBse,EAEIve,EAAI,EAAGA,EAAIse,GAAoBre,OAAQD,OAChCse,GAAoBte,IACnBwZ,OAAO3S,QAAU0X,EAAS1X,UACrB0X,EAAS1X,MAAO0X,EAASlY,KAAMkY,EAASpB,QAASoB,EAASnB,IAAK,EAAOmB,EAASC,qBAG9E,MA/dlB,WAAY,eACT,cAEG,WAGU,SAAhBC,EAAyBC,EAAMC,EAAMC,EAAMC,EAAIC,MAC7BJ,EAAOC,KACRD,EAAOE,KACRF,EAAOG,KACpBC,EACoBJ,EAAOI,EAEP,OAIJpN,GAAUrO,eACNqO,GAAU1O,WAEvBA,OAAQ,GAGnB4L,GACItL,UAAUC,iBACK,UAAW,OAAQ,OAAQ,KAAM,YAGjC,YAAa,OAAQ,OAAQ,KAAM,UAE/CmO,GAAU1O,SACF,QAAS,QAAS,OAAQ,MAAO,cAC1B,KAEP,QAAS,OAAQ,OAAQ,QAG3BsQ,GAAiB,IAAMC,GAAgB,IAAMC,KAC/CuL,GAEXnQ,KAAyB6E,QACyB,EAA3BnQ,UAAU0b,gBAAqD,EAA7B1b,UAAU2b,oBAGjEC,kBAAoBzL,KAEJsL,IAAmBI,IACnB7L,IAAkB8L,IAClB7L,IAAiB8L,EAEnC7L,OACsBA,IAAoBmE,EAAqBpE,KAI/D7B,GAAU1O,WACM,gBACE,uBACIsc,UAAY3H,EAAqBoH,MACjCQ,UAAY5H,EAAqBrE,MACjCkM,QAAU7H,EAAqBpE,KAGpDE,OAES3D,gBAAiB,WAsBtCgI,GAwLA2H,GAGAC,GACAtP,GAWAuG,GACA5P,GAvMA4Y,GAAc,SAAStZ,EAAM+W,EAAKvK,EAAK+M,OAW/BC,EATD/H,iBACcA,WAGK,EAMnBzR,EAAKyZ,iBACUzZ,EAAKyZ,gBACdA,cAAgB,QAEP5Z,EAAS6Z,kBAAoB7Z,EAAS6Z,iBAAiBlX,GAKxD,SAAbuE,MACe,eACXyF,KAQKxT,SAAS2gB,gBAAgB,WACzBpY,GAAGoY,gBAAgB,WACtB3gB,GAAU4gB,OAAOC,WAAW,WAC5B7gB,GAAU4gB,OAAOE,YAAY,iCAVf,GACb/C,MACKza,MAAM6S,QAAU,WAEdnL,SAAShL,EAAU,uBACtB,eAAiBwT,EAAM,SAAW,WAQ1C+M,WAGmB,MArBtBQ,EAAWvN,EAAM3M,EAASqQ,sBAAwBrQ,EAASoQ,0BAyB3D8J,IAAaP,QAAiChf,IAAlBgf,EAAY7X,WAEjC,eAAiB6K,EAAM,MAAQ,SAErBxM,EAAKC,mBACNiI,GAAYlI,EAAK8E,wBAGxBxI,MAAMgF,QAAUkL,EAAM,EAAI,IACnB,QAEbuN,aACY,gBAERA,YAUHC,EAAAA,GAAkBra,EAAKoC,SAASmP,KAAOvR,EAAKoC,SAASmV,WAAarX,EAAS+Q,gBAG5E5Q,EAAKia,YACCA,QAAQ3d,MAAM4d,yBAA2B,UAG9C1N,MACiBgN,EAAY/U,EAAIzE,EAAKyE,KAC3B9C,EAAI6X,EAAY7X,KAChBC,EAAI4X,EAAY5X,EAAI2L,KAE1ByM,EAAiB,WAAa,MAAM1d,MAAMgF,QAAU,WAIrC,eAErBkL,KACWsN,YAAY9gB,EAAU,qBAIjCghB,IACIxN,IACC,SAAuDxT,EAAU,oCAEtD,aACGgL,SAAShL,EAAU,2BAC3BA,GAAU4gB,OAAO5V,SAAS,8BAC7B,QAIU9E,WAAW,gBAErB,eAAiBsN,EAAM,MAAQ,OAElCA,EAqBG,KAEC3H,EAAgB2U,EAAY/U,EAAIzE,EAAKyE,EACrCgP,EACOvL,GAAWvG,EADlB8R,EAEOvL,GAAWtG,EAElB3B,EAAmByJ,EACnByQ,EAAkB9N,GAClBvF,EAAW,SAAS2F,GACL,IAARA,KACkB5H,KACNlD,EAAI6X,EAAY7X,KAChBC,EAAI4X,EAAY5X,EAAI6L,QAEb5I,EAAgB5E,GAAoBwM,EAAMxM,KACjD0B,GAAK6X,EAAY7X,EAAI8R,GAAsBhH,EAAMgH,KACjD7R,GAAK4X,EAAY5X,EAAI6L,GAAwBgG,GAAsBhH,EAAMgH,GAIrFuG,KACU1d,MAAMgF,QAAU,EAAImL,IAC3BzT,GAAU4gB,OAAOzI,IAAI,SACV,OAGGgJ,EAAkB1N,EAAM0N,MAOvC,MACYjb,WAAW6H,EAAY,YAjD/B/G,EAAKC,mBACNiI,GAAYlI,EAAK8E,wBAEjB,GAEbkV,KACU1d,MAAMgF,QAAU,IACvBtI,GAAU4gB,OAAOzI,IAAI,SACV,OAGG,MAECjS,WAAW6H,EAAYgT,EAAW,KAwC5DvN,EAAM,GAAK,KAkBtB4N,GAAmB,GACnBnC,GAAsB,GAGtBoC,GAA4B,OACjB,WACG,iIACe,UAChB,CAAC,EAAG,iBACE,kBACJjB,GAAOxf,SAkCtByK,GAAqB,SAASrE,EAAMsa,EAAcpX,OAE3ClD,EAAKkR,KAAQlR,EAAKkX,mBAyDZzS,EAAIzE,EAAKyP,EAAI,IACbxP,iBAAmBD,EAAKgC,SAAW,IACnCoC,OAvFF,QACK,CAACzC,EAAG,EAAGC,EAAG,OACb,CAACD,EAAG,EAAGC,EAAG,OACV,CAACD,EAAG,EAAGC,EAAG,MAqFVkD,gBAAkB9E,EAAKoE,OAAOiO,OAG5BrS,EAAKoE,WA9DRmW,GAAarX,KAEdqX,IACKva,EAAKwa,OACkB,IAApBC,EAAEngB,QAAQoV,UACJ8K,KAAO,CAAC5K,IAAK,EAAG8K,OAAQ,EAAGpL,KAAM,GAAIqL,MAAO,MAE5CH,KAAO,CAAC5K,IAAK,EAAG8K,OAAQ,EAAGpL,KAAM,EAAGqL,MAAO,MAIjD,sBAAuB3a,OAGjB2B,EAAI2Y,EAAa3Y,EAAI3B,EAAKwa,KAAKlL,KAAOtP,EAAKwa,KAAKG,SAChD/Y,EAAI0Y,EAAa1Y,EAAI5B,EAAKwa,KAAK5K,IAAM5P,EAAKwa,KAAKE,OAE7DH,EAAW,KACNK,EAASR,GAAiBzY,EAAI3B,EAAKyE,EACnCoW,EAAST,GAAiBxY,EAAI5B,EAAKyP,IAElCzN,SAAW4Y,EAASC,EAASD,EAASC,MAGvChG,EAAYhV,EAASgV,UAER,SAAdA,IACa,EACQ,QAAdA,MACM7U,EAAKgC,UAGN,EAAZkB,MACa,KAGXjD,iBAAmBiD,EAEpBlD,EAAKoE,WAEAA,OArEV,QACK,CAACzC,EAAG,EAAGC,EAAG,OACb,CAACD,EAAG,EAAGC,EAAG,OACV,CAACD,EAAG,EAAGC,EAAG,YAsEXsB,GAnEoB,SAASlD,EAAM8a,EAAiBC,OACxD3W,EAASpE,EAAKoE,SAGXiO,OAAO1Q,EAAI5F,KAAK6G,OAAOwX,GAAiBzY,EAAImZ,GAAmB,GAAK9a,EAAKwa,KAAKlL,OAC9E+C,OAAOzQ,EAAI7F,KAAK6G,OAAOwX,GAAiBxY,EAAImZ,GAAmB,GAAK/a,EAAKwa,KAAK5K,MAG9E5Q,IAAI2C,EAAKmZ,EAAkBV,GAAiBzY,EAC/C5F,KAAK6G,MAAMwX,GAAiBzY,EAAImZ,GAAmB9a,EAAKwa,KAAKlL,KAC7DlL,EAAOiO,OAAO1Q,IAEX3C,IAAI4C,EAAKmZ,EAAkBX,GAAiBxY,EAC/C7F,KAAK6G,MAAMwX,GAAiBxY,EAAImZ,GAAmB/a,EAAKwa,KAAK5K,IAC7DxL,EAAOiO,OAAOzQ,IAGXmD,IAAIpD,EAAKmZ,EAAkBV,GAAiBzY,EAAK3B,EAAKwa,KAAKlL,KAAOlL,EAAOiO,OAAO1Q,IAChFoD,IAAInD,EAAKmZ,EAAkBX,GAAiBxY,EAAK5B,EAAKwa,KAAK5K,IAAMxL,EAAOiO,OAAOzQ,GAqDpD5B,EAAMA,EAAKyE,EAAIvB,EAAWlD,EAAKyP,EAAIvM,GAE9DqX,GAAarX,IAAclD,EAAKC,qBAC1B6E,gBAAkB9E,EAAKoE,OAAOiO,QAGhCrS,EAAKoE,gBA2EpB4W,GAAgB,SAAShb,EAAM+W,EAAKkE,MAC5Bjb,EAAKkR,OAIL6F,GACM/W,EAAKsO,UAAU4M,cAGrBzW,EAAIwW,EAASjb,EAAKyE,EAAI1I,KAAK6G,MAAM5C,EAAKyE,EAAIzE,EAAKgC,UAC/CyN,EAAIwL,EAASjb,EAAKyP,EAAI1T,KAAK6G,MAAM5C,EAAKyP,EAAIzP,EAAKgC,UAEhDhC,EAAKsX,cAAgBtX,EAAKqX,WACpBC,YAAYhb,MAAMoT,MAAQjL,EAAI,OAC9B6S,YAAYhb,MAAMqT,OAASF,EAAI,QAGpCnT,MAAMoT,MAAQjL,EAAI,OAClBnI,MAAMqT,OAASF,EAAI,OAgSP,SAApB0L,GAA6BC,EAAW9P,EAAcE,OAC9CvG,EAAI/K,SAASmhB,YAAY,eACzBC,EAAU,WACKF,SACHA,EAAU/hB,oBACJiS,cACDE,GAAe,WAGlC+P,gBAAgB,WAAW,GAAM,EAAMD,KAC/BjiB,OAAOmiB,cAAcvW,KAzRvB,aAAc,eAEX,cAEG,SAASzE,KACXD,EAAaC,OACjBR,EAAOsQ,GAAW9P,GAElBR,KAAUA,EAAKqX,SAAUrX,EAAKwX,SAAazK,OAIxC,cAAevM,EAAOR,GAEzBA,EAAKkR,QAIKlR,oBAEF,aACFI,OAAOP,EAAUwa,IAA2B,KACjDnhB,MAAQkgB,GAASlgB,KACTyG,EAAK8b,aACH5b,EAAS6b,gBAShB,eAAgB,SAASvQ,OAMzBxR,EAJAkK,EAAIhE,EAAS8b,QACbC,EAAkB,OAATzQ,GAAgC,GAARA,EACjC0Q,EAAgB9f,KAAKgJ,IAAIlB,EAAE,GAAInD,MAC/Bob,EAAe/f,KAAKgJ,IAAIlB,EAAE,GAAInD,UAG9B/G,EAAI,EAAGA,IAAMiiB,EAASE,EAAeD,GAAgBliB,MAChDoiB,aAAavZ,EAAoB7I,OAEtCA,EAAI,EAAGA,IAAMiiB,EAASC,EAAgBC,GAAeniB,MAChDoiB,aAAavZ,EAAoB7I,OAItC,gBAAiB,aAChBoI,SAAS0X,cAAgB5Z,EAAS6Z,kBAAoB7Z,EAAS6Z,iBAAiBlX,OAGjF,yBAA0BwV,MAC1B,mBAAoBA,MAEpB,UAAW,mBACXhY,EACIrG,EAAI,EAAGA,EAAIyf,GAAOxf,OAAQD,OACvByf,GAAOzf,IAEN2U,cACCA,UAAY,MAElBtO,EAAKsX,gBACCA,YAAc,MAEpBtX,EAAK+W,QACCA,IAAM,MAEZ/W,EAAKgc,cACCA,UAAY,MAElBhc,EAAKkX,cACCG,OAASrX,EAAKkX,WAAY,MAGjB,kBAInB,SAAS1W,UACJ,GAATA,SAC0BhG,IAAlB4e,GAAO5Y,IAAuB4Y,GAAO5Y,yBAK/B,kBAWVX,EAASoc,0BAA4B7O,IAAsBvN,EAASoE,WAA4B,KAAfiY,OAAOxM,kBAIvF,SAASyD,EAAQ3S,GAEtBX,EAASyC,SACA/B,EAAaC,QAGrBoS,EAAWjT,EAAK8b,UAAUtI,EAAO3S,OAClCoS,MACUtE,UAAY,UAIrByI,EADA/W,EAAOL,EAAK8b,UAAUjb,MAGtBR,KAMG,cAAeQ,EAAOR,KAEtBQ,MAAQA,MAIXsW,KAHG9W,KAAOA,GAGKsO,UAAYlV,EAAUiD,SAAS,uBAE9C2D,EAAKkR,KAAOlR,EAAKmc,OACdnc,EAAKmc,KAAKrc,UACDsX,YAAYpX,EAAKmc,QAEjBrE,UAAY9X,EAAKmc,SAIlBnc,MAEIA,EAAMsE,KAEtBtE,EAAKkR,KAAQlR,EAAKkX,WAAclX,EAAKqX,OAsF9BrX,EAAKkR,MAAQlR,EAAKkX,eAElB9d,EAAUiD,SAAS,YAAa,QAClCC,MAAMgF,QAAU,IAChB4P,IAAMlR,EAAKkR,OACDlR,EAAM+W,MACPvW,EAAOR,EAAM8W,EAASC,QA5FS,MAEvCU,aAAe,SAASzX,MAGrB2M,MAKDwG,GAAUA,EAAO3S,QAAUA,EAAO,IAC9BoX,GAAe5X,GAAM,YACfyX,aAAezX,EAAK+W,IAAM,QACZ/W,EAAMsE,OACLtE,QAEjBmT,EAAO3S,QAAUgC,KAEXqQ,sBAIT7S,EAAKmX,eAeDpN,IAAuB/J,EAAKsX,gBACvBA,YAAYhb,MAAM6S,QAAU,SAC5BmI,YAAc,MAhBpBjM,GAAUwD,YAAc9I,IAAwBgE,OAC3BzJ,KAAK,MACfN,UACG8W,MACJ9W,EAAK+W,UACHvW,SACC2S,oBACU,OAGT3S,EAAOR,EAAM8W,EAAS9W,EAAK+W,IAAKhR,GAA6C,KAWjG0R,aAAe,OACfV,IAAM,OAEJ,oBAAqBvW,EAAOR,KAGpC5G,EAAU+C,SAAS0S,UAAW,KAEzBuN,EAAuB,sCACFpc,EAAKqc,KAAO,GAAK,qCAEtC/E,EAAcle,EAAUiD,SAAS+f,EAAsBpc,EAAKqc,KAAO,MAAQ,IAC5Erc,EAAKqc,SACQnL,IAAMlR,EAAKqc,SAGbrc,EAAMsX,KAEZF,YAAYE,KACfA,YAAcA,EAInBtX,EAAKwX,YACSxX,GAGfL,EAAK2c,yBAEAjD,IAAsBhO,GAAUwD,aACZvO,KAAK,MACfN,UACG8W,MACJ9W,EAAK+W,UACHvW,SACC2S,OAGC3S,EAAOR,EAAM8W,EAAS9W,EAAK+W,IAAK,GAAM,IAa3DsC,IAAsB7Y,IAAUgC,KAIZxC,OAHI8W,EAAQxa,SACpB0D,EAAO+W,GAAO/W,EAAK+W,QAK5B9c,GAAG6d,UAAY,KACf7d,GAAGmd,YAAYN,UAhIX7c,GAAG6d,UAAY,eAmIlB,SAAS9X,GACdA,EAAK+W,QACCA,IAAIW,OAAS1X,EAAK+W,IAAIY,QAAU,QAEpCN,OAASrX,EAAKwX,QAAUxX,EAAK+W,IAAM/W,EAAKmX,eAAgB,UAgBrEoF,GACAC,GAAkB,KAcN,MAAO,eACJ,SACF,aACG,kBAAmB7c,EAAK8c,cACxB,eAAgB9c,EAAK+c,gBACrB,UAAW,cACG,MACP,mBAGP,SAAShR,GACK,EAAnBA,EAAU9R,sBACI2iB,OACF,oBAGL,SAAStX,EAAGqG,MAClBA,IAIAzF,KAAW+E,KAAkB6D,GAAgB,KACzCkO,EAAKrR,KACNiR,kBACcA,OACF,KApxDT,SAASK,EAAQC,UACxB9gB,KAAKoM,IAAIyU,EAAOjb,EAAIkb,EAAOlb,GA7oClB,IA6oC4C5F,KAAKoM,IAAIyU,EAAOhb,EAAIib,EAAOjb,GA7oCvE,GAm6FDkb,CAAgBH,EAAIH,mBACZ,YAAaG,MAKH,UAAtBrR,EAAahS,oBACM2L,EAAGqG,EAAc,YAMjB,WAFDrG,EAAE5L,OAAOyG,QAAQvB,eAEJnF,EAAU2B,SAASkK,EAAE5L,OAAQ,mCACzC4L,EAAGqG,KAITkR,GAAiBG,MAEtBzd,WAAW,cACA+F,EAAGqG,MACV,MACZ,YA+bTlL,OAAOT,EAAMU,IChqHE,SAAvB0c,EAAgCC,EAAM5jB,GAgFnB,SAAjB6jB,EAA0BhY,MACnBiY,SACQ,IAGPjY,GAAK3K,OAAOqX,MAEb9R,EAASsd,YAActd,EAASoE,YAAcmZ,eAM7CC,EAEAC,EADAC,GAFStY,EAAE5L,QAAU4L,EAAEuY,YAEDhW,aAAa,UAAY,GAG3C7N,EAAI,EAAGA,EAAI8jB,EAAY7jB,OAAQD,OACvB8jB,EAAY9jB,IACX+jB,QAA4D,EAAnDH,EAAa9V,QAAQ,SAAW4V,EAAUnd,UAClDwd,WACF,MAKbJ,EAAO,CACHrY,EAAEgB,mBACCA,qBAEc,MAQhB0X,EAAWvkB,EAAU+C,SAAS2B,aAAe,IAAM,GAC5BoB,WAAW,cACd,GACrBye,IAOQ,SAAnBC,EAA4B3jB,EAAI4jB,EAAOC,MACxBA,EAAM,MAAQ,UAAY,SAAS7jB,EAAI,SAAW4jB,GAKhD,iBACTE,EAA4C,IAA7Ble,EAAS6b,gBAEzBqC,IAAgBC,MACEC,EAAW,gBAAiBF,KACvBA,GAGL,SAAzBG,MACqBC,EAAa,sBAAuBC,GAErC,SAApBC,cAEyBD,MAUPtE,YAAYqE,EAAa,yCACxB,WACJC,QAGJ,sBAXQ,WACHA,KACUpa,SAASma,EAAa,+BAErC,KAUHC,QAGG,EAGQ,SAAnBE,EAA4BrZ,OAEpB5L,KADA4L,GAAK3K,OAAOqX,OACDtY,QAAU4L,EAAEuY,oBAEtBe,MAAM,iBAAkBtZ,EAAG5L,KAE5BA,EAAOmlB,SAIRnlB,EAAOolB,aAAa,qBAIhBC,KAAKrlB,EAAOmlB,KAAM,aAAc,2FAElClkB,OAAO4hB,OAASngB,KAAK6G,MAAMsZ,OAAOxM,MAAQ,EAAI,KAAO,MAEtD0O,QAIG,IAmCM,SAAjBO,EAA0BtlB,OAClB,IAAIM,EAAI,EAAGA,EAAIkG,EAAS+e,eAAehlB,OAAQD,OAC5CP,EAAU2B,SAAS1B,EAAQ,SAAWwG,EAAS+e,eAAejlB,WACtD,EAcG,SAAtBklB,EAA+B5Z,OAEvB6Z,KADA7Z,GAAQ3K,OAAOqX,OACNoN,eAAiB9Z,EAAE+Z,UAC5BF,GAA0B,SAAlBA,EAAKG,wBACAC,KACAhgB,WAAW,aACjBigB,SAAQ,IACZtf,EAASuf,oBA4DD,SAAnBC,EAA4Brf,OACpBsf,EAAMtf,EAAKwa,SA3LPwC,EAAKnE,mBAAqBhZ,EAASoE,WAAaiY,OAAOxM,MAAQ7P,EAAS0f,iBA6LnD,KAErBC,EAAO3f,EAAS4f,YACjB5f,EAAS6f,WAA6B,SAAhBF,EAAK9E,UACtBiF,OACwBvmB,EAAUiD,SAAS,sCACrB+a,YAAYhe,EAAUiD,SAAS,4BAC3CujB,aAAaD,EAAuBE,KACpC7b,SAASia,EAAW,kBAE/Bpe,EAASigB,iBAAiB9f,EAAM2f,GAAuB,GAAO,KAEzDI,EAAcJ,EAAsB1M,eACpCyH,OAAShd,SAASqiB,EAAa,KAAO,UAEtCrF,OAAS8E,EAAK5P,WAGlB8K,OAAyB,SAAhB8E,EAAK9E,OAAoB,EAAI8E,EAAK9E,SAI/C9K,IAAM4P,EAAK5P,WAEXA,IAAM0P,EAAI5E,OAAS,EA+HZ,SAAnBsF,IAK+B,SAA3BC,EAAoCC,MAChCA,UAIAC,EAAID,EAAUtmB,OACVD,EAAI,EAAGA,EAAIwmB,EAAGxmB,IAAK,GAChBumB,EAAUvmB,KACLqG,EAAK5F,cAEb,IAAIiE,EAAI,EAAGA,EAAIof,EAAY7jB,OAAQyE,MACvBof,EAAYpf,IAE2B,EAAhD+hB,EAAU3Y,QAAQ,SAAW4V,EAAUnd,QAEnCL,EAASwd,EAAUgD,WAERvG,YAAY9Z,EAAM,2BACzBqd,EAAUiD,UACCA,OAAOtgB,MAKXgE,SAAShE,EAAM,iCA5BzCA,EACAogB,EACA/C,IAiCqBY,EAAUhP,cAE/BsR,EAASnnB,EAAUwV,gBAAgBqP,EAAW,iBAC/CsC,KAC0BA,EAAOtR,cArfpCuR,EACAvC,EACA4B,EACAF,EACAc,EACAC,EACAvC,EAEAwC,EACAvD,EACAzc,EAEAigB,EACAC,EACAC,EAEA9C,EAEAne,EAsDAqd,EA8JA6D,EACA7B,EA1OA/O,EAAKvQ,KACLohB,GAAoB,EACpBC,GAAmB,EAQnB7C,GAAoB,EAYpB8C,EAAoB,UACN,CAACtR,IAAK,GAAI8K,OAAQ,mBACZ,CAAC,OAAQ,UAAW,YAAa,KAAM,sBAC3C,sBACO,0BACI,qBAEL,SAAS1a,EAAM0f,UACzB1f,EAAKmhB,SAIClS,SAAS,GAAG6I,UAAY9X,EAAKmhB,OAChC,MAJOlS,SAAS,GAAG6I,UAAY,IAC3B,aAMN,aACE,gBACG,UACN,WACC,aACE,WACF,eACI,cAED,uBACS,2BAEI,eAEX,CACV,CAAC7Y,GAAI,WAAYmiB,MAAO,oBAAqBC,IAAK,wDAClD,CAACpiB,GAAI,UAAWmiB,MAAO,QAASC,IAAK,8DACrC,IACQ,YAAaD,MAAO,SAAUC,IAAK,oGAG3C,CAACpiB,GAAI,WAAYmiB,MAAO,iBAAkBC,IAAK,oBAAqBC,UAAU,wBAE7D,kBACVtE,EAAKjb,SAASmP,KAAO,uBAEZ,kBACT5W,OAAOinB,SAAS/C,sBAEV,kBACNxB,EAAKjb,SAASof,OAAS,sBAGf,uBACD,MAyHtBK,EAAmB,mBAEXC,EAEAC,EACAC,EACAC,EALAC,EAAiB,GAObloB,EAAI,EAAGA,EAAIkG,EAASiiB,aAAaloB,OAAQD,MAC3BkG,EAASiiB,aAAanoB,KAE5BkG,EAASkiB,oBAAoBN,KAC9B5hB,EAASmiB,mBAAmBP,KAC1B5hB,EAASoiB,gBAAgBR,MAOpB,YALPA,EAAgBJ,IAAIvmB,QAAQ,UAAWonB,mBAAmBP,IAChE7mB,QAAQ,gBAAiBonB,mBAAmBR,IAC5C5mB,QAAQ,oBAAqB4mB,GAC7B5mB,QAAQ,WAAYonB,mBAAmBN,IAED,yCACdH,EAAgBxiB,GAAK,KAC7CwiB,EAAgBH,SAAW,WAAa,IAAM,IAC/CG,EAAgBL,MAAQ,OAEzBvhB,EAASsiB,wBACStiB,EAASsiB,oBAAoBV,EAAiBI,MAG3D5S,SAAS,GAAG6I,UAAY+J,IACxB5S,SAAS,GAAGmT,QAAU9D,GAYtC+D,EAAiB,EACjBC,EAAmB,wBACFpD,KACI,EACd9B,KACI+B,SAAQ,IAgEnBoD,EAA0B,SAASnX,GAC5ByV,IAA4BzV,MACVwV,EAAmB,qBAAsBxV,KAChCA,IAiFlCqS,EAAc,CACd,MACU,iBACE,mBACA,SAASxjB,KACOA,IAG5B,MACU,qBACE,iBACA,SAASA,KACCA,SAEX,iBAIX,MACU,uBACE,iBACA,SAASA,KACEA,SAEZ,uBAUD,iBACE,mBACA,SAASA,KACKA,IAG1B,MACU,uBACE,gBACD+iB,EAAK9Q,OAEhB,MACU,6BACE,gBACD8Q,EAAKwF,MAEhB,MACU,8BACE,gBACDxF,EAAKpD,MAEhB,MACU,oBACE,qBACD,WACA4G,EAAciC,iBACCC,SAEAC,UAI1B,MACU,mBACE,qBACA,SAAS1oB,KACOA,OAkD7BmW,KAAO,aAGIhQ,OAAO4c,EAAK7jB,QAAS+nB,GAAmB,KAGvClE,EAAK7jB,UAGJC,EAAUwV,gBAAgBoO,EAAKlO,WAAY,cAG7CkO,EAAK4F,OAnKsB,eAY7BC,IATI,iBAAkB,SAASpW,GAC5BwU,GAAoBxU,EAAM,MACtBqW,gBACI7B,GAA2B,KAAPxU,KACxBsW,mBAMH,eAAgB,SAAStW,GAC1BwU,GAAoBxU,EAAM,MACtBqW,kBACmB,GAChBD,IAAwB5B,GAA0B,GAANxU,KAC/CsW,mBAIH,mBAAoB,eACF,KACK9B,KACpB8B,sBA+IP,eAAgB5S,EAAGhM,UAGnB,YAAa,SAAS6e,QAUtB,mBAAoB,SAAS/d,EAAGoC,EAAQ4b,OACxCjc,EAAI/B,EAAE5L,QAAU4L,EAAEuY,WAElBxW,GACAA,EAAEQ,aAAa,WAAuC,EAA3BvC,EAAE3L,KAAKmO,QAAQ,WACM,EAA/CT,EAAEQ,aAAa,SAASC,QAAQ,cAAqB,qBAAsBzM,KAAKgM,EAAElH,cAExEwH,SAAU,OAKrB,aAAc,aACR3M,KAAKsjB,EAAW,gBAAiBhB,KACjCtiB,KAAKqiB,EAAKlO,WAAY,UAAWqB,EAAG+S,aAE1ClG,EAAKnE,qBACKle,KAAKqiB,EAAKlO,WAAY,YAAaqB,EAAGgT,iBAKhD,eAAgB,WAChB/E,OAID2C,iBACeA,KAERvnB,OAAOU,SAAU,WAAY2kB,KAC7BrlB,OAAOU,SAAU,YAAaooB,KAC9B9oB,OAAOykB,EAAW,gBAAiBhB,KACnCzjB,OAAOwjB,EAAKlO,WAAY,UAAWqB,EAAG+S,eACtC1pB,OAAOwjB,EAAKlO,WAAY,YAAaqB,EAAGgT,aAE/C3C,MACWhnB,OAAOU,SAAUsmB,EAAc4C,OAAQjT,EAAGkT,kBACjD7C,EAAciC,mBACJvS,sBAAwB,IACnBwS,UAEF,UAKhB,UAAW,WACZ7iB,EAAS6f,YACLC,KACW2D,YAAY3D,KAEhB7F,YAAY+F,EAAmB,yBAG1C1B,MACalP,SAAS,GAAGmT,QAAU,QAE5BtI,YAAYmE,EAAW,0BACvBja,SAASia,EAAW,sBAC3BkB,SAAQ,KAGXtf,EAASoQ,yBACC6J,YAAYmE,EAAW,sBAE7B,gBAAiB,WAClBpe,EAASoQ,yBACE6J,YAAYmE,EAAW,wBAGjC,iBAAkB,aACZja,SAASia,EAAW,wBAG1B,sBAAuBoB,OAI5Bxf,EAAS0jB,SAAW7C,GAAgBvC,OACf,OApRjBte,EAASsd,cACA,YAAa,aAEPxiB,KAAKT,SAAU,YAAaooB,KAC5B3nB,KAAKT,SAAU,WAAY2kB,KAErBxN,YAAY,WAEF,WACf8N,SAAQ,IAEhBtf,EAASsd,WAAa,KAnG9Btd,EAAS2jB,eAAiBpqB,EAAU+C,SAAS2B,kBACxC0iB,GACgBrQ,EAAGsT,uBAGT9oB,KAAKT,SAAUsmB,EAAc4C,OAAQjT,EAAGkT,oBAC/CA,qBACOrf,SAASgZ,EAAKhkB,SAAU,wBAExB8gB,YAAYkD,EAAKhkB,SAAU,sBAM1C6G,EAAS6jB,iBAEgB,KAEhB,eAAgB,wBAEP5C,KAGc5hB,WAAW,WAE/B8d,EAAKjb,UAAYib,EAAKjb,SAASyV,QAE1BwF,EAAKV,yBAA0BU,EAAKjb,SAASgV,KAAQiG,EAAKjb,SAASgV,IAAI4M,kBAG/C,MAKJ,IAG7B9jB,EAAS+jB,2BAGR,oBAAqB,SAASpjB,EAAOR,GACtCgd,EAAKjb,WAAa/B,MACO,SA4UzCmf,QAAU,SAAS0E,KAED5F,EAAW,aADlB4F,MAIX1f,OAAS,gBAEL8c,IAAoBjE,EAAKjb,cAErB+hB,uBAEAjkB,EAAS6f,cACCI,iBAAiB9C,EAAKjb,SAAU8d,KAExBA,EAAmB,kBAAmB7C,EAAKjb,SAASof,SAGrD,GAMpB/C,cAOLiF,iBAAmB,SAASpe,GAExBA,cAGY,aACFkB,gBAAgB,EAAG/M,EAAUgN,eACnC,OAIIoa,EAAciC,eAAiB,MAAQ,UAAY,SAASzF,EAAKhkB,SAAU,eAGvF8qB,qBAAuB,WACnBjkB,EAASkkB,cACQjM,UAAakF,EAAKgH,kBAAoB,EAClDnkB,EAASokB,kBACTpkB,EAAS6b,oBAIlBwH,YAAc,SAASje,OAElB5L,KADA4L,GAAK3K,OAAOqX,OACDtY,QAAU4L,EAAEuY,eAExBN,KAIAjY,EAAEif,QAAmC,UAAzBjf,EAAEif,OAAO1Y,YAAyB,IAG1CmT,EAAetlB,UAKfD,EAAU2B,SAAS1B,EAAQ,cACC,IAAxB2jB,EAAKmH,iBAAwBnH,EAAKmH,eAAkBnH,EAAKjb,SAASC,kBAYtEnC,EAASukB,sBACLnD,IACI6B,iBAEAC,gBAKRljB,EAASwkB,aAAejrB,EAAU2B,SAAS1B,EAAQ,cAAgBslB,EAAetlB,kBAC5E6S,WAMdiX,YAAc,SAASle,OAElB5L,KADA4L,GAAK3K,OAAOqX,OACDtY,QAAU4L,EAAEuY,aAGVS,EAAW,iBAAkBU,EAAetlB,OAG9DypB,aAAe,aACJ9e,SAASia,EAAW,sBACpBja,SAASgZ,EAAKhkB,SAAU,oBACf,KAGpB+pB,aAAe,cACK,EACf/B,KACG7c,WAEG2V,YAAYmE,EAAW,sBACvBnE,YAAYkD,EAAKhkB,SAAU,oBAGtCsrB,mBAAqB,eAChB1d,EAAI1M,kBACE0M,EAAE2d,gBAAkB3d,EAAE4d,qBAAuB5d,EAAE6d,sBAAwB7d,EAAE8d,qBAGpFjB,iBAAmB,eAEdkB,EADAC,EAAK1qB,SAASO,gBAEdoqB,EAAK,0BAEND,EAAGE,oBACI,QACM,0BACD,0BACG,2BACFD,GAGND,EAAGG,uBACH,QACM,6BACD,+BACG,8BACF,MAAQF,GAGdD,EAAGI,0BACH,QACM,gCACD,gCACG,iCACF,SAAWH,GAGjBD,EAAGK,wBACH,QACM,4BACD,4BACG,6BACF,uBAIbN,MACKhC,MAAQ,gBAEoB9iB,EAASqlB,gBAC5BA,eAAgB,EAEN,4BAAhBtlB,KAAKulB,cAGGnI,EAAKhkB,SAAS4G,KAAKulB,YAFrBnsB,SAAS4G,KAAKulB,QAAQC,QAAQC,yBAKvC3C,KAAO,oBACEwC,cAAgBvE,EAElBzmB,SAAS0F,KAAK0lB,YAGrB7C,aAAe,kBACRvoB,SAAS0F,KAAK2lB,YAItBZ,GClzBc,SAAvBa,EAAwBC,WACtBC,KAEI/rB,EAAI,EAAGqF,EAAMymB,EAAK7rB,OAAQD,EAAIqF,EAAKrF,qDACmB8rB,EAAK9rB,GAAGuX,uEAAsEuU,EAAK9rB,GAAGuX,6BAG1IwU,EFPd,IGiBWC,ECZDlL,EAgEMmL,EA/DRC,WAEKC,EAAO3qB,EAAM4qB,QAEb5sB,QAAUshB,EAAEra,OAAO,GAAIR,KAAKomB,SAAUD,QACtCE,QAAU9qB,OACV+qB,SAAW/qB,EAAK8T,WAAWkX,GAAG,QAC9BC,OAAS,YACE,eACA,aACD,YACA,UACF,WACA,aACG,YACD,YACA,iBACG,sBACO,0BACA,aACV,eACE,kBACG,YACN,aACE,kBACK,oBACC,cACN,aACA,YACJ,SACA,SACA,SACA,gBACO,gBACA,kBACD,IACX,QAGFC,iBA+DQC,EAAahqB,UACH,IAAZspB,IAGY,KAAZA,EACQtpB,EAEJspB,EAAUtpB,EAAMgC,OAAO,GAAGC,cAAgBjC,EAAMiqB,OAAO,eC3G9DptB,8GACHqtB,WAAa,UACbC,MAAQ,UACRP,UAAW,OACXQ,OAASvtB,OACTwtB,MAAQ/mB,KAAK8mB,OAAOC,WACpBC,YAAchnB,KAAK+mB,MAAM/sB,YACzBitB,YAAc,OACdC,SAAW,OACXC,UAAY,UACZC,gBAAkB,UAClBC,YAAc,OAEd/tB,MAAQ,UAENguB,WAAa5sB,OAAO4sB,WAAa5sB,OAAO4sB,WAAa,EAAI,OAE3DC,IAAM7sB,OAAO4sB,gBACbE,mBACAC,UAAU,UFVZ1B,EAUT,SAASlL,OAMC6M,EAJJC,EAAQjtB,OAAOitB,OAAS,GAIpBD,EAAc,cAEHE,EAASC,OAENC,EAAVC,EAAI/nB,OAENomB,SAAW,gBACM,kBACC,eACFvL,EAAE+M,cACJ/M,EAAE+M,WACN,WACE,eACC,yIACA,iIACD,gBACK,gBACH,gBACG,eACN,oBACK,SAASI,EAAQjuB,UACpB8gB,EAAE,wEAAwEoN,KAAKluB,EAAI,UAExF,YACK,wBACA,SACH,sBACM,UACR,iBACS,YACL,eACI,WACJ,wBACG,gBACC,gBACA,oBACI,YACP,oBACC,UACN,OACD,QACE,gBACO,eACA,iBACE,QACT,WACA,gBACO,aACH,iBACK,UACR,gBACM,iBACC,YACL,mBACO,kBACD,SACR,OAGVmuB,SAAW,YACE,YACD,gBACK,sBACG,cACL,kBACC,YACH,QACJ,eACI,gBACC,eACD,aACC,gBACA,gBACD,aACC,gBACA,iBACC,aACJ,cACA,cACI,YACF,cACF,QACF,iBACM,sBACM,aACR,KAGb1nB,OAAOunB,EAAGA,EAAEG,YAEZC,iBAAmB,OACnBC,SAAW,OACXC,SAAW,OACXC,YAAc,KACdC,mBAAqB,KACrBC,gBAAiB,IACjBC,UAAW,IACXC,aAAc,IACdC,OAAS,WACTC,QAAS,IACTC,aAAe,OACfC,UAAY,OACZC,SAAW,IACXC,aAAc,IACdC,QAAUpO,EAAE+M,KACZsB,aAAe,OACfC,cAAgB,OAChBC,eAAiB,OACjBC,iBAAmB,qBACnBC,YAAc,IACdC,YAAc,OAED1O,EAAE+M,GAAS4B,KAAK,UAAY,KAEzCjwB,QAAUshB,EAAEra,OAAO,GAAIunB,EAAE3B,SAAUyB,EAAUC,KAE7C2B,aAAe1B,EAAExuB,QAAQmwB,eAEzBC,iBAAmB5B,EAAExuB,aAEW,IAAvBe,SAASsv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"}