{"version":3,"sources":["webpack:////home/vsts/work/1/s/node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js"],"names":["window","document","$","undefined","console","info","stuff","fn","fancybox","div","$pressed","defaults","closeExisting","loop","gutter","keyboard","preventCaptionOverlap","arrows","infobar","smallBtn","toolbar","buttons","idleTime","protect","modal","image","preload","ajax","settings","data","iframe","tpl","css","attr","scrolling","video","format","autoStart","defaultType","animationEffect","animationDuration","zoomOpacity","transitionEffect","transitionDuration","slideClass","baseClass","baseTpl","spinnerTpl","errorTpl","btnTpl","download","zoom","close","arrowLeft","arrowRight","parentEl","hideScrollbar","autoFocus","backFocus","trapFocus","fullScreen","touch","vertical","momentum","hash","media","slideShow","speed","thumbs","hideOnClose","axis","wheel","onInit","noop","beforeLoad","afterLoad","beforeShow","afterShow","beforeClose","afterClose","onActivate","onDeactivate","clickContent","current","event","type","clickSlide","clickOutside","dblclickContent","dblclickSlide","dblclickOutside","mobile","lang","i18n","en","CLOSE","NEXT","PREV","ERROR","PLAY_START","PLAY_STOP","FULL_SCREEN","THUMBS","DOWNLOAD","SHARE","ZOOM","de","$W","$D","called","requestAFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","callback","setTimeout","cancelAFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","id","clearTimeout","transitionEnd","t","el","createElement","transitions","transition","OTransition","MozTransition","WebkitTransition","style","forceRedraw","$el","length","offsetHeight","mergeOpts","opts1","opts2","rez","extend","each","key","value","isArray","FancyBox","content","opts","index","this","isPlainObject","isMobile","currIndex","parseInt","prevIndex","prevPos","currPos","firstRun","group","slides","addContent","init","prototype","$container","buttonStr","self","firstItemOpts","addClass","getInstance","body","scrollHeight","innerHeight","append","innerWidth","documentElement","clientWidth","translate","replace","appendTo","$refs","container","forEach","item","find","trigger","activate","jumpTo","obj","str","arr","match","n","items","makeArray","i","$item","found","src","srcParts","options","$orig","contentType","charAt","inArray","$thumb","$trigger","thumb","caption","apply","split","shift","filter","push","Object","keys","updateControls","Thumbs","isActive","create","focus","addEvents","removeEvents","on","e","stopPropagation","preventDefault","previous","next","isScaledDown","originalEvent","requestId","update","stage","hide","show","keycode","keyCode","which","ctrlKey","altKey","shiftKey","target","is","idleSecondsCounter","isIdle","showControls","idleInterval","setInterval","isDragging","hideControls","off","clearInterval","duration","pos","isMoved","slidePos","stagePos","prop","diff","groupLen","isClosing","isAnimating","createSlide","forcedDuration","isNumeric","$slide","loadSlide","getTranslate","slide","stop","isComplete","removeClass","left","width","className","join","leftPos","setTranslate","top","animate","transform","opacity","complete","isLoaded","revealContent","updateSlide","scaleToActual","x","y","imgPos","posX","posY","scaleX","scaleY","$content","canvasWidth","canvasHeight","height","newImgWidth","newImgHeight","hasError","updateCursor","SlideShow","scaleToFit","end","getFitPos","maxWidth","maxHeight","minRatio","aspectRatio","parseFloat","Math","min","floor","ratio","adjustCaption","adjustLayout","add","navigation","toggleClass","get","clientHeight","centerSlide","siblings","parent","children","hasClass","abs","nextWidth","nextHeight","canPan","isZoomable","Guestures","isFunction","fitPos","ajaxLoad","isLoading","setImage","setIframe","setContent","videoFormat","setError","showLoading","url","success","textStatus","error","jqXHR","one","abort","ghost","$img","$image","checkSrcset","onerror","remove","$ghost","onload","setBigImage","temp","pxRatio","windowWidth","srcset","devicePixelRatio","map","ret","trim","substring","postfix","sort","a","b","j","img","sizes","resolveImageSlideSize","naturalWidth","naturalHeight","round","max","hideLoading","readyState","imgWidth","imgHeight","$iframe","Date","getTime","isReady","$body","frameWidth","frameHeight","contents","ignore","ceil","outerWidth","outerHeight","unbind","empty","isRevealed","hasOwnProperty","parents","$placeholder","insertAfter","html","after","$smallBtn","wrap","first","wrapInner","$spinner","fadeIn","button","$clone","preventOverlap","$caption","captionH","clone","eq","marginBottom","inlinePadding","actualPadding","disableLayoutFix","effect","effectClassName","start","getThumbPos","thumbPos","btw","brw","bbw","blw","elem","elemCenter","ownerDocument","getBoundingClientRect","offsetWidth","elementFromPoint","inViewport","Document","exitFullscreen","webkitExitFullscreen","scrollTop","scrollLeft","prev","focusableItems","focusedItemIndex","focusableStr","activeElement","instance","isVisible","d","domRect","done","cleanUp","$focus","scrollX","scrollY","name","args","Array","slice","call","arguments","unshift","hasHiddenControls","andCaption","toggleControls","version","command","open","all","destroy","test","navigator","userAgent","use3d","getComputedStyle","getPropertyValue","documentMode","props","position","to","leaveAnimationName","from","propertyName","callCallback","selector","_run","$target","isDefaultPrevented","currentTarget","jQuery","youtube","matcher","params","autoplay","autohide","fs","rel","hd","wmode","enablejsapi","html5","paramPlace","vimeo","show_title","show_byline","show_portrait","fullscreen","instagram","gmap_place","indexOf","gmap_search","param","urlParams","paramObj","provider","providerName","providerOpts","m","p","decodeURIComponent","p1","s","origSrc","contentSource","VideoAPILoader","class","loading","loaded","load","vendor","script","_this","onYouTubeIframeAPIReady","appendChild","YT","Player","events","onStateChange","Vimeo","getPointerXY","result","touches","changedTouches","pageX","pageY","clientX","clientY","distance","point2","point1","what","sqrt","pow","isClickable","onclick","atts","attributes","nodeName","substr","isScrollable","overflowY","overflowX","horizontal","scrollWidth","$bg","bg","$stage","proxy","tapped","ontouchstart","isTouchDevice","offset","realPoints","startPoints","startEvent","canTap","isPanning","isSwiping","isZooming","isScrolling","startTime","distanceX","distanceY","contentLastPos","contentStartPos","sliderStartPos","addEventListener","onscroll","centerPointStartX","centerPointStartY","percentageOfImageAtPinchPointX","percentageOfImageAtPinchPointY","startDistanceBetweenFingers","removeEventListener","ontouchmove","newPoints","onSwipe","onPan","onZoom","ontouchend","angle","swiping","sliderLastPos","atan2","PI","limitMovement","minTranslateX","minTranslateY","maxTranslateX","maxTranslateY","newOffsetX","newOffsetY","currentOffsetX","currentOffsetY","currentWidth","currentHeight","limitPosition","newWidth","newHeight","pinchRatio","translateFromZoomingX","translateFromZoomingY","centerPointEndX","centerPointEndY","translateFromTranslatingX","newPos","panning","zooming","endPoints","dMs","onTap","velocityX","velocityY","endPanning","endZooming","endSwiping","len","canAdvance","reset","where","tapX","tapY","process","prefix","action","addBack","progress","timer","$button","toggle","$progress","inner","set","force","clear","removeAttr","keypress","hidden","fnMap","val","FullScreen","request","requestFullscreen","ALLOW_KEYBOARD_INPUT","exit","isFullscreen","Boolean","fullscreenElement","enabled","fullscreenEnabled","fullscreenchange","CLASS","FancyThumbs","$grid","$list","list","innerHTML","share","currentHash","location","string","entityMap","encodeURIComponent","String","text","shareInstance","shareCurrent","click","href","parseUrl","pop","gallery","triggerFromUrl","escapeSelector","getGalleryID","sel","ch","asCodePoint","charCodeAt","toString","origHash","hashTimer","history","title","pathname","search","hasCreatedHistory","back","replaceState","fb","reverse","tmp","prevTime","currTime","deltaY","deltaX","wheelDelta","detail"],"mappings":"4EAUA,SAAWA,EAAQC,EAAUC,EAAGC,GAC9B,aASA,GAPAH,EAAOI,QAAUJ,EAAOI,SAAW,CACjCC,KAAM,SAAUC,MAMbJ,EAOL,GAAIA,EAAEK,GAAGC,SACPJ,QAAQC,KAAK,oCADf,CASA,IAqhGQI,EA0RJC,EA/yGAC,EAAW,CAGbC,eAAe,EAGfC,MAAM,EAGNC,OAAQ,GAGRC,UAAU,EAGVC,uBAAuB,EAGvBC,QAAQ,EAGRC,SAAS,EAKTC,SAAU,OAKVC,QAAS,OAKTC,QAAS,CACP,OAEA,YAGA,SACA,SAIFC,SAAU,EAGVC,SAAS,EAGTC,OAAO,EAEPC,MAAO,CAKLC,SAAS,GAGXC,KAAM,CAEJC,SAAU,CAGRC,KAAM,CACJrB,UAAU,KAKhBsB,OAAQ,CAENC,IAAK,sKAKLL,SAAS,EAITM,IAAK,GAGLC,KAAM,CACJC,UAAW,SAKfC,MAAO,CACLJ,IAAK,yQAILK,OAAQ,GACRC,WAAW,GAIbC,YAAa,QASbC,gBAAiB,OAGjBC,kBAAmB,IAInBC,YAAa,OAabC,iBAAkB,OAGlBC,mBAAoB,IAGpBC,WAAY,GAGZC,UAAW,GAGXC,QAAS,ycAYTC,WAAY,uCAGZC,SAAU,qDAEVC,OAAQ,CACNC,SAAU,kTAIVC,KAAM,mYAINC,MAAO,gSAKPC,UAAW,2QAIXC,WAAY,mRAMZnC,SAAU,mQAMZoC,SAAU,OAGVC,eAAe,EAMfC,WAAW,EAGXC,WAAW,EAGXC,WAAW,EAKXC,WAAY,CACVvB,WAAW,GAIbwB,MAAO,CACLC,UAAU,EACVC,UAAU,GAKZC,KAAM,KAaNC,MAAO,GAEPC,UAAW,CACT7B,WAAW,EACX8B,MAAO,KAGTC,OAAQ,CACN/B,WAAW,EACXgC,aAAa,EACbd,SAAU,sBACVe,KAAM,KAKRC,MAAO,OAcPC,OAAQtE,EAAEuE,KAEVC,WAAYxE,EAAEuE,KACdE,UAAWzE,EAAEuE,KAEbG,WAAY1E,EAAEuE,KACdI,UAAW3E,EAAEuE,KAEbK,YAAa5E,EAAEuE,KACfM,WAAY7E,EAAEuE,KAEdO,WAAY9E,EAAEuE,KACdQ,aAAc/E,EAAEuE,KAiBhBS,aAAc,SAAUC,EAASC,GAC/B,MAAwB,UAAjBD,EAAQE,MAAmB,QAIpCC,WAAY,QAIZC,aAAc,QAGdC,iBAAiB,EACjBC,eAAe,EACfC,iBAAiB,EAKjBC,OAAQ,CACN3E,uBAAuB,EACvBM,UAAU,EACV4D,aAAc,SAAUC,EAASC,GAC/B,MAAwB,UAAjBD,EAAQE,MAAmB,kBAEpCC,WAAY,SAAUH,EAASC,GAC7B,MAAwB,UAAjBD,EAAQE,KAAmB,iBAAmB,SAEvDG,gBAAiB,SAAUL,EAASC,GAClC,MAAwB,UAAjBD,EAAQE,MAAmB,QAEpCI,cAAe,SAAUN,EAASC,GAChC,MAAwB,UAAjBD,EAAQE,MAAmB,SAOtCO,KAAM,KACNC,KAAM,CACJC,GAAI,CACFC,MAAO,QACPC,KAAM,OACNC,KAAM,WACNC,MAAO,wEACPC,WAAY,kBACZC,UAAW,kBACXC,YAAa,cACbC,OAAQ,aACRC,SAAU,WACVC,MAAO,QACPC,KAAM,QAERC,GAAI,CACFX,MAAO,kBACPC,KAAM,SACNC,KAAM,cACNC,MAAO,0GACPC,WAAY,mBACZC,UAAW,mBACXC,YAAa,WACbC,OAAQ,iBACRC,SAAU,gBACVC,MAAO,SACPC,KAAM,2BAQRE,EAAKzG,EAAEF,GACP4G,EAAK1G,EAAED,GAEP4G,EAAS,EAUTC,EAEA9G,EAAO+G,uBACP/G,EAAOgH,6BACPhH,EAAOiH,0BACPjH,EAAOkH,wBAEP,SAAUC,GACR,OAAOnH,EAAOoH,WAAWD,EAAU,IAAO,KAK5CE,EAEArH,EAAOsH,sBACPtH,EAAOuH,4BACPvH,EAAOwH,yBACPxH,EAAOyH,uBACP,SAAUC,GACR1H,EAAO2H,aAAaD,IAOtBE,EAAgB,WAClB,IACEC,EADEC,EAAK7H,EAAS8H,cAAc,eAG5BC,EAAc,CAChBC,WAAY,gBACZC,YAAa,iBACbC,cAAe,gBACfC,iBAAkB,uBAGpB,IAAKP,KAAKG,EACR,QA/bN,IA+bUF,EAAGO,MAAMR,GACX,OAAOG,EAAYH,GAIvB,MAAO,gBAjBW,GAuBhBS,EAAc,SAAUC,GAC1B,OAAOA,GAAOA,EAAIC,QAAUD,EAAI,GAAGE,cAKjCC,EAAY,SAAUC,EAAOC,GAC/B,IAAIC,EAAM3I,EAAE4I,QAAO,EAAM,GAAIH,EAAOC,GAQpC,OANA1I,EAAE6I,KAAKH,GAAO,SAAUI,EAAKC,GACvB/I,EAAEgJ,QAAQD,KACZJ,EAAIG,GAAOC,MAIRJ,GA8BLM,EAAW,SAAUC,EAASC,EAAMC,GAC3BC,KAENF,KAAOX,EAAU,CACpBY,MAAOA,GACNpJ,EAAEM,SAASG,UAEVT,EAAEsJ,cAAcH,KANTE,KAOJF,KAAOX,EAPHa,KAOkBF,KAAMA,IAG/BnJ,EAAEM,SAASiJ,WAVJF,KAWJF,KAAOX,EAXHa,KAWkBF,KAXlBE,KAW6BF,KAAK1D,SAXlC4D,KAcN7B,GAdM6B,KAcIF,KAAK3B,MAAQb,EAdjB0C,KAgBNG,UAAYC,SAhBNJ,KAgBoBF,KAAKC,MAAO,KAAO,EAhBvCC,KAiBNK,UAAY,KAjBNL,KAmBNM,QAAU,KAnBJN,KAoBNO,QAAU,EApBJP,KAsBNQ,UAAW,EAtBLR,KAyBNS,MAAQ,GAzBFT,KA4BNU,OAAS,GA5BHV,KA+BNW,WAAWd,GA/BLG,KAiCDS,MAAMxB,QAjCLe,KAqCNY,QAGPjK,EAAE4I,OAAOK,EAASiB,UAAW,CAI3BD,KAAM,WACJ,IAGEE,EACAC,EAJEC,EAAOhB,KAETiB,EADYD,EAAKP,MAAMO,EAAKb,WACFL,KAIxBmB,EAAc5J,eAChBV,EAAEM,SAAS4C,OAAM,GAMnBlD,EAAE,QAAQuK,SAAS,oBAGhBvK,EAAEM,SAASkK,gBACoB,IAAhCF,EAAchH,gBACbtD,EAAEM,SAASiJ,UACZxJ,EAAS0K,KAAKC,aAAe5K,EAAO6K,cAEpC3K,EAAE,QAAQ4K,OACR,+FACC9K,EAAO+K,WAAa9K,EAAS+K,gBAAgBC,aAC9C,gBAGF/K,EAAE,QAAQuK,SAAS,6BAOrBH,EAAY,GAEZpK,EAAE6I,KAAKyB,EAAcnJ,SAAS,SAAUiI,EAAOL,GAC7CqB,GAAaE,EAAcvH,OAAOgG,IAAU,MAK9CoB,EAAanK,EACTqK,EAAKW,UACHX,EACAC,EAAc1H,QACbqI,QAAQ,cAAeb,GACvBa,QAAQ,aAAcX,EAAcvH,OAAOI,UAAYmH,EAAcvH,OAAOK,cAGhFrB,KAAK,KAAM,sBAAwBsI,EAAK7C,IACxC+C,SAASD,EAAc3H,WACvBhB,KAAK,WAAY0I,GACjBa,SAASZ,EAAcjH,UAG1BgH,EAAKc,MAAQ,CACXC,UAAWjB,GAGb,CAAC,KAAM,QAAS,UAAW,UAAW,QAAS,UAAW,cAAckB,SAAQ,SAAUC,GACxFjB,EAAKc,MAAMG,GAAQnB,EAAWoB,KAAK,aAAeD,MAGpDjB,EAAKmB,QAAQ,UAGbnB,EAAKoB,WAGLpB,EAAKqB,OAAOrB,EAAKb,YAOnBwB,UAAW,SAAUW,EAAKC,GACxB,IAAIC,EAAMF,EAAIxC,KAAKxD,KAAKgG,EAAIxC,KAAKzD,OAASiG,EAAIxC,KAAKxD,KAAKC,GAExD,OAAOgG,EAAIX,QAAQ,kBAAkB,SAAUa,EAAOC,GACpD,YAtnBR,IAsnBeF,EAAIE,GAAmBD,EAAQD,EAAIE,OAQ9C/B,WAAY,SAAUd,GACpB,IAEEhF,EAFEmG,EAAOhB,KACT2C,EAAQhM,EAAEiM,UAAU/C,GAGtBlJ,EAAE6I,KAAKmD,GAAO,SAAUE,EAAGZ,GACzB,IAEEa,EACAhH,EACAiH,EACAC,EACAC,EANEX,EAAM,GACRxC,EAAO,GAULnJ,EAAEsJ,cAAcgC,IAIlBK,EAAML,EACNnC,EAAOmC,EAAKnC,MAAQmC,GACM,WAAjBtL,EAAEmF,KAAKmG,IAAsBtL,EAAEsL,GAAMhD,QAK9Ca,GAHAgD,EAAQnM,EAAEsL,IAGG3J,QAAU,IACvBwH,EAAOnJ,EAAE4I,QAAO,EAAM,GAAIO,EAAMA,EAAKoD,UAGhCC,MAAQL,EAEbR,EAAIU,IAAMhC,EAAKlB,KAAKkD,KAAOlD,EAAKkD,KAAOF,EAAMpK,KAAK,QAI7C4J,EAAIxG,MAASwG,EAAIU,MACpBV,EAAIxG,KAAO,SACXwG,EAAIU,IAAMf,IAKZK,EAAM,CACJxG,KAAM,OACNkH,IAAKf,EAAO,IAKhBK,EAAIxC,KAAOnJ,EAAE4I,QAAO,EAAM,GAAIyB,EAAKlB,KAAMA,GAGrCnJ,EAAEgJ,QAAQG,EAAKhI,WACjBwK,EAAIxC,KAAKhI,QAAUgI,EAAKhI,SAGtBnB,EAAEM,SAASiJ,UAAYoC,EAAIxC,KAAK1D,SAClCkG,EAAIxC,KAAOX,EAAUmD,EAAIxC,KAAMwC,EAAIxC,KAAK1D,SAM1CN,EAAOwG,EAAIxG,MAAQwG,EAAIxC,KAAKhE,KAC5BkH,EAAMV,EAAIU,KAAO,IAEZlH,GAAQkH,KACND,EAAQC,EAAIP,MAAM,uCACrB3G,EAAO,QAEFwG,EAAIxC,KAAKlH,MAAMC,SAClByJ,EAAIxC,KAAKlH,MAAMC,OAAS,UAAyB,QAAbkK,EAAM,GAAe,MAAQA,EAAM,MAEhEC,EAAIP,MAAM,wFACnB3G,EAAO,QACEkH,EAAIP,MAAM,yBACnB3G,EAAO,SACPwG,EAAM3L,EAAE4I,QAAO,EAAM+C,EAAK,CACxBc,YAAa,MACbtD,KAAM,CACJvH,OAAQ,CACNJ,SAAS,OAIY,MAAlB6K,EAAIK,OAAO,KACpBvH,EAAO,WAIPA,EACFwG,EAAIxG,KAAOA,EAEXkF,EAAKmB,QAAQ,kBAAmBG,GAG7BA,EAAIc,cACPd,EAAIc,YAAczM,EAAE2M,QAAQhB,EAAIxG,KAAM,CAAC,OAAQ,SAAU,UAAY,EAAI,OAASwG,EAAIxG,MAMxFwG,EAAIvC,MAAQiB,EAAKP,MAAMxB,OAEE,QAArBqD,EAAIxC,KAAKlI,WACX0K,EAAIxC,KAAKlI,SAAWjB,EAAE2M,QAAQhB,EAAIxG,KAAM,CAAC,OAAQ,SAAU,UAAY,GAGhD,SAArBwG,EAAIxC,KAAKjI,UACXyK,EAAIxC,KAAKjI,SAAWyK,EAAIxC,KAAKlI,UAI/B0K,EAAIiB,OAASjB,EAAIxC,KAAKyD,QAAU,KAE5BjB,EAAIxC,KAAK0D,UAAYlB,EAAIvC,QAAUiB,EAAKlB,KAAKC,QAC/CuC,EAAIiB,OAASjB,EAAIxC,KAAK0D,SAAStB,KAAK,aAEhCI,EAAIiB,OAAOtE,SACbqD,EAAIxC,KAAKqD,MAAQb,EAAIxC,KAAK0D,WAIxBlB,EAAIiB,QAAUjB,EAAIiB,OAAOtE,SAAWqD,EAAIxC,KAAKqD,QACjDb,EAAIiB,OAASjB,EAAIxC,KAAKqD,MAAMjB,KAAK,cAG/BI,EAAIiB,SAAWjB,EAAIiB,OAAOtE,SAC5BqD,EAAIiB,OAAS,MAGfjB,EAAImB,MAAQnB,EAAIxC,KAAK2D,QAAUnB,EAAIiB,OAASjB,EAAIiB,OAAO,GAAGP,IAAM,MAG/B,aAA7BrM,EAAEmF,KAAKwG,EAAIxC,KAAK4D,WAClBpB,EAAIxC,KAAK4D,QAAUpB,EAAIxC,KAAK4D,QAAQC,MAAM1B,EAAM,CAACjB,EAAMsB,KAGvB,aAA9B3L,EAAEmF,KAAKkF,EAAKlB,KAAK4D,WACnBpB,EAAIxC,KAAK4D,QAAU1C,EAAKlB,KAAK4D,QAAQC,MAAM1B,EAAM,CAACjB,EAAMsB,KAIpDA,EAAIxC,KAAK4D,mBAAmB/M,IAChC2L,EAAIxC,KAAK4D,aAlxBnB,IAkxB6BpB,EAAIxC,KAAK4D,QAAwB,GAAKpB,EAAIxC,KAAK4D,QAAU,IAK7D,SAAbpB,EAAIxG,OACNmH,EAAWD,EAAIY,MAAM,MAAO,IAEf3E,OAAS,IACpBqD,EAAIU,IAAMC,EAASY,QAEnBvB,EAAIxC,KAAKgE,OAASb,EAASY,SAK3BvB,EAAIxC,KAAK7H,QACXqK,EAAIxC,KAAOnJ,EAAE4I,QAAO,EAAM+C,EAAIxC,KAAM,CAClC1F,WAAW,EAEXzC,QAAS,EACTE,QAAS,EAETD,SAAU,EAGVJ,SAAU,EAGVmD,UAAW,EACXN,WAAY,EACZQ,OAAQ,EACRP,MAAO,EAGPqB,cAAc,EACdI,YAAY,EACZC,cAAc,EACdC,iBAAiB,EACjBC,eAAe,EACfC,iBAAiB,KAOrB6E,EAAKP,MAAMsD,KAAKzB,MAId0B,OAAOC,KAAKjD,EAAKN,QAAQzB,SAC3B+B,EAAKkD,kBAGLrJ,EAASmG,EAAKmD,SAEAtJ,EAAOuJ,WACnBvJ,EAAOwJ,SAEPxJ,EAAOyJ,WAabC,UAAW,WACT,IAAIvD,EAAOhB,KAEXgB,EAAKwD,eAKLxD,EAAKc,MAAMC,UACR0C,GAAG,iBAAkB,yBAAyB,SAAUC,GACvDA,EAAEC,kBACFD,EAAEE,iBAEF5D,EAAKnH,MAAM6K,MAEZD,GAAG,mCAAoC,wBAAwB,SAAUC,GACxEA,EAAEC,kBACFD,EAAEE,iBAEF5D,EAAK6D,cAENJ,GAAG,mCAAoC,wBAAwB,SAAUC,GACxEA,EAAEC,kBACFD,EAAEE,iBAEF5D,EAAK8D,UAENL,GAAG,WAAY,wBAAwB,SAAUC,GAEhD1D,EAAKA,EAAK+D,eAAiB,gBAAkB,mBAMjD3H,EAAGqH,GAAG,kCAAkC,SAAUC,GAC5CA,GAAKA,EAAEM,eAA0C,WAAzBN,EAAEM,cAAclJ,MACtCkF,EAAKiE,WACPnH,EAAakD,EAAKiE,WAGpBjE,EAAKiE,UAAY1H,GAAc,WAC7ByD,EAAKkE,OAAOR,QAGV1D,EAAKpF,SAAiC,WAAtBoF,EAAKpF,QAAQE,MAC/BkF,EAAKc,MAAMqD,MAAMC,OAGnBvH,YACE,WACEmD,EAAKc,MAAMqD,MAAME,OAEjBrE,EAAKkE,OAAOR,KAEd/N,EAAEM,SAASiJ,SAAW,IAAM,SAKlC7C,EAAGoH,GAAG,cAAc,SAAUC,GAC5B,IACE9I,GADajF,EAAEM,SAAWN,EAAEM,SAASkK,cAAgB,MAClCvF,QACnB0J,EAAUZ,EAAEa,SAAWb,EAAEc,MAK3B,GAAe,GAAXF,GAWJ,MAAK1J,EAAQkE,KAAKtI,UAAYkN,EAAEe,SAAWf,EAAEgB,QAAUhB,EAAEiB,UAAYhP,EAAE+N,EAAEkB,QAAQC,GAAG,sCAKpF,OAAgB,IAAZP,GAA6B,KAAZA,GACnBZ,EAAEE,sBAEF5D,EAAKnH,MAAM6K,IAMG,KAAZY,GAA8B,KAAZA,GACpBZ,EAAEE,sBAEF5D,EAAK6D,YAMS,KAAZS,GAA8B,KAAZA,GACpBZ,EAAEE,sBAEF5D,EAAK8D,aAKP9D,EAAKmB,QAAQ,eAAgBuC,EAAGY,QAzC1B1J,EAAQkE,KAAK1F,WACf4G,EAAKsD,MAAMI,MA4Cb1D,EAAKP,MAAMO,EAAKb,WAAWL,KAAK/H,WAClCiJ,EAAK8E,mBAAqB,EAE1BzI,EAAGoH,GACD,8HACA,SAAUC,GACR1D,EAAK8E,mBAAqB,EAEtB9E,EAAK+E,QACP/E,EAAKgF,eAGPhF,EAAK+E,QAAS,KAIlB/E,EAAKiF,aAAexP,EAAOyP,aAAY,WACrClF,EAAK8E,qBAED9E,EAAK8E,oBAAsB9E,EAAKP,MAAMO,EAAKb,WAAWL,KAAK/H,WAAaiJ,EAAKmF,aAC/EnF,EAAK+E,QAAS,EACd/E,EAAK8E,mBAAqB,EAE1B9E,EAAKoF,kBAEN,OAOP5B,aAAc,WAGZpH,EAAGiJ,IAAI,kCACPhJ,EAAGgJ,IAAI,uBAEPrG,KAAK8B,MAAMC,UAAUsE,IAAI,+BALdrG,KAOFiG,eACPxP,EAAO6P,cAREtG,KAQiBiG,cARjBjG,KAUJiG,aAAe,OAOxBpB,SAAU,SAAU0B,GAClB,OAAOvG,KAAKqC,OAAOrC,KAAKO,QAAU,EAAGgG,IAMvCzB,KAAM,SAAUyB,GACd,OAAOvG,KAAKqC,OAAOrC,KAAKO,QAAU,EAAGgG,IAMvClE,OAAQ,SAAUmE,EAAKD,GACrB,IAEE/F,EACAiG,EACAnP,EACAsE,EACAiJ,EACA6B,EACAC,EACAC,EACAC,EAVE7F,EAAOhB,KACT8G,EAAW9F,EAAKP,MAAMxB,OAWxB,KAAI+B,EAAKmF,YAAcnF,EAAK+F,WAAc/F,EAAKgG,aAAehG,EAAKR,UAAnE,CAQA,GAHAgG,EAAMpG,SAASoG,EAAK,MACpBlP,EAAO0J,EAAKpF,QAAUoF,EAAKpF,QAAQkE,KAAKxI,KAAO0J,EAAKlB,KAAKxI,QAE3CkP,EAAM,GAAKA,GAAOM,GAC9B,OAAO,EAkDT,GA9CAtG,EAAWQ,EAAKR,UAAYwD,OAAOC,KAAKjD,EAAKN,QAAQzB,OAGrD4F,EAAW7D,EAAKpF,QAEhBoF,EAAKX,UAAYW,EAAKb,UACtBa,EAAKV,QAAUU,EAAKT,QAEpB3E,EAAUoF,EAAKiG,YAAYT,GAEvBM,EAAW,KACTxP,GAAQsE,EAAQmE,MAAQ+G,EAAW,IACrC9F,EAAKiG,YAAYT,EAAM,IAGrBlP,GAAQsE,EAAQmE,MAAQ,IAC1BiB,EAAKiG,YAAYT,EAAM,IAI3BxF,EAAKpF,QAAUA,EACfoF,EAAKb,UAAYvE,EAAQmE,MACzBiB,EAAKT,QAAU3E,EAAQ4K,IAEvBxF,EAAKmB,QAAQ,aAAc3B,GAE3BQ,EAAKkD,iBAGLtI,EAAQsL,oBApkCd,EAskCUvQ,EAAEwQ,UAAUZ,GACd3K,EAAQsL,eAAiBX,EAEzBA,EAAW3K,EAAQkE,KAAKU,EAAW,oBAAsB,sBAG3D+F,EAAWnG,SAASmG,EAAU,IAG9BE,EAAUzF,EAAKyF,QAAQ7K,GAGvBA,EAAQwL,OAAOlG,SAAS,2BAGpBV,EAaF,OAZI5E,EAAQkE,KAAK9G,iBAAmBuN,GAClCvF,EAAKc,MAAMC,UAAUtJ,IAAI,sBAAuB8N,EAAW,MAG7DvF,EAAKc,MAAMC,UAAUb,SAAS,oBAAoBiB,QAAQ,SAI1DnB,EAAKqG,UAAUzL,QAEfoF,EAAK7I,QAAQ,SAMfuO,EAAW/P,EAAEM,SAASqQ,aAAazC,EAASuC,QAC5CT,EAAWhQ,EAAEM,SAASqQ,aAAatG,EAAKc,MAAMqD,OAG9CxO,EAAE6I,KAAKwB,EAAKN,QAAQ,SAAUX,EAAOwH,GACnC5Q,EAAEM,SAASuQ,KAAKD,EAAMH,QAAQ,MAG5BvC,EAAS2B,MAAQ5K,EAAQ4K,MAC3B3B,EAAS4C,YAAa,GAGxB5C,EAASuC,OAAOM,YAAY,oDAGxBjB,GAEFI,EAAOH,EAASiB,MAAQ9C,EAAS2B,IAAME,EAASkB,MAAQ/C,EAAS2B,IAAM3B,EAAS/E,KAAKvI,QAErFZ,EAAE6I,KAAKwB,EAAKN,QAAQ,SAAUX,EAAOwH,GACnCA,EAAMH,OAAOM,YAAY,qBAAqBA,aAAY,SAAU3H,EAAO8H,GACzE,OAAQA,EAAUpF,MAAM,2BAA6B,IAAIqF,KAAK,QAKhE,IAAIC,EAAUR,EAAMf,IAAME,EAASkB,MAAQL,EAAMf,IAAMe,EAAMzH,KAAKvI,OAElEZ,EAAEM,SAAS+Q,aAAaT,EAAMH,OAAQ,CACpCa,IAAK,EACLN,KAAMI,EAAUpB,EAASgB,KAAOd,IAG9BU,EAAMf,MAAQ5K,EAAQ4K,KACxBe,EAAMH,OAAOlG,SAAS,oBAAsBqG,EAAMf,IAAM5K,EAAQ4K,IAAM,OAAS,aAIjFzH,EAAYwI,EAAMH,QAGlBzQ,EAAEM,SAASiR,QACTX,EAAMH,OAAQ,CACZa,IAAK,EACLN,MAAOJ,EAAMf,IAAM5K,EAAQ4K,KAAOE,EAASkB,OAASL,EAAMf,IAAM5K,EAAQ4K,KAAOe,EAAMzH,KAAKvI,QAE5FgP,GACA,WACEgB,EAAMH,OACH3O,IAAI,CACH0P,UAAW,GACXC,QAAS,KAEVV,YAAY,iDAEXH,EAAMf,MAAQxF,EAAKT,SACrBS,EAAKqH,kBAKJ9B,GAAY3K,EAAQkE,KAAK3G,mBAElCyN,EAAO,iCAAmChL,EAAQkE,KAAK3G,iBAEvD0L,EAASuC,OAAOlG,SAAS,oBAAsB2D,EAAS2B,IAAM5K,EAAQ4K,IAAM,OAAS,aAErF7P,EAAEM,SAASiR,QACTrD,EAASuC,OACTR,EACAL,GACA,WACE1B,EAASuC,OAAOM,YAAYd,GAAMc,YAAY,oDAEhD,IAIA9L,EAAQ0M,SACVtH,EAAKuH,cAAc3M,GAEnBoF,EAAKqG,UAAUzL,GAGjBoF,EAAK7I,QAAQ,WAOf8O,YAAa,SAAUT,GACrB,IACEY,EACArH,EAiBF,OAdAA,GADAA,EAAQyG,EAJGxG,KAIQS,MAAMxB,QACT,EALLe,KAKcS,MAAMxB,OAASc,EAAQA,GALrCC,KAODU,OAAO8F,IAPNxG,KAOmBS,MAAMV,KAClCqH,EAASzQ,EAAE,sCAAsCkL,SARxC7B,KAQsD8B,MAAMqD,OAR5DnF,KAUJU,OAAO8F,GAAO7P,EAAE4I,QAAO,EAAM,GAVzBS,KAUkCS,MAAMV,GAAQ,CACvDyG,IAAKA,EACLY,OAAQA,EACRkB,UAAU,IAbHtI,KAgBJwI,YAhBIxI,KAgBaU,OAAO8F,KAhBpBxG,KAmBCU,OAAO8F,IAOrBiC,cAAe,SAAUC,EAAGC,EAAGpC,GAC7B,IAOEqC,EACAC,EACAC,EACAC,EACAC,EAXEhI,EAAOhB,KACTpE,EAAUoF,EAAKpF,QACfqN,EAAWrN,EAAQqN,SACnBC,EAAcvS,EAAEM,SAASqQ,aAAa1L,EAAQwL,QAAQQ,MACtDuB,EAAexS,EAAEM,SAASqQ,aAAa1L,EAAQwL,QAAQgC,OACvDC,EAAczN,EAAQgM,MACtB0B,EAAe1N,EAAQwN,OAOrBpI,EAAKgG,aAAehG,EAAKyF,YAAcwC,GAA8B,SAAhBrN,EAAQE,OAAmBF,EAAQ0M,UAAa1M,EAAQ2N,WAIjHvI,EAAKgG,aAAc,EAEnBrQ,EAAEM,SAASuQ,KAAKyB,GAEhBP,OAlvCN,IAkvCUA,EAAgC,GAAdQ,EAAoBR,EAC1CC,OAnvCN,IAmvCUA,EAAiC,GAAfQ,EAAqBR,GAE3CC,EAASjS,EAAEM,SAASqQ,aAAa2B,IAE1BhB,KAAOtR,EAAEM,SAASqQ,aAAa1L,EAAQwL,QAAQa,IACtDW,EAAOjB,MAAQhR,EAAEM,SAASqQ,aAAa1L,EAAQwL,QAAQO,KAEvDoB,EAASM,EAAcT,EAAOhB,MAC9BoB,EAASM,EAAeV,EAAOQ,OAG/BP,EAAqB,GAAdK,EAAkC,GAAdG,EAC3BP,EAAsB,GAAfK,EAAoC,GAAfG,EAGxBD,EAAcH,KAChBL,EAAOD,EAAOjB,KAAOoB,GAAUL,EAAIK,EAASL,IAEjC,IACTG,EAAO,GAGLA,EAAOK,EAAcG,IACvBR,EAAOK,EAAcG,IAIrBC,EAAeH,KACjBL,EAAOF,EAAOX,IAAMe,GAAUL,EAAIK,EAASL,IAEhC,IACTG,EAAO,GAGLA,EAAOK,EAAeG,IACxBR,EAAOK,EAAeG,IAI1BtI,EAAKwI,aAAaH,EAAaC,GAE/B3S,EAAEM,SAASiR,QACTe,EAAU,CACRhB,IAAKa,EACLnB,KAAMkB,EACNE,OAAQA,EACRC,OAAQA,GAEVzC,GAAY,KACZ,WACEvF,EAAKgG,aAAc,KAKnBhG,EAAKyI,WAAazI,EAAKyI,UAAUrF,UACnCpD,EAAKyI,UAAUjC,SAOnBkC,WAAY,SAAUnD,GACpB,IAGEoD,EAHE3I,EAAOhB,KACTpE,EAAUoF,EAAKpF,QACfqN,EAAWrN,EAAQqN,SAGjBjI,EAAKgG,aAAehG,EAAKyF,YAAcwC,GAA8B,SAAhBrN,EAAQE,OAAmBF,EAAQ0M,UAAa1M,EAAQ2N,WAIjHvI,EAAKgG,aAAc,EAEnBrQ,EAAEM,SAASuQ,KAAKyB,GAEhBU,EAAM3I,EAAK4I,UAAUhO,GAErBoF,EAAKwI,aAAaG,EAAI/B,MAAO+B,EAAIP,QAEjCzS,EAAEM,SAASiR,QACTe,EAAU,CACRhB,IAAK0B,EAAI1B,IACTN,KAAMgC,EAAIhC,KACVoB,OAAQY,EAAI/B,MAAQqB,EAASrB,QAC7BoB,OAAQW,EAAIP,OAASH,EAASG,UAEhC7C,GAAY,KACZ,WACEvF,EAAKgG,aAAc,OAQzB4C,UAAW,SAAUrC,GACnB,IAKEsC,EACAC,EACAC,EACAC,EAPAf,EAAW1B,EAAM0B,SACjB7B,EAASG,EAAMH,OACfQ,EAAQL,EAAMK,OAASL,EAAMzH,KAAK8H,MAClCwB,EAAS7B,EAAM6B,QAAU7B,EAAMzH,KAAKsJ,OAKpC9J,EAAM,GAER,SAAKiI,EAAMe,UAAaW,GAAaA,EAAShK,UAI9C4K,EAAWlT,EAAEM,SAASqQ,aAfXtH,KAe6B8B,MAAMqD,OAAOyC,MACrDkC,EAAYnT,EAAEM,SAASqQ,aAhBZtH,KAgB8B8B,MAAMqD,OAAOiE,OAEtDS,GACEI,WAAW7C,EAAO3O,IAAI,gBACtBwR,WAAW7C,EAAO3O,IAAI,iBACtBwR,WAAWhB,EAASxQ,IAAI,eACxBwR,WAAWhB,EAASxQ,IAAI,gBAE1BqR,GACEG,WAAW7C,EAAO3O,IAAI,eACtBwR,WAAW7C,EAAO3O,IAAI,kBACtBwR,WAAWhB,EAASxQ,IAAI,cACxBwR,WAAWhB,EAASxQ,IAAI,iBAErBmP,GAAUwB,IACbxB,EAAQiC,EACRT,EAASU,IAKXlC,GAFAmC,EAAWG,KAAKC,IAAI,EAAGN,EAAWjC,EAAOkC,EAAYV,IAMzCS,EAAW,KACrBjC,EAAQiC,IAJVT,GAASW,GAOID,EAAY,KACvBV,EAASU,GAGQ,UAAfvC,EAAMzL,MACRwD,EAAI2I,IAAMiC,KAAKE,MAA6B,IAAtBN,EAAYV,IAAiBa,WAAW7C,EAAO3O,IAAI,eACzE6G,EAAIqI,KAAOuC,KAAKE,MAA2B,IAApBP,EAAWjC,IAAgBqC,WAAW7C,EAAO3O,IAAI,iBACzC,UAAtB8O,EAAMnE,cAKXgG,EAASxB,GAFboC,EAAczC,EAAMzH,KAAK8H,OAASL,EAAMzH,KAAKsJ,OAASxB,EAAQwB,EAAS7B,EAAMzH,KAAKuK,OAAS,GAAK,GAG9FjB,EAASxB,EAAQoC,EACRpC,EAAQwB,EAASY,IAC1BpC,EAAQwB,EAASY,IAIrB1K,EAAIsI,MAAQA,EACZtI,EAAI8J,OAASA,EAEN9J,IAMT4F,OAAQ,SAAUR,GAChB,IAAI1D,EAAOhB,KAEXrJ,EAAE6I,KAAKwB,EAAKN,QAAQ,SAAUjB,EAAK8H,GACjCvG,EAAKwH,YAAYjB,EAAO7C,OAO5B8D,YAAa,SAAUjB,EAAO7C,GAC5B,IACEuE,EAAW1B,GAASA,EAAM0B,SAC1BrB,EAAQL,EAAMK,OAASL,EAAMzH,KAAK8H,MAClCwB,EAAS7B,EAAM6B,QAAU7B,EAAMzH,KAAKsJ,OACpChC,EAASG,EAAMH,OAJNpH,KAONsK,cAAc/C,GAGf0B,IAAarB,GAASwB,GAAgC,UAAtB7B,EAAMnE,eAA6BmE,EAAMgC,WAC3E5S,EAAEM,SAASuQ,KAAKyB,GAEhBtS,EAAEM,SAAS+Q,aAAaiB,EAbfjJ,KAa8B4J,UAAUrC,IAE7CA,EAAMf,MAfDxG,KAecO,UAfdP,KAgBFgH,aAAc,EAhBZhH,KAkBFwJ,iBAlBExJ,KAuBNuK,aAAahD,GAEdH,EAAOnI,SACTmI,EAAOjF,QAAQ,WAEXoF,EAAMf,MA5BDxG,KA4BcO,SA5BdP,KA6BF8B,MAAMjK,QACR2S,IA9BIxK,KA8BK8B,MAAM2I,WAAWvI,KAAK,kCAC/BwI,YAAY,2BAA4BtD,EAAOuD,IAAI,GAAGtJ,aAAe+F,EAAOuD,IAAI,GAAGC,eA/B/E5K,KAmCNmC,QAAQ,WAAYoF,EAAO7C,IAMlCmG,YAAa,SAAUtE,GACrB,IAAIvF,EAAOhB,KACTpE,EAAUoF,EAAKpF,QACfwL,EAASxL,EAAQwL,QAEfpG,EAAK+F,WAAcnL,IAIvBwL,EAAO0D,WAAWrS,IAAI,CACpB0P,UAAW,GACXC,QAAS,KAGXhB,EACG2D,SACAC,WACAtD,YAAY,iDAEf/Q,EAAEM,SAASiR,QACTd,EAAQ,CACNa,IAAK,EACLN,KAAM,EACNS,QAAS,QA3+CnB,IA6+CQ7B,EAAyB,EAAIA,GAC7B,WAEEa,EAAO3O,IAAI,CACT0P,UAAW,GACXC,QAAS,KAGNxM,EAAQ6L,YACXzG,EAAKqH,cAGT,KAOJ5B,QAAS,SAAUc,GACjB,IACEb,EACAC,EAFE/K,EAAU2L,GAASvH,KAAKpE,QAI5B,QAAKA,IAIL+K,EAAWhQ,EAAEM,SAASqQ,aAAatH,KAAK8B,MAAMqD,OAC9CuB,EAAW/P,EAAEM,SAASqQ,aAAa1L,EAAQwL,SAGxCxL,EAAQwL,OAAO6D,SAAS,uBACxBf,KAAKgB,IAAIxE,EAASuB,IAAMtB,EAASsB,KAAO,IAAOiC,KAAKgB,IAAIxE,EAASiB,KAAOhB,EAASgB,MAAQ,MAO9F6B,aAAc,SAAU2B,EAAWC,GACjC,IAGEC,EACAC,EAHA1P,EADSoE,KACMpE,QACfkF,EAFSd,KAES8B,MAAMC,UAIrBnG,IANMoE,KAMU+G,WANV/G,KAM6BuL,YAIxCzK,EAAW4G,YAAY,qGAIvB4D,KAFAD,EAZWrL,KAYGqL,OAAOF,EAAWC,KAZrBpL,KAcuBsL,aAElCxK,EAAW4J,YAAY,uBAAwBY,GAE/C3U,EAAE,wBAAwBiQ,KAAK,YAAa0E,GAExCD,EACFvK,EAAWI,SAAS,oBAEpBoK,IAC+B,SAA9B1P,EAAQkE,KAAKnE,cAA4BhF,EAAE6U,WAAW5P,EAAQkE,KAAKnE,eAAuD,QAAtCC,EAAQkE,KAAKnE,aAAaC,IAE/GkF,EAAWI,SAAS,uBACXtF,EAAQkE,KAAKxF,QAAUsB,EAAQkE,KAAKxF,MAAMC,UA3B1CyF,KA2B2DS,MAAMxB,OAAS,IAA8B,UAAxBrD,EAAQwH,aACjGtC,EAAWI,SAAS,wBAOxBoK,WAAY,WACV,IAEEG,EADA7P,EADSoE,KACMpE,QAMjB,GAAIA,IAPOoE,KAOU+G,WAA8B,UAAjBnL,EAAQE,OAAqBF,EAAQ2N,SAAU,CAC/E,IAAK3N,EAAQ0M,SACX,OAAO,EAKT,IAFAmD,EAZSzL,KAYK4J,UAAUhO,MAETA,EAAQgM,MAAQ6D,EAAO7D,OAAShM,EAAQwN,OAASqC,EAAOrC,QACrE,OAAO,EAIX,OAAO,GAMTrE,aAAc,SAAUoG,EAAWC,GACjC,IACE9L,GAAM,EACN1D,EAFSoE,KAEMpE,QACfqN,EAAWrN,EAAQqN,SASrB,YAhmDN,IAylDUkC,QAzlDV,IAylDqCC,EAC7B9L,EAAM6L,EAAYvP,EAAQgM,OAASwD,EAAaxP,EAAQwN,OAC/CH,IAET3J,GADAA,EAAM3I,EAAEM,SAASqQ,aAAa2B,IACpBrB,MAAQhM,EAAQgM,OAAStI,EAAI8J,OAASxN,EAAQwN,QAGnD9J,GAMT+L,OAAQ,SAAUF,EAAWC,GAC3B,IACExP,EADSoE,KACMpE,QACf4K,EAAM,KACNlH,GAAM,EAmBR,MAjBqB,UAAjB1D,EAAQE,OAAqBF,EAAQ6L,YAAe0D,GAAaC,KAAiBxP,EAAQ2N,WAC5FjK,EANSU,KAME4J,UAAUhO,QA7mD7B,IA+mDYuP,QA/mDZ,IA+mDuCC,EAC7B5E,EAAM,CACJoB,MAAOuD,EACP/B,OAAQgC,GAEDxP,EAAQ6L,aACjBjB,EAAM7P,EAAEM,SAASqQ,aAAa1L,EAAQqN,WAGpCzC,GAAOlH,IACTA,EAAM4K,KAAKgB,IAAI1E,EAAIoB,MAAQtI,EAAIsI,OAAS,KAAOsC,KAAKgB,IAAI1E,EAAI4C,OAAS9J,EAAI8J,QAAU,MAIhF9J,GAMT+H,UAAW,SAAUE,GACnB,IACEzL,EACAsL,EACAsE,EAHE1K,EAAOhB,KAKX,IAAIuH,EAAMoE,YAAapE,EAAMe,SAA7B,CAMA,GAFAf,EAAMoE,WAAY,GAEwB,IAAtC3K,EAAKmB,QAAQ,aAAcoF,GAG7B,OAFAA,EAAMoE,WAAY,GAEX,EAYT,OATA7P,EAAOyL,EAAMzL,MACbsL,EAASG,EAAMH,QAGZf,IAAI,WACJlE,QAAQ,WACRjB,SAASqG,EAAMzH,KAAKzG,YAGfyC,GACN,IAAK,QACHkF,EAAK4K,SAASrE,GAEd,MAEF,IAAK,SACHvG,EAAK6K,UAAUtE,GAEf,MAEF,IAAK,OACHvG,EAAK8K,WAAWvE,EAAOA,EAAMvE,KAAOuE,EAAM1H,SAE1C,MAEF,IAAK,QACHmB,EAAK8K,WACHvE,EACAA,EAAMzH,KAAKlH,MAAMJ,IAChBoJ,QAAQ,gBAAiB2F,EAAMvE,KAC/BpB,QAAQ,aAAc2F,EAAMzH,KAAKiM,aAAexE,EAAMzH,KAAKlH,MAAMC,QAAU,IAC3E+I,QAAQ,aAAc2F,EAAM9D,OAAS,KAGxC,MAEF,IAAK,SACC9M,EAAE4Q,EAAMvE,KAAK/D,OACf+B,EAAK8K,WAAWvE,EAAO5Q,EAAE4Q,EAAMvE,MAE/BhC,EAAKgL,SAASzE,GAGhB,MAEF,IAAK,OACHvG,EAAKiL,YAAY1E,GAEjBmE,EAAW/U,EAAEyB,KACXzB,EAAE4I,OAAO,GAAIgI,EAAMzH,KAAK1H,KAAKC,SAAU,CACrC6T,IAAK3E,EAAMvE,IACXmJ,QAAS,SAAU7T,EAAM8T,GACJ,YAAfA,GACFpL,EAAK8K,WAAWvE,EAAOjP,IAG3B+T,MAAO,SAAUC,EAAOF,GAClBE,GAAwB,UAAfF,GACXpL,EAAKgL,SAASzE,OAMtBH,EAAOmF,IAAI,WAAW,WACpBb,EAASc,WAGX,MAEF,QACExL,EAAKgL,SAASzE,GAKlB,OAAO,IAMTqE,SAAU,SAAUrE,GAClB,IACEkF,EADEzL,EAAOhB,KAIXnC,YAAW,WACT,IAAI6O,EAAOnF,EAAMoF,OAEZ3L,EAAK+F,YAAaQ,EAAMoE,WAAee,GAASA,EAAKzN,QAAWyN,EAAK,GAAGrE,UAAcd,EAAMgC,UAC/FvI,EAAKiL,YAAY1E,KAElB,IAGHvG,EAAK4L,YAAYrF,GAGjBA,EAAM0B,SAAWtS,EAAE,wCAChBuK,SAAS,sBACTW,SAAS0F,EAAMH,OAAOlG,SAAS,2BAIP,IAAvBqG,EAAMzH,KAAK3H,SAAqBoP,EAAMzH,KAAK8H,OAASL,EAAMzH,KAAKsJ,QAAU7B,EAAM9D,QACjF8D,EAAMK,MAAQL,EAAMzH,KAAK8H,MACzBL,EAAM6B,OAAS7B,EAAMzH,KAAKsJ,QAE1BqD,EAAQ/V,EAAS8H,cAAc,QAEzBqO,QAAU,WACdlW,EAAEqJ,MAAM8M,SAERvF,EAAMwF,OAAS,MAGjBN,EAAMO,OAAS,WACbhM,EAAK5F,UAAUmM,IAGjBA,EAAMwF,OAASpW,EAAE8V,GACdvL,SAAS,kBACTW,SAAS0F,EAAM0B,UACfvQ,KAAK,MAAO6O,EAAM9D,QAIvBzC,EAAKiM,YAAY1F,IAKnBqF,YAAa,SAAUrF,GACrB,IACExE,EACAmK,EACAC,EACAC,EAJEC,EAAS9F,EAAMzH,KAAKuN,QAAU9F,EAAMzH,KAAK5H,MAAMmV,OASnD,GAAIA,EAAQ,CACVF,EAAU1W,EAAO6W,kBAAoB,EACrCF,EAAc3W,EAAO+K,WAAa2L,GAElCD,EAAOG,EAAOzJ,MAAM,KAAK2J,KAAI,SAAUhP,GACrC,IAAIiP,EAAM,GAiBV,OAfAjP,EAAGkP,OACA7J,MAAM,OACN5B,SAAQ,SAAUzD,EAAIsE,GACrB,IAAInD,EAAQU,SAAS7B,EAAGmP,UAAU,EAAGnP,EAAGU,OAAS,GAAI,IAErD,GAAU,IAAN4D,EACF,OAAQ2K,EAAItB,IAAM3N,EAGhBmB,IACF8N,EAAI9N,MAAQA,EACZ8N,EAAIG,QAAUpP,EAAGA,EAAGU,OAAS,OAI5BuO,MAIJI,MAAK,SAAUC,EAAGC,GACrB,OAAOD,EAAEnO,MAAQoO,EAAEpO,SAIrB,IAAK,IAAIqO,EAAI,EAAGA,EAAIb,EAAKjO,OAAQ8O,IAAK,CACpC,IAAIxP,EAAK2O,EAAKa,GAEd,GAAoB,MAAfxP,EAAGoP,SAAmBpP,EAAGmB,OAAS0N,GAAgC,MAAf7O,EAAGoP,SAAmBpP,EAAGmB,OAASyN,EAAU,CAClGpK,EAAQxE,EACR,QAKCwE,GAASmK,EAAKjO,SACjB8D,EAAQmK,EAAKA,EAAKjO,OAAS,IAGzB8D,IACFwE,EAAMvE,IAAMD,EAAMmJ,IAGd3E,EAAMK,OAASL,EAAM6B,QAA2B,KAAjBrG,EAAM4K,UACvCpG,EAAM6B,OAAU7B,EAAMK,MAAQL,EAAM6B,OAAUrG,EAAMrD,MACpD6H,EAAMK,MAAQ7E,EAAMrD,OAGtB6H,EAAMzH,KAAKuN,OAASA,KAQ1BJ,YAAa,SAAU1F,GACrB,IAAIvG,EAAOhB,KACTgO,EAAMtX,EAAS8H,cAAc,OAC7BkO,EAAO/V,EAAEqX,GAEXzG,EAAMoF,OAASD,EACZH,IAAI,SAAS,WACZvL,EAAKgL,SAASzE,MAEfgF,IAAI,QAAQ,WACX,IAAI0B,EAEC1G,EAAMwF,SACT/L,EAAKkN,sBAAsB3G,EAAOvH,KAAKmO,aAAcnO,KAAKoO,eAE1DpN,EAAK5F,UAAUmM,IAGbvG,EAAK+F,YAILQ,EAAMzH,KAAKuN,UACbY,EAAQ1G,EAAMzH,KAAKmO,QAEK,SAAVA,IACZA,GACG1G,EAAMK,MAAQL,EAAM6B,OAAS,GAAKhM,EAAGwK,QAAUxK,EAAGgM,SAAW,EAAI,MAAQc,KAAKmE,MAAO9G,EAAMK,MAAQL,EAAM6B,OAAU,MACpH,MAGJsD,EAAKhU,KAAK,QAASuV,GAAOvV,KAAK,SAAU6O,EAAMzH,KAAKuN,SAIlD9F,EAAMwF,QACRlP,YAAW,WACL0J,EAAMwF,SAAW/L,EAAK+F,WACxBQ,EAAMwF,OAAO3H,SAEd8E,KAAKC,IAAI,IAAKD,KAAKoE,IAAI,IAAM/G,EAAM6B,OAAS,QAGjDpI,EAAKuN,YAAYhH,OAElBrG,SAAS,kBACTxI,KAAK,MAAO6O,EAAMvE,KAClBnB,SAAS0F,EAAM0B,WAEb+E,EAAI3F,UAA8B,YAAlB2F,EAAIQ,aAA6B9B,EAAKyB,cAAgBzB,EAAK0B,cAC9E1B,EAAKvK,QAAQ,QACJ6L,EAAI3B,OACbK,EAAKvK,QAAQ,UAOjB+L,sBAAuB,SAAU3G,EAAOkH,EAAUC,GAChD,IAAI7E,EAAWzJ,SAASmH,EAAMzH,KAAK8H,MAAO,IACxCkC,EAAY1J,SAASmH,EAAMzH,KAAKsJ,OAAQ,IAG1C7B,EAAMK,MAAQ6G,EACdlH,EAAM6B,OAASsF,EAEX7E,EAAW,IACbtC,EAAMK,MAAQiC,EACdtC,EAAM6B,OAASc,KAAKE,MAAOP,EAAW6E,EAAaD,IAGjD3E,EAAY,IACdvC,EAAMK,MAAQsC,KAAKE,MAAON,EAAY2E,EAAYC,GAClDnH,EAAM6B,OAASU,IAOnB+B,UAAW,SAAUtE,GACnB,IAGEoH,EAHE3N,EAAOhB,KACTF,EAAOyH,EAAMzH,KAAKvH,OAClB6O,EAASG,EAAMH,OAGjBG,EAAM0B,SAAWtS,EAAE,gCAAkCmJ,EAAK3H,QAAU,sBAAwB,IAAM,YAC/FM,IAAIqH,EAAKrH,KACToJ,SAASuF,GAEZA,EAAOlG,SAAS,mBAAqBqG,EAAMnE,aAE3CmE,EAAMoH,QAAUA,EAAUhY,EAAEmJ,EAAKtH,IAAIoJ,QAAQ,YAAY,IAAIgN,MAAOC,YACjEnW,KAAKoH,EAAKpH,MACVmJ,SAAS0F,EAAM0B,UAEdnJ,EAAK3H,SACP6I,EAAKiL,YAAY1E,GAKjBoH,EAAQlK,GAAG,oBAAoB,SAAUC,GACvC1E,KAAK8O,QAAU,EAEfvH,EAAMH,OAAOjF,QAAQ,WAErBnB,EAAK5F,UAAUmM,MAMjBH,EAAO3C,GAAG,cAAc,WACtB,IAIEsK,EAJE9F,EAAW1B,EAAM0B,SACnB+F,EAAalP,EAAKrH,IAAImP,MACtBqH,EAAcnP,EAAKrH,IAAI2Q,OAIzB,GAA2B,IAAvBuF,EAAQ,GAAGG,QAAf,CAIA,IAEEC,EADYJ,EAAQO,WACFhN,KAAK,QACvB,MAAOiN,IAGLJ,GAASA,EAAM9P,QAAU8P,EAAM/D,WAAW/L,SAE5CmI,EAAO3O,IAAI,WAAY,WAEvBwQ,EAASxQ,IAAI,CACXmP,MAAO,OACP,YAAa,OACbwB,OAAQ,gBA5+DtB,IA++DgB4F,IACFA,EAAa9E,KAAKkF,KAAKlF,KAAKoE,IAAIS,EAAM,GAAGrN,YAAaqN,EAAMM,YAAW,MAGzEpG,EAASxQ,IAAI,QAASuW,GAA0B,IAAIvW,IAAI,YAAa,SAn/DjF,IAq/DgBwW,IACFA,EAAc/E,KAAKkF,KAAKlF,KAAKoE,IAAIS,EAAM,GAAGnE,aAAcmE,EAAMO,aAAY,MAG5ErG,EAASxQ,IAAI,SAAUwW,GAA4B,IAEnD7H,EAAO3O,IAAI,WAAY,SAGzBwQ,EAASvB,YAAY,2BAGvB1G,EAAK5F,UAAUmM,GAGjBoH,EAAQjW,KAAK,MAAO6O,EAAMvE,KAG1BoE,EAAOmF,IAAI,WAAW,WAEpB,IACE5V,EAAEqJ,MACCkC,KAAK,UACLkD,OACAmK,SACA7W,KAAK,MAAO,iBACf,MAAOyW,IAETxY,EAAEqJ,MACCqG,IAAI,cACJmJ,QAEHjI,EAAMe,UAAW,EACjBf,EAAMkI,YAAa,MAOvB3D,WAAY,SAAUvE,EAAO1H,GAC3B,IA5oDoByC,EA4oDTtC,KAEF+G,YAFE/G,KAMNuO,YAAYhH,GAEbA,EAAM0B,UACRtS,EAAEM,SAASuQ,KAAKD,EAAM0B,UAGxB1B,EAAMH,OAAOoI,SAxpDOlN,EA4pDRzC,IA3pDAyC,EAAIoN,gBAAkBpN,aAAe3L,GA2pDzBkJ,EAAQkL,SAAS9L,SAEnCY,EAAQoL,SAAS,qBAAuBpL,EAAQkL,SAASE,SAAS,sBACpEpL,EAAQ8P,QAAQ,mBAAmBxN,QAAQ,WAI7CoF,EAAMqI,aAAejZ,EAAE,SACpByO,OACAyK,YAAYhQ,GAGfA,EAAQpH,IAAI,UAAW,iBACb8O,EAAMgC,WAEQ,WAApB5S,EAAEmF,KAAK+D,KACTA,EAAUlJ,EAAE,SACT4K,OAAO5K,EAAE8W,KAAK5N,IACdqP,YAID3H,EAAMzH,KAAKgE,SACbjE,EAAUlJ,EAAE,SACTmZ,KAAKjQ,GACLqC,KAAKqF,EAAMzH,KAAKgE,UAIvByD,EAAMH,OAAOmF,IAAI,WAAW,WAE1B5V,EAAEqJ,MACCkC,KAAK,eACLC,QAAQ,SAGPoF,EAAMqI,eACRrI,EAAMqI,aAAaG,MAAMlQ,EAAQ6H,YAAY,oBAAoBtC,QAAQ0H,SAEzEvF,EAAMqI,aAAe,MAInBrI,EAAMyI,YACRzI,EAAMyI,UAAUlD,SAEhBvF,EAAMyI,UAAY,MAIfzI,EAAMgC,WACT5S,EAAEqJ,MAAMwP,QAERjI,EAAMe,UAAW,EACjBf,EAAMkI,YAAa,MAIvB9Y,EAAEkJ,GAASgC,SAAS0F,EAAMH,QAEtBzQ,EAAEkJ,GAASgG,GAAG,iBAChBlP,EAAEkJ,GAASqB,SAAS,kBAEpBvK,EAAEkJ,GAASoQ,KAAK,eAEhB1I,EAAMnE,YAAc,QAEpBmE,EAAMzH,KAAK8H,MAAQL,EAAMzH,KAAK8H,OAASjR,EAAEkJ,GAASnH,KAAK,SACvD6O,EAAMzH,KAAKsJ,OAAS7B,EAAMzH,KAAKsJ,QAAUzS,EAAEkJ,GAASnH,KAAK,WAG3D6O,EAAM0B,SAAW1B,EAAMH,OACpB4D,WACAlH,OAAO,uDACPoM,QAEH3I,EAAM0B,SAAS6B,WAAW1F,OAIrBmC,EAAM0B,SAAShK,SAClBsI,EAAM0B,SAAW1B,EAAMH,OACpB+I,UAAU,eACVnF,WACAkF,SAGL3I,EAAM0B,SAAS/H,SAAS,oBAExBqG,EAAMH,OAAOlG,SAAS,mBAAqBqG,EAAMnE,aAzGtCpD,KA2GN5E,UAAUmM,KAMjByE,SAAU,SAAUzE,GAClBA,EAAMgC,UAAW,EAEjBhC,EAAMH,OACHjF,QAAQ,WACRuF,YAAY,mBAAqBH,EAAMnE,aACvClC,SAAS,yBAEZqG,EAAMnE,YAAc,OAEpBpD,KAAK8L,WAAWvE,EAAOvH,KAAK2B,UAAU4F,EAAOA,EAAMzH,KAAKrG,WAEpD8N,EAAMf,MAAQxG,KAAKO,UACrBP,KAAKgH,aAAc,IAOvBiF,YAAa,SAAU1E,IAGrBA,EAAQA,GAFGvH,KAEWpE,WAER2L,EAAM6I,WAClB7I,EAAM6I,SAAWzZ,EALRqJ,KAKe2B,UALf3B,UAKoCF,KAAKtG,aAC/CqI,SAAS0F,EAAMH,QACfhC,OACAiL,OAAO,UAOd9B,YAAa,SAAUhH,IAGrBA,EAAQA,GAFGvH,KAEWpE,UAET2L,EAAM6I,WACjB7I,EAAM6I,SAAS5I,OAAOsF,gBAEfvF,EAAM6I,WAOjBhV,UAAW,SAAUmM,GACRvH,KAEF+G,YAITQ,EAAMoE,WAAY,EAClBpE,EAAMe,UAAW,EAPNtI,KASNmC,QAAQ,YAAaoF,GATfvH,KAWNuO,YAAYhH,IAGbA,EAAMzH,KAAKlI,UAAc2P,EAAMyI,WAAczI,EAAMyI,UAAU/Q,SAC/DsI,EAAMyI,UAAYrZ,EAfTqJ,KAegB2B,UAAU4F,EAAOA,EAAMzH,KAAKpG,OAAO9B,WAAWiK,SAAS0F,EAAM0B,WAIpF1B,EAAMzH,KAAK9H,SAAWuP,EAAM0B,WAAa1B,EAAMgC,WACjDhC,EAAM0B,SAASxE,GAAG,kBAAkB,SAAUC,GAK5C,OAJgB,GAAZA,EAAE4L,QACJ5L,EAAEE,kBAGG,KAKU,UAAf2C,EAAMzL,MACRnF,EAAE,0CAA0CkL,SAAS0F,EAAM0B,WA/BpDjJ,KAmCNsK,cAAc/C,GAnCRvH,KAqCNuK,aAAahD,GAEdA,EAAMf,MAvCCxG,KAuCYO,SAvCZP,KAwCJwJ,eAxCIxJ,KA2CNuI,cAAchB,KAOrB+C,cAAe,SAAU/C,GACvB,IAKEgJ,EAJA3U,EAAU2L,GADDvH,KACepE,QACxB8H,EAAU9H,EAAQkE,KAAK4D,QACvB8M,EAAiB5U,EAAQkE,KAAKrI,sBAC9BgZ,EAJSzQ,KAIO8B,MAAM4B,QAEtBgN,GAAW,EAEbD,EAAS/F,YAAY,6BAA8B8F,GAE/CA,GAAkB9M,GAAWA,EAAQzE,SACnCrD,EAAQ4K,MAXHxG,KAWgBO,UACvBgQ,EAASE,EAASE,QAAQ9O,SAAS4O,EAAS1F,WAGzCC,WACA4F,GAAG,GACHpB,QACAM,KAAKpM,GAERgN,EAAWH,EAAOjB,aAAY,GAE9BiB,EAAOf,QAAQ1C,UAtBR9M,KAuBOyQ,WACdC,EAxBO1Q,KAwBSyQ,SAASnB,aAAY,IAGvC1T,EAAQwL,OAAO3O,IAAI,iBAAkBiY,GAAY,MAQrDnG,aAAc,SAAUhD,GACtB,IAEElG,EACAwP,EACAC,EACAC,EAJAnV,EAAU2L,GADDvH,KACepE,QAMtBA,EAAQ0M,WAA8C,IAAlC1M,EAAQkE,KAAKkR,mBACnCpV,EAAQqN,SAASxQ,IAAI,gBAAiB,IAIlCmD,EAAQqN,SAASqG,cAAgB1T,EAAQwL,OAAOgC,SAAW,KAC7D0H,EAAgBlV,EAAQwL,OAAO,GAAGtI,MAAM,kBACxCiS,EAAgBnV,EAAQwL,OAAO3O,IAAI,kBAE/BwR,WAAW8G,GAAiB,IAC9B1P,EAAezF,EAAQwL,OAAO,GAAG/F,aAEjCzF,EAAQwL,OAAO3O,IAAI,iBAAkB,GAEjCyR,KAAKgB,IAAI7J,EAAezF,EAAQwL,OAAO,GAAG/F,cAAgB,IAC5DwP,EAAeE,GAGjBnV,EAAQwL,OAAO3O,IAAI,iBAAkBqY,KAIzClV,EAAQqN,SAASxQ,IAAI,gBAAiBoY,KAS1CtI,cAAe,SAAUhB,GACvB,IAME0J,EACAC,EACA3K,EACA6B,EATEpH,EAAOhB,KACToH,EAASG,EAAMH,OACfuC,GAAM,EACNwH,GAAQ,EACR1K,EAAUzF,EAAKyF,QAAQc,GACvBkI,EAAalI,EAAMkI,WA4BrB,OAtBAlI,EAAMkI,YAAa,EAEnBwB,EAAS1J,EAAMzH,KAAKkB,EAAKR,SAAW,kBAAoB,oBACxD+F,EAAWgB,EAAMzH,KAAKkB,EAAKR,SAAW,oBAAsB,sBAE5D+F,EAAWnG,cAj1EjB,IAi1E0BmH,EAAML,eAA+BX,EAAWgB,EAAML,eAAgB,KAEtFT,GAAWc,EAAMf,MAAQxF,EAAKT,SAAYgG,IAC5C0K,GAAS,GAII,SAAXA,IACE1J,EAAMf,MAAQxF,EAAKT,SAAWgG,GAA2B,UAAfgB,EAAMzL,OAAqByL,EAAMgC,WAAa4H,EAAQnQ,EAAKoQ,YAAY7J,IACnHoC,EAAM3I,EAAK4I,UAAUrC,GAErB0J,EAAS,QAME,SAAXA,GACFjQ,EAAKgG,aAAc,EAEnB2C,EAAIZ,OAASY,EAAI/B,MAAQuJ,EAAMvJ,MAC/B+B,EAAIX,OAASW,EAAIP,OAAS+H,EAAM/H,OAKjB,SAFfhB,EAAUb,EAAMzH,KAAK5G,eAGnBkP,EAAU8B,KAAKgB,IAAI3D,EAAMK,MAAQL,EAAM6B,OAAS+H,EAAMvJ,MAAQuJ,EAAM/H,QAAU,IAG5EhB,IACF+I,EAAM/I,QAAU,GAChBuB,EAAIvB,QAAU,GAIhBzR,EAAEM,SAAS+Q,aAAaT,EAAM0B,SAASvB,YAAY,sBAAuByJ,GAE1EpS,EAAYwI,EAAM0B,eAGlBtS,EAAEM,SAASiR,QAAQX,EAAM0B,SAAUU,EAAKpD,GAAU,WAChDvF,EAAKgG,aAAc,EAEnBhG,EAAKqH,gBAMTrH,EAAKwH,YAAYjB,GAIZ0J,GAgBLta,EAAEM,SAASuQ,KAAKJ,GAGhB8J,EAAkB,oBAAsB3J,EAAMf,KAAOxF,EAAKV,QAAU,OAAS,YAAc,kCAAoC2Q,EAE/H7J,EAAOlG,SAASgQ,GAAiBxJ,YAAY,2BAE7CH,EAAM0B,SAASvB,YAAY,sBAG3B3I,EAAYqI,GAEO,UAAfG,EAAMzL,MACRyL,EAAM0B,SAAS7D,OAAOC,KAAK,QAG7B1O,EAAEM,SAASiR,QACTd,EACA,0BACAb,GACA,WACEa,EAAOM,YAAYwJ,GAAiBzY,IAAI,CACtC0P,UAAW,GACXC,QAAS,KAGPb,EAAMf,MAAQxF,EAAKT,SACrBS,EAAKqH,cAGT,KA7CAd,EAAM0B,SAASvB,YAAY,sBAEtB+H,IAAchJ,GAA0B,UAAfc,EAAMzL,MAAqByL,EAAMgC,UAC7DhC,EAAM0B,SAAS7D,OAAOiL,OAAO,aAG3B9I,EAAMf,MAAQxF,EAAKT,SACrBS,EAAKqH,eA6CX+I,YAAa,SAAU7J,GACrB,IAAIjI,EAEF+R,EACAC,EACAC,EACAC,EACAC,EALAlO,EAASgE,EAAMhE,OAOjB,SAAKA,IAt+DQ,SAAUmO,GACzB,IAAIC,EAAYrS,EAEhB,SAAKoS,GAAQA,EAAKE,gBAAkBlb,KAIpCC,EAAE,uBAAuB8B,IAAI,iBAAkB,QAE/CkZ,EAAa,CACXjJ,EAAGgJ,EAAKG,wBAAwBlK,KAAO+J,EAAKI,YAAc,EAC1DnJ,EAAG+I,EAAKG,wBAAwB5J,IAAMyJ,EAAKxS,aAAe,GAG5DI,EAAM5I,EAASqb,iBAAiBJ,EAAWjJ,EAAGiJ,EAAWhJ,KAAO+I,EAEhE/a,EAAE,uBAAuB8B,IAAI,iBAAkB,IAExC6G,GAo9DW0S,CAAWzO,EAAO,OAIlC8N,EAAW1a,EAAEM,SAASqQ,aAAa/D,GAEnC+N,EAAMrH,WAAW1G,EAAO9K,IAAI,qBAAuB,GACnD8Y,EAAMtH,WAAW1G,EAAO9K,IAAI,uBAAyB,GACrD+Y,EAAMvH,WAAW1G,EAAO9K,IAAI,wBAA0B,GACtDgZ,EAAMxH,WAAW1G,EAAO9K,IAAI,sBAAwB,GAEpD6G,EAAM,CACJ2I,IAAKoJ,EAASpJ,IAAMqJ,EACpB3J,KAAM0J,EAAS1J,KAAO8J,EACtB7J,MAAOyJ,EAASzJ,MAAQ2J,EAAME,EAC9BrI,OAAQiI,EAASjI,OAASkI,EAAME,EAChCzI,OAAQ,EACRC,OAAQ,GAGHqI,EAASzJ,MAAQ,GAAKyJ,EAASjI,OAAS,GAAI9J,IAOrD+I,SAAU,WACR,IAGErJ,EAHEgC,EAAOhB,KACTpE,EAAUoF,EAAKpF,QACf8E,EAAS,IAGPM,EAAKyF,WAAc7K,EAAQ0M,WAI1B1M,EAAQ6L,aACX7L,EAAQ6L,YAAa,EAErB7L,EAAQwL,OAAO0D,WAAW3I,QAAQ,WAElCnB,EAAK7I,QAAQ,UAGb4G,EAAYnD,EAAQwL,QAEpBxL,EAAQwL,OAAOlG,SAAS,4BAGxBvK,EAAE6I,KAAKwB,EAAKN,QAAQ,SAAUjB,EAAK8H,GAC7BA,EAAMf,KAAOxF,EAAKT,QAAU,GAAKgH,EAAMf,KAAOxF,EAAKT,QAAU,EAC/DG,EAAO6G,EAAMf,KAAOe,EACXA,IACT5Q,EAAEM,SAASuQ,KAAKD,EAAMH,QAEtBG,EAAMH,OAAOf,MAAMyG,aAIvB9L,EAAKN,OAASA,GAGhBM,EAAKgG,aAAc,EAEnBhG,EAAKwI,eAELxI,EAAKmB,QAAQ,aAGPvG,EAAQkE,KAAKlH,MAAME,WACvB8C,EAAQwL,OACLlF,KAAK,eACL4B,OAAO,kBACP3B,QAAQ,QACRoK,IAAI,SAAS,WACR0F,SAASC,eACXD,SAASC,iBACAlS,KAAKmS,sBACdnS,KAAKmS,uBAGPnR,EAAK8D,UAKPlJ,EAAQkE,KAAK5F,WAAqC,SAAxB0B,EAAQwH,eAEpCpE,EAAMpD,EAAQqN,SAAS/G,KAAK,2CAEpBjD,OACND,EAAImD,QAAQ,SAEZnB,EAAKsD,MAAM,MAAM,IAKrB1I,EAAQwL,OAAOgL,UAAU,GAAGC,WAAW,KAMzCla,QAAS,SAAU2D,GACjB,IACEwW,EACAxN,EAFS9E,KAIFS,MAAMxB,OAAS,IAIxB6F,EARW9E,KAQCU,OARDV,KAQaO,QAAU,IAClC+R,EATWtS,KASCU,OATDV,KASaO,QAAU,KAEtB+R,EAAKxW,OAASA,GAXfkE,KAYJqH,UAAUiL,GAGbxN,GAAQA,EAAKhJ,OAASA,GAffkE,KAgBJqH,UAAUvC,KAOnBR,MAAO,SAAUI,EAAGlE,GAClB,IAgBE+R,EACAC,EAhBAC,EAAe,CACb,UACA,aACA,gEACA,4CACA,8CACA,4CACA,SACA,SACA,QACA,QACA,QACA,oBACA,mCACA3K,KAAK,KAfE9H,KAmBF+G,aAYTwL,GAHEA,GALE7N,GAvBO1E,KAuBIpE,SAvBJoE,KAuBqBpE,QAAQ6L,WAvB7BzH,KA4BapE,QAAQwL,OAAOlF,KAAK,aAAe1B,EAAW,8BAAgC,KA5B3FR,KAyBa8B,MAAMC,UAAUG,KAAK,cAMb4B,OAAO2O,GAAc3O,QAAO,WAC1D,MAAqC,WAA9BnN,EAAEqJ,MAAMvH,IAAI,gBAA+B9B,EAAEqJ,MAAMiL,SAAS,gBAGlDhM,QACjBuT,EAAmBD,EAAexS,MAAMrJ,EAASgc,eAE7ChO,GAAKA,EAAEiB,UAEL6M,EAAmB,GAAyB,GAApBA,KAC1B9N,EAAEE,iBAEF2N,EAAe3B,GAAG2B,EAAetT,OAAS,GAAGkD,QAAQ,WAInDqQ,EAAmB,GAAKA,GAAoBD,EAAetT,OAAS,KAClEyF,GACFA,EAAEE,iBAGJ2N,EAAe3B,GAAG,GAAGzO,QAAQ,WApDxBnC,KAwDJ8B,MAAMC,UAAUI,QAAQ,WAQjCC,SAAU,WACR,IAAIpB,EAAOhB,KAGXrJ,EAAE,uBAAuB6I,MAAK,WAC5B,IAAImT,EAAWhc,EAAEqJ,MAAM1H,KAAK,YAGxBqa,GAAYA,EAASxU,KAAO6C,EAAK7C,KAAOwU,EAAS5L,YACnD4L,EAASxQ,QAAQ,gBAEjBwQ,EAASnO,eAETmO,EAASC,WAAY,MAIzB5R,EAAK4R,WAAY,GAEb5R,EAAKpF,SAAWoF,EAAK+E,UACvB/E,EAAKkE,SAELlE,EAAKkD,kBAGPlD,EAAKmB,QAAQ,cAEbnB,EAAKuD,aAOP1K,MAAO,SAAU6K,EAAGmO,GAClB,IAEE5B,EACA1K,EACA0C,EACA6J,EACA1K,EACA+I,EACAxH,EARE3I,EAAOhB,KACTpE,EAAUoF,EAAKpF,QASbmX,EAAO,WACT/R,EAAKgS,QAAQtO,IAGf,OAAI1D,EAAK+F,YAIT/F,EAAK+F,WAAY,GAGsB,IAAnC/F,EAAKmB,QAAQ,cAAeuC,IAC9B1D,EAAK+F,WAAY,EAEjBxJ,GAAc,WACZyD,EAAKkE,aAGA,IAKTlE,EAAKwD,eAELyE,EAAWrN,EAAQqN,SACnBgI,EAASrV,EAAQkE,KAAK9G,gBACtBuN,EAAW5P,EAAEwQ,UAAU0L,GAAKA,EAAI5B,EAASrV,EAAQkE,KAAK7G,kBAAoB,EAE1E2C,EAAQwL,OAAOM,YAAY,6FAEjB,IAANhD,EACF/N,EAAEM,SAASuQ,KAAK5L,EAAQwL,QAExB6J,GAAS,EAIXrV,EAAQwL,OACL0D,WACA3I,QAAQ,WACR2K,SAGCvG,GACFvF,EAAKc,MAAMC,UACR2F,YAAY,oBACZxG,SAAS,uBACTzI,IAAI,sBAAuB8N,EAAW,MAI3CvF,EAAKuN,YAAY3S,GAEjBoF,EAAKoF,cAAa,GAElBpF,EAAKwI,eAIQ,SAAXyH,GACEhI,GAAY1C,GAA6B,UAAjB3K,EAAQE,OAAqBkF,EAAKyF,YAAc7K,EAAQ2N,WAAaI,EAAM3I,EAAKoQ,YAAYxV,MAEtHqV,EAAS,QAGI,SAAXA,GACFta,EAAEM,SAASuQ,KAAKyB,GAIhBkI,EAAQ,CACNlJ,KAHF6K,EAAUnc,EAAEM,SAASqQ,aAAa2B,IAGnBhB,IACbN,KAAMmL,EAAQnL,KACdoB,OAAQ+J,EAAQlL,MAAQ+B,EAAI/B,MAC5BoB,OAAQ8J,EAAQ1J,OAASO,EAAIP,OAC7BxB,MAAO+B,EAAI/B,MACXwB,OAAQO,EAAIP,QAMC,SAFfhB,EAAUxM,EAAQkE,KAAK5G,eAGrBkP,EAAU8B,KAAKgB,IAAItP,EAAQgM,MAAQhM,EAAQwN,OAASO,EAAI/B,MAAQ+B,EAAIP,QAAU,IAG5EhB,IACFuB,EAAIvB,QAAU,GAGhBzR,EAAEM,SAAS+Q,aAAaiB,EAAUkI,GAElCpS,EAAYkK,GAEZtS,EAAEM,SAASiR,QAAQe,EAAUU,EAAKpD,EAAUwM,IAErC,IAGL9B,GAAU1K,EACZ5P,EAAEM,SAASiR,QACTtM,EAAQwL,OAAOlG,SAAS,4BAA4BwG,YAAY,2BAChE,iCAAmCuJ,EACnC1K,EACAwM,IAIQ,IAANrO,EACF7G,WAAWkV,EAAMxM,GAEjBwM,KAIG,MAMTC,QAAS,SAAUtO,GACjB,IACEiO,EAEAjK,EACAC,EAFAsK,EAFSjT,KAEKpE,QAAQkE,KAAKqD,MAFlBnD,KAMNpE,QAAQwL,OAAOjF,QAAQ,WANjBnC,KAQN8B,MAAMC,UAAUyN,QAAQ1C,SARlB9M,KAUNmC,QAAQ,aAAcuC,GAVhB1E,KAaApE,QAAQkE,KAAK3F,YACjB8Y,GAAWA,EAAOhU,QAAWgU,EAAOpN,GAAG,cAC1CoN,EAfOjT,KAeOwD,UAGZyP,GAAUA,EAAOhU,SACnByJ,EAAIjS,EAAOyc,QACXvK,EAAIlS,EAAO0c,QAEXF,EAAO9Q,QAAQ,SAEfxL,EAAE,cACCyb,UAAUzJ,GACV0J,WAAW3J,KA1BP1I,KA8BNpE,QAAU,MAGf+W,EAAWhc,EAAEM,SAASkK,eAGpBwR,EAASvQ,YAETzL,EAAE,QAAQ+Q,YAAY,4CAEtB/Q,EAAE,4BAA4BmW,WAOlC3K,QAAS,SAAUiR,EAAM7L,GACvB,IAGEjI,EAHE+T,EAAOC,MAAMzS,UAAU0S,MAAMC,KAAKC,UAAW,GAC/CzS,EAAOhB,KACPsC,EAAMiF,GAASA,EAAMzH,KAAOyH,EAAQvG,EAAKpF,QAe3C,GAZI0G,EACF+Q,EAAKK,QAAQpR,GAEbA,EAAMtB,EAGRqS,EAAKK,QAAQ1S,GAETrK,EAAE6U,WAAWlJ,EAAIxC,KAAKsT,MACxB9T,EAAMgD,EAAIxC,KAAKsT,GAAMzP,MAAMrB,EAAK+Q,KAGtB,IAAR/T,EACF,OAAOA,EAGI,eAAT8T,GAA0BpS,EAAKc,MAGjCd,EAAKc,MAAMC,UAAUI,QAAQiR,EAAO,MAAOC,GAF3ChW,EAAG8E,QAAQiR,EAAO,MAAOC,IAS7BnP,eAAgB,WACd,IACEtI,EADSoE,KACMpE,QACfmE,EAAQnE,EAAQmE,MAChBe,EAHSd,KAGS8B,MAAMC,UACxB0O,EAJSzQ,KAIO8B,MAAM4B,QACtBA,EAAU9H,EAAQkE,KAAK4D,QAGzB9H,EAAQwL,OAAOjF,QAAQ,WAGnBuB,GAAWA,EAAQzE,QAXZe,KAYJyQ,SAAWA,EAEhBA,EACGzF,WACA4F,GAAG,GACHd,KAAKpM,IAjBC1D,KAmBJyQ,SAAW,KAnBPzQ,KAsBD2T,mBAtBC3T,KAsB0B+F,QAtB1B/F,KAuBJgG,eAIPlF,EAAWoB,KAAK,yBAAyB4N,KA3B9B9P,KA2BwCS,MAAMxB,QACzD6B,EAAWoB,KAAK,yBAAyB4N,KAAK/P,EAAQ,GAEtDe,EAAWoB,KAAK,wBAAwB0E,KAAK,YAAahL,EAAQkE,KAAKxI,MAAQyI,GAAS,GACxFe,EAAWoB,KAAK,wBAAwB0E,KAAK,YAAahL,EAAQkE,KAAKxI,MAAQyI,GA/BpEC,KA+BkFS,MAAMxB,OAAS,GAEvF,UAAjBrD,EAAQE,KAEVgF,EACGoB,KAAK,wBACLmD,OACAsE,MACAzH,KAAK,4BACLxJ,KAAK,OAAQkD,EAAQkE,KAAK5H,MAAM8K,KAAOpH,EAAQoH,KAC/CqC,OACMzJ,EAAQkE,KAAKjI,SACtBiJ,EAAWoB,KAAK,iDAAiDkD,OAI/DzO,EAAED,EAASgc,eAAe7M,GAAG,uBA/CtB7F,KAgDJ8B,MAAMC,UAAUI,QAAQ,UAOjCiE,aAAc,SAAUwN,GACtB,IACEpR,EAAM,CAAC,UAAW,UAAW,QAE3BoR,GAHO5T,KAGapE,QAAQkE,KAAKrI,uBACnC+K,EAAIuB,KAAK,WAGX/D,KAAK8B,MAAMC,UAAU2F,YACnBlF,EACC+K,KAAI,SAAU1K,GACb,MAAO,iBAAmBA,KAE3BiF,KAAK,MAGR9H,KAAK2T,mBAAoB,GAG3B3N,aAAc,WACZ,IACElG,EADSE,KACGpE,QADHoE,KACkBpE,QAAQkE,KAD1BE,KACsCF,KAC/CgB,EAFSd,KAES8B,MAAMC,UAFf/B,KAIN2T,mBAAoB,EAJd3T,KAKN8F,mBAAqB,EAE1BhF,EACG4J,YAAY,2BAA4B5K,EAAKjI,UAAWiI,EAAKhI,UAC7D4S,YAAY,2BAA4B5K,EAAKnI,SATrCqI,KASqDS,MAAMxB,OAAS,IAC5EyL,YAAY,0BAVJ1K,KAUoCyQ,UAC5C/F,YAAY,uBAAwB5K,EAAKpI,QAXjCsI,KAWgDS,MAAMxB,OAAS,IACvEyL,YAAY,sBAAuB5K,EAAK7H,QAM7C4b,eAAgB,WACV7T,KAAK2T,kBACP3T,KAAKgG,eAELhG,KAAKoG,kBAKXzP,EAAEM,SAAW,CACX6c,QAAS,QACT1c,SAAUA,EAcV+J,YAAa,SAAU4S,GACrB,IAAIpB,EAAWhc,EAAE,wDAAwD2B,KAAK,YAC5E+a,EAAOC,MAAMzS,UAAU0S,MAAMC,KAAKC,UAAW,GAE/C,OAAId,aAAoB/S,IACE,WAApBjJ,EAAEmF,KAAKiY,GACTpB,EAASoB,GAASpQ,MAAMgP,EAAUU,GACL,aAApB1c,EAAEmF,KAAKiY,IAChBA,EAAQpQ,MAAMgP,EAAUU,GAGnBV,IASXqB,KAAM,SAAUrR,EAAO7C,EAAMC,GAC3B,OAAO,IAAIH,EAAS+C,EAAO7C,EAAMC,IAMnClG,MAAO,SAAUoa,GACf,IAAItB,EAAW3S,KAAKmB,cAEhBwR,IACFA,EAAS9Y,SAGG,IAARoa,GACFjU,KAAKnG,MAAMoa,KAQjBC,QAAS,WACPlU,KAAKnG,OAAM,GAEXwD,EAAGmN,IAAI,QAAQnE,IAAI,iBAAkB,OAMvCnG,SAAU,iEAAiEiU,KAAKC,UAAUC,WAK1FC,OACMpd,EAAMR,EAAS8H,cAAc,OAG/B/H,EAAO8d,kBACP9d,EAAO8d,iBAAiBrd,IACxBT,EAAO8d,iBAAiBrd,GAAKsd,iBAAiB,gBAC5C9d,EAAS+d,cAAgB/d,EAAS+d,aAAe,KAQvDnN,aAAc,SAAUtI,GACtB,IAAI8T,EAEJ,SAAK9T,IAAQA,EAAIC,SAMV,CACLgJ,KAHF6K,EAAU9T,EAAI,GAAG6S,yBAGF5J,KAAO,EACpBN,KAAMmL,EAAQnL,MAAQ,EACtBC,MAAOkL,EAAQlL,MACfwB,OAAQ0J,EAAQ1J,OAChBhB,QAAS6B,WAAWjL,EAAIvG,IAAI,cAQhCuP,aAAc,SAAUhJ,EAAK0V,GAC3B,IAAInS,EAAM,GACR9J,EAAM,GAER,GAAKuG,GAAQ0V,EAwCb,YA/nGN,IA2lGUA,EAAM/M,WA3lGhB,IA2lGsC+M,EAAMzM,MACpC1F,QA5lGR,IA6lGWmS,EAAM/M,KAAqB3I,EAAI2V,WAAWhN,KAAO+M,EAAM/M,MACxD,aA9lGV,IA+lGW+M,EAAMzM,IAAoBjJ,EAAI2V,WAAW1M,IAAMyM,EAAMzM,KACtD,KAGA1F,EADEvC,KAAKsU,MACD,eAAiB/R,EAAM,SAEvB,aAAeA,EAAM,UArmGrC,IAymGUmS,EAAM3L,aAzmGhB,IAymGwC2L,EAAM1L,OACtCzG,GAAO,UAAYmS,EAAM3L,OAAS,KAAO2L,EAAM1L,OAAS,SA1mGhE,IA2mGiB0L,EAAM3L,SACfxG,GAAO,WAAamS,EAAM3L,OAAS,KAGjCxG,EAAItD,SACNxG,EAAI0P,UAAY5F,QAhnGxB,IAmnGUmS,EAAMtM,UACR3P,EAAI2P,QAAUsM,EAAMtM,cApnG5B,IAunGUsM,EAAM9M,QACRnP,EAAImP,MAAQ8M,EAAM9M,YAxnG1B,IA2nGU8M,EAAMtL,SACR3Q,EAAI2Q,OAASsL,EAAMtL,QAGdpK,EAAIvG,IAAIA,IAMjByP,QAAS,SAAUlJ,EAAK4V,EAAIrO,EAAU3I,EAAUiX,GAC9C,IACEC,EADE9T,EAAOhB,KAGPrJ,EAAE6U,WAAWjF,KACf3I,EAAW2I,EACXA,EAAW,MAGbvF,EAAKwG,KAAKxI,GAEV8V,EAAO9T,EAAKsG,aAAatI,GAEzBA,EAAIyF,GAAGpG,GAAe,SAAUqG,KAE1BA,IAAKA,EAAEM,eAAmBhG,EAAI6G,GAAGnB,EAAEM,cAAcY,SAA2C,WAAhClB,EAAEM,cAAc+P,gBAIhF/T,EAAKwG,KAAKxI,GAENrI,EAAEwQ,UAAUZ,IACdvH,EAAIvG,IAAI,sBAAuB,IAG7B9B,EAAEsJ,cAAc2U,QA9pG5B,IA+pGcA,EAAG7L,aA/pGjB,IA+pGyC6L,EAAG5L,QAChChI,EAAKgH,aAAahJ,EAAK,CACrBiJ,IAAK2M,EAAG3M,IACRN,KAAMiN,EAAGjN,KACTC,MAAOkN,EAAKlN,MAAQgN,EAAG7L,OACvBK,OAAQ0L,EAAK1L,OAASwL,EAAG5L,OACzBD,OAAQ,EACRC,OAAQ,KAGoB,IAAvB6L,GACT7V,EAAI0I,YAAYkN,GAGdje,EAAE6U,WAAW5N,IACfA,EAAS8G,OAIT/N,EAAEwQ,UAAUZ,IACdvH,EAAIvG,IAAI,sBAAuB8N,EAAW,MAIxC5P,EAAEsJ,cAAc2U,SAvrG1B,IAwrGYA,EAAG7L,aAxrGf,IAwrGuC6L,EAAG5L,gBACzB4L,EAAGhN,aACHgN,EAAGxL,OAENpK,EAAI+L,SAASE,SAAS,0BACxBjM,EAAI+L,SAAS7J,SAAS,wBAI1BvK,EAAEM,SAAS+Q,aAAahJ,EAAK4V,IAE7B5V,EAAIkC,SAAS0T,GAIf5V,EAAI1G,KACF,QACAuF,YAAW,WACTmB,EAAImD,QAAQ9D,KACXkI,EAAW,MAIlBiB,KAAM,SAAUxI,EAAKgW,GACfhW,GAAOA,EAAIC,SACbb,aAAaY,EAAI1G,KAAK,UAElB0c,GACFhW,EAAImD,QAAQ9D,GAGdW,EAAIqH,IAAIhI,GAAe5F,IAAI,sBAAuB,IAElDuG,EAAI+L,SAASrD,YAAY,0BAiE/B/Q,EAAEK,GAAGC,SAAW,SAAUiM,GACxB,IAAI+R,EAsBJ,OAnBAA,GADA/R,EAAUA,GAAW,IACF+R,WAAY,GAI7Bte,EAAE,QACC0P,IAAI,iBAAkB4O,GACtBxQ,GAAG,iBAAkBwQ,EAAU,CAC9B/R,QAASA,GACRgS,GAELlV,KAAKqG,IAAI,kBAAkB5B,GACzB,iBAAkB,CAChB9B,MAAO3C,KACPkD,QAASA,GAEXgS,GAIGlV,MAMT3C,EAAGoH,GAAG,iBAAkB,kBAAmByQ,GAK3C7X,EAAGoH,GAAG,iBAAkB,2BAA2B,SAAUC,GAC3D/N,EAAE,mBAAqBA,EAAEqJ,MAAMtH,KAAK,yBAA2B,MAC5DkY,GAAGja,EAAEqJ,MAAMtH,KAAK,wBAA0B,GAC1CyJ,QAAQ,iBAAkB,CACzBqB,SAAU7M,EAAEqJ,WASd7I,EAAW,KAEbkG,EAAGoH,GAAG,+BAJU,oBAIiC,SAAUC,GACzD,OAAQA,EAAE5I,MACR,IAAK,YACH3E,EAAWR,EAAEqJ,MACb,MACF,IAAK,UACH7I,EAAW,KACX,MACF,IAAK,UACHR,EAbU,oBAaG+Q,YAZN,kBAcF/Q,EAAEqJ,MAAM6F,GAAG1O,IAAcR,EAAEqJ,MAAM6F,GAAG,eACvClP,EAAEqJ,MAAMkB,SAfH,kBAiBP,MACF,IAAK,WACHvK,EApBU,oBAoBG+Q,YAnBN,sBAvGf,SAASwN,EAAKxQ,EAAG5E,GACf,IAEEqV,EACAzV,EACAiT,EAJEhQ,EAAQ,GACV5C,EAAQ,EAMN2E,GAAKA,EAAE0Q,uBAIX1Q,EAAEE,iBAEF9E,EAAOA,GAAQ,GAEX4E,GAAKA,EAAEpM,OACTwH,EAAOX,EAAUuF,EAAEpM,KAAK4K,QAASpD,IAGnCqV,EAAUrV,EAAKqV,SAAWxe,EAAE+N,EAAE2Q,eAAelT,QAAQ,SACrDwQ,EAAWhc,EAAEM,SAASkK,gBAENwR,EAASnP,UAAYmP,EAASnP,SAASqC,GAAGsP,KAKxDxS,EADE7C,EAAKmV,SACCte,EAAEmJ,EAAKmV,WAGfvV,EAAQyV,EAAQzc,KAAK,kBAAoB,KAGvCiK,EAAQ+B,EAAEpM,KAAOoM,EAAEpM,KAAKqK,MAAQ,IAClB1D,OAAS0D,EAAMmB,OAAO,mBAAqBpE,EAAQ,MAAQ/I,EAAE,mBAAqB+I,EAAQ,MAEhG,CAACyV,IAIbpV,EAAQpJ,EAAEgM,GAAO5C,MAAMoV,IAGX,IACVpV,EAAQ,IAGV4S,EAAWhc,EAAEM,SAAS+c,KAAKrR,EAAO7C,EAAMC,IAG/ByD,SAAW2R,KApxGxB,CAg2GG1e,OAAQC,SAAU4e,QAOrB,SAAW3e,GACT,aAGA,IAAIS,EAAW,CACbme,QAAS,CACPC,QAAS,wJACTC,OAAQ,CACNC,SAAU,EACVC,SAAU,EACVC,GAAI,EACJC,IAAK,EACLC,GAAI,EACJC,MAAO,cACPC,YAAa,EACbC,MAAO,GAETC,WAAY,EACZpa,KAAM,SACNoQ,IAAK,4CACLzI,MAAO,+CAGT0S,MAAO,CACLX,QAAS,oCACTC,OAAQ,CACNC,SAAU,EACVI,GAAI,EACJM,WAAY,EACZC,YAAa,EACbC,cAAe,EACfC,WAAY,GAEdL,WAAY,EACZpa,KAAM,SACNoQ,IAAK,+BAGPsK,UAAW,CACThB,QAAS,yDACT1Z,KAAM,QACNoQ,IAAK,2BAQPuK,WAAY,CACVjB,QAAS,4GACT1Z,KAAM,SACNoQ,IAAK,SAAU5M,GACb,MACE,iBACAA,EAAI,GACJ,SACCA,EAAI,GAAKA,EAAI,GAAK,MAAQ4K,KAAKE,MAAM9K,EAAI,MAAQA,EAAI,IAAMA,EAAI,IAAIsC,QAAQ,MAAO,KAAO,IAAMtC,EAAI,IAAM,IAAIsC,QAAQ,KAAM,KAC5H,YACCtC,EAAI,KAAOA,EAAI,IAAIoX,QAAQ,WAAa,EAAI,UAAY,WAS/DC,YAAa,CACXnB,QAAS,oEACT1Z,KAAM,SACNoQ,IAAK,SAAU5M,GACb,MAAO,iBAAmBA,EAAI,GAAK,WAAaA,EAAI,GAAGsC,QAAQ,SAAU,MAAMA,QAAQ,QAAS,IAAM,mBAMxG/I,EAAS,SAAUqT,EAAK5M,EAAKmW,GAC/B,GAAKvJ,EAkBL,OAdAuJ,EAASA,GAAU,GAEI,WAAnB9e,EAAEmF,KAAK2Z,KACTA,EAAS9e,EAAEigB,MAAMnB,GAAQ,IAG3B9e,EAAE6I,KAAKF,GAAK,SAAUG,EAAKC,GACzBwM,EAAMA,EAAItK,QAAQ,IAAMnC,EAAKC,GAAS,OAGpC+V,EAAOxW,SACTiN,IAAQA,EAAIwK,QAAQ,KAAO,EAAI,IAAM,KAAOjB,GAGvCvJ,GAGTvV,EAAED,UAAU+N,GAAG,sBAAsB,SAAUC,EAAGiO,EAAU1Q,GAC1D,IAEEvH,EACA+I,EACAnE,EACAmW,EACAoB,EACAC,EACAC,EARE7K,EAAMjK,EAAKe,KAAO,GACpBlH,GAAO,EASTpB,EAAQ/D,EAAE4I,QAAO,EAAM,GAAInI,EAAU6K,EAAKnC,KAAKpF,OAG/C/D,EAAE6I,KAAK9E,GAAO,SAAUsc,EAAcC,GAGpC,GAFA3X,EAAM4M,EAAIzJ,MAAMwU,EAAazB,SAE7B,CAQA,GAJA1Z,EAAOmb,EAAanb,KACpBib,EAAWC,EACXF,EAAW,GAEPG,EAAaf,YAAc5W,EAAI2X,EAAaf,YAAa,CAGvC,MAFpBW,EAAYvX,EAAI2X,EAAaf,aAEf,KACZW,EAAYA,EAAUnJ,UAAU,IAGlCmJ,EAAYA,EAAUjT,MAAM,KAE5B,IAAK,IAAIsT,EAAI,EAAGA,EAAIL,EAAU5X,SAAUiY,EAAG,CACzC,IAAIC,EAAIN,EAAUK,GAAGtT,MAAM,IAAK,GAEhB,GAAZuT,EAAElY,SACJ6X,EAASK,EAAE,IAAMC,mBAAmBD,EAAE,GAAGvV,QAAQ,MAAO,QAqB9D,OAhBA6T,EAAS9e,EAAE4I,QAAO,EAAM,GAAI0X,EAAaxB,OAAQxT,EAAKnC,KAAKkX,GAAeF,GAE1E5K,EAC+B,aAA7BvV,EAAEmF,KAAKmb,EAAa/K,KAAsB+K,EAAa/K,IAAIsH,KAAKxT,KAAMV,EAAKmW,EAAQxT,GAAQpJ,EAAOoe,EAAa/K,IAAK5M,EAAKmW,GAE3HhS,EACiC,aAA/B9M,EAAEmF,KAAKmb,EAAaxT,OAAwBwT,EAAaxT,MAAM+P,KAAKxT,KAAMV,EAAKmW,EAAQxT,GAAQpJ,EAAOoe,EAAaxT,MAAOnE,GAEvG,YAAjB0X,EACF9K,EAAMA,EAAItK,QAAQ,sBAAsB,SAAUa,EAAO4U,EAAIH,EAAGI,GAC9D,MAAO,YAAcJ,EAAsB,GAAlB9W,SAAS8W,EAAG,IAAW,GAAK9W,SAASkX,EAAG,QAEzC,UAAjBN,IACT9K,EAAMA,EAAItK,QAAQ,OAAQ,OAGrB,MAKL9F,GACGmG,EAAKnC,KAAK2D,OAAWxB,EAAKnC,KAAKyD,QAAUtB,EAAKnC,KAAKyD,OAAOtE,SAC7DgD,EAAKnC,KAAK2D,MAAQA,GAGP,WAAT3H,IACFmG,EAAKnC,KAAOnJ,EAAE4I,QAAO,EAAM0C,EAAKnC,KAAM,CACpCvH,OAAQ,CACNJ,SAAS,EACTO,KAAM,CACJC,UAAW,UAMnBhC,EAAE4I,OAAO0C,EAAM,CACbnG,KAAMA,EACNkH,IAAKkJ,EACLqL,QAAStV,EAAKe,IACdwU,cAAeT,EACf3T,YAAsB,UAATtH,EAAmB,QAAsB,cAAZib,GAAwC,eAAZA,EAA4B,MAAQ,WAEnG7K,IACTjK,EAAKnG,KAAOmG,EAAKnC,KAAK/G,gBAK1B,IAAI0e,EAAiB,CACnBlC,QAAS,CACPvS,IAAK,qCACL0U,MAAO,KACPC,SAAS,EACTC,QAAQ,GAGVzB,MAAO,CACLnT,IAAK,yCACL0U,MAAO,QACPC,SAAS,EACTC,QAAQ,GAGVC,KAAM,SAAUC,GACd,IACEC,EADEC,EAAQhY,KAGRA,KAAK8X,GAAQF,OACf/Z,YAAW,WACTma,EAAMjF,KAAK+E,MAKX9X,KAAK8X,GAAQH,UAIjB3X,KAAK8X,GAAQH,SAAU,GAEvBI,EAASrhB,SAAS8H,cAAc,WACzB1C,KAAO,kBACdic,EAAO/U,IAAMhD,KAAK8X,GAAQ9U,IAEX,YAAX8U,EACFrhB,OAAOwhB,wBAA0B,WAC/BD,EAAMF,GAAQF,QAAS,EACvBI,EAAMjF,KAAK+E,IAGbC,EAAO/K,OAAS,WACdgL,EAAMF,GAAQF,QAAS,EACvBI,EAAMjF,KAAK+E,IAIfphB,SAAS0K,KAAK8W,YAAYH,KAE5BhF,KAAM,SAAU+E,GACd,IAAInF,EAAU3T,EAEC,YAAX8Y,UACKrhB,OAAOwhB,yBAGhBtF,EAAWhc,EAAEM,SAASkK,iBAGpBnC,EAAM2T,EAAS/W,QAAQqN,SAAS/G,KAAK,UAEtB,YAAX4V,QAA+BlhB,IAAPuhB,IAAoBA,GACrC,IAAIA,GAAGC,OAAOpZ,EAAItG,KAAK,MAAO,CACrC2f,OAAQ,CACNC,cAAe,SAAU5T,GACT,GAAVA,EAAEpM,MACJqa,EAAS7N,WAKG,UAAXgT,QAAgClhB,IAAV2hB,OAAuBA,OAC7C,IAAIA,MAAMH,OAAOpZ,GAEnByF,GAAG,SAAS,WACjBkO,EAAS7N,aAOnBnO,EAAED,UAAU+N,GAAG,CACb,eAAgB,SAAUC,EAAGiO,EAAU/W,GACjC+W,EAASlS,MAAMxB,OAAS,IAAgC,YAA1BrD,EAAQ4b,eAAyD,UAA1B5b,EAAQ4b,gBAC/EC,EAAeI,KAAKjc,EAAQ4b,kBAvRpC,CA2RGlC,QAOH,SAAW7e,EAAQC,EAAUC,GAC3B,aAEA,IAAI4G,EAEA9G,EAAO+G,uBACP/G,EAAOgH,6BACPhH,EAAOiH,0BACPjH,EAAOkH,wBAEP,SAAUC,GACR,OAAOnH,EAAOoH,WAAWD,EAAU,IAAO,KAK5CE,EAEArH,EAAOsH,sBACPtH,EAAOuH,4BACPvH,EAAOwH,yBACPxH,EAAOyH,uBACP,SAAUC,GACR1H,EAAO2H,aAAaD,IAKtBqa,EAAe,SAAU9T,GAC3B,IAAI+T,EAAS,GAKb,IAAK,IAAIhZ,KAFTiF,GADAA,EAAIA,EAAEM,eAAiBN,GAAKjO,EAAOiO,GAC7BgU,SAAWhU,EAAEgU,QAAQzZ,OAASyF,EAAEgU,QAAUhU,EAAEiU,gBAAkBjU,EAAEiU,eAAe1Z,OAASyF,EAAEiU,eAAiB,CAACjU,GAG5GA,EAAEjF,GAAKmZ,MACTH,EAAO1U,KAAK,CACV2E,EAAGhE,EAAEjF,GAAKmZ,MACVjQ,EAAGjE,EAAEjF,GAAKoZ,QAEHnU,EAAEjF,GAAKqZ,SAChBL,EAAO1U,KAAK,CACV2E,EAAGhE,EAAEjF,GAAKqZ,QACVnQ,EAAGjE,EAAEjF,GAAKsZ,UAKhB,OAAON,GAGLO,EAAW,SAAUC,EAAQC,EAAQC,GACvC,OAAKD,GAAWD,EAIH,MAATE,EACKF,EAAOvQ,EAAIwQ,EAAOxQ,EACP,MAATyQ,EACFF,EAAOtQ,EAAIuQ,EAAOvQ,EAGpBuB,KAAKkP,KAAKlP,KAAKmP,IAAIJ,EAAOvQ,EAAIwQ,EAAOxQ,EAAG,GAAKwB,KAAKmP,IAAIJ,EAAOtQ,EAAIuQ,EAAOvQ,EAAG,IATzE,GAYP2Q,EAAc,SAAUta,GAC1B,GACEA,EAAI6G,GAAG,yFACPlP,EAAE6U,WAAWxM,EAAI2L,IAAI,GAAG4O,UACxBva,EAAI1G,KAAK,cAET,OAAO,EAIT,IAAK,IAAIuK,EAAI,EAAG2W,EAAOxa,EAAI,GAAGya,WAAY/W,EAAI8W,EAAKva,OAAQ4D,EAAIH,EAAGG,IAChE,GAAuC,mBAAnC2W,EAAK3W,GAAG6W,SAASC,OAAO,EAAG,IAC7B,OAAO,EAIX,OAAO,GAYLC,EAAe,SAAU5a,GAG3B,IAFA,IAV4BT,EACxBsb,EACFC,EACAvf,EACAwf,EAMEza,GAAM,EAVkBf,EAaNS,EAAI2L,IAAI,GAZ1BkP,SACFC,SACAvf,SACAwf,SAHEF,EAAYpjB,EAAO8d,iBAAiBhW,GAAI,cAC1Cub,EAAYrjB,EAAO8d,iBAAiBhW,GAAI,cACxChE,GAA0B,WAAdsf,GAAwC,SAAdA,IAAyBtb,EAAG8C,aAAe9C,EAAGqM,aACpFmP,GAA4B,WAAdD,GAAwC,SAAdA,IAAyBvb,EAAGyb,YAAczb,EAAGmD,cASrFpC,EAPK/E,GAAYwf,KAajB/a,EAAMA,EAAI+L,UAED9L,SAAUD,EAAIiM,SAAS,oBAAqBjM,EAAI6G,GAAG,UAK9D,OAAOvG,GAGLiM,EAAY,SAAUoH,GACb3S,KAEN2S,SAAWA,EAFL3S,KAINia,IAAMtH,EAAS7Q,MAAMoY,GAJfla,KAKNma,OAASxH,EAAS7Q,MAAMqD,MALlBnF,KAMNc,WAAa6R,EAAS7Q,MAAMC,UANtB/B,KAQNkU,UARMlU,KAUNc,WAAW2D,GAAG,yCAA0C9N,EAAEyjB,MAVpDpa,KAUgE,kBAG7EuL,EAAU1K,UAAUqT,QAAU,WACjBlU,KAENc,WAAWuF,IAAI,aAEpB1P,EAAED,GAAU2P,IAAI,aAJLrG,KAMFiF,YACPnH,EAPSkC,KAOSiF,WAPTjF,KAQJiF,UAAY,MARRjF,KAWFqa,SACPjc,aAZS4B,KAYSqa,QAZTra,KAaJqa,OAAS,OAIlB9O,EAAU1K,UAAUyZ,aAAe,SAAU5V,GAC3C,IACEyQ,EAAUxe,EAAE+N,EAAEkB,QACd+M,EAFS3S,KAEO2S,SAChB/W,EAAU+W,EAAS/W,QACnBwL,EAASxL,EAAQwL,OACjB6B,EAAWrN,EAAQqN,SACnBsR,EAA0B,cAAV7V,EAAE5I,KAQpB,GALIye,GATOva,KAUJc,WAAWuF,IAAI,wBAIlB3B,EAAEM,eAA2C,GAA1BN,EAAEM,cAAcsL,SAKlClJ,EAAOnI,QAAWkW,EAAQlW,SAAUqa,EAAYnE,KAAYmE,EAAYnE,EAAQpK,YAIhFoK,EAAQtP,GAAG,UAAUnB,EAAEM,cAAc8T,QAAU3D,EAAQ,GAAGzT,YAAcyT,EAAQqF,SAAS7S,OAA9F,CAKA,IAAK/L,GAAW+W,EAAS3L,aAAepL,EAAQwL,OAAO6D,SAAS,qBAI9D,OAHAvG,EAAEC,uBACFD,EAAEE,iBA9BO5E,KAmCNya,WAnCMza,KAmCY0a,YAAclC,EAAa9T,GAnCvC1E,KAqCD0a,YAAYzb,SAKlBrD,EAAQtB,OACVoK,EAAEC,kBA3CO3E,KA8CN2a,WAAajW,EA9CP1E,KAgDN4a,QAAS,EAhDH5a,KAiDNmV,QAAUA,EAjDJnV,KAkDNiJ,SAAWA,EAlDLjJ,KAmDNF,KAAOlE,EAAQkE,KAAKxF,MAnDd0F,KAqDN6a,WAAY,EArDN7a,KAsDN8a,WAAY,EAtDN9a,KAuDN+a,WAAY,EAvDN/a,KAwDNgb,aAAc,EAxDRhb,KAyDNqL,OAASsH,EAAStH,SAzDZrL,KA2DNib,WAAY,IAAIrM,MAAOC,UA3DjB7O,KA4DNkb,UA5DMlb,KA4DWmb,UA5DXnb,KA4D4BgZ,SAAW,EA5DvChZ,KA8DNkJ,YAAcgB,KAAKmE,MAAMjH,EAAO,GAAG1F,aA9D7B1B,KA+DNmJ,aAAee,KAAKmE,MAAMjH,EAAO,GAAGwD,cA/D9B5K,KAiENob,eAAiB,KAjEXpb,KAkENqb,gBAAkB1kB,EAAEM,SAASqQ,aAlEvBtH,KAkEyCiJ,WAAa,CAC/DhB,IAAK,EACLN,KAAM,GApEG3H,KAsENsb,eAAiB3kB,EAAEM,SAASqQ,aAAaF,GAtEnCpH,KAyEN2G,SAAWhQ,EAAEM,SAASqQ,aAAaqL,EAAS7Q,MAAMqD,OAzE5CnF,KA2ENsb,eAAerT,KA3ETjI,KA2EqB2G,SAASsB,IA3E9BjI,KA4ENsb,eAAe3T,MA5ET3H,KA4EsB2G,SAASgB,KA5E/B3H,KA8ENqb,gBAAgBpT,KA9EVjI,KA8EsB2G,SAASsB,IA9E/BjI,KA+ENqb,gBAAgB1T,MA/EV3H,KA+EuB2G,SAASgB,KAE3ChR,EAAED,GACC2P,IAAI,aACJ5B,GAAG8V,EAAgB,yCAA2C,uCAAwC5jB,EAAEyjB,MAnFhGpa,KAmF4G,eACpHyE,GAAG8V,EAAgB,qBAAuB,qBAAsB5jB,EAAEyjB,MApF1Dpa,KAoFsE,gBAE7ErJ,EAAEM,SAASiJ,UACbxJ,EAAS6kB,iBAAiB,SAvFjBvb,KAuFgCwb,UAAU,KAvF1Cxb,KA2FAF,MA3FAE,KA2FaqL,UAAa8J,EAAQtP,GA3FlC7F,KA2F0Cma,SA3F1Cna,KA2F0Dma,OAAOjY,KAAKiT,GAASlW,UACpFkW,EAAQtP,GAAG,oBACbnB,EAAEE,iBAGEjO,EAAEM,SAASiJ,UAAYiV,EAAQxF,QAAQ,qBAAqB1Q,WAhGzDe,KAqGN4Z,aAAeA,EAAazE,IAAYyE,EAAazE,EAAQpK,UAG5DpU,EAAEM,SAASiJ,UAxGNF,KAwGuB4Z,cAChClV,EAAEE,kBAI4B,IA7GrB5E,KA6GF0a,YAAYzb,QAAgBrD,EAAQ2N,YA7GlCvJ,KA8GAqL,QACP1U,EAAEM,SAASuQ,KA/GJxH,KA+GciJ,UA/GdjJ,KAiHF6a,WAAY,GAjHV7a,KAmHF8a,WAAY,EAnHV9a,KAsHJc,WAAWI,SAAS,yBAIK,IA1HrBlB,KA0HF0a,YAAYzb,QAAiC,UAAjBrD,EAAQE,OAAqBF,EAAQ0M,UAAY1M,EAAQmR,UA1HnF/M,KA2HJ4a,QAAS,EA3HL5a,KA4HJ8a,WAAY,EA5HR9a,KA6HJ6a,WAAY,EA7HR7a,KA+HJ+a,WAAY,EAEjBpkB,EAAEM,SAASuQ,KAjIFxH,KAiIYiJ,UAjIZjJ,KAmIJyb,kBAAsE,IAnIlEzb,KAmIsB0a,YAAY,GAAGhS,EAnIrC1I,KAmI8C0a,YAAY,GAAGhS,GAAW/R,EAAEF,GAAQ4b,aAnIlFrS,KAoIJ0b,kBAAsE,IApIlE1b,KAoIsB0a,YAAY,GAAG/R,EApIrC3I,KAoI8C0a,YAAY,GAAG/R,GAAWhS,EAAEF,GAAQ2b,YApIlFpS,KAsIJ2b,gCAtII3b,KAsImCyb,kBAtInCzb,KAsI4Dqb,gBAAgB1T,MAtI5E3H,KAsIyFqb,gBAAgBzT,MAtIzG5H,KAuIJ4b,gCAvII5b,KAuImC0b,kBAvInC1b,KAuI4Dqb,gBAAgBpT,KAvI5EjI,KAuIwFqb,gBAAgBjS,OAvIxGpJ,KAyIJ6b,4BAA8B7C,EAzI1BhZ,KAyIwC0a,YAAY,GAzIpD1a,KAyI6D0a,YAAY,SAItFnP,EAAU1K,UAAU2a,SAAW,SAAU9W,GAC5B1E,KAENgb,aAAc,EAEnBtkB,EAASolB,oBAAoB,SAJlB9b,KAIiCwb,UAAU,IAGxDjQ,EAAU1K,UAAUkb,YAAc,SAAUrX,QAIV9N,IAA5B8N,EAAEM,cAAclN,SAAqD,IAA5B4M,EAAEM,cAAclN,QAHlDkI,KAQFgb,YAREhb,KASJ4a,QAAS,GATL5a,KAaNgc,UAAYxD,EAAa9T,IAbnB1E,KAeAF,MAfAE,KAeaqL,SAfbrL,KAe8Bgc,UAAU/c,QAfxCe,KAewDgc,UAAU/c,SAflEe,KAmBA8a,YAAgC,IAnBhC9a,KAmBkB8a,WAC3BpW,EAAEE,iBApBO5E,KAuBNkb,UAAYlC,EAvBNhZ,KAuBoBgc,UAAU,GAvB9Bhc,KAuBuC0a,YAAY,GAAI,KAvBvD1a,KAwBNmb,UAAYnC,EAxBNhZ,KAwBoBgc,UAAU,GAxB9Bhc,KAwBuC0a,YAAY,GAAI,KAxBvD1a,KA0BNgZ,SAAWA,EA1BLhZ,KA0BmBgc,UAAU,GA1B7Bhc,KA0BsC0a,YAAY,IA1BlD1a,KA6BFgZ,SAAW,IA7BThZ,KA8BA8a,UA9BA9a,KA+BFic,QAAQvX,GA/BN1E,KAgCO6a,UAhCP7a,KAiCFkc,QAjCElc,KAkCO+a,WAlCP/a,KAmCFmc,YAnCEnc,KAIJoc,WAAW1X,IAoCpB6G,EAAU1K,UAAUob,QAAU,SAAUvX,GACtC,IAIE2X,EAJErb,EAAOhB,KACT2S,EAAW3R,EAAK2R,SAChB2J,EAAUtb,EAAK8Z,UACfnT,EAAO3G,EAAKsa,eAAe3T,MAAQ,EAIrC,IAAgB,IAAZ2U,EAkEW,KAAXA,IAEAtb,EAAKka,UAAY,IAChBla,EAAK2R,SAASlS,MAAMxB,OAAS,GAAsC,IAAhC+B,EAAK2R,SAAS/W,QAAQmE,QAAgBiB,EAAK2R,SAAS/W,QAAQkE,KAAKxI,MAErGqQ,GAAcuC,KAAKmP,IAAIrY,EAAKka,UAAW,IAEvCla,EAAKka,UAAY,IAChBla,EAAK2R,SAASlS,MAAMxB,OAAS,GAC3B+B,EAAK2R,SAAS/W,QAAQmE,QAAUiB,EAAK2R,SAASlS,MAAMxB,OAAS,IAAM+B,EAAK2R,SAAS/W,QAAQkE,KAAKxI,MAEjGqQ,GAAcuC,KAAKmP,KAAKrY,EAAKka,UAAW,IAExCvT,GAAc3G,EAAKka,WAIvBla,EAAKub,cAAgB,CACnBtU,IAAgB,KAAXqU,EAAiB,EAAItb,EAAKsa,eAAerT,IAAMjH,EAAKma,UACzDxT,KAAMA,GAGJ3G,EAAKiE,YACPnH,EAAakD,EAAKiE,WAElBjE,EAAKiE,UAAY,MAGnBjE,EAAKiE,UAAY1H,GAAc,WACzByD,EAAKub,gBACP5lB,EAAE6I,KAAKwB,EAAK2R,SAASjS,QAAQ,SAAUX,EAAOwH,GAC5C,IAAIf,EAAMe,EAAMf,IAAMxF,EAAK2R,SAASpS,QAEpC5J,EAAEM,SAAS+Q,aAAaT,EAAMH,OAAQ,CACpCa,IAAKjH,EAAKub,cAActU,IACxBN,KAAM3G,EAAKub,cAAc5U,KAAOnB,EAAMxF,EAAKkI,YAAc1C,EAAMe,EAAMzH,KAAKvI,YAI9EyJ,EAAKF,WAAWI,SAAS,gCAvG3B,GAAIgJ,KAAKgB,IAAIlK,EAAKgY,UAAY,GAAI,CAahC,GAZAhY,EAAK4Z,QAAS,EAEVjI,EAASlS,MAAMxB,OAAS,GAAK+B,EAAKlB,KAAKvF,SACzCyG,EAAK8Z,UAAY,IACRnI,EAASxM,aAAqC,IAAvBnF,EAAKlB,KAAKvF,UAA8C,SAAvByG,EAAKlB,KAAKvF,UAAuB5D,EAAEF,GAAQmR,QAAU,IACtH5G,EAAK8Z,UAAY,KAEjBuB,EAAQnS,KAAKgB,IAAkD,IAA7ChB,KAAKsS,MAAMxb,EAAKma,UAAWna,EAAKka,WAAoBhR,KAAKuS,IAE3Ezb,EAAK8Z,UAAYuB,EAAQ,IAAMA,EAAQ,IAAM,IAAM,KAG9B,MAAnBrb,EAAK8Z,WAAqBnkB,EAAEM,SAASiJ,UAAYc,EAAK4Y,aAGxD,YAFA5Y,EAAKga,aAAc,GAKrBrI,EAASxM,WAAanF,EAAK8Z,UAG3B9Z,EAAK0Z,YAAc1Z,EAAKgb,UAExBrlB,EAAE6I,KAAKmT,EAASjS,QAAQ,SAAUX,EAAOwH,GACvC,IAAIb,EAAUC,EAEdhQ,EAAEM,SAASuQ,KAAKD,EAAMH,QAEtBV,EAAW/P,EAAEM,SAASqQ,aAAaC,EAAMH,QACzCT,EAAWhQ,EAAEM,SAASqQ,aAAaqL,EAAS7Q,MAAMqD,OAElDoC,EAAMH,OACH3O,IAAI,CACH0P,UAAW,GACXC,QAAS,GACT,sBAAuB,KAExBV,YAAY,qBACZA,aAAY,SAAU3H,EAAO8H,GAC5B,OAAQA,EAAUpF,MAAM,2BAA6B,IAAIqF,KAAK,QAG9DP,EAAMf,MAAQmM,EAAS/W,QAAQ4K,MACjCxF,EAAKsa,eAAerT,IAAMvB,EAASuB,IAAMtB,EAASsB,IAClDjH,EAAKsa,eAAe3T,KAAOjB,EAASiB,KAAOhB,EAASgB,MAGtDhR,EAAEM,SAAS+Q,aAAaT,EAAMH,OAAQ,CACpCa,IAAKvB,EAASuB,IAAMtB,EAASsB,IAC7BN,KAAMjB,EAASiB,KAAOhB,EAASgB,UAK/BgL,EAASlJ,WAAakJ,EAASlJ,UAAUrF,UAC3CuO,EAASlJ,UAAUjC,SAoD3B+D,EAAU1K,UAAUqb,MAAQ,WAC1B,IAAIlb,EAAOhB,KAGPgZ,EAAShY,EAAKgb,UAAU,GAAIhb,EAAKyZ,WAAW,KAAO9jB,EAAEM,SAASiJ,SAAW,GAAK,GAChFc,EAAK0Z,YAAc1Z,EAAKgb,WAI1Bhb,EAAK4Z,QAAS,EAEd5Z,EAAKoa,eAAiBpa,EAAK0b,gBAEvB1b,EAAKiE,WACPnH,EAAakD,EAAKiE,WAGpBjE,EAAKiE,UAAY1H,GAAc,WAC7B5G,EAAEM,SAAS+Q,aAAahH,EAAKiI,SAAUjI,EAAKoa,qBAKhD7P,EAAU1K,UAAU6b,cAAgB,WAClC,IAgBIC,EAAeC,EAAeC,EAAeC,EAAeC,EAAYC,EAdxE9T,EAFOlJ,KAEYkJ,YACnBC,EAHOnJ,KAGamJ,aAEpB+R,EALOlb,KAKUkb,UACjBC,EANOnb,KAMUmb,UAEjBE,EAROrb,KAQgBqb,gBAEvB4B,EAAiB5B,EAAgB1T,KACjCuV,EAAiB7B,EAAgBpT,IAEjCkV,EAAe9B,EAAgBzT,MAC/BwV,EAAgB/B,EAAgBjS,OAuCpC,OAlCE2T,EADEI,EAAejU,EACJ+T,EAAiB/B,EAEjB+B,EAGfD,EAAaE,EAAiB/B,EAG9BwB,EAAgBzS,KAAKoE,IAAI,EAAiB,GAAdpF,EAAmC,GAAfiU,GAChDP,EAAgB1S,KAAKoE,IAAI,EAAkB,GAAfnF,EAAqC,GAAhBiU,GAEjDP,EAAgB3S,KAAKC,IAAIjB,EAAciU,EAA4B,GAAdjU,EAAmC,GAAfiU,GACzEL,EAAgB5S,KAAKC,IAAIhB,EAAeiU,EAA8B,GAAfjU,EAAqC,GAAhBiU,GAGxElC,EAAY,GAAK6B,EAAaJ,IAChCI,EAAaJ,EAAgB,EAAIzS,KAAKmP,KAAKsD,EAAgBM,EAAiB/B,EAAW,KAAQ,GAI7FA,EAAY,GAAK6B,EAAaF,IAChCE,EAAaF,EAAgB,EAAI3S,KAAKmP,IAAIwD,EAAgBI,EAAiB/B,EAAW,KAAQ,GAI5FC,EAAY,GAAK6B,EAAaJ,IAChCI,EAAaJ,EAAgB,EAAI1S,KAAKmP,KAAKuD,EAAgBM,EAAiB/B,EAAW,KAAQ,GAI7FA,EAAY,GAAK6B,EAAaF,IAChCE,EAAaF,EAAgB,EAAI5S,KAAKmP,IAAIyD,EAAgBI,EAAiB/B,EAAW,KAAQ,GAGzF,CACLlT,IAAK+U,EACLrV,KAAMoV,IAIVxR,EAAU1K,UAAUwc,cAAgB,SAAUN,EAAYC,EAAYM,EAAUC,GAC9E,IAEIrU,EAFOlJ,KAEYkJ,YACnBC,EAHOnJ,KAGamJ,aAkBxB,OAdE4T,EAFEO,EAAWpU,GACb6T,EAAaA,EAAa,EAAI,EAAIA,GACR7T,EAAcoU,EAAWpU,EAAcoU,EAAWP,EAG/D7S,KAAKoE,IAAI,EAAGpF,EAAc,EAAIoU,EAAW,GAWjD,CACLrV,IAPA+U,EAFEO,EAAYpU,GACd6T,EAAaA,EAAa,EAAI,EAAIA,GACR7T,EAAeoU,EAAYpU,EAAeoU,EAAYP,EAGnE9S,KAAKoE,IAAI,EAAGnF,EAAe,EAAIoU,EAAY,GAKxD5V,KAAMoV,IAIVxR,EAAU1K,UAAUsb,OAAS,WAC3B,IAAInb,EAAOhB,KAGPqb,EAAkBra,EAAKqa,gBAEvB8B,EAAe9B,EAAgBzT,MAC/BwV,EAAgB/B,EAAgBjS,OAEhC6T,EAAiB5B,EAAgB1T,KACjCuV,EAAiB7B,EAAgBpT,IAIjCuV,EAF4BxE,EAAShY,EAAKgb,UAAU,GAAIhb,EAAKgb,UAAU,IAE9Bhb,EAAK6a,4BAE9CyB,EAAWpT,KAAKE,MAAM+S,EAAeK,GACrCD,EAAYrT,KAAKE,MAAMgT,EAAgBI,GAGvCC,GAAyBN,EAAeG,GAAYtc,EAAK2a,+BACzD+B,GAAyBN,EAAgBG,GAAavc,EAAK4a,+BAG3D+B,GAAmB3c,EAAKgb,UAAU,GAAGtT,EAAI1H,EAAKgb,UAAU,GAAGtT,GAAK,EAAI/R,EAAEF,GAAQ4b,aAC9EuL,GAAmB5c,EAAKgb,UAAU,GAAGrT,EAAI3H,EAAKgb,UAAU,GAAGrT,GAAK,EAAIhS,EAAEF,GAAQ2b,YAI9EyL,EAA4BF,EAAkB3c,EAAKya,kBAOnDqC,EAAS,CACX7V,IAHeiV,GAAkBQ,GAJHE,EAAkB5c,EAAK0a,oBAQrD/T,KALesV,GAAkBQ,EAAwBI,GAMzD9U,OAAQyU,EACRxU,OAAQwU,GAGVxc,EAAK4Z,QAAS,EAEd5Z,EAAKsc,SAAWA,EAChBtc,EAAKuc,UAAYA,EAEjBvc,EAAKoa,eAAiB0C,EAElB9c,EAAKiE,WACPnH,EAAakD,EAAKiE,WAGpBjE,EAAKiE,UAAY1H,GAAc,WAC7B5G,EAAEM,SAAS+Q,aAAahH,EAAKiI,SAAUjI,EAAKoa,oBAIhD7P,EAAU1K,UAAUub,WAAa,SAAU1X,GACzC,IAEI4X,EAFOtc,KAEQ8a,UACfiD,EAHO/d,KAGQ6a,UACfmD,EAJOhe,KAIQ+a,UACfpiB,EALOqH,KAKUgb,YAwBrB,GA7BWhb,KAONie,UAAYzF,EAAa9T,GAPnB1E,KAQNke,IAAMhU,KAAKoE,KAAI,IAAIM,MAAOC,UARpB7O,KAQqCib,UAAW,GARhDjb,KAUNc,WAAW4G,YAAY,wBAE5B/Q,EAAED,GAAU2P,IAAI,aAEhB3P,EAASolB,oBAAoB,SAdlB9b,KAciCwb,UAAU,GAd3Cxb,KAgBFiF,YACPnH,EAjBSkC,KAiBSiF,WAjBTjF,KAmBJiF,UAAY,MAnBRjF,KAsBN8a,WAAY,EAtBN9a,KAuBN6a,WAAY,EAvBN7a,KAwBN+a,WAAY,EAxBN/a,KAyBNgb,aAAc,EAzBRhb,KA2BN2S,SAASxM,YAAa,EA3BhBnG,KA6BF4a,OACP,OA9BS5a,KA8BGme,MAAMzZ,GA9BT1E,KAiCNpF,MAAQ,IAjCFoF,KAoCNoe,UApCMpe,KAoCYkb,UApCZlb,KAoC6Bke,IAAO,GApCpCle,KAqCNqe,UArCMre,KAqCYmb,UArCZnb,KAqC6Bke,IAAO,GAE3CH,EAvCO/d,KAwCJse,aACIN,EAzCAhe,KA0CJue,aA1CIve,KA4CJwe,WAAWlC,EAAS3jB,IAM7B4S,EAAU1K,UAAU2d,WAAa,SAAUlC,EAAS3jB,GAClD,IACE6U,GAAM,EACNiR,EAFSze,KAEE2S,SAASlS,MAAMxB,OAC1Bic,EAAYhR,KAAKgB,IAHRlL,KAGiBkb,WAC1BwD,EAAwB,KAAXpC,GAAkBmC,EAAM,IAJ5Bze,KAIwCke,IAAM,KAAOhD,EAAY,IAAOA,EAAY,IAJpFlb,KAONuc,cAAgB,KAGN,KAAXD,IAAmB3jB,GAAauR,KAAKgB,IAV9BlL,KAUuCmb,WAAa,IAE7DxkB,EAAEM,SAASiR,QAZFlI,KAaF2S,SAAS/W,QAAQwL,OAAQ,CAC5Ba,IAdKjI,KAcKsb,eAAerT,IAdpBjI,KAc+Bmb,UAA6B,IAd5Dnb,KAcgDqe,UACrDjW,QAAS,GAEX,KAEFoF,EAnBSxN,KAmBE2S,SAAS9Y,OAAM,EAAM,MACvB6kB,GApBA1e,KAoBmBkb,UAAY,EACxC1N,EArBSxN,KAqBE2S,SAAS9N,SAhBX,KAiBA6Z,GAtBA1e,KAsBmBkb,UAAY,IACxC1N,EAvBSxN,KAuBE2S,SAAS7N,KAlBX,OAqBC,IAAR0I,GAA6B,KAAX8O,GAA6B,KAAXA,GA1B7Btc,KA2BJ2S,SAAS9H,YAAY,KA3BjB7K,KA8BNc,WAAW4G,YAAY,wBAK9B6D,EAAU1K,UAAUyd,WAAa,WAC/B,IACEvB,EACAC,EACAc,EAHS9d,KAKDob,kBAIiB,IAThBpb,KASFF,KAAKtF,UATHwF,KAS8Bke,IAAM,KAC7CnB,EAVS/c,KAUSob,eAAezT,KACjCqV,EAXShd,KAWSob,eAAenT,MAGjC8U,EAdS/c,KAcSob,eAAezT,KAAwB,IAdhD3H,KAcoCoe,UAC7CpB,EAfShd,KAeSob,eAAenT,IAAuB,IAf/CjI,KAemCqe,YAG9CP,EAlBW9d,KAkBGqd,cAAcN,EAAYC,EAlB7Bhd,KAkB8Cqb,gBAAgBzT,MAlB9D5H,KAkB0Eqb,gBAAgBjS,SAE9FxB,MApBI5H,KAoBSqb,gBAAgBzT,MACpCkW,EAAO1U,OArBIpJ,KAqBUqb,gBAAgBjS,OAErCzS,EAAEM,SAASiR,QAvBAlI,KAuBaiJ,SAAU6U,EAAQ,OAG5CvS,EAAU1K,UAAU0d,WAAa,WAC/B,IAIIxB,EAAYC,EAAYc,EAAQa,EAFhC/iB,EAFOoE,KAEQ2S,SAAS/W,QAIxB0hB,EANOtd,KAMSsd,SAChBC,EAPOvd,KAOUud,UAPVvd,KASDob,iBAIV2B,EAbW/c,KAaOob,eAAezT,KAGjCgX,EAAQ,CACN1W,IAHF+U,EAdWhd,KAcOob,eAAenT,IAI/BN,KAAMoV,EACNnV,MAAO0V,EACPlU,OAAQmU,EACRxU,OAAQ,EACRC,OAAQ,GAIVrS,EAAEM,SAAS+Q,aA1BAhI,KA0BkBiJ,SAAU0V,GAEnCrB,EA5BOtd,KA4BSkJ,aAAeqU,EA5BxBvd,KA4ByCmJ,aA5BzCnJ,KA6BJ2S,SAASjJ,WAAW,KAChB4T,EAAW1hB,EAAQgM,OAAS2V,EAAY3hB,EAAQwN,OA9BhDpJ,KA+BJ2S,SAASlK,cA/BLzI,KA+BwByb,kBA/BxBzb,KA+BgD0b,kBAAmB,MAE5EoC,EAjCS9d,KAiCKqd,cAAcN,EAAYC,EAAYM,EAAUC,GAE9D5mB,EAAEM,SAASiR,QAnCFlI,KAmCeiJ,SAAU6U,EAAQ,QAI9CvS,EAAU1K,UAAUsd,MAAQ,SAAUzZ,GACpC,IAWIka,EAXA5d,EAAOhB,KACPmV,EAAUxe,EAAE+N,EAAEkB,QAEd+M,EAAW3R,EAAK2R,SAChB/W,EAAU+W,EAAS/W,QAEnBqiB,EAAavZ,GAAK8T,EAAa9T,IAAO1D,EAAK0Z,YAE3CmE,EAAOZ,EAAU,GAAKA,EAAU,GAAGvV,EAAI/R,EAAEF,GAAQ4b,aAAerR,EAAK2F,SAASgB,KAAO,EACrFmX,EAAOb,EAAU,GAAKA,EAAU,GAAGtV,EAAIhS,EAAEF,GAAQ2b,YAAcpR,EAAK2F,SAASsB,IAAM,EAInF8W,EAAU,SAAUC,GACtB,IAAIC,EAASrjB,EAAQkE,KAAKkf,GAM1B,GAJIroB,EAAE6U,WAAWyT,KACfA,EAASA,EAAOtb,MAAMgP,EAAU,CAAC/W,EAAS8I,KAGvCua,EAIL,OAAQA,GACN,IAAK,QACHtM,EAAS9Y,MAAMmH,EAAK2Z,YAEpB,MAEF,IAAK,iBACHhI,EAASkB,iBAET,MAEF,IAAK,OACHlB,EAAS7N,OAET,MAEF,IAAK,cACC6N,EAASlS,MAAMxB,OAAS,EAC1B0T,EAAS7N,OAET6N,EAAS9Y,MAAMmH,EAAK2Z,YAGtB,MAEF,IAAK,OACiB,SAAhB/e,EAAQE,OAAoBF,EAAQ0M,UAAY1M,EAAQmR,UACtD4F,EAAStH,SACXsH,EAASjJ,aACAiJ,EAAS5N,eAClB4N,EAASlK,cAAcoW,EAAMC,GACpBnM,EAASlS,MAAMxB,OAAS,GACjC0T,EAAS9Y,MAAMmH,EAAK2Z,eAS9B,KAAIjW,EAAEM,eAA2C,GAA1BN,EAAEM,cAAcsL,UAKlC6E,EAAQtP,GAAG,UAAUgZ,EAAO1J,EAAQ,GAAGzT,YAAcyT,EAAQqF,SAAS7S,OAA3E,CAKA,GAAIwN,EAAQtP,GAAG,oEACb+Y,EAAQ,eACH,GAAIzJ,EAAQtP,GAAG,mBACpB+Y,EAAQ,YACH,KACLjM,EAAS/W,QAAQqN,WACjB0J,EAAS/W,QAAQqN,SAChB/G,KAAKiT,GACL+J,UACApb,OAAOqR,GAASlW,OAIjB,OAFA2f,EAAQ,UAMV,GAAI5d,EAAKqZ,OAAQ,CAMf,GAJAjc,aAAa4C,EAAKqZ,QAClBrZ,EAAKqZ,OAAS,KAGVnQ,KAAKgB,IAAI2T,EAAO7d,EAAK6d,MAAQ,IAAM3U,KAAKgB,IAAI4T,EAAO9d,EAAK8d,MAAQ,GAClE,OAAO9e,KAIT+e,EAAQ,WAAaH,QAIrB5d,EAAK6d,KAAOA,EACZ7d,EAAK8d,KAAOA,EAERljB,EAAQkE,KAAK,WAAa8e,IAAUhjB,EAAQkE,KAAK,WAAa8e,KAAWhjB,EAAQkE,KAAK,QAAU8e,GAClG5d,EAAKqZ,OAASxc,YAAW,WACvBmD,EAAKqZ,OAAS,KAET1H,EAAS3L,aACZ+X,EAAQ,QAAUH,KAEnB,KAEHG,EAAQ,QAAUH,GAItB,OAAO5e,OAGTrJ,EAAED,GACC+N,GAAG,iBAAiB,SAAUC,EAAGiO,GAC5BA,IAAaA,EAASpH,YACxBoH,EAASpH,UAAY,IAAIA,EAAUoH,OAGtClO,GAAG,kBAAkB,SAAUC,EAAGiO,GAC7BA,GAAYA,EAASpH,WACvBoH,EAASpH,UAAU2I,aAj5B3B,CAo5BGzd,OAAQC,SAAU4e,QAUrB,SAAW5e,EAAUC,GACnB,aAEAA,EAAE4I,QAAO,EAAM5I,EAAEM,SAASG,SAAU,CAClCsC,OAAQ,CACNiB,UAAW,uVAKbA,UAAW,CACT7B,WAAW,EACX8B,MAAO,IACPukB,UAAU,KAId,IAAI1V,EAAY,SAAUkJ,GACxB3S,KAAK2S,SAAWA,EAChB3S,KAAKY,QAGPjK,EAAE4I,OAAOkK,EAAU5I,UAAW,CAC5Bue,MAAO,KACPhb,UAAU,EACVib,QAAS,KAETze,KAAM,WACJ,IAAII,EAAOhB,KACT2S,EAAW3R,EAAK2R,SAChB7S,EAAO6S,EAASlS,MAAMkS,EAASxS,WAAWL,KAAKnF,UAEjDqG,EAAKqe,QAAU1M,EAAS7Q,MAAMjK,QAAQqK,KAAK,wBAAwBuC,GAAG,SAAS,WAC7EzD,EAAKse,YAGH3M,EAASlS,MAAMxB,OAAS,IAAMa,EAChCkB,EAAKqe,QAAQja,OACJtF,EAAKqf,WACdne,EAAKue,UAAY5oB,EAAE,yCAAyCkL,SAAS8Q,EAAS7Q,MAAM0d,SAIxFC,IAAK,SAAUC,GACb,IACE/M,EADS3S,KACO2S,SAChB/W,EAAU+W,EAAS/W,QAGjBA,KAAsB,IAAV8jB,GAAkB9jB,EAAQkE,KAAKxI,MAAQqb,EAASxS,UAAYwS,EAASlS,MAAMxB,OAAS,GALzFe,KAMAoE,UAAoC,UAAxBxI,EAAQwH,cANpBpD,KAOEuf,WACP5oB,EAAEM,SAASiR,QARNlI,KAQmBuf,UAAUla,OAAQ,CACxC0D,OAAQ,GACPnN,EAAQkE,KAAKnF,UAAUC,OAVrBoF,KAaFof,MAAQvhB,YAAW,WACjB8U,EAAS/W,QAAQkE,KAAKxI,MAAQqb,EAAS/W,QAAQmE,OAAS4S,EAASlS,MAAMxB,OAAS,EAGnF0T,EAAS7N,OAFT6N,EAAStQ,OAAO,KAIjBzG,EAAQkE,KAAKnF,UAAUC,SAnBnBoF,KAsBJwH,OACLmL,EAAS7M,mBAAqB,EAC9B6M,EAAS3M,iBAIb2Z,MAAO,WAGLvhB,aAFW4B,KAEOof,OAFPpf,KAINof,MAAQ,KAJFpf,KAMFuf,WANEvf,KAOJuf,UAAUK,WAAW,SAASxa,QAIvC+L,MAAO,WACL,IACEvV,EADSoE,KACM2S,SAAS/W,QAEtBA,IAHOoE,KAIJqf,QACF3mB,KAAK,SAAUkD,EAAQkE,KAAKxD,KAAKV,EAAQkE,KAAKzD,OAAST,EAAQkE,KAAKxD,KAAKC,IAAIM,WAC7E6K,YAAY,yBACZxG,SAAS,0BAPHlB,KASJoE,UAAW,EAEZxI,EAAQ6L,YAXHzH,KAYFyf,KAAI,GAZFzf,KAeJ2S,SAASxQ,QAAQ,qBAAqB,KAI/CqF,KAAM,WACJ,IACE5L,EADSoE,KACM2S,SAAS/W,QADfoE,KAGN2f,QAHM3f,KAKNqf,QACF3mB,KAAK,SAAUkD,EAAQkE,KAAKxD,KAAKV,EAAQkE,KAAKzD,OAAST,EAAQkE,KAAKxD,KAAKC,IAAIK,YAC7E8K,YAAY,0BACZxG,SAAS,yBARDlB,KAUNoE,UAAW,EAVLpE,KAYN2S,SAASxQ,QAAQ,qBAAqB,GAZhCnC,KAcFuf,WAdEvf,KAeJuf,UAAUK,WAAW,SAASxa,QAIvCka,OAAQ,WACKtf,KAEFoE,SAFEpE,KAGJwH,OAHIxH,KAKJmR,WAKXxa,EAAED,GAAU+N,GAAG,CACb,YAAa,SAAUC,EAAGiO,GACpBA,IAAaA,EAASlJ,YACxBkJ,EAASlJ,UAAY,IAAIA,EAAUkJ,KAIvC,gBAAiB,SAAUjO,EAAGiO,EAAU/W,EAAS4E,GAC/C,IAAIiJ,EAAYkJ,GAAYA,EAASlJ,UAEjCjJ,EACEiJ,GAAa7N,EAAQkE,KAAKnF,UAAU7B,WACtC2Q,EAAU0H,QAEH1H,GAAaA,EAAUrF,UAChCqF,EAAUkW,SAId,eAAgB,SAAUjb,EAAGiO,EAAU/W,GACrC,IAAI6N,EAAYkJ,GAAYA,EAASlJ,UAEjCA,GAAaA,EAAUrF,UACzBqF,EAAUgW,OAId,kBAAmB,SAAU/a,EAAGiO,EAAU/W,EAASikB,EAAUva,GAC3D,IAAImE,EAAYkJ,GAAYA,EAASlJ,WAGjCA,IAAa7N,EAAQkE,KAAKnF,WAA0B,KAAZ2K,GAA8B,KAAZA,GAAoB3O,EAAED,EAASgc,eAAe7M,GAAG,oBAC7Gga,EAASjb,iBAET6E,EAAU6V,WAId,iCAAkC,SAAU5a,EAAGiO,GAC7C,IAAIlJ,EAAYkJ,GAAYA,EAASlJ,UAEjCA,GACFA,EAAUjC,UAMhB7Q,EAAED,GAAU+N,GAAG,oBAAoB,WACjC,IAAIkO,EAAWhc,EAAEM,SAASkK,cACxBsI,EAAYkJ,GAAYA,EAASlJ,UAE/BA,GAAaA,EAAUrF,WACrB1N,EAASopB,OACXrW,EAAUkW,QAEVlW,EAAUgW,UA/LlB,CAmMG/oB,SAAU4e,QAOb,SAAW5e,EAAUC,GACnB,aAGA,IAAIK,EAAK,WAkCP,IAjCA,IAAI+oB,EAAQ,CACV,CAAC,oBAAqB,iBAAkB,oBAAqB,oBAAqB,mBAAoB,mBAEtG,CACE,0BACA,uBACA,0BACA,0BACA,yBACA,yBAGF,CACE,0BACA,yBACA,iCACA,yBACA,yBACA,yBAEF,CACE,uBACA,sBACA,uBACA,uBACA,sBACA,sBAEF,CAAC,sBAAuB,mBAAoB,sBAAuB,sBAAuB,qBAAsB,sBAG9GvS,EAAM,GAED3K,EAAI,EAAGA,EAAIkd,EAAM9gB,OAAQ4D,IAAK,CACrC,IAAImd,EAAMD,EAAMld,GAEhB,GAAImd,GAAOA,EAAI,KAAMtpB,EAAU,CAC7B,IAAK,IAAIqX,EAAI,EAAGA,EAAIiS,EAAI/gB,OAAQ8O,IAC9BP,EAAIuS,EAAM,GAAGhS,IAAMiS,EAAIjS,GAGzB,OAAOP,GAIX,OAAO,EA9CA,GAiDT,GAAIxW,EAAI,CACN,IAAIipB,EAAa,CACfC,QAAS,SAAUxO,IACjBA,EAAOA,GAAQhb,EAAS+K,iBAEnBzK,EAAGmpB,mBAAmBzO,EAAK0O,uBAElCC,KAAM,WACJ3pB,EAASM,EAAGkb,mBAEdoN,OAAQ,SAAU5N,GAChBA,EAAOA,GAAQhb,EAAS+K,gBAEpBzB,KAAKsgB,eACPtgB,KAAKqgB,OAELrgB,KAAKkgB,QAAQxO,IAGjB4O,aAAc,WACZ,OAAOC,QAAQ7pB,EAASM,EAAGwpB,qBAE7BC,QAAS,WACP,OAAOF,QAAQ7pB,EAASM,EAAG0pB,sBAI/B/pB,EAAE4I,QAAO,EAAM5I,EAAEM,SAASG,SAAU,CAClCsC,OAAQ,CACNW,WAAY,qaAKdA,WAAY,CACVvB,WAAW,KAIfnC,EAAED,GAAU+N,GAAGzN,EAAG2pB,kBAAkB,WAClC,IAAIL,EAAeL,EAAWK,eAC5B3N,EAAWhc,EAAEM,SAASkK,cAEpBwR,IAEEA,EAAS/W,SAAqC,UAA1B+W,EAAS/W,QAAQE,MAAoB6W,EAAS3L,cACpE2L,EAAS3L,aAAc,EAEvB2L,EAASzN,QAAO,GAAM,EAAM,GAEvByN,EAASlL,YACZkL,EAAStK,YAIbsK,EAASxQ,QAAQ,qBAAsBme,GAEvC3N,EAAS7Q,MAAMC,UAAU2I,YAAY,yBAA0B4V,GAE/D3N,EAAS7Q,MAAMjK,QACZqK,KAAK,8BACLwI,YAAY,4BAA6B4V,GACzC5V,YAAY,0BAA2B4V,OAKhD3pB,EAAED,GAAU+N,GAAG,CACb,YAAa,SAAUC,EAAGiO,GAGnB3b,EAMD2b,GAAYA,EAASlS,MAAMkS,EAASxS,WAAWL,KAAKzF,YACzCsY,EAAS7Q,MAAMC,UAEjB0C,GAAG,sBAAuB,8BAA8B,SAAUC,GAC3EA,EAAEC,kBACFD,EAAEE,iBAEFqb,EAAWX,YAGT3M,EAAS7S,KAAKzF,aAAqD,IAAvCsY,EAAS7S,KAAKzF,WAAWvB,WACvDmnB,EAAWC,UAIbvN,EAASsN,WAAaA,GACbtN,GACTA,EAAS7Q,MAAMjK,QAAQqK,KAAK,8BAA8BkD,OAtB1DuN,EAAS7Q,MAAMjK,QAAQqK,KAAK,8BAA8B4K,UA0B9D,kBAAmB,SAAUpI,EAAGiO,EAAU/W,EAASikB,EAAUva,GAEvDqN,GAAYA,EAASsN,YAA0B,KAAZ3a,IACrCua,EAASjb,iBAET+N,EAASsN,WAAWX,WAIxB,iBAAkB,SAAU5a,EAAGiO,GACzBA,GAAYA,EAASsN,YAActN,EAAS7Q,MAAMC,UAAUkJ,SAAS,2BACvEgV,EAAWI,UAlKnB,CAsKG3pB,SAAU4e,QAOb,SAAW5e,EAAUC,GACnB,aAEA,IAAIiqB,EAAQ,kBAIZjqB,EAAEM,SAASG,SAAWT,EAAE4I,QACtB,EAAM,CACJ7F,OAAQ,CACNmB,OAAQ,odAIVA,OAAQ,CACN/B,WAAW,EACXgC,aAAa,EACbd,SAAU,sBACVe,KAAM,MAGVpE,EAAEM,SAASG,UAGb,IAAIypB,EAAc,SAAUlO,GAC1B3S,KAAKY,KAAK+R,IAGZhc,EAAE4I,OAAOshB,EAAYhgB,UAAW,CAC9Bwe,QAAS,KACTyB,MAAO,KACPC,MAAO,KACPnO,WAAW,EACXxO,UAAU,EAEVxD,KAAM,SAAU+R,GACd,IAAI3R,EAAOhB,KACTS,EAAQkS,EAASlS,MACjBggB,EAAU,EAEZzf,EAAK2R,SAAWA,EAChB3R,EAAKlB,KAAOW,EAAMkS,EAASxS,WAAWL,KAAKjF,OAE3C8X,EAASxO,OAASnD,EAElBA,EAAKqe,QAAU1M,EAAS7Q,MAAMjK,QAAQqK,KAAK,0BAG3C,IAAK,IAAIW,EAAI,EAAG4b,EAAMhe,EAAMxB,OAAQ4D,EAAI4b,IAClChe,EAAMoC,GAAGY,OACXgd,MAGEA,EAAU,IAL6B5d,KAUzC4d,EAAU,GAAOzf,EAAKlB,MACxBkB,EAAKqe,QAAQO,WAAW,SAASnb,GAAG,SAAS,WAC3CzD,EAAKse,YAGPte,EAAKoD,UAAW,GAEhBpD,EAAKqe,QAAQja,QAIjBf,OAAQ,WACN,IAIErB,EAHA2P,EADS3S,KACO2S,SAChB3Y,EAFSgG,KAEOF,KAAK9F,SACrBgnB,EAAO,GAHEhhB,KAMD8gB,QANC9gB,KAQJ8gB,MAAQnqB,EAAE,eAAiBiqB,EAAQ,IAAMA,EAAQ,IAR7C5gB,KAQwDF,KAAK/E,KAAO,YAAY8G,SACvF8Q,EAAS7Q,MAAMC,UACdG,KAAKlI,GACLklB,UACApb,OAAO9J,IAZDgG,KAgBJ8gB,MAAMrc,GAAG,QAAS,KAAK,WAC1BkO,EAAStQ,OAAO1L,EAAEqJ,MAAMtH,KAAK,mBAjBtBsH,KAsBD+gB,QAtBC/gB,KAuBJ+gB,MAAQpqB,EAAE,eAAiBiqB,EAAQ,YAAY/e,SAvB3C7B,KAuByD8gB,QAGpEnqB,EAAE6I,KAAKmT,EAASlS,OAAO,SAAUoC,EAAGZ,IAClCe,EAAMf,EAAKwB,QAEe,UAAdxB,EAAKnG,OACfkH,EAAMf,EAAKe,KAGbge,EAAKjd,KACH,mDACAlB,EACA,KACCG,GAAOA,EAAI/D,OAAS,gCAAkC+D,EAAM,KAAO,mCACpE,YAtCOhD,KA0CN+gB,MAAM,GAAGE,UAAYD,EAAKlZ,KAAK,IAEb,MA5CZ9H,KA4CFF,KAAK/E,MA5CHiF,KA8CJ+gB,MAAMnZ,MACTxH,SA/COJ,KA+CO8gB,MAAMroB,IAAI,iBAAkB,IAC1Cka,EAASlS,MAAMxB,OAhDRe,KAiDF+gB,MACJ/V,WACA4F,GAAG,GACHvB,YAAW,KAKlB/K,MAAO,SAAUiC,GACf,IAGE9C,EACA4N,EAHA0P,EADS/gB,KACI+gB,MACbD,EAFS9gB,KAEI8gB,MAFJ9gB,KAMD2S,SAAS/W,UAUnByV,GANA5N,EAAQsd,EACL/V,WACAtD,YAxIUkZ,0BAyIV9c,OAAO,gBAbC9D,KAasB2S,SAAS/W,QAAQmE,MAAQ,MACvDmB,SA1IU0f,2BA4IIjM,WAGM,MAnBZ3U,KAmBFF,KAAK/E,OAAiBsW,EAASpJ,IAAM,GAAKoJ,EAASpJ,IAAM8Y,EAAM3X,SAAW3F,EAAM6L,eACvFyR,EAAMvZ,OAAOU,QAAQ,CACjBkK,UAAW2O,EAAM3O,YAAcf,EAASpJ,KAE1C1B,GAGiB,MA1BVvG,KA0BJF,KAAK/E,OACTsW,EAAS1J,KAAOmZ,EAAMzO,cAAgBhB,EAAS1J,KAAOmZ,EAAMzO,cAAgByO,EAAMlZ,QAAUnE,EAAM4L,gBAEnG0R,EACGhW,SACAvD,OACAU,QAAQ,CACLmK,WAAYhB,EAAS1J,MAEvBpB,KAKRrB,OAAQ,WACKlF,KACN2S,SAAS7Q,MAAMC,UAAU2I,YAAY,uBAAwB1K,KAAK4S,WAD5D5S,KAGF4S,WAHE5S,KAIC8gB,OAJD9gB,KAKFqE,SALErE,KAQJ2S,SAASxQ,QAAQ,gBARbnC,KAUJsE,MAAM,IAVFtE,KAWK8gB,OAXL9gB,KAYJ2S,SAASxQ,QAAQ,gBAZbnC,KAgBN2S,SAASzN,UAGhBE,KAAM,WACJpF,KAAK4S,WAAY,EACjB5S,KAAKkF,UAGPG,KAAM,WACJrF,KAAK4S,WAAY,EACjB5S,KAAKkF,UAGPoa,OAAQ,WACNtf,KAAK4S,WAAa5S,KAAK4S,UACvB5S,KAAKkF,YAITvO,EAAED,GAAU+N,GAAG,CACb,YAAa,SAAUC,EAAGiO,GACxB,IAAIxO,EAEAwO,IAAaA,EAASxO,SACxBA,EAAS,IAAI0c,EAAYlO,IAEdvO,WAAsC,IAA1BD,EAAOrE,KAAKhH,WACjCqL,EAAOkB,QAKb,gBAAiB,SAAUX,EAAGiO,EAAU1Q,EAAMzB,GAC5C,IAAI2D,EAASwO,GAAYA,EAASxO,OAE9BA,GAAUA,EAAOyO,WACnBzO,EAAOG,MAAM9D,EAAW,EAAI,MAIhC,kBAAmB,SAAUkE,EAAGiO,EAAU/W,EAASikB,EAAUva,GAC3D,IAAInB,EAASwO,GAAYA,EAASxO,OAG9BA,GAAUA,EAAOC,UAAwB,KAAZkB,IAC/Bua,EAASjb,iBAETT,EAAOmb,WAIX,iBAAkB,SAAU5a,EAAGiO,GAC7B,IAAIxO,EAASwO,GAAYA,EAASxO,OAE9BA,GAAUA,EAAOyO,YAAyC,IAA5BzO,EAAOrE,KAAKhF,aAC5CqJ,EAAO2c,MAAM1b,UAhPrB,CAoPG1O,SAAU4e,QAOb,SAAW5e,EAAUC,GACnB,aAEAA,EAAE4I,QAAO,EAAM5I,EAAEM,SAASG,SAAU,CAClCsC,OAAQ,CACNwnB,MAAO,oQAITA,MAAO,CACLhV,IAAK,SAAUyG,EAAU1Q,GACvB,OACI0Q,EAASwO,aAA+B,WAAdlf,EAAKnG,MAAmC,SAAdmG,EAAKnG,OAAmBmG,EAAKsV,SAAWtV,EAAKe,MAAgBvM,OAAO2qB,UAG9H5oB,IAAK,sjDAsCT7B,EAAED,GAAU+N,GAAG,QAAS,yBAAyB,WAC/C,IAEEyH,EACA1T,EArBgB6oB,EACdC,EAiBA3O,EAAWhc,EAAEM,SAASkK,cACxBvF,EAAU+W,EAAS/W,SAAW,KAI3BA,IAIkC,aAAnCjF,EAAEmF,KAAKF,EAAQkE,KAAKohB,MAAMhV,OAC5BA,EAAMtQ,EAAQkE,KAAKohB,MAAMhV,IAAIvI,MAAM/H,EAAS,CAAC+W,EAAU/W,KAGzDpD,EAAMoD,EAAQkE,KAAKohB,MAAM1oB,IACtBoJ,QAAQ,iBAAmC,UAAjBhG,EAAQE,KAAmBylB,mBAAmB3lB,EAAQoH,KAAO,IACvFpB,QAAQ,eAAgB2f,mBAAmBrV,IAC3CtK,QAAQ,oBAlCOyf,EAkCwBnV,EAjCtCoV,EAAY,CACd,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,UAGAE,OAAOH,GAAQzf,QAAQ,gBAAgB,SAAU0V,GACtD,OAAOgK,EAAUhK,QAsBhB1V,QAAQ,iBAAkB+Q,EAASlC,SAAW8Q,mBAAmB5O,EAASlC,SAASgR,QAAU,IAEhG9qB,EAAEM,SAAS+c,KAAK,CACdhR,IAAK2P,EAAShR,UAAUgR,EAAUna,GAClCsD,KAAM,OACNgE,KAAM,CACJxF,OAAO,EACPtB,iBAAiB,EACjBoC,UAAW,SAAUsmB,EAAeC,GAElChP,EAAS7Q,MAAMC,UAAUwK,IAAI,kBAAkB,WAC7CmV,EAAc7nB,MAAM,KAAM,MAI5B8nB,EAAa1Y,SAAS/G,KAAK,2BAA2B0f,OAAM,WAE1D,OADAnrB,OAAOud,KAAKhU,KAAK6hB,KAAM,QAAS,0BACzB,MAGXzlB,OAAQ,CACNlC,WAAW,UA5FrB,CAiGGxD,SAAU4e,QAOb,SAAW7e,EAAQC,EAAUC,GAC3B,aA0BA,SAASmrB,IACP,IAAIrnB,EAAOhE,EAAO2qB,SAAS3mB,KAAKkf,OAAO,GACrCra,EAAM7E,EAAKmJ,MAAM,KACjB7D,EAAQT,EAAIL,OAAS,GAAK,WAAWkV,KAAK7U,EAAIA,EAAIL,OAAS,KAAMmB,SAASd,EAAIyiB,KAAK,GAAI,KAAW,EAGpG,MAAO,CACLtnB,KAAMA,EAENsF,MAAOA,EAAQ,EAAI,EAAIA,EACvBiiB,QANU1iB,EAAIwI,KAAK,MAWvB,SAASma,EAAe/V,GACF,KAAhBA,EAAI8V,SAGNrrB,EAAE,mBAAqBA,EAAEurB,eAAehW,EAAI8V,SAAW,MACpDpR,GAAG1E,EAAInM,MAAQ,GACfuE,QACAnC,QAAQ,kBAKf,SAASggB,EAAaxP,GACpB,IAAI7S,EAAM0N,EAEV,QAAKmF,IAOU,MAFfnF,GADA1N,EAAO6S,EAAS/W,QAAU+W,EAAS/W,QAAQkE,KAAO6S,EAAS7S,MAChDrF,OAASqF,EAAKqD,MAAQrD,EAAKqD,MAAM7K,KAAK,aAAewH,EAAKqD,MAAM7K,KAAK,oBAAsB,MAE1EkV,GA5DzB7W,EAAEurB,iBACLvrB,EAAEurB,eAAiB,SAAUE,GAiB3B,OAAQA,EAAM,IAAIxgB,QAhBD,gDACA,SAAUygB,EAAIC,GAC7B,OAAIA,EAES,OAAPD,EACK,IAIFA,EAAG9O,MAAM,GAAI,GAAK,KAAO8O,EAAGE,WAAWF,EAAGpjB,OAAS,GAAGujB,SAAS,IAAM,IAIvE,KAAOH,OAiDpB1rB,GAAE,YAEiC,IAA7BA,EAAEM,SAASG,SAASqD,OAKxB9D,EAAED,GAAU+N,GAAG,CACb,YAAa,SAAUC,EAAGiO,GACxB,IAAIzG,EAAK8V,GAE4C,IAAjDrP,EAASlS,MAAMkS,EAASxS,WAAWL,KAAKrF,OAI5CyR,EAAM4V,KACNE,EAAUG,EAAaxP,KAGRzG,EAAI8V,SAAWA,GAAW9V,EAAI8V,UAC3CrP,EAASxS,UAAY+L,EAAInM,MAAQ,KAIrC,gBAAiB,SAAU2E,EAAGiO,EAAU/W,EAAS4E,GAC/C,IAAIwhB,EAECpmB,IAAiC,IAAtBA,EAAQkE,KAAKrF,OAK7BunB,EAAUG,EAAaxP,MAQvBA,EAASwO,YAAca,GAAWrP,EAASlS,MAAMxB,OAAS,EAAI,KAAOrD,EAAQmE,MAAQ,GAAK,IAGtFtJ,EAAO2qB,SAAS3mB,OAAS,IAAMkY,EAASwO,cAIxC3gB,IAAamS,EAAS8P,WACxB9P,EAAS8P,SAAWhsB,EAAO2qB,SAAS3mB,MAGlCkY,EAAS+P,WACXtkB,aAAauU,EAAS+P,WAIxB/P,EAAS+P,UAAY7kB,YAAW,WAC1B,iBAAkBpH,EAAOksB,SAC3BlsB,EAAOksB,QAAQniB,EAAW,YAAc,gBAAgB,GACtD9J,EAASksB,MACTnsB,EAAO2qB,SAASyB,SAAWpsB,EAAO2qB,SAAS0B,OAAS,IAAMnQ,EAASwO,aAGjE3gB,IACFmS,EAASoQ,mBAAoB,IAG/BtsB,EAAO2qB,SAAS3mB,KAAOkY,EAASwO,YAGlCxO,EAAS+P,UAAY,OACpB,QAGL,iBAAkB,SAAUhe,EAAGiO,EAAU/W,GAClCA,IAAiC,IAAtBA,EAAQkE,KAAKrF,OAI7B2D,aAAauU,EAAS+P,WAGlB/P,EAASwO,aAAexO,EAASoQ,kBACnCtsB,EAAOksB,QAAQK,OACNrQ,EAASwO,cACd,iBAAkB1qB,EAAOksB,QAC3BlsB,EAAOksB,QAAQM,aAAa,GAAIvsB,EAASksB,MAAOnsB,EAAO2qB,SAASyB,SAAWpsB,EAAO2qB,SAAS0B,QAAUnQ,EAAS8P,UAAY,KAE1HhsB,EAAO2qB,SAAS3mB,KAAOkY,EAAS8P,UAIpC9P,EAASwO,YAAc,SAK3BxqB,EAAEF,GAAQgO,GAAG,iBAAiB,WAC5B,IAAIyH,EAAM4V,IACRoB,EAAK,KAGPvsB,EAAE6I,KACA7I,EAAE,uBACDgU,MACAwY,WACD,SAAUpjB,EAAOL,GACf,IAAI0jB,EAAMzsB,EAAE+I,GAAOpH,KAAK,YAExB,GAAI8qB,GAAOA,EAAIjC,YAEb,OADA+B,EAAKE,GACE,KAKTF,EAEEA,EAAG/B,cAAgBjV,EAAI8V,QAAU,IAAM9V,EAAInM,OAAyB,IAAdmM,EAAInM,OAAemjB,EAAG/B,aAAejV,EAAI8V,UACjGkB,EAAG/B,YAAc,KAEjB+B,EAAGrpB,SAEoB,KAAhBqS,EAAI8V,SACbC,EAAe/V,MAKnBrO,YAAW,WACJlH,EAAEM,SAASkK,eACd8gB,EAAeH,OAEhB,QAzMP,CA2MGrrB,OAAQC,SAAU4e,QAOrB,SAAW5e,EAAUC,GACnB,aAEA,IAAI0sB,GAAW,IAAIzU,MAAOC,UAE1BlY,EAAED,GAAU+N,GAAG,CACb,YAAa,SAAUC,EAAGiO,EAAU/W,GAClC+W,EAAS7Q,MAAMqD,MAAMV,GAAG,uDAAuD,SAAUC,GACvF,IAAI9I,EAAU+W,EAAS/W,QACrB0nB,GAAW,IAAI1U,MAAOC,UAEpB8D,EAASlS,MAAMxB,OAAS,IAA4B,IAAvBrD,EAAQkE,KAAK9E,OAA2C,SAAvBY,EAAQkE,KAAK9E,OAAqC,UAAjBY,EAAQE,OAI3G4I,EAAEE,iBACFF,EAAEC,kBAEE/I,EAAQwL,OAAO6D,SAAS,uBAI5BvG,EAAIA,EAAEM,eAAiBN,EAEnB4e,EAAWD,EAAW,MAI1BA,EAAWC,EAEX3Q,IAAWjO,EAAE6e,SAAW7e,EAAE8e,QAAU9e,EAAE+e,aAAe/e,EAAEgf,QAAU,EAAI,OAAS,uBA9BtF,CAkCGhtB,SAAU4e","file":"partial.vendors~fancybox.js","sourcesContent":["// ==================================================\n// fancyBox v3.5.7\n//\n// Licensed GPLv3 for open source use\n// or fancyBox Commercial License for commercial use\n//\n// http://fancyapps.com/fancybox/\n// Copyright 2019 fancyApps\n//\n// ==================================================\n(function (window, document, $, undefined) {\r\n \"use strict\";\r\n\r\n window.console = window.console || {\r\n info: function (stuff) {}\r\n };\r\n\r\n // If there's no jQuery, fancyBox can't work\r\n // =========================================\r\n\r\n if (!$) {\r\n return;\r\n }\r\n\r\n // Check if fancyBox is already initialized\r\n // ========================================\r\n\r\n if ($.fn.fancybox) {\r\n console.info(\"fancyBox already initialized\");\r\n\r\n return;\r\n }\r\n\r\n // Private default settings\r\n // ========================\r\n\r\n var defaults = {\r\n // Close existing modals\r\n // Set this to false if you do not need to stack multiple instances\r\n closeExisting: false,\r\n\r\n // Enable infinite gallery navigation\r\n loop: false,\r\n\r\n // Horizontal space between slides\r\n gutter: 50,\r\n\r\n // Enable keyboard navigation\r\n keyboard: true,\r\n\r\n // Should allow caption to overlap the content\r\n preventCaptionOverlap: true,\r\n\r\n // Should display navigation arrows at the screen edges\r\n arrows: true,\r\n\r\n // Should display counter at the top left corner\r\n infobar: true,\r\n\r\n // Should display close button (using `btnTpl.smallBtn` template) over the content\r\n // Can be true, false, \"auto\"\r\n // If \"auto\" - will be automatically enabled for \"html\", \"inline\" or \"ajax\" items\r\n smallBtn: \"auto\",\r\n\r\n // Should display toolbar (buttons at the top)\r\n // Can be true, false, \"auto\"\r\n // If \"auto\" - will be automatically hidden if \"smallBtn\" is enabled\r\n toolbar: \"auto\",\r\n\r\n // What buttons should appear in the top right corner.\r\n // Buttons will be created using templates from `btnTpl` option\r\n // and they will be placed into toolbar (class=\"fancybox-toolbar\"` element)\r\n buttons: [\r\n \"zoom\",\r\n //\"share\",\r\n \"slideShow\",\r\n //\"fullScreen\",\r\n //\"download\",\r\n \"thumbs\",\r\n \"close\"\r\n ],\r\n\r\n // Detect \"idle\" time in seconds\r\n idleTime: 3,\r\n\r\n // Disable right-click and use simple image protection for images\r\n protect: false,\r\n\r\n // Shortcut to make content \"modal\" - disable keyboard navigtion, hide buttons, etc\r\n modal: false,\r\n\r\n image: {\r\n // Wait for images to load before displaying\r\n // true - wait for image to load and then display;\r\n // false - display thumbnail and load the full-sized image over top,\r\n // requires predefined image dimensions (`data-width` and `data-height` attributes)\r\n preload: false\r\n },\r\n\r\n ajax: {\r\n // Object containing settings for ajax request\r\n settings: {\r\n // This helps to indicate that request comes from the modal\r\n // Feel free to change naming\r\n data: {\r\n fancybox: true\r\n }\r\n }\r\n },\r\n\r\n iframe: {\r\n // Iframe template\r\n tpl: '',\r\n\r\n // Preload iframe before displaying it\r\n // This allows to calculate iframe content width and height\r\n // (note: Due to \"Same Origin Policy\", you can't get cross domain data).\r\n preload: true,\r\n\r\n // Custom CSS styling for iframe wrapping element\r\n // You can use this to set custom iframe dimensions\r\n css: {},\r\n\r\n // Iframe tag attributes\r\n attr: {\r\n scrolling: \"auto\"\r\n }\r\n },\r\n\r\n // For HTML5 video only\r\n video: {\r\n tpl: '\",\r\n format: \"\", // custom video format\r\n autoStart: true\r\n },\r\n\r\n // Default content type if cannot be detected automatically\r\n defaultType: \"image\",\r\n\r\n // Open/close animation type\r\n // Possible values:\r\n // false - disable\r\n // \"zoom\" - zoom images from/to thumbnail\r\n // \"fade\"\r\n // \"zoom-in-out\"\r\n //\r\n animationEffect: \"zoom\",\r\n\r\n // Duration in ms for open/close animation\r\n animationDuration: 366,\r\n\r\n // Should image change opacity while zooming\r\n // If opacity is \"auto\", then opacity will be changed if image and thumbnail have different aspect ratios\r\n zoomOpacity: \"auto\",\r\n\r\n // Transition effect between slides\r\n //\r\n // Possible values:\r\n // false - disable\r\n // \"fade'\r\n // \"slide'\r\n // \"circular'\r\n // \"tube'\r\n // \"zoom-in-out'\r\n // \"rotate'\r\n //\r\n transitionEffect: \"fade\",\r\n\r\n // Duration in ms for transition animation\r\n transitionDuration: 366,\r\n\r\n // Custom CSS class for slide element\r\n slideClass: \"\",\r\n\r\n // Custom CSS class for layout\r\n baseClass: \"\",\r\n\r\n // Base template for layout\r\n baseTpl: '
' +\r\n '
' +\r\n '
' +\r\n '
 / 
' +\r\n '
{{buttons}}
' +\r\n '
{{arrows}}
' +\r\n '
' +\r\n '
' +\r\n \"
\" +\r\n \"
\",\r\n\r\n // Loading indicator template\r\n spinnerTpl: '
',\r\n\r\n // Error message template\r\n errorTpl: '

{{ERROR}}

',\r\n\r\n btnTpl: {\r\n download: '' +\r\n '' +\r\n \"\",\r\n\r\n zoom: '\",\r\n\r\n close: '\",\r\n\r\n // Arrows\r\n arrowLeft: '\",\r\n\r\n arrowRight: '\",\r\n\r\n // This small close button will be appended to your html/inline/ajax content by default,\r\n // if \"smallBtn\" option is not set to false\r\n smallBtn: '\"\r\n },\r\n\r\n // Container is injected into this element\r\n parentEl: \"body\",\r\n\r\n // Hide browser vertical scrollbars; use at your own risk\r\n hideScrollbar: true,\r\n\r\n // Focus handling\r\n // ==============\r\n\r\n // Try to focus on the first focusable element after opening\r\n autoFocus: true,\r\n\r\n // Put focus back to active element after closing\r\n backFocus: true,\r\n\r\n // Do not let user to focus on element outside modal content\r\n trapFocus: true,\r\n\r\n // Module specific options\r\n // =======================\r\n\r\n fullScreen: {\r\n autoStart: false\r\n },\r\n\r\n // Set `touch: false` to disable panning/swiping\r\n touch: {\r\n vertical: true, // Allow to drag content vertically\r\n momentum: true // Continue movement after releasing mouse/touch when panning\r\n },\r\n\r\n // Hash value when initializing manually,\r\n // set `false` to disable hash change\r\n hash: null,\r\n\r\n // Customize or add new media types\r\n // Example:\r\n /*\r\n media : {\r\n youtube : {\r\n params : {\r\n autoplay : 0\r\n }\r\n }\r\n }\r\n */\r\n media: {},\r\n\r\n slideShow: {\r\n autoStart: false,\r\n speed: 3000\r\n },\r\n\r\n thumbs: {\r\n autoStart: false, // Display thumbnails on opening\r\n hideOnClose: true, // Hide thumbnail grid when closing animation starts\r\n parentEl: \".fancybox-container\", // Container is injected into this element\r\n axis: \"y\" // Vertical (y) or horizontal (x) scrolling\r\n },\r\n\r\n // Use mousewheel to navigate gallery\r\n // If 'auto' - enabled for images only\r\n wheel: \"auto\",\r\n\r\n // Callbacks\r\n //==========\r\n\r\n // See Documentation/API/Events for more information\r\n // Example:\r\n /*\r\n afterShow: function( instance, current ) {\r\n console.info( 'Clicked element:' );\r\n console.info( current.opts.$orig );\r\n }\r\n */\r\n\r\n onInit: $.noop, // When instance has been initialized\r\n\r\n beforeLoad: $.noop, // Before the content of a slide is being loaded\r\n afterLoad: $.noop, // When the content of a slide is done loading\r\n\r\n beforeShow: $.noop, // Before open animation starts\r\n afterShow: $.noop, // When content is done loading and animating\r\n\r\n beforeClose: $.noop, // Before the instance attempts to close. Return false to cancel the close.\r\n afterClose: $.noop, // After instance has been closed\r\n\r\n onActivate: $.noop, // When instance is brought to front\r\n onDeactivate: $.noop, // When other instance has been activated\r\n\r\n // Interaction\r\n // ===========\r\n\r\n // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,\r\n // each option can be string or method that returns value.\r\n //\r\n // Possible values:\r\n // \"close\" - close instance\r\n // \"next\" - move to next gallery item\r\n // \"nextOrClose\" - move to next gallery item or close if gallery has only one item\r\n // \"toggleControls\" - show/hide controls\r\n // \"zoom\" - zoom image (if loaded)\r\n // false - do nothing\r\n\r\n // Clicked on the content\r\n clickContent: function (current, event) {\r\n return current.type === \"image\" ? \"zoom\" : false;\r\n },\r\n\r\n // Clicked on the slide\r\n clickSlide: \"close\",\r\n\r\n // Clicked on the background (backdrop) element;\r\n // if you have not changed the layout, then most likely you need to use `clickSlide` option\r\n clickOutside: \"close\",\r\n\r\n // Same as previous two, but for double click\r\n dblclickContent: false,\r\n dblclickSlide: false,\r\n dblclickOutside: false,\r\n\r\n // Custom options when mobile device is detected\r\n // =============================================\r\n\r\n mobile: {\r\n preventCaptionOverlap: false,\r\n idleTime: false,\r\n clickContent: function (current, event) {\r\n return current.type === \"image\" ? \"toggleControls\" : false;\r\n },\r\n clickSlide: function (current, event) {\r\n return current.type === \"image\" ? \"toggleControls\" : \"close\";\r\n },\r\n dblclickContent: function (current, event) {\r\n return current.type === \"image\" ? \"zoom\" : false;\r\n },\r\n dblclickSlide: function (current, event) {\r\n return current.type === \"image\" ? \"zoom\" : false;\r\n }\r\n },\r\n\r\n // Internationalization\r\n // ====================\r\n\r\n lang: \"en\",\r\n i18n: {\r\n en: {\r\n CLOSE: \"Close\",\r\n NEXT: \"Next\",\r\n PREV: \"Previous\",\r\n ERROR: \"The requested content cannot be loaded.
Please try again later.\",\r\n PLAY_START: \"Start slideshow\",\r\n PLAY_STOP: \"Pause slideshow\",\r\n FULL_SCREEN: \"Full screen\",\r\n THUMBS: \"Thumbnails\",\r\n DOWNLOAD: \"Download\",\r\n SHARE: \"Share\",\r\n ZOOM: \"Zoom\"\r\n },\r\n de: {\r\n CLOSE: \"Schließen\",\r\n NEXT: \"Weiter\",\r\n PREV: \"Zurück\",\r\n ERROR: \"Die angeforderten Daten konnten nicht geladen werden.
Bitte versuchen Sie es später nochmal.\",\r\n PLAY_START: \"Diaschau starten\",\r\n PLAY_STOP: \"Diaschau beenden\",\r\n FULL_SCREEN: \"Vollbild\",\r\n THUMBS: \"Vorschaubilder\",\r\n DOWNLOAD: \"Herunterladen\",\r\n SHARE: \"Teilen\",\r\n ZOOM: \"Vergrößern\"\r\n }\r\n }\r\n };\r\n\r\n // Few useful variables and methods\r\n // ================================\r\n\r\n var $W = $(window);\r\n var $D = $(document);\r\n\r\n var called = 0;\r\n\r\n // Check if an object is a jQuery object and not a native JavaScript object\r\n // ========================================================================\r\n var isQuery = function (obj) {\r\n return obj && obj.hasOwnProperty && obj instanceof $;\r\n };\r\n\r\n // Handle multiple browsers for \"requestAnimationFrame\" and \"cancelAnimationFrame\"\r\n // ===============================================================================\r\n var requestAFrame = (function () {\r\n return (\r\n window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n // if all else fails, use setTimeout\r\n function (callback) {\r\n return window.setTimeout(callback, 1000 / 60);\r\n }\r\n );\r\n })();\r\n\r\n var cancelAFrame = (function () {\r\n return (\r\n window.cancelAnimationFrame ||\r\n window.webkitCancelAnimationFrame ||\r\n window.mozCancelAnimationFrame ||\r\n window.oCancelAnimationFrame ||\r\n function (id) {\r\n window.clearTimeout(id);\r\n }\r\n );\r\n })();\r\n\r\n // Detect the supported transition-end event property name\r\n // =======================================================\r\n var transitionEnd = (function () {\r\n var el = document.createElement(\"fakeelement\"),\r\n t;\r\n\r\n var transitions = {\r\n transition: \"transitionend\",\r\n OTransition: \"oTransitionEnd\",\r\n MozTransition: \"transitionend\",\r\n WebkitTransition: \"webkitTransitionEnd\"\r\n };\r\n\r\n for (t in transitions) {\r\n if (el.style[t] !== undefined) {\r\n return transitions[t];\r\n }\r\n }\r\n\r\n return \"transitionend\";\r\n })();\r\n\r\n // Force redraw on an element.\r\n // This helps in cases where the browser doesn't redraw an updated element properly\r\n // ================================================================================\r\n var forceRedraw = function ($el) {\r\n return $el && $el.length && $el[0].offsetHeight;\r\n };\r\n\r\n // Exclude array (`buttons`) options from deep merging\r\n // ===================================================\r\n var mergeOpts = function (opts1, opts2) {\r\n var rez = $.extend(true, {}, opts1, opts2);\r\n\r\n $.each(opts2, function (key, value) {\r\n if ($.isArray(value)) {\r\n rez[key] = value;\r\n }\r\n });\r\n\r\n return rez;\r\n };\r\n\r\n // How much of an element is visible in viewport\r\n // =============================================\r\n\r\n var inViewport = function (elem) {\r\n var elemCenter, rez;\r\n\r\n if (!elem || elem.ownerDocument !== document) {\r\n return false;\r\n }\r\n\r\n $(\".fancybox-container\").css(\"pointer-events\", \"none\");\r\n\r\n elemCenter = {\r\n x: elem.getBoundingClientRect().left + elem.offsetWidth / 2,\r\n y: elem.getBoundingClientRect().top + elem.offsetHeight / 2\r\n };\r\n\r\n rez = document.elementFromPoint(elemCenter.x, elemCenter.y) === elem;\r\n\r\n $(\".fancybox-container\").css(\"pointer-events\", \"\");\r\n\r\n return rez;\r\n };\r\n\r\n // Class definition\r\n // ================\r\n\r\n var FancyBox = function (content, opts, index) {\r\n var self = this;\r\n\r\n self.opts = mergeOpts({\r\n index: index\r\n }, $.fancybox.defaults);\r\n\r\n if ($.isPlainObject(opts)) {\r\n self.opts = mergeOpts(self.opts, opts);\r\n }\r\n\r\n if ($.fancybox.isMobile) {\r\n self.opts = mergeOpts(self.opts, self.opts.mobile);\r\n }\r\n\r\n self.id = self.opts.id || ++called;\r\n\r\n self.currIndex = parseInt(self.opts.index, 10) || 0;\r\n self.prevIndex = null;\r\n\r\n self.prevPos = null;\r\n self.currPos = 0;\r\n\r\n self.firstRun = true;\r\n\r\n // All group items\r\n self.group = [];\r\n\r\n // Existing slides (for current, next and previous gallery items)\r\n self.slides = {};\r\n\r\n // Create group elements\r\n self.addContent(content);\r\n\r\n if (!self.group.length) {\r\n return;\r\n }\r\n\r\n self.init();\r\n };\r\n\r\n $.extend(FancyBox.prototype, {\r\n // Create DOM structure\r\n // ====================\r\n\r\n init: function () {\r\n var self = this,\r\n firstItem = self.group[self.currIndex],\r\n firstItemOpts = firstItem.opts,\r\n $container,\r\n buttonStr;\r\n\r\n if (firstItemOpts.closeExisting) {\r\n $.fancybox.close(true);\r\n }\r\n\r\n // Hide scrollbars\r\n // ===============\r\n\r\n $(\"body\").addClass(\"fancybox-active\");\r\n\r\n if (\r\n !$.fancybox.getInstance() &&\r\n firstItemOpts.hideScrollbar !== false &&\r\n !$.fancybox.isMobile &&\r\n document.body.scrollHeight > window.innerHeight\r\n ) {\r\n $(\"head\").append(\r\n '\"\r\n );\r\n\r\n $(\"body\").addClass(\"compensate-for-scrollbar\");\r\n }\r\n\r\n // Build html markup and set references\r\n // ====================================\r\n\r\n // Build html code for buttons and insert into main template\r\n buttonStr = \"\";\r\n\r\n $.each(firstItemOpts.buttons, function (index, value) {\r\n buttonStr += firstItemOpts.btnTpl[value] || \"\";\r\n });\r\n\r\n // Create markup from base template, it will be initially hidden to\r\n // avoid unnecessary work like painting while initializing is not complete\r\n $container = $(\r\n self.translate(\r\n self,\r\n firstItemOpts.baseTpl\r\n .replace(\"{{buttons}}\", buttonStr)\r\n .replace(\"{{arrows}}\", firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight)\r\n )\r\n )\r\n .attr(\"id\", \"fancybox-container-\" + self.id)\r\n .addClass(firstItemOpts.baseClass)\r\n .data(\"FancyBox\", self)\r\n .appendTo(firstItemOpts.parentEl);\r\n\r\n // Create object holding references to jQuery wrapped nodes\r\n self.$refs = {\r\n container: $container\r\n };\r\n\r\n [\"bg\", \"inner\", \"infobar\", \"toolbar\", \"stage\", \"caption\", \"navigation\"].forEach(function (item) {\r\n self.$refs[item] = $container.find(\".fancybox-\" + item);\r\n });\r\n\r\n self.trigger(\"onInit\");\r\n\r\n // Enable events, deactive previous instances\r\n self.activate();\r\n\r\n // Build slides, load and reveal content\r\n self.jumpTo(self.currIndex);\r\n },\r\n\r\n // Simple i18n support - replaces object keys found in template\r\n // with corresponding values\r\n // ============================================================\r\n\r\n translate: function (obj, str) {\r\n var arr = obj.opts.i18n[obj.opts.lang] || obj.opts.i18n.en;\r\n\r\n return str.replace(/\\{\\{(\\w+)\\}\\}/g, function (match, n) {\r\n return arr[n] === undefined ? match : arr[n];\r\n });\r\n },\r\n\r\n // Populate current group with fresh content\r\n // Check if each object has valid type and content\r\n // ===============================================\r\n\r\n addContent: function (content) {\r\n var self = this,\r\n items = $.makeArray(content),\r\n thumbs;\r\n\r\n $.each(items, function (i, item) {\r\n var obj = {},\r\n opts = {},\r\n $item,\r\n type,\r\n found,\r\n src,\r\n srcParts;\r\n\r\n // Step 1 - Make sure we have an object\r\n // ====================================\r\n\r\n if ($.isPlainObject(item)) {\r\n // We probably have manual usage here, something like\r\n // $.fancybox.open( [ { src : \"image.jpg\", type : \"image\" } ] )\r\n\r\n obj = item;\r\n opts = item.opts || item;\r\n } else if ($.type(item) === \"object\" && $(item).length) {\r\n // Here we probably have jQuery collection returned by some selector\r\n $item = $(item);\r\n\r\n // Support attributes like `data-options='{\"touch\" : false}'` and `data-touch='false'`\r\n opts = $item.data() || {};\r\n opts = $.extend(true, {}, opts, opts.options);\r\n\r\n // Here we store clicked element\r\n opts.$orig = $item;\r\n\r\n obj.src = self.opts.src || opts.src || $item.attr(\"href\");\r\n\r\n // Assume that simple syntax is used, for example:\r\n // `$.fancybox.open( $(\"#test\"), {} );`\r\n if (!obj.type && !obj.src) {\r\n obj.type = \"inline\";\r\n obj.src = item;\r\n }\r\n } else {\r\n // Assume we have a simple html code, for example:\r\n // $.fancybox.open( '

Hi!

' );\r\n obj = {\r\n type: \"html\",\r\n src: item + \"\"\r\n };\r\n }\r\n\r\n // Each gallery object has full collection of options\r\n obj.opts = $.extend(true, {}, self.opts, opts);\r\n\r\n // Do not merge buttons array\r\n if ($.isArray(opts.buttons)) {\r\n obj.opts.buttons = opts.buttons;\r\n }\r\n\r\n if ($.fancybox.isMobile && obj.opts.mobile) {\r\n obj.opts = mergeOpts(obj.opts, obj.opts.mobile);\r\n }\r\n\r\n // Step 2 - Make sure we have content type, if not - try to guess\r\n // ==============================================================\r\n\r\n type = obj.type || obj.opts.type;\r\n src = obj.src || \"\";\r\n\r\n if (!type && src) {\r\n if ((found = src.match(/\\.(mp4|mov|ogv|webm)((\\?|#).*)?$/i))) {\r\n type = \"video\";\r\n\r\n if (!obj.opts.video.format) {\r\n obj.opts.video.format = \"video/\" + (found[1] === \"ogv\" ? \"ogg\" : found[1]);\r\n }\r\n } else if (src.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i)) {\r\n type = \"image\";\r\n } else if (src.match(/\\.(pdf)((\\?|#).*)?$/i)) {\r\n type = \"iframe\";\r\n obj = $.extend(true, obj, {\r\n contentType: \"pdf\",\r\n opts: {\r\n iframe: {\r\n preload: false\r\n }\r\n }\r\n });\r\n } else if (src.charAt(0) === \"#\") {\r\n type = \"inline\";\r\n }\r\n }\r\n\r\n if (type) {\r\n obj.type = type;\r\n } else {\r\n self.trigger(\"objectNeedsType\", obj);\r\n }\r\n\r\n if (!obj.contentType) {\r\n obj.contentType = $.inArray(obj.type, [\"html\", \"inline\", \"ajax\"]) > -1 ? \"html\" : obj.type;\r\n }\r\n\r\n // Step 3 - Some adjustments\r\n // =========================\r\n\r\n obj.index = self.group.length;\r\n\r\n if (obj.opts.smallBtn == \"auto\") {\r\n obj.opts.smallBtn = $.inArray(obj.type, [\"html\", \"inline\", \"ajax\"]) > -1;\r\n }\r\n\r\n if (obj.opts.toolbar === \"auto\") {\r\n obj.opts.toolbar = !obj.opts.smallBtn;\r\n }\r\n\r\n // Find thumbnail image, check if exists and if is in the viewport\r\n obj.$thumb = obj.opts.$thumb || null;\r\n\r\n if (obj.opts.$trigger && obj.index === self.opts.index) {\r\n obj.$thumb = obj.opts.$trigger.find(\"img:first\");\r\n\r\n if (obj.$thumb.length) {\r\n obj.opts.$orig = obj.opts.$trigger;\r\n }\r\n }\r\n\r\n if (!(obj.$thumb && obj.$thumb.length) && obj.opts.$orig) {\r\n obj.$thumb = obj.opts.$orig.find(\"img:first\");\r\n }\r\n\r\n if (obj.$thumb && !obj.$thumb.length) {\r\n obj.$thumb = null;\r\n }\r\n\r\n obj.thumb = obj.opts.thumb || (obj.$thumb ? obj.$thumb[0].src : null);\r\n\r\n // \"caption\" is a \"special\" option, it can be used to customize caption per gallery item\r\n if ($.type(obj.opts.caption) === \"function\") {\r\n obj.opts.caption = obj.opts.caption.apply(item, [self, obj]);\r\n }\r\n\r\n if ($.type(self.opts.caption) === \"function\") {\r\n obj.opts.caption = self.opts.caption.apply(item, [self, obj]);\r\n }\r\n\r\n // Make sure we have caption as a string or jQuery object\r\n if (!(obj.opts.caption instanceof $)) {\r\n obj.opts.caption = obj.opts.caption === undefined ? \"\" : obj.opts.caption + \"\";\r\n }\r\n\r\n // Check if url contains \"filter\" used to filter the content\r\n // Example: \"ajax.html #something\"\r\n if (obj.type === \"ajax\") {\r\n srcParts = src.split(/\\s+/, 2);\r\n\r\n if (srcParts.length > 1) {\r\n obj.src = srcParts.shift();\r\n\r\n obj.opts.filter = srcParts.shift();\r\n }\r\n }\r\n\r\n // Hide all buttons and disable interactivity for modal items\r\n if (obj.opts.modal) {\r\n obj.opts = $.extend(true, obj.opts, {\r\n trapFocus: true,\r\n // Remove buttons\r\n infobar: 0,\r\n toolbar: 0,\r\n\r\n smallBtn: 0,\r\n\r\n // Disable keyboard navigation\r\n keyboard: 0,\r\n\r\n // Disable some modules\r\n slideShow: 0,\r\n fullScreen: 0,\r\n thumbs: 0,\r\n touch: 0,\r\n\r\n // Disable click event handlers\r\n clickContent: false,\r\n clickSlide: false,\r\n clickOutside: false,\r\n dblclickContent: false,\r\n dblclickSlide: false,\r\n dblclickOutside: false\r\n });\r\n }\r\n\r\n // Step 4 - Add processed object to group\r\n // ======================================\r\n\r\n self.group.push(obj);\r\n });\r\n\r\n // Update controls if gallery is already opened\r\n if (Object.keys(self.slides).length) {\r\n self.updateControls();\r\n\r\n // Update thumbnails, if needed\r\n thumbs = self.Thumbs;\r\n\r\n if (thumbs && thumbs.isActive) {\r\n thumbs.create();\r\n\r\n thumbs.focus();\r\n }\r\n }\r\n },\r\n\r\n // Attach an event handler functions for:\r\n // - navigation buttons\r\n // - browser scrolling, resizing;\r\n // - focusing\r\n // - keyboard\r\n // - detecting inactivity\r\n // ======================================\r\n\r\n addEvents: function () {\r\n var self = this;\r\n\r\n self.removeEvents();\r\n\r\n // Make navigation elements clickable\r\n // ==================================\r\n\r\n self.$refs.container\r\n .on(\"click.fb-close\", \"[data-fancybox-close]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.close(e);\r\n })\r\n .on(\"touchstart.fb-prev click.fb-prev\", \"[data-fancybox-prev]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.previous();\r\n })\r\n .on(\"touchstart.fb-next click.fb-next\", \"[data-fancybox-next]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.next();\r\n })\r\n .on(\"click.fb\", \"[data-fancybox-zoom]\", function (e) {\r\n // Click handler for zoom button\r\n self[self.isScaledDown() ? \"scaleToActual\" : \"scaleToFit\"]();\r\n });\r\n\r\n // Handle page scrolling and browser resizing\r\n // ==========================================\r\n\r\n $W.on(\"orientationchange.fb resize.fb\", function (e) {\r\n if (e && e.originalEvent && e.originalEvent.type === \"resize\") {\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n self.update(e);\r\n });\r\n } else {\r\n if (self.current && self.current.type === \"iframe\") {\r\n self.$refs.stage.hide();\r\n }\r\n\r\n setTimeout(\r\n function () {\r\n self.$refs.stage.show();\r\n\r\n self.update(e);\r\n },\r\n $.fancybox.isMobile ? 600 : 250\r\n );\r\n }\r\n });\r\n\r\n $D.on(\"keydown.fb\", function (e) {\r\n var instance = $.fancybox ? $.fancybox.getInstance() : null,\r\n current = instance.current,\r\n keycode = e.keyCode || e.which;\r\n\r\n // Trap keyboard focus inside of the modal\r\n // =======================================\r\n\r\n if (keycode == 9) {\r\n if (current.opts.trapFocus) {\r\n self.focus(e);\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Enable keyboard navigation\r\n // ==========================\r\n\r\n if (!current.opts.keyboard || e.ctrlKey || e.altKey || e.shiftKey || $(e.target).is(\"input,textarea,video,audio,select\")) {\r\n return;\r\n }\r\n\r\n // Backspace and Esc keys\r\n if (keycode === 8 || keycode === 27) {\r\n e.preventDefault();\r\n\r\n self.close(e);\r\n\r\n return;\r\n }\r\n\r\n // Left arrow and Up arrow\r\n if (keycode === 37 || keycode === 38) {\r\n e.preventDefault();\r\n\r\n self.previous();\r\n\r\n return;\r\n }\r\n\r\n // Righ arrow and Down arrow\r\n if (keycode === 39 || keycode === 40) {\r\n e.preventDefault();\r\n\r\n self.next();\r\n\r\n return;\r\n }\r\n\r\n self.trigger(\"afterKeydown\", e, keycode);\r\n });\r\n\r\n // Hide controls after some inactivity period\r\n if (self.group[self.currIndex].opts.idleTime) {\r\n self.idleSecondsCounter = 0;\r\n\r\n $D.on(\r\n \"mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle\",\r\n function (e) {\r\n self.idleSecondsCounter = 0;\r\n\r\n if (self.isIdle) {\r\n self.showControls();\r\n }\r\n\r\n self.isIdle = false;\r\n }\r\n );\r\n\r\n self.idleInterval = window.setInterval(function () {\r\n self.idleSecondsCounter++;\r\n\r\n if (self.idleSecondsCounter >= self.group[self.currIndex].opts.idleTime && !self.isDragging) {\r\n self.isIdle = true;\r\n self.idleSecondsCounter = 0;\r\n\r\n self.hideControls();\r\n }\r\n }, 1000);\r\n }\r\n },\r\n\r\n // Remove events added by the core\r\n // ===============================\r\n\r\n removeEvents: function () {\r\n var self = this;\r\n\r\n $W.off(\"orientationchange.fb resize.fb\");\r\n $D.off(\"keydown.fb .fb-idle\");\r\n\r\n this.$refs.container.off(\".fb-close .fb-prev .fb-next\");\r\n\r\n if (self.idleInterval) {\r\n window.clearInterval(self.idleInterval);\r\n\r\n self.idleInterval = null;\r\n }\r\n },\r\n\r\n // Change to previous gallery item\r\n // ===============================\r\n\r\n previous: function (duration) {\r\n return this.jumpTo(this.currPos - 1, duration);\r\n },\r\n\r\n // Change to next gallery item\r\n // ===========================\r\n\r\n next: function (duration) {\r\n return this.jumpTo(this.currPos + 1, duration);\r\n },\r\n\r\n // Switch to selected gallery item\r\n // ===============================\r\n\r\n jumpTo: function (pos, duration) {\r\n var self = this,\r\n groupLen = self.group.length,\r\n firstRun,\r\n isMoved,\r\n loop,\r\n current,\r\n previous,\r\n slidePos,\r\n stagePos,\r\n prop,\r\n diff;\r\n\r\n if (self.isDragging || self.isClosing || (self.isAnimating && self.firstRun)) {\r\n return;\r\n }\r\n\r\n // Should loop?\r\n pos = parseInt(pos, 10);\r\n loop = self.current ? self.current.opts.loop : self.opts.loop;\r\n\r\n if (!loop && (pos < 0 || pos >= groupLen)) {\r\n return false;\r\n }\r\n\r\n // Check if opening for the first time; this helps to speed things up\r\n firstRun = self.firstRun = !Object.keys(self.slides).length;\r\n\r\n // Create slides\r\n previous = self.current;\r\n\r\n self.prevIndex = self.currIndex;\r\n self.prevPos = self.currPos;\r\n\r\n current = self.createSlide(pos);\r\n\r\n if (groupLen > 1) {\r\n if (loop || current.index < groupLen - 1) {\r\n self.createSlide(pos + 1);\r\n }\r\n\r\n if (loop || current.index > 0) {\r\n self.createSlide(pos - 1);\r\n }\r\n }\r\n\r\n self.current = current;\r\n self.currIndex = current.index;\r\n self.currPos = current.pos;\r\n\r\n self.trigger(\"beforeShow\", firstRun);\r\n\r\n self.updateControls();\r\n\r\n // Validate duration length\r\n current.forcedDuration = undefined;\r\n\r\n if ($.isNumeric(duration)) {\r\n current.forcedDuration = duration;\r\n } else {\r\n duration = current.opts[firstRun ? \"animationDuration\" : \"transitionDuration\"];\r\n }\r\n\r\n duration = parseInt(duration, 10);\r\n\r\n // Check if user has swiped the slides or if still animating\r\n isMoved = self.isMoved(current);\r\n\r\n // Make sure current slide is visible\r\n current.$slide.addClass(\"fancybox-slide--current\");\r\n\r\n // Fresh start - reveal container, current slide and start loading content\r\n if (firstRun) {\r\n if (current.opts.animationEffect && duration) {\r\n self.$refs.container.css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n self.$refs.container.addClass(\"fancybox-is-open\").trigger(\"focus\");\r\n\r\n // Attempt to load content into slide\r\n // This will later call `afterLoad` -> `revealContent`\r\n self.loadSlide(current);\r\n\r\n self.preload(\"image\");\r\n\r\n return;\r\n }\r\n\r\n // Get actual slide/stage positions (before cleaning up)\r\n slidePos = $.fancybox.getTranslate(previous.$slide);\r\n stagePos = $.fancybox.getTranslate(self.$refs.stage);\r\n\r\n // Clean up all slides\r\n $.each(self.slides, function (index, slide) {\r\n $.fancybox.stop(slide.$slide, true);\r\n });\r\n\r\n if (previous.pos !== current.pos) {\r\n previous.isComplete = false;\r\n }\r\n\r\n previous.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--current\");\r\n\r\n // If slides are out of place, then animate them to correct position\r\n if (isMoved) {\r\n // Calculate horizontal swipe distance\r\n diff = slidePos.left - (previous.pos * slidePos.width + previous.pos * previous.opts.gutter);\r\n\r\n $.each(self.slides, function (index, slide) {\r\n slide.$slide.removeClass(\"fancybox-animated\").removeClass(function (index, className) {\r\n return (className.match(/(^|\\s)fancybox-fx-\\S+/g) || []).join(\" \");\r\n });\r\n\r\n // Make sure that each slide is in equal distance\r\n // This is mostly needed for freshly added slides, because they are not yet positioned\r\n var leftPos = slide.pos * slidePos.width + slide.pos * slide.opts.gutter;\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: 0,\r\n left: leftPos - stagePos.left + diff\r\n });\r\n\r\n if (slide.pos !== current.pos) {\r\n slide.$slide.addClass(\"fancybox-slide--\" + (slide.pos > current.pos ? \"next\" : \"previous\"));\r\n }\r\n\r\n // Redraw to make sure that transition will start\r\n forceRedraw(slide.$slide);\r\n\r\n // Animate the slide\r\n $.fancybox.animate(\r\n slide.$slide, {\r\n top: 0,\r\n left: (slide.pos - current.pos) * slidePos.width + (slide.pos - current.pos) * slide.opts.gutter\r\n },\r\n duration,\r\n function () {\r\n slide.$slide\r\n .css({\r\n transform: \"\",\r\n opacity: \"\"\r\n })\r\n .removeClass(\"fancybox-slide--next fancybox-slide--previous\");\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n }\r\n );\r\n });\r\n } else if (duration && current.opts.transitionEffect) {\r\n // Set transition effect for previously active slide\r\n prop = \"fancybox-animated fancybox-fx-\" + current.opts.transitionEffect;\r\n\r\n previous.$slide.addClass(\"fancybox-slide--\" + (previous.pos > current.pos ? \"next\" : \"previous\"));\r\n\r\n $.fancybox.animate(\r\n previous.$slide,\r\n prop,\r\n duration,\r\n function () {\r\n previous.$slide.removeClass(prop).removeClass(\"fancybox-slide--next fancybox-slide--previous\");\r\n },\r\n false\r\n );\r\n }\r\n\r\n if (current.isLoaded) {\r\n self.revealContent(current);\r\n } else {\r\n self.loadSlide(current);\r\n }\r\n\r\n self.preload(\"image\");\r\n },\r\n\r\n // Create new \"slide\" element\r\n // These are gallery items that are actually added to DOM\r\n // =======================================================\r\n\r\n createSlide: function (pos) {\r\n var self = this,\r\n $slide,\r\n index;\r\n\r\n index = pos % self.group.length;\r\n index = index < 0 ? self.group.length + index : index;\r\n\r\n if (!self.slides[pos] && self.group[index]) {\r\n $slide = $('
').appendTo(self.$refs.stage);\r\n\r\n self.slides[pos] = $.extend(true, {}, self.group[index], {\r\n pos: pos,\r\n $slide: $slide,\r\n isLoaded: false\r\n });\r\n\r\n self.updateSlide(self.slides[pos]);\r\n }\r\n\r\n return self.slides[pos];\r\n },\r\n\r\n // Scale image to the actual size of the image;\r\n // x and y values should be relative to the slide\r\n // ==============================================\r\n\r\n scaleToActual: function (x, y, duration) {\r\n var self = this,\r\n current = self.current,\r\n $content = current.$content,\r\n canvasWidth = $.fancybox.getTranslate(current.$slide).width,\r\n canvasHeight = $.fancybox.getTranslate(current.$slide).height,\r\n newImgWidth = current.width,\r\n newImgHeight = current.height,\r\n imgPos,\r\n posX,\r\n posY,\r\n scaleX,\r\n scaleY;\r\n\r\n if (self.isAnimating || self.isMoved() || !$content || !(current.type == \"image\" && current.isLoaded && !current.hasError)) {\r\n return;\r\n }\r\n\r\n self.isAnimating = true;\r\n\r\n $.fancybox.stop($content);\r\n\r\n x = x === undefined ? canvasWidth * 0.5 : x;\r\n y = y === undefined ? canvasHeight * 0.5 : y;\r\n\r\n imgPos = $.fancybox.getTranslate($content);\r\n\r\n imgPos.top -= $.fancybox.getTranslate(current.$slide).top;\r\n imgPos.left -= $.fancybox.getTranslate(current.$slide).left;\r\n\r\n scaleX = newImgWidth / imgPos.width;\r\n scaleY = newImgHeight / imgPos.height;\r\n\r\n // Get center position for original image\r\n posX = canvasWidth * 0.5 - newImgWidth * 0.5;\r\n posY = canvasHeight * 0.5 - newImgHeight * 0.5;\r\n\r\n // Make sure image does not move away from edges\r\n if (newImgWidth > canvasWidth) {\r\n posX = imgPos.left * scaleX - (x * scaleX - x);\r\n\r\n if (posX > 0) {\r\n posX = 0;\r\n }\r\n\r\n if (posX < canvasWidth - newImgWidth) {\r\n posX = canvasWidth - newImgWidth;\r\n }\r\n }\r\n\r\n if (newImgHeight > canvasHeight) {\r\n posY = imgPos.top * scaleY - (y * scaleY - y);\r\n\r\n if (posY > 0) {\r\n posY = 0;\r\n }\r\n\r\n if (posY < canvasHeight - newImgHeight) {\r\n posY = canvasHeight - newImgHeight;\r\n }\r\n }\r\n\r\n self.updateCursor(newImgWidth, newImgHeight);\r\n\r\n $.fancybox.animate(\r\n $content, {\r\n top: posY,\r\n left: posX,\r\n scaleX: scaleX,\r\n scaleY: scaleY\r\n },\r\n duration || 366,\r\n function () {\r\n self.isAnimating = false;\r\n }\r\n );\r\n\r\n // Stop slideshow\r\n if (self.SlideShow && self.SlideShow.isActive) {\r\n self.SlideShow.stop();\r\n }\r\n },\r\n\r\n // Scale image to fit inside parent element\r\n // ========================================\r\n\r\n scaleToFit: function (duration) {\r\n var self = this,\r\n current = self.current,\r\n $content = current.$content,\r\n end;\r\n\r\n if (self.isAnimating || self.isMoved() || !$content || !(current.type == \"image\" && current.isLoaded && !current.hasError)) {\r\n return;\r\n }\r\n\r\n self.isAnimating = true;\r\n\r\n $.fancybox.stop($content);\r\n\r\n end = self.getFitPos(current);\r\n\r\n self.updateCursor(end.width, end.height);\r\n\r\n $.fancybox.animate(\r\n $content, {\r\n top: end.top,\r\n left: end.left,\r\n scaleX: end.width / $content.width(),\r\n scaleY: end.height / $content.height()\r\n },\r\n duration || 366,\r\n function () {\r\n self.isAnimating = false;\r\n }\r\n );\r\n },\r\n\r\n // Calculate image size to fit inside viewport\r\n // ===========================================\r\n\r\n getFitPos: function (slide) {\r\n var self = this,\r\n $content = slide.$content,\r\n $slide = slide.$slide,\r\n width = slide.width || slide.opts.width,\r\n height = slide.height || slide.opts.height,\r\n maxWidth,\r\n maxHeight,\r\n minRatio,\r\n aspectRatio,\r\n rez = {};\r\n\r\n if (!slide.isLoaded || !$content || !$content.length) {\r\n return false;\r\n }\r\n\r\n maxWidth = $.fancybox.getTranslate(self.$refs.stage).width;\r\n maxHeight = $.fancybox.getTranslate(self.$refs.stage).height;\r\n\r\n maxWidth -=\r\n parseFloat($slide.css(\"paddingLeft\")) +\r\n parseFloat($slide.css(\"paddingRight\")) +\r\n parseFloat($content.css(\"marginLeft\")) +\r\n parseFloat($content.css(\"marginRight\"));\r\n\r\n maxHeight -=\r\n parseFloat($slide.css(\"paddingTop\")) +\r\n parseFloat($slide.css(\"paddingBottom\")) +\r\n parseFloat($content.css(\"marginTop\")) +\r\n parseFloat($content.css(\"marginBottom\"));\r\n\r\n if (!width || !height) {\r\n width = maxWidth;\r\n height = maxHeight;\r\n }\r\n\r\n minRatio = Math.min(1, maxWidth / width, maxHeight / height);\r\n\r\n width = minRatio * width;\r\n height = minRatio * height;\r\n\r\n // Adjust width/height to precisely fit into container\r\n if (width > maxWidth - 0.5) {\r\n width = maxWidth;\r\n }\r\n\r\n if (height > maxHeight - 0.5) {\r\n height = maxHeight;\r\n }\r\n\r\n if (slide.type === \"image\") {\r\n rez.top = Math.floor((maxHeight - height) * 0.5) + parseFloat($slide.css(\"paddingTop\"));\r\n rez.left = Math.floor((maxWidth - width) * 0.5) + parseFloat($slide.css(\"paddingLeft\"));\r\n } else if (slide.contentType === \"video\") {\r\n // Force aspect ratio for the video\r\n // \"I say the whole world must learn of our peaceful ways… by force!\"\r\n aspectRatio = slide.opts.width && slide.opts.height ? width / height : slide.opts.ratio || 16 / 9;\r\n\r\n if (height > width / aspectRatio) {\r\n height = width / aspectRatio;\r\n } else if (width > height * aspectRatio) {\r\n width = height * aspectRatio;\r\n }\r\n }\r\n\r\n rez.width = width;\r\n rez.height = height;\r\n\r\n return rez;\r\n },\r\n\r\n // Update content size and position for all slides\r\n // ==============================================\r\n\r\n update: function (e) {\r\n var self = this;\r\n\r\n $.each(self.slides, function (key, slide) {\r\n self.updateSlide(slide, e);\r\n });\r\n },\r\n\r\n // Update slide content position and size\r\n // ======================================\r\n\r\n updateSlide: function (slide, e) {\r\n var self = this,\r\n $content = slide && slide.$content,\r\n width = slide.width || slide.opts.width,\r\n height = slide.height || slide.opts.height,\r\n $slide = slide.$slide;\r\n\r\n // First, prevent caption overlap, if needed\r\n self.adjustCaption(slide);\r\n\r\n // Then resize content to fit inside the slide\r\n if ($content && (width || height || slide.contentType === \"video\") && !slide.hasError) {\r\n $.fancybox.stop($content);\r\n\r\n $.fancybox.setTranslate($content, self.getFitPos(slide));\r\n\r\n if (slide.pos === self.currPos) {\r\n self.isAnimating = false;\r\n\r\n self.updateCursor();\r\n }\r\n }\r\n\r\n // Then some adjustments\r\n self.adjustLayout(slide);\r\n\r\n if ($slide.length) {\r\n $slide.trigger(\"refresh\");\r\n\r\n if (slide.pos === self.currPos) {\r\n self.$refs.toolbar\r\n .add(self.$refs.navigation.find(\".fancybox-button--arrow_right\"))\r\n .toggleClass(\"compensate-for-scrollbar\", $slide.get(0).scrollHeight > $slide.get(0).clientHeight);\r\n }\r\n }\r\n\r\n self.trigger(\"onUpdate\", slide, e);\r\n },\r\n\r\n // Horizontally center slide\r\n // =========================\r\n\r\n centerSlide: function (duration) {\r\n var self = this,\r\n current = self.current,\r\n $slide = current.$slide;\r\n\r\n if (self.isClosing || !current) {\r\n return;\r\n }\r\n\r\n $slide.siblings().css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n $slide\r\n .parent()\r\n .children()\r\n .removeClass(\"fancybox-slide--previous fancybox-slide--next\");\r\n\r\n $.fancybox.animate(\r\n $slide, {\r\n top: 0,\r\n left: 0,\r\n opacity: 1\r\n },\r\n duration === undefined ? 0 : duration,\r\n function () {\r\n // Clean up\r\n $slide.css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n if (!current.isComplete) {\r\n self.complete();\r\n }\r\n },\r\n false\r\n );\r\n },\r\n\r\n // Check if current slide is moved (swiped)\r\n // ========================================\r\n\r\n isMoved: function (slide) {\r\n var current = slide || this.current,\r\n slidePos,\r\n stagePos;\r\n\r\n if (!current) {\r\n return false;\r\n }\r\n\r\n stagePos = $.fancybox.getTranslate(this.$refs.stage);\r\n slidePos = $.fancybox.getTranslate(current.$slide);\r\n\r\n return (\r\n !current.$slide.hasClass(\"fancybox-animated\") &&\r\n (Math.abs(slidePos.top - stagePos.top) > 0.5 || Math.abs(slidePos.left - stagePos.left) > 0.5)\r\n );\r\n },\r\n\r\n // Update cursor style depending if content can be zoomed\r\n // ======================================================\r\n\r\n updateCursor: function (nextWidth, nextHeight) {\r\n var self = this,\r\n current = self.current,\r\n $container = self.$refs.container,\r\n canPan,\r\n isZoomable;\r\n\r\n if (!current || self.isClosing || !self.Guestures) {\r\n return;\r\n }\r\n\r\n $container.removeClass(\"fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan\");\r\n\r\n canPan = self.canPan(nextWidth, nextHeight);\r\n\r\n isZoomable = canPan ? true : self.isZoomable();\r\n\r\n $container.toggleClass(\"fancybox-is-zoomable\", isZoomable);\r\n\r\n $(\"[data-fancybox-zoom]\").prop(\"disabled\", !isZoomable);\r\n\r\n if (canPan) {\r\n $container.addClass(\"fancybox-can-pan\");\r\n } else if (\r\n isZoomable &&\r\n (current.opts.clickContent === \"zoom\" || ($.isFunction(current.opts.clickContent) && current.opts.clickContent(current) == \"zoom\"))\r\n ) {\r\n $container.addClass(\"fancybox-can-zoomIn\");\r\n } else if (current.opts.touch && (current.opts.touch.vertical || self.group.length > 1) && current.contentType !== \"video\") {\r\n $container.addClass(\"fancybox-can-swipe\");\r\n }\r\n },\r\n\r\n // Check if current slide is zoomable\r\n // ==================================\r\n\r\n isZoomable: function () {\r\n var self = this,\r\n current = self.current,\r\n fitPos;\r\n\r\n // Assume that slide is zoomable if:\r\n // - image is still loading\r\n // - actual size of the image is smaller than available area\r\n if (current && !self.isClosing && current.type === \"image\" && !current.hasError) {\r\n if (!current.isLoaded) {\r\n return true;\r\n }\r\n\r\n fitPos = self.getFitPos(current);\r\n\r\n if (fitPos && (current.width > fitPos.width || current.height > fitPos.height)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n // Check if current image dimensions are smaller than actual\r\n // =========================================================\r\n\r\n isScaledDown: function (nextWidth, nextHeight) {\r\n var self = this,\r\n rez = false,\r\n current = self.current,\r\n $content = current.$content;\r\n\r\n if (nextWidth !== undefined && nextHeight !== undefined) {\r\n rez = nextWidth < current.width && nextHeight < current.height;\r\n } else if ($content) {\r\n rez = $.fancybox.getTranslate($content);\r\n rez = rez.width < current.width && rez.height < current.height;\r\n }\r\n\r\n return rez;\r\n },\r\n\r\n // Check if image dimensions exceed parent element\r\n // ===============================================\r\n\r\n canPan: function (nextWidth, nextHeight) {\r\n var self = this,\r\n current = self.current,\r\n pos = null,\r\n rez = false;\r\n\r\n if (current.type === \"image\" && (current.isComplete || (nextWidth && nextHeight)) && !current.hasError) {\r\n rez = self.getFitPos(current);\r\n\r\n if (nextWidth !== undefined && nextHeight !== undefined) {\r\n pos = {\r\n width: nextWidth,\r\n height: nextHeight\r\n };\r\n } else if (current.isComplete) {\r\n pos = $.fancybox.getTranslate(current.$content);\r\n }\r\n\r\n if (pos && rez) {\r\n rez = Math.abs(pos.width - rez.width) > 1.5 || Math.abs(pos.height - rez.height) > 1.5;\r\n }\r\n }\r\n\r\n return rez;\r\n },\r\n\r\n // Load content into the slide\r\n // ===========================\r\n\r\n loadSlide: function (slide) {\r\n var self = this,\r\n type,\r\n $slide,\r\n ajaxLoad;\r\n\r\n if (slide.isLoading || slide.isLoaded) {\r\n return;\r\n }\r\n\r\n slide.isLoading = true;\r\n\r\n if (self.trigger(\"beforeLoad\", slide) === false) {\r\n slide.isLoading = false;\r\n\r\n return false;\r\n }\r\n\r\n type = slide.type;\r\n $slide = slide.$slide;\r\n\r\n $slide\r\n .off(\"refresh\")\r\n .trigger(\"onReset\")\r\n .addClass(slide.opts.slideClass);\r\n\r\n // Create content depending on the type\r\n switch (type) {\r\n case \"image\":\r\n self.setImage(slide);\r\n\r\n break;\r\n\r\n case \"iframe\":\r\n self.setIframe(slide);\r\n\r\n break;\r\n\r\n case \"html\":\r\n self.setContent(slide, slide.src || slide.content);\r\n\r\n break;\r\n\r\n case \"video\":\r\n self.setContent(\r\n slide,\r\n slide.opts.video.tpl\r\n .replace(/\\{\\{src\\}\\}/gi, slide.src)\r\n .replace(\"{{format}}\", slide.opts.videoFormat || slide.opts.video.format || \"\")\r\n .replace(\"{{poster}}\", slide.thumb || \"\")\r\n );\r\n\r\n break;\r\n\r\n case \"inline\":\r\n if ($(slide.src).length) {\r\n self.setContent(slide, $(slide.src));\r\n } else {\r\n self.setError(slide);\r\n }\r\n\r\n break;\r\n\r\n case \"ajax\":\r\n self.showLoading(slide);\r\n\r\n ajaxLoad = $.ajax(\r\n $.extend({}, slide.opts.ajax.settings, {\r\n url: slide.src,\r\n success: function (data, textStatus) {\r\n if (textStatus === \"success\") {\r\n self.setContent(slide, data);\r\n }\r\n },\r\n error: function (jqXHR, textStatus) {\r\n if (jqXHR && textStatus !== \"abort\") {\r\n self.setError(slide);\r\n }\r\n }\r\n })\r\n );\r\n\r\n $slide.one(\"onReset\", function () {\r\n ajaxLoad.abort();\r\n });\r\n\r\n break;\r\n\r\n default:\r\n self.setError(slide);\r\n\r\n break;\r\n }\r\n\r\n return true;\r\n },\r\n\r\n // Use thumbnail image, if possible\r\n // ================================\r\n\r\n setImage: function (slide) {\r\n var self = this,\r\n ghost;\r\n\r\n // Check if need to show loading icon\r\n setTimeout(function () {\r\n var $img = slide.$image;\r\n\r\n if (!self.isClosing && slide.isLoading && (!$img || !$img.length || !$img[0].complete) && !slide.hasError) {\r\n self.showLoading(slide);\r\n }\r\n }, 50);\r\n\r\n //Check if image has srcset\r\n self.checkSrcset(slide);\r\n\r\n // This will be wrapper containing both ghost and actual image\r\n slide.$content = $('
')\r\n .addClass(\"fancybox-is-hidden\")\r\n .appendTo(slide.$slide.addClass(\"fancybox-slide--image\"));\r\n\r\n // If we have a thumbnail, we can display it while actual image is loading\r\n // Users will not stare at black screen and actual image will appear gradually\r\n if (slide.opts.preload !== false && slide.opts.width && slide.opts.height && slide.thumb) {\r\n slide.width = slide.opts.width;\r\n slide.height = slide.opts.height;\r\n\r\n ghost = document.createElement(\"img\");\r\n\r\n ghost.onerror = function () {\r\n $(this).remove();\r\n\r\n slide.$ghost = null;\r\n };\r\n\r\n ghost.onload = function () {\r\n self.afterLoad(slide);\r\n };\r\n\r\n slide.$ghost = $(ghost)\r\n .addClass(\"fancybox-image\")\r\n .appendTo(slide.$content)\r\n .attr(\"src\", slide.thumb);\r\n }\r\n\r\n // Start loading actual image\r\n self.setBigImage(slide);\r\n },\r\n\r\n // Check if image has srcset and get the source\r\n // ============================================\r\n checkSrcset: function (slide) {\r\n var srcset = slide.opts.srcset || slide.opts.image.srcset,\r\n found,\r\n temp,\r\n pxRatio,\r\n windowWidth;\r\n\r\n // If we have \"srcset\", then we need to find first matching \"src\" value.\r\n // This is necessary, because when you set an src attribute, the browser will preload the image\r\n // before any javascript or even CSS is applied.\r\n if (srcset) {\r\n pxRatio = window.devicePixelRatio || 1;\r\n windowWidth = window.innerWidth * pxRatio;\r\n\r\n temp = srcset.split(\",\").map(function (el) {\r\n var ret = {};\r\n\r\n el.trim()\r\n .split(/\\s+/)\r\n .forEach(function (el, i) {\r\n var value = parseInt(el.substring(0, el.length - 1), 10);\r\n\r\n if (i === 0) {\r\n return (ret.url = el);\r\n }\r\n\r\n if (value) {\r\n ret.value = value;\r\n ret.postfix = el[el.length - 1];\r\n }\r\n });\r\n\r\n return ret;\r\n });\r\n\r\n // Sort by value\r\n temp.sort(function (a, b) {\r\n return a.value - b.value;\r\n });\r\n\r\n // Ok, now we have an array of all srcset values\r\n for (var j = 0; j < temp.length; j++) {\r\n var el = temp[j];\r\n\r\n if ((el.postfix === \"w\" && el.value >= windowWidth) || (el.postfix === \"x\" && el.value >= pxRatio)) {\r\n found = el;\r\n break;\r\n }\r\n }\r\n\r\n // If not found, take the last one\r\n if (!found && temp.length) {\r\n found = temp[temp.length - 1];\r\n }\r\n\r\n if (found) {\r\n slide.src = found.url;\r\n\r\n // If we have default width/height values, we can calculate height for matching source\r\n if (slide.width && slide.height && found.postfix == \"w\") {\r\n slide.height = (slide.width / slide.height) * found.value;\r\n slide.width = found.value;\r\n }\r\n\r\n slide.opts.srcset = srcset;\r\n }\r\n }\r\n },\r\n\r\n // Create full-size image\r\n // ======================\r\n\r\n setBigImage: function (slide) {\r\n var self = this,\r\n img = document.createElement(\"img\"),\r\n $img = $(img);\r\n\r\n slide.$image = $img\r\n .one(\"error\", function () {\r\n self.setError(slide);\r\n })\r\n .one(\"load\", function () {\r\n var sizes;\r\n\r\n if (!slide.$ghost) {\r\n self.resolveImageSlideSize(slide, this.naturalWidth, this.naturalHeight);\r\n\r\n self.afterLoad(slide);\r\n }\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n if (slide.opts.srcset) {\r\n sizes = slide.opts.sizes;\r\n\r\n if (!sizes || sizes === \"auto\") {\r\n sizes =\r\n (slide.width / slide.height > 1 && $W.width() / $W.height() > 1 ? \"100\" : Math.round((slide.width / slide.height) * 100)) +\r\n \"vw\";\r\n }\r\n\r\n $img.attr(\"sizes\", sizes).attr(\"srcset\", slide.opts.srcset);\r\n }\r\n\r\n // Hide temporary image after some delay\r\n if (slide.$ghost) {\r\n setTimeout(function () {\r\n if (slide.$ghost && !self.isClosing) {\r\n slide.$ghost.hide();\r\n }\r\n }, Math.min(300, Math.max(1000, slide.height / 1600)));\r\n }\r\n\r\n self.hideLoading(slide);\r\n })\r\n .addClass(\"fancybox-image\")\r\n .attr(\"src\", slide.src)\r\n .appendTo(slide.$content);\r\n\r\n if ((img.complete || img.readyState == \"complete\") && $img.naturalWidth && $img.naturalHeight) {\r\n $img.trigger(\"load\");\r\n } else if (img.error) {\r\n $img.trigger(\"error\");\r\n }\r\n },\r\n\r\n // Computes the slide size from image size and maxWidth/maxHeight\r\n // ==============================================================\r\n\r\n resolveImageSlideSize: function (slide, imgWidth, imgHeight) {\r\n var maxWidth = parseInt(slide.opts.width, 10),\r\n maxHeight = parseInt(slide.opts.height, 10);\r\n\r\n // Sets the default values from the image\r\n slide.width = imgWidth;\r\n slide.height = imgHeight;\r\n\r\n if (maxWidth > 0) {\r\n slide.width = maxWidth;\r\n slide.height = Math.floor((maxWidth * imgHeight) / imgWidth);\r\n }\r\n\r\n if (maxHeight > 0) {\r\n slide.width = Math.floor((maxHeight * imgWidth) / imgHeight);\r\n slide.height = maxHeight;\r\n }\r\n },\r\n\r\n // Create iframe wrapper, iframe and bindings\r\n // ==========================================\r\n\r\n setIframe: function (slide) {\r\n var self = this,\r\n opts = slide.opts.iframe,\r\n $slide = slide.$slide,\r\n $iframe;\r\n\r\n slide.$content = $('
')\r\n .css(opts.css)\r\n .appendTo($slide);\r\n\r\n $slide.addClass(\"fancybox-slide--\" + slide.contentType);\r\n\r\n slide.$iframe = $iframe = $(opts.tpl.replace(/\\{rnd\\}/g, new Date().getTime()))\r\n .attr(opts.attr)\r\n .appendTo(slide.$content);\r\n\r\n if (opts.preload) {\r\n self.showLoading(slide);\r\n\r\n // Unfortunately, it is not always possible to determine if iframe is successfully loaded\r\n // (due to browser security policy)\r\n\r\n $iframe.on(\"load.fb error.fb\", function (e) {\r\n this.isReady = 1;\r\n\r\n slide.$slide.trigger(\"refresh\");\r\n\r\n self.afterLoad(slide);\r\n });\r\n\r\n // Recalculate iframe content size\r\n // ===============================\r\n\r\n $slide.on(\"refresh.fb\", function () {\r\n var $content = slide.$content,\r\n frameWidth = opts.css.width,\r\n frameHeight = opts.css.height,\r\n $contents,\r\n $body;\r\n\r\n if ($iframe[0].isReady !== 1) {\r\n return;\r\n }\r\n\r\n try {\r\n $contents = $iframe.contents();\r\n $body = $contents.find(\"body\");\r\n } catch (ignore) {}\r\n\r\n // Calculate content dimensions, if it is accessible\r\n if ($body && $body.length && $body.children().length) {\r\n // Avoid scrolling to top (if multiple instances)\r\n $slide.css(\"overflow\", \"visible\");\r\n\r\n $content.css({\r\n width: \"100%\",\r\n \"max-width\": \"100%\",\r\n height: \"9999px\"\r\n });\r\n\r\n if (frameWidth === undefined) {\r\n frameWidth = Math.ceil(Math.max($body[0].clientWidth, $body.outerWidth(true)));\r\n }\r\n\r\n $content.css(\"width\", frameWidth ? frameWidth : \"\").css(\"max-width\", \"\");\r\n\r\n if (frameHeight === undefined) {\r\n frameHeight = Math.ceil(Math.max($body[0].clientHeight, $body.outerHeight(true)));\r\n }\r\n\r\n $content.css(\"height\", frameHeight ? frameHeight : \"\");\r\n\r\n $slide.css(\"overflow\", \"auto\");\r\n }\r\n\r\n $content.removeClass(\"fancybox-is-hidden\");\r\n });\r\n } else {\r\n self.afterLoad(slide);\r\n }\r\n\r\n $iframe.attr(\"src\", slide.src);\r\n\r\n // Remove iframe if closing or changing gallery item\r\n $slide.one(\"onReset\", function () {\r\n // This helps IE not to throw errors when closing\r\n try {\r\n $(this)\r\n .find(\"iframe\")\r\n .hide()\r\n .unbind()\r\n .attr(\"src\", \"//about:blank\");\r\n } catch (ignore) {}\r\n\r\n $(this)\r\n .off(\"refresh.fb\")\r\n .empty();\r\n\r\n slide.isLoaded = false;\r\n slide.isRevealed = false;\r\n });\r\n },\r\n\r\n // Wrap and append content to the slide\r\n // ======================================\r\n\r\n setContent: function (slide, content) {\r\n var self = this;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n self.hideLoading(slide);\r\n\r\n if (slide.$content) {\r\n $.fancybox.stop(slide.$content);\r\n }\r\n\r\n slide.$slide.empty();\r\n\r\n // If content is a jQuery object, then it will be moved to the slide.\r\n // The placeholder is created so we will know where to put it back.\r\n if (isQuery(content) && content.parent().length) {\r\n // Make sure content is not already moved to fancyBox\r\n if (content.hasClass(\"fancybox-content\") || content.parent().hasClass(\"fancybox-content\")) {\r\n content.parents(\".fancybox-slide\").trigger(\"onReset\");\r\n }\r\n\r\n // Create temporary element marking original place of the content\r\n slide.$placeholder = $(\"
\")\r\n .hide()\r\n .insertAfter(content);\r\n\r\n // Make sure content is visible\r\n content.css(\"display\", \"inline-block\");\r\n } else if (!slide.hasError) {\r\n // If content is just a plain text, try to convert it to html\r\n if ($.type(content) === \"string\") {\r\n content = $(\"
\")\r\n .append($.trim(content))\r\n .contents();\r\n }\r\n\r\n // If \"filter\" option is provided, then filter content\r\n if (slide.opts.filter) {\r\n content = $(\"
\")\r\n .html(content)\r\n .find(slide.opts.filter);\r\n }\r\n }\r\n\r\n slide.$slide.one(\"onReset\", function () {\r\n // Pause all html5 video/audio\r\n $(this)\r\n .find(\"video,audio\")\r\n .trigger(\"pause\");\r\n\r\n // Put content back\r\n if (slide.$placeholder) {\r\n slide.$placeholder.after(content.removeClass(\"fancybox-content\").hide()).remove();\r\n\r\n slide.$placeholder = null;\r\n }\r\n\r\n // Remove custom close button\r\n if (slide.$smallBtn) {\r\n slide.$smallBtn.remove();\r\n\r\n slide.$smallBtn = null;\r\n }\r\n\r\n // Remove content and mark slide as not loaded\r\n if (!slide.hasError) {\r\n $(this).empty();\r\n\r\n slide.isLoaded = false;\r\n slide.isRevealed = false;\r\n }\r\n });\r\n\r\n $(content).appendTo(slide.$slide);\r\n\r\n if ($(content).is(\"video,audio\")) {\r\n $(content).addClass(\"fancybox-video\");\r\n\r\n $(content).wrap(\"
\");\r\n\r\n slide.contentType = \"video\";\r\n\r\n slide.opts.width = slide.opts.width || $(content).attr(\"width\");\r\n slide.opts.height = slide.opts.height || $(content).attr(\"height\");\r\n }\r\n\r\n slide.$content = slide.$slide\r\n .children()\r\n .filter(\"div,form,main,video,audio,article,.fancybox-content\")\r\n .first();\r\n\r\n slide.$content.siblings().hide();\r\n\r\n // Re-check if there is a valid content\r\n // (in some cases, ajax response can contain various elements or plain text)\r\n if (!slide.$content.length) {\r\n slide.$content = slide.$slide\r\n .wrapInner(\"
\")\r\n .children()\r\n .first();\r\n }\r\n\r\n slide.$content.addClass(\"fancybox-content\");\r\n\r\n slide.$slide.addClass(\"fancybox-slide--\" + slide.contentType);\r\n\r\n self.afterLoad(slide);\r\n },\r\n\r\n // Display error message\r\n // =====================\r\n\r\n setError: function (slide) {\r\n slide.hasError = true;\r\n\r\n slide.$slide\r\n .trigger(\"onReset\")\r\n .removeClass(\"fancybox-slide--\" + slide.contentType)\r\n .addClass(\"fancybox-slide--error\");\r\n\r\n slide.contentType = \"html\";\r\n\r\n this.setContent(slide, this.translate(slide, slide.opts.errorTpl));\r\n\r\n if (slide.pos === this.currPos) {\r\n this.isAnimating = false;\r\n }\r\n },\r\n\r\n // Show loading icon inside the slide\r\n // ==================================\r\n\r\n showLoading: function (slide) {\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if (slide && !slide.$spinner) {\r\n slide.$spinner = $(self.translate(self, self.opts.spinnerTpl))\r\n .appendTo(slide.$slide)\r\n .hide()\r\n .fadeIn(\"fast\");\r\n }\r\n },\r\n\r\n // Remove loading icon from the slide\r\n // ==================================\r\n\r\n hideLoading: function (slide) {\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if (slide && slide.$spinner) {\r\n slide.$spinner.stop().remove();\r\n\r\n delete slide.$spinner;\r\n }\r\n },\r\n\r\n // Adjustments after slide content has been loaded\r\n // ===============================================\r\n\r\n afterLoad: function (slide) {\r\n var self = this;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n slide.isLoading = false;\r\n slide.isLoaded = true;\r\n\r\n self.trigger(\"afterLoad\", slide);\r\n\r\n self.hideLoading(slide);\r\n\r\n // Add small close button\r\n if (slide.opts.smallBtn && (!slide.$smallBtn || !slide.$smallBtn.length)) {\r\n slide.$smallBtn = $(self.translate(slide, slide.opts.btnTpl.smallBtn)).appendTo(slide.$content);\r\n }\r\n\r\n // Disable right click\r\n if (slide.opts.protect && slide.$content && !slide.hasError) {\r\n slide.$content.on(\"contextmenu.fb\", function (e) {\r\n if (e.button == 2) {\r\n e.preventDefault();\r\n }\r\n\r\n return true;\r\n });\r\n\r\n // Add fake element on top of the image\r\n // This makes a bit harder for user to select image\r\n if (slide.type === \"image\") {\r\n $('
').appendTo(slide.$content);\r\n }\r\n }\r\n\r\n self.adjustCaption(slide);\r\n\r\n self.adjustLayout(slide);\r\n\r\n if (slide.pos === self.currPos) {\r\n self.updateCursor();\r\n }\r\n\r\n self.revealContent(slide);\r\n },\r\n\r\n // Prevent caption overlap,\r\n // fix css inconsistency across browsers\r\n // =====================================\r\n\r\n adjustCaption: function (slide) {\r\n var self = this,\r\n current = slide || self.current,\r\n caption = current.opts.caption,\r\n preventOverlap = current.opts.preventCaptionOverlap,\r\n $caption = self.$refs.caption,\r\n $clone,\r\n captionH = false;\r\n\r\n $caption.toggleClass(\"fancybox-caption--separate\", preventOverlap);\r\n\r\n if (preventOverlap && caption && caption.length) {\r\n if (current.pos !== self.currPos) {\r\n $clone = $caption.clone().appendTo($caption.parent());\r\n\r\n $clone\r\n .children()\r\n .eq(0)\r\n .empty()\r\n .html(caption);\r\n\r\n captionH = $clone.outerHeight(true);\r\n\r\n $clone.empty().remove();\r\n } else if (self.$caption) {\r\n captionH = self.$caption.outerHeight(true);\r\n }\r\n\r\n current.$slide.css(\"padding-bottom\", captionH || \"\");\r\n }\r\n },\r\n\r\n // Simple hack to fix inconsistency across browsers, described here (affects Edge, too):\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=748518\r\n // ====================================================================================\r\n\r\n adjustLayout: function (slide) {\r\n var self = this,\r\n current = slide || self.current,\r\n scrollHeight,\r\n marginBottom,\r\n inlinePadding,\r\n actualPadding;\r\n\r\n if (current.isLoaded && current.opts.disableLayoutFix !== true) {\r\n current.$content.css(\"margin-bottom\", \"\");\r\n\r\n // If we would always set margin-bottom for the content,\r\n // then it would potentially break vertical align\r\n if (current.$content.outerHeight() > current.$slide.height() + 0.5) {\r\n inlinePadding = current.$slide[0].style[\"padding-bottom\"];\r\n actualPadding = current.$slide.css(\"padding-bottom\");\r\n\r\n if (parseFloat(actualPadding) > 0) {\r\n scrollHeight = current.$slide[0].scrollHeight;\r\n\r\n current.$slide.css(\"padding-bottom\", 0);\r\n\r\n if (Math.abs(scrollHeight - current.$slide[0].scrollHeight) < 1) {\r\n marginBottom = actualPadding;\r\n }\r\n\r\n current.$slide.css(\"padding-bottom\", inlinePadding);\r\n }\r\n }\r\n\r\n current.$content.css(\"margin-bottom\", marginBottom);\r\n }\r\n },\r\n\r\n // Make content visible\r\n // This method is called right after content has been loaded or\r\n // user navigates gallery and transition should start\r\n // ============================================================\r\n\r\n revealContent: function (slide) {\r\n var self = this,\r\n $slide = slide.$slide,\r\n end = false,\r\n start = false,\r\n isMoved = self.isMoved(slide),\r\n isRevealed = slide.isRevealed,\r\n effect,\r\n effectClassName,\r\n duration,\r\n opacity;\r\n\r\n slide.isRevealed = true;\r\n\r\n effect = slide.opts[self.firstRun ? \"animationEffect\" : \"transitionEffect\"];\r\n duration = slide.opts[self.firstRun ? \"animationDuration\" : \"transitionDuration\"];\r\n\r\n duration = parseInt(slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10);\r\n\r\n if (isMoved || slide.pos !== self.currPos || !duration) {\r\n effect = false;\r\n }\r\n\r\n // Check if can zoom\r\n if (effect === \"zoom\") {\r\n if (slide.pos === self.currPos && duration && slide.type === \"image\" && !slide.hasError && (start = self.getThumbPos(slide))) {\r\n end = self.getFitPos(slide);\r\n } else {\r\n effect = \"fade\";\r\n }\r\n }\r\n\r\n // Zoom animation\r\n // ==============\r\n if (effect === \"zoom\") {\r\n self.isAnimating = true;\r\n\r\n end.scaleX = end.width / start.width;\r\n end.scaleY = end.height / start.height;\r\n\r\n // Check if we need to animate opacity\r\n opacity = slide.opts.zoomOpacity;\r\n\r\n if (opacity == \"auto\") {\r\n opacity = Math.abs(slide.width / slide.height - start.width / start.height) > 0.1;\r\n }\r\n\r\n if (opacity) {\r\n start.opacity = 0.1;\r\n end.opacity = 1;\r\n }\r\n\r\n // Draw image at start position\r\n $.fancybox.setTranslate(slide.$content.removeClass(\"fancybox-is-hidden\"), start);\r\n\r\n forceRedraw(slide.$content);\r\n\r\n // Start animation\r\n $.fancybox.animate(slide.$content, end, duration, function () {\r\n self.isAnimating = false;\r\n\r\n self.complete();\r\n });\r\n\r\n return;\r\n }\r\n\r\n self.updateSlide(slide);\r\n\r\n // Simply show content if no effect\r\n // ================================\r\n if (!effect) {\r\n slide.$content.removeClass(\"fancybox-is-hidden\");\r\n\r\n if (!isRevealed && isMoved && slide.type === \"image\" && !slide.hasError) {\r\n slide.$content.hide().fadeIn(\"fast\");\r\n }\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Prepare for CSS transiton\r\n // =========================\r\n $.fancybox.stop($slide);\r\n\r\n //effectClassName = \"fancybox-animated fancybox-slide--\" + (slide.pos >= self.prevPos ? \"next\" : \"previous\") + \" fancybox-fx-\" + effect;\r\n effectClassName = \"fancybox-slide--\" + (slide.pos >= self.prevPos ? \"next\" : \"previous\") + \" fancybox-animated fancybox-fx-\" + effect;\r\n\r\n $slide.addClass(effectClassName).removeClass(\"fancybox-slide--current\"); //.addClass(effectClassName);\r\n\r\n slide.$content.removeClass(\"fancybox-is-hidden\");\r\n\r\n // Force reflow\r\n forceRedraw($slide);\r\n\r\n if (slide.type !== \"image\") {\r\n slide.$content.hide().show(0);\r\n }\r\n\r\n $.fancybox.animate(\r\n $slide,\r\n \"fancybox-slide--current\",\r\n duration,\r\n function () {\r\n $slide.removeClass(effectClassName).css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n },\r\n true\r\n );\r\n },\r\n\r\n // Check if we can and have to zoom from thumbnail\r\n //================================================\r\n\r\n getThumbPos: function (slide) {\r\n var rez = false,\r\n $thumb = slide.$thumb,\r\n thumbPos,\r\n btw,\r\n brw,\r\n bbw,\r\n blw;\r\n\r\n if (!$thumb || !inViewport($thumb[0])) {\r\n return false;\r\n }\r\n\r\n thumbPos = $.fancybox.getTranslate($thumb);\r\n\r\n btw = parseFloat($thumb.css(\"border-top-width\") || 0);\r\n brw = parseFloat($thumb.css(\"border-right-width\") || 0);\r\n bbw = parseFloat($thumb.css(\"border-bottom-width\") || 0);\r\n blw = parseFloat($thumb.css(\"border-left-width\") || 0);\r\n\r\n rez = {\r\n top: thumbPos.top + btw,\r\n left: thumbPos.left + blw,\r\n width: thumbPos.width - brw - blw,\r\n height: thumbPos.height - btw - bbw,\r\n scaleX: 1,\r\n scaleY: 1\r\n };\r\n\r\n return thumbPos.width > 0 && thumbPos.height > 0 ? rez : false;\r\n },\r\n\r\n // Final adjustments after current gallery item is moved to position\r\n // and it`s content is loaded\r\n // ==================================================================\r\n\r\n complete: function () {\r\n var self = this,\r\n current = self.current,\r\n slides = {},\r\n $el;\r\n\r\n if (self.isMoved() || !current.isLoaded) {\r\n return;\r\n }\r\n\r\n if (!current.isComplete) {\r\n current.isComplete = true;\r\n\r\n current.$slide.siblings().trigger(\"onReset\");\r\n\r\n self.preload(\"inline\");\r\n\r\n // Trigger any CSS transiton inside the slide\r\n forceRedraw(current.$slide);\r\n\r\n current.$slide.addClass(\"fancybox-slide--complete\");\r\n\r\n // Remove unnecessary slides\r\n $.each(self.slides, function (key, slide) {\r\n if (slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1) {\r\n slides[slide.pos] = slide;\r\n } else if (slide) {\r\n $.fancybox.stop(slide.$slide);\r\n\r\n slide.$slide.off().remove();\r\n }\r\n });\r\n\r\n self.slides = slides;\r\n }\r\n\r\n self.isAnimating = false;\r\n\r\n self.updateCursor();\r\n\r\n self.trigger(\"afterShow\");\r\n\r\n // Autoplay first html5 video/audio\r\n if (!!current.opts.video.autoStart) {\r\n current.$slide\r\n .find(\"video,audio\")\r\n .filter(\":visible:first\")\r\n .trigger(\"play\")\r\n .one(\"ended\", function () {\r\n if (Document.exitFullscreen) {\r\n Document.exitFullscreen();\r\n } else if (this.webkitExitFullscreen) {\r\n this.webkitExitFullscreen();\r\n }\r\n\r\n self.next();\r\n });\r\n }\r\n\r\n // Try to focus on the first focusable element\r\n if (current.opts.autoFocus && current.contentType === \"html\") {\r\n // Look for the first input with autofocus attribute\r\n $el = current.$content.find(\"input[autofocus]:enabled:visible:first\");\r\n\r\n if ($el.length) {\r\n $el.trigger(\"focus\");\r\n } else {\r\n self.focus(null, true);\r\n }\r\n }\r\n\r\n // Avoid jumping\r\n current.$slide.scrollTop(0).scrollLeft(0);\r\n },\r\n\r\n // Preload next and previous slides\r\n // ================================\r\n\r\n preload: function (type) {\r\n var self = this,\r\n prev,\r\n next;\r\n\r\n if (self.group.length < 2) {\r\n return;\r\n }\r\n\r\n next = self.slides[self.currPos + 1];\r\n prev = self.slides[self.currPos - 1];\r\n\r\n if (prev && prev.type === type) {\r\n self.loadSlide(prev);\r\n }\r\n\r\n if (next && next.type === type) {\r\n self.loadSlide(next);\r\n }\r\n },\r\n\r\n // Try to find and focus on the first focusable element\r\n // ====================================================\r\n\r\n focus: function (e, firstRun) {\r\n var self = this,\r\n focusableStr = [\r\n \"a[href]\",\r\n \"area[href]\",\r\n 'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\r\n \"select:not([disabled]):not([aria-hidden])\",\r\n \"textarea:not([disabled]):not([aria-hidden])\",\r\n \"button:not([disabled]):not([aria-hidden])\",\r\n \"iframe\",\r\n \"object\",\r\n \"embed\",\r\n \"video\",\r\n \"audio\",\r\n \"[contenteditable]\",\r\n '[tabindex]:not([tabindex^=\"-\"])'\r\n ].join(\",\"),\r\n focusableItems,\r\n focusedItemIndex;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n if (e || !self.current || !self.current.isComplete) {\r\n // Focus on any element inside fancybox\r\n focusableItems = self.$refs.container.find(\"*:visible\");\r\n } else {\r\n // Focus inside current slide\r\n focusableItems = self.current.$slide.find(\"*:visible\" + (firstRun ? \":not(.fancybox-close-small)\" : \"\"));\r\n }\r\n\r\n focusableItems = focusableItems.filter(focusableStr).filter(function () {\r\n return $(this).css(\"visibility\") !== \"hidden\" && !$(this).hasClass(\"disabled\");\r\n });\r\n\r\n if (focusableItems.length) {\r\n focusedItemIndex = focusableItems.index(document.activeElement);\r\n\r\n if (e && e.shiftKey) {\r\n // Back tab\r\n if (focusedItemIndex < 0 || focusedItemIndex == 0) {\r\n e.preventDefault();\r\n\r\n focusableItems.eq(focusableItems.length - 1).trigger(\"focus\");\r\n }\r\n } else {\r\n // Outside or Forward tab\r\n if (focusedItemIndex < 0 || focusedItemIndex == focusableItems.length - 1) {\r\n if (e) {\r\n e.preventDefault();\r\n }\r\n\r\n focusableItems.eq(0).trigger(\"focus\");\r\n }\r\n }\r\n } else {\r\n self.$refs.container.trigger(\"focus\");\r\n }\r\n },\r\n\r\n // Activates current instance - brings container to the front and enables keyboard,\r\n // notifies other instances about deactivating\r\n // =================================================================================\r\n\r\n activate: function () {\r\n var self = this;\r\n\r\n // Deactivate all instances\r\n $(\".fancybox-container\").each(function () {\r\n var instance = $(this).data(\"FancyBox\");\r\n\r\n // Skip self and closing instances\r\n if (instance && instance.id !== self.id && !instance.isClosing) {\r\n instance.trigger(\"onDeactivate\");\r\n\r\n instance.removeEvents();\r\n\r\n instance.isVisible = false;\r\n }\r\n });\r\n\r\n self.isVisible = true;\r\n\r\n if (self.current || self.isIdle) {\r\n self.update();\r\n\r\n self.updateControls();\r\n }\r\n\r\n self.trigger(\"onActivate\");\r\n\r\n self.addEvents();\r\n },\r\n\r\n // Start closing procedure\r\n // This will start \"zoom-out\" animation if needed and clean everything up afterwards\r\n // =================================================================================\r\n\r\n close: function (e, d) {\r\n var self = this,\r\n current = self.current,\r\n effect,\r\n duration,\r\n $content,\r\n domRect,\r\n opacity,\r\n start,\r\n end;\r\n\r\n var done = function () {\r\n self.cleanUp(e);\r\n };\r\n\r\n if (self.isClosing) {\r\n return false;\r\n }\r\n\r\n self.isClosing = true;\r\n\r\n // If beforeClose callback prevents closing, make sure content is centered\r\n if (self.trigger(\"beforeClose\", e) === false) {\r\n self.isClosing = false;\r\n\r\n requestAFrame(function () {\r\n self.update();\r\n });\r\n\r\n return false;\r\n }\r\n\r\n // Remove all events\r\n // If there are multiple instances, they will be set again by \"activate\" method\r\n self.removeEvents();\r\n\r\n $content = current.$content;\r\n effect = current.opts.animationEffect;\r\n duration = $.isNumeric(d) ? d : effect ? current.opts.animationDuration : 0;\r\n\r\n current.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated\");\r\n\r\n if (e !== true) {\r\n $.fancybox.stop(current.$slide);\r\n } else {\r\n effect = false;\r\n }\r\n\r\n // Remove other slides\r\n current.$slide\r\n .siblings()\r\n .trigger(\"onReset\")\r\n .remove();\r\n\r\n // Trigger animations\r\n if (duration) {\r\n self.$refs.container\r\n .removeClass(\"fancybox-is-open\")\r\n .addClass(\"fancybox-is-closing\")\r\n .css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n // Clean up\r\n self.hideLoading(current);\r\n\r\n self.hideControls(true);\r\n\r\n self.updateCursor();\r\n\r\n // Check if possible to zoom-out\r\n if (\r\n effect === \"zoom\" &&\r\n !($content && duration && current.type === \"image\" && !self.isMoved() && !current.hasError && (end = self.getThumbPos(current)))\r\n ) {\r\n effect = \"fade\";\r\n }\r\n\r\n if (effect === \"zoom\") {\r\n $.fancybox.stop($content);\r\n\r\n domRect = $.fancybox.getTranslate($content);\r\n\r\n start = {\r\n top: domRect.top,\r\n left: domRect.left,\r\n scaleX: domRect.width / end.width,\r\n scaleY: domRect.height / end.height,\r\n width: end.width,\r\n height: end.height\r\n };\r\n\r\n // Check if we need to animate opacity\r\n opacity = current.opts.zoomOpacity;\r\n\r\n if (opacity == \"auto\") {\r\n opacity = Math.abs(current.width / current.height - end.width / end.height) > 0.1;\r\n }\r\n\r\n if (opacity) {\r\n end.opacity = 0;\r\n }\r\n\r\n $.fancybox.setTranslate($content, start);\r\n\r\n forceRedraw($content);\r\n\r\n $.fancybox.animate($content, end, duration, done);\r\n\r\n return true;\r\n }\r\n\r\n if (effect && duration) {\r\n $.fancybox.animate(\r\n current.$slide.addClass(\"fancybox-slide--previous\").removeClass(\"fancybox-slide--current\"),\r\n \"fancybox-animated fancybox-fx-\" + effect,\r\n duration,\r\n done\r\n );\r\n } else {\r\n // If skip animation\r\n if (e === true) {\r\n setTimeout(done, duration);\r\n } else {\r\n done();\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n // Final adjustments after removing the instance\r\n // =============================================\r\n\r\n cleanUp: function (e) {\r\n var self = this,\r\n instance,\r\n $focus = self.current.opts.$orig,\r\n x,\r\n y;\r\n\r\n self.current.$slide.trigger(\"onReset\");\r\n\r\n self.$refs.container.empty().remove();\r\n\r\n self.trigger(\"afterClose\", e);\r\n\r\n // Place back focus\r\n if (!!self.current.opts.backFocus) {\r\n if (!$focus || !$focus.length || !$focus.is(\":visible\")) {\r\n $focus = self.$trigger;\r\n }\r\n\r\n if ($focus && $focus.length) {\r\n x = window.scrollX;\r\n y = window.scrollY;\r\n\r\n $focus.trigger(\"focus\");\r\n\r\n $(\"html, body\")\r\n .scrollTop(y)\r\n .scrollLeft(x);\r\n }\r\n }\r\n\r\n self.current = null;\r\n\r\n // Check if there are other instances\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n instance.activate();\r\n } else {\r\n $(\"body\").removeClass(\"fancybox-active compensate-for-scrollbar\");\r\n\r\n $(\"#fancybox-style-noscroll\").remove();\r\n }\r\n },\r\n\r\n // Call callback and trigger an event\r\n // ==================================\r\n\r\n trigger: function (name, slide) {\r\n var args = Array.prototype.slice.call(arguments, 1),\r\n self = this,\r\n obj = slide && slide.opts ? slide : self.current,\r\n rez;\r\n\r\n if (obj) {\r\n args.unshift(obj);\r\n } else {\r\n obj = self;\r\n }\r\n\r\n args.unshift(self);\r\n\r\n if ($.isFunction(obj.opts[name])) {\r\n rez = obj.opts[name].apply(obj, args);\r\n }\r\n\r\n if (rez === false) {\r\n return rez;\r\n }\r\n\r\n if (name === \"afterClose\" || !self.$refs) {\r\n $D.trigger(name + \".fb\", args);\r\n } else {\r\n self.$refs.container.trigger(name + \".fb\", args);\r\n }\r\n },\r\n\r\n // Update infobar values, navigation button states and reveal caption\r\n // ==================================================================\r\n\r\n updateControls: function () {\r\n var self = this,\r\n current = self.current,\r\n index = current.index,\r\n $container = self.$refs.container,\r\n $caption = self.$refs.caption,\r\n caption = current.opts.caption;\r\n\r\n // Recalculate content dimensions\r\n current.$slide.trigger(\"refresh\");\r\n\r\n // Set caption\r\n if (caption && caption.length) {\r\n self.$caption = $caption;\r\n\r\n $caption\r\n .children()\r\n .eq(0)\r\n .html(caption);\r\n } else {\r\n self.$caption = null;\r\n }\r\n\r\n if (!self.hasHiddenControls && !self.isIdle) {\r\n self.showControls();\r\n }\r\n\r\n // Update info and navigation elements\r\n $container.find(\"[data-fancybox-count]\").html(self.group.length);\r\n $container.find(\"[data-fancybox-index]\").html(index + 1);\r\n\r\n $container.find(\"[data-fancybox-prev]\").prop(\"disabled\", !current.opts.loop && index <= 0);\r\n $container.find(\"[data-fancybox-next]\").prop(\"disabled\", !current.opts.loop && index >= self.group.length - 1);\r\n\r\n if (current.type === \"image\") {\r\n // Re-enable buttons; update download button source\r\n $container\r\n .find(\"[data-fancybox-zoom]\")\r\n .show()\r\n .end()\r\n .find(\"[data-fancybox-download]\")\r\n .attr(\"href\", current.opts.image.src || current.src)\r\n .show();\r\n } else if (current.opts.toolbar) {\r\n $container.find(\"[data-fancybox-download],[data-fancybox-zoom]\").hide();\r\n }\r\n\r\n // Make sure focus is not on disabled button/element\r\n if ($(document.activeElement).is(\":hidden,[disabled]\")) {\r\n self.$refs.container.trigger(\"focus\");\r\n }\r\n },\r\n\r\n // Hide toolbar and caption\r\n // ========================\r\n\r\n hideControls: function (andCaption) {\r\n var self = this,\r\n arr = [\"infobar\", \"toolbar\", \"nav\"];\r\n\r\n if (andCaption || !self.current.opts.preventCaptionOverlap) {\r\n arr.push(\"caption\");\r\n }\r\n\r\n this.$refs.container.removeClass(\r\n arr\r\n .map(function (i) {\r\n return \"fancybox-show-\" + i;\r\n })\r\n .join(\" \")\r\n );\r\n\r\n this.hasHiddenControls = true;\r\n },\r\n\r\n showControls: function () {\r\n var self = this,\r\n opts = self.current ? self.current.opts : self.opts,\r\n $container = self.$refs.container;\r\n\r\n self.hasHiddenControls = false;\r\n self.idleSecondsCounter = 0;\r\n\r\n $container\r\n .toggleClass(\"fancybox-show-toolbar\", !!(opts.toolbar && opts.buttons))\r\n .toggleClass(\"fancybox-show-infobar\", !!(opts.infobar && self.group.length > 1))\r\n .toggleClass(\"fancybox-show-caption\", !!self.$caption)\r\n .toggleClass(\"fancybox-show-nav\", !!(opts.arrows && self.group.length > 1))\r\n .toggleClass(\"fancybox-is-modal\", !!opts.modal);\r\n },\r\n\r\n // Toggle toolbar and caption\r\n // ==========================\r\n\r\n toggleControls: function () {\r\n if (this.hasHiddenControls) {\r\n this.showControls();\r\n } else {\r\n this.hideControls();\r\n }\r\n }\r\n });\r\n\r\n $.fancybox = {\r\n version: \"3.5.7\",\r\n defaults: defaults,\r\n\r\n // Get current instance and execute a command.\r\n //\r\n // Examples of usage:\r\n //\r\n // $instance = $.fancybox.getInstance();\r\n // $.fancybox.getInstance().jumpTo( 1 );\r\n // $.fancybox.getInstance( 'jumpTo', 1 );\r\n // $.fancybox.getInstance( function() {\r\n // console.info( this.currIndex );\r\n // });\r\n // ======================================================\r\n\r\n getInstance: function (command) {\r\n var instance = $('.fancybox-container:not(\".fancybox-is-closing\"):last').data(\"FancyBox\"),\r\n args = Array.prototype.slice.call(arguments, 1);\r\n\r\n if (instance instanceof FancyBox) {\r\n if ($.type(command) === \"string\") {\r\n instance[command].apply(instance, args);\r\n } else if ($.type(command) === \"function\") {\r\n command.apply(instance, args);\r\n }\r\n\r\n return instance;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n // Create new instance\r\n // ===================\r\n\r\n open: function (items, opts, index) {\r\n return new FancyBox(items, opts, index);\r\n },\r\n\r\n // Close current or all instances\r\n // ==============================\r\n\r\n close: function (all) {\r\n var instance = this.getInstance();\r\n\r\n if (instance) {\r\n instance.close();\r\n\r\n // Try to find and close next instance\r\n if (all === true) {\r\n this.close(all);\r\n }\r\n }\r\n },\r\n\r\n // Close all instances and unbind all events\r\n // =========================================\r\n\r\n destroy: function () {\r\n this.close(true);\r\n\r\n $D.add(\"body\").off(\"click.fb-start\", \"**\");\r\n },\r\n\r\n // Try to detect mobile devices\r\n // ============================\r\n\r\n isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\r\n\r\n // Detect if 'translate3d' support is available\r\n // ============================================\r\n\r\n use3d: (function () {\r\n var div = document.createElement(\"div\");\r\n\r\n return (\r\n window.getComputedStyle &&\r\n window.getComputedStyle(div) &&\r\n window.getComputedStyle(div).getPropertyValue(\"transform\") &&\r\n !(document.documentMode && document.documentMode < 11)\r\n );\r\n })(),\r\n\r\n // Helper function to get current visual state of an element\r\n // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]\r\n // =====================================================================\r\n\r\n getTranslate: function ($el) {\r\n var domRect;\r\n\r\n if (!$el || !$el.length) {\r\n return false;\r\n }\r\n\r\n domRect = $el[0].getBoundingClientRect();\r\n\r\n return {\r\n top: domRect.top || 0,\r\n left: domRect.left || 0,\r\n width: domRect.width,\r\n height: domRect.height,\r\n opacity: parseFloat($el.css(\"opacity\"))\r\n };\r\n },\r\n\r\n // Shortcut for setting \"translate3d\" properties for element\r\n // Can set be used to set opacity, too\r\n // ========================================================\r\n\r\n setTranslate: function ($el, props) {\r\n var str = \"\",\r\n css = {};\r\n\r\n if (!$el || !props) {\r\n return;\r\n }\r\n\r\n if (props.left !== undefined || props.top !== undefined) {\r\n str =\r\n (props.left === undefined ? $el.position().left : props.left) +\r\n \"px, \" +\r\n (props.top === undefined ? $el.position().top : props.top) +\r\n \"px\";\r\n\r\n if (this.use3d) {\r\n str = \"translate3d(\" + str + \", 0px)\";\r\n } else {\r\n str = \"translate(\" + str + \")\";\r\n }\r\n }\r\n\r\n if (props.scaleX !== undefined && props.scaleY !== undefined) {\r\n str += \" scale(\" + props.scaleX + \", \" + props.scaleY + \")\";\r\n } else if (props.scaleX !== undefined) {\r\n str += \" scaleX(\" + props.scaleX + \")\";\r\n }\r\n\r\n if (str.length) {\r\n css.transform = str;\r\n }\r\n\r\n if (props.opacity !== undefined) {\r\n css.opacity = props.opacity;\r\n }\r\n\r\n if (props.width !== undefined) {\r\n css.width = props.width;\r\n }\r\n\r\n if (props.height !== undefined) {\r\n css.height = props.height;\r\n }\r\n\r\n return $el.css(css);\r\n },\r\n\r\n // Simple CSS transition handler\r\n // =============================\r\n\r\n animate: function ($el, to, duration, callback, leaveAnimationName) {\r\n var self = this,\r\n from;\r\n\r\n if ($.isFunction(duration)) {\r\n callback = duration;\r\n duration = null;\r\n }\r\n\r\n self.stop($el);\r\n\r\n from = self.getTranslate($el);\r\n\r\n $el.on(transitionEnd, function (e) {\r\n // Skip events from child elements and z-index change\r\n if (e && e.originalEvent && (!$el.is(e.originalEvent.target) || e.originalEvent.propertyName == \"z-index\")) {\r\n return;\r\n }\r\n\r\n self.stop($el);\r\n\r\n if ($.isNumeric(duration)) {\r\n $el.css(\"transition-duration\", \"\");\r\n }\r\n\r\n if ($.isPlainObject(to)) {\r\n if (to.scaleX !== undefined && to.scaleY !== undefined) {\r\n self.setTranslate($el, {\r\n top: to.top,\r\n left: to.left,\r\n width: from.width * to.scaleX,\r\n height: from.height * to.scaleY,\r\n scaleX: 1,\r\n scaleY: 1\r\n });\r\n }\r\n } else if (leaveAnimationName !== true) {\r\n $el.removeClass(to);\r\n }\r\n\r\n if ($.isFunction(callback)) {\r\n callback(e);\r\n }\r\n });\r\n\r\n if ($.isNumeric(duration)) {\r\n $el.css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n // Start animation by changing CSS properties or class name\r\n if ($.isPlainObject(to)) {\r\n if (to.scaleX !== undefined && to.scaleY !== undefined) {\r\n delete to.width;\r\n delete to.height;\r\n\r\n if ($el.parent().hasClass(\"fancybox-slide--image\")) {\r\n $el.parent().addClass(\"fancybox-is-scaling\");\r\n }\r\n }\r\n\r\n $.fancybox.setTranslate($el, to);\r\n } else {\r\n $el.addClass(to);\r\n }\r\n\r\n // Make sure that `transitionend` callback gets fired\r\n $el.data(\r\n \"timer\",\r\n setTimeout(function () {\r\n $el.trigger(transitionEnd);\r\n }, duration + 33)\r\n );\r\n },\r\n\r\n stop: function ($el, callCallback) {\r\n if ($el && $el.length) {\r\n clearTimeout($el.data(\"timer\"));\r\n\r\n if (callCallback) {\r\n $el.trigger(transitionEnd);\r\n }\r\n\r\n $el.off(transitionEnd).css(\"transition-duration\", \"\");\r\n\r\n $el.parent().removeClass(\"fancybox-is-scaling\");\r\n }\r\n }\r\n };\r\n\r\n // Default click handler for \"fancyboxed\" links\r\n // ============================================\r\n\r\n function _run(e, opts) {\r\n var items = [],\r\n index = 0,\r\n $target,\r\n value,\r\n instance;\r\n\r\n // Avoid opening multiple times\r\n if (e && e.isDefaultPrevented()) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n\r\n opts = opts || {};\r\n\r\n if (e && e.data) {\r\n opts = mergeOpts(e.data.options, opts);\r\n }\r\n\r\n $target = opts.$target || $(e.currentTarget).trigger(\"blur\");\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance && instance.$trigger && instance.$trigger.is($target)) {\r\n return;\r\n }\r\n\r\n if (opts.selector) {\r\n items = $(opts.selector);\r\n } else {\r\n // Get all related items and find index for clicked one\r\n value = $target.attr(\"data-fancybox\") || \"\";\r\n\r\n if (value) {\r\n items = e.data ? e.data.items : [];\r\n items = items.length ? items.filter('[data-fancybox=\"' + value + '\"]') : $('[data-fancybox=\"' + value + '\"]');\r\n } else {\r\n items = [$target];\r\n }\r\n }\r\n\r\n index = $(items).index($target);\r\n\r\n // Sometimes current item can not be found\r\n if (index < 0) {\r\n index = 0;\r\n }\r\n\r\n instance = $.fancybox.open(items, opts, index);\r\n\r\n // Save last active element\r\n instance.$trigger = $target;\r\n }\r\n\r\n // Create a jQuery plugin\r\n // ======================\r\n\r\n $.fn.fancybox = function (options) {\r\n var selector;\r\n\r\n options = options || {};\r\n selector = options.selector || false;\r\n\r\n if (selector) {\r\n // Use body element instead of document so it executes first\r\n $(\"body\")\r\n .off(\"click.fb-start\", selector)\r\n .on(\"click.fb-start\", selector, {\r\n options: options\r\n }, _run);\r\n } else {\r\n this.off(\"click.fb-start\").on(\r\n \"click.fb-start\", {\r\n items: this,\r\n options: options\r\n },\r\n _run\r\n );\r\n }\r\n\r\n return this;\r\n };\r\n\r\n // Self initializing plugin for all elements having `data-fancybox` attribute\r\n // ==========================================================================\r\n\r\n $D.on(\"click.fb-start\", \"[data-fancybox]\", _run);\r\n\r\n // Enable \"trigger elements\"\r\n // =========================\r\n\r\n $D.on(\"click.fb-start\", \"[data-fancybox-trigger]\", function (e) {\r\n $('[data-fancybox=\"' + $(this).attr(\"data-fancybox-trigger\") + '\"]')\r\n .eq($(this).attr(\"data-fancybox-index\") || 0)\r\n .trigger(\"click.fb-start\", {\r\n $trigger: $(this)\r\n });\r\n });\r\n\r\n // Track focus event for better accessibility styling\r\n // ==================================================\r\n (function () {\r\n var buttonStr = \".fancybox-button\",\r\n focusStr = \"fancybox-focus\",\r\n $pressed = null;\r\n\r\n $D.on(\"mousedown mouseup focus blur\", buttonStr, function (e) {\r\n switch (e.type) {\r\n case \"mousedown\":\r\n $pressed = $(this);\r\n break;\r\n case \"mouseup\":\r\n $pressed = null;\r\n break;\r\n case \"focusin\":\r\n $(buttonStr).removeClass(focusStr);\r\n\r\n if (!$(this).is($pressed) && !$(this).is(\"[disabled]\")) {\r\n $(this).addClass(focusStr);\r\n }\r\n break;\r\n case \"focusout\":\r\n $(buttonStr).removeClass(focusStr);\r\n break;\r\n }\r\n });\r\n })();\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// Media\r\n// Adds additional media type support\r\n//\r\n// ==========================================================================\r\n(function ($) {\r\n \"use strict\";\r\n\r\n // Object containing properties for each media type\r\n var defaults = {\r\n youtube: {\r\n matcher: /(youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(watch\\?(.*&)?v=|v\\/|u\\/|embed\\/?)?(videoseries\\?list=(.*)|[\\w-]{11}|\\?listType=(.*)&list=(.*))(.*)/i,\r\n params: {\r\n autoplay: 1,\r\n autohide: 1,\r\n fs: 1,\r\n rel: 0,\r\n hd: 1,\r\n wmode: \"transparent\",\r\n enablejsapi: 1,\r\n html5: 1\r\n },\r\n paramPlace: 8,\r\n type: \"iframe\",\r\n url: \"https://www.youtube-nocookie.com/embed/$4\",\r\n thumb: \"https://img.youtube.com/vi/$4/hqdefault.jpg\"\r\n },\r\n\r\n vimeo: {\r\n matcher: /^.+vimeo.com\\/(.*\\/)?([\\d]+)(.*)?/,\r\n params: {\r\n autoplay: 1,\r\n hd: 1,\r\n show_title: 1,\r\n show_byline: 1,\r\n show_portrait: 0,\r\n fullscreen: 1\r\n },\r\n paramPlace: 3,\r\n type: \"iframe\",\r\n url: \"//player.vimeo.com/video/$2\"\r\n },\r\n\r\n instagram: {\r\n matcher: /(instagr\\.am|instagram\\.com)\\/p\\/([a-zA-Z0-9_\\-]+)\\/?/i,\r\n type: \"image\",\r\n url: \"//$1/p/$2/media/?size=l\"\r\n },\r\n\r\n // Examples:\r\n // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16\r\n // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z\r\n // https://www.google.com/maps/@52.2111123,2.9237542,6.61z?hl=en\r\n // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572\r\n gmap_place: {\r\n matcher: /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(((maps\\/(place\\/(.*)\\/)?\\@(.*),(\\d+.?\\d+?)z))|(\\?ll=))(.*)?/i,\r\n type: \"iframe\",\r\n url: function (rez) {\r\n return (\r\n \"//maps.google.\" +\r\n rez[2] +\r\n \"/?ll=\" +\r\n (rez[9] ? rez[9] + \"&z=\" + Math.floor(rez[10]) + (rez[12] ? rez[12].replace(/^\\//, \"&\") : \"\") : rez[12] + \"\").replace(/\\?/, \"&\") +\r\n \"&output=\" +\r\n (rez[12] && rez[12].indexOf(\"layer=c\") > 0 ? \"svembed\" : \"embed\")\r\n );\r\n }\r\n },\r\n\r\n // Examples:\r\n // https://www.google.com/maps/search/Empire+State+Building/\r\n // https://www.google.com/maps/search/?api=1&query=centurylink+field\r\n // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393\r\n gmap_search: {\r\n matcher: /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(maps\\/search\\/)(.*)/i,\r\n type: \"iframe\",\r\n url: function (rez) {\r\n return \"//maps.google.\" + rez[2] + \"/maps?q=\" + rez[5].replace(\"query=\", \"q=\").replace(\"api=1\", \"\") + \"&output=embed\";\r\n }\r\n }\r\n };\r\n\r\n // Formats matching url to final form\r\n var format = function (url, rez, params) {\r\n if (!url) {\r\n return;\r\n }\r\n\r\n params = params || \"\";\r\n\r\n if ($.type(params) === \"object\") {\r\n params = $.param(params, true);\r\n }\r\n\r\n $.each(rez, function (key, value) {\r\n url = url.replace(\"$\" + key, value || \"\");\r\n });\r\n\r\n if (params.length) {\r\n url += (url.indexOf(\"?\") > 0 ? \"&\" : \"?\") + params;\r\n }\r\n\r\n return url;\r\n };\r\n\r\n $(document).on(\"objectNeedsType.fb\", function (e, instance, item) {\r\n var url = item.src || \"\",\r\n type = false,\r\n media,\r\n thumb,\r\n rez,\r\n params,\r\n urlParams,\r\n paramObj,\r\n provider;\r\n\r\n media = $.extend(true, {}, defaults, item.opts.media);\r\n\r\n // Look for any matching media type\r\n $.each(media, function (providerName, providerOpts) {\r\n rez = url.match(providerOpts.matcher);\r\n\r\n if (!rez) {\r\n return;\r\n }\r\n\r\n type = providerOpts.type;\r\n provider = providerName;\r\n paramObj = {};\r\n\r\n if (providerOpts.paramPlace && rez[providerOpts.paramPlace]) {\r\n urlParams = rez[providerOpts.paramPlace];\r\n\r\n if (urlParams[0] == \"?\") {\r\n urlParams = urlParams.substring(1);\r\n }\r\n\r\n urlParams = urlParams.split(\"&\");\r\n\r\n for (var m = 0; m < urlParams.length; ++m) {\r\n var p = urlParams[m].split(\"=\", 2);\r\n\r\n if (p.length == 2) {\r\n paramObj[p[0]] = decodeURIComponent(p[1].replace(/\\+/g, \" \"));\r\n }\r\n }\r\n }\r\n\r\n params = $.extend(true, {}, providerOpts.params, item.opts[providerName], paramObj);\r\n\r\n url =\r\n $.type(providerOpts.url) === \"function\" ? providerOpts.url.call(this, rez, params, item) : format(providerOpts.url, rez, params);\r\n\r\n thumb =\r\n $.type(providerOpts.thumb) === \"function\" ? providerOpts.thumb.call(this, rez, params, item) : format(providerOpts.thumb, rez);\r\n\r\n if (providerName === \"youtube\") {\r\n url = url.replace(/&t=((\\d+)m)?(\\d+)s/, function (match, p1, m, s) {\r\n return \"&start=\" + ((m ? parseInt(m, 10) * 60 : 0) + parseInt(s, 10));\r\n });\r\n } else if (providerName === \"vimeo\") {\r\n url = url.replace(\"&%23\", \"#\");\r\n }\r\n\r\n return false;\r\n });\r\n\r\n // If it is found, then change content type and update the url\r\n\r\n if (type) {\r\n if (!item.opts.thumb && !(item.opts.$thumb && item.opts.$thumb.length)) {\r\n item.opts.thumb = thumb;\r\n }\r\n\r\n if (type === \"iframe\") {\r\n item.opts = $.extend(true, item.opts, {\r\n iframe: {\r\n preload: false,\r\n attr: {\r\n scrolling: \"no\"\r\n }\r\n }\r\n });\r\n }\r\n\r\n $.extend(item, {\r\n type: type,\r\n src: url,\r\n origSrc: item.src,\r\n contentSource: provider,\r\n contentType: type === \"image\" ? \"image\" : provider == \"gmap_place\" || provider == \"gmap_search\" ? \"map\" : \"video\"\r\n });\r\n } else if (url) {\r\n item.type = item.opts.defaultType;\r\n }\r\n });\r\n\r\n // Load YouTube/Video API on request to detect when video finished playing\r\n var VideoAPILoader = {\r\n youtube: {\r\n src: \"https://www.youtube.com/iframe_api\",\r\n class: \"YT\",\r\n loading: false,\r\n loaded: false\r\n },\r\n\r\n vimeo: {\r\n src: \"https://player.vimeo.com/api/player.js\",\r\n class: \"Vimeo\",\r\n loading: false,\r\n loaded: false\r\n },\r\n\r\n load: function (vendor) {\r\n var _this = this,\r\n script;\r\n\r\n if (this[vendor].loaded) {\r\n setTimeout(function () {\r\n _this.done(vendor);\r\n });\r\n return;\r\n }\r\n\r\n if (this[vendor].loading) {\r\n return;\r\n }\r\n\r\n this[vendor].loading = true;\r\n\r\n script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = this[vendor].src;\r\n\r\n if (vendor === \"youtube\") {\r\n window.onYouTubeIframeAPIReady = function () {\r\n _this[vendor].loaded = true;\r\n _this.done(vendor);\r\n };\r\n } else {\r\n script.onload = function () {\r\n _this[vendor].loaded = true;\r\n _this.done(vendor);\r\n };\r\n }\r\n\r\n document.body.appendChild(script);\r\n },\r\n done: function (vendor) {\r\n var instance, $el, player;\r\n\r\n if (vendor === \"youtube\") {\r\n delete window.onYouTubeIframeAPIReady;\r\n }\r\n\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n $el = instance.current.$content.find(\"iframe\");\r\n\r\n if (vendor === \"youtube\" && YT !== undefined && YT) {\r\n player = new YT.Player($el.attr(\"id\"), {\r\n events: {\r\n onStateChange: function (e) {\r\n if (e.data == 0) {\r\n instance.next();\r\n }\r\n }\r\n }\r\n });\r\n } else if (vendor === \"vimeo\" && Vimeo !== undefined && Vimeo) {\r\n player = new Vimeo.Player($el);\r\n\r\n player.on(\"ended\", function () {\r\n instance.next();\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n $(document).on({\r\n \"afterShow.fb\": function (e, instance, current) {\r\n if (instance.group.length > 1 && (current.contentSource === \"youtube\" || current.contentSource === \"vimeo\")) {\r\n VideoAPILoader.load(current.contentSource);\r\n }\r\n }\r\n });\r\n})(jQuery);\n// ==========================================================================\r\n//\r\n// Guestures\r\n// Adds touch guestures, handles click and tap events\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n \"use strict\";\r\n\r\n var requestAFrame = (function () {\r\n return (\r\n window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n // if all else fails, use setTimeout\r\n function (callback) {\r\n return window.setTimeout(callback, 1000 / 60);\r\n }\r\n );\r\n })();\r\n\r\n var cancelAFrame = (function () {\r\n return (\r\n window.cancelAnimationFrame ||\r\n window.webkitCancelAnimationFrame ||\r\n window.mozCancelAnimationFrame ||\r\n window.oCancelAnimationFrame ||\r\n function (id) {\r\n window.clearTimeout(id);\r\n }\r\n );\r\n })();\r\n\r\n var getPointerXY = function (e) {\r\n var result = [];\r\n\r\n e = e.originalEvent || e || window.e;\r\n e = e.touches && e.touches.length ? e.touches : e.changedTouches && e.changedTouches.length ? e.changedTouches : [e];\r\n\r\n for (var key in e) {\r\n if (e[key].pageX) {\r\n result.push({\r\n x: e[key].pageX,\r\n y: e[key].pageY\r\n });\r\n } else if (e[key].clientX) {\r\n result.push({\r\n x: e[key].clientX,\r\n y: e[key].clientY\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n var distance = function (point2, point1, what) {\r\n if (!point1 || !point2) {\r\n return 0;\r\n }\r\n\r\n if (what === \"x\") {\r\n return point2.x - point1.x;\r\n } else if (what === \"y\") {\r\n return point2.y - point1.y;\r\n }\r\n\r\n return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));\r\n };\r\n\r\n var isClickable = function ($el) {\r\n if (\r\n $el.is('a,area,button,[role=\"button\"],input,label,select,summary,textarea,video,audio,iframe') ||\r\n $.isFunction($el.get(0).onclick) ||\r\n $el.data(\"selectable\")\r\n ) {\r\n return true;\r\n }\r\n\r\n // Check for attributes like data-fancybox-next or data-fancybox-close\r\n for (var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++) {\r\n if (atts[i].nodeName.substr(0, 14) === \"data-fancybox-\") {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n var hasScrollbars = function (el) {\r\n var overflowY = window.getComputedStyle(el)[\"overflow-y\"],\r\n overflowX = window.getComputedStyle(el)[\"overflow-x\"],\r\n vertical = (overflowY === \"scroll\" || overflowY === \"auto\") && el.scrollHeight > el.clientHeight,\r\n horizontal = (overflowX === \"scroll\" || overflowX === \"auto\") && el.scrollWidth > el.clientWidth;\r\n\r\n return vertical || horizontal;\r\n };\r\n\r\n var isScrollable = function ($el) {\r\n var rez = false;\r\n\r\n while (true) {\r\n rez = hasScrollbars($el.get(0));\r\n\r\n if (rez) {\r\n break;\r\n }\r\n\r\n $el = $el.parent();\r\n\r\n if (!$el.length || $el.hasClass(\"fancybox-stage\") || $el.is(\"body\")) {\r\n break;\r\n }\r\n }\r\n\r\n return rez;\r\n };\r\n\r\n var Guestures = function (instance) {\r\n var self = this;\r\n\r\n self.instance = instance;\r\n\r\n self.$bg = instance.$refs.bg;\r\n self.$stage = instance.$refs.stage;\r\n self.$container = instance.$refs.container;\r\n\r\n self.destroy();\r\n\r\n self.$container.on(\"touchstart.fb.touch mousedown.fb.touch\", $.proxy(self, \"ontouchstart\"));\r\n };\r\n\r\n Guestures.prototype.destroy = function () {\r\n var self = this;\r\n\r\n self.$container.off(\".fb.touch\");\r\n\r\n $(document).off(\".fb.touch\");\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n self.requestId = null;\r\n }\r\n\r\n if (self.tapped) {\r\n clearTimeout(self.tapped);\r\n self.tapped = null;\r\n }\r\n };\r\n\r\n Guestures.prototype.ontouchstart = function (e) {\r\n var self = this,\r\n $target = $(e.target),\r\n instance = self.instance,\r\n current = instance.current,\r\n $slide = current.$slide,\r\n $content = current.$content,\r\n isTouchDevice = e.type == \"touchstart\";\r\n\r\n // Do not respond to both (touch and mouse) events\r\n if (isTouchDevice) {\r\n self.$container.off(\"mousedown.fb.touch\");\r\n }\r\n\r\n // Ignore right click\r\n if (e.originalEvent && e.originalEvent.button == 2) {\r\n return;\r\n }\r\n\r\n // Ignore taping on links, buttons, input elements\r\n if (!$slide.length || !$target.length || isClickable($target) || isClickable($target.parent())) {\r\n return;\r\n }\r\n // Ignore clicks on the scrollbar\r\n if (!$target.is(\"img\") && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left) {\r\n return;\r\n }\r\n\r\n // Ignore clicks while zooming or closing\r\n if (!current || instance.isAnimating || current.$slide.hasClass(\"fancybox-animated\")) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n return;\r\n }\r\n\r\n self.realPoints = self.startPoints = getPointerXY(e);\r\n\r\n if (!self.startPoints.length) {\r\n return;\r\n }\r\n\r\n // Allow other scripts to catch touch event if \"touch\" is set to false\r\n if (current.touch) {\r\n e.stopPropagation();\r\n }\r\n\r\n self.startEvent = e;\r\n\r\n self.canTap = true;\r\n self.$target = $target;\r\n self.$content = $content;\r\n self.opts = current.opts.touch;\r\n\r\n self.isPanning = false;\r\n self.isSwiping = false;\r\n self.isZooming = false;\r\n self.isScrolling = false;\r\n self.canPan = instance.canPan();\r\n\r\n self.startTime = new Date().getTime();\r\n self.distanceX = self.distanceY = self.distance = 0;\r\n\r\n self.canvasWidth = Math.round($slide[0].clientWidth);\r\n self.canvasHeight = Math.round($slide[0].clientHeight);\r\n\r\n self.contentLastPos = null;\r\n self.contentStartPos = $.fancybox.getTranslate(self.$content) || {\r\n top: 0,\r\n left: 0\r\n };\r\n self.sliderStartPos = $.fancybox.getTranslate($slide);\r\n\r\n // Since position will be absolute, but we need to make it relative to the stage\r\n self.stagePos = $.fancybox.getTranslate(instance.$refs.stage);\r\n\r\n self.sliderStartPos.top -= self.stagePos.top;\r\n self.sliderStartPos.left -= self.stagePos.left;\r\n\r\n self.contentStartPos.top -= self.stagePos.top;\r\n self.contentStartPos.left -= self.stagePos.left;\r\n\r\n $(document)\r\n .off(\".fb.touch\")\r\n .on(isTouchDevice ? \"touchend.fb.touch touchcancel.fb.touch\" : \"mouseup.fb.touch mouseleave.fb.touch\", $.proxy(self, \"ontouchend\"))\r\n .on(isTouchDevice ? \"touchmove.fb.touch\" : \"mousemove.fb.touch\", $.proxy(self, \"ontouchmove\"));\r\n\r\n if ($.fancybox.isMobile) {\r\n document.addEventListener(\"scroll\", self.onscroll, true);\r\n }\r\n\r\n // Skip if clicked outside the sliding area\r\n if (!(self.opts || self.canPan) || !($target.is(self.$stage) || self.$stage.find($target).length)) {\r\n if ($target.is(\".fancybox-image\")) {\r\n e.preventDefault();\r\n }\r\n\r\n if (!($.fancybox.isMobile && $target.parents(\".fancybox-caption\").length)) {\r\n return;\r\n }\r\n }\r\n\r\n self.isScrollable = isScrollable($target) || isScrollable($target.parent());\r\n\r\n // Check if element is scrollable and try to prevent default behavior (scrolling)\r\n if (!($.fancybox.isMobile && self.isScrollable)) {\r\n e.preventDefault();\r\n }\r\n\r\n // One finger or mouse click - swipe or pan an image\r\n if (self.startPoints.length === 1 || current.hasError) {\r\n if (self.canPan) {\r\n $.fancybox.stop(self.$content);\r\n\r\n self.isPanning = true;\r\n } else {\r\n self.isSwiping = true;\r\n }\r\n\r\n self.$container.addClass(\"fancybox-is-grabbing\");\r\n }\r\n\r\n // Two fingers - zoom image\r\n if (self.startPoints.length === 2 && current.type === \"image\" && (current.isLoaded || current.$ghost)) {\r\n self.canTap = false;\r\n self.isSwiping = false;\r\n self.isPanning = false;\r\n\r\n self.isZooming = true;\r\n\r\n $.fancybox.stop(self.$content);\r\n\r\n self.centerPointStartX = (self.startPoints[0].x + self.startPoints[1].x) * 0.5 - $(window).scrollLeft();\r\n self.centerPointStartY = (self.startPoints[0].y + self.startPoints[1].y) * 0.5 - $(window).scrollTop();\r\n\r\n self.percentageOfImageAtPinchPointX = (self.centerPointStartX - self.contentStartPos.left) / self.contentStartPos.width;\r\n self.percentageOfImageAtPinchPointY = (self.centerPointStartY - self.contentStartPos.top) / self.contentStartPos.height;\r\n\r\n self.startDistanceBetweenFingers = distance(self.startPoints[0], self.startPoints[1]);\r\n }\r\n };\r\n\r\n Guestures.prototype.onscroll = function (e) {\r\n var self = this;\r\n\r\n self.isScrolling = true;\r\n\r\n document.removeEventListener(\"scroll\", self.onscroll, true);\r\n };\r\n\r\n Guestures.prototype.ontouchmove = function (e) {\r\n var self = this;\r\n\r\n // Make sure user has not released over iframe or disabled element\r\n if (e.originalEvent.buttons !== undefined && e.originalEvent.buttons === 0) {\r\n self.ontouchend(e);\r\n return;\r\n }\r\n\r\n if (self.isScrolling) {\r\n self.canTap = false;\r\n return;\r\n }\r\n\r\n self.newPoints = getPointerXY(e);\r\n\r\n if (!(self.opts || self.canPan) || !self.newPoints.length || !self.newPoints.length) {\r\n return;\r\n }\r\n\r\n if (!(self.isSwiping && self.isSwiping === true)) {\r\n e.preventDefault();\r\n }\r\n\r\n self.distanceX = distance(self.newPoints[0], self.startPoints[0], \"x\");\r\n self.distanceY = distance(self.newPoints[0], self.startPoints[0], \"y\");\r\n\r\n self.distance = distance(self.newPoints[0], self.startPoints[0]);\r\n\r\n // Skip false ontouchmove events (Chrome)\r\n if (self.distance > 0) {\r\n if (self.isSwiping) {\r\n self.onSwipe(e);\r\n } else if (self.isPanning) {\r\n self.onPan();\r\n } else if (self.isZooming) {\r\n self.onZoom();\r\n }\r\n }\r\n };\r\n\r\n Guestures.prototype.onSwipe = function (e) {\r\n var self = this,\r\n instance = self.instance,\r\n swiping = self.isSwiping,\r\n left = self.sliderStartPos.left || 0,\r\n angle;\r\n\r\n // If direction is not yet determined\r\n if (swiping === true) {\r\n // We need at least 10px distance to correctly calculate an angle\r\n if (Math.abs(self.distance) > 10) {\r\n self.canTap = false;\r\n\r\n if (instance.group.length < 2 && self.opts.vertical) {\r\n self.isSwiping = \"y\";\r\n } else if (instance.isDragging || self.opts.vertical === false || (self.opts.vertical === \"auto\" && $(window).width() > 800)) {\r\n self.isSwiping = \"x\";\r\n } else {\r\n angle = Math.abs((Math.atan2(self.distanceY, self.distanceX) * 180) / Math.PI);\r\n\r\n self.isSwiping = angle > 45 && angle < 135 ? \"y\" : \"x\";\r\n }\r\n\r\n if (self.isSwiping === \"y\" && $.fancybox.isMobile && self.isScrollable) {\r\n self.isScrolling = true;\r\n\r\n return;\r\n }\r\n\r\n instance.isDragging = self.isSwiping;\r\n\r\n // Reset points to avoid jumping, because we dropped first swipes to calculate the angle\r\n self.startPoints = self.newPoints;\r\n\r\n $.each(instance.slides, function (index, slide) {\r\n var slidePos, stagePos;\r\n\r\n $.fancybox.stop(slide.$slide);\r\n\r\n slidePos = $.fancybox.getTranslate(slide.$slide);\r\n stagePos = $.fancybox.getTranslate(instance.$refs.stage);\r\n\r\n slide.$slide\r\n .css({\r\n transform: \"\",\r\n opacity: \"\",\r\n \"transition-duration\": \"\"\r\n })\r\n .removeClass(\"fancybox-animated\")\r\n .removeClass(function (index, className) {\r\n return (className.match(/(^|\\s)fancybox-fx-\\S+/g) || []).join(\" \");\r\n });\r\n\r\n if (slide.pos === instance.current.pos) {\r\n self.sliderStartPos.top = slidePos.top - stagePos.top;\r\n self.sliderStartPos.left = slidePos.left - stagePos.left;\r\n }\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: slidePos.top - stagePos.top,\r\n left: slidePos.left - stagePos.left\r\n });\r\n });\r\n\r\n // Stop slideshow\r\n if (instance.SlideShow && instance.SlideShow.isActive) {\r\n instance.SlideShow.stop();\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Sticky edges\r\n if (swiping == \"x\") {\r\n if (\r\n self.distanceX > 0 &&\r\n (self.instance.group.length < 2 || (self.instance.current.index === 0 && !self.instance.current.opts.loop))\r\n ) {\r\n left = left + Math.pow(self.distanceX, 0.8);\r\n } else if (\r\n self.distanceX < 0 &&\r\n (self.instance.group.length < 2 ||\r\n (self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop))\r\n ) {\r\n left = left - Math.pow(-self.distanceX, 0.8);\r\n } else {\r\n left = left + self.distanceX;\r\n }\r\n }\r\n\r\n self.sliderLastPos = {\r\n top: swiping == \"x\" ? 0 : self.sliderStartPos.top + self.distanceY,\r\n left: left\r\n };\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n\r\n self.requestId = null;\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n if (self.sliderLastPos) {\r\n $.each(self.instance.slides, function (index, slide) {\r\n var pos = slide.pos - self.instance.currPos;\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: self.sliderLastPos.top,\r\n left: self.sliderLastPos.left + pos * self.canvasWidth + pos * slide.opts.gutter\r\n });\r\n });\r\n\r\n self.$container.addClass(\"fancybox-is-sliding\");\r\n }\r\n });\r\n };\r\n\r\n Guestures.prototype.onPan = function () {\r\n var self = this;\r\n\r\n // Prevent accidental movement (sometimes, when tapping casually, finger can move a bit)\r\n if (distance(self.newPoints[0], self.realPoints[0]) < ($.fancybox.isMobile ? 10 : 5)) {\r\n self.startPoints = self.newPoints;\r\n return;\r\n }\r\n\r\n self.canTap = false;\r\n\r\n self.contentLastPos = self.limitMovement();\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n $.fancybox.setTranslate(self.$content, self.contentLastPos);\r\n });\r\n };\r\n\r\n // Make panning sticky to the edges\r\n Guestures.prototype.limitMovement = function () {\r\n var self = this;\r\n\r\n var canvasWidth = self.canvasWidth;\r\n var canvasHeight = self.canvasHeight;\r\n\r\n var distanceX = self.distanceX;\r\n var distanceY = self.distanceY;\r\n\r\n var contentStartPos = self.contentStartPos;\r\n\r\n var currentOffsetX = contentStartPos.left;\r\n var currentOffsetY = contentStartPos.top;\r\n\r\n var currentWidth = contentStartPos.width;\r\n var currentHeight = contentStartPos.height;\r\n\r\n var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY, newOffsetX, newOffsetY;\r\n\r\n if (currentWidth > canvasWidth) {\r\n newOffsetX = currentOffsetX + distanceX;\r\n } else {\r\n newOffsetX = currentOffsetX;\r\n }\r\n\r\n newOffsetY = currentOffsetY + distanceY;\r\n\r\n // Slow down proportionally to traveled distance\r\n minTranslateX = Math.max(0, canvasWidth * 0.5 - currentWidth * 0.5);\r\n minTranslateY = Math.max(0, canvasHeight * 0.5 - currentHeight * 0.5);\r\n\r\n maxTranslateX = Math.min(canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5);\r\n maxTranslateY = Math.min(canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5);\r\n\r\n // ->\r\n if (distanceX > 0 && newOffsetX > minTranslateX) {\r\n newOffsetX = minTranslateX - 1 + Math.pow(-minTranslateX + currentOffsetX + distanceX, 0.8) || 0;\r\n }\r\n\r\n // <-\r\n if (distanceX < 0 && newOffsetX < maxTranslateX) {\r\n newOffsetX = maxTranslateX + 1 - Math.pow(maxTranslateX - currentOffsetX - distanceX, 0.8) || 0;\r\n }\r\n\r\n // \\/\r\n if (distanceY > 0 && newOffsetY > minTranslateY) {\r\n newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8) || 0;\r\n }\r\n\r\n // /\\\r\n if (distanceY < 0 && newOffsetY < maxTranslateY) {\r\n newOffsetY = maxTranslateY + 1 - Math.pow(maxTranslateY - currentOffsetY - distanceY, 0.8) || 0;\r\n }\r\n\r\n return {\r\n top: newOffsetY,\r\n left: newOffsetX\r\n };\r\n };\r\n\r\n Guestures.prototype.limitPosition = function (newOffsetX, newOffsetY, newWidth, newHeight) {\r\n var self = this;\r\n\r\n var canvasWidth = self.canvasWidth;\r\n var canvasHeight = self.canvasHeight;\r\n\r\n if (newWidth > canvasWidth) {\r\n newOffsetX = newOffsetX > 0 ? 0 : newOffsetX;\r\n newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;\r\n } else {\r\n // Center horizontally\r\n newOffsetX = Math.max(0, canvasWidth / 2 - newWidth / 2);\r\n }\r\n\r\n if (newHeight > canvasHeight) {\r\n newOffsetY = newOffsetY > 0 ? 0 : newOffsetY;\r\n newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;\r\n } else {\r\n // Center vertically\r\n newOffsetY = Math.max(0, canvasHeight / 2 - newHeight / 2);\r\n }\r\n\r\n return {\r\n top: newOffsetY,\r\n left: newOffsetX\r\n };\r\n };\r\n\r\n Guestures.prototype.onZoom = function () {\r\n var self = this;\r\n\r\n // Calculate current distance between points to get pinch ratio and new width and height\r\n var contentStartPos = self.contentStartPos;\r\n\r\n var currentWidth = contentStartPos.width;\r\n var currentHeight = contentStartPos.height;\r\n\r\n var currentOffsetX = contentStartPos.left;\r\n var currentOffsetY = contentStartPos.top;\r\n\r\n var endDistanceBetweenFingers = distance(self.newPoints[0], self.newPoints[1]);\r\n\r\n var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;\r\n\r\n var newWidth = Math.floor(currentWidth * pinchRatio);\r\n var newHeight = Math.floor(currentHeight * pinchRatio);\r\n\r\n // This is the translation due to pinch-zooming\r\n var translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;\r\n var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;\r\n\r\n // Point between the two touches\r\n var centerPointEndX = (self.newPoints[0].x + self.newPoints[1].x) / 2 - $(window).scrollLeft();\r\n var centerPointEndY = (self.newPoints[0].y + self.newPoints[1].y) / 2 - $(window).scrollTop();\r\n\r\n // And this is the translation due to translation of the centerpoint\r\n // between the two fingers\r\n var translateFromTranslatingX = centerPointEndX - self.centerPointStartX;\r\n var translateFromTranslatingY = centerPointEndY - self.centerPointStartY;\r\n\r\n // The new offset is the old/current one plus the total translation\r\n var newOffsetX = currentOffsetX + (translateFromZoomingX + translateFromTranslatingX);\r\n var newOffsetY = currentOffsetY + (translateFromZoomingY + translateFromTranslatingY);\r\n\r\n var newPos = {\r\n top: newOffsetY,\r\n left: newOffsetX,\r\n scaleX: pinchRatio,\r\n scaleY: pinchRatio\r\n };\r\n\r\n self.canTap = false;\r\n\r\n self.newWidth = newWidth;\r\n self.newHeight = newHeight;\r\n\r\n self.contentLastPos = newPos;\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n $.fancybox.setTranslate(self.$content, self.contentLastPos);\r\n });\r\n };\r\n\r\n Guestures.prototype.ontouchend = function (e) {\r\n var self = this;\r\n\r\n var swiping = self.isSwiping;\r\n var panning = self.isPanning;\r\n var zooming = self.isZooming;\r\n var scrolling = self.isScrolling;\r\n\r\n self.endPoints = getPointerXY(e);\r\n self.dMs = Math.max(new Date().getTime() - self.startTime, 1);\r\n\r\n self.$container.removeClass(\"fancybox-is-grabbing\");\r\n\r\n $(document).off(\".fb.touch\");\r\n\r\n document.removeEventListener(\"scroll\", self.onscroll, true);\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n\r\n self.requestId = null;\r\n }\r\n\r\n self.isSwiping = false;\r\n self.isPanning = false;\r\n self.isZooming = false;\r\n self.isScrolling = false;\r\n\r\n self.instance.isDragging = false;\r\n\r\n if (self.canTap) {\r\n return self.onTap(e);\r\n }\r\n\r\n self.speed = 100;\r\n\r\n // Speed in px/ms\r\n self.velocityX = (self.distanceX / self.dMs) * 0.5;\r\n self.velocityY = (self.distanceY / self.dMs) * 0.5;\r\n\r\n if (panning) {\r\n self.endPanning();\r\n } else if (zooming) {\r\n self.endZooming();\r\n } else {\r\n self.endSwiping(swiping, scrolling);\r\n }\r\n\r\n return;\r\n };\r\n\r\n Guestures.prototype.endSwiping = function (swiping, scrolling) {\r\n var self = this,\r\n ret = false,\r\n len = self.instance.group.length,\r\n distanceX = Math.abs(self.distanceX),\r\n canAdvance = swiping == \"x\" && len > 1 && ((self.dMs > 130 && distanceX > 10) || distanceX > 50),\r\n speedX = 300;\r\n\r\n self.sliderLastPos = null;\r\n\r\n // Close if swiped vertically / navigate if horizontally\r\n if (swiping == \"y\" && !scrolling && Math.abs(self.distanceY) > 50) {\r\n // Continue vertical movement\r\n $.fancybox.animate(\r\n self.instance.current.$slide, {\r\n top: self.sliderStartPos.top + self.distanceY + self.velocityY * 150,\r\n opacity: 0\r\n },\r\n 200\r\n );\r\n ret = self.instance.close(true, 250);\r\n } else if (canAdvance && self.distanceX > 0) {\r\n ret = self.instance.previous(speedX);\r\n } else if (canAdvance && self.distanceX < 0) {\r\n ret = self.instance.next(speedX);\r\n }\r\n\r\n if (ret === false && (swiping == \"x\" || swiping == \"y\")) {\r\n self.instance.centerSlide(200);\r\n }\r\n\r\n self.$container.removeClass(\"fancybox-is-sliding\");\r\n };\r\n\r\n // Limit panning from edges\r\n // ========================\r\n Guestures.prototype.endPanning = function () {\r\n var self = this,\r\n newOffsetX,\r\n newOffsetY,\r\n newPos;\r\n\r\n if (!self.contentLastPos) {\r\n return;\r\n }\r\n\r\n if (self.opts.momentum === false || self.dMs > 350) {\r\n newOffsetX = self.contentLastPos.left;\r\n newOffsetY = self.contentLastPos.top;\r\n } else {\r\n // Continue movement\r\n newOffsetX = self.contentLastPos.left + self.velocityX * 500;\r\n newOffsetY = self.contentLastPos.top + self.velocityY * 500;\r\n }\r\n\r\n newPos = self.limitPosition(newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height);\r\n\r\n newPos.width = self.contentStartPos.width;\r\n newPos.height = self.contentStartPos.height;\r\n\r\n $.fancybox.animate(self.$content, newPos, 366);\r\n };\r\n\r\n Guestures.prototype.endZooming = function () {\r\n var self = this;\r\n\r\n var current = self.instance.current;\r\n\r\n var newOffsetX, newOffsetY, newPos, reset;\r\n\r\n var newWidth = self.newWidth;\r\n var newHeight = self.newHeight;\r\n\r\n if (!self.contentLastPos) {\r\n return;\r\n }\r\n\r\n newOffsetX = self.contentLastPos.left;\r\n newOffsetY = self.contentLastPos.top;\r\n\r\n reset = {\r\n top: newOffsetY,\r\n left: newOffsetX,\r\n width: newWidth,\r\n height: newHeight,\r\n scaleX: 1,\r\n scaleY: 1\r\n };\r\n\r\n // Reset scalex/scaleY values; this helps for perfomance and does not break animation\r\n $.fancybox.setTranslate(self.$content, reset);\r\n\r\n if (newWidth < self.canvasWidth && newHeight < self.canvasHeight) {\r\n self.instance.scaleToFit(150);\r\n } else if (newWidth > current.width || newHeight > current.height) {\r\n self.instance.scaleToActual(self.centerPointStartX, self.centerPointStartY, 150);\r\n } else {\r\n newPos = self.limitPosition(newOffsetX, newOffsetY, newWidth, newHeight);\r\n\r\n $.fancybox.animate(self.$content, newPos, 150);\r\n }\r\n };\r\n\r\n Guestures.prototype.onTap = function (e) {\r\n var self = this;\r\n var $target = $(e.target);\r\n\r\n var instance = self.instance;\r\n var current = instance.current;\r\n\r\n var endPoints = (e && getPointerXY(e)) || self.startPoints;\r\n\r\n var tapX = endPoints[0] ? endPoints[0].x - $(window).scrollLeft() - self.stagePos.left : 0;\r\n var tapY = endPoints[0] ? endPoints[0].y - $(window).scrollTop() - self.stagePos.top : 0;\r\n\r\n var where;\r\n\r\n var process = function (prefix) {\r\n var action = current.opts[prefix];\r\n\r\n if ($.isFunction(action)) {\r\n action = action.apply(instance, [current, e]);\r\n }\r\n\r\n if (!action) {\r\n return;\r\n }\r\n\r\n switch (action) {\r\n case \"close\":\r\n instance.close(self.startEvent);\r\n\r\n break;\r\n\r\n case \"toggleControls\":\r\n instance.toggleControls();\r\n\r\n break;\r\n\r\n case \"next\":\r\n instance.next();\r\n\r\n break;\r\n\r\n case \"nextOrClose\":\r\n if (instance.group.length > 1) {\r\n instance.next();\r\n } else {\r\n instance.close(self.startEvent);\r\n }\r\n\r\n break;\r\n\r\n case \"zoom\":\r\n if (current.type == \"image\" && (current.isLoaded || current.$ghost)) {\r\n if (instance.canPan()) {\r\n instance.scaleToFit();\r\n } else if (instance.isScaledDown()) {\r\n instance.scaleToActual(tapX, tapY);\r\n } else if (instance.group.length < 2) {\r\n instance.close(self.startEvent);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n };\r\n\r\n // Ignore right click\r\n if (e.originalEvent && e.originalEvent.button == 2) {\r\n return;\r\n }\r\n\r\n // Skip if clicked on the scrollbar\r\n if (!$target.is(\"img\") && tapX > $target[0].clientWidth + $target.offset().left) {\r\n return;\r\n }\r\n\r\n // Check where is clicked\r\n if ($target.is(\".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container\")) {\r\n where = \"Outside\";\r\n } else if ($target.is(\".fancybox-slide\")) {\r\n where = \"Slide\";\r\n } else if (\r\n instance.current.$content &&\r\n instance.current.$content\r\n .find($target)\r\n .addBack()\r\n .filter($target).length\r\n ) {\r\n where = \"Content\";\r\n } else {\r\n return;\r\n }\r\n\r\n // Check if this is a double tap\r\n if (self.tapped) {\r\n // Stop previously created single tap\r\n clearTimeout(self.tapped);\r\n self.tapped = null;\r\n\r\n // Skip if distance between taps is too big\r\n if (Math.abs(tapX - self.tapX) > 50 || Math.abs(tapY - self.tapY) > 50) {\r\n return this;\r\n }\r\n\r\n // OK, now we assume that this is a double-tap\r\n process(\"dblclick\" + where);\r\n } else {\r\n // Single tap will be processed if user has not clicked second time within 300ms\r\n // or there is no need to wait for double-tap\r\n self.tapX = tapX;\r\n self.tapY = tapY;\r\n\r\n if (current.opts[\"dblclick\" + where] && current.opts[\"dblclick\" + where] !== current.opts[\"click\" + where]) {\r\n self.tapped = setTimeout(function () {\r\n self.tapped = null;\r\n\r\n if (!instance.isAnimating) {\r\n process(\"click\" + where);\r\n }\r\n }, 500);\r\n } else {\r\n process(\"click\" + where);\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n $(document)\r\n .on(\"onActivate.fb\", function (e, instance) {\r\n if (instance && !instance.Guestures) {\r\n instance.Guestures = new Guestures(instance);\r\n }\r\n })\r\n .on(\"beforeClose.fb\", function (e, instance) {\r\n if (instance && instance.Guestures) {\r\n instance.Guestures.destroy();\r\n }\r\n });\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// SlideShow\r\n// Enables slideshow functionality\r\n//\r\n// Example of usage:\r\n// $.fancybox.getInstance().SlideShow.start()\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n slideShow: '\"\r\n },\r\n slideShow: {\r\n autoStart: false,\r\n speed: 3000,\r\n progress: true\r\n }\r\n });\r\n\r\n var SlideShow = function (instance) {\r\n this.instance = instance;\r\n this.init();\r\n };\r\n\r\n $.extend(SlideShow.prototype, {\r\n timer: null,\r\n isActive: false,\r\n $button: null,\r\n\r\n init: function () {\r\n var self = this,\r\n instance = self.instance,\r\n opts = instance.group[instance.currIndex].opts.slideShow;\r\n\r\n self.$button = instance.$refs.toolbar.find(\"[data-fancybox-play]\").on(\"click\", function () {\r\n self.toggle();\r\n });\r\n\r\n if (instance.group.length < 2 || !opts) {\r\n self.$button.hide();\r\n } else if (opts.progress) {\r\n self.$progress = $('
').appendTo(instance.$refs.inner);\r\n }\r\n },\r\n\r\n set: function (force) {\r\n var self = this,\r\n instance = self.instance,\r\n current = instance.current;\r\n\r\n // Check if reached last element\r\n if (current && (force === true || current.opts.loop || instance.currIndex < instance.group.length - 1)) {\r\n if (self.isActive && current.contentType !== \"video\") {\r\n if (self.$progress) {\r\n $.fancybox.animate(self.$progress.show(), {\r\n scaleX: 1\r\n }, current.opts.slideShow.speed);\r\n }\r\n\r\n self.timer = setTimeout(function () {\r\n if (!instance.current.opts.loop && instance.current.index == instance.group.length - 1) {\r\n instance.jumpTo(0);\r\n } else {\r\n instance.next();\r\n }\r\n }, current.opts.slideShow.speed);\r\n }\r\n } else {\r\n self.stop();\r\n instance.idleSecondsCounter = 0;\r\n instance.showControls();\r\n }\r\n },\r\n\r\n clear: function () {\r\n var self = this;\r\n\r\n clearTimeout(self.timer);\r\n\r\n self.timer = null;\r\n\r\n if (self.$progress) {\r\n self.$progress.removeAttr(\"style\").hide();\r\n }\r\n },\r\n\r\n start: function () {\r\n var self = this,\r\n current = self.instance.current;\r\n\r\n if (current) {\r\n self.$button\r\n .attr(\"title\", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_STOP)\r\n .removeClass(\"fancybox-button--play\")\r\n .addClass(\"fancybox-button--pause\");\r\n\r\n self.isActive = true;\r\n\r\n if (current.isComplete) {\r\n self.set(true);\r\n }\r\n\r\n self.instance.trigger(\"onSlideShowChange\", true);\r\n }\r\n },\r\n\r\n stop: function () {\r\n var self = this,\r\n current = self.instance.current;\r\n\r\n self.clear();\r\n\r\n self.$button\r\n .attr(\"title\", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_START)\r\n .removeClass(\"fancybox-button--pause\")\r\n .addClass(\"fancybox-button--play\");\r\n\r\n self.isActive = false;\r\n\r\n self.instance.trigger(\"onSlideShowChange\", false);\r\n\r\n if (self.$progress) {\r\n self.$progress.removeAttr(\"style\").hide();\r\n }\r\n },\r\n\r\n toggle: function () {\r\n var self = this;\r\n\r\n if (self.isActive) {\r\n self.stop();\r\n } else {\r\n self.start();\r\n }\r\n }\r\n });\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n if (instance && !instance.SlideShow) {\r\n instance.SlideShow = new SlideShow(instance);\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (firstRun) {\r\n if (SlideShow && current.opts.slideShow.autoStart) {\r\n SlideShow.start();\r\n }\r\n } else if (SlideShow && SlideShow.isActive) {\r\n SlideShow.clear();\r\n }\r\n },\r\n\r\n \"afterShow.fb\": function (e, instance, current) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow && SlideShow.isActive) {\r\n SlideShow.set();\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n // \"P\" or Spacebar\r\n if (SlideShow && current.opts.slideShow && (keycode === 80 || keycode === 32) && !$(document.activeElement).is(\"button,a,input\")) {\r\n keypress.preventDefault();\r\n\r\n SlideShow.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb onDeactivate.fb\": function (e, instance) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow) {\r\n SlideShow.stop();\r\n }\r\n }\r\n });\r\n\r\n // Page Visibility API to pause slideshow when window is not active\r\n $(document).on(\"visibilitychange\", function () {\r\n var instance = $.fancybox.getInstance(),\r\n SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow && SlideShow.isActive) {\r\n if (document.hidden) {\r\n SlideShow.clear();\r\n } else {\r\n SlideShow.set();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// FullScreen\r\n// Adds fullscreen functionality\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n // Collection of methods supported by user browser\r\n var fn = (function () {\r\n var fnMap = [\r\n [\"requestFullscreen\", \"exitFullscreen\", \"fullscreenElement\", \"fullscreenEnabled\", \"fullscreenchange\", \"fullscreenerror\"],\r\n // new WebKit\r\n [\r\n \"webkitRequestFullscreen\",\r\n \"webkitExitFullscreen\",\r\n \"webkitFullscreenElement\",\r\n \"webkitFullscreenEnabled\",\r\n \"webkitfullscreenchange\",\r\n \"webkitfullscreenerror\"\r\n ],\r\n // old WebKit (Safari 5.1)\r\n [\r\n \"webkitRequestFullScreen\",\r\n \"webkitCancelFullScreen\",\r\n \"webkitCurrentFullScreenElement\",\r\n \"webkitCancelFullScreen\",\r\n \"webkitfullscreenchange\",\r\n \"webkitfullscreenerror\"\r\n ],\r\n [\r\n \"mozRequestFullScreen\",\r\n \"mozCancelFullScreen\",\r\n \"mozFullScreenElement\",\r\n \"mozFullScreenEnabled\",\r\n \"mozfullscreenchange\",\r\n \"mozfullscreenerror\"\r\n ],\r\n [\"msRequestFullscreen\", \"msExitFullscreen\", \"msFullscreenElement\", \"msFullscreenEnabled\", \"MSFullscreenChange\", \"MSFullscreenError\"]\r\n ];\r\n\r\n var ret = {};\r\n\r\n for (var i = 0; i < fnMap.length; i++) {\r\n var val = fnMap[i];\r\n\r\n if (val && val[1] in document) {\r\n for (var j = 0; j < val.length; j++) {\r\n ret[fnMap[0][j]] = val[j];\r\n }\r\n\r\n return ret;\r\n }\r\n }\r\n\r\n return false;\r\n })();\r\n\r\n if (fn) {\r\n var FullScreen = {\r\n request: function (elem) {\r\n elem = elem || document.documentElement;\r\n\r\n elem[fn.requestFullscreen](elem.ALLOW_KEYBOARD_INPUT);\r\n },\r\n exit: function () {\r\n document[fn.exitFullscreen]();\r\n },\r\n toggle: function (elem) {\r\n elem = elem || document.documentElement;\r\n\r\n if (this.isFullscreen()) {\r\n this.exit();\r\n } else {\r\n this.request(elem);\r\n }\r\n },\r\n isFullscreen: function () {\r\n return Boolean(document[fn.fullscreenElement]);\r\n },\r\n enabled: function () {\r\n return Boolean(document[fn.fullscreenEnabled]);\r\n }\r\n };\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n fullScreen: '\"\r\n },\r\n fullScreen: {\r\n autoStart: false\r\n }\r\n });\r\n\r\n $(document).on(fn.fullscreenchange, function () {\r\n var isFullscreen = FullScreen.isFullscreen(),\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n // If image is zooming, then force to stop and reposition properly\r\n if (instance.current && instance.current.type === \"image\" && instance.isAnimating) {\r\n instance.isAnimating = false;\r\n\r\n instance.update(true, true, 0);\r\n\r\n if (!instance.isComplete) {\r\n instance.complete();\r\n }\r\n }\r\n\r\n instance.trigger(\"onFullscreenChange\", isFullscreen);\r\n\r\n instance.$refs.container.toggleClass(\"fancybox-is-fullscreen\", isFullscreen);\r\n\r\n instance.$refs.toolbar\r\n .find(\"[data-fancybox-fullscreen]\")\r\n .toggleClass(\"fancybox-button--fsenter\", !isFullscreen)\r\n .toggleClass(\"fancybox-button--fsexit\", isFullscreen);\r\n }\r\n });\r\n }\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var $container;\r\n\r\n if (!fn) {\r\n instance.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").remove();\r\n\r\n return;\r\n }\r\n\r\n if (instance && instance.group[instance.currIndex].opts.fullScreen) {\r\n $container = instance.$refs.container;\r\n\r\n $container.on(\"click.fb-fullscreen\", \"[data-fancybox-fullscreen]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n FullScreen.toggle();\r\n });\r\n\r\n if (instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true) {\r\n FullScreen.request();\r\n }\r\n\r\n // Expose API\r\n instance.FullScreen = FullScreen;\r\n } else if (instance) {\r\n instance.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").hide();\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n // \"F\"\r\n if (instance && instance.FullScreen && keycode === 70) {\r\n keypress.preventDefault();\r\n\r\n instance.FullScreen.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance) {\r\n if (instance && instance.FullScreen && instance.$refs.container.hasClass(\"fancybox-is-fullscreen\")) {\r\n FullScreen.exit();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// Thumbs\r\n// Displays thumbnails in a grid\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n var CLASS = \"fancybox-thumbs\",\r\n CLASS_ACTIVE = CLASS + \"-active\";\r\n\r\n // Make sure there are default values\r\n $.fancybox.defaults = $.extend(\r\n true, {\r\n btnTpl: {\r\n thumbs: '\"\r\n },\r\n thumbs: {\r\n autoStart: false, // Display thumbnails on opening\r\n hideOnClose: true, // Hide thumbnail grid when closing animation starts\r\n parentEl: \".fancybox-container\", // Container is injected into this element\r\n axis: \"y\" // Vertical (y) or horizontal (x) scrolling\r\n }\r\n },\r\n $.fancybox.defaults\r\n );\r\n\r\n var FancyThumbs = function (instance) {\r\n this.init(instance);\r\n };\r\n\r\n $.extend(FancyThumbs.prototype, {\r\n $button: null,\r\n $grid: null,\r\n $list: null,\r\n isVisible: false,\r\n isActive: false,\r\n\r\n init: function (instance) {\r\n var self = this,\r\n group = instance.group,\r\n enabled = 0;\r\n\r\n self.instance = instance;\r\n self.opts = group[instance.currIndex].opts.thumbs;\r\n\r\n instance.Thumbs = self;\r\n\r\n self.$button = instance.$refs.toolbar.find(\"[data-fancybox-thumbs]\");\r\n\r\n // Enable thumbs if at least two group items have thumbnails\r\n for (var i = 0, len = group.length; i < len; i++) {\r\n if (group[i].thumb) {\r\n enabled++;\r\n }\r\n\r\n if (enabled > 1) {\r\n break;\r\n }\r\n }\r\n\r\n if (enabled > 1 && !!self.opts) {\r\n self.$button.removeAttr(\"style\").on(\"click\", function () {\r\n self.toggle();\r\n });\r\n\r\n self.isActive = true;\r\n } else {\r\n self.$button.hide();\r\n }\r\n },\r\n\r\n create: function () {\r\n var self = this,\r\n instance = self.instance,\r\n parentEl = self.opts.parentEl,\r\n list = [],\r\n src;\r\n\r\n if (!self.$grid) {\r\n // Create main element\r\n self.$grid = $('
').appendTo(\r\n instance.$refs.container\r\n .find(parentEl)\r\n .addBack()\r\n .filter(parentEl)\r\n );\r\n\r\n // Add \"click\" event that performs gallery navigation\r\n self.$grid.on(\"click\", \"a\", function () {\r\n instance.jumpTo($(this).attr(\"data-index\"));\r\n });\r\n }\r\n\r\n // Build the list\r\n if (!self.$list) {\r\n self.$list = $('
').appendTo(self.$grid);\r\n }\r\n\r\n $.each(instance.group, function (i, item) {\r\n src = item.thumb;\r\n\r\n if (!src && item.type === \"image\") {\r\n src = item.src;\r\n }\r\n\r\n list.push(\r\n '\"\r\n );\r\n });\r\n\r\n self.$list[0].innerHTML = list.join(\"\");\r\n\r\n if (self.opts.axis === \"x\") {\r\n // Set fixed width for list element to enable horizontal scrolling\r\n self.$list.width(\r\n parseInt(self.$grid.css(\"padding-right\"), 10) +\r\n instance.group.length *\r\n self.$list\r\n .children()\r\n .eq(0)\r\n .outerWidth(true)\r\n );\r\n }\r\n },\r\n\r\n focus: function (duration) {\r\n var self = this,\r\n $list = self.$list,\r\n $grid = self.$grid,\r\n thumb,\r\n thumbPos;\r\n\r\n if (!self.instance.current) {\r\n return;\r\n }\r\n\r\n thumb = $list\r\n .children()\r\n .removeClass(CLASS_ACTIVE)\r\n .filter('[data-index=\"' + self.instance.current.index + '\"]')\r\n .addClass(CLASS_ACTIVE);\r\n\r\n thumbPos = thumb.position();\r\n\r\n // Check if need to scroll to make current thumb visible\r\n if (self.opts.axis === \"y\" && (thumbPos.top < 0 || thumbPos.top > $list.height() - thumb.outerHeight())) {\r\n $list.stop().animate({\r\n scrollTop: $list.scrollTop() + thumbPos.top\r\n },\r\n duration\r\n );\r\n } else if (\r\n self.opts.axis === \"x\" &&\r\n (thumbPos.left < $grid.scrollLeft() || thumbPos.left > $grid.scrollLeft() + ($grid.width() - thumb.outerWidth()))\r\n ) {\r\n $list\r\n .parent()\r\n .stop()\r\n .animate({\r\n scrollLeft: thumbPos.left\r\n },\r\n duration\r\n );\r\n }\r\n },\r\n\r\n update: function () {\r\n var that = this;\r\n that.instance.$refs.container.toggleClass(\"fancybox-show-thumbs\", this.isVisible);\r\n\r\n if (that.isVisible) {\r\n if (!that.$grid) {\r\n that.create();\r\n }\r\n\r\n that.instance.trigger(\"onThumbsShow\");\r\n\r\n that.focus(0);\r\n } else if (that.$grid) {\r\n that.instance.trigger(\"onThumbsHide\");\r\n }\r\n\r\n // Update content position\r\n that.instance.update();\r\n },\r\n\r\n hide: function () {\r\n this.isVisible = false;\r\n this.update();\r\n },\r\n\r\n show: function () {\r\n this.isVisible = true;\r\n this.update();\r\n },\r\n\r\n toggle: function () {\r\n this.isVisible = !this.isVisible;\r\n this.update();\r\n }\r\n });\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var Thumbs;\r\n\r\n if (instance && !instance.Thumbs) {\r\n Thumbs = new FancyThumbs(instance);\r\n\r\n if (Thumbs.isActive && Thumbs.opts.autoStart === true) {\r\n Thumbs.show();\r\n }\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, item, firstRun) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n if (Thumbs && Thumbs.isVisible) {\r\n Thumbs.focus(firstRun ? 0 : 250);\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n // \"G\"\r\n if (Thumbs && Thumbs.isActive && keycode === 71) {\r\n keypress.preventDefault();\r\n\r\n Thumbs.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n if (Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false) {\r\n Thumbs.$grid.hide();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\n//// ==========================================================================\r\n//\r\n// Share\r\n// Displays simple form for sharing current url\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n share: '\"\r\n },\r\n share: {\r\n url: function (instance, item) {\r\n return (\r\n (!instance.currentHash && !(item.type === \"inline\" || item.type === \"html\") ? item.origSrc || item.src : false) || window.location\r\n );\r\n },\r\n tpl: '
' +\r\n \"

{{SHARE}}

\" +\r\n \"

\" +\r\n '' +\r\n '' +\r\n \"Facebook\" +\r\n \"\" +\r\n '' +\r\n '' +\r\n \"Twitter\" +\r\n \"\" +\r\n '' +\r\n '' +\r\n \"Pinterest\" +\r\n \"\" +\r\n \"

\" +\r\n '

' +\r\n \"
\"\r\n }\r\n });\r\n\r\n function escapeHtml(string) {\r\n var entityMap = {\r\n \"&\": \"&\",\r\n \"<\": \"<\",\r\n \">\": \">\",\r\n '\"': \""\",\r\n \"'\": \"'\",\r\n \"/\": \"/\",\r\n \"`\": \"`\",\r\n \"=\": \"=\"\r\n };\r\n\r\n return String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n return entityMap[s];\r\n });\r\n }\r\n\r\n $(document).on(\"click\", \"[data-fancybox-share]\", function () {\r\n var instance = $.fancybox.getInstance(),\r\n current = instance.current || null,\r\n url,\r\n tpl;\r\n\r\n if (!current) {\r\n return;\r\n }\r\n\r\n if ($.type(current.opts.share.url) === \"function\") {\r\n url = current.opts.share.url.apply(current, [instance, current]);\r\n }\r\n\r\n tpl = current.opts.share.tpl\r\n .replace(/\\{\\{media\\}\\}/g, current.type === \"image\" ? encodeURIComponent(current.src) : \"\")\r\n .replace(/\\{\\{url\\}\\}/g, encodeURIComponent(url))\r\n .replace(/\\{\\{url_raw\\}\\}/g, escapeHtml(url))\r\n .replace(/\\{\\{descr\\}\\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : \"\");\r\n\r\n $.fancybox.open({\r\n src: instance.translate(instance, tpl),\r\n type: \"html\",\r\n opts: {\r\n touch: false,\r\n animationEffect: false,\r\n afterLoad: function (shareInstance, shareCurrent) {\r\n // Close self if parent instance is closing\r\n instance.$refs.container.one(\"beforeClose.fb\", function () {\r\n shareInstance.close(null, 0);\r\n });\r\n\r\n // Opening links in a popup window\r\n shareCurrent.$content.find(\".fancybox-share__button\").click(function () {\r\n window.open(this.href, \"Share\", \"width=550, height=450\");\r\n return false;\r\n });\r\n },\r\n mobile: {\r\n autoFocus: false\r\n }\r\n }\r\n });\r\n });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// Hash\r\n// Enables linking to each modal\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n \"use strict\";\r\n\r\n // Simple $.escapeSelector polyfill (for jQuery prior v3)\r\n if (!$.escapeSelector) {\r\n $.escapeSelector = function (sel) {\r\n var rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\r\n var fcssescape = function (ch, asCodePoint) {\r\n if (asCodePoint) {\r\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\r\n if (ch === \"\\0\") {\r\n return \"\\uFFFD\";\r\n }\r\n\r\n // Control characters and (dependent upon position) numbers get escaped as code points\r\n return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\r\n }\r\n\r\n // Other potentially-special ASCII characters get backslash-escaped\r\n return \"\\\\\" + ch;\r\n };\r\n\r\n return (sel + \"\").replace(rcssescape, fcssescape);\r\n };\r\n }\r\n\r\n // Get info about gallery name and current index from url\r\n function parseUrl() {\r\n var hash = window.location.hash.substr(1),\r\n rez = hash.split(\"-\"),\r\n index = rez.length > 1 && /^\\+?\\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1,\r\n gallery = rez.join(\"-\");\r\n\r\n return {\r\n hash: hash,\r\n /* Index is starting from 1 */\r\n index: index < 1 ? 1 : index,\r\n gallery: gallery\r\n };\r\n }\r\n\r\n // Trigger click evnt on links to open new fancyBox instance\r\n function triggerFromUrl(url) {\r\n if (url.gallery !== \"\") {\r\n // If we can find element matching 'data-fancybox' atribute,\r\n // then triggering click event should start fancyBox\r\n $(\"[data-fancybox='\" + $.escapeSelector(url.gallery) + \"']\")\r\n .eq(url.index - 1)\r\n .focus()\r\n .trigger(\"click.fb-start\");\r\n }\r\n }\r\n\r\n // Get gallery name from current instance\r\n function getGalleryID(instance) {\r\n var opts, ret;\r\n\r\n if (!instance) {\r\n return false;\r\n }\r\n\r\n opts = instance.current ? instance.current.opts : instance.opts;\r\n ret = opts.hash || (opts.$orig ? opts.$orig.data(\"fancybox\") || opts.$orig.data(\"fancybox-trigger\") : \"\");\r\n\r\n return ret === \"\" ? false : ret;\r\n }\r\n\r\n // Start when DOM becomes ready\r\n $(function () {\r\n // Check if user has disabled this module\r\n if ($.fancybox.defaults.hash === false) {\r\n return;\r\n }\r\n\r\n // Update hash when opening/closing fancyBox\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var url, gallery;\r\n\r\n if (instance.group[instance.currIndex].opts.hash === false) {\r\n return;\r\n }\r\n\r\n url = parseUrl();\r\n gallery = getGalleryID(instance);\r\n\r\n // Make sure gallery start index matches index from hash\r\n if (gallery && url.gallery && gallery == url.gallery) {\r\n instance.currIndex = url.index - 1;\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n var gallery;\r\n\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n // Check if need to update window hash\r\n gallery = getGalleryID(instance);\r\n\r\n if (!gallery) {\r\n return;\r\n }\r\n\r\n // Variable containing last hash value set by fancyBox\r\n // It will be used to determine if fancyBox needs to close after hash change is detected\r\n instance.currentHash = gallery + (instance.group.length > 1 ? \"-\" + (current.index + 1) : \"\");\r\n\r\n // If current hash is the same (this instance most likely is opened by hashchange), then do nothing\r\n if (window.location.hash === \"#\" + instance.currentHash) {\r\n return;\r\n }\r\n\r\n if (firstRun && !instance.origHash) {\r\n instance.origHash = window.location.hash;\r\n }\r\n\r\n if (instance.hashTimer) {\r\n clearTimeout(instance.hashTimer);\r\n }\r\n\r\n // Update hash\r\n instance.hashTimer = setTimeout(function () {\r\n if (\"replaceState\" in window.history) {\r\n window.history[firstRun ? \"pushState\" : \"replaceState\"]({},\r\n document.title,\r\n window.location.pathname + window.location.search + \"#\" + instance.currentHash\r\n );\r\n\r\n if (firstRun) {\r\n instance.hasCreatedHistory = true;\r\n }\r\n } else {\r\n window.location.hash = instance.currentHash;\r\n }\r\n\r\n instance.hashTimer = null;\r\n }, 300);\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance, current) {\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n clearTimeout(instance.hashTimer);\r\n\r\n // Goto previous history entry\r\n if (instance.currentHash && instance.hasCreatedHistory) {\r\n window.history.back();\r\n } else if (instance.currentHash) {\r\n if (\"replaceState\" in window.history) {\r\n window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || \"\"));\r\n } else {\r\n window.location.hash = instance.origHash;\r\n }\r\n }\r\n\r\n instance.currentHash = null;\r\n }\r\n });\r\n\r\n // Check if need to start/close after url has changed\r\n $(window).on(\"hashchange.fb\", function () {\r\n var url = parseUrl(),\r\n fb = null;\r\n\r\n // Find last fancyBox instance that has \"hash\"\r\n $.each(\r\n $(\".fancybox-container\")\r\n .get()\r\n .reverse(),\r\n function (index, value) {\r\n var tmp = $(value).data(\"FancyBox\");\r\n\r\n if (tmp && tmp.currentHash) {\r\n fb = tmp;\r\n return false;\r\n }\r\n }\r\n );\r\n\r\n if (fb) {\r\n // Now, compare hash values\r\n if (fb.currentHash !== url.gallery + \"-\" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) {\r\n fb.currentHash = null;\r\n\r\n fb.close();\r\n }\r\n } else if (url.gallery !== \"\") {\r\n triggerFromUrl(url);\r\n }\r\n });\r\n\r\n // Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n setTimeout(function () {\r\n if (!$.fancybox.getInstance()) {\r\n triggerFromUrl(parseUrl());\r\n }\r\n }, 50);\r\n });\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// Wheel\r\n// Basic mouse weheel support for gallery navigation\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n var prevTime = new Date().getTime();\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance, current) {\r\n instance.$refs.stage.on(\"mousewheel DOMMouseScroll wheel MozMousePixelScroll\", function (e) {\r\n var current = instance.current,\r\n currTime = new Date().getTime();\r\n\r\n if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === \"auto\" && current.type !== \"image\")) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (current.$slide.hasClass(\"fancybox-animated\")) {\r\n return;\r\n }\r\n\r\n e = e.originalEvent || e;\r\n\r\n if (currTime - prevTime < 250) {\r\n return;\r\n }\r\n\r\n prevTime = currTime;\r\n\r\n instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? \"next\" : \"previous\"]();\r\n });\r\n }\r\n });\r\n})(document, jQuery);"],"sourceRoot":""}