PageSourceSearch

https://boseongmall.co.kr/ind-script/optimizer_user.php?filename=l…561442ddba198a451c23574&t=1740106487&user=T

js boseongmall.co.kr collected 2026-10-08 21:58:30 UTC 571,773 bytes, 14,238 lines download raw bytes

vendor: 4,310 bytes, line 1
1(function(a){a.isScrollToFixed=function(b){return !!a(b).data("ScrollToFixed")};a.ScrollToFixed=function(d,i){var m=this;m.$el=a(d);m.el=d;m.$el.data("ScrollToFixed",m);var c=false;var H=m.$el;var I;var F;var k;var e;var z;var E=0;var r=0;var j=-1;var f=-1;var u=null;var A;var g;function v(){H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed");f=-1;E=H.offset().top;r=H.offset().left;if(m.options.offsets){r+=(H.offset().left-H.position().left)}if(j==-1){j=r}I=H.css("position");c=true;if(m.options.bottom!=-1){H.trigger("preFixed.ScrollToFixed");x();H.trigger("fixed.ScrollToFixed")}}function o(){var J=m.options.limit;if(!J){return 0}if(typeof(J)==="function"){return J.apply(H)}return J}function q(){return I==="fixed"}function y(){return I==="absolute"}function h(){return !(q()||y())}function x(){if(!q()){var J=H[0].getBoundingClientRect();u.css({display:H.css("display"),width:J.width,height:J.height,"float":H.css("float")});cssOptions={"z-index":m.options.zIndex,position:"fixed",top:m.options.bottom==-1?t():"",bottom:m.options.bottom==-1?"":m.options.bottom,"margin-left":"0px"};if(!m.options.dontSetWidth){cssOptions.width=H.css("width")}H.css(cssOptions);H.addClass(m.options.baseClassName);if(m.options.className){H.addClass(m.options.className)}I="fixed"}}function b(){var K=o();var J=r;if(m.options.removeOffsets){J="";K=K-E}cssOptions={position:"absolute",top:K,left:J,"margin-left":"0px",bottom:""};if(!m.options.dontSetWidth){cssOptions.width=H.css("width")}H.css(cssOptions);I="absolute"}function l(){if(!h()){f=-1;u.css("display","none");H.css({"z-index":z,width:"",position:F,left:"",top:e,"margin-left":""});H.removeClass("scroll-to-fixed-fixed");if(m.options.className){H.removeClass(m.options.className)}I=null}}function w(J){if(J!=f){H.css("left",r-J);f=J}}function t(){var J=m.options.marginTop;if(!J){return 0}if(typeof(J)==="function"){return J.apply(H)}return J}function B(){if(!a.isScrollToFixed(H)||H.is(":hidden")){return}var M=c;var L=h();if(!c){v()}else{if(h()){E=H.offset().top;r=H.offset().left}}var J=a(window).scrollLeft();var N=a(window).scrollTop();var K=o();if(m.options.minWidth&&a(window).width()<m.options.minWidth){if(!h()||!M){p();H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed")}}else{if(m.options.maxWidth&&a(window).width()>m.options.maxWidth){if(!h()||!M){p();H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed")}}else{if(m.options.bottom==-1){if(K>0&&N>=K-t()){if(!L&&(!y()||!M)){p();H.trigger("preAbsolute.ScrollToFixed");b();H.trigger("unfixed.ScrollToFixed")}}else{if(N>=E-t()){if(!q()||!M){p();H.trigger("preFixed.ScrollToFixed");x();f=-1;H.trigger("fixed.ScrollToFixed")}w(J)}else{if(!h()||!M){p();H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed")}}}}else{if(K>0){if(N+a(window).height()-H.outerHeight(true)>=K-(t()||-n())){if(q()){p();H.trigger("preUnfixed.ScrollToFixed");if(F==="absolute"){b()}else{l()}H.trigger("unfixed.ScrollToFixed")}}else{if(!q()){p();H.trigger("preFixed.ScrollToFixed");x()}w(J);H.trigger("fixed.ScrollToFixed")}}else{w(J)}}}}}function n(){if(!m.options.bottom){return 0}return m.options.bottom}function p(){var J=H.css("position");if(J=="absolute"){H.trigger("postAbsolute.ScrollToFixed")}else{if(J=="fixed"){H.trigger("postFixed.ScrollToFixed")}else{H.trigger("postUnfixed.ScrollToFixed")}}}var D=function(J){if(H.is(":visible")){c=false;B()}else{l()}};var G=function(J){(!!window.requestAnimationFrame)?requestAnimationFrame(B):B()};var C=function(){var K=document.body;if(document.createElement&&K&&K.appendChild&&K.removeChild){var M=document.createElement("div");if(!M.getBoundingClientRect){return null}M.innerHTML="x";M.style.cssText="position:fixed;top:100px;";K.appendChild(M);var N=K.style.height,O=K.scrollTop;K.style.height="3000px";K.scrollTop=500;var J=M.getBoundingClientRect().top;K.style.height=N;var L=(J===100);K.removeChild(M);K.scrollTop=O;return L}return null};var s=function(J){J=J||window.event;if(J.preventDefault){J.preventDefault()}J.returnValue=false};m.init=function(){m.options=a.extend({},a.ScrollToFixed.defaultOptions,i);z=H.css("z-index");m.$el.css("z-index",m.options.zIndex);u=a("<div />");I=H.css("position");F=H.css("position");k=H.css("float");e=H.css("top");if(h()){m.$el.after(u)}
1a(window).bind("resize.ScrollToFixed",D);a(window).bind("scroll.ScrollToFixed",G);if("ontouchmove" in window){a(window).bind("touchmove.ScrollToFixed",B)}if(m.options.preFixed){H.bind("preFixed.ScrollToFixed",m.options.preFixed)}if(m.options.postFixed){H.bind("postFixed.ScrollToFixed",m.options.postFixed)}if(m.options.preUnfixed){H.bind("preUnfixed.ScrollToFixed",m.options.preUnfixed)}if(m.options.postUnfixed){H.bind("postUnfixed.ScrollToFixed",m.options.postUnfixed)}if(m.options.preAbsolute){H.bind("preAbsolute.ScrollToFixed",m.options.preAbsolute)}if(m.options.postAbsolute){H.bind("postAbsolute.ScrollToFixed",m.options.postAbsolute)}if(m.options.fixed){H.bind("fixed.ScrollToFixed",m.options.fixed)}if(m.options.unfixed){H.bind("unfixed.ScrollToFixed",m.options.unfixed)}if(m.options.spacerClass){u.addClass(m.options.spacerClass)}H.bind("resize.ScrollToFixed",function(){u.height(H.height())});H.bind("scroll.ScrollToFixed",function(){H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed");B()});H.bind("detach.ScrollToFixed",function(J){s(J);H.trigger("preUnfixed.ScrollToFixed");l();H.trigger("unfixed.ScrollToFixed");a(window).unbind("resize.ScrollToFixed",D);a(window).unbind("scroll.ScrollToFixed",G);H.unbind(".ScrollToFixed");u.remove();m.$el.removeData("ScrollToFixed")});D()};m.init()};a.ScrollToFixed.defaultOptions={marginTop:0,limit:0,bottom:-1,zIndex:1000,baseClassName:"scroll-to-fixed-fixed"};a.fn.scrollToFixed=function(b){return this.each(function(){(new a.ScrollToFixed(this,b))})}})(jQuery);
2/*
3     _ _      _       _
4 ___| (_) ___| | __  (_)___
5/ __| | |/ __| |/ /  | / __|
6\__ \ | | (__|   < _ | \__ \
7|___/_|_|\___|_|\_(_)/ |___/
8                   |__/
9
10 Version: 1.6.0
11  Author: Ken Wheeler
12 Website: http://kenwheeler.github.io
13    Docs: http://kenwheeler.github.io/slick
14    Repo: http://github.com/kenwheeler/slick
15  Issues: http://github.com/kenwheeler/slick/issues
16
17 */
18/* global window, document, define, jQuery, setInterval, clearInterval */
19(function(factory) {
20    'use strict';
21    if (typeof define === 'function' && define.amd) {
22        define(['jquery'], factory);
23    } else if (typeof exports !== 'undefined') {
24        module.exports = factory(require('jquery'));
25    } else {
26        factory(jQuery);
27    }
28
29}(function($) {
30    'use strict';
31    var Slick = window.Slick || {};
32
33    Slick = (function() {
34
35        var instanceUid = 0;
36
37        function Slick(element, settings) {
38
39            var _ = this, dataSettings;
40
41            _.defaults = {
42                accessibility: true,
43                adaptiveHeight: false,
44                appendArrows: $(element),
45                appendDots: $(element),
46                arrows: true,
47                asNavFor: null,
48                prevArrow: '<button type="button" data-role="none" class="slick-prev" aria-label="Previous" tabindex="0" role="button"><span class="material-symbols-outlined">chevron_left</span></button>',
49                nextArrow: '<button type="button" data-role="none" class="slick-next" aria-label="Next" tabindex="0" role="button"><span class="material-symbols-outlined">chevron_right</span></button>',
50                autoplay: false,
51                autoplaySpeed: 3000,
52                centerMode: false,
53                centerPadding: '50px',
54                cssEase: 'ease',
55                customPaging: function(slider, i) {
56                    return $('<button type="button" data-role="none" role="button" tabindex="0" />').text(i + 1);
57                },
58                dots: false,
59                dotsClass: 'slick-dots',
60                draggable: true,
61                easing: 'linear',
62                edgeFriction: 0.35,
63                fade: false,
64                focusOnSelect: false,
65                infinite: true,
66                initialSlide: 0,
67                lazyLoad: 'ondemand',
68                mobileFirst: false,
69                pauseOnHover: true,
70                pauseOnFocus: true,
71                pauseOnDotsHover: false,
72                respondTo: 'window',
73                responsive: null,
74                rows: 1,
75                rtl: false,
76                slide: '',
77                slidesPerRow: 1,
78                slidesToShow: 1,
79                slidesToScroll: 1,
80                speed: 500,
81                swipe: true,
82                swipeToSlide: false,
83                touchMove: true,
84                touchThreshold: 5,
85                useCSS: true,
86                useTransform: true,
87                variableWidth: false,
88                vertical: false,
89                verticalSwiping: false,
90                waitForAnimate: true,
91                zIndex: 3
92            };
93
94            _.initials = {
95                animating: false,
96                dragging: false,
97                autoPlayTimer: null,
98                currentDirection: 0,
99                currentLeft: null,
100                currentSlide: 0,
101                direction: 1,
102                $dots: null,
103                listWidth: null,
104                listHeight: null,
105                loadIndex: 0,
106                $nextArrow: null,
107                $prevArrow: null,
108                slideCount: null,
109                slideWidth: null,
110                $slideTrack: null,
111                $slides: null,
112                sliding: false,
113                slideOffset: 0,
114                swipeLeft: null
vendor: 11,177 bytes, lines 114-497
114,
115                $list: null,
116                touchObject: {},
117                transformsEnabled: false,
118                unslicked: false
119            };
120
121            $.extend(_, _.initials);
122
123            _.activeBreakpoint = null;
124            _.animType = null;
125            _.animProp = null;
126            _.breakpoints = [];
127            _.breakpointSettings = [];
128            _.cssTransitions = false;
129            _.focussed = false;
130            _.interrupted = false;
131            _.hidden = 'hidden';
132            _.paused = true;
133            _.positionProp = null;
134            _.respondTo = null;
135            _.rowCount = 1;
136            _.shouldClick = true;
137            _.$slider = $(element);
138            _.$slidesCache = null;
139            _.transformType = null;
140            _.transitionType = null;
141            _.visibilityChange = 'visibilitychange';
142            _.windowWidth = 0;
143            _.windowTimer = null;
144
145            dataSettings = $(element).data('slick') || {};
146
147            _.options = $.extend({}, _.defaults, settings, dataSettings);
148
149            _.currentSlide = _.options.initialSlide;
150
151            _.originalSettings = _.options;
152
153            if (typeof document.mozHidden !== 'undefined') {
154                _.hidden = 'mozHidden';
155                _.visibilityChange = 'mozvisibilitychange';
156            } else if (typeof document.webkitHidden !== 'undefined') {
157                _.hidden = 'webkitHidden';
158                _.visibilityChange = 'webkitvisibilitychange';
159            }
160
161            _.autoPlay = $.proxy(_.autoPlay, _);
162            _.autoPlayClear = $.proxy(_.autoPlayClear, _);
163            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);
164            _.changeSlide = $.proxy(_.changeSlide, _);
165            _.clickHandler = $.proxy(_.clickHandler, _);
166            _.selectHandler = $.proxy(_.selectHandler, _);
167            _.setPosition = $.proxy(_.setPosition, _);
168            _.swipeHandler = $.proxy(_.swipeHandler, _);
169            _.dragHandler = $.proxy(_.dragHandler, _);
170            _.keyHandler = $.proxy(_.keyHandler, _);
171
172            _.instanceUid = instanceUid++;
173
174            // A simple way to check for HTML strings
175            // Strict HTML recognition (must start with <)
176            // Extracted from jQuery v1.11 source
177            _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/;
178
179
180            _.registerBreakpoints();
181            _.init(true);
182
183        }
184
185        return Slick;
186
187    }());
188
189    Slick.prototype.activateADA = function() {
190        var _ = this;
191
192        _.$slideTrack.find('.slick-active').attr({
193            'aria-hidden': 'false'
194        }).find('a, input, button, select').attr({
195            'tabindex': '0'
196        });
197
198    };
199
200    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {
201
202        var _ = this;
203
204        if (typeof(index) === 'boolean') {
205            addBefore = index;
206            index = null;
207        } else if (index < 0 || (index >= _.slideCount)) {
208            return false;
209        }
210
211        _.unload();
212
213        if (typeof(index) === 'number') {
214            if (index === 0 && _.$slides.length === 0) {
215                $(markup).appendTo(_.$slideTrack);
216            } else if (addBefore) {
217                $(markup).insertBefore(_.$slides.eq(index));
218            } else {
219                $(markup).insertAfter(_.$slides.eq(index));
220            }
221        } else {
222            if (addBefore === true) {
223                $(markup).prependTo(_.$slideTrack);
224            } else {
225                $(markup).appendTo(_.$slideTrack);
226            }
227        }
228
229        _.$slides = _.$slideTrack.children(this.options.slide);
230
231        _.$slideTrack.children(this.options.slide).detach();
232
233        _.$slideTrack.append(_.$slides);
234
235        _.$slides.each(function(index, element) {
236            $(element).attr('data-slick-index', index);
237        });
238
239        _.$slidesCache = _.$slides;
240
241        _.reinit();
242
243    };
244
245    Slick.prototype.animateHeight = function() {
246        var _ = this;
247        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
248            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
249            _.$list.animate({
250                height: targetHeight
251            }, _.options.speed);
252        }
253    };
254
255    Slick.prototype.animateSlide = function(targetLeft, callback) {
256
257        var animProps = {},
258            _ = this;
259
260        _.animateHeight();
261
262        if (_.options.rtl === true && _.options.vertical === false) {
263            targetLeft = -targetLeft;
264        }
265        if (_.transformsEnabled === false) {
266            if (_.options.vertical === false) {
267                _.$slideTrack.animate({
268                    left: targetLeft
269                }, _.options.speed, _.options.easing, callback);
270            } else {
271                _.$slideTrack.animate({
272                    top: targetLeft
273                }, _.options.speed, _.options.easing, callback);
274            }
275
276        } else {
277
278            if (_.cssTransitions === false) {
279                if (_.options.rtl === true) {
280                    _.currentLeft = -(_.currentLeft);
281                }
282                $({
283                    animStart: _.currentLeft
284                }).animate({
285                    animStart: targetLeft
286                }, {
287                    duration: _.options.speed,
288                    easing: _.options.easing,
289                    step: function(now) {
290                        now = Math.ceil(now);
291                        if (_.options.vertical === false) {
292                            animProps[_.animType] = 'translate(' +
293                                now + 'px, 0px)';
294                            _.$slideTrack.css(animProps);
295                        } else {
296                            animProps[_.animType] = 'translate(0px,' +
297                                now + 'px)';
298                            _.$slideTrack.css(animProps);
299                        }
300                    },
301                    complete: function() {
302                        if (callback) {
303                            callback.call();
304                        }
305                    }
306                });
307
308            } else {
309
310                _.applyTransition();
311                targetLeft = Math.ceil(targetLeft);
312
313                if (_.options.vertical === false) {
314                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';
315                } else {
316                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';
317                }
318                _.$slideTrack.css(animProps);
319
320                if (callback) {
321                    setTimeout(function() {
322
323                        _.disableTransition();
324
325                        callback.call();
326                    }, _.options.speed);
327                }
328
329            }
330
331        }
332
333    };
334
335    Slick.prototype.getNavTarget = function() {
336
337        var _ = this,
338            asNavFor = _.options.asNavFor;
339
340        if ( asNavFor && asNavFor !== null ) {
341            asNavFor = $(asNavFor).not(_.$slider);
342        }
343
344        return asNavFor;
345
346    };
347
348    Slick.prototype.asNavFor = function(index) {
349
350        var _ = this,
351            asNavFor = _.getNavTarget();
352
353        if ( asNavFor !== null && typeof asNavFor === 'object' ) {
354            asNavFor.each(function() {
355                var target = $(this).slick('getSlick');
356                if(!target.unslicked) {
357                    target.slideHandler(index, true);
358                }
359            });
360        }
361
362    };
363
364    Slick.prototype.applyTransition = function(slide) {
365
366        var _ = this,
367            transition = {};
368
369        if (_.options.fade === false) {
370            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;
371        } else {
372            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;
373        }
374
375        if (_.options.fade === false) {
376            _.$slideTrack.css(transition);
377        } else {
378            _.$slides.eq(slide).css(transition);
379        }
380
381    };
382
383    Slick.prototype.autoPlay = function() {
384
385        var _ = this;
386
387        _.autoPlayClear();
388
389        if ( _.slideCount > _.options.slidesToShow ) {
390            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );
391        }
392
393    };
394
395    Slick.prototype.autoPlayClear = function() {
396
397        var _ = this;
398
399        if (_.autoPlayTimer) {
400            clearInterval(_.autoPlayTimer);
401        }
402
403    };
404
405    Slick.prototype.autoPlayIterator = function() {
406
407        var _ = this,
408            slideTo = _.currentSlide + _.options.slidesToScroll;
409
410        if ( !_.paused && !_.interrupted && !_.focussed ) {
411
412            if ( _.options.infinite === false ) {
413
414                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {
415                    _.direction = 0;
416                }
417
418                else if ( _.direction === 0 ) {
419
420                    slideTo = _.currentSlide - _.options.slidesToScroll;
421
422                    if ( _.currentSlide - 1 === 0 ) {
423                        _.direction = 1;
424                    }
425
426                }
427
428            }
429
430            _.slideHandler( slideTo );
431
432        }
433
434    };
435
436    Slick.prototype.buildArrows = function() {
437
438        var _ = this;
439
440        if (_.options.arrows === true ) {
441
442            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');
443            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');
444
445            if( _.slideCount > _.options.slidesToShow ) {
446
447                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
448                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
449
450                if (_.htmlExpr.test(_.options.prevArrow)) {
451                    _.$prevArrow.prependTo(_.options.appendArrows);
452                }
453
454                if (_.htmlExpr.test(_.options.nextArrow)) {
455                    _.$nextArrow.appendTo(_.options.appendArrows);
456                }
457
458                if (_.options.infinite !== true) {
459                    _.$prevArrow
460                        .addClass('slick-disabled')
461                        .attr('aria-disabled', 'true');
462                }
463
464            } else {
465
466                _.$prevArrow.add( _.$nextArrow )
467
468                    .addClass('slick-hidden')
469                    .attr({
470                        'aria-disabled': 'true',
471                        'tabindex': '-1'
472                    });
473
474            }
475
476        }
477
478    };
479
480    Slick.prototype.buildDots = function() {
481
482        var _ = this,
483            i, dot;
484
485        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
486
487            _.$slider.addClass('slick-dotted');
488
489            dot = $('<ul />').addClass(_.options.dotsClass);
490
491            for (i = 0; i <= _.getDotCount(); i += 1) {
492                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));
493            }
494
495            _.$dots = dot.appendTo(_.options.appendDots);
496
497            _.$dots.find('li').first().addClass('slick-active')
vendor: 14,869 bytes, lines 497-985
497.attr('aria-hidden', 'false');
498
499        }
500
501    };
502
503    Slick.prototype.buildOut = function() {
504
505        var _ = this;
506
507        _.$slides =
508            _.$slider
509                .children( _.options.slide + ':not(.slick-cloned)')
510                .addClass('slick-slide');
511
512        _.slideCount = _.$slides.length;
513
514        _.$slides.each(function(index, element) {
515            $(element)
516                .attr('data-slick-index', index)
517                .data('originalStyling', $(element).attr('style') || '');
518        });
519
520        _.$slider.addClass('slick-slider');
521
522        _.$slideTrack = (_.slideCount === 0) ?
523            $('<div class="slick-track"/>').appendTo(_.$slider) :
524            _.$slides.wrapAll('<div class="slick-track"/>').parent();
525
526        _.$list = _.$slideTrack.wrap(
527            '<div aria-live="polite" class="slick-list"/>').parent();
528        _.$slideTrack.css('opacity', 0);
529
530        if (_.options.centerMode === true || _.options.swipeToSlide === true) {
531            _.options.slidesToScroll = 1;
532        }
533
534        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');
535
536        _.setupInfinite();
537
538        _.buildArrows();
539
540        _.buildDots();
541
542        _.updateDots();
543
544
545        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
546
547        if (_.options.draggable === true) {
548            _.$list.addClass('draggable');
549        }
550
551    };
552
553    Slick.prototype.buildRows = function() {
554
555        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;
556
557        newSlides = document.createDocumentFragment();
558        originalSlides = _.$slider.children();
559
560        if(_.options.rows > 1) {
561
562            slidesPerSection = _.options.slidesPerRow * _.options.rows;
563            numOfSlides = Math.ceil(
564                originalSlides.length / slidesPerSection
565            );
566
567            for(a = 0; a < numOfSlides; a++){
568                var slide = document.createElement('div');
569                for(b = 0; b < _.options.rows; b++) {
570                    var row = document.createElement('div');
571                    for(c = 0; c < _.options.slidesPerRow; c++) {
572                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));
573                        if (originalSlides.get(target)) {
574                            row.appendChild(originalSlides.get(target));
575                        }
576                    }
577                    slide.appendChild(row);
578                }
579                newSlides.appendChild(slide);
580            }
581
582            _.$slider.empty().append(newSlides);
583            _.$slider.children().children().children()
584                .css({
585                    'width':(100 / _.options.slidesPerRow) + '%',
586                    'display': 'inline-block'
587                });
588
589        }
590
591    };
592
593    Slick.prototype.checkResponsive = function(initial, forceUpdate) {
594
595        var _ = this,
596            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;
597        var sliderWidth = _.$slider.width();
598        var windowWidth = window.innerWidth || $(window).width();
599
600        if (_.respondTo === 'window') {
601            respondToWidth = windowWidth;
602        } else if (_.respondTo === 'slider') {
603            respondToWidth = sliderWidth;
604        } else if (_.respondTo === 'min') {
605            respondToWidth = Math.min(windowWidth, sliderWidth);
606        }
607
608        if ( _.options.responsive &&
609            _.options.responsive.length &&
610            _.options.responsive !== null) {
611
612            targetBreakpoint = null;
613
614            for (breakpoint in _.breakpoints) {
615                if (_.breakpoints.hasOwnProperty(breakpoint)) {
616                    if (_.originalSettings.mobileFirst === false) {
617                        if (respondToWidth < _.breakpoints[breakpoint]) {
618                            targetBreakpoint = _.breakpoints[breakpoint];
619                        }
620                    } else {
621                        if (respondToWidth > _.breakpoints[breakpoint]) {
622                            targetBreakpoint = _.breakpoints[breakpoint];
623                        }
624                    }
625                }
626            }
627
628            if (targetBreakpoint !== null) {
629                if (_.activeBreakpoint !== null) {
630                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {
631                        _.activeBreakpoint =
632                            targetBreakpoint;
633                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
634                            _.unslick(targetBreakpoint);
635                        } else {
636                            _.options = $.extend({}, _.originalSettings,
637                                _.breakpointSettings[
638                                    targetBreakpoint]);
639                            if (initial === true) {
640                                _.currentSlide = _.options.initialSlide;
641                            }
642                            _.refresh(initial);
643                        }
644                        triggerBreakpoint = targetBreakpoint;
645                    }
646                } else {
647                    _.activeBreakpoint = targetBreakpoint;
648                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
649                        _.unslick(targetBreakpoint);
650                    } else {
651                        _.options = $.extend({}, _.originalSettings,
652                            _.breakpointSettings[
653                                targetBreakpoint]);
654                        if (initial === true) {
655                            _.currentSlide = _.options.initialSlide;
656                        }
657                        _.refresh(initial);
658                    }
659                    triggerBreakpoint = targetBreakpoint;
660                }
661            } else {
662                if (_.activeBreakpoint !== null) {
663                    _.activeBreakpoint = null;
664                    _.options = _.originalSettings;
665                    if (initial === true) {
666                        _.currentSlide = _.options.initialSlide;
667                    }
668                    _.refresh(initial);
669                    triggerBreakpoint = targetBreakpoint;
670                }
671            }
672
673            // only trigger breakpoints during an actual break. not on initialize.
674            if( !initial && triggerBreakpoint !== false ) {
675                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);
676            }
677        }
678
679    };
680
681    Slick.prototype.changeSlide = function(event, dontAnimate) {
682
683        var _ = this,
684            $target = $(event.currentTarget),
685            indexOffset, slideOffset, unevenOffset;
686
687        // If target is a link, prevent default action.
688        if($target.is('a')) {
689            event.preventDefault();
690        }
691
692        // If target is not the <li> element (ie: a child), find the <li>.
693        if(!$target.is('li')) {
694            $target = $target.closest('li');
695        }
696
697        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);
698        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;
699
700        switch (event.data.message) {
701
702            case 'previous':
703                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;
704                if (_.slideCount > _.options.slidesToShow) {
705                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);
706                }
707                break;
708
709            case 'next':
710                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;
711                if (_.slideCount > _.options.slidesToShow) {
712                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);
713                }
714                break;
715
716            case 'index':
717                var index = event.data.index === 0 ? 0 :
718                    event.data.index || $target.index() * _.options.slidesToScroll;
719
720                _.slideHandler(_.checkNavigable(index), false, dontAnimate);
721                $target.children().trigger('focus');
722                break;
723
724            default:
725                return;
726        }
727
728    };
729
730    Slick.prototype.checkNavigable = function(index) {
731
732        var _ = this,
733            navigables, prevNavigable;
734
735        navigables = _.getNavigableIndexes();
736        prevNavigable = 0;
737        if (index > navigables[navigables.length - 1]) {
738            index = navigables[navigables.length - 1];
739        } else {
740            for (var n in navigables) {
741                if (index < navigables[n]) {
742                    index = prevNavigable;
743                    break;
744                }
745                prevNavigable = navigables[n];
746            }
747        }
748
749        return index;
750    };
751
752    Slick.prototype.cleanUpEvents = function() {
753
754        var _ = this;
755
756        if (_.options.dots && _.$dots !== null) {
757
758            $('li', _.$dots)
759                .off('click.slick', _.changeSlide)
760                .off('mouseenter.slick', $.proxy(_.interrupt, _, true))
761                .off('mouseleave.slick', $.proxy(_.interrupt, _, false));
762
763        }
764
765        _.$slider.off('focus.slick blur.slick');
766
767        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
768            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);
769            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);
770        }
771
772        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);
773        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);
774        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);
775        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);
776
777        _.$list.off('click.slick', _.clickHandler);
778
779        $(document).off(_.visibilityChange, _.visibility);
780
781        _.cleanUpSlideEvents();
782
783        if (_.options.accessibility === true) {
784            _.$list.off('keydown.slick', _.keyHandler);
785        }
786
787        if (_.options.focusOnSelect === true) {
788            $(_.$slideTrack).children().off('click.slick', _.selectHandler);
789        }
790
791        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);
792
793        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);
794
795        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);
796
797        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);
798        $(document).off('ready.slick.slick-' + _.instanceUid, _.setPosition);
799
800    };
801
802    Slick.prototype.cleanUpSlideEvents = function() {
803
804        var _ = this;
805
806        _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));
807        _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));
808
809    };
810
811    Slick.prototype.cleanUpRows = function() {
812
813        var _ = this, originalSlides;
814
815        if(_.options.rows > 1) {
816            originalSlides = _.$slides.children().children();
817            originalSlides.removeAttr('style');
818            _.$slider.empty().append(originalSlides);
819        }
820
821    };
822
823    Slick.prototype.clickHandler = function(event) {
824
825        var _ = this;
826
827        if (_.shouldClick === false) {
828            event.stopImmediatePropagation();
829            event.stopPropagation();
830            event.preventDefault();
831        }
832
833    };
834
835    Slick.prototype.destroy = function(refresh) {
836
837        var _ = this;
838
839        _.autoPlayClear();
840
841        _.touchObject = {};
842
843        _.cleanUpEvents();
844
845        $('.slick-cloned', _.$slider).detach();
846
847        if (_.$dots) {
848            _.$dots.remove();
849        }
850
851
852        if ( _.$prevArrow && _.$prevArrow.length ) {
853
854            _.$prevArrow
855                .removeClass('slick-disabled slick-arrow slick-hidden')
856                .removeAttr('aria-hidden aria-disabled tabindex')
857                .css('display','');
858
859            if ( _.htmlExpr.test( _.options.prevArrow )) {
860                _.$prevArrow.remove();
861            }
862        }
863
864        if ( _.$nextArrow && _.$nextArrow.length ) {
865
866            _.$nextArrow
867                .removeClass('slick-disabled slick-arrow slick-hidden')
868                .removeAttr('aria-hidden aria-disabled tabindex')
869                .css('display','');
870
871            if ( _.htmlExpr.test( _.options.nextArrow )) {
872                _.$nextArrow.remove();
873            }
874
875        }
876
877
878        if (_.$slides) {
879
880            _.$slides
881                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')
882                .removeAttr('aria-hidden')
883                .removeAttr('data-slick-index')
884                .each(function(){
885                    $(this).attr('style', $(this).data('originalStyling'));
886                });
887
888            _.$slideTrack.children(this.options.slide).detach();
889
890            _.$slideTrack.detach();
891
892            _.$list.detach();
893
894            _.$slider.append(_.$slides);
895        }
896
897        _.cleanUpRows();
898
899        _.$slider.removeClass('slick-slider');
900        _.$slider.removeClass('slick-initialized');
901        _.$slider.removeClass('slick-dotted');
902
903        _.unslicked = true;
904
905        if(!refresh) {
906            _.$slider.trigger('destroy', [_]);
907        }
908
909    };
910
911    Slick.prototype.disableTransition = function(slide) {
912
913        var _ = this,
914            transition = {};
915
916        transition[_.transitionType] = '';
917
918        if (_.options.fade === false) {
919            _.$slideTrack.css(transition);
920        } else {
921            _.$slides.eq(slide).css(transition);
922        }
923
924    };
925
926    Slick.prototype.fadeSlide = function(slideIndex, callback) {
927
928        var _ = this;
929
930        if (_.cssTransitions === false) {
931
932            _.$slides.eq(slideIndex).css({
933                zIndex: _.options.zIndex
934            });
935
936            _.$slides.eq(slideIndex).animate({
937                opacity: 1
938            }, _.options.speed, _.options.easing, callback);
939
940        } else {
941
942            _.applyTransition(slideIndex);
943
944            _.$slides.eq(slideIndex).css({
945                opacity: 1,
946                zIndex: _.options.zIndex
947            });
948
949            if (callback) {
950                setTimeout(function() {
951
952                    _.disableTransition(slideIndex);
953
954                    callback.call();
955                }, _.options.speed);
956            }
957
958        }
959
960    };
961
962    Slick.prototype.fadeSlideOut = function(slideIndex) {
963
964        var _ = this;
965
966        if (_.cssTransitions === false) {
967
968            _.$slides.eq(slideIndex).animate({
969                opacity: 0,
970                zIndex: _.options.zIndex - 2
971            }, _.options.speed, _.options.easing);
972
973        } else {
974
975            _.applyTransition(slideIndex);
976
977            _.$slides.eq(slideIndex).css({
978                opacity: 0,
979                zIndex: _.options.zIndex - 2
980            });
981
982        }
983
984    };
985
986    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {
987
988        var _ = this;
989
990        if (filter !== null) {
991
992            _.$slidesCache = _.$slides;
993
994            _.unload();
995
996            _.$slideTrack.children(this.options.slide).detach();
997
998            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);
999
1000            _.reinit();
1001
1002        }
1003
1004    };
1005
1006    Slick.prototype.focusHandler = function() {
1007
1008        var _ = this;
1009
1010        _.$slider
1011            .off('focus.slick blur.slick')
1012            .on('focus.slick blur.slick',
1013                '*:not(.slick-arrow)', function(event) {
1014
1015            event.stopImmediatePropagation();
1016            var $sf = $(this);
1017
1018            setTimeout(function() {
1019
1020                if( _.options.pauseOnFocus ) {
1021                    _.focussed = $sf.is(':focus');
1022                    _.autoPlay();
1023                }
1024
1025            }, 0);
1026
1027        });
1028    };
1029
1030    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {
1031
1032        var _ = this;
1033        return _.currentSlide;
1034
1035    };
1036
1037    Slick.prototype.getDotCount = function() {
1038
1039        var _ = this;
1040
1041        var breakPoint = 0;
1042        var counter = 0;
1043        var pagerQty = 0;
1044
1045        if (_.options.infinite === true) {
1046            while (breakPoint < _.slideCount) {
1047                ++pagerQty;
1048                breakPoint = counter + _.options.slidesToScroll;
1049                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1050            }
1051        } else if (_.options.centerMode === true) {
1052            pagerQty = _.slideCount;
1053        } else if(!_.options.asNavFor) {
1054            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);
1055        }else {
1056            while (breakPoint < _.slideCount) {
1057                ++pagerQty;
1058                breakPoint = counter + _.options.slidesToScroll;
1059                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1060            }
1061        }
1062
1063        return pagerQty - 1;
1064
1065    };
1066
1067    Slick.prototype.getLeft = function(slideIndex) {
1068
1069        var _ = this,
1070            targetLeft,
1071            verticalHeight,
1072            verticalOffset = 0,
1073            targetSlide;
1074
1075        _.slideOffset = 0;
1076        verticalHeight = _.$slides.first().outerHeight(true);
1077
1078        if (_.options.infinite === true) {
1079            if (_.slideCount > _.options.slidesToShow) {
1080                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
1081                verticalOffset = (verticalHeight * _.options.slidesToShow) * -1;
1082            }
1083            if (_.slideCount % _.options.slidesToScroll !== 0) {
1084                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
1085                    if (slideIndex > _.slideCount) {
1086                        _.slideOffset = ((_.options.slidesToShow - (sl
vendor: 921 bytes, lines 1086-1106
1086ideIndex - _.slideCount)) * _.slideWidth) * -1;
1087                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;
1088                    } else {
1089                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;
1090                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;
1091                    }
1092                }
1093            }
1094        } else {
1095            if (slideIndex + _.options.slidesToShow > _.slideCount) {
1096                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;
1097                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;
1098            }
1099        }
1100
1101        if (_.slideCount <= _.options.slidesToShow) {
1102            _.slideOffset = 0;
1103            verticalOffset = 0;
1104        }
1105
1106       
vendor: 5,167 bytes, lines 1106-1279
1106 if (_.options.centerMode === true && _.options.infinite === true) {
1107            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
1108        } else if (_.options.centerMode === true) {
1109            _.slideOffset = 0;
1110            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);
1111        }
1112
1113        if (_.options.vertical === false) {
1114            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;
1115        } else {
1116            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;
1117        }
1118
1119        if (_.options.variableWidth === true) {
1120
1121            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
1122                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
1123            } else {
1124                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);
1125            }
1126
1127            if (_.options.rtl === true) {
1128                if (targetSlide[0]) {
1129                    targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
1130                } else {
1131                    targetLeft =  0;
1132                }
1133            } else {
1134                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
1135            }
1136
1137            if (_.options.centerMode === true) {
1138                if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
1139                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
1140                } else {
1141                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);
1142                }
1143
1144                if (_.options.rtl === true) {
1145                    if (targetSlide[0]) {
1146                        targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
1147                    } else {
1148                        targetLeft =  0;
1149                    }
1150                } else {
1151                    targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
1152                }
1153
1154                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;
1155            }
1156        }
1157
1158        return targetLeft;
1159
1160    };
1161
1162    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {
1163
1164        var _ = this;
1165
1166        return _.options[option];
1167
1168    };
1169
1170    Slick.prototype.getNavigableIndexes = function() {
1171
1172        var _ = this,
1173            breakPoint = 0,
1174            counter = 0,
1175            indexes = [],
1176            max;
1177
1178        if (_.options.infinite === false) {
1179            max = _.slideCount;
1180        } else {
1181            breakPoint = _.options.slidesToScroll * -1;
1182            counter = _.options.slidesToScroll * -1;
1183            max = _.slideCount * 2;
1184        }
1185
1186        while (breakPoint < max) {
1187            indexes.push(breakPoint);
1188            breakPoint = counter + _.options.slidesToScroll;
1189            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1190        }
1191
1192        return indexes;
1193
1194    };
1195
1196    Slick.prototype.getSlick = function() {
1197
1198        return this;
1199
1200    };
1201
1202    Slick.prototype.getSlideCount = function() {
1203
1204        var _ = this,
1205            slidesTraversed, swipedSlide, centerOffset;
1206
1207        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;
1208
1209        if (_.options.swipeToSlide === true) {
1210            _.$slideTrack.find('.slick-slide').each(function(index, slide) {
1211                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {
1212                    swipedSlide = slide;
1213                    return false;
1214                }
1215            });
1216
1217            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;
1218
1219            return slidesTraversed;
1220
1221        } else {
1222            return _.options.slidesToScroll;
1223        }
1224
1225    };
1226
1227    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {
1228
1229        var _ = this;
1230
1231        _.changeSlide({
1232            data: {
1233                message: 'index',
1234                index: parseInt(slide)
1235            }
1236        }, dontAnimate);
1237
1238    };
1239
1240    Slick.prototype.init = function(creation) {
1241
1242        var _ = this;
1243
1244        if (!$(_.$slider).hasClass('slick-initialized')) {
1245
1246            $(_.$slider).addClass('slick-initialized');
1247
1248            _.buildRows();
1249            _.buildOut();
1250            _.setProps();
1251            _.startLoad();
1252            _.loadSlider();
1253            _.initializeEvents();
1254            _.updateArrows();
1255            _.updateDots();
1256            _.checkResponsive(true);
1257            _.focusHandler();
1258
1259        }
1260
1261        if (creation) {
1262            _.$slider.trigger('init', [_]);
1263        }
1264
1265        if (_.options.accessibility === true) {
1266            _.initADA();
1267        }
1268
1269        if ( _.options.autoplay ) {
1270
1271            _.paused = false;
1272            _.autoPlay();
1273
1274        }
1275
1276    };
1277
1278    Slick.prototype.initADA = function() {
1279        var _ = this
1279;
1280        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({
1281            'aria-hidden': 'true',
1282            'tabindex': '-1'
1283        }).find('a, input, button, select').attr({
1284            'tabindex': '-1'
1285        });
1286
1287        _.$slideTrack.attr('role', 'listbox');
1288
1289        _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {
1290            $(this).attr({
1291                'role': 'option',
1292                'aria-describedby': 'slick-slide' + _.instanceUid + i + ''
1293            });
1294        });
1295
1296        if (_.$dots !== null) {
1297            _.$dots.attr('role', 'tablist').find('li').each(function(i) {
1298                $(this).attr({
1299                    'role': 'presentation',
1300                    'aria-selected': 'false',
1301                    'aria-controls': 'navigation' + _.instanceUid + i + '',
1302                    'id': 'slick-slide' + _.instanceUid + i + ''
1303                });
1304            })
1305                .first().attr('aria-selected', 'true').end()
1306                .find('button').attr('role', 'button').end()
1307                .closest('div').attr('role', 'toolbar');
1308        }
1309        _.activateADA();
1310
1311    };
1312
1313    Slick.prototype.initArrowEvents = function() {
1314
1315        var _ = this;
1316
1317        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
1318            _.$prevArrow
1319               .off('click.slick')
1320               .on('click.slick', {
1321                    message: 'previous'
1322               }, _.changeSlide);
1323            _.$nextArrow
1324               .off('click.slick')
1325               .on('click.slick', {
1326                    message: 'next'
1327               }, _.changeSlide);
1328        }
1329
1330    };
1331
1332    Slick.prototype.initDotEvents = function() {
1333
1334        var _ = this;
1335
1336        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
1337            $('li', _.$dots).on('click.slick', {
1338                message: 'index'
1339            }, _.changeSlide);
1340        }
1341
1342        if ( _.options.dots === true && _.options.pauseOnDotsHover === true ) {
1343
1344            $('li', _.$dots)
1345                .on('mouseenter.slick', $.proxy(_.interrupt, _, true))
1346                .on('mouseleave.slick', $.proxy(_.interrupt, _, false));
1347
1348        }
1349
1350    };
1351
1352    Slick.prototype.initSlideEvents = function() {
1353
1354        var _ = this;
1355
1356        if ( _.options.pauseOnHover ) {
1357
1358            _.$list.find('.slick-slide img').on('mouseenter.slick', $.proxy(_.interrupt, _, true));
1359            _.$list.find('.slick-slide img').on('mouseleave.slick', $.proxy(_.interrupt, _, false));
1360
1361        }
1362
1363    };
1364
1365    Slick.prototype.initializeEvents = function() {
1366
1367        var _ = this;
1368
1369        _.initArrowEvents();
1370
1371        _.initDotEvents();
1372        _.initSlideEvents();
1373
1374        _.$list.on('touchstart.slick mousedown.slick', {
1375            action: 'start'
1376        }, _.swipeHandler);
1377        _.$list.on('touchmove.slick mousemove.slick', {
1378            action: 'move'
1379        }, _.swipeHandler);
1380        _.$list.on('touchend.slick mouseup.slick', {
1381            action: 'end'
1382        }, _.swipeHandler);
vendor: 12,527 bytes, lines 1383-1844
1383        _.$list.on('touchcancel.slick mouseleave.slick', {
1384            action: 'end'
1385        }, _.swipeHandler);
1386
1387        _.$list.on('click.slick', _.clickHandler);
1388
1389        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));
1390
1391        if (_.options.accessibility === true) {
1392            _.$list.on('keydown.slick', _.keyHandler);
1393        }
1394
1395        if (_.options.focusOnSelect === true) {
1396            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
1397        }
1398
1399        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));
1400
1401        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));
1402
1403        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);
1404
1405        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);
1406        $(document).on('ready.slick.slick-' + _.instanceUid, _.setPosition);
1407
1408    };
1409
1410    Slick.prototype.initUI = function() {
1411
1412        var _ = this;
1413
1414        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
1415
1416            _.$prevArrow.show();
1417            _.$nextArrow.show();
1418
1419        }
1420
1421        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
1422
1423            _.$dots.show();
1424
1425        }
1426
1427    };
1428
1429    Slick.prototype.keyHandler = function(event) {
1430
1431        var _ = this;
1432         //Dont slide if the cursor is inside the form fields and arrow keys are pressed
1433        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {
1434            if (event.keyCode === 37 && _.options.accessibility === true) {
1435                _.changeSlide({
1436                    data: {
1437                        message: _.options.rtl === true ? 'next' :  'previous'
1438                    }
1439                });
1440            } else if (event.keyCode === 39 && _.options.accessibility === true) {
1441                _.changeSlide({
1442                    data: {
1443                        message: _.options.rtl === true ? 'previous' : 'next'
1444                    }
1445                });
1446            }
1447        }
1448
1449    };
1450
1451    Slick.prototype.lazyLoad = function() {
1452
1453        var _ = this,
1454            loadRange, cloneRange, rangeStart, rangeEnd;
1455
1456        function loadImages(imagesScope) {
1457
1458            $('img[data-lazy]', imagesScope).each(function() {
1459
1460                var image = $(this),
1461                    imageSource = $(this).attr('data-lazy'),
1462                    imageToLoad = document.createElement('img');
1463
1464                imageToLoad.onload = function() {
1465
1466                    image
1467                        .animate({ opacity: 0 }, 100, function() {
1468                            image
1469                                .attr('src', imageSource)
1470                                .animate({ opacity: 1 }, 200, function() {
1471                                    image
1472                                        .removeAttr('data-lazy')
1473                                        .removeClass('slick-loading');
1474                                });
1475                            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);
1476                        });
1477
1478                };
1479
1480                imageToLoad.onerror = function() {
1481
1482                    image
1483                        .removeAttr( 'data-lazy' )
1484                        .removeClass( 'slick-loading' )
1485                        .addClass( 'slick-lazyload-error' );
1486
1487                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
1488
1489                };
1490
1491                imageToLoad.src = imageSource;
1492
1493            });
1494
1495        }
1496
1497        if (_.options.centerMode === true) {
1498            if (_.options.infinite === true) {
1499                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);
1500                rangeEnd = rangeStart + _.options.slidesToShow + 2;
1501            } else {
1502                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));
1503                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;
1504            }
1505        } else {
1506            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
1507            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);
1508            if (_.options.fade === true) {
1509                if (rangeStart > 0) rangeStart--;
1510                if (rangeEnd <= _.slideCount) rangeEnd++;
1511            }
1512        }
1513
1514        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);
1515        loadImages(loadRange);
1516
1517        if (_.slideCount <= _.options.slidesToShow) {
1518            cloneRange = _.$slider.find('.slick-slide');
1519            loadImages(cloneRange);
1520        } else
1521        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
1522            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);
1523            loadImages(cloneRange);
1524        } else if (_.currentSlide === 0) {
1525            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);
1526            loadImages(cloneRange);
1527        }
1528
1529    };
1530
1531    Slick.prototype.loadSlider = function() {
1532
1533        var _ = this;
1534
1535        _.setPosition();
1536
1537        _.$slideTrack.css({
1538            opacity: 1
1539        });
1540
1541        _.$slider.removeClass('slick-loading');
1542
1543        _.initUI();
1544
1545        if (_.options.lazyLoad === 'progressive') {
1546            _.progressiveLazyLoad();
1547        }
1548
1549    };
1550
1551    Slick.prototype.next = Slick.prototype.slickNext = function() {
1552
1553        var _ = this;
1554
1555        _.changeSlide({
1556            data: {
1557                message: 'next'
1558            }
1559        });
1560
1561    };
1562
1563    Slick.prototype.orientationChange = function() {
1564
1565        var _ = this;
1566
1567        _.checkResponsive();
1568        _.setPosition();
1569
1570    };
1571
1572    Slick.prototype.pause = Slick.prototype.slickPause = function() {
1573
1574        var _ = this;
1575
1576        _.autoPlayClear();
1577        _.paused = true;
1578
1579    };
1580
1581    Slick.prototype.play = Slick.prototype.slickPlay = function() {
1582
1583        var _ = this;
1584
1585        _.autoPlay();
1586        _.options.autoplay = true;
1587        _.paused = false;
1588        _.focussed = false;
1589        _.interrupted = false;
1590
1591    };
1592
1593    Slick.prototype.postSlide = function(index) {
1594
1595        var _ = this;
1596
1597        if( !_.unslicked ) {
1598
1599            _.$slider.trigger('afterChange', [_, index]);
1600
1601            _.animating = false;
1602
1603            _.setPosition();
1604
1605            _.swipeLeft = null;
1606
1607            if ( _.options.autoplay ) {
1608                _.autoPlay();
1609            }
1610
1611            if (_.options.accessibility === true) {
1612                _.initADA();
1613            }
1614
1615        }
1616
1617    };
1618
1619    Slick.prototype.prev = Slick.prototype.slickPrev = function() {
1620
1621        var _ = this;
1622
1623        _.changeSlide({
1624            data: {
1625                message: 'previous'
1626            }
1627        });
1628
1629    };
1630
1631    Slick.prototype.preventDefault = function(event) {
1632
1633        event.preventDefault();
1634
1635    };
1636
1637    Slick.prototype.progressiveLazyLoad = function( tryCount ) {
1638
1639        tryCount = tryCount || 1;
1640
1641        var _ = this,
1642            $imgsToLoad = $( 'img[data-lazy]', _.$slider ),
1643            image,
1644            imageSource,
1645            imageToLoad;
1646
1647        if ( $imgsToLoad.length ) {
1648
1649            image = $imgsToLoad.first();
1650            imageSource = image.attr('data-lazy');
1651            imageToLoad = document.createElement('img');
1652
1653            imageToLoad.onload = function() {
1654
1655                image
1656                    .attr( 'src', imageSource )
1657                    .removeAttr('data-lazy')
1658                    .removeClass('slick-loading');
1659
1660                if ( _.options.adaptiveHeight === true ) {
1661                    _.setPosition();
1662                }
1663
1664                _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);
1665                _.progressiveLazyLoad();
1666
1667            };
1668
1669            imageToLoad.onerror = function() {
1670
1671                if ( tryCount < 3 ) {
1672
1673                    /**
1674                     * try to load the image 3 times,
1675                     * leave a slight delay so we don't get
1676                     * servers blocking the request.
1677                     */
1678                    setTimeout( function() {
1679                        _.progressiveLazyLoad( tryCount + 1 );
1680                    }, 500 );
1681
1682                } else {
1683
1684                    image
1685                        .removeAttr( 'data-lazy' )
1686                        .removeClass( 'slick-loading' )
1687                        .addClass( 'slick-lazyload-error' );
1688
1689                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
1690
1691                    _.progressiveLazyLoad();
1692
1693                }
1694
1695            };
1696
1697            imageToLoad.src = imageSource;
1698
1699        } else {
1700
1701            _.$slider.trigger('allImagesLoaded', [ _ ]);
1702
1703        }
1704
1705    };
1706
1707    Slick.prototype.refresh = function( initializing ) {
1708
1709        var _ = this, currentSlide, lastVisibleIndex;
1710
1711        lastVisibleIndex = _.slideCount - _.options.slidesToShow;
1712
1713        // in non-infinite sliders, we don't want to go past the
1714        // last visible index.
1715        if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {
1716            _.currentSlide = lastVisibleIndex;
1717        }
1718
1719        // if less slides than to show, go to start.
1720        if ( _.slideCount <= _.options.slidesToShow ) {
1721            _.currentSlide = 0;
1722
1723        }
1724
1725        currentSlide = _.currentSlide;
1726
1727        _.destroy(true);
1728
1729        $.extend(_, _.initials, { currentSlide: currentSlide });
1730
1731        _.init();
1732
1733        if( !initializing ) {
1734
1735            _.changeSlide({
1736                data: {
1737                    message: 'index',
1738                    index: currentSlide
1739                }
1740            }, false);
1741
1742        }
1743
1744    };
1745
1746    Slick.prototype.registerBreakpoints = function() {
1747
1748        var _ = this, breakpoint, currentBreakpoint, l,
1749            responsiveSettings = _.options.responsive || null;
1750
1751        if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {
1752
1753            _.respondTo = _.options.respondTo || 'window';
1754
1755            for ( breakpoint in responsiveSettings ) {
1756
1757                l = _.breakpoints.length-1;
1758                currentBreakpoint = responsiveSettings[breakpoint].breakpoint;
1759
1760                if (responsiveSettings.hasOwnProperty(breakpoint)) {
1761
1762                    // loop through the breakpoints and cut out any existing
1763                    // ones with the same breakpoint number, we don't want dupes.
1764                    while( l >= 0 ) {
1765                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {
1766                            _.breakpoints.splice(l,1);
1767                        }
1768                        l--;
1769                    }
1770
1771                    _.breakpoints.push(currentBreakpoint);
1772                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;
1773
1774                }
1775
1776            }
1777
1778            _.breakpoints.sort(function(a, b) {
1779                return ( _.options.mobileFirst ) ? a-b : b-a;
1780            });
1781
1782        }
1783
1784    };
1785
1786    Slick.prototype.reinit = function() {
1787
1788        var _ = this;
1789
1790        _.$slides =
1791            _.$slideTrack
1792                .children(_.options.slide)
1793                .addClass('slick-slide');
1794
1795        _.slideCount = _.$slides.length;
1796
1797        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
1798            _.currentSlide = _.currentSlide - _.options.slidesToScroll;
1799        }
1800
1801        if (_.slideCount <= _.options.slidesToShow) {
1802            _.currentSlide = 0;
1803        }
1804
1805        _.registerBreakpoints();
1806
1807        _.setProps();
1808        _.setupInfinite();
1809        _.buildArrows();
1810        _.updateArrows();
1811        _.initArrowEvents();
1812        _.buildDots();
1813        _.updateDots();
1814        _.initDotEvents();
1815        _.cleanUpSlideEvents();
1816        _.initSlideEvents();
1817
1818        _.checkResponsive(false, true);
1819
1820        if (_.options.focusOnSelect === true) {
1821            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
1822        }
1823
1824        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
1825
1826        _.setPosition();
1827        _.focusHandler();
1828
1829        _.paused = !_.options.autoplay;
1830        _.autoPlay();
1831
1832        _.$slider.trigger('reInit', [_]);
1833
1834    };
1835
1836    Slick.prototype.resize = function() {
1837
1838        var _ = this;
1839
1840        if ($(window).width() !== _.windowWidth) {
1841            clearTimeout(_.windowDelay);
1842            _.windowDelay = window.setTimeout(function() {
1843                _.windowWidth = $(window).width();
1844                _.checkResponsive();
1845                if( !_.unslicked ) { _.setPosition(); }
1846            }, 50);
1847        }
1848    };
1849
1850    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {
1851
1852        var _ = this;
1853
1854        if (typeof(index) === 'boolean') {
1855            removeBefore = index;
1856            index = removeBefore === true ? 0 : _.slideCount - 1;
1857        } else {
1858            index = removeBefore === true ? --index : index;
1859        }
1860
1861        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
1862            return false;
1863        }
1864
1865        _.unload();
1866
1867        if (removeAll === true) {
1868            _.$slideTrack.children().remove();
1869        } else {
1870            _.$slideTrack.children(this.options.slide).eq(index).remove();
1871        }
1872
1873        _.$slides = _.$slideTrack.children(this.options.slide);
1874
1875        _.$slideTrack.children(this.options.slide).detach();
1876
1877        _.$slideTrack.append(_.$slides);
1878
1879        _.$slidesCache = _.$slides;
1880
1881        _.reinit();
1882
1883    };
1884
1885    Slick.prototype.setCSS = function(position) {
1886
1887        var _ = this,
1888            positionProps = {},
1889            x, y;
1890
1891        if (_.options.rtl === true) {
1892            position = -position;
1893        }
1894        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';
1895        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';
1896
1897        positionProps[_.positionProp] = position;
1898
1899        if (_.transformsEnabled === false) {
1900            _.$slideTrack.css(positionProps);
1901        } else {
1902            positionProps = {};
1903            if (_.cssTransitions === false) {
1904                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';
1905                _.$slideTrack.css(positionProps);
1906            } else {
1907                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';
1908                _.$slideTrack.css(positionProps);
1909            }
1910        }
1911
1912    };
1913
1914    Slick.prototype.setDimensions = function() {
1915
1916        var _ = this;
1917
1918        if (_.options.vertical === false) {
1919            if (_.options.centerMode === true) {
1920                _.$list.css({
1921                    padding: ('0px ' + _.options.centerPadding)
1922                });
1923            }
1924        } else {
1925            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);
1926            if (_.options.centerMode === true) {
1927                _.$list.css({
1928                    padding: (_.options.centerPadding + ' 0px')
1929                });
1930            }
1931        }
1932
1933        _.listWidth = _.$list.width();
1934        _.listHeight = _.$list.height();
1935
1936
1937        if (_.options.vertical === false && _.options.variableWidth === false) {
1938            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);
1939            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));
1940
1941        } else if (_.options.variableWidth === true) {
1942            _.$slideTrack.width(5000 * _.slideCount);
1943        } else {
1944            _.slideWidth = Math.ceil(_.listWidth);
1945            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));
1946        }
1947
1948        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();
1949        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);
1950
1951    };
1952
1953    Slick.prototype.setFade = function() {
1954
1955        var _ = this,
1956            targetLeft;
1957
1958         _.$slides.each(function(index, element) { 
1959            if (_.options.rtl === true) {
1960				targetLeft = (_.slideWidth * index) * -1;
1961                $(element).css({
1962                    position: 'relative',
1963                    right: targetLeft,
1964                    top: 0,
1965                    zIndex: _.options.zIndex - 2,
1966                    opacity: 0
1967                });
1968
1969            } else {
1970				if($(element).parents().parents().parents().parents('div').hasClass('main_visual')){
1971					targetLeft = (_.$slideTrack.children('.slick-slide').width() * index) * -1;
1972					 $(element).css({
1973						position: 'relative',
1974						left: targetLeft,
1975						top: 0,
1976						zIndex: _.options.zIndex - 2,
1977						opacity: 0,
1978						width: $(element).parents().parents().parents('.slider-wrap').width()
1979					});
1980					 $(element).find('img').css({
1981						marginLeft: -$(element).parents().parents().parents('.slider-wrap').width(),
1982						position:'relative',
1983						left:'50%',
1984						width:'auto'
1985					});
1986				}else{
1987					targetLeft = (_.$slideTrack.children('.slick-slide').width() * index) * -1;
1988						$(element).css({
1989						position: 'relative',
1990						left: targetLeft,
1991						top: 0,
1992						zIndex: _.options.zIndex - 2,
1993						opacity: 0
1994					});
1995				}
1996               
vendor: 6,051 bytes, lines 1996-2214
1996
1997            }
1998        });
1999
2000        _.$slides.eq(_.currentSlide).css({
2001            zIndex: _.options.zIndex - 1,
2002            opacity: 1
2003        });
2004
2005    };
2006
2007    Slick.prototype.setHeight = function() {
2008
2009        var _ = this;
2010
2011        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
2012            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
2013            _.$list.css('height', targetHeight);
2014        }
2015
2016    };
2017
2018    Slick.prototype.setOption =
2019    Slick.prototype.slickSetOption = function() {
2020
2021        /**
2022         * accepts arguments in format of:
2023         *
2024         *  - for changing a single option's value:
2025         *     .slick("setOption", option, value, refresh )
2026         *
2027         *  - for changing a set of responsive options:
2028         *     .slick("setOption", 'responsive', [{}, ...], refresh )
2029         *
2030         *  - for updating multiple values at once (not responsive)
2031         *     .slick("setOption", { 'option': value, ... }, refresh )
2032         */
2033
2034        var _ = this, l, item, option, value, refresh = false, type;
2035
2036        if( $.type( arguments[0] ) === 'object' ) {
2037
2038            option =  arguments[0];
2039            refresh = arguments[1];
2040            type = 'multiple';
2041
2042        } else if ( $.type( arguments[0] ) === 'string' ) {
2043
2044            option =  arguments[0];
2045            value = arguments[1];
2046            refresh = arguments[2];
2047
2048            if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {
2049
2050                type = 'responsive';
2051
2052            } else if ( typeof arguments[1] !== 'undefined' ) {
2053
2054                type = 'single';
2055
2056            }
2057
2058        }
2059
2060        if ( type === 'single' ) {
2061
2062            _.options[option] = value;
2063
2064
2065        } else if ( type === 'multiple' ) {
2066
2067            $.each( option , function( opt, val ) {
2068
2069                _.options[opt] = val;
2070
2071            });
2072
2073
2074        } else if ( type === 'responsive' ) {
2075
2076            for ( item in value ) {
2077
2078                if( $.type( _.options.responsive ) !== 'array' ) {
2079
2080                    _.options.responsive = [ value[item] ];
2081
2082                } else {
2083
2084                    l = _.options.responsive.length-1;
2085
2086                    // loop through the responsive object and splice out duplicates.
2087                    while( l >= 0 ) {
2088
2089                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {
2090
2091                            _.options.responsive.splice(l,1);
2092
2093                        }
2094
2095                        l--;
2096
2097                    }
2098
2099                    _.options.responsive.push( value[item] );
2100
2101                }
2102
2103            }
2104
2105        }
2106
2107        if ( refresh ) {
2108
2109            _.unload();
2110            _.reinit();
2111
2112        }
2113
2114    };
2115
2116    Slick.prototype.setPosition = function() {
2117
2118        var _ = this;
2119
2120        _.setDimensions();
2121
2122        _.setHeight();
2123
2124        if (_.options.fade === false) {
2125            _.setCSS(_.getLeft(_.currentSlide));
2126        } else {
2127            _.setFade();
2128        }
2129
2130        _.$slider.trigger('setPosition', [_]);
2131
2132    };
2133
2134    Slick.prototype.setProps = function() {
2135
2136        var _ = this,
2137            bodyStyle = document.body.style;
2138
2139        _.positionProp = _.options.vertical === true ? 'top' : 'left';
2140
2141        if (_.positionProp === 'top') {
2142            _.$slider.addClass('slick-vertical');
2143        } else {
2144            _.$slider.removeClass('slick-vertical');
2145        }
2146
2147        if (bodyStyle.WebkitTransition !== undefined ||
2148            bodyStyle.MozTransition !== undefined ||
2149            bodyStyle.msTransition !== undefined) {
2150            if (_.options.useCSS === true) {
2151                _.cssTransitions = true;
2152            }
2153        }
2154
2155        if ( _.options.fade ) {
2156            if ( typeof _.options.zIndex === 'number' ) {
2157                if( _.options.zIndex < 3 ) {
2158                    _.options.zIndex = 3;
2159                }
2160            } else {
2161                _.options.zIndex = _.defaults.zIndex;
2162            }
2163        }
2164
2165        if (bodyStyle.OTransform !== undefined) {
2166            _.animType = 'OTransform';
2167            _.transformType = '-o-transform';
2168            _.transitionType = 'OTransition';
2169            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
2170        }
2171        if (bodyStyle.MozTransform !== undefined) {
2172            _.animType = 'MozTransform';
2173            _.transformType = '-moz-transform';
2174            _.transitionType = 'MozTransition';
2175            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;
2176        }
2177        if (bodyStyle.webkitTransform !== undefined) {
2178            _.animType = 'webkitTransform';
2179            _.transformType = '-webkit-transform';
2180            _.transitionType = 'webkitTransition';
2181            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
2182        }
2183        if (bodyStyle.msTransform !== undefined) {
2184            _.animType = 'msTransform';
2185            _.transformType = '-ms-transform';
2186            _.transitionType = 'msTransition';
2187            if (bodyStyle.msTransform === undefined) _.animType = false;
2188        }
2189        if (bodyStyle.transform !== undefined && _.animType !== false) {
2190            _.animType = 'transform';
2191            _.transformType = 'transform';
2192            _.transitionType = 'transition';
2193        }
2194        _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);
2195    };
2196
2197
2198    Slick.prototype.setSlideClasses = function(index) {
2199
2200        var _ = this,
2201            centerOffset, allSlides, indexOffset, remainder;
2202
2203        allSlides = _.$slider
2204            .find('.slick-slide')
2205            .removeClass('slick-active slick-center slick-current')
2206            .attr('aria-hidden', 'true');
2207
2208        _.$slides
2209            .eq(index)
2210            .addClass('slick-current');
2211
2212        if (_.options.centerMode === true) {
2213
2214            
2214centerOffset = Math.floor(_.options.slidesToShow / 2);
2215
2216            if (_.options.infinite === true) {
2217
2218                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {
2219
2220                    _.$slides
2221                        .slice(index - centerOffset, index + centerOffset + 1)
2222                        .addClass('slick-active')
2223                        .attr('aria-hidden', 'false');
2224
2225                } else {
2226
2227                    indexOffset = _.options.slidesToShow + index;
2228                    allSlides
2229                        .slice(indexOffset - centerOffset + 1, indexOffset + centerOffset + 2)
2230                        .addClass('slick-active')
2231                        .attr('aria-hidden', 'false');
2232
2233                }
2234
2235                if (index === 0) {
2236
2237                    allSlides
2238                        .eq(allSlides.length - 1 - _.options.slidesToShow)
2239                        .addClass('slick-center');
2240
2241                } else if (index === _.slideCount - 1) {
2242
2243                    allSlides
2244                        .eq(_.options.slidesToShow)
2245                        .addClass('slick-center');
2246
2247                }
2248
2249            }
2250
2251            _.$slides
2252                .eq(index)
2253                .addClass('slick-center');
2254
2255        } else {
2256
2257            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {
2258
2259                _.$slides
2260                    .slice(index, index + _.options.slidesToShow)
2261                    .addClass('slick-active')
2262                    .attr('aria-hidden', 'false');
2263
2264            } else if (allSlides.length <= _.options.slidesToShow) {
2265
2266                allSlides
2267                    .addClass('slick-active')
2268                    .attr('aria-hidden', 'false');
2269
2270            } else {
2271
2272                remainder = _.slideCount % _.options.slidesToShow;
2273                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;
2274
2275                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {
2276
2277                    allSlides
2278                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)
2279                        .addClass('slick-active')
2280                        .attr('aria-hidden', 'false');
2281
2282                } else {
2283
2284                    allSlides
2285                        .slice(indexOffset, indexOffset + _.options.slidesToShow)
2286                        .addClass('slick-active')
2287                        .attr('aria-hidden', 'false');
2288
2289                }
2290
2291            }
2292
2293        }
2294
2295        if (_.options.lazyLoad === 'ondemand') {
2296            _.lazyLoad();
2297        }
2298
2299    };
2300
2301    Slick.prototype.setupInfinite = function() {
2302
2303        var _ = this,
2304            i, slideIndex, infiniteCount;
2305
2306        if (_.options.fade === true) {
vendor: 15,027 bytes, lines 2307-2840
2307            _.options.centerMode = false;
2308        }
2309
2310        if (_.options.infinite === true && _.options.fade === false) {
2311
2312            slideIndex = null;
2313
2314            if (_.slideCount > _.options.slidesToShow) {
2315
2316                if (_.options.centerMode === true) {
2317                    infiniteCount = _.options.slidesToShow + 1;
2318                } else {
2319                    infiniteCount = _.options.slidesToShow;
2320                }
2321
2322                for (i = _.slideCount; i > (_.slideCount -
2323                        infiniteCount); i -= 1) {
2324                    slideIndex = i - 1;
2325                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
2326                        .attr('data-slick-index', slideIndex - _.slideCount)
2327                        .prependTo(_.$slideTrack).addClass('slick-cloned');
2328                }
2329                for (i = 0; i < infiniteCount; i += 1) {
2330                    slideIndex = i;
2331                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
2332                        .attr('data-slick-index', slideIndex + _.slideCount)
2333                        .appendTo(_.$slideTrack).addClass('slick-cloned');
2334                }
2335                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {
2336                    $(this).attr('id', '');
2337                });
2338
2339            }
2340
2341        }
2342
2343    };
2344
2345    Slick.prototype.interrupt = function( toggle ) {
2346
2347        var _ = this;
2348
2349        if( !toggle ) {
2350            _.autoPlay();
2351        }
2352        _.interrupted = toggle;
2353
2354    };
2355
2356    Slick.prototype.selectHandler = function(event) {
2357
2358        var _ = this;
2359
2360        var targetElement =
2361            $(event.target).is('.slick-slide') ?
2362                $(event.target) :
2363                $(event.target).parents('.slick-slide');
2364
2365        var index = parseInt(targetElement.attr('data-slick-index'));
2366
2367        if (!index) index = 0;
2368
2369        if (_.slideCount <= _.options.slidesToShow) {
2370
2371            _.setSlideClasses(index);
2372            _.asNavFor(index);
2373            return;
2374
2375        }
2376
2377        _.slideHandler(index);
2378
2379    };
2380
2381    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {
2382
2383        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,
2384            _ = this, navTarget;
2385
2386        sync = sync || false;
2387
2388        if (_.animating === true && _.options.waitForAnimate === true) {
2389            return;
2390        }
2391
2392        if (_.options.fade === true && _.currentSlide === index) {
2393            return;
2394        }
2395
2396        if (_.slideCount <= _.options.slidesToShow) {
2397            return;
2398        }
2399
2400        if (sync === false) {
2401            _.asNavFor(index);
2402        }
2403
2404        targetSlide = index;
2405        targetLeft = _.getLeft(targetSlide);
2406        slideLeft = _.getLeft(_.currentSlide);
2407
2408        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;
2409
2410        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {
2411            if (_.options.fade === false) {
2412                targetSlide = _.currentSlide;
2413                if (dontAnimate !== true) {
2414                    _.animateSlide(slideLeft, function() {
2415                        _.postSlide(targetSlide);
2416                    });
2417                } else {
2418                    _.postSlide(targetSlide);
2419                }
2420            }
2421            return;
2422        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {
2423            if (_.options.fade === false) {
2424                targetSlide = _.currentSlide;
2425                if (dontAnimate !== true) {
2426                    _.animateSlide(slideLeft, function() {
2427                        _.postSlide(targetSlide);
2428                    });
2429                } else {
2430                    _.postSlide(targetSlide);
2431                }
2432            }
2433            return;
2434        }
2435
2436        if ( _.options.autoplay ) {
2437            clearInterval(_.autoPlayTimer);
2438        }
2439
2440        if (targetSlide < 0) {
2441            if (_.slideCount % _.options.slidesToScroll !== 0) {
2442                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);
2443            } else {
2444                animSlide = _.slideCount + targetSlide;
2445            }
2446        } else if (targetSlide >= _.slideCount) {
2447            if (_.slideCount % _.options.slidesToScroll !== 0) {
2448                animSlide = 0;
2449            } else {
2450                animSlide = targetSlide - _.slideCount;
2451            }
2452        } else {
2453            animSlide = targetSlide;
2454        }
2455
2456        _.animating = true;
2457
2458        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);
2459
2460        oldSlide = _.currentSlide;
2461        _.currentSlide = animSlide;
2462
2463        _.setSlideClasses(_.currentSlide);
2464
2465        if ( _.options.asNavFor ) {
2466
2467            navTarget = _.getNavTarget();
2468            navTarget = navTarget.slick('getSlick');
2469
2470            if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {
2471                navTarget.setSlideClasses(_.currentSlide);
2472            }
2473
2474        }
2475
2476        _.updateDots();
2477        _.updateArrows();
2478
2479        if (_.options.fade === true) {
2480            if (dontAnimate !== true) {
2481
2482                _.fadeSlideOut(oldSlide);
2483
2484                _.fadeSlide(animSlide, function() {
2485                    _.postSlide(animSlide);
2486                });
2487
2488            } else {
2489                _.postSlide(animSlide);
2490            }
2491            _.animateHeight();
2492            return;
2493        }
2494
2495        if (dontAnimate !== true) {
2496            _.animateSlide(targetLeft, function() {
2497                _.postSlide(animSlide);
2498            });
2499        } else {
2500            _.postSlide(animSlide);
2501        }
2502
2503    };
2504
2505    Slick.prototype.startLoad = function() {
2506
2507        var _ = this;
2508
2509        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
2510
2511            _.$prevArrow.hide();
2512            _.$nextArrow.hide();
2513
2514        }
2515
2516        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
2517
2518            _.$dots.hide();
2519
2520        }
2521
2522        _.$slider.addClass('slick-loading');
2523
2524    };
2525
2526    Slick.prototype.swipeDirection = function() {
2527
2528        var xDist, yDist, r, swipeAngle, _ = this;
2529
2530        xDist = _.touchObject.startX - _.touchObject.curX;
2531        yDist = _.touchObject.startY - _.touchObject.curY;
2532        r = Math.atan2(yDist, xDist);
2533
2534        swipeAngle = Math.round(r * 180 / Math.PI);
2535        if (swipeAngle < 0) {
2536            swipeAngle = 360 - Math.abs(swipeAngle);
2537        }
2538
2539        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {
2540            return (_.options.rtl === false ? 'left' : 'right');
2541        }
2542        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {
2543            return (_.options.rtl === false ? 'left' : 'right');
2544        }
2545        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
2546            return (_.options.rtl === false ? 'right' : 'left');
2547        }
2548        if (_.options.verticalSwiping === true) {
2549            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {
2550                return 'down';
2551            } else {
2552                return 'up';
2553            }
2554        }
2555
2556        return 'vertical';
2557
2558    };
2559
2560    Slick.prototype.swipeEnd = function(event) {
2561
2562        var _ = this,
2563            slideCount,
2564            direction;
2565
2566        _.dragging = false;
2567        _.interrupted = false;
2568        _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;
2569
2570        if ( _.touchObject.curX === undefined ) {
2571            return false;
2572        }
2573
2574        if ( _.touchObject.edgeHit === true ) {
2575            _.$slider.trigger('edge', [_, _.swipeDirection() ]);
2576        }
2577
2578        if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {
2579
2580            direction = _.swipeDirection();
2581
2582            switch ( direction ) {
2583
2584                case 'left':
2585                case 'down':
2586
2587                    slideCount =
2588                        _.options.swipeToSlide ?
2589                            _.checkNavigable( _.currentSlide + _.getSlideCount() ) :
2590                            _.currentSlide + _.getSlideCount();
2591
2592                    _.currentDirection = 0;
2593
2594                    break;
2595
2596                case 'right':
2597                case 'up':
2598
2599                    slideCount =
2600                        _.options.swipeToSlide ?
2601                            _.checkNavigable( _.currentSlide - _.getSlideCount() ) :
2602                            _.currentSlide - _.getSlideCount();
2603
2604                    _.currentDirection = 1;
2605
2606                    break;
2607
2608                default:
2609
2610
2611            }
2612
2613            if( direction != 'vertical' ) {
2614
2615                _.slideHandler( slideCount );
2616                _.touchObject = {};
2617                _.$slider.trigger('swipe', [_, direction ]);
2618
2619            }
2620
2621        } else {
2622
2623            if ( _.touchObject.startX !== _.touchObject.curX ) {
2624
2625                _.slideHandler( _.currentSlide );
2626                _.touchObject = {};
2627
2628            }
2629
2630        }
2631
2632    };
2633
2634    Slick.prototype.swipeHandler = function(event) {
2635
2636        var _ = this;
2637
2638        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {
2639            return;
2640        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {
2641            return;
2642        }
2643
2644        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?
2645            event.originalEvent.touches.length : 1;
2646
2647        _.touchObject.minSwipe = _.listWidth / _.options
2648            .touchThreshold;
2649
2650        if (_.options.verticalSwiping === true) {
2651            _.touchObject.minSwipe = _.listHeight / _.options
2652                .touchThreshold;
2653        }
2654
2655        switch (event.data.action) {
2656
2657            case 'start':
2658                _.swipeStart(event);
2659                break;
2660
2661            case 'move':
2662                _.swipeMove(event);
2663                break;
2664
2665            case 'end':
2666                _.swipeEnd(event);
2667                break;
2668
2669        }
2670
2671    };
2672
2673    Slick.prototype.swipeMove = function(event) {
2674
2675        var _ = this,
2676            edgeWasHit = false,
2677            curLeft, swipeDirection, swipeLength, positionOffset, touches;
2678
2679        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;
2680
2681        if (!_.dragging || touches && touches.length !== 1) {
2682            return false;
2683        }
2684
2685        curLeft = _.getLeft(_.currentSlide);
2686
2687        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
2688        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;
2689
2690        _.touchObject.swipeLength = Math.round(Math.sqrt(
2691            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));
2692
2693        if (_.options.verticalSwiping === true) {
2694            _.touchObject.swipeLength = Math.round(Math.sqrt(
2695                Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));
2696        }
2697
2698        swipeDirection = _.swipeDirection();
2699
2700        if (swipeDirection === 'vertical') {
2701            return;
2702        }
2703
2704        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {
2705            event.preventDefault();
2706        }
2707
2708        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);
2709        if (_.options.verticalSwiping === true) {
2710            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;
2711        }
2712
2713
2714        swipeLength = _.touchObject.swipeLength;
2715
2716        _.touchObject.edgeHit = false;
2717
2718        if (_.options.infinite === false) {
2719            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {
2720                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;
2721                _.touchObject.edgeHit = true;
2722            }
2723        }
2724
2725        if (_.options.vertical === false) {
2726            _.swipeLeft = curLeft + swipeLength * positionOffset;
2727        } else {
2728            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;
2729        }
2730        if (_.options.verticalSwiping === true) {
2731            _.swipeLeft = curLeft + swipeLength * positionOffset;
2732        }
2733
2734        if (_.options.fade === true || _.options.touchMove === false) {
2735            return false;
2736        }
2737
2738        if (_.animating === true) {
2739            _.swipeLeft = null;
2740            return false;
2741        }
2742
2743        _.setCSS(_.swipeLeft);
2744
2745    };
2746
2747    Slick.prototype.swipeStart = function(event) {
2748
2749        var _ = this,
2750            touches;
2751
2752        _.interrupted = true;
2753
2754        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
2755            _.touchObject = {};
2756            return false;
2757        }
2758
2759        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
2760            touches = event.originalEvent.touches[0];
2761        }
2762
2763        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
2764        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;
2765
2766        _.dragging = true;
2767
2768    };
2769
2770    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {
2771
2772        var _ = this;
2773
2774        if (_.$slidesCache !== null) {
2775
2776            _.unload();
2777
2778            _.$slideTrack.children(this.options.slide).detach();
2779
2780            _.$slidesCache.appendTo(_.$slideTrack);
2781
2782            _.reinit();
2783
2784        }
2785
2786    };
2787
2788    Slick.prototype.unload = function() {
2789
2790        var _ = this;
2791
2792        $('.slick-cloned', _.$slider).remove();
2793
2794        if (_.$dots) {
2795            _.$dots.remove();
2796        }
2797
2798        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {
2799            _.$prevArrow.remove();
2800        }
2801
2802        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {
2803            _.$nextArrow.remove();
2804        }
2805
2806        _.$slides
2807            .removeClass('slick-slide slick-active slick-visible slick-current')
2808            .attr('aria-hidden', 'true')
2809            .css('width', '');
2810
2811    };
2812
2813    Slick.prototype.unslick = function(fromBreakpoint) {
2814
2815        var _ = this;
2816        _.$slider.trigger('unslick', [_, fromBreakpoint]);
2817        _.destroy();
2818
2819    };
2820
2821    Slick.prototype.updateArrows = function() {
2822
2823        var _ = this,
2824            centerOffset;
2825
2826        centerOffset = Math.floor(_.options.slidesToShow / 2);
2827
2828        if ( _.options.arrows === true &&
2829            _.slideCount > _.options.slidesToShow &&
2830            !_.options.infinite ) {
2831
2832            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2833            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2834
2835            if (_.currentSlide === 0) {
2836
2837                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2838                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2839
2840            } else if (_.currentSlide >
2840= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {
2841
2842                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2843                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2844
2845            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {
2846
2847                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2848                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2849
2850            }
2851
2852        }
2853
2854    };
2855
2856    Slick.prototype.updateDots = function() {
2857
2858        var _ = this;
2859
2860        if (_.$dots !== null) {
2861
2862            _.$dots
2863                .find('li')
2864                .removeClass('slick-active')
2865                .attr('aria-hidden', 'true');
2866
2867            _.$dots
2868                .find('li')
2869                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))
2870                .addClass('slick-active')
2871                .attr('aria-hidden', 'false');
2872
2873        }
2874
2875    };
2876
2877    Slick.prototype.visibility = function() {
2878
2879        var _ = this;
2880
2881        if ( _.options.autoplay ) {
2882
2883            if ( document[_.hidden] ) {
2884
2885                _.interrupted = true;
2886
2887            } else {
2888
2889                _.interrupted = false;
2890
2891            }
2892
2893        }
2894
2895    };
2896
2897    $.fn.slick = function() {
2898        var _ = this,
2899            opt = arguments[0],
2900            args = Array.prototype.slice.call(arguments, 1),
2901            l = _.length,
2902            i,
2903            ret;
2904        for (i = 0; i < l; i++) {
2905            if (typeof opt == 'object' || typeof opt == 'undefined')
2906                _[i].slick = new Slick(_[i], opt);
2907            else
2908                ret = _[i].slick[opt].apply(_[i].slick, args);
2909            if (typeof ret != 'undefined') return ret;
2910        }
2911        return _;
2912    };
2913
2914}));
2915
2916/**
2917 * Swiper 11.0.7
2918 * Most modern mobile touch slider and framework with hardware accelerated transitions
2919 * https://swiperjs.com
2920 *
2921 * Copyright 2014-2024 Vladimir Kharlampidi
2922 *
2923 * Released under the MIT License
2924 *
2925 * Released on: February 27, 2024
2926 */
2927
2928var Swiper = (function () {
2929  'use strict';
2930
2931  /**
2932   * SSR Window 4.0.2
2933   * Better handling for window object in SSR environment
2934   * https://github.com/nolimits4web/ssr-window
2935   *
2936   * Copyright 2021, Vladimir Kharlampidi
2937   *
2938   * Licensed under MIT
2939   *
2940   * Released on: December 13, 2021
2941   */
2942  /* eslint-disable no-param-reassign */
2943  function isObject$1(obj) {
2944    return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;
2945  }
2946  function extend$1(target, src) {
2947    if (target === void 0) {
2948      target = {};
2949    }
2950    if (src === void 0) {
2951      src = {};
2952    }
2953    Object.keys(src).forEach(key => {
2954      if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject$1(src[key]) && isObject$1(target[key]) && Object.keys(src[key]).length > 0) {
2955        extend$1(target[key], src[key]);
2956      }
2957    });
2958  }
2959  const ssrDocument = {
2960    body: {},
2961    addEventListener() {},
2962    removeEventListener() {},
2963    activeElement: {
2964      blur() {},
2965      nodeName: ''
2966    },
2967    querySelector() {
2968      return null;
2969    },
2970    querySelectorAll() {
2971      return [];
2972    },
2973    getElementById() {
2974      return null;
2975    },
2976    createEvent() {
2977      return {
2978        initEvent() {}
2979      };
2980    },
2981    createElement() {
2982      return {
2983        children: [],
2984        childNodes: [],
2985        style: {},
2986        setAttribute() {},
2987        getElementsByTagName() {
2988          return [];
2989        }
2990      };
2991    },
2992    createElementNS() {
2993      return {};
2994    },
2995    importNode() {
2996      return null;
2997    },
2998    location: {
2999      hash: '',
3000      host: '',
3001      hostname: '',
3002      href: '',
3003      origin: '',
3004      pathname: '',
3005      protocol: '',
3006      search: ''
3007    }
3008  };
3009  function getDocument() {
3010    const doc = typeof document !== 'undefined' ? document : {};
3011    extend$1(doc, ssrDocument);
3012    return doc;
3013  }
3014  const ssrWindow = {
3015    document: ssrDocument,
3016    navigator: {
3017      userAgent: ''
3018    },
3019    location: {
3020      hash: '',
3021      host: '',
3022      hostname: '',
3023      href: '',
3024      origin: '',
3025      pathname: '',
3026      protocol: '',
3027      search: ''
3028    },
3029    history: {
3030      replaceState() {},
3031      pushState() {},
3032      go() {},
3033      back() {}
3034    },
3035    CustomEvent: function CustomEvent() {
3036      return this;
3037    },
3038    addEventListener() {},
3039    removeEventListener() {},
3040    getComputedStyle() {
3041      return {
3042        getPropertyValue() {
3043          return '';
3044        }
3045      };
3046    },
3047    Image() {},
3048    Date() {},
3049    screen: {},
3050    setTimeout() {},
3051    clearTimeout() {},
3052    matchMedia() {
3053      return {};
3054    },
3055    requestAnimationFrame(callback) {
3056      if (typeof setTimeout === 'undefined') {
3057        callback();
3058        return null;
3059      }
3060      return setTimeout(callback, 0);
3061    },
3062    cancelAnimationFrame(id) {
3063      if (typeof setTimeout === 'undefined') {
3064        return;
3065      }
3066      clearTimeout(id);
3067    }
3068  };
3069  function getWindow() {
3070    const win = typeof window !== 'undefined' ? window : {};
3071    extend$1(win, ssrWindow);
3072    return win;
3073  }
3074
vendor: 6,918 bytes, lines 3075-3273
3075  function classesToTokens(classes) {
3076    if (classes === void 0) {
3077      classes = '';
3078    }
3079    return classes.trim().split(' ').filter(c => !!c.trim());
3080  }
3081
3082  function deleteProps(obj) {
3083    const object = obj;
3084    Object.keys(object).forEach(key => {
3085      try {
3086        object[key] = null;
3087      } catch (e) {
3088        // no getter for object
3089      }
3090      try {
3091        delete object[key];
3092      } catch (e) {
3093        // something got wrong
3094      }
3095    });
3096  }
3097  function nextTick(callback, delay) {
3098    if (delay === void 0) {
3099      delay = 0;
3100    }
3101    return setTimeout(callback, delay);
3102  }
3103  function now() {
3104    return Date.now();
3105  }
3106  function getComputedStyle$1(el) {
3107    const window = getWindow();
3108    let style;
3109    if (window.getComputedStyle) {
3110      style = window.getComputedStyle(el, null);
3111    }
3112    if (!style && el.currentStyle) {
3113      style = el.currentStyle;
3114    }
3115    if (!style) {
3116      style = el.style;
3117    }
3118    return style;
3119  }
3120  function getTranslate(el, axis) {
3121    if (axis === void 0) {
3122      axis = 'x';
3123    }
3124    const window = getWindow();
3125    let matrix;
3126    let curTransform;
3127    let transformMatrix;
3128    const curStyle = getComputedStyle$1(el);
3129    if (window.WebKitCSSMatrix) {
3130      curTransform = curStyle.transform || curStyle.webkitTransform;
3131      if (curTransform.split(',').length > 6) {
3132        curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');
3133      }
3134      // Some old versions of Webkit choke when 'none' is passed; pass
3135      // empty string instead in this case
3136      transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
3137    } else {
3138      transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
3139      matrix = transformMatrix.toString().split(',');
3140    }
3141    if (axis === 'x') {
3142      // Latest Chrome and webkits Fix
3143      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;
3144      // Crazy IE10 Matrix
3145      else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);
3146      // Normal Browsers
3147      else curTransform = parseFloat(matrix[4]);
3148    }
3149    if (axis === 'y') {
3150      // Latest Chrome and webkits Fix
3151      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;
3152      // Crazy IE10 Matrix
3153      else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);
3154      // Normal Browsers
3155      else curTransform = parseFloat(matrix[5]);
3156    }
3157    return curTransform || 0;
3158  }
3159  function isObject(o) {
3160    return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';
3161  }
3162  function isNode(node) {
3163    // eslint-disable-next-line
3164    if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {
3165      return node instanceof HTMLElement;
3166    }
3167    return node && (node.nodeType === 1 || node.nodeType === 11);
3168  }
3169  function extend() {
3170    const to = Object(arguments.length <= 0 ? undefined : arguments[0]);
3171    const noExtend = ['__proto__', 'constructor', 'prototype'];
3172    for (let i = 1; i < arguments.length; i += 1) {
3173      const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];
3174      if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {
3175        const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);
3176        for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
3177          const nextKey = keysArray[nextIndex];
3178          const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
3179          if (desc !== undefined && desc.enumerable) {
3180            if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
3181              if (nextSource[nextKey].__swiper__) {
3182                to[nextKey] = nextSource[nextKey];
3183              } else {
3184                extend(to[nextKey], nextSource[nextKey]);
3185              }
3186            } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
3187              to[nextKey] = {};
3188              if (nextSource[nextKey].__swiper__) {
3189                to[nextKey] = nextSource[nextKey];
3190              } else {
3191                extend(to[nextKey], nextSource[nextKey]);
3192              }
3193            } else {
3194              to[nextKey] = nextSource[nextKey];
3195            }
3196          }
3197        }
3198      }
3199    }
3200    return to;
3201  }
3202  function setCSSProperty(el, varName, varValue) {
3203    el.style.setProperty(varName, varValue);
3204  }
3205  function animateCSSModeScroll(_ref) {
3206    let {
3207      swiper,
3208      targetPosition,
3209      side
3210    } = _ref;
3211    const window = getWindow();
3212    const startPosition = -swiper.translate;
3213    let startTime = null;
3214    let time;
3215    const duration = swiper.params.speed;
3216    swiper.wrapperEl.style.scrollSnapType = 'none';
3217    window.cancelAnimationFrame(swiper.cssModeFrameID);
3218    const dir = targetPosition > startPosition ? 'next' : 'prev';
3219    const isOutOfBound = (current, target) => {
3220      return dir === 'next' && current >= target || dir === 'prev' && current <= target;
3221    };
3222    const animate = () => {
3223      time = new Date().getTime();
3224      if (startTime === null) {
3225        startTime = time;
3226      }
3227      const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);
3228      const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;
3229      let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);
3230      if (isOutOfBound(currentPosition, targetPosition)) {
3231        currentPosition = targetPosition;
3232      }
3233      swiper.wrapperEl.scrollTo({
3234        [side]: currentPosition
3235      });
3236      if (isOutOfBound(currentPosition, targetPosition)) {
3237        swiper.wrapperEl.style.overflow = 'hidden';
3238        swiper.wrapperEl.style.scrollSnapType = '';
3239        setTimeout(() => {
3240          swiper.wrapperEl.style.overflow = '';
3241          swiper.wrapperEl.scrollTo({
3242            [side]: currentPosition
3243          });
3244        });
3245        window.cancelAnimationFrame(swiper.cssModeFrameID);
3246        return;
3247      }
3248      swiper.cssModeFrameID = window.requestAnimationFrame(animate);
3249    };
3250    animate();
3251  }
3252  function getSlideTransformEl(slideEl) {
3253    return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;
3254  }
3255  function elementChildren(element, selector) {
3256    if (selector === void 0) {
3257      selector = '';
3258    }
3259    return [...element.children].filter(el => el.matches(selector));
3260  }
3261  function showWarning(text) {
3262    try {
3263      console.warn(text);
3264      return;
3265    } catch (err) {
3266      // err
3267    }
3268  }
3269  function createElement(tag, classes) {
3270    if (classes === void 0) {
3271      classes = [];
3272    }
3273    const el = document.createElement(tag);
vendor: 3,558 bytes, lines 3274-3384
3274    el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));
3275    return el;
3276  }
3277  function elementOffset(el) {
3278    const window = getWindow();
3279    const document = getDocument();
3280    const box = el.getBoundingClientRect();
3281    const body = document.body;
3282    const clientTop = el.clientTop || body.clientTop || 0;
3283    const clientLeft = el.clientLeft || body.clientLeft || 0;
3284    const scrollTop = el === window ? window.scrollY : el.scrollTop;
3285    const scrollLeft = el === window ? window.scrollX : el.scrollLeft;
3286    return {
3287      top: box.top + scrollTop - clientTop,
3288      left: box.left + scrollLeft - clientLeft
3289    };
3290  }
3291  function elementPrevAll(el, selector) {
3292    const prevEls = [];
3293    while (el.previousElementSibling) {
3294      const prev = el.previousElementSibling; // eslint-disable-line
3295      if (selector) {
3296        if (prev.matches(selector)) prevEls.push(prev);
3297      } else prevEls.push(prev);
3298      el = prev;
3299    }
3300    return prevEls;
3301  }
3302  function elementNextAll(el, selector) {
3303    const nextEls = [];
3304    while (el.nextElementSibling) {
3305      const next = el.nextElementSibling; // eslint-disable-line
3306      if (selector) {
3307        if (next.matches(selector)) nextEls.push(next);
3308      } else nextEls.push(next);
3309      el = next;
3310    }
3311    return nextEls;
3312  }
3313  function elementStyle(el, prop) {
3314    const window = getWindow();
3315    return window.getComputedStyle(el, null).getPropertyValue(prop);
3316  }
3317  function elementIndex(el) {
3318    let child = el;
3319    let i;
3320    if (child) {
3321      i = 0;
3322      // eslint-disable-next-line
3323      while ((child = child.previousSibling) !== null) {
3324        if (child.nodeType === 1) i += 1;
3325      }
3326      return i;
3327    }
3328    return undefined;
3329  }
3330  function elementParents(el, selector) {
3331    const parents = []; // eslint-disable-line
3332    let parent = el.parentElement; // eslint-disable-line
3333    while (parent) {
3334      if (selector) {
3335        if (parent.matches(selector)) parents.push(parent);
3336      } else {
3337        parents.push(parent);
3338      }
3339      parent = parent.parentElement;
3340    }
3341    return parents;
3342  }
3343  function elementTransitionEnd(el, callback) {
3344    function fireCallBack(e) {
3345      if (e.target !== el) return;
3346      callback.call(el, e);
3347      el.removeEventListener('transitionend', fireCallBack);
3348    }
3349    if (callback) {
3350      el.addEventListener('transitionend', fireCallBack);
3351    }
3352  }
3353  function elementOuterSize(el, size, includeMargins) {
3354    const window = getWindow();
3355    if (includeMargins) {
3356      return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));
3357    }
3358    return el.offsetWidth;
3359  }
3360  function makeElementsArray(el) {
3361    return (Array.isArray(el) ? el : [el]).filter(e => !!e);
3362  }
3363
3364  let support;
3365  function calcSupport() {
3366    const window = getWindow();
3367    const document = getDocument();
3368    return {
3369      smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,
3370      touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)
3371    };
3372  }
3373  function getSupport() {
3374    if (!support) {
3375      support = calcSupport();
3376    }
3377    return support;
3378  }
3379
3380  let deviceCached;
3381  function calcDevice(_temp) {
3382    let {
3383      userAgent
3384    } = _temp === void 0 ? {} : _temp;
vendor: 6,091 bytes, lines 3385-3569
3385    const support = getSupport();
3386    const window = getWindow();
3387    const platform = window.navigator.platform;
3388    const ua = userAgent || window.navigator.userAgent;
3389    const device = {
3390      ios: false,
3391      android: false
3392    };
3393    const screenWidth = window.screen.width;
3394    const screenHeight = window.screen.height;
3395    const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
3396    let ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
3397    const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
3398    const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
3399    const windows = platform === 'Win32';
3400    let macos = platform === 'MacIntel';
3401
3402    // iPadOs 13 fix
3403    const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];
3404    if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {
3405      ipad = ua.match(/(Version)\/([\d.]+)/);
3406      if (!ipad) ipad = [0, 1, '13_0_0'];
3407      macos = false;
3408    }
3409
3410    // Android
3411    if (android && !windows) {
3412      device.os = 'android';
3413      device.android = true;
3414    }
3415    if (ipad || iphone || ipod) {
3416      device.os = 'ios';
3417      device.ios = true;
3418    }
3419
3420    // Export object
3421    return device;
3422  }
3423  function getDevice(overrides) {
3424    if (overrides === void 0) {
3425      overrides = {};
3426    }
3427    if (!deviceCached) {
3428      deviceCached = calcDevice(overrides);
3429    }
3430    return deviceCached;
3431  }
3432
3433  let browser;
3434  function calcBrowser() {
3435    const window = getWindow();
3436    const device = getDevice();
3437    let needPerspectiveFix = false;
3438    function isSafari() {
3439      const ua = window.navigator.userAgent.toLowerCase();
3440      return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;
3441    }
3442    if (isSafari()) {
3443      const ua = String(window.navigator.userAgent);
3444      if (ua.includes('Version/')) {
3445        const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));
3446        needPerspectiveFix = major < 16 || major === 16 && minor < 2;
3447      }
3448    }
3449    const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);
3450    const isSafariBrowser = isSafari();
3451    const need3dFix = isSafariBrowser || isWebView && device.ios;
3452    return {
3453      isSafari: needPerspectiveFix || isSafariBrowser,
3454      needPerspectiveFix,
3455      need3dFix,
3456      isWebView
3457    };
3458  }
3459  function getBrowser() {
3460    if (!browser) {
3461      browser = calcBrowser();
3462    }
3463    return browser;
3464  }
3465
3466  function Resize(_ref) {
3467    let {
3468      swiper,
3469      on,
3470      emit
3471    } = _ref;
3472    const window = getWindow();
3473    let observer = null;
3474    let animationFrame = null;
3475    const resizeHandler = () => {
3476      if (!swiper || swiper.destroyed || !swiper.initialized) return;
3477      emit('beforeResize');
3478      emit('resize');
3479    };
3480    const createObserver = () => {
3481      if (!swiper || swiper.destroyed || !swiper.initialized) return;
3482      observer = new ResizeObserver(entries => {
3483        animationFrame = window.requestAnimationFrame(() => {
3484          const {
3485            width,
3486            height
3487          } = swiper;
3488          let newWidth = width;
3489          let newHeight = height;
3490          entries.forEach(_ref2 => {
3491            let {
3492              contentBoxSize,
3493              contentRect,
3494              target
3495            } = _ref2;
3496            if (target && target !== swiper.el) return;
3497            newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;
3498            newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;
3499          });
3500          if (newWidth !== width || newHeight !== height) {
3501            resizeHandler();
3502          }
3503        });
3504      });
3505      observer.observe(swiper.el);
3506    };
3507    const removeObserver = () => {
3508      if (animationFrame) {
3509        window.cancelAnimationFrame(animationFrame);
3510      }
3511      if (observer && observer.unobserve && swiper.el) {
3512        observer.unobserve(swiper.el);
3513        observer = null;
3514      }
3515    };
3516    const orientationChangeHandler = () => {
3517      if (!swiper || swiper.destroyed || !swiper.initialized) return;
3518      emit('orientationchange');
3519    };
3520    on('init', () => {
3521      if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {
3522        createObserver();
3523        return;
3524      }
3525      window.addEventListener('resize', resizeHandler);
3526      window.addEventListener('orientationchange', orientationChangeHandler);
3527    });
3528    on('destroy', () => {
3529      removeObserver();
3530      window.removeEventListener('resize', resizeHandler);
3531      window.removeEventListener('orientationchange', orientationChangeHandler);
3532    });
3533  }
3534
3535  function Observer(_ref) {
3536    let {
3537      swiper,
3538      extendParams,
3539      on,
3540      emit
3541    } = _ref;
3542    const observers = [];
3543    const window = getWindow();
3544    const attach = function (target, options) {
3545      if (options === void 0) {
3546        options = {};
3547      }
3548      const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
3549      const observer = new ObserverFunc(mutations => {
3550        // The observerUpdate event should only be triggered
3551        // once despite the number of mutations.  Additional
3552        // triggers are redundant and are very costly
3553        if (swiper.__preventObserver__) return;
3554        if (mutations.length === 1) {
3555          emit('observerUpdate', mutations[0]);
3556          return;
3557        }
3558        const observerUpdate = function observerUpdate() {
3559          emit('observerUpdate', mutations[0]);
3560        };
3561        if (window.requestAnimationFrame) {
3562          window.requestAnimationFrame(observerUpdate);
3563        } else {
3564          window.setTimeout(observerUpdate, 0);
3565        }
3566      });
3567      observer.observe(target, {
3568        attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
3569        childList: typeof options.childList === 'undefined' ? true : options
vendor: 7,890 bytes, lines 3569-3800
3569.childList,
3570        characterData: typeof options.characterData === 'undefined' ? true : options.characterData
3571      });
3572      observers.push(observer);
3573    };
3574    const init = () => {
3575      if (!swiper.params.observer) return;
3576      if (swiper.params.observeParents) {
3577        const containerParents = elementParents(swiper.hostEl);
3578        for (let i = 0; i < containerParents.length; i += 1) {
3579          attach(containerParents[i]);
3580        }
3581      }
3582      // Observe container
3583      attach(swiper.hostEl, {
3584        childList: swiper.params.observeSlideChildren
3585      });
3586
3587      // Observe wrapper
3588      attach(swiper.wrapperEl, {
3589        attributes: false
3590      });
3591    };
3592    const destroy = () => {
3593      observers.forEach(observer => {
3594        observer.disconnect();
3595      });
3596      observers.splice(0, observers.length);
3597    };
3598    extendParams({
3599      observer: false,
3600      observeParents: false,
3601      observeSlideChildren: false
3602    });
3603    on('init', init);
3604    on('destroy', destroy);
3605  }
3606
3607  /* eslint-disable no-underscore-dangle */
3608
3609  var eventsEmitter = {
3610    on(events, handler, priority) {
3611      const self = this;
3612      if (!self.eventsListeners || self.destroyed) return self;
3613      if (typeof handler !== 'function') return self;
3614      const method = priority ? 'unshift' : 'push';
3615      events.split(' ').forEach(event => {
3616        if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
3617        self.eventsListeners[event][method](handler);
3618      });
3619      return self;
3620    },
3621    once(events, handler, priority) {
3622      const self = this;
3623      if (!self.eventsListeners || self.destroyed) return self;
3624      if (typeof handler !== 'function') return self;
3625      function onceHandler() {
3626        self.off(events, onceHandler);
3627        if (onceHandler.__emitterProxy) {
3628          delete onceHandler.__emitterProxy;
3629        }
3630        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
3631          args[_key] = arguments[_key];
3632        }
3633        handler.apply(self, args);
3634      }
3635      onceHandler.__emitterProxy = handler;
3636      return self.on(events, onceHandler, priority);
3637    },
3638    onAny(handler, priority) {
3639      const self = this;
3640      if (!self.eventsListeners || self.destroyed) return self;
3641      if (typeof handler !== 'function') return self;
3642      const method = priority ? 'unshift' : 'push';
3643      if (self.eventsAnyListeners.indexOf(handler) < 0) {
3644        self.eventsAnyListeners[method](handler);
3645      }
3646      return self;
3647    },
3648    offAny(handler) {
3649      const self = this;
3650      if (!self.eventsListeners || self.destroyed) return self;
3651      if (!self.eventsAnyListeners) return self;
3652      const index = self.eventsAnyListeners.indexOf(handler);
3653      if (index >= 0) {
3654        self.eventsAnyListeners.splice(index, 1);
3655      }
3656      return self;
3657    },
3658    off(events, handler) {
3659      const self = this;
3660      if (!self.eventsListeners || self.destroyed) return self;
3661      if (!self.eventsListeners) return self;
3662      events.split(' ').forEach(event => {
3663        if (typeof handler === 'undefined') {
3664          self.eventsListeners[event] = [];
3665        } else if (self.eventsListeners[event]) {
3666          self.eventsListeners[event].forEach((eventHandler, index) => {
3667            if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {
3668              self.eventsListeners[event].splice(index, 1);
3669            }
3670          });
3671        }
3672      });
3673      return self;
3674    },
3675    emit() {
3676      const self = this;
3677      if (!self.eventsListeners || self.destroyed) return self;
3678      if (!self.eventsListeners) return self;
3679      let events;
3680      let data;
3681      let context;
3682      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
3683        args[_key2] = arguments[_key2];
3684      }
3685      if (typeof args[0] === 'string' || Array.isArray(args[0])) {
3686        events = args[0];
3687        data = args.slice(1, args.length);
3688        context = self;
3689      } else {
3690        events = args[0].events;
3691        data = args[0].data;
3692        context = args[0].context || self;
3693      }
3694      data.unshift(context);
3695      const eventsArray = Array.isArray(events) ? events : events.split(' ');
3696      eventsArray.forEach(event => {
3697        if (self.eventsAnyListeners && self.eventsAnyListeners.length) {
3698          self.eventsAnyListeners.forEach(eventHandler => {
3699            eventHandler.apply(context, [event, ...data]);
3700          });
3701        }
3702        if (self.eventsListeners && self.eventsListeners[event]) {
3703          self.eventsListeners[event].forEach(eventHandler => {
3704            eventHandler.apply(context, data);
3705          });
3706        }
3707      });
3708      return self;
3709    }
3710  };
3711
3712  function updateSize() {
3713    const swiper = this;
3714    let width;
3715    let height;
3716    const el = swiper.el;
3717    if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {
3718      width = swiper.params.width;
3719    } else {
3720      width = el.clientWidth;
3721    }
3722    if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {
3723      height = swiper.params.height;
3724    } else {
3725      height = el.clientHeight;
3726    }
3727    if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {
3728      return;
3729    }
3730
3731    // Subtract paddings
3732    width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);
3733    height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);
3734    if (Number.isNaN(width)) width = 0;
3735    if (Number.isNaN(height)) height = 0;
3736    Object.assign(swiper, {
3737      width,
3738      height,
3739      size: swiper.isHorizontal() ? width : height
3740    });
3741  }
3742
3743  function updateSlides() {
3744    const swiper = this;
3745    function getDirectionPropertyValue(node, label) {
3746      return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);
3747    }
3748    const params = swiper.params;
3749    const {
3750      wrapperEl,
3751      slidesEl,
3752      size: swiperSize,
3753      rtlTranslate: rtl,
3754      wrongRTL
3755    } = swiper;
3756    const isVirtual = swiper.virtual && params.virtual.enabled;
3757    const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
3758    const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);
3759    const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
3760    let snapGrid = [];
3761    const slidesGrid = [];
3762    const slidesSizesGrid = [];
3763    let offsetBefore = params.slidesOffsetBefore;
3764    if (typeof offsetBefore === 'function') {
3765      offsetBefore = params.slidesOffsetBefore.call(swiper);
3766    }
3767    let offsetAfter = params.slidesOffsetAfter;
3768    if (typeof offsetAfter === 'function') {
3769      offsetAfter = params.slidesOffsetAfter.call(swiper);
3770    }
3771    const previousSnapGridLength = swiper.snapGrid.length;
3772    const previousSlidesGridLength = swiper.slidesGrid.length;
3773    let spaceBetween = params.spaceBetween;
3774    let slidePosition = -offsetBefore;
3775    let prevSlideSize = 0;
3776    let index = 0;
3777    if (typeof swiperSize === 'undefined') {
3778      return;
3779    }
3780    if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
3781      spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;
3782    } else if (typeof spaceBetween === 'string') {
3783      spaceBetween = parseFloat(spaceBetween);
3784    }
3785    swiper.virtualSize = -spaceBetween;
3786
3787    // reset margins
3788    slides.forEach(slideEl => {
3789      if (rtl) {
3790        slideEl.style.marginLeft = '';
3791      } else {
3792        slideEl.style.marginRight = '';
3793      }
3794      slideEl.style.marginBottom = '';
3795      slideEl.style.marginTop = '';
3796    });
3797
3798    // reset cssMode offsets
3799    if (params.centeredSlides && params.cssMode) {
3800      setCSSProperty
3800(wrapperEl, '--swiper-centered-offset-before', '');
3801      setCSSProperty
vendor: 6,800 bytes, lines 3801-3955
3801(wrapperEl, '--swiper-centered-offset-after', '');
3802    }
3803    const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;
3804    if (gridEnabled) {
3805      swiper.grid.initSlides(slides);
3806    } else if (swiper.grid) {
3807      swiper.grid.unsetSlides();
3808    }
3809
3810    // Calc slides
3811    let slideSize;
3812    const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {
3813      return typeof params.breakpoints[key].slidesPerView !== 'undefined';
3814    }).length > 0;
3815    for (let i = 0; i < slidesLength; i += 1) {
3816      slideSize = 0;
3817      let slide;
3818      if (slides[i]) slide = slides[i];
3819      if (gridEnabled) {
3820        swiper.grid.updateSlide(i, slide, slides);
3821      }
3822      if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line
3823
3824      if (params.slidesPerView === 'auto') {
3825        if (shouldResetSlideSize) {
3826          slides[i].style[swiper.getDirectionLabel('width')] = ``;
3827        }
3828        const slideStyles = getComputedStyle(slide);
3829        const currentTransform = slide.style.transform;
3830        const currentWebKitTransform = slide.style.webkitTransform;
3831        if (currentTransform) {
3832          slide.style.transform = 'none';
3833        }
3834        if (currentWebKitTransform) {
3835          slide.style.webkitTransform = 'none';
3836        }
3837        if (params.roundLengths) {
3838          slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);
3839        } else {
3840          // eslint-disable-next-line
3841          const width = getDirectionPropertyValue(slideStyles, 'width');
3842          const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');
3843          const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');
3844          const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');
3845          const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');
3846          const boxSizing = slideStyles.getPropertyValue('box-sizing');
3847          if (boxSizing && boxSizing === 'border-box') {
3848            slideSize = width + marginLeft + marginRight;
3849          } else {
3850            const {
3851              clientWidth,
3852              offsetWidth
3853            } = slide;
3854            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);
3855          }
3856        }
3857        if (currentTransform) {
3858          slide.style.transform = currentTransform;
3859        }
3860        if (currentWebKitTransform) {
3861          slide.style.webkitTransform = currentWebKitTransform;
3862        }
3863        if (params.roundLengths) slideSize = Math.floor(slideSize);
3864      } else {
3865        slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;
3866        if (params.roundLengths) slideSize = Math.floor(slideSize);
3867        if (slides[i]) {
3868          slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;
3869        }
3870      }
3871      if (slides[i]) {
3872        slides[i].swiperSlideSize = slideSize;
3873      }
3874      slidesSizesGrid.push(slideSize);
3875      if (params.centeredSlides) {
3876        slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
3877        if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
3878        if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
3879        if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
3880        if (params.roundLengths) slidePosition = Math.floor(slidePosition);
3881        if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
3882        slidesGrid.push(slidePosition);
3883      } else {
3884        if (params.roundLengths) slidePosition = Math.floor(slidePosition);
3885        if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);
3886        slidesGrid.push(slidePosition);
3887        slidePosition = slidePosition + slideSize + spaceBetween;
3888      }
3889      swiper.virtualSize += slideSize + spaceBetween;
3890      prevSlideSize = slideSize;
3891      index += 1;
3892    }
3893    swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
3894    if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
3895      wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;
3896    }
3897    if (params.setWrapperSize) {
3898      wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;
3899    }
3900    if (gridEnabled) {
3901      swiper.grid.updateWrapperSize(slideSize, snapGrid);
3902    }
3903
3904    // Remove last grid elements depending on width
3905    if (!params.centeredSlides) {
3906      const newSlidesGrid = [];
3907      for (let i = 0; i < snapGrid.length; i += 1) {
3908        let slidesGridItem = snapGrid[i];
3909        if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
3910        if (snapGrid[i] <= swiper.virtualSize - swiperSize) {
3911          newSlidesGrid.push(slidesGridItem);
3912        }
3913      }
3914      snapGrid = newSlidesGrid;
3915      if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
3916        snapGrid.push(swiper.virtualSize - swiperSize);
3917      }
3918    }
3919    if (isVirtual && params.loop) {
3920      const size = slidesSizesGrid[0] + spaceBetween;
3921      if (params.slidesPerGroup > 1) {
3922        const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);
3923        const groupSize = size * params.slidesPerGroup;
3924        for (let i = 0; i < groups; i += 1) {
3925          snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);
3926        }
3927      }
3928      for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {
3929        if (params.slidesPerGroup === 1) {
3930          snapGrid.push(snapGrid[snapGrid.length - 1] + size);
3931        }
3932        slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);
3933        swiper.virtualSize += size;
3934      }
3935    }
3936    if (snapGrid.length === 0) snapGrid = [0];
3937    if (spaceBetween !== 0) {
3938      const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');
3939      slides.filter((_, slideIndex) => {
3940        if (!params.cssMode || params.loop) return true;
3941        if (slideIndex === slides.length - 1) {
3942          return false;
3943        }
3944        return true;
3945      }).forEach(slideEl => {
3946        slideEl.style[key] = `${spaceBetween}px`;
3947      });
3948    }
3949    if (params.centeredSlides && params.centeredSlidesBounds) {
3950      let allSlidesSize = 0;
3951      slidesSizesGrid.forEach(slideSizeValue => {
3952        allSlidesSize += slideSizeValue + (spaceBetween || 0);
3953      });
3954      allSlidesSize -= spaceBetween;
3955      const maxSnap = allSlidesSize 
vendor: 3,181 bytes, lines 3955-4036
3955- swiperSize;
3956      snapGrid = snapGrid.map(snap => {
3957        if (snap <= 0) return -offsetBefore;
3958        if (snap > maxSnap) return maxSnap + offsetAfter;
3959        return snap;
3960      });
3961    }
3962    if (params.centerInsufficientSlides) {
3963      let allSlidesSize = 0;
3964      slidesSizesGrid.forEach(slideSizeValue => {
3965        allSlidesSize += slideSizeValue + (spaceBetween || 0);
3966      });
3967      allSlidesSize -= spaceBetween;
3968      if (allSlidesSize < swiperSize) {
3969        const allSlidesOffset = (swiperSize - allSlidesSize) / 2;
3970        snapGrid.forEach((snap, snapIndex) => {
3971          snapGrid[snapIndex] = snap - allSlidesOffset;
3972        });
3973        slidesGrid.forEach((snap, snapIndex) => {
3974          slidesGrid[snapIndex] = snap + allSlidesOffset;
3975        });
3976      }
3977    }
3978    Object.assign(swiper, {
3979      slides,
3980      snapGrid,
3981      slidesGrid,
3982      slidesSizesGrid
3983    });
3984    if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {
3985      setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);
3986      setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);
3987      const addToSnapGrid = -swiper.snapGrid[0];
3988      const addToSlidesGrid = -swiper.slidesGrid[0];
3989      swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);
3990      swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);
3991    }
3992    if (slidesLength !== previousSlidesLength) {
3993      swiper.emit('slidesLengthChange');
3994    }
3995    if (snapGrid.length !== previousSnapGridLength) {
3996      if (swiper.params.watchOverflow) swiper.checkOverflow();
3997      swiper.emit('snapGridLengthChange');
3998    }
3999    if (slidesGrid.length !== previousSlidesGridLength) {
4000      swiper.emit('slidesGridLengthChange');
4001    }
4002    if (params.watchSlidesProgress) {
4003      swiper.updateSlidesOffset();
4004    }
4005    swiper.emit('slidesUpdated');
4006    if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {
4007      const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;
4008      const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);
4009      if (slidesLength <= params.maxBackfaceHiddenSlides) {
4010        if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);
4011      } else if (hasClassBackfaceClassAdded) {
4012        swiper.el.classList.remove(backFaceHiddenClass);
4013      }
4014    }
4015  }
4016
4017  function updateAutoHeight(speed) {
4018    const swiper = this;
4019    const activeSlides = [];
4020    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
4021    let newHeight = 0;
4022    let i;
4023    if (typeof speed === 'number') {
4024      swiper.setTransition(speed);
4025    } else if (speed === true) {
4026      swiper.setTransition(swiper.params.speed);
4027    }
4028    const getSlideByIndex = index => {
4029      if (isVirtual) {
4030        return swiper.slides[swiper.getSlideIndexByData(index)];
4031      }
4032      return swiper.slides[index];
4033    };
4034    // Find slides currently in view
4035    if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
4036      if (swiper.params.centeredSlides) {
vendor: 1,816 bytes, lines 4037-4089
4037        (swiper.visibleSlides || []).forEach(slide => {
4038          activeSlides.push(slide);
4039        });
4040      } else {
4041        for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
4042          const index = swiper.activeIndex + i;
4043          if (index > swiper.slides.length && !isVirtual) break;
4044          activeSlides.push(getSlideByIndex(index));
4045        }
4046      }
4047    } else {
4048      activeSlides.push(getSlideByIndex(swiper.activeIndex));
4049    }
4050
4051    // Find new height from highest slide in view
4052    for (i = 0; i < activeSlides.length; i += 1) {
4053      if (typeof activeSlides[i] !== 'undefined') {
4054        const height = activeSlides[i].offsetHeight;
4055        newHeight = height > newHeight ? height : newHeight;
4056      }
4057    }
4058
4059    // Update Height
4060    if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;
4061  }
4062
4063  function updateSlidesOffset() {
4064    const swiper = this;
4065    const slides = swiper.slides;
4066    // eslint-disable-next-line
4067    const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;
4068    for (let i = 0; i < slides.length; i += 1) {
4069      slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();
4070    }
4071  }
4072
4073  function updateSlidesProgress(translate) {
4074    if (translate === void 0) {
4075      translate = this && this.translate || 0;
4076    }
4077    const swiper = this;
4078    const params = swiper.params;
4079    const {
4080      slides,
4081      rtlTranslate: rtl,
4082      snapGrid
4083    } = swiper;
4084    if (slides.length === 0) return;
4085    if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();
4086    let offsetCenter = -translate;
4087    if (rtl) offsetCenter = translate;
4088
4089    // Visible Slides
vendor: 4,685 bytes, lines 4090-4201
4090    slides.forEach(slideEl => {
4091      slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass);
4092    });
4093    swiper.visibleSlidesIndexes = [];
4094    swiper.visibleSlides = [];
4095    let spaceBetween = params.spaceBetween;
4096    if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
4097      spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;
4098    } else if (typeof spaceBetween === 'string') {
4099      spaceBetween = parseFloat(spaceBetween);
4100    }
4101    for (let i = 0; i < slides.length; i += 1) {
4102      const slide = slides[i];
4103      let slideOffset = slide.swiperSlideOffset;
4104      if (params.cssMode && params.centeredSlides) {
4105        slideOffset -= slides[0].swiperSlideOffset;
4106      }
4107      const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);
4108      const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);
4109      const slideBefore = -(offsetCenter - slideOffset);
4110      const slideAfter = slideBefore + swiper.slidesSizesGrid[i];
4111      const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];
4112      const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;
4113      if (isVisible) {
4114        swiper.visibleSlides.push(slide);
4115        swiper.visibleSlidesIndexes.push(i);
4116        slides[i].classList.add(params.slideVisibleClass);
4117      }
4118      if (isFullyVisible) {
4119        slides[i].classList.add(params.slideFullyVisibleClass);
4120      }
4121      slide.progress = rtl ? -slideProgress : slideProgress;
4122      slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;
4123    }
4124  }
4125
4126  function updateProgress(translate) {
4127    const swiper = this;
4128    if (typeof translate === 'undefined') {
4129      const multiplier = swiper.rtlTranslate ? -1 : 1;
4130      // eslint-disable-next-line
4131      translate = swiper && swiper.translate && swiper.translate * multiplier || 0;
4132    }
4133    const params = swiper.params;
4134    const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
4135    let {
4136      progress,
4137      isBeginning,
4138      isEnd,
4139      progressLoop
4140    } = swiper;
4141    const wasBeginning = isBeginning;
4142    const wasEnd = isEnd;
4143    if (translatesDiff === 0) {
4144      progress = 0;
4145      isBeginning = true;
4146      isEnd = true;
4147    } else {
4148      progress = (translate - swiper.minTranslate()) / translatesDiff;
4149      const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;
4150      const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;
4151      isBeginning = isBeginningRounded || progress <= 0;
4152      isEnd = isEndRounded || progress >= 1;
4153      if (isBeginningRounded) progress = 0;
4154      if (isEndRounded) progress = 1;
4155    }
4156    if (params.loop) {
4157      const firstSlideIndex = swiper.getSlideIndexByData(0);
4158      const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);
4159      const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];
4160      const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];
4161      const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];
4162      const translateAbs = Math.abs(translate);
4163      if (translateAbs >= firstSlideTranslate) {
4164        progressLoop = (translateAbs - firstSlideTranslate) / translateMax;
4165      } else {
4166        progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;
4167      }
4168      if (progressLoop > 1) progressLoop -= 1;
4169    }
4170    Object.assign(swiper, {
4171      progress,
4172      progressLoop,
4173      isBeginning,
4174      isEnd
4175    });
4176    if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);
4177    if (isBeginning && !wasBeginning) {
4178      swiper.emit('reachBeginning toEdge');
4179    }
4180    if (isEnd && !wasEnd) {
4181      swiper.emit('reachEnd toEdge');
4182    }
4183    if (wasBeginning && !isBeginning || wasEnd && !isEnd) {
4184      swiper.emit('fromEdge');
4185    }
4186    swiper.emit('progress', progress);
4187  }
4188
4189  function updateSlidesClasses() {
4190    const swiper = this;
4191    const {
4192      slides,
4193      params,
4194      slidesEl,
4195      activeIndex
4196    } = swiper;
4197    const isVirtual = swiper.virtual && params.virtual.enabled;
4198    const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
4199    const getFilteredSlide = selector => {
4200      return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];
4201    };
4202    slides.forEach(slideEl => {
4203      slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);
4204    });
4205    let activeSlide;
4206    let prevSlide;
4207    let nextSlide;
4208    if (isVirtual) {
4209      if (params.loop) {
4210        let slideIndex = activeIndex - swiper.virtual.slidesBefore;
4211        if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;
4212        if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;
4213        activeSlide = getFilteredSlide(`[data-swiper-slide-index="${slideIndex}"]`);
4214      } else {
4215        activeSlide = getFilteredSlide(`[data-swiper-slide-index="${activeIndex}"]`);
4216      }
4217    } else {
4218      if (gridEnabled) {
4219        activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0];
4220        nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0];
4221        prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0];
4222      } else {
4223        activeSlide = slides[activeIndex];
4224      }
4225    }
4226    if (activeSlide) {
4227      // Active classes
4228      activeSlide.classList.add(params.slideActiveClass);
4229      if (gridEnabled) {
4230        if (nextSlide) {
4231          nextSlide.classList.add(params.slideNextClass);
4232        }
4233        if (prevSlide) {
4234          prevSlide.classList.add(params.slidePrevClass);
4235        }
4236      } else {
4237        // Next Slide
4238        nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
4239        if (params.loop && !nextSlide) {
4240          nextSlide = slides[0];
4241        }
4242        if (nextSlide) {
4243          nextSlide.classList.add(params.slideNextClass);
4244        }
4245
4246        // Prev Slide
4247        prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
4248        if (params.loop && !prevSlide === 0) {
4249          prevSlide = slides[slides.length - 1];
4250        }
4251        if (prevSlide) {
4252          prevSlide.classList.add(params.slidePrevClass);
4253        }
4254      }
4255    }
4256    swiper.emitSlidesClasses();
4257  }
4258
4259  const processLazyPreloader = (swiper, imageEl) => {
4260    if (!swiper || swiper.destroyed || !swiper.params) return;
4261    const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;
4262    const slideEl = imageEl.closest(slideSelector());
4263    if (slideEl) {
4264      let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);
4265      if (!lazyEl && swiper.isElement) {
4266        if (slideEl.shadowRoot) {
4267          lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);
4268        } else {
4269          // init later
4270          requestAnimationFrame(() => {
4271            if (slideEl.shadowRoot) {
4272              lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);
4273              if (lazyEl) lazyEl.remove();
4274            }
4275          });
4276        }
4277      }
4278      if (lazyEl) lazyEl.remove();
4279    }
4280  };
4281  const unlazy = (swiper, index) => {
4282    if (!swiper.slides[index]) return;
4283    const imageEl = swiper.slides[index].querySelector('[loading="lazy"]');
4284    if (imageEl) imageEl.removeAttribute('loading');
4285  };
4286  const preload = swiper => {
4287    if (!swiper || swiper.destroyed || !swiper.params) return;
4288    let amount = swiper.params.lazyPreloadPrevNext;
4289    const len = swiper.slides.length;
4290    if (!len || !amount || amount < 0) return;
4291    amount = Math.min(amount, len);
4292    const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);
4293    const activeIndex = swiper.activeIndex;
4294    if (swiper.params.grid && swiper.params.grid.rows > 1) {
4295      const activeColumn = activeIndex;
4296      const preloadColumns = [activeColumn - amount];
4297      preloadColumns.push(...Array.from({
4298        length: amount
4299      }).map((_, i) => {
4300        return activeColumn + slidesPerView + i;
4301      }));
4302      swiper.slides.forEach((slideEl, i) => {
4303        if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);
4304      });
4305      return;
4306    }
4307    const slideIndexLastInView = activeIndex + slidesPerView - 1;
4308    if (swiper.params.rewind || swiper.params.loop) {
4309      for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {
4310        const realIndex = (i % len + len) % len;
4311        if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);
4312      }
4313    } else {
4314      for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {
4315        if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {
4316          unlazy(swiper, i);
4317        }
4318      }
4319    }
4320  };
4321
4322  function getActiveIndexByTranslate(swiper) {
4323    const {
4324      slidesGrid,
4325      params
4326    } = swiper;
4327    const translate = swiper.rtlTranslate ? swiper.translate : -swi
vendor: 3,983 bytes, lines 4327-4437
4327per.translate;
4328    let activeIndex;
4329    for (let i = 0; i < slidesGrid.length; i += 1) {
4330      if (typeof slidesGrid[i + 1] !== 'undefined') {
4331        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {
4332          activeIndex = i;
4333        } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
4334          activeIndex = i + 1;
4335        }
4336      } else if (translate >= slidesGrid[i]) {
4337        activeIndex = i;
4338      }
4339    }
4340    // Normalize slideIndex
4341    if (params.normalizeSlideIndex) {
4342      if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
4343    }
4344    return activeIndex;
4345  }
4346  function updateActiveIndex(newActiveIndex) {
4347    const swiper = this;
4348    const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
4349    const {
4350      snapGrid,
4351      params,
4352      activeIndex: previousIndex,
4353      realIndex: previousRealIndex,
4354      snapIndex: previousSnapIndex
4355    } = swiper;
4356    let activeIndex = newActiveIndex;
4357    let snapIndex;
4358    const getVirtualRealIndex = aIndex => {
4359      let realIndex = aIndex - swiper.virtual.slidesBefore;
4360      if (realIndex < 0) {
4361        realIndex = swiper.virtual.slides.length + realIndex;
4362      }
4363      if (realIndex >= swiper.virtual.slides.length) {
4364        realIndex -= swiper.virtual.slides.length;
4365      }
4366      return realIndex;
4367    };
4368    if (typeof activeIndex === 'undefined') {
4369      activeIndex = getActiveIndexByTranslate(swiper);
4370    }
4371    if (snapGrid.indexOf(translate) >= 0) {
4372      snapIndex = snapGrid.indexOf(translate);
4373    } else {
4374      const skip = Math.min(params.slidesPerGroupSkip, activeIndex);
4375      snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
4376    }
4377    if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
4378    if (activeIndex === previousIndex && !swiper.params.loop) {
4379      if (snapIndex !== previousSnapIndex) {
4380        swiper.snapIndex = snapIndex;
4381        swiper.emit('snapIndexChange');
4382      }
4383      return;
4384    }
4385    if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
4386      swiper.realIndex = getVirtualRealIndex(activeIndex);
4387      return;
4388    }
4389    const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
4390
4391    // Get real index
4392    let realIndex;
4393    if (swiper.virtual && params.virtual.enabled && params.loop) {
4394      realIndex = getVirtualRealIndex(activeIndex);
4395    } else if (gridEnabled) {
4396      const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0];
4397      let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);
4398      if (Number.isNaN(activeSlideIndex)) {
4399        activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);
4400      }
4401      realIndex = Math.floor(activeSlideIndex / params.grid.rows);
4402    } else if (swiper.slides[activeIndex]) {
4403      const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');
4404      if (slideIndex) {
4405        realIndex = parseInt(slideIndex, 10);
4406      } else {
4407        realIndex = activeIndex;
4408      }
4409    } else {
4410      realIndex = activeIndex;
4411    }
4412    Object.assign(swiper, {
4413      previousSnapIndex,
4414      snapIndex,
4415      previousRealIndex,
4416      realIndex,
4417      previousIndex,
4418      activeIndex
4419    });
4420    if (swiper.initialized) {
4421      preload(swiper);
4422    }
4423    swiper.emit('activeIndexChange');
4424    swiper.emit('snapIndexChange');
4425    if (swiper.initialized || swiper.params.runCallbacksOnInit) {
4426      if (previousRealIndex !== realIndex) {
4427        swiper.emit('realIndexChange');
4428      }
4429      swiper.emit('slideChange');
4430    }
4431  }
4432
4433  function updateClickedSlide(el, path) {
4434    const swiper = this;
4435    const params = swiper.params;
4436    let slide = el.closest(`.${params.slideClass}, swiper-slide`);
4437    if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {
vendor: 7,901 bytes, lines 4438-4719
4438      [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {
4439        if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {
4440          slide = pathEl;
4441        }
4442      });
4443    }
4444    let slideFound = false;
4445    let slideIndex;
4446    if (slide) {
4447      for (let i = 0; i < swiper.slides.length; i += 1) {
4448        if (swiper.slides[i] === slide) {
4449          slideFound = true;
4450          slideIndex = i;
4451          break;
4452        }
4453      }
4454    }
4455    if (slide && slideFound) {
4456      swiper.clickedSlide = slide;
4457      if (swiper.virtual && swiper.params.virtual.enabled) {
4458        swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);
4459      } else {
4460        swiper.clickedIndex = slideIndex;
4461      }
4462    } else {
4463      swiper.clickedSlide = undefined;
4464      swiper.clickedIndex = undefined;
4465      return;
4466    }
4467    if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
4468      swiper.slideToClickedSlide();
4469    }
4470  }
4471
4472  var update = {
4473    updateSize,
4474    updateSlides,
4475    updateAutoHeight,
4476    updateSlidesOffset,
4477    updateSlidesProgress,
4478    updateProgress,
4479    updateSlidesClasses,
4480    updateActiveIndex,
4481    updateClickedSlide
4482  };
4483
4484  function getSwiperTranslate(axis) {
4485    if (axis === void 0) {
4486      axis = this.isHorizontal() ? 'x' : 'y';
4487    }
4488    const swiper = this;
4489    const {
4490      params,
4491      rtlTranslate: rtl,
4492      translate,
4493      wrapperEl
4494    } = swiper;
4495    if (params.virtualTranslate) {
4496      return rtl ? -translate : translate;
4497    }
4498    if (params.cssMode) {
4499      return translate;
4500    }
4501    let currentTranslate = getTranslate(wrapperEl, axis);
4502    currentTranslate += swiper.cssOverflowAdjustment();
4503    if (rtl) currentTranslate = -currentTranslate;
4504    return currentTranslate || 0;
4505  }
4506
4507  function setTranslate(translate, byController) {
4508    const swiper = this;
4509    const {
4510      rtlTranslate: rtl,
4511      params,
4512      wrapperEl,
4513      progress
4514    } = swiper;
4515    let x = 0;
4516    let y = 0;
4517    const z = 0;
4518    if (swiper.isHorizontal()) {
4519      x = rtl ? -translate : translate;
4520    } else {
4521      y = translate;
4522    }
4523    if (params.roundLengths) {
4524      x = Math.floor(x);
4525      y = Math.floor(y);
4526    }
4527    swiper.previousTranslate = swiper.translate;
4528    swiper.translate = swiper.isHorizontal() ? x : y;
4529    if (params.cssMode) {
4530      wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
4531    } else if (!params.virtualTranslate) {
4532      if (swiper.isHorizontal()) {
4533        x -= swiper.cssOverflowAdjustment();
4534      } else {
4535        y -= swiper.cssOverflowAdjustment();
4536      }
4537      wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;
4538    }
4539
4540    // Check if we need to update progress
4541    let newProgress;
4542    const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
4543    if (translatesDiff === 0) {
4544      newProgress = 0;
4545    } else {
4546      newProgress = (translate - swiper.minTranslate()) / translatesDiff;
4547    }
4548    if (newProgress !== progress) {
4549      swiper.updateProgress(translate);
4550    }
4551    swiper.emit('setTranslate', swiper.translate, byController);
4552  }
4553
4554  function minTranslate() {
4555    return -this.snapGrid[0];
4556  }
4557
4558  function maxTranslate() {
4559    return -this.snapGrid[this.snapGrid.length - 1];
4560  }
4561
4562  function translateTo(translate, speed, runCallbacks, translateBounds, internal) {
4563    if (translate === void 0) {
4564      translate = 0;
4565    }
4566    if (speed === void 0) {
4567      speed = this.params.speed;
4568    }
4569    if (runCallbacks === void 0) {
4570      runCallbacks = true;
4571    }
4572    if (translateBounds === void 0) {
4573      translateBounds = true;
4574    }
4575    const swiper = this;
4576    const {
4577      params,
4578      wrapperEl
4579    } = swiper;
4580    if (swiper.animating && params.preventInteractionOnTransition) {
4581      return false;
4582    }
4583    const minTranslate = swiper.minTranslate();
4584    const maxTranslate = swiper.maxTranslate();
4585    let newTranslate;
4586    if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;
4587
4588    // Update progress
4589    swiper.updateProgress(newTranslate);
4590    if (params.cssMode) {
4591      const isH = swiper.isHorizontal();
4592      if (speed === 0) {
4593        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
4594      } else {
4595        if (!swiper.support.smoothScroll) {
4596          animateCSSModeScroll({
4597            swiper,
4598            targetPosition: -newTranslate,
4599            side: isH ? 'left' : 'top'
4600          });
4601          return true;
4602        }
4603        wrapperEl.scrollTo({
4604          [isH ? 'left' : 'top']: -newTranslate,
4605          behavior: 'smooth'
4606        });
4607      }
4608      return true;
4609    }
4610    if (speed === 0) {
4611      swiper.setTransition(0);
4612      swiper.setTranslate(newTranslate);
4613      if (runCallbacks) {
4614        swiper.emit('beforeTransitionStart', speed, internal);
4615        swiper.emit('transitionEnd');
4616      }
4617    } else {
4618      swiper.setTransition(speed);
4619      swiper.setTranslate(newTranslate);
4620      if (runCallbacks) {
4621        swiper.emit('beforeTransitionStart', speed, internal);
4622        swiper.emit('transitionStart');
4623      }
4624      if (!swiper.animating) {
4625        swiper.animating = true;
4626        if (!swiper.onTranslateToWrapperTransitionEnd) {
4627          swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
4628            if (!swiper || swiper.destroyed) return;
4629            if (e.target !== this) return;
4630            swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
4631            swiper.onTranslateToWrapperTransitionEnd = null;
4632            delete swiper.onTranslateToWrapperTransitionEnd;
4633            if (runCallbacks) {
4634              swiper.emit('transitionEnd');
4635            }
4636          };
4637        }
4638        swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
4639      }
4640    }
4641    return true;
4642  }
4643
4644  var translate = {
4645    getTranslate: getSwiperTranslate,
4646    setTranslate,
4647    minTranslate,
4648    maxTranslate,
4649    translateTo
4650  };
4651
4652  function setTransition(duration, byController) {
4653    const swiper = this;
4654    if (!swiper.params.cssMode) {
4655      swiper.wrapperEl.style.transitionDuration = `${duration}ms`;
4656      swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';
4657    }
4658    swiper.emit('setTransition', duration, byController);
4659  }
4660
4661  function transitionEmit(_ref) {
4662    let {
4663      swiper,
4664      runCallbacks,
4665      direction,
4666      step
4667    } = _ref;
4668    const {
4669      activeIndex,
4670      previousIndex
4671    } = swiper;
4672    let dir = direction;
4673    if (!dir) {
4674      if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';
4675    }
4676    swiper.emit(`transition${step}`);
4677    if (runCallbacks && activeIndex !== previousIndex) {
4678      if (dir === 'reset') {
4679        swiper.emit(`slideResetTransition${step}`);
4680        return;
4681      }
4682      swiper.emit(`slideChangeTransition${step}`);
4683      if (dir === 'next') {
4684        swiper.emit(`slideNextTransition${step}`);
4685      } else {
4686        swiper.emit(`slidePrevTransition${step}`);
4687      }
4688    }
4689  }
4690
4691  function transitionStart(runCallbacks, direction) {
4692    if (runCallbacks === void 0) {
4693      runCallbacks = true;
4694    }
4695    const swiper = this;
4696    const {
4697      params
4698    } = swiper;
4699    if (params.cssMode) return;
4700    if (params.autoHeight) {
4701      swiper.updateAutoHeight();
4702    }
4703    transitionEmit({
4704      swiper,
4705      runCallbacks,
4706      direction,
4707      step: 'Start'
4708    });
4709  }
4710
4711  function transitionEnd(runCallbacks, direction) {
4712    if (runCallbacks === void 0) {
4713      runCallbacks = true;
4714    }
4715    const swiper = this;
4716    const {
4717      params
4718    } = swiper;
4719    swiper.animating = false;
vendor: 4,334 bytes, lines 4720-4843
4720    if (params.cssMode) return;
4721    swiper.setTransition(0);
4722    transitionEmit({
4723      swiper,
4724      runCallbacks,
4725      direction,
4726      step: 'End'
4727    });
4728  }
4729
4730  var transition = {
4731    setTransition,
4732    transitionStart,
4733    transitionEnd
4734  };
4735
4736  function slideTo(index, speed, runCallbacks, internal, initial) {
4737    if (index === void 0) {
4738      index = 0;
4739    }
4740    if (speed === void 0) {
4741      speed = this.params.speed;
4742    }
4743    if (runCallbacks === void 0) {
4744      runCallbacks = true;
4745    }
4746    if (typeof index === 'string') {
4747      index = parseInt(index, 10);
4748    }
4749    const swiper = this;
4750    let slideIndex = index;
4751    if (slideIndex < 0) slideIndex = 0;
4752    const {
4753      params,
4754      snapGrid,
4755      slidesGrid,
4756      previousIndex,
4757      activeIndex,
4758      rtlTranslate: rtl,
4759      wrapperEl,
4760      enabled
4761    } = swiper;
4762    if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial || swiper.destroyed) {
4763      return false;
4764    }
4765    const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
4766    let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
4767    if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
4768    const translate = -snapGrid[snapIndex];
4769    // Normalize slideIndex
4770    if (params.normalizeSlideIndex) {
4771      for (let i = 0; i < slidesGrid.length; i += 1) {
4772        const normalizedTranslate = -Math.floor(translate * 100);
4773        const normalizedGrid = Math.floor(slidesGrid[i] * 100);
4774        const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);
4775        if (typeof slidesGrid[i + 1] !== 'undefined') {
4776          if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {
4777            slideIndex = i;
4778          } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {
4779            slideIndex = i + 1;
4780          }
4781        } else if (normalizedTranslate >= normalizedGrid) {
4782          slideIndex = i;
4783        }
4784      }
4785    }
4786    // Directions locks
4787    if (swiper.initialized && slideIndex !== activeIndex) {
4788      if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {
4789        return false;
4790      }
4791      if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
4792        if ((activeIndex || 0) !== slideIndex) {
4793          return false;
4794        }
4795      }
4796    }
4797    if (slideIndex !== (previousIndex || 0) && runCallbacks) {
4798      swiper.emit('beforeSlideChangeStart');
4799    }
4800
4801    // Update progress
4802    swiper.updateProgress(translate);
4803    let direction;
4804    if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';
4805
4806    // Update Index
4807    if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {
4808      swiper.updateActiveIndex(slideIndex);
4809      // Update Height
4810      if (params.autoHeight) {
4811        swiper.updateAutoHeight();
4812      }
4813      swiper.updateSlidesClasses();
4814      if (params.effect !== 'slide') {
4815        swiper.setTranslate(translate);
4816      }
4817      if (direction !== 'reset') {
4818        swiper.transitionStart(runCallbacks, direction);
4819        swiper.transitionEnd(runCallbacks, direction);
4820      }
4821      return false;
4822    }
4823    if (params.cssMode) {
4824      const isH = swiper.isHorizontal();
4825      const t = rtl ? translate : -translate;
4826      if (speed === 0) {
4827        const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
4828        if (isVirtual) {
4829          swiper.wrapperEl.style.scrollSnapType = 'none';
4830          swiper._immediateVirtual = true;
4831        }
4832        if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {
4833          swiper._cssModeVirtualInitialSet = true;
4834          requestAnimationFrame(() => {
4835            wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
4836          });
4837        } else {
4838          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
4839        }
4840        if (isVirtual) {
4841          requestAnimationFrame(() => {
4842            swiper.wrapperEl.style.scrollSnapType = '';
4843            swiper._immediateVirtual = false;
vendor: 5,102 bytes, lines 4844-4979
4844          });
4845        }
4846      } else {
4847        if (!swiper.support.smoothScroll) {
4848          animateCSSModeScroll({
4849            swiper,
4850            targetPosition: t,
4851            side: isH ? 'left' : 'top'
4852          });
4853          return true;
4854        }
4855        wrapperEl.scrollTo({
4856          [isH ? 'left' : 'top']: t,
4857          behavior: 'smooth'
4858        });
4859      }
4860      return true;
4861    }
4862    swiper.setTransition(speed);
4863    swiper.setTranslate(translate);
4864    swiper.updateActiveIndex(slideIndex);
4865    swiper.updateSlidesClasses();
4866    swiper.emit('beforeTransitionStart', speed, internal);
4867    swiper.transitionStart(runCallbacks, direction);
4868    if (speed === 0) {
4869      swiper.transitionEnd(runCallbacks, direction);
4870    } else if (!swiper.animating) {
4871      swiper.animating = true;
4872      if (!swiper.onSlideToWrapperTransitionEnd) {
4873        swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
4874          if (!swiper || swiper.destroyed) return;
4875          if (e.target !== this) return;
4876          swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
4877          swiper.onSlideToWrapperTransitionEnd = null;
4878          delete swiper.onSlideToWrapperTransitionEnd;
4879          swiper.transitionEnd(runCallbacks, direction);
4880        };
4881      }
4882      swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
4883    }
4884    return true;
4885  }
4886
4887  function slideToLoop(index, speed, runCallbacks, internal) {
4888    if (index === void 0) {
4889      index = 0;
4890    }
4891    if (speed === void 0) {
4892      speed = this.params.speed;
4893    }
4894    if (runCallbacks === void 0) {
4895      runCallbacks = true;
4896    }
4897    if (typeof index === 'string') {
4898      const indexAsNumber = parseInt(index, 10);
4899      index = indexAsNumber;
4900    }
4901    const swiper = this;
4902    if (swiper.destroyed) return;
4903    const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;
4904    let newIndex = index;
4905    if (swiper.params.loop) {
4906      if (swiper.virtual && swiper.params.virtual.enabled) {
4907        // eslint-disable-next-line
4908        newIndex = newIndex + swiper.virtual.slidesBefore;
4909      } else {
4910        let targetSlideIndex;
4911        if (gridEnabled) {
4912          const slideIndex = newIndex * swiper.params.grid.rows;
4913          targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;
4914        } else {
4915          targetSlideIndex = swiper.getSlideIndexByData(newIndex);
4916        }
4917        const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;
4918        const {
4919          centeredSlides
4920        } = swiper.params;
4921        let slidesPerView = swiper.params.slidesPerView;
4922        if (slidesPerView === 'auto') {
4923          slidesPerView = swiper.slidesPerViewDynamic();
4924        } else {
4925          slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));
4926          if (centeredSlides && slidesPerView % 2 === 0) {
4927            slidesPerView = slidesPerView + 1;
4928          }
4929        }
4930        let needLoopFix = cols - targetSlideIndex < slidesPerView;
4931        if (centeredSlides) {
4932          needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);
4933        }
4934        if (needLoopFix) {
4935          const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';
4936          swiper.loopFix({
4937            direction,
4938            slideTo: true,
4939            activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,
4940            slideRealIndex: direction === 'next' ? swiper.realIndex : undefined
4941          });
4942        }
4943        if (gridEnabled) {
4944          const slideIndex = newIndex * swiper.params.grid.rows;
4945          newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;
4946        } else {
4947          newIndex = swiper.getSlideIndexByData(newIndex);
4948        }
4949      }
4950    }
4951    requestAnimationFrame(() => {
4952      swiper.slideTo(newIndex, speed, runCallbacks, internal);
4953    });
4954    return swiper;
4955  }
4956
4957  /* eslint no-unused-vars: "off" */
4958  function slideNext(speed, runCallbacks, internal) {
4959    if (speed === void 0) {
4960      speed = this.params.speed;
4961    }
4962    if (runCallbacks === void 0) {
4963      runCallbacks = true;
4964    }
4965    const swiper = this;
4966    const {
4967      enabled,
4968      params,
4969      animating
4970    } = swiper;
4971    if (!enabled || swiper.destroyed) return swiper;
4972    let perGroup = params.slidesPerGroup;
4973    if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
4974      perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);
4975    }
4976    const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;
4977    const isVirtual = swiper.virtual && params.virtual.enabled;
4978    if (params.loop) {
4979      if (animating && !isVirtual && params.loopPreventsSliding) return false;
4980      swiper.loopFix({
4981        direction: 'next'
4982      });
4983      // eslint-disable-next-line
4984      swiper._clientLeft = swiper.wrapperEl.clientLeft;
4985      if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {
4986        requestAnimationFrame(() => {
4987          swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
4988        });
4989        return true;
4990      }
4991    }
4992    if (params.rewind && swiper.isEnd) {
4993      return swiper.slideTo(0, speed, runCallbacks, internal);
4994    }
4995    return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
4996  }
4997
4998  /* eslint no-unused-vars: "off" */
4999  function slidePrev(speed, runCallbacks, internal) {
5000    if (speed === void 0) {
5001      speed = this.params.speed;
5002    }
5003    if (runCallbacks === void 0) {
5004      runCallbacks = true;
5005    }
5006    const swiper = this;
5007    const {
5008      params,
5009      snapGrid,
5010      slidesGrid,
5011      rtlTranslate,
5012      enabled,
5013      animating
5014    } = swiper;
5015    if (!enabled || swiper.destroyed) return swiper;
5016    const isVirtual = swiper.virtual && params.virtual.enabled;
5017    if (params.loop) {
5018      if (animating && !isVirtual && params.loopPreventsSliding) return false;
5019      swiper.loopFix({
5020        direction: 'prev'
5021      });
5022      // eslint-disable-next-line
5023      swiper._clientLeft = swiper.wrapperEl.clientLeft;
5024    }
5025    const translate = rtlTranslate ? swiper.translate : -swiper.translate;
5026    function normalize(val) {
5027      if (val < 0) return -Math.floor(Math.abs(val));
5028      return Math.floor(val);
5029    }
5030    const normalizedTranslate = normalize(translate);
5031    const normalizedSnapGrid = snapGrid.map(val => normalize(val));
5032    let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
5033    if (typeof prevSnap === 'undefined' && params.cssMode) {
5034      let prevSnapIndex;
5035      snapGrid.forEach((snap, snapIndex) => {
5036        if (normalizedTranslate >= snap) {
5037          // prevSnap = snap;
5038          prevSnapIndex = snapIndex;
5039        }
5040      });
5041      if (typeof prevSnapIndex !== 'undefined') {
5042        prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];
5043      }
5044    }
5045    let prevIndex = 0;
5046    if (typeof prevSnap !== 'undefined') {
5047      prevIndex = slidesGrid.indexOf(prevSnap);
5048      if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
5049      if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
5050        prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;
5051        prevIndex = Math.max(prevIndex, 0);
5052      }
5053    }
5054    if (params.rewind && swiper.isBeginning) {
5055      const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;
5056      return swiper.slideTo(lastIndex, speed, runCallbacks, internal);
5057    } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {
5058      requestAnimationFrame(() => {
5059        swiper.slideTo(prevIndex, speed, runCallbacks, internal);
5060      });
5061      return true;
5062    }
5063    return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
5064  }
5065
5066  /* eslint no-unused-vars: "off" */
5067  function slideReset(speed, runCallbacks, internal) {
5068    if (speed === void 0) {
5069      speed = this.params.speed;
5070    }
5071    if (runCallbacks === void 0) {
5072      runCallbacks = true;
5073    }
5074    const swiper = this;
5075    if (swiper.destroyed) return;
5076    return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
5077  }
5078
5079  /* eslint no-unused-vars: "off" */
5080  function slideToClosest(speed, runCallbacks, internal, threshold) {
5081    if (speed === void 0) {
5082      speed = this.params.speed;
5083    }
5084    if (runCallbacks === void 0) {
5085      runCallbacks = true;
5086    }
5087    if (threshold === void 0) {
5088      threshold = 0.5;
5089    }
5090    const swiper = this;
5091    if (swiper.destroyed) return;
5092    let index = swiper.activeIndex;
5093    const skip = Math.min(swiper.params.slidesPerGroupSkip, index);
5094    const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
5095    const translate = swiper.rtlTranslate ? swiper.translate : -swi
vendor: 4,106 bytes, lines 5095-5196
5095per.translate;
5096    if (translate >= swiper.snapGrid[snapIndex]) {
5097      // The current translate is on or after the current snap index, so the choice
5098      // is between the current index and the one after it.
5099      const currentSnap = swiper.snapGrid[snapIndex];
5100      const nextSnap = swiper.snapGrid[snapIndex + 1];
5101      if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {
5102        index += swiper.params.slidesPerGroup;
5103      }
5104    } else {
5105      // The current translate is before the current snap index, so the choice
5106      // is between the current index and the one before it.
5107      const prevSnap = swiper.snapGrid[snapIndex - 1];
5108      const currentSnap = swiper.snapGrid[snapIndex];
5109      if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {
5110        index -= swiper.params.slidesPerGroup;
5111      }
5112    }
5113    index = Math.max(index, 0);
5114    index = Math.min(index, swiper.slidesGrid.length - 1);
5115    return swiper.slideTo(index, speed, runCallbacks, internal);
5116  }
5117
5118  function slideToClickedSlide() {
5119    const swiper = this;
5120    if (swiper.destroyed) return;
5121    const {
5122      params,
5123      slidesEl
5124    } = swiper;
5125    const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
5126    let slideToIndex = swiper.clickedIndex;
5127    let realIndex;
5128    const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;
5129    if (params.loop) {
5130      if (swiper.animating) return;
5131      realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);
5132      if (params.centeredSlides) {
5133        if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {
5134          swiper.loopFix();
5135          slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]);
5136          nextTick(() => {
5137            swiper.slideTo(slideToIndex);
5138          });
5139        } else {
5140          swiper.slideTo(slideToIndex);
5141        }
5142      } else if (slideToIndex > swiper.slides.length - slidesPerView) {
5143        swiper.loopFix();
5144        slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]);
5145        nextTick(() => {
5146          swiper.slideTo(slideToIndex);
5147        });
5148      } else {
5149        swiper.slideTo(slideToIndex);
5150      }
5151    } else {
5152      swiper.slideTo(slideToIndex);
5153    }
5154  }
5155
5156  var slide = {
5157    slideTo,
5158    slideToLoop,
5159    slideNext,
5160    slidePrev,
5161    slideReset,
5162    slideToClosest,
5163    slideToClickedSlide
5164  };
5165
5166  function loopCreate(slideRealIndex) {
5167    const swiper = this;
5168    const {
5169      params,
5170      slidesEl
5171    } = swiper;
5172    if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;
5173    const initSlides = () => {
5174      const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
5175      slides.forEach((el, index) => {
5176        el.setAttribute('data-swiper-slide-index', index);
5177      });
5178    };
5179    const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
5180    const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);
5181    const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;
5182    const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;
5183    const addBlankSlides = amountOfSlides => {
5184      for (let i = 0; i < amountOfSlides; i += 1) {
5185        const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);
5186        swiper.slidesEl.append(slideEl);
5187      }
5188    };
5189    if (shouldFillGroup) {
5190      if (params.loopAddBlankSlides) {
5191        const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;
5192        addBlankSlides(slidesToAdd);
5193        swiper.recalcSlides();
5194        swiper.updateSlides();
5195      } else {
5196        showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may 
5196not function properly. You need to add more slides (or make duplicates, or empty slides)');
5197      }
5198      initSlides();
5199    } else if (shouldFillGrid) {
5200      if (params.loopAddBlankSlides) {
5201        const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;
5202        addBlankSlides(slidesToAdd);
5203        swiper.recalcSlides();
5204        swiper.updateSlides();
5205      } else {
5206        showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');
5207      }
5208      initSlides();
5209    } else {
5210      initSlides();
5211    }
5212    swiper.loopFix({
5213      slideRealIndex,
5214      direction: params.centeredSlides ? undefined : 'next'
5215    });
5216  }
5217
5218  function loopFix(_temp) {
5219    let {
5220      slideRealIndex,
5221      slideTo = true,
5222      direction,
5223      setTranslate,
5224      activeSlideIndex,
5225      byController,
5226      byMousewheel
5227    } = _temp === void 0 ? {} : _temp;
5228    const swiper = this;
5229    if (!swiper.params.loop) return;
5230    swiper.emit('beforeLoopFix');
5231    const {
5232      slides,
5233      allowSlidePrev,
5234      allowSlideNext,
5235      slidesEl,
5236      params
5237    } = swiper;
5238    const {
5239      centeredSlides
5240    } = params;
5241    swiper.allowSlidePrev = true;
5242    swiper.allowSlideNext = true;
5243    if (swiper.virtual && params.virtual.enabled) {
5244      if (slideTo) {
5245        if (!params.centeredSlides && swiper.snapIndex === 0) {
5246          swiper.slideTo(swiper.virtual.slides.length, 0, false, true);
5247        } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {
5248          swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);
5249        } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {
5250          swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);
5251        }
5252      }
5253      swiper.allowSlidePrev = allowSlidePrev;
5254      swiper.allowSlideNext = allowSlideNext;
5255      swiper.emit('loopFix');
5256      return;
5257    }
5258    let slidesPerView = params.slidesPerView;
5259    if (slidesPerView === 'auto') {
5260      slidesPerView = swiper.slidesPerViewDynamic();
5261    } else {
5262      slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));
5263      if (centeredSlides && slidesPerView % 2 === 0) {
5264        slidesPerView = slidesPerView + 1;
5265      }
5266    }
5267    const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;
5268    let loopedSlides = slidesPerGroup;
5269    if (loopedSlides % slidesPerGroup !== 0) {
5270      loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;
5271    }
5272    loopedSlides += params.loopAdditionalSlides;
5273    swiper.loopedSlides = loopedSlides;
5274    const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
5275    if (slides.length < slidesPerView + loopedSlides) {
5276      showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');
5277    } else if (gridEnabled && params.grid.fill === 'row') {
5278      showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');
5279    }
5280    const prependSlidesIndexes = [];
5281    const appendSlidesIndexes = [];
5282    let activeIndex = swiper.activeIndex;
5283    if (typeof activeSlideIndex === 'undefined') {
5284      activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);
5285    } else {
5286      activeIndex = activeSlideIndex;
5287    }
5288    const isNext = direction === 'next' || !direction;
5289    const isPrev = direction === 'prev' || !direction;
5290    let slidesPrepended = 0;
5291    let slidesAppended = 0;
5292    const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;
5293    const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;
5294    const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);
5295    // prepend last slides before start
5296    if (activeColIndexWithShift < loopedSlides) {
5297      slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);
5298      for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {
vendor: 5,443 bytes, lines 5299-5431
5299        const index = i - Math.floor(i / cols) * cols;
5300        if (gridEnabled) {
5301          const colIndexToPrepend = cols - index - 1;
5302          for (let i = slides.length - 1; i >= 0; i -= 1) {
5303            if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);
5304          }
5305          // slides.forEach((slide, slideIndex) => {
5306          //   if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);
5307          // });
5308        } else {
5309          prependSlidesIndexes.push(cols - index - 1);
5310        }
5311      }
5312    } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {
5313      slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);
5314      for (let i = 0; i < slidesAppended; i += 1) {
5315        const index = i - Math.floor(i / cols) * cols;
5316        if (gridEnabled) {
5317          slides.forEach((slide, slideIndex) => {
5318            if (slide.column === index) appendSlidesIndexes.push(slideIndex);
5319          });
5320        } else {
5321          appendSlidesIndexes.push(index);
5322        }
5323      }
5324    }
5325    swiper.__preventObserver__ = true;
5326    requestAnimationFrame(() => {
5327      swiper.__preventObserver__ = false;
5328    });
5329    if (isPrev) {
5330      prependSlidesIndexes.forEach(index => {
5331        slides[index].swiperLoopMoveDOM = true;
5332        slidesEl.prepend(slides[index]);
5333        slides[index].swiperLoopMoveDOM = false;
5334      });
5335    }
5336    if (isNext) {
5337      appendSlidesIndexes.forEach(index => {
5338        slides[index].swiperLoopMoveDOM = true;
5339        slidesEl.append(slides[index]);
5340        slides[index].swiperLoopMoveDOM = false;
5341      });
5342    }
5343    swiper.recalcSlides();
5344    if (params.slidesPerView === 'auto') {
5345      swiper.updateSlides();
5346    } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {
5347      swiper.slides.forEach((slide, slideIndex) => {
5348        swiper.grid.updateSlide(slideIndex, slide, swiper.slides);
5349      });
5350    }
5351    if (params.watchSlidesProgress) {
5352      swiper.updateSlidesOffset();
5353    }
5354    if (slideTo) {
5355      if (prependSlidesIndexes.length > 0 && isPrev) {
5356        if (typeof slideRealIndex === 'undefined') {
5357          const currentSlideTranslate = swiper.slidesGrid[activeIndex];
5358          const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];
5359          const diff = newSlideTranslate - currentSlideTranslate;
5360          if (byMousewheel) {
5361            swiper.setTranslate(swiper.translate - diff);
5362          } else {
5363            swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);
5364            if (setTranslate) {
5365              swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;
5366              swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;
5367            }
5368          }
5369        } else {
5370          if (setTranslate) {
5371            const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;
5372            swiper.slideTo(swiper.activeIndex + shift, 0, false, true);
5373            swiper.touchEventsData.currentTranslate = swiper.translate;
5374          }
5375        }
5376      } else if (appendSlidesIndexes.length > 0 && isNext) {
5377        if (typeof slideRealIndex === 'undefined') {
5378          const currentSlideTranslate = swiper.slidesGrid[activeIndex];
5379          const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];
5380          const diff = newSlideTranslate - currentSlideTranslate;
5381          if (byMousewheel) {
5382            swiper.setTranslate(swiper.translate - diff);
5383          } else {
5384            swiper.slideTo(activeIndex - slidesAppended, 0, false, true);
5385            if (setTranslate) {
5386              swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;
5387              swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;
5388            }
5389          }
5390        } else {
5391          const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;
5392          swiper.slideTo(swiper.activeIndex - shift, 0, false, true);
5393        }
5394      }
5395    }
5396    swiper.allowSlidePrev = allowSlidePrev;
5397    swiper.allowSlideNext = allowSlideNext;
5398    if (swiper.controller && swiper.controller.control && !byController) {
5399      const loopParams = {
5400        slideRealIndex,
5401        direction,
5402        setTranslate,
5403        activeSlideIndex,
5404        byController: true
5405      };
5406      if (Array.isArray(swiper.controller.control)) {
5407        swiper.controller.control.forEach(c => {
5408          if (!c.destroyed && c.params.loop) c.loopFix({
5409            ...loopParams,
5410            slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false
5411          });
5412        });
5413      } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {
5414        swiper.controller.control.loopFix({
5415          ...loopParams,
5416          slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false
5417        });
5418      }
5419    }
5420    swiper.emit('loopFix');
5421  }
5422
5423  function loopDestroy() {
5424    const swiper = this;
5425    const {
5426      params,
5427      slidesEl
5428    } = swiper;
5429    if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;
5430    swiper.recalcSlides();
5431    const newSlidesOrder = [];
vendor: 5,505 bytes, lines 5432-5597
5432    swiper.slides.forEach(slideEl => {
5433      const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;
5434      newSlidesOrder[index] = slideEl;
5435    });
5436    swiper.slides.forEach(slideEl => {
5437      slideEl.removeAttribute('data-swiper-slide-index');
5438    });
5439    newSlidesOrder.forEach(slideEl => {
5440      slidesEl.append(slideEl);
5441    });
5442    swiper.recalcSlides();
5443    swiper.slideTo(swiper.realIndex, 0);
5444  }
5445
5446  var loop = {
5447    loopCreate,
5448    loopFix,
5449    loopDestroy
5450  };
5451
5452  function setGrabCursor(moving) {
5453    const swiper = this;
5454    if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;
5455    const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;
5456    if (swiper.isElement) {
5457      swiper.__preventObserver__ = true;
5458    }
5459    el.style.cursor = 'move';
5460    el.style.cursor = moving ? 'grabbing' : 'grab';
5461    if (swiper.isElement) {
5462      requestAnimationFrame(() => {
5463        swiper.__preventObserver__ = false;
5464      });
5465    }
5466  }
5467
5468  function unsetGrabCursor() {
5469    const swiper = this;
5470    if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {
5471      return;
5472    }
5473    if (swiper.isElement) {
5474      swiper.__preventObserver__ = true;
5475    }
5476    swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';
5477    if (swiper.isElement) {
5478      requestAnimationFrame(() => {
5479        swiper.__preventObserver__ = false;
5480      });
5481    }
5482  }
5483
5484  var grabCursor = {
5485    setGrabCursor,
5486    unsetGrabCursor
5487  };
5488
5489  // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd
5490  function closestElement(selector, base) {
5491    if (base === void 0) {
5492      base = this;
5493    }
5494    function __closestFrom(el) {
5495      if (!el || el === getDocument() || el === getWindow()) return null;
5496      if (el.assignedSlot) el = el.assignedSlot;
5497      const found = el.closest(selector);
5498      if (!found && !el.getRootNode) {
5499        return null;
5500      }
5501      return found || __closestFrom(el.getRootNode().host);
5502    }
5503    return __closestFrom(base);
5504  }
5505  function preventEdgeSwipe(swiper, event, startX) {
5506    const window = getWindow();
5507    const {
5508      params
5509    } = swiper;
5510    const edgeSwipeDetection = params.edgeSwipeDetection;
5511    const edgeSwipeThreshold = params.edgeSwipeThreshold;
5512    if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {
5513      if (edgeSwipeDetection === 'prevent') {
5514        event.preventDefault();
5515        return true;
5516      }
5517      return false;
5518    }
5519    return true;
5520  }
5521  function onTouchStart(event) {
5522    const swiper = this;
5523    const document = getDocument();
5524    let e = event;
5525    if (e.originalEvent) e = e.originalEvent;
5526    const data = swiper.touchEventsData;
5527    if (e.type === 'pointerdown') {
5528      if (data.pointerId !== null && data.pointerId !== e.pointerId) {
5529        return;
5530      }
5531      data.pointerId = e.pointerId;
5532    } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {
5533      data.touchId = e.targetTouches[0].identifier;
5534    }
5535    if (e.type === 'touchstart') {
5536      // don't proceed touch event
5537      preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);
5538      return;
5539    }
5540    const {
5541      params,
5542      touches,
5543      enabled
5544    } = swiper;
5545    if (!enabled) return;
5546    if (!params.simulateTouch && e.pointerType === 'mouse') return;
5547    if (swiper.animating && params.preventInteractionOnTransition) {
5548      return;
5549    }
5550    if (!swiper.animating && params.cssMode && params.loop) {
5551      swiper.loopFix();
5552    }
5553    let targetEl = e.target;
5554    if (params.touchEventsTarget === 'wrapper') {
5555      if (!swiper.wrapperEl.contains(targetEl)) return;
5556    }
5557    if ('which' in e && e.which === 3) return;
5558    if ('button' in e && e.button > 0) return;
5559    if (data.isTouched && data.isMoved) return;
5560
5561    // change target el for shadow root component
5562    const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';
5563    // eslint-disable-next-line
5564    const eventPath = e.composedPath ? e.composedPath() : e.path;
5565    if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {
5566      targetEl = eventPath[0];
5567    }
5568    const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;
5569    const isTargetShadow = !!(e.target && e.target.shadowRoot);
5570
5571    // use closestElement for shadow root element to get the actual closest for nested shadow root element
5572    if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {
5573      swiper.allowClick = true;
5574      return;
5575    }
5576    if (params.swipeHandler) {
5577      if (!targetEl.closest(params.swipeHandler)) return;
5578    }
5579    touches.currentX = e.pageX;
5580    touches.currentY = e.pageY;
5581    const startX = touches.currentX;
5582    const startY = touches.currentY;
5583
5584    // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore
5585
5586    if (!preventEdgeSwipe(swiper, e, startX)) {
5587      return;
5588    }
5589    Object.assign(data, {
5590      isTouched: true,
5591      isMoved: false,
5592      allowTouchCallbacks: true,
5593      isScrolling: undefined,
5594      startMoving: undefined
5595    });
5596    touches.startX = startX;
5597    touches.startY = startY;
vendor: 4,664 bytes, lines 5598-5727
5598    data.touchStartTime = now();
5599    swiper.allowClick = true;
5600    swiper.updateSize();
5601    swiper.swipeDirection = undefined;
5602    if (params.threshold > 0) data.allowThresholdMove = false;
5603    let preventDefault = true;
5604    if (targetEl.matches(data.focusableElements)) {
5605      preventDefault = false;
5606      if (targetEl.nodeName === 'SELECT') {
5607        data.isTouched = false;
5608      }
5609    }
5610    if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {
5611      document.activeElement.blur();
5612    }
5613    const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
5614    if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {
5615      e.preventDefault();
5616    }
5617    if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {
5618      swiper.freeMode.onTouchStart();
5619    }
5620    swiper.emit('touchStart', e);
5621  }
5622
5623  function onTouchMove(event) {
5624    const document = getDocument();
5625    const swiper = this;
5626    const data = swiper.touchEventsData;
5627    const {
5628      params,
5629      touches,
5630      rtlTranslate: rtl,
5631      enabled
5632    } = swiper;
5633    if (!enabled) return;
5634    if (!params.simulateTouch && event.pointerType === 'mouse') return;
5635    let e = event;
5636    if (e.originalEvent) e = e.originalEvent;
5637    if (e.type === 'pointermove') {
5638      if (data.touchId !== null) return; // return from pointer if we use touch
5639      const id = e.pointerId;
5640      if (id !== data.pointerId) return;
5641    }
5642    let targetTouch;
5643    if (e.type === 'touchmove') {
5644      targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];
5645      if (!targetTouch || targetTouch.identifier !== data.touchId) return;
5646    } else {
5647      targetTouch = e;
5648    }
5649    if (!data.isTouched) {
5650      if (data.startMoving && data.isScrolling) {
5651        swiper.emit('touchMoveOpposite', e);
5652      }
5653      return;
5654    }
5655    const pageX = targetTouch.pageX;
5656    const pageY = targetTouch.pageY;
5657    if (e.preventedByNestedSwiper) {
5658      touches.startX = pageX;
5659      touches.startY = pageY;
5660      return;
5661    }
5662    if (!swiper.allowTouchMove) {
5663      if (!e.target.matches(data.focusableElements)) {
5664        swiper.allowClick = false;
5665      }
5666      if (data.isTouched) {
5667        Object.assign(touches, {
5668          startX: pageX,
5669          startY: pageY,
5670          currentX: pageX,
5671          currentY: pageY
5672        });
5673        data.touchStartTime = now();
5674      }
5675      return;
5676    }
5677    if (params.touchReleaseOnEdges && !params.loop) {
5678      if (swiper.isVertical()) {
5679        // Vertical
5680        if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {
5681          data.isTouched = false;
5682          data.isMoved = false;
5683          return;
5684        }
5685      } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {
5686        return;
5687      }
5688    }
5689    if (document.activeElement) {
5690      if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {
5691        data.isMoved = true;
5692        swiper.allowClick = false;
5693        return;
5694      }
5695    }
5696    if (data.allowTouchCallbacks) {
5697      swiper.emit('touchMove', e);
5698    }
5699    touches.previousX = touches.currentX;
5700    touches.previousY = touches.currentY;
5701    touches.currentX = pageX;
5702    touches.currentY = pageY;
5703    const diffX = touches.currentX - touches.startX;
5704    const diffY = touches.currentY - touches.startY;
5705    if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;
5706    if (typeof data.isScrolling === 'undefined') {
5707      let touchAngle;
5708      if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {
5709        data.isScrolling = false;
5710      } else {
5711        // eslint-disable-next-line
5712        if (diffX * diffX + diffY * diffY >= 25) {
5713          touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;
5714          data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;
5715        }
5716      }
5717    }
5718    if (data.isScrolling) {
5719      swiper.emit('touchMoveOpposite', e);
5720    }
5721    if (typeof data.startMoving === 'undefined') {
5722      if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
5723        data.startMoving = true;
5724      }
5725    }
5726    if (data.isScrolling) {
5727      data.isTouched = false;
vendor: 7,161 bytes, lines 5728-5917
5728      return;
5729    }
5730    if (!data.startMoving) {
5731      return;
5732    }
5733    swiper.allowClick = false;
5734    if (!params.cssMode && e.cancelable) {
5735      e.preventDefault();
5736    }
5737    if (params.touchMoveStopPropagation && !params.nested) {
5738      e.stopPropagation();
5739    }
5740    let diff = swiper.isHorizontal() ? diffX : diffY;
5741    let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;
5742    if (params.oneWayMovement) {
5743      diff = Math.abs(diff) * (rtl ? 1 : -1);
5744      touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);
5745    }
5746    touches.diff = diff;
5747    diff *= params.touchRatio;
5748    if (rtl) {
5749      diff = -diff;
5750      touchesDiff = -touchesDiff;
5751    }
5752    const prevTouchesDirection = swiper.touchesDirection;
5753    swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
5754    swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';
5755    const isLoop = swiper.params.loop && !params.cssMode;
5756    const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;
5757    if (!data.isMoved) {
5758      if (isLoop && allowLoopFix) {
5759        swiper.loopFix({
5760          direction: swiper.swipeDirection
5761        });
5762      }
5763      data.startTranslate = swiper.getTranslate();
5764      swiper.setTransition(0);
5765      if (swiper.animating) {
5766        const evt = new window.CustomEvent('transitionend', {
5767          bubbles: true,
5768          cancelable: true
5769        });
5770        swiper.wrapperEl.dispatchEvent(evt);
5771      }
5772      data.allowMomentumBounce = false;
5773      // Grab Cursor
5774      if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
5775        swiper.setGrabCursor(true);
5776      }
5777      swiper.emit('sliderFirstMove', e);
5778    }
5779    let loopFixed;
5780    new Date().getTime();
5781    if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {
5782      Object.assign(touches, {
5783        startX: pageX,
5784        startY: pageY,
5785        currentX: pageX,
5786        currentY: pageY,
5787        startTranslate: data.currentTranslate
5788      });
5789      data.loopSwapReset = true;
5790      data.startTranslate = data.currentTranslate;
5791      return;
5792    }
5793    swiper.emit('sliderMove', e);
5794    data.isMoved = true;
5795    data.currentTranslate = diff + data.startTranslate;
5796    let disableParentSwiper = true;
5797    let resistanceRatio = params.resistanceRatio;
5798    if (params.touchReleaseOnEdges) {
5799      resistanceRatio = 0;
5800    }
5801    if (diff > 0) {
5802      if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] : swiper.minTranslate())) {
5803        swiper.loopFix({
5804          direction: 'prev',
5805          setTranslate: true,
5806          activeSlideIndex: 0
5807        });
5808      }
5809      if (data.currentTranslate > swiper.minTranslate()) {
5810        disableParentSwiper = false;
5811        if (params.resistance) {
5812          data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;
5813        }
5814      }
5815    } else if (diff < 0) {
5816      if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] : swiper.maxTranslate())) {
5817        swiper.loopFix({
5818          direction: 'next',
5819          setTranslate: true,
5820          activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))
5821        });
5822      }
5823      if (data.currentTranslate < swiper.maxTranslate()) {
5824        disableParentSwiper = false;
5825        if (params.resistance) {
5826          data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;
5827        }
5828      }
5829    }
5830    if (disableParentSwiper) {
5831      e.preventedByNestedSwiper = true;
5832    }
5833
5834    // Directions locks
5835    if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
5836      data.currentTranslate = data.startTranslate;
5837    }
5838    if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
5839      data.currentTranslate = data.startTranslate;
5840    }
5841    if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {
5842      data.currentTranslate = data.startTranslate;
5843    }
5844
5845    // Threshold
5846    if (params.threshold > 0) {
5847      if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
5848        if (!data.allowThresholdMove) {
5849          data.allowThresholdMove = true;
5850          touches.startX = touches.currentX;
5851          touches.startY = touches.currentY;
5852          data.currentTranslate = data.startTranslate;
5853          touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
5854          return;
5855        }
5856      } else {
5857        data.currentTranslate = data.startTranslate;
5858        return;
5859      }
5860    }
5861    if (!params.followFinger || params.cssMode) return;
5862
5863    // Update active index in free mode
5864    if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {
5865      swiper.updateActiveIndex();
5866      swiper.updateSlidesClasses();
5867    }
5868    if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {
5869      swiper.freeMode.onTouchMove();
5870    }
5871    // Update progress
5872    swiper.updateProgress(data.currentTranslate);
5873    // Update translate
5874    swiper.setTranslate(data.currentTranslate);
5875  }
5876
5877  function onTouchEnd(event) {
5878    const swiper = this;
5879    const data = swiper.touchEventsData;
5880    let e = event;
5881    if (e.originalEvent) e = e.originalEvent;
5882    let targetTouch;
5883    const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';
5884    if (!isTouchEvent) {
5885      if (data.touchId !== null) return; // return from pointer if we use touch
5886      if (e.pointerId !== data.pointerId) return;
5887      targetTouch = e;
5888    } else {
5889      targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];
5890      if (!targetTouch || targetTouch.identifier !== data.touchId) return;
5891    }
5892    if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {
5893      const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);
5894      if (!proceed) {
5895        return;
5896      }
5897    }
5898    data.pointerId = null;
5899    data.touchId = null;
5900    const {
5901      params,
5902      touches,
5903      rtlTranslate: rtl,
5904      slidesGrid,
5905      enabled
5906    } = swiper;
5907    if (!enabled) return;
5908    if (!params.simulateTouch && e.pointerType === 'mouse') return;
5909    if (data.allowTouchCallbacks) {
5910      swiper.emit('touchEnd', e);
5911    }
5912    data.allowTouchCallbacks = false;
5913    if (!data.isTouched) {
5914      if (data.isMoved && params.grabCursor) {
5915        swiper.setGrabCursor(false);
5916      }
5917      data.isMoved = false;
vendor: 4,628 bytes, lines 5918-6044
5918      data.startMoving = false;
5919      return;
5920    }
5921
5922    // Return Grab Cursor
5923    if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
5924      swiper.setGrabCursor(false);
5925    }
5926
5927    // Time diff
5928    const touchEndTime = now();
5929    const timeDiff = touchEndTime - data.touchStartTime;
5930
5931    // Tap, doubleTap, Click
5932    if (swiper.allowClick) {
5933      const pathTree = e.path || e.composedPath && e.composedPath();
5934      swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);
5935      swiper.emit('tap click', e);
5936      if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {
5937        swiper.emit('doubleTap doubleClick', e);
5938      }
5939    }
5940    data.lastClickTime = now();
5941    nextTick(() => {
5942      if (!swiper.destroyed) swiper.allowClick = true;
5943    });
5944    if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {
5945      data.isTouched = false;
5946      data.isMoved = false;
5947      data.startMoving = false;
5948      return;
5949    }
5950    data.isTouched = false;
5951    data.isMoved = false;
5952    data.startMoving = false;
5953    let currentPos;
5954    if (params.followFinger) {
5955      currentPos = rtl ? swiper.translate : -swiper.translate;
5956    } else {
5957      currentPos = -data.currentTranslate;
5958    }
5959    if (params.cssMode) {
5960      return;
5961    }
5962    if (params.freeMode && params.freeMode.enabled) {
5963      swiper.freeMode.onTouchEnd({
5964        currentPos
5965      });
5966      return;
5967    }
5968
5969    // Find current slide
5970    const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;
5971    let stopIndex = 0;
5972    let groupSize = swiper.slidesSizesGrid[0];
5973    for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {
5974      const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
5975      if (typeof slidesGrid[i + increment] !== 'undefined') {
5976        if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {
5977          stopIndex = i;
5978          groupSize = slidesGrid[i + increment] - slidesGrid[i];
5979        }
5980      } else if (swipeToLast || currentPos >= slidesGrid[i]) {
5981        stopIndex = i;
5982        groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
5983      }
5984    }
5985    let rewindFirstIndex = null;
5986    let rewindLastIndex = null;
5987    if (params.rewind) {
5988      if (swiper.isBeginning) {
5989        rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;
5990      } else if (swiper.isEnd) {
5991        rewindFirstIndex = 0;
5992      }
5993    }
5994    // Find current slide size
5995    const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
5996    const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
5997    if (timeDiff > params.longSwipesMs) {
5998      // Long touches
5999      if (!params.longSwipes) {
6000        swiper.slideTo(swiper.activeIndex);
6001        return;
6002      }
6003      if (swiper.swipeDirection === 'next') {
6004        if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);
6005      }
6006      if (swiper.swipeDirection === 'prev') {
6007        if (ratio > 1 - params.longSwipesRatio) {
6008          swiper.slideTo(stopIndex + increment);
6009        } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {
6010          swiper.slideTo(rewindLastIndex);
6011        } else {
6012          swiper.slideTo(stopIndex);
6013        }
6014      }
6015    } else {
6016      // Short swipes
6017      if (!params.shortSwipes) {
6018        swiper.slideTo(swiper.activeIndex);
6019        return;
6020      }
6021      const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
6022      if (!isNavButtonTarget) {
6023        if (swiper.swipeDirection === 'next') {
6024          swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);
6025        }
6026        if (swiper.swipeDirection === 'prev') {
6027          swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);
6028        }
6029      } else if (e.target === swiper.navigation.nextEl) {
6030        swiper.slideTo(stopIndex + increment);
6031      } else {
6032        swiper.slideTo(stopIndex);
6033      }
6034    }
6035  }
6036
6037  function onResize() {
6038    const swiper = this;
6039    const {
6040      params,
6041      el
6042    } = swiper;
6043    if (el && el.offsetWidth === 0) return;
6044
vendor: 6,451 bytes, lines 6045-6263
6045    // Breakpoints
6046    if (params.breakpoints) {
6047      swiper.setBreakpoint();
6048    }
6049
6050    // Save locks
6051    const {
6052      allowSlideNext,
6053      allowSlidePrev,
6054      snapGrid
6055    } = swiper;
6056    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
6057
6058    // Disable locks on resize
6059    swiper.allowSlideNext = true;
6060    swiper.allowSlidePrev = true;
6061    swiper.updateSize();
6062    swiper.updateSlides();
6063    swiper.updateSlidesClasses();
6064    const isVirtualLoop = isVirtual && params.loop;
6065    if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {
6066      swiper.slideTo(swiper.slides.length - 1, 0, false, true);
6067    } else {
6068      if (swiper.params.loop && !isVirtual) {
6069        swiper.slideToLoop(swiper.realIndex, 0, false, true);
6070      } else {
6071        swiper.slideTo(swiper.activeIndex, 0, false, true);
6072      }
6073    }
6074    if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
6075      clearTimeout(swiper.autoplay.resizeTimeout);
6076      swiper.autoplay.resizeTimeout = setTimeout(() => {
6077        if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
6078          swiper.autoplay.resume();
6079        }
6080      }, 500);
6081    }
6082    // Return locks after resize
6083    swiper.allowSlidePrev = allowSlidePrev;
6084    swiper.allowSlideNext = allowSlideNext;
6085    if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
6086      swiper.checkOverflow();
6087    }
6088  }
6089
6090  function onClick(e) {
6091    const swiper = this;
6092    if (!swiper.enabled) return;
6093    if (!swiper.allowClick) {
6094      if (swiper.params.preventClicks) e.preventDefault();
6095      if (swiper.params.preventClicksPropagation && swiper.animating) {
6096        e.stopPropagation();
6097        e.stopImmediatePropagation();
6098      }
6099    }
6100  }
6101
6102  function onScroll() {
6103    const swiper = this;
6104    const {
6105      wrapperEl,
6106      rtlTranslate,
6107      enabled
6108    } = swiper;
6109    if (!enabled) return;
6110    swiper.previousTranslate = swiper.translate;
6111    if (swiper.isHorizontal()) {
6112      swiper.translate = -wrapperEl.scrollLeft;
6113    } else {
6114      swiper.translate = -wrapperEl.scrollTop;
6115    }
6116    // eslint-disable-next-line
6117    if (swiper.translate === 0) swiper.translate = 0;
6118    swiper.updateActiveIndex();
6119    swiper.updateSlidesClasses();
6120    let newProgress;
6121    const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
6122    if (translatesDiff === 0) {
6123      newProgress = 0;
6124    } else {
6125      newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;
6126    }
6127    if (newProgress !== swiper.progress) {
6128      swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
6129    }
6130    swiper.emit('setTranslate', swiper.translate, false);
6131  }
6132
6133  function onLoad(e) {
6134    const swiper = this;
6135    processLazyPreloader(swiper, e.target);
6136    if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {
6137      return;
6138    }
6139    swiper.update();
6140  }
6141
6142  function onDocumentTouchStart() {
6143    const swiper = this;
6144    if (swiper.documentTouchHandlerProceeded) return;
6145    swiper.documentTouchHandlerProceeded = true;
6146    if (swiper.params.touchReleaseOnEdges) {
6147      swiper.el.style.touchAction = 'auto';
6148    }
6149  }
6150
6151  const events = (swiper, method) => {
6152    const document = getDocument();
6153    const {
6154      params,
6155      el,
6156      wrapperEl,
6157      device
6158    } = swiper;
6159    const capture = !!params.nested;
6160    const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';
6161    const swiperMethod = method;
6162
6163    // Touch Events
6164    document[domMethod]('touchstart', swiper.onDocumentTouchStart, {
6165      passive: false,
6166      capture
6167    });
6168    el[domMethod]('touchstart', swiper.onTouchStart, {
6169      passive: false
6170    });
6171    el[domMethod]('pointerdown', swiper.onTouchStart, {
6172      passive: false
6173    });
6174    document[domMethod]('touchmove', swiper.onTouchMove, {
6175      passive: false,
6176      capture
6177    });
6178    document[domMethod]('pointermove', swiper.onTouchMove, {
6179      passive: false,
6180      capture
6181    });
6182    document[domMethod]('touchend', swiper.onTouchEnd, {
6183      passive: true
6184    });
6185    document[domMethod]('pointerup', swiper.onTouchEnd, {
6186      passive: true
6187    });
6188    document[domMethod]('pointercancel', swiper.onTouchEnd, {
6189      passive: true
6190    });
6191    document[domMethod]('touchcancel', swiper.onTouchEnd, {
6192      passive: true
6193    });
6194    document[domMethod]('pointerout', swiper.onTouchEnd, {
6195      passive: true
6196    });
6197    document[domMethod]('pointerleave', swiper.onTouchEnd, {
6198      passive: true
6199    });
6200    document[domMethod]('contextmenu', swiper.onTouchEnd, {
6201      passive: true
6202    });
6203
6204    // Prevent Links Clicks
6205    if (params.preventClicks || params.preventClicksPropagation) {
6206      el[domMethod]('click', swiper.onClick, true);
6207    }
6208    if (params.cssMode) {
6209      wrapperEl[domMethod]('scroll', swiper.onScroll);
6210    }
6211
6212    // Resize handler
6213    if (params.updateOnWindowResize) {
6214      swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);
6215    } else {
6216      swiper[swiperMethod]('observerUpdate', onResize, true);
6217    }
6218
6219    // Images loader
6220    el[domMethod]('load', swiper.onLoad, {
6221      capture: true
6222    });
6223  };
6224  function attachEvents() {
6225    const swiper = this;
6226    const {
6227      params
6228    } = swiper;
6229    swiper.onTouchStart = onTouchStart.bind(swiper);
6230    swiper.onTouchMove = onTouchMove.bind(swiper);
6231    swiper.onTouchEnd = onTouchEnd.bind(swiper);
6232    swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);
6233    if (params.cssMode) {
6234      swiper.onScroll = onScroll.bind(swiper);
6235    }
6236    swiper.onClick = onClick.bind(swiper);
6237    swiper.onLoad = onLoad.bind(swiper);
6238    events(swiper, 'on');
6239  }
6240  function detachEvents() {
6241    const swiper = this;
6242    events(swiper, 'off');
6243  }
6244  var events$1 = {
6245    attachEvents,
6246    detachEvents
6247  };
6248
6249  const isGridEnabled = (swiper, params) => {
6250    return swiper.grid && params.grid && params.grid.rows > 1;
6251  };
6252  function setBreakpoint() {
6253    const swiper = this;
6254    const {
6255      realIndex,
6256      initialized,
6257      params,
6258      el
6259    } = swiper;
6260    const breakpoints = params.breakpoints;
6261    if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;
6262
6263    // Get breakpoint for window width and update parameters
vendor: 3,132 bytes, lines 6264-6336
6264    const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);
6265    if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;
6266    const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
6267    const breakpointParams = breakpointOnlyParams || swiper.originalParams;
6268    const wasMultiRow = isGridEnabled(swiper, params);
6269    const isMultiRow = isGridEnabled(swiper, breakpointParams);
6270    const wasEnabled = params.enabled;
6271    if (wasMultiRow && !isMultiRow) {
6272      el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);
6273      swiper.emitContainerClasses();
6274    } else if (!wasMultiRow && isMultiRow) {
6275      el.classList.add(`${params.containerModifierClass}grid`);
6276      if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {
6277        el.classList.add(`${params.containerModifierClass}grid-column`);
6278      }
6279      swiper.emitContainerClasses();
6280    }
6281
6282    // Toggle navigation, pagination, scrollbar
6283    ['navigation', 'pagination', 'scrollbar'].forEach(prop => {
6284      if (typeof breakpointParams[prop] === 'undefined') return;
6285      const wasModuleEnabled = params[prop] && params[prop].enabled;
6286      const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;
6287      if (wasModuleEnabled && !isModuleEnabled) {
6288        swiper[prop].disable();
6289      }
6290      if (!wasModuleEnabled && isModuleEnabled) {
6291        swiper[prop].enable();
6292      }
6293    });
6294    const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
6295    const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
6296    const wasLoop = params.loop;
6297    if (directionChanged && initialized) {
6298      swiper.changeDirection();
6299    }
6300    extend(swiper.params, breakpointParams);
6301    const isEnabled = swiper.params.enabled;
6302    const hasLoop = swiper.params.loop;
6303    Object.assign(swiper, {
6304      allowTouchMove: swiper.params.allowTouchMove,
6305      allowSlideNext: swiper.params.allowSlideNext,
6306      allowSlidePrev: swiper.params.allowSlidePrev
6307    });
6308    if (wasEnabled && !isEnabled) {
6309      swiper.disable();
6310    } else if (!wasEnabled && isEnabled) {
6311      swiper.enable();
6312    }
6313    swiper.currentBreakpoint = breakpoint;
6314    swiper.emit('_beforeBreakpoint', breakpointParams);
6315    if (initialized) {
6316      if (needsReLoop) {
6317        swiper.loopDestroy();
6318        swiper.loopCreate(realIndex);
6319        swiper.updateSlides();
6320      } else if (!wasLoop && hasLoop) {
6321        swiper.loopCreate(realIndex);
6322        swiper.updateSlides();
6323      } else if (wasLoop && !hasLoop) {
6324        swiper.loopDestroy();
6325      }
6326    }
6327    swiper.emit('breakpoint', breakpointParams);
6328  }
6329
6330  function getBreakpoint(breakpoints, base, containerEl) {
6331    if (base === void 0) {
6332      base = 'window';
6333    }
6334    if (!breakpoints || base === 'container' && !containerEl) return undefined;
6335    let breakpoint = false;
6336    const window = getWindow
vendor: 2,470 bytes, lines 6336-6431
6336();
6337    const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;
6338    const points = Object.keys(breakpoints).map(point => {
6339      if (typeof point === 'string' && point.indexOf('@') === 0) {
6340        const minRatio = parseFloat(point.substr(1));
6341        const value = currentHeight * minRatio;
6342        return {
6343          value,
6344          point
6345        };
6346      }
6347      return {
6348        value: point,
6349        point
6350      };
6351    });
6352    points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));
6353    for (let i = 0; i < points.length; i += 1) {
6354      const {
6355        point,
6356        value
6357      } = points[i];
6358      if (base === 'window') {
6359        if (window.matchMedia(`(min-width: ${value}px)`).matches) {
6360          breakpoint = point;
6361        }
6362      } else if (value <= containerEl.clientWidth) {
6363        breakpoint = point;
6364      }
6365    }
6366    return breakpoint || 'max';
6367  }
6368
6369  var breakpoints = {
6370    setBreakpoint,
6371    getBreakpoint
6372  };
6373
6374  function prepareClasses(entries, prefix) {
6375    const resultClasses = [];
6376    entries.forEach(item => {
6377      if (typeof item === 'object') {
6378        Object.keys(item).forEach(classNames => {
6379          if (item[classNames]) {
6380            resultClasses.push(prefix + classNames);
6381          }
6382        });
6383      } else if (typeof item === 'string') {
6384        resultClasses.push(prefix + item);
6385      }
6386    });
6387    return resultClasses;
6388  }
6389  function addClasses() {
6390    const swiper = this;
6391    const {
6392      classNames,
6393      params,
6394      rtl,
6395      el,
6396      device
6397    } = swiper;
6398    // prettier-ignore
6399    const suffixes = prepareClasses(['initialized', params.direction, {
6400      'free-mode': swiper.params.freeMode && params.freeMode.enabled
6401    }, {
6402      'autoheight': params.autoHeight
6403    }, {
6404      'rtl': rtl
6405    }, {
6406      'grid': params.grid && params.grid.rows > 1
6407    }, {
6408      'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'
6409    }, {
6410      'android': device.android
6411    }, {
6412      'ios': device.ios
6413    }, {
6414      'css-mode': params.cssMode
6415    }, {
6416      'centered': params.cssMode && params.centeredSlides
6417    }, {
6418      'watch-progress': params.watchSlidesProgress
6419    }], params.containerModifierClass);
6420    classNames.push(...suffixes);
6421    el.classList.add(...classNames);
6422    swiper.emitContainerClasses();
6423  }
6424
6425  function removeClasses() {
6426    const swiper = this;
6427    const {
6428      el,
6429      classNames
6430    } = swiper;
6431    
vendor: 2,083 bytes, lines 6431-6509
6431el.classList.remove(...classNames);
6432    swiper.emitContainerClasses();
6433  }
6434
6435  var classes = {
6436    addClasses,
6437    removeClasses
6438  };
6439
6440  function checkOverflow() {
6441    const swiper = this;
6442    const {
6443      isLocked: wasLocked,
6444      params
6445    } = swiper;
6446    const {
6447      slidesOffsetBefore
6448    } = params;
6449    if (slidesOffsetBefore) {
6450      const lastSlideIndex = swiper.slides.length - 1;
6451      const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;
6452      swiper.isLocked = swiper.size > lastSlideRightEdge;
6453    } else {
6454      swiper.isLocked = swiper.snapGrid.length === 1;
6455    }
6456    if (params.allowSlideNext === true) {
6457      swiper.allowSlideNext = !swiper.isLocked;
6458    }
6459    if (params.allowSlidePrev === true) {
6460      swiper.allowSlidePrev = !swiper.isLocked;
6461    }
6462    if (wasLocked && wasLocked !== swiper.isLocked) {
6463      swiper.isEnd = false;
6464    }
6465    if (wasLocked !== swiper.isLocked) {
6466      swiper.emit(swiper.isLocked ? 'lock' : 'unlock');
6467    }
6468  }
6469  var checkOverflow$1 = {
6470    checkOverflow
6471  };
6472
6473  var defaults = {
6474    init: true,
6475    direction: 'horizontal',
6476    oneWayMovement: false,
6477    swiperElementNodeName: 'SWIPER-CONTAINER',
6478    touchEventsTarget: 'wrapper',
6479    initialSlide: 0,
6480    speed: 300,
6481    cssMode: false,
6482    updateOnWindowResize: true,
6483    resizeObserver: true,
6484    nested: false,
6485    createElements: false,
6486    eventsPrefix: 'swiper',
6487    enabled: true,
6488    focusableElements: 'input, select, option, textarea, button, video, label',
6489    // Overrides
6490    width: null,
6491    height: null,
6492    //
6493    preventInteractionOnTransition: false,
6494    // ssr
6495    userAgent: null,
6496    url: null,
6497    // To support iOS's swipe-to-go-back gesture (when being used in-app).
6498    edgeSwipeDetection: false,
6499    edgeSwipeThreshold: 20,
6500    // Autoheight
6501    autoHeight: false,
6502    // Set wrapper width
6503    setWrapperSize: false,
6504    // Virtual Translate
6505    virtualTranslate: false,
6506    // Effects
6507    effect: 'slide',
6508    // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
6509
vendor: 4,199 bytes, lines 6510-6653
6510    // Breakpoints
6511    breakpoints: undefined,
6512    breakpointsBase: 'window',
6513    // Slides grid
6514    spaceBetween: 0,
6515    slidesPerView: 1,
6516    slidesPerGroup: 1,
6517    slidesPerGroupSkip: 0,
6518    slidesPerGroupAuto: false,
6519    centeredSlides: false,
6520    centeredSlidesBounds: false,
6521    slidesOffsetBefore: 0,
6522    // in px
6523    slidesOffsetAfter: 0,
6524    // in px
6525    normalizeSlideIndex: true,
6526    centerInsufficientSlides: false,
6527    // Disable swiper and hide navigation when container not overflow
6528    watchOverflow: true,
6529    // Round length
6530    roundLengths: false,
6531    // Touches
6532    touchRatio: 1,
6533    touchAngle: 45,
6534    simulateTouch: true,
6535    shortSwipes: true,
6536    longSwipes: true,
6537    longSwipesRatio: 0.5,
6538    longSwipesMs: 300,
6539    followFinger: true,
6540    allowTouchMove: true,
6541    threshold: 5,
6542    touchMoveStopPropagation: false,
6543    touchStartPreventDefault: true,
6544    touchStartForcePreventDefault: false,
6545    touchReleaseOnEdges: false,
6546    // Unique Navigation Elements
6547    uniqueNavElements: true,
6548    // Resistance
6549    resistance: true,
6550    resistanceRatio: 0.85,
6551    // Progress
6552    watchSlidesProgress: false,
6553    // Cursor
6554    grabCursor: false,
6555    // Clicks
6556    preventClicks: true,
6557    preventClicksPropagation: true,
6558    slideToClickedSlide: false,
6559    // loop
6560    loop: false,
6561    loopAddBlankSlides: true,
6562    loopAdditionalSlides: 0,
6563    loopPreventsSliding: true,
6564    // rewind
6565    rewind: false,
6566    // Swiping/no swiping
6567    allowSlidePrev: true,
6568    allowSlideNext: true,
6569    swipeHandler: null,
6570    // '.swipe-handler',
6571    noSwiping: true,
6572    noSwipingClass: 'swiper-no-swiping',
6573    noSwipingSelector: null,
6574    // Passive Listeners
6575    passiveListeners: true,
6576    maxBackfaceHiddenSlides: 10,
6577    // NS
6578    containerModifierClass: 'swiper-',
6579    // NEW
6580    slideClass: 'swiper-slide',
6581    slideBlankClass: 'swiper-slide-blank',
6582    slideActiveClass: 'swiper-slide-active',
6583    slideVisibleClass: 'swiper-slide-visible',
6584    slideFullyVisibleClass: 'swiper-slide-fully-visible',
6585    slideNextClass: 'swiper-slide-next',
6586    slidePrevClass: 'swiper-slide-prev',
6587    wrapperClass: 'swiper-wrapper',
6588    lazyPreloaderClass: 'swiper-lazy-preloader',
6589    lazyPreloadPrevNext: 0,
6590    // Callbacks
6591    runCallbacksOnInit: true,
6592    // Internals
6593    _emitClasses: false
6594  };
6595
6596  function moduleExtendParams(params, allModulesParams) {
6597    return function extendParams(obj) {
6598      if (obj === void 0) {
6599        obj = {};
6600      }
6601      const moduleParamName = Object.keys(obj)[0];
6602      const moduleParams = obj[moduleParamName];
6603      if (typeof moduleParams !== 'object' || moduleParams === null) {
6604        extend(allModulesParams, obj);
6605        return;
6606      }
6607      if (params[moduleParamName] === true) {
6608        params[moduleParamName] = {
6609          enabled: true
6610        };
6611      }
6612      if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {
6613        params[moduleParamName].auto = true;
6614      }
6615      if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {
6616        params[moduleParamName].auto = true;
6617      }
6618      if (!(moduleParamName in params && 'enabled' in moduleParams)) {
6619        extend(allModulesParams, obj);
6620        return;
6621      }
6622      if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {
6623        params[moduleParamName].enabled = true;
6624      }
6625      if (!params[moduleParamName]) params[moduleParamName] = {
6626        enabled: false
6627      };
6628      extend(allModulesParams, obj);
6629    };
6630  }
6631
6632  /* eslint no-param-reassign: "off" */
6633  const prototypes = {
6634    eventsEmitter,
6635    update,
6636    translate,
6637    transition,
6638    slide,
6639    loop,
6640    grabCursor,
6641    events: events$1,
6642    breakpoints,
6643    checkOverflow: checkOverflow$1,
6644    classes
6645  };
6646  const extendedDefaults = {};
6647  class Swiper {
6648    constructor() {
6649      let el;
6650      let params;
6651      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
6652        args[_key] = arguments[_key];
6653      }
vendor: 2,062 bytes, lines 6654-6711
6654      if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {
6655        params = args[0];
6656      } else {
6657        [el, params] = args;
6658      }
6659      if (!params) params = {};
6660      params = extend({}, params);
6661      if (el && !params.el) params.el = el;
6662      const document = getDocument();
6663      if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {
6664        const swipers = [];
6665        document.querySelectorAll(params.el).forEach(containerEl => {
6666          const newParams = extend({}, params, {
6667            el: containerEl
6668          });
6669          swipers.push(new Swiper(newParams));
6670        });
6671        // eslint-disable-next-line no-constructor-return
6672        return swipers;
6673      }
6674
6675      // Swiper Instance
6676      const swiper = this;
6677      swiper.__swiper__ = true;
6678      swiper.support = getSupport();
6679      swiper.device = getDevice({
6680        userAgent: params.userAgent
6681      });
6682      swiper.browser = getBrowser();
6683      swiper.eventsListeners = {};
6684      swiper.eventsAnyListeners = [];
6685      swiper.modules = [...swiper.__modules__];
6686      if (params.modules && Array.isArray(params.modules)) {
6687        swiper.modules.push(...params.modules);
6688      }
6689      const allModulesParams = {};
6690      swiper.modules.forEach(mod => {
6691        mod({
6692          params,
6693          swiper,
6694          extendParams: moduleExtendParams(params, allModulesParams),
6695          on: swiper.on.bind(swiper),
6696          once: swiper.once.bind(swiper),
6697          off: swiper.off.bind(swiper),
6698          emit: swiper.emit.bind(swiper)
6699        });
6700      });
6701
6702      // Extend defaults with modules params
6703      const swiperParams = extend({}, defaults, allModulesParams);
6704
6705      // Extend defaults with passed params
6706      swiper.params = extend({}, swiperParams, extendedDefaults, params);
6707      swiper.originalParams = extend({}, swiper.params);
6708      swiper.passedParams = extend({}, params);
6709
6710      // add event listeners
6711      if (swiper.params && swiper.params.on) {
vendor: 3,531 bytes, lines 6712-6832
6712        Object.keys(swiper.params.on).forEach(eventName => {
6713          swiper.on(eventName, swiper.params.on[eventName]);
6714        });
6715      }
6716      if (swiper.params && swiper.params.onAny) {
6717        swiper.onAny(swiper.params.onAny);
6718      }
6719
6720      // Extend Swiper
6721      Object.assign(swiper, {
6722        enabled: swiper.params.enabled,
6723        el,
6724        // Classes
6725        classNames: [],
6726        // Slides
6727        slides: [],
6728        slidesGrid: [],
6729        snapGrid: [],
6730        slidesSizesGrid: [],
6731        // isDirection
6732        isHorizontal() {
6733          return swiper.params.direction === 'horizontal';
6734        },
6735        isVertical() {
6736          return swiper.params.direction === 'vertical';
6737        },
6738        // Indexes
6739        activeIndex: 0,
6740        realIndex: 0,
6741        //
6742        isBeginning: true,
6743        isEnd: false,
6744        // Props
6745        translate: 0,
6746        previousTranslate: 0,
6747        progress: 0,
6748        velocity: 0,
6749        animating: false,
6750        cssOverflowAdjustment() {
6751          // Returns 0 unless `translate` is > 2**23
6752          // Should be subtracted from css values to prevent overflow
6753          return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;
6754        },
6755        // Locks
6756        allowSlideNext: swiper.params.allowSlideNext,
6757        allowSlidePrev: swiper.params.allowSlidePrev,
6758        // Touch Events
6759        touchEventsData: {
6760          isTouched: undefined,
6761          isMoved: undefined,
6762          allowTouchCallbacks: undefined,
6763          touchStartTime: undefined,
6764          isScrolling: undefined,
6765          currentTranslate: undefined,
6766          startTranslate: undefined,
6767          allowThresholdMove: undefined,
6768          // Form elements to match
6769          focusableElements: swiper.params.focusableElements,
6770          // Last click time
6771          lastClickTime: 0,
6772          clickTimeout: undefined,
6773          // Velocities
6774          velocities: [],
6775          allowMomentumBounce: undefined,
6776          startMoving: undefined,
6777          pointerId: null,
6778          touchId: null
6779        },
6780        // Clicks
6781        allowClick: true,
6782        // Touches
6783        allowTouchMove: swiper.params.allowTouchMove,
6784        touches: {
6785          startX: 0,
6786          startY: 0,
6787          currentX: 0,
6788          currentY: 0,
6789          diff: 0
6790        },
6791        // Images
6792        imagesToLoad: [],
6793        imagesLoaded: 0
6794      });
6795      swiper.emit('_swiper');
6796
6797      // Init
6798      if (swiper.params.init) {
6799        swiper.init();
6800      }
6801
6802      // Return app instance
6803      // eslint-disable-next-line no-constructor-return
6804      return swiper;
6805    }
6806    getDirectionLabel(property) {
6807      if (this.isHorizontal()) {
6808        return property;
6809      }
6810      // prettier-ignore
6811      return {
6812        'width': 'height',
6813        'margin-top': 'margin-left',
6814        'margin-bottom ': 'margin-right',
6815        'margin-left': 'margin-top',
6816        'margin-right': 'margin-bottom',
6817        'padding-left': 'padding-top',
6818        'padding-right': 'padding-bottom',
6819        'marginRight': 'marginBottom'
6820      }[property];
6821    }
6822    getSlideIndex(slideEl) {
6823      const {
6824        slidesEl,
6825        params
6826      } = this;
6827      const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
6828      const firstSlideIndex = elementIndex(slides[0]);
6829      return elementIndex(slideEl) - firstSlideIndex;
6830    }
6831    getSlideIndexByData(index) {
6832      return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0])
vendor: 8,478 bytes, lines 6832-7076
6832;
6833    }
6834    recalcSlides() {
6835      const swiper = this;
6836      const {
6837        slidesEl,
6838        params
6839      } = swiper;
6840      swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
6841    }
6842    enable() {
6843      const swiper = this;
6844      if (swiper.enabled) return;
6845      swiper.enabled = true;
6846      if (swiper.params.grabCursor) {
6847        swiper.setGrabCursor();
6848      }
6849      swiper.emit('enable');
6850    }
6851    disable() {
6852      const swiper = this;
6853      if (!swiper.enabled) return;
6854      swiper.enabled = false;
6855      if (swiper.params.grabCursor) {
6856        swiper.unsetGrabCursor();
6857      }
6858      swiper.emit('disable');
6859    }
6860    setProgress(progress, speed) {
6861      const swiper = this;
6862      progress = Math.min(Math.max(progress, 0), 1);
6863      const min = swiper.minTranslate();
6864      const max = swiper.maxTranslate();
6865      const current = (max - min) * progress + min;
6866      swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);
6867      swiper.updateActiveIndex();
6868      swiper.updateSlidesClasses();
6869    }
6870    emitContainerClasses() {
6871      const swiper = this;
6872      if (!swiper.params._emitClasses || !swiper.el) return;
6873      const cls = swiper.el.className.split(' ').filter(className => {
6874        return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;
6875      });
6876      swiper.emit('_containerClasses', cls.join(' '));
6877    }
6878    getSlideClasses(slideEl) {
6879      const swiper = this;
6880      if (swiper.destroyed) return '';
6881      return slideEl.className.split(' ').filter(className => {
6882        return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;
6883      }).join(' ');
6884    }
6885    emitSlidesClasses() {
6886      const swiper = this;
6887      if (!swiper.params._emitClasses || !swiper.el) return;
6888      const updates = [];
6889      swiper.slides.forEach(slideEl => {
6890        const classNames = swiper.getSlideClasses(slideEl);
6891        updates.push({
6892          slideEl,
6893          classNames
6894        });
6895        swiper.emit('_slideClass', slideEl, classNames);
6896      });
6897      swiper.emit('_slideClasses', updates);
6898    }
6899    slidesPerViewDynamic(view, exact) {
6900      if (view === void 0) {
6901        view = 'current';
6902      }
6903      if (exact === void 0) {
6904        exact = false;
6905      }
6906      const swiper = this;
6907      const {
6908        params,
6909        slides,
6910        slidesGrid,
6911        slidesSizesGrid,
6912        size: swiperSize,
6913        activeIndex
6914      } = swiper;
6915      let spv = 1;
6916      if (typeof params.slidesPerView === 'number') return params.slidesPerView;
6917      if (params.centeredSlides) {
6918        let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;
6919        let breakLoop;
6920        for (let i = activeIndex + 1; i < slides.length; i += 1) {
6921          if (slides[i] && !breakLoop) {
6922            slideSize += Math.ceil(slides[i].swiperSlideSize);
6923            spv += 1;
6924            if (slideSize > swiperSize) breakLoop = true;
6925          }
6926        }
6927        for (let i = activeIndex - 1; i >= 0; i -= 1) {
6928          if (slides[i] && !breakLoop) {
6929            slideSize += slides[i].swiperSlideSize;
6930            spv += 1;
6931            if (slideSize > swiperSize) breakLoop = true;
6932          }
6933        }
6934      } else {
6935        // eslint-disable-next-line
6936        if (view === 'current') {
6937          for (let i = activeIndex + 1; i < slides.length; i += 1) {
6938            const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;
6939            if (slideInView) {
6940              spv += 1;
6941            }
6942          }
6943        } else {
6944          // previous
6945          for (let i = activeIndex - 1; i >= 0; i -= 1) {
6946            const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;
6947            if (slideInView) {
6948              spv += 1;
6949            }
6950          }
6951        }
6952      }
6953      return spv;
6954    }
6955    update() {
6956      const swiper = this;
6957      if (!swiper || swiper.destroyed) return;
6958      const {
6959        snapGrid,
6960        params
6961      } = swiper;
6962      // Breakpoints
6963      if (params.breakpoints) {
6964        swiper.setBreakpoint();
6965      }
6966      [...swiper.el.querySelectorAll('[loading="lazy"]')].forEach(imageEl => {
6967        if (imageEl.complete) {
6968          processLazyPreloader(swiper, imageEl);
6969        }
6970      });
6971      swiper.updateSize();
6972      swiper.updateSlides();
6973      swiper.updateProgress();
6974      swiper.updateSlidesClasses();
6975      function setTranslate() {
6976        const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
6977        const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
6978        swiper.setTranslate(newTranslate);
6979        swiper.updateActiveIndex();
6980        swiper.updateSlidesClasses();
6981      }
6982      let translated;
6983      if (params.freeMode && params.freeMode.enabled && !params.cssMode) {
6984        setTranslate();
6985        if (params.autoHeight) {
6986          swiper.updateAutoHeight();
6987        }
6988      } else {
6989        if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {
6990          const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;
6991          translated = swiper.slideTo(slides.length - 1, 0, false, true);
6992        } else {
6993          translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
6994        }
6995        if (!translated) {
6996          setTranslate();
6997        }
6998      }
6999      if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
7000        swiper.checkOverflow();
7001      }
7002      swiper.emit('update');
7003    }
7004    changeDirection(newDirection, needUpdate) {
7005      if (needUpdate === void 0) {
7006        needUpdate = true;
7007      }
7008      const swiper = this;
7009      const currentDirection = swiper.params.direction;
7010      if (!newDirection) {
7011        // eslint-disable-next-line
7012        newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
7013      }
7014      if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {
7015        return swiper;
7016      }
7017      swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);
7018      swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);
7019      swiper.emitContainerClasses();
7020      swiper.params.direction = newDirection;
7021      swiper.slides.forEach(slideEl => {
7022        if (newDirection === 'vertical') {
7023          slideEl.style.width = '';
7024        } else {
7025          slideEl.style.height = '';
7026        }
7027      });
7028      swiper.emit('changeDirection');
7029      if (needUpdate) swiper.update();
7030      return swiper;
7031    }
7032    changeLanguageDirection(direction) {
7033      const swiper = this;
7034      if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;
7035      swiper.rtl = direction === 'rtl';
7036      swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;
7037      if (swiper.rtl) {
7038        swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);
7039        swiper.el.dir = 'rtl';
7040      } else {
7041        swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);
7042        swiper.el.dir = 'ltr';
7043      }
7044      swiper.update();
7045    }
7046    mount(element) {
7047      const swiper = this;
7048      if (swiper.mounted) return true;
7049
7050      // Find el
7051      let el = element || swiper.params.el;
7052      if (typeof el === 'string') {
7053        el = document.querySelector(el);
7054      }
7055      if (!el) {
7056        return false;
7057      }
7058      el.swiper = swiper;
7059      if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {
7060        swiper.isElement = true;
7061      }
7062      const getWrapperSelector = () => {
7063        return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;
7064      };
7065      const getWrapper = () => {
7066        if (el && el.shadowRoot && el.shadowRoot.querySelector) {
7067          const res = el.shadowRoot.querySelector(getWrapperSelector());
7068          // Children needs to return slot items
7069          return res;
7070        }
7071        return elementChildren(el, getWrapperSelector())[0];
7072      };
7073      // Find Wrapper
7074      let wrapperEl = getWrapper();
7075      if (!wrapperEl && swiper.params.createElements) {
7076        wrapperEl = createElement
7076('div', swiper.params.wrapperClass);
7077        el.append(wrapperEl);
7078        elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {
7079          wrapperEl.append(slideEl);
7080        });
7081      }
7082      Object.assign(swiper, {
7083        el,
7084        wrapperEl,
7085        slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,
7086        hostEl: swiper.isElement ? el.parentNode.host : el,
7087        mounted: true,
7088        // RTL
7089        rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',
7090        rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),
7091        wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'
7092      });
7093      return true;
7094    }
7095    init(el) {
7096      const swiper = this;
7097      if (swiper.initialized) return swiper;
7098      const mounted = swiper.mount(el);
7099      if (mounted === false) return swiper;
7100      swiper.emit('beforeInit');
7101
7102      // Set breakpoint
7103      if (swiper.params.breakpoints) {
7104        swiper.setBreakpoint();
7105      }
7106
7107      // Add Classes
7108      swiper.addClasses();
7109
7110      // Update size
7111      swiper.updateSize();
7112
7113      // Update slides
7114      swiper.updateSlides();
7115      if (swiper.params.watchOverflow) {
7116        swiper.checkOverflow();
7117      }
7118
7119      // Set Grab Cursor
7120      if (swiper.params.grabCursor && swiper.enabled) {
7121        swiper.setGrabCursor();
7122      }
7123
7124      // Slide To Initial Slide
7125      if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
7126        swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);
7127      } else {
7128        swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);
7129      }
7130
7131      // Create loop
7132      if (swiper.params.loop) {
7133        swiper.loopCreate();
7134      }
7135
7136      // Attach events
7137      swiper.attachEvents();
7138      const lazyElements = [...swiper.el.querySelectorAll('[loading="lazy"]')];
7139      if (swiper.isElement) {
7140        lazyElements.push(...swiper.hostEl.querySelectorAll('[loading="lazy"]'));
7141      }
7142      lazyElements.forEach(imageEl => {
7143        if (imageEl.complete) {
7144          processLazyPreloader(swiper, imageEl);
7145        } else {
7146          imageEl.addEventListener('load', e => {
7147            processLazyPreloader(swiper, e.target);
7148          });
7149        }
7150      });
7151      preload(swiper);
7152
7153      // Init Flag
7154      swiper.initialized = true;
7155      preload(swiper);
7156
7157      // Emit
7158      swiper.emit('init');
7159      swiper.emit('afterInit');
7160      return swiper;
7161    }
7162    destroy(deleteInstance, cleanStyles) {
7163      if (deleteInstance === void 0) {
7164        deleteInstance = true;
7165      }
7166      if (cleanStyles === void 0) {
7167        cleanStyles = true;
7168      }
7169      const swiper = this;
7170      const {
7171        params,
7172        el,
7173        wrapperEl,
7174        slides
7175      } = swiper;
7176      if (typeof swiper.params === 'undefined' || swiper.destroyed) {
7177        return null;
7178      }
7179      swiper.emit('beforeDestroy');
7180
7181      // Init Flag
7182      swiper.initialized = false;
7183
7184      // Detach events
7185      swiper.detachEvents();
7186
7187      // Destroy loop
7188      if (params.loop) {
7189        swiper.loopDestroy();
7190      }
7191
7192      // Cleanup styles
7193      if (cleanStyles) {
7194        swiper.removeClasses();
7195        el.removeAttribute('style');
7196        wrapperEl.removeAttribute('style');
7197        if (slides && slides.length) {
7198          slides.forEach(slideEl => {
7199            slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);
7200            slideEl.removeAttribute('style');
7201            slideEl.removeAttribute('data-swiper-slide-index');
7202          });
7203        }
7204      }
7205      swiper.emit('destroy');
7206
7207      // Detach emitter events
7208      Object.keys(swiper.eventsListeners).forEach(eventName => {
7209        swiper.off(eventName);
7210      });
7211      if (deleteInstance !== false) {
7212        swiper.el.swiper = null;
7213        deleteProps(swiper);
7214      }
7215      swiper.destroyed = true;
7216      return null;
7217    }
7218    static extendDefaults(newDefaults) {
7219      extend(extendedDefaults, newDefaults);
7220    }
7221    static get extendedDefaults() {
7222      return extendedDefaults;
7223    }
7224    static get defaults() {
7225      return defaults;
7226    }
7227    static installModule(mod) {
7228      if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];
7229      const modules = Swiper.prototype.__modules__;
7230      if (typeof mod === 'function' && modules.indexOf(mod) < 0) {
7231        modules.push(mod);
7232      }
7233    }
7234    static use(module) {
7235      if (Array.isArray(module)) {
7236        module.forEach(m => Swiper.installModule(m));
7237        return Swiper;
7238      }
7239      Swiper.installModule(module);
7240      return Swiper;
7241    }
7242  }
7243  Object.keys(prototypes).forEach(prototypeGroup => {
7244    Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {
7245      Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
7246    });
7247  });
7248  Swiper.use([Resize, Observer]);
7249
7250  function Virtual(_ref) {
7251    let {
7252      swiper,
7253      extendParams,
7254      on,
7255      emit
7256    } = _ref;
7257    extendParams({
7258      virtual: {
7259        enabled: false,
7260        slides: [],
7261        cache: true,
7262        renderSlide: null,
7263        renderExternal: null,
7264        renderExternalUpdate: true,
7265        addSlidesBefore: 0,
7266        addSlidesAfter: 0
7267      }
7268    });
7269    let cssModeTimeout;
7270    const document = getDocument();
7271    swiper.virtual = {
7272      cache: {},
7273      from: undefined,
7274      to: undefined,
7275      slides: [],
7276      offset: 0,
7277      slidesGrid: []
7278    };
7279    const tempDOM = document.createElement('div');
7280    function renderSlide(slide, index) {
7281      const params = swiper.params.virtual;
7282      if (params.cache && swiper.virtual.cache[index]) {
7283        return swiper.virtual.cache[index];
7284      }
7285      // eslint-disable-next-line
7286      let slideEl;
7287      if (params.renderSlide) {
7288        slideEl = params.renderSlide.call(swiper, slide, index);
7289        if (typeof slideEl === 'string') {
7290          tempDOM.innerHTML = slideEl;
7291          slideEl = tempDOM.children[0];
7292        }
7293      } else if (swiper.isElement) {
7294        slideEl = createElement('swiper-slide');
7295      } else {
7296        slideEl = createElement('div', swiper.params.slideClass);
7297      }
7298      slideEl.setAttribute('data-swiper-slide-index', index);
7299      if (!params.renderSlide) {
7300        slideEl.innerHTML = slide;
7301      }
7302      if (params.cache) {
7303        swiper.virtual.cache[index] = slideEl;
7304      }
7305      return slideEl;
7306    }
7307    function update(force) {
7308      const {
7309        slidesPerView,
7310        slidesPerGroup,
7311        centeredSlides,
7312        loop: isLoop
7313      } = swiper.params;
7314      const {
7315        addSlidesBefore,
7316        addSlidesAfter
7317      } = swiper.params.virtual;
7318      const {
7319        from: previousFrom,
7320        to: previousTo,
7321        slides,
7322        slidesGrid: previousSlidesGrid,
7323        offset: previousOffset
7324      } = swiper.virtual;
7325      if (!swiper.params.cssMode) {
7326        swiper.updateActiveIndex();
7327      }
7328      const activeIndex = swiper.activeIndex || 0;
7329      let offsetProp;
7330      if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';
7331      let slidesAfter;
7332      let slidesBefore;
7333      if (centeredSlides) {
7334        slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
7335        slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
7336      } else {
7337        slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;
7338        slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore;
7339      }
7340      let from = activeIndex - slidesBefore;
7341      let to = activeIndex + slidesAfter;
7342      if (!isLoop) {
7343        from = Math.max(from, 0);
7344        to = Math.min(to, slides.length - 1);
7345      }
7346      let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
7347      if (isLoop && activeIndex >= slidesBefore) {
7348        from -= slidesBefore;
7349        if (!centeredSlides) offset += swiper.slidesGrid[0];
7350      } else if (isLoop && activeIndex < slidesBefore) {
7351        from = -slidesBefore;
7352        if (centeredSlides) offset += swiper.slidesGrid[0];
7353      }
7354      Object.assign(swiper.virtual, {
7355        from,
7356        to,
7357        offset,
7358        slidesGrid: swiper.slidesGrid,
7359        slidesBefore,
7360        slidesAfter
7361      });
7362      function onRendered() {
7363        swiper.updateSlides();
7364        swiper.updateProgress();
7365        swiper.updateSlidesClasses();
7366        emit('virtualUpdate');
7367      }
7368      if (previousFrom === from && previousTo === to && !force) {
7369        if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
vendor: 1,316 bytes, lines 7370-7411
7370          swiper.slides.forEach(slideEl => {
7371            slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;
7372          });
7373        }
7374        swiper.updateProgress();
7375        emit('virtualUpdate');
7376        return;
7377      }
7378      if (swiper.params.virtual.renderExternal) {
7379        swiper.params.virtual.renderExternal.call(swiper, {
7380          offset,
7381          from,
7382          to,
7383          slides: function getSlides() {
7384            const slidesToRender = [];
7385            for (let i = from; i <= to; i += 1) {
7386              slidesToRender.push(slides[i]);
7387            }
7388            return slidesToRender;
7389          }()
7390        });
7391        if (swiper.params.virtual.renderExternalUpdate) {
7392          onRendered();
7393        } else {
7394          emit('virtualUpdate');
7395        }
7396        return;
7397      }
7398      const prependIndexes = [];
7399      const appendIndexes = [];
7400      const getSlideIndex = index => {
7401        let slideIndex = index;
7402        if (index < 0) {
7403          slideIndex = slides.length + index;
7404        } else if (slideIndex >= slides.length) {
7405          // eslint-disable-next-line
7406          slideIndex = slideIndex - slides.length;
7407        }
7408        return slideIndex;
7409      };
7410      if (force) {
7411        swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}
7411, swiper-slide`)).forEach(slideEl => {
7412          slideEl.remove();
7413        });
7414      } else {
7415        for (let i = previousFrom; i <= previousTo; i += 1) {
7416          if (i < from || i > to) {
7417            const slideIndex = getSlideIndex(i);
7418            swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}[data-swiper-slide-index="${slideIndex}"], swiper-slide[data-swiper-slide-index="${slideIndex}"]`)).forEach(slideEl => {
7419              slideEl.remove();
7420            });
7421          }
7422        }
7423      }
7424      const loopFrom = isLoop ? -slides.length : 0;
7425      const loopTo = isLoop ? slides.length * 2 : slides.length;
7426      for (let i = loopFrom; i < loopTo; i += 1) {
7427        if (i >= from && i <= to) {
7428          const slideIndex = getSlideIndex(i);
7429          if (typeof previousTo === 'undefined' || force) {
7430            appendIndexes.push(slideIndex);
7431          } else {
7432            if (i > previousTo) appendIndexes.push(slideIndex);
7433            if (i < previousFrom) prependIndexes.push(slideIndex);
7434          }
7435        }
7436      }
7437      appendIndexes.forEach(index => {
7438        swiper.slidesEl.append(renderSlide(slides[index], index));
7439      });
7440      if (isLoop) {
7441        for (let i = prependIndexes.length - 1; i >= 0; i -= 1) {
7442          const index = prependIndexes[i];
7443          swiper.slidesEl.prepend(renderSlide(slides[index], index));
7444        }
7445      } else {
7446        prependIndexes.sort((a, b) => b - a);
7447        prependIndexes.forEach(index => {
7448          swiper.slidesEl.prepend(renderSlide(slides[index], index));
7449        });
7450      }
7451      elementChildren(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach(sli
vendor: 5,033 bytes, lines 7451-7581
7451deEl => {
7452        slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;
7453      });
7454      onRendered();
7455    }
7456    function appendSlide(slides) {
7457      if (typeof slides === 'object' && 'length' in slides) {
7458        for (let i = 0; i < slides.length; i += 1) {
7459          if (slides[i]) swiper.virtual.slides.push(slides[i]);
7460        }
7461      } else {
7462        swiper.virtual.slides.push(slides);
7463      }
7464      update(true);
7465    }
7466    function prependSlide(slides) {
7467      const activeIndex = swiper.activeIndex;
7468      let newActiveIndex = activeIndex + 1;
7469      let numberOfNewSlides = 1;
7470      if (Array.isArray(slides)) {
7471        for (let i = 0; i < slides.length; i += 1) {
7472          if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
7473        }
7474        newActiveIndex = activeIndex + slides.length;
7475        numberOfNewSlides = slides.length;
7476      } else {
7477        swiper.virtual.slides.unshift(slides);
7478      }
7479      if (swiper.params.virtual.cache) {
7480        const cache = swiper.virtual.cache;
7481        const newCache = {};
7482        Object.keys(cache).forEach(cachedIndex => {
7483          const cachedEl = cache[cachedIndex];
7484          const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index');
7485          if (cachedElIndex) {
7486            cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);
7487          }
7488          newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;
7489        });
7490        swiper.virtual.cache = newCache;
7491      }
7492      update(true);
7493      swiper.slideTo(newActiveIndex, 0);
7494    }
7495    function removeSlide(slidesIndexes) {
7496      if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;
7497      let activeIndex = swiper.activeIndex;
7498      if (Array.isArray(slidesIndexes)) {
7499        for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {
7500          if (swiper.params.virtual.cache) {
7501            delete swiper.virtual.cache[slidesIndexes[i]];
7502            // shift cache indexes
7503            Object.keys(swiper.virtual.cache).forEach(key => {
7504              if (key > slidesIndexes) {
7505                swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];
7506                swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1);
7507                delete swiper.virtual.cache[key];
7508              }
7509            });
7510          }
7511          swiper.virtual.slides.splice(slidesIndexes[i], 1);
7512          if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
7513          activeIndex = Math.max(activeIndex, 0);
7514        }
7515      } else {
7516        if (swiper.params.virtual.cache) {
7517          delete swiper.virtual.cache[slidesIndexes];
7518          // shift cache indexes
7519          Object.keys(swiper.virtual.cache).forEach(key => {
7520            if (key > slidesIndexes) {
7521              swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];
7522              swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1);
7523              delete swiper.virtual.cache[key];
7524            }
7525          });
7526        }
7527        swiper.virtual.slides.splice(slidesIndexes, 1);
7528        if (slidesIndexes < activeIndex) activeIndex -= 1;
7529        activeIndex = Math.max(activeIndex, 0);
7530      }
7531      update(true);
7532      swiper.slideTo(activeIndex, 0);
7533    }
7534    function removeAllSlides() {
7535      swiper.virtual.slides = [];
7536      if (swiper.params.virtual.cache) {
7537        swiper.virtual.cache = {};
7538      }
7539      update(true);
7540      swiper.slideTo(0, 0);
7541    }
7542    on('beforeInit', () => {
7543      if (!swiper.params.virtual.enabled) return;
7544      let domSlidesAssigned;
7545      if (typeof swiper.passedParams.virtual.slides === 'undefined') {
7546        const slides = [...swiper.slidesEl.children].filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`));
7547        if (slides && slides.length) {
7548          swiper.virtual.slides = [...slides];
7549          domSlidesAssigned = true;
7550          slides.forEach((slideEl, slideIndex) => {
7551            slideEl.setAttribute('data-swiper-slide-index', slideIndex);
7552            swiper.virtual.cache[slideIndex] = slideEl;
7553            slideEl.remove();
7554          });
7555        }
7556      }
7557      if (!domSlidesAssigned) {
7558        swiper.virtual.slides = swiper.params.virtual.slides;
7559      }
7560      swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);
7561      swiper.params.watchSlidesProgress = true;
7562      swiper.originalParams.watchSlidesProgress = true;
7563      update();
7564    });
7565    on('setTranslate', () => {
7566      if (!swiper.params.virtual.enabled) return;
7567      if (swiper.params.cssMode && !swiper._immediateVirtual) {
7568        clearTimeout(cssModeTimeout);
7569        cssModeTimeout = setTimeout(() => {
7570          update();
7571        }, 100);
7572      } else {
7573        update();
7574      }
7575    });
7576    on('init update resize', () => {
7577      if (!swiper.params.virtual.enabled) return;
7578      if (swiper.params.cssMode) {
7579        setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);
7580      }
7581    });
7582    Object.assign(swiper.virtual, {
7583      appendSlide,
7584      prependSlide,
7585      removeSlide,
7586      removeAllSlides,
7587      update
7588    });
7589  }
7590
7591  /* eslint-disable consistent-return */
7592  function Keyboard(_ref) {
7593    let {
7594      swiper,
7595      extendParams,
7596      on,
7597      emit
7598    } = _ref;
7599    const document = getDocument();
7600    const window = getWindow();
7601    swiper.keyboard = {
7602      enabled: false
7603    };
7604    extendParams({
7605      keyboard: {
7606        enabled: false,
7607        onlyInViewport: true,
7608        pageUpDown: true
7609      }
7610    });
7611    function handle(event) {
7612      if (!swiper.enabled) return;
7613      const {
7614        rtlTranslate: rtl
7615      } = swiper;
7616      let e = event;
7617      if (e.originalEvent) e = e.originalEvent; // jquery fix
7618      const kc = e.keyCode || e.charCode;
7619      const pageUpDown = swiper.params.keyboard.pageUpDown;
7620      const isPageUp = pageUpDown && kc === 33;
7621      const isPageDown = pageUpDown && kc === 34;
7622      const isArrowLeft = kc === 37;
7623      const isArrowRight = kc === 39;
7624      const isArrowUp = kc === 38;
7625      const isArrowDown = kc === 40;
7626      // Directions locks
7627      if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {
7628        return false;
7629      }
7630      if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {
7631        return false;
7632      }
7633      if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
7634        return undefined;
7635      }
7636      if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {
7637        return undefined;
7638      }
7639      if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {
7640        let inView = false;
7641        // Check that swiper should be inside of visible area of window
7642        if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {
7643          return undefined;
7644        }
7645        const el = swiper.el;
7646        const swiperWidth = el.clientWidth;
7647        const swiperHeight = el.clientHeight;
7648        const windowWidth = window.innerWidth;
7649        const windowHeight = window.innerHeight;
7650        const swiperOffset = elementOffset(el);
7651        if (rtl) swiperOffset.left -= el.scrollLeft;
7652        const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];
7653        for (let i = 0; i < swiperCoord.length; i += 1) {
7654          const point = swiperCoord[i];
7655          if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {
7656            if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line
7657            inView = true;
7658          }
7659        }
7660        if (!inView) return undefined;
7661      }
7662      if (swiper.isHorizontal()) {
7663        if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {
7664          if (e.preventDefault) e.preventDefault();else e.returnValue = false;
7665        }
7666        if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();
7667        if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();
7668      } else {
7669        if (isPageUp || isPageDown || isArrowUp || isArrowDown) {
7670          if (e.preventDefault) e.preventDefault();else e.returnValue = false;
7671        }
7672        if (isPageDown || isArrowDown) swiper.slideNext();
7673        if (isPageUp || isArrowUp) swiper.slidePrev();
7674      }
7675      emit('keyPress', kc);
7676      return undefined;
7677    }
7678    function enable() {
7679      if (swiper.keyboard.enabled) return;
7680      document.addEventListener('keydown', handle);
7681      swiper.keyboard.enabled = true;
7682    }
7683    function disable() {
7684      if (!swiper.keyboard.enabled) return;
7685      document.removeEventListener('keydown', handle);
7686      swiper.keyboard.enabled = false;
vendor: 27,355 bytes, lines 7687-8427
7687    }
7688    on('init', () => {
7689      if (swiper.params.keyboard.enabled) {
7690        enable();
7691      }
7692    });
7693    on('destroy', () => {
7694      if (swiper.keyboard.enabled) {
7695        disable();
7696      }
7697    });
7698    Object.assign(swiper.keyboard, {
7699      enable,
7700      disable
7701    });
7702  }
7703
7704  /* eslint-disable consistent-return */
7705  function Mousewheel(_ref) {
7706    let {
7707      swiper,
7708      extendParams,
7709      on,
7710      emit
7711    } = _ref;
7712    const window = getWindow();
7713    extendParams({
7714      mousewheel: {
7715        enabled: false,
7716        releaseOnEdges: false,
7717        invert: false,
7718        forceToAxis: false,
7719        sensitivity: 1,
7720        eventsTarget: 'container',
7721        thresholdDelta: null,
7722        thresholdTime: null,
7723        noMousewheelClass: 'swiper-no-mousewheel'
7724      }
7725    });
7726    swiper.mousewheel = {
7727      enabled: false
7728    };
7729    let timeout;
7730    let lastScrollTime = now();
7731    let lastEventBeforeSnap;
7732    const recentWheelEvents = [];
7733    function normalize(e) {
7734      // Reasonable defaults
7735      const PIXEL_STEP = 10;
7736      const LINE_HEIGHT = 40;
7737      const PAGE_HEIGHT = 800;
7738      let sX = 0;
7739      let sY = 0; // spinX, spinY
7740      let pX = 0;
7741      let pY = 0; // pixelX, pixelY
7742
7743      // Legacy
7744      if ('detail' in e) {
7745        sY = e.detail;
7746      }
7747      if ('wheelDelta' in e) {
7748        sY = -e.wheelDelta / 120;
7749      }
7750      if ('wheelDeltaY' in e) {
7751        sY = -e.wheelDeltaY / 120;
7752      }
7753      if ('wheelDeltaX' in e) {
7754        sX = -e.wheelDeltaX / 120;
7755      }
7756
7757      // side scrolling on FF with DOMMouseScroll
7758      if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
7759        sX = sY;
7760        sY = 0;
7761      }
7762      pX = sX * PIXEL_STEP;
7763      pY = sY * PIXEL_STEP;
7764      if ('deltaY' in e) {
7765        pY = e.deltaY;
7766      }
7767      if ('deltaX' in e) {
7768        pX = e.deltaX;
7769      }
7770      if (e.shiftKey && !pX) {
7771        // if user scrolls with shift he wants horizontal scroll
7772        pX = pY;
7773        pY = 0;
7774      }
7775      if ((pX || pY) && e.deltaMode) {
7776        if (e.deltaMode === 1) {
7777          // delta in LINE units
7778          pX *= LINE_HEIGHT;
7779          pY *= LINE_HEIGHT;
7780        } else {
7781          // delta in PAGE units
7782          pX *= PAGE_HEIGHT;
7783          pY *= PAGE_HEIGHT;
7784        }
7785      }
7786
7787      // Fall-back if spin cannot be determined
7788      if (pX && !sX) {
7789        sX = pX < 1 ? -1 : 1;
7790      }
7791      if (pY && !sY) {
7792        sY = pY < 1 ? -1 : 1;
7793      }
7794      return {
7795        spinX: sX,
7796        spinY: sY,
7797        pixelX: pX,
7798        pixelY: pY
7799      };
7800    }
7801    function handleMouseEnter() {
7802      if (!swiper.enabled) return;
7803      swiper.mouseEntered = true;
7804    }
7805    function handleMouseLeave() {
7806      if (!swiper.enabled) return;
7807      swiper.mouseEntered = false;
7808    }
7809    function animateSlider(newEvent) {
7810      if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {
7811        // Prevent if delta of wheel scroll delta is below configured threshold
7812        return false;
7813      }
7814      if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {
7815        // Prevent if time between scrolls is below configured threshold
7816        return false;
7817      }
7818
7819      // If the movement is NOT big enough and
7820      // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):
7821      //   Don't go any further (avoid insignificant scroll movement).
7822      if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {
7823        // Return false as a default
7824        return true;
7825      }
7826      // If user is scrolling towards the end:
7827      //   If the slider hasn't hit the latest slide or
7828      //   if the slider is a loop and
7829      //   if the slider isn't moving right now:
7830      //     Go to next slide and
7831      //     emit a scroll event.
7832      // Else (the user is scrolling towards the beginning) and
7833      // if the slider hasn't hit the first slide or
7834      // if the slider is a loop and
7835      // if the slider isn't moving right now:
7836      //   Go to prev slide and
7837      //   emit a scroll event.
7838      if (newEvent.direction < 0) {
7839        if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
7840          swiper.slideNext();
7841          emit('scroll', newEvent.raw);
7842        }
7843      } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
7844        swiper.slidePrev();
7845        emit('scroll', newEvent.raw);
7846      }
7847      // If you got here is because an animation has been triggered so store the current time
7848      lastScrollTime = new window.Date().getTime();
7849      // Return false as a default
7850      return false;
7851    }
7852    function releaseScroll(newEvent) {
7853      const params = swiper.params.mousewheel;
7854      if (newEvent.direction < 0) {
7855        if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
7856          // Return true to animate scroll on edges
7857          return true;
7858        }
7859      } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
7860        // Return true to animate scroll on edges
7861        return true;
7862      }
7863      return false;
7864    }
7865    function handle(event) {
7866      let e = event;
7867      let disableParentSwiper = true;
7868      if (!swiper.enabled) return;
7869
7870      // Ignore event if the target or its parents have the swiper-no-mousewheel class
7871      if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;
7872      const params = swiper.params.mousewheel;
7873      if (swiper.params.cssMode) {
7874        e.preventDefault();
7875      }
7876      let targetEl = swiper.el;
7877      if (swiper.params.mousewheel.eventsTarget !== 'container') {
7878        targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);
7879      }
7880      const targetElContainsTarget = targetEl && targetEl.contains(e.target);
7881      if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;
7882      if (e.originalEvent) e = e.originalEvent; // jquery fix
7883      let delta = 0;
7884      const rtlFactor = swiper.rtlTranslate ? -1 : 1;
7885      const data = normalize(e);
7886      if (params.forceToAxis) {
7887        if (swiper.isHorizontal()) {
7888          if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;
7889        } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;
7890      } else {
7891        delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
7892      }
7893      if (delta === 0) return true;
7894      if (params.invert) delta = -delta;
7895
7896      // Get the scroll positions
7897      let positions = swiper.getTranslate() + delta * params.sensitivity;
7898      if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();
7899      if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();
7900
7901      // When loop is true:
7902      //     the disableParentSwiper will be true.
7903      // When loop is false:
7904      //     if the scroll positions is not on edge,
7905      //     then the disableParentSwiper will be true.
7906      //     if the scroll on edge positions,
7907      //     then the disableParentSwiper will be false.
7908      disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());
7909      if (disableParentSwiper && swiper.params.nested) e.stopPropagation();
7910      if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {
7911        // Register the new event in a variable which stores the relevant data
7912        const newEvent = {
7913          time: now(),
7914          delta: Math.abs(delta),
7915          direction: Math.sign(delta),
7916          raw: event
7917        };
7918
7919        // Keep the most recent events
7920        if (recentWheelEvents.length >= 2) {
7921          recentWheelEvents.shift(); // only store the last N events
7922        }
7923
7924        const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
7925        recentWheelEvents.push(newEvent);
7926
7927        // If there is at least one previous recorded event:
7928        //   If direction has changed or
7929        //   if the scroll is quicker than the previous one:
7930        //     Animate the slider.
7931        // Else (this is the first time the wheel is moved):
7932        //     Animate the slider.
7933        if (prevEvent) {
7934          if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {
7935            animateSlider(newEvent);
7936          }
7937        } else {
7938          animateSlider(newEvent);
7939        }
7940
7941        // If it's time to release the scroll:
7942        //   Return now so you don't hit the preventDefault.
7943        if (releaseScroll(newEvent)) {
7944          return true;
7945        }
7946      } else {
7947        // Freemode or scrollContainer:
7948
7949        // If we recently snapped after a momentum scroll, then ignore wheel events
7950        // to give time for the deceleration to finish. Stop ignoring after 500 msecs
7951        // or if it's a new scroll (larger delta or inverse sign as last event before
7952        // an end-of-momentum snap).
7953        const newEvent = {
7954          time: now(),
7955          delta: Math.abs(delta),
7956          direction: Math.sign(delta)
7957        };
7958        const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;
7959        if (!ignoreWheelEvents) {
7960          lastEventBeforeSnap = undefined;
7961          let position = swiper.getTranslate() + delta * params.sensitivity;
7962          const wasBeginning = swiper.isBeginning;
7963          const wasEnd = swiper.isEnd;
7964          if (position >= swiper.minTranslate()) position = swiper.minTranslate();
7965          if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();
7966          swiper.setTransition(0);
7967          swiper.setTranslate(position);
7968          swiper.updateProgress();
7969          swiper.updateActiveIndex();
7970          swiper.updateSlidesClasses();
7971          if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {
7972            swiper.updateSlidesClasses();
7973          }
7974          if (swiper.params.loop) {
7975            swiper.loopFix({
7976              direction: newEvent.direction < 0 ? 'next' : 'prev',
7977              byMousewheel: true
7978            });
7979          }
7980          if (swiper.params.freeMode.sticky) {
7981            // When wheel scrolling starts with sticky (aka snap) enabled, then detect
7982            // the end of a momentum scroll by storing recent (N=15?) wheel events.
7983            // 1. do all N events have decreasing or same (absolute value) delta?
7984            // 2. did all N events arrive in the last M (M=500?) msecs?
7985            // 3. does the earliest event have an (absolute value) delta that's
7986            //    at least P (P=1?) larger than the most recent event's delta?
7987            // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?
7988            // If 1-4 are "yes" then we're near the end of a momentum scroll deceleration.
7989            // Snap immediately and ignore remaining wheel events in this scroll.
7990            // See comment above for "remaining wheel events in this scroll" determination.
7991            // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.
7992            clearTimeout(timeout);
7993            timeout = undefined;
7994            if (recentWheelEvents.length >= 15) {
7995              recentWheelEvents.shift(); // only store the last N events
7996            }
7997
7998            const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
7999            const firstEvent = recentWheelEvents[0];
8000            recentWheelEvents.push(newEvent);
8001            if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {
8002              // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.
8003              recentWheelEvents.splice(0);
8004            } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {
8005              // We're at the end of the deceleration of a momentum scroll, so there's no need
8006              // to wait for more events. Snap ASAP on the next tick.
8007              // Also, because there's some remaining momentum we'll bias the snap in the
8008              // direction of the ongoing scroll because it's better UX for the scroll to snap
8009              // in the same direction as the scroll instead of reversing to snap.  Therefore,
8010              // if it's already scrolled more than 20% in the current direction, keep going.
8011              const snapToThreshold = delta > 0 ? 0.8 : 0.2;
8012              lastEventBeforeSnap = newEvent;
8013              recentWheelEvents.splice(0);
8014              timeout = nextTick(() => {
8015                swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
8016              }, 0); // no delay; move on next tick
8017            }
8018
8019            if (!timeout) {
8020              // if we get here, then we haven't detected the end of a momentum scroll, so
8021              // we'll consider a scroll "complete" when there haven't been any wheel events
8022              // for 500ms.
8023              timeout = nextTick(() => {
8024                const snapToThreshold = 0.5;
8025                lastEventBeforeSnap = newEvent;
8026                recentWheelEvents.splice(0);
8027                swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
8028              }, 500);
8029            }
8030          }
8031
8032          // Emit event
8033          if (!ignoreWheelEvents) emit('scroll', e);
8034
8035          // Stop autoplay
8036          if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();
8037          // Return page scroll on edge positions
8038          if (params.releaseOnEdges && (position === swiper.minTranslate() || position === swiper.maxTranslate())) {
8039            return true;
8040          }
8041        }
8042      }
8043      if (e.preventDefault) e.preventDefault();else e.returnValue = false;
8044      return false;
8045    }
8046    function events(method) {
8047      let targetEl = swiper.el;
8048      if (swiper.params.mousewheel.eventsTarget !== 'container') {
8049        targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);
8050      }
8051      targetEl[method]('mouseenter', handleMouseEnter);
8052      targetEl[method]('mouseleave', handleMouseLeave);
8053      targetEl[method]('wheel', handle);
8054    }
8055    function enable() {
8056      if (swiper.params.cssMode) {
8057        swiper.wrapperEl.removeEventListener('wheel', handle);
8058        return true;
8059      }
8060      if (swiper.mousewheel.enabled) return false;
8061      events('addEventListener');
8062      swiper.mousewheel.enabled = true;
8063      return true;
8064    }
8065    function disable() {
8066      if (swiper.params.cssMode) {
8067        swiper.wrapperEl.addEventListener(event, handle);
8068        return true;
8069      }
8070      if (!swiper.mousewheel.enabled) return false;
8071      events('removeEventListener');
8072      swiper.mousewheel.enabled = false;
8073      return true;
8074    }
8075    on('init', () => {
8076      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
8077        disable();
8078      }
8079      if (swiper.params.mousewheel.enabled) enable();
8080    });
8081    on('destroy', () => {
8082      if (swiper.params.cssMode) {
8083        enable();
8084      }
8085      if (swiper.mousewheel.enabled) disable();
8086    });
8087    Object.assign(swiper.mousewheel, {
8088      enable,
8089      disable
8090    });
8091  }
8092
8093  function createElementIfNotDefined(swiper, originalParams, params, checkProps) {
8094    if (swiper.params.createElements) {
8095      Object.keys(checkProps).forEach(key => {
8096        if (!params[key] && params.auto === true) {
8097          let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];
8098          if (!element) {
8099            element = createElement('div', checkProps[key]);
8100            element.className = checkProps[key];
8101            swiper.el.append(element);
8102          }
8103          params[key] = element;
8104          originalParams[key] = element;
8105        }
8106      });
8107    }
8108    return params;
8109  }
8110
8111  function Navigation(_ref) {
8112    let {
8113      swiper,
8114      extendParams,
8115      on,
8116      emit
8117    } = _ref;
8118    extendParams({
8119      navigation: {
8120        nextEl: null,
8121        prevEl: null,
8122        hideOnClick: false,
8123        disabledClass: 'swiper-button-disabled',
8124        hiddenClass: 'swiper-button-hidden',
8125        lockClass: 'swiper-button-lock',
8126        navigationDisabledClass: 'swiper-navigation-disabled'
8127      }
8128    });
8129    swiper.navigation = {
8130      nextEl: null,
8131      prevEl: null
8132    };
8133    function getEl(el) {
8134      let res;
8135      if (el && typeof el === 'string' && swiper.isElement) {
8136        res = swiper.el.querySelector(el);
8137        if (res) return res;
8138      }
8139      if (el) {
8140        if (typeof el === 'string') res = [...document.querySelectorAll(el)];
8141        if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {
8142          res = swiper.el.querySelector(el);
8143        }
8144      }
8145      if (el && !res) return el;
8146      // if (Array.isArray(res) && res.length === 1) res = res[0];
8147      return res;
8148    }
8149    function toggleEl(el, disabled) {
8150      const params = swiper.params.navigation;
8151      el = makeElementsArray(el);
8152      el.forEach(subEl => {
8153        if (subEl) {
8154          subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));
8155          if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;
8156          if (swiper.params.watchOverflow && swiper.enabled) {
8157            subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);
8158          }
8159        }
8160      });
8161    }
8162    function update() {
8163      // Update Navigation Buttons
8164      const {
8165        nextEl,
8166        prevEl
8167      } = swiper.navigation;
8168      if (swiper.params.loop) {
8169        toggleEl(prevEl, false);
8170        toggleEl(nextEl, false);
8171        return;
8172      }
8173      toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);
8174      toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);
8175    }
8176    function onPrevClick(e) {
8177      e.preventDefault();
8178      if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;
8179      swiper.slidePrev();
8180      emit('navigationPrev');
8181    }
8182    function onNextClick(e) {
8183      e.preventDefault();
8184      if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;
8185      swiper.slideNext();
8186      emit('navigationNext');
8187    }
8188    function init() {
8189      const params = swiper.params.navigation;
8190      swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {
8191        nextEl: 'swiper-button-next',
8192        prevEl: 'swiper-button-prev'
8193      });
8194      if (!(params.nextEl || params.prevEl)) return;
8195      let nextEl = getEl(params.nextEl);
8196      let prevEl = getEl(params.prevEl);
8197      Object.assign(swiper.navigation, {
8198        nextEl,
8199        prevEl
8200      });
8201      nextEl = makeElementsArray(nextEl);
8202      prevEl = makeElementsArray(prevEl);
8203      const initButton = (el, dir) => {
8204        if (el) {
8205          el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);
8206        }
8207        if (!swiper.enabled && el) {
8208          el.classList.add(...params.lockClass.split(' '));
8209        }
8210      };
8211      nextEl.forEach(el => initButton(el, 'next'));
8212      prevEl.forEach(el => initButton(el, 'prev'));
8213    }
8214    function destroy() {
8215      let {
8216        nextEl,
8217        prevEl
8218      } = swiper.navigation;
8219      nextEl = makeElementsArray(nextEl);
8220      prevEl = makeElementsArray(prevEl);
8221      const destroyButton = (el, dir) => {
8222        el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);
8223        el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));
8224      };
8225      nextEl.forEach(el => destroyButton(el, 'next'));
8226      prevEl.forEach(el => destroyButton(el, 'prev'));
8227    }
8228    on('init', () => {
8229      if (swiper.params.navigation.enabled === false) {
8230        // eslint-disable-next-line
8231        disable();
8232      } else {
8233        init();
8234        update();
8235      }
8236    });
8237    on('toEdge fromEdge lock unlock', () => {
8238      update();
8239    });
8240    on('destroy', () => {
8241      destroy();
8242    });
8243    on('enable disable', () => {
8244      let {
8245        nextEl,
8246        prevEl
8247      } = swiper.navigation;
8248      nextEl = makeElementsArray(nextEl);
8249      prevEl = makeElementsArray(prevEl);
8250      if (swiper.enabled) {
8251        update();
8252        return;
8253      }
8254      [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));
8255    });
8256    on('click', (_s, e) => {
8257      let {
8258        nextEl,
8259        prevEl
8260      } = swiper.navigation;
8261      nextEl = makeElementsArray(nextEl);
8262      prevEl = makeElementsArray(prevEl);
8263      const targetEl = e.target;
8264      if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {
8265        if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;
8266        let isHidden;
8267        if (nextEl.length) {
8268          isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);
8269        } else if (prevEl.length) {
8270          isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);
8271        }
8272        if (isHidden === true) {
8273          emit('navigationShow');
8274        } else {
8275          emit('navigationHide');
8276        }
8277        [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));
8278      }
8279    });
8280    const enable = () => {
8281      swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));
8282      init();
8283      update();
8284    };
8285    const disable = () => {
8286      swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));
8287      destroy();
8288    };
8289    Object.assign(swiper.navigation, {
8290      enable,
8291      disable,
8292      update,
8293      init,
8294      destroy
8295    });
8296  }
8297
8298  function classesToSelector(classes) {
8299    if (classes === void 0) {
8300      classes = '';
8301    }
8302    return `.${classes.trim().replace(/([\.:!+\/])/g, '\\$1') // eslint-disable-line
8303  .replace(/ /g, '.')}`;
8304  }
8305
8306  function Pagination(_ref) {
8307    let {
8308      swiper,
8309      extendParams,
8310      on,
8311      emit
8312    } = _ref;
8313    const pfx = 'swiper-pagination';
8314    extendParams({
8315      pagination: {
8316        el: null,
8317        bulletElement: 'span',
8318        clickable: false,
8319        hideOnClick: false,
8320        renderBullet: null,
8321        renderProgressbar: null,
8322        renderFraction: null,
8323        renderCustom: null,
8324        progressbarOpposite: false,
8325        type: 'bullets',
8326        // 'bullets' or 'progressbar' or 'fraction' or 'custom'
8327        dynamicBullets: false,
8328        dynamicMainBullets: 1,
8329        formatFractionCurrent: number => number,
8330        formatFractionTotal: number => number,
8331        bulletClass: `${pfx}-bullet`,
8332        bulletActiveClass: `${pfx}-bullet-active`,
8333        modifierClass: `${pfx}-`,
8334        currentClass: `${pfx}-current`,
8335        totalClass: `${pfx}-total`,
8336        hiddenClass: `${pfx}-hidden`,
8337        progressbarFillClass: `${pfx}-progressbar-fill`,
8338        progressbarOppositeClass: `${pfx}-progressbar-opposite`,
8339        clickableClass: `${pfx}-clickable`,
8340        lockClass: `${pfx}-lock`,
8341        horizontalClass: `${pfx}-horizontal`,
8342        verticalClass: `${pfx}-vertical`,
8343        paginationDisabledClass: `${pfx}-disabled`
8344      }
8345    });
8346    swiper.pagination = {
8347      el: null,
8348      bullets: []
8349    };
8350    let bulletSize;
8351    let dynamicBulletIndex = 0;
8352    function isPaginationDisabled() {
8353      return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;
8354    }
8355    function setSideBullets(bulletEl, position) {
8356      const {
8357        bulletActiveClass
8358      } = swiper.params.pagination;
8359      if (!bulletEl) return;
8360      bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];
8361      if (bulletEl) {
8362        bulletEl.classList.add(`${bulletActiveClass}-${position}`);
8363        bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];
8364        if (bulletEl) {
8365          bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);
8366        }
8367      }
8368    }
8369    function onBulletClick(e) {
8370      const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));
8371      if (!bulletEl) {
8372        return;
8373      }
8374      e.preventDefault();
8375      const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;
8376      if (swiper.params.loop) {
8377        if (swiper.realIndex === index) return;
8378        swiper.slideToLoop(index);
8379      } else {
8380        swiper.slideTo(index);
8381      }
8382    }
8383    function update() {
8384      // Render || Update Pagination bullets/items
8385      const rtl = swiper.rtl;
8386      const params = swiper.params.pagination;
8387      if (isPaginationDisabled()) return;
8388      let el = swiper.pagination.el;
8389      el = makeElementsArray(el);
8390      // Current/Total
8391      let current;
8392      let previousIndex;
8393      const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
8394      const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
8395      if (swiper.params.loop) {
8396        previousIndex = swiper.previousRealIndex || 0;
8397        current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;
8398      } else if (typeof swiper.snapIndex !== 'undefined') {
8399        current = swiper.snapIndex;
8400        previousIndex = swiper.previousSnapIndex;
8401      } else {
8402        previousIndex = swiper.previousIndex || 0;
8403        current = swiper.activeIndex || 0;
8404      }
8405      // Types
8406      if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
8407        const bullets = swiper.pagination.bullets;
8408        let firstIndex;
8409        let lastIndex;
8410        let midIndex;
8411        if (params.dynamicBullets) {
8412          bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);
8413          el.forEach(subEl => {
8414            subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;
8415          });
8416          if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {
8417            dynamicBulletIndex += current - (previousIndex || 0);
8418            if (dynamicBulletIndex > params.dynamicMainBullets - 1) {
8419              dynamicBulletIndex = params.dynamicMainBullets - 1;
8420            } else if (dynamicBulletIndex < 0) {
8421              dynamicBulletIndex = 0;
8422            }
8423          }
8424          firstIndex = Math.max(current - dynamicBulletIndex, 0);
8425          lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
8426          midIndex = (lastIndex + firstIndex) / 2;
8427        }
vendor: 5,261 bytes, lines 8428-8538
8428        bullets.forEach(bulletEl => {
8429          const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();
8430          bulletEl.classList.remove(...classesToRemove);
8431        });
8432        if (el.length > 1) {
8433          bullets.forEach(bullet => {
8434            const bulletIndex = elementIndex(bullet);
8435            if (bulletIndex === current) {
8436              bullet.classList.add(...params.bulletActiveClass.split(' '));
8437            } else if (swiper.isElement) {
8438              bullet.setAttribute('part', 'bullet');
8439            }
8440            if (params.dynamicBullets) {
8441              if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
8442                bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));
8443              }
8444              if (bulletIndex === firstIndex) {
8445                setSideBullets(bullet, 'prev');
8446              }
8447              if (bulletIndex === lastIndex) {
8448                setSideBullets(bullet, 'next');
8449              }
8450            }
8451          });
8452        } else {
8453          const bullet = bullets[current];
8454          if (bullet) {
8455            bullet.classList.add(...params.bulletActiveClass.split(' '));
8456          }
8457          if (swiper.isElement) {
8458            bullets.forEach((bulletEl, bulletIndex) => {
8459              bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');
8460            });
8461          }
8462          if (params.dynamicBullets) {
8463            const firstDisplayedBullet = bullets[firstIndex];
8464            const lastDisplayedBullet = bullets[lastIndex];
8465            for (let i = firstIndex; i <= lastIndex; i += 1) {
8466              if (bullets[i]) {
8467                bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));
8468              }
8469            }
8470            setSideBullets(firstDisplayedBullet, 'prev');
8471            setSideBullets(lastDisplayedBullet, 'next');
8472          }
8473        }
8474        if (params.dynamicBullets) {
8475          const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
8476          const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;
8477          const offsetProp = rtl ? 'right' : 'left';
8478          bullets.forEach(bullet => {
8479            bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;
8480          });
8481        }
8482      }
8483      el.forEach((subEl, subElIndex) => {
8484        if (params.type === 'fraction') {
8485          subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {
8486            fractionEl.textContent = params.formatFractionCurrent(current + 1);
8487          });
8488          subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {
8489            totalEl.textContent = params.formatFractionTotal(total);
8490          });
8491        }
8492        if (params.type === 'progressbar') {
8493          let progressbarDirection;
8494          if (params.progressbarOpposite) {
8495            progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
8496          } else {
8497            progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
8498          }
8499          const scale = (current + 1) / total;
8500          let scaleX = 1;
8501          let scaleY = 1;
8502          if (progressbarDirection === 'horizontal') {
8503            scaleX = scale;
8504          } else {
8505            scaleY = scale;
8506          }
8507          subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {
8508            progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;
8509            progressEl.style.transitionDuration = `${swiper.params.speed}ms`;
8510          });
8511        }
8512        if (params.type === 'custom' && params.renderCustom) {
8513          subEl.innerHTML = params.renderCustom(swiper, current + 1, total);
8514          if (subElIndex === 0) emit('paginationRender', subEl);
8515        } else {
8516          if (subElIndex === 0) emit('paginationRender', subEl);
8517          emit('paginationUpdate', subEl);
8518        }
8519        if (swiper.params.watchOverflow && swiper.enabled) {
8520          subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);
8521        }
8522      });
8523    }
8524    function render() {
8525      // Render Container
8526      const params = swiper.params.pagination;
8527      if (isPaginationDisabled()) return;
8528      const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;
8529      let el = swiper.pagination.el;
8530      el = makeElementsArray(el);
8531      let paginationHTML = '';
8532      if (params.type === 'bullets') {
8533        let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
8534        if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {
8535          numberOfBullets = slidesLength;
8536        }
8537        for (let i = 0; i < numberOfBullets; i += 1) {
8538          if (params.renderBullet) {
vendor: 18,542 bytes, lines 8539-9093
8539            paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
8540          } else {
8541            // prettier-ignore
8542            paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part="bullet"' : ''} class="${params.bulletClass}"></${params.bulletElement}>`;
8543          }
8544        }
8545      }
8546      if (params.type === 'fraction') {
8547        if (params.renderFraction) {
8548          paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
8549        } else {
8550          paginationHTML = `<span class="${params.currentClass}"></span>` + ' / ' + `<span class="${params.totalClass}"></span>`;
8551        }
8552      }
8553      if (params.type === 'progressbar') {
8554        if (params.renderProgressbar) {
8555          paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
8556        } else {
8557          paginationHTML = `<span class="${params.progressbarFillClass}"></span>`;
8558        }
8559      }
8560      swiper.pagination.bullets = [];
8561      el.forEach(subEl => {
8562        if (params.type !== 'custom') {
8563          subEl.innerHTML = paginationHTML || '';
8564        }
8565        if (params.type === 'bullets') {
8566          swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));
8567        }
8568      });
8569      if (params.type !== 'custom') {
8570        emit('paginationRender', el[0]);
8571      }
8572    }
8573    function init() {
8574      swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {
8575        el: 'swiper-pagination'
8576      });
8577      const params = swiper.params.pagination;
8578      if (!params.el) return;
8579      let el;
8580      if (typeof params.el === 'string' && swiper.isElement) {
8581        el = swiper.el.querySelector(params.el);
8582      }
8583      if (!el && typeof params.el === 'string') {
8584        el = [...document.querySelectorAll(params.el)];
8585      }
8586      if (!el) {
8587        el = params.el;
8588      }
8589      if (!el || el.length === 0) return;
8590      if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {
8591        el = [...swiper.el.querySelectorAll(params.el)];
8592        // check if it belongs to another nested Swiper
8593        if (el.length > 1) {
8594          el = el.filter(subEl => {
8595            if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;
8596            return true;
8597          })[0];
8598        }
8599      }
8600      if (Array.isArray(el) && el.length === 1) el = el[0];
8601      Object.assign(swiper.pagination, {
8602        el
8603      });
8604      el = makeElementsArray(el);
8605      el.forEach(subEl => {
8606        if (params.type === 'bullets' && params.clickable) {
8607          subEl.classList.add(...(params.clickableClass || '').split(' '));
8608        }
8609        subEl.classList.add(params.modifierClass + params.type);
8610        subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
8611        if (params.type === 'bullets' && params.dynamicBullets) {
8612          subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);
8613          dynamicBulletIndex = 0;
8614          if (params.dynamicMainBullets < 1) {
8615            params.dynamicMainBullets = 1;
8616          }
8617        }
8618        if (params.type === 'progressbar' && params.progressbarOpposite) {
8619          subEl.classList.add(params.progressbarOppositeClass);
8620        }
8621        if (params.clickable) {
8622          subEl.addEventListener('click', onBulletClick);
8623        }
8624        if (!swiper.enabled) {
8625          subEl.classList.add(params.lockClass);
8626        }
8627      });
8628    }
8629    function destroy() {
8630      const params = swiper.params.pagination;
8631      if (isPaginationDisabled()) return;
8632      let el = swiper.pagination.el;
8633      if (el) {
8634        el = makeElementsArray(el);
8635        el.forEach(subEl => {
8636          subEl.classList.remove(params.hiddenClass);
8637          subEl.classList.remove(params.modifierClass + params.type);
8638          subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
8639          if (params.clickable) {
8640            subEl.classList.remove(...(params.clickableClass || '').split(' '));
8641            subEl.removeEventListener('click', onBulletClick);
8642          }
8643        });
8644      }
8645      if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));
8646    }
8647    on('changeDirection', () => {
8648      if (!swiper.pagination || !swiper.pagination.el) return;
8649      const params = swiper.params.pagination;
8650      let {
8651        el
8652      } = swiper.pagination;
8653      el = makeElementsArray(el);
8654      el.forEach(subEl => {
8655        subEl.classList.remove(params.horizontalClass, params.verticalClass);
8656        subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
8657      });
8658    });
8659    on('init', () => {
8660      if (swiper.params.pagination.enabled === false) {
8661        // eslint-disable-next-line
8662        disable();
8663      } else {
8664        init();
8665        render();
8666        update();
8667      }
8668    });
8669    on('activeIndexChange', () => {
8670      if (typeof swiper.snapIndex === 'undefined') {
8671        update();
8672      }
8673    });
8674    on('snapIndexChange', () => {
8675      update();
8676    });
8677    on('snapGridLengthChange', () => {
8678      render();
8679      update();
8680    });
8681    on('destroy', () => {
8682      destroy();
8683    });
8684    on('enable disable', () => {
8685      let {
8686        el
8687      } = swiper.pagination;
8688      if (el) {
8689        el = makeElementsArray(el);
8690        el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));
8691      }
8692    });
8693    on('lock unlock', () => {
8694      update();
8695    });
8696    on('click', (_s, e) => {
8697      const targetEl = e.target;
8698      const el = makeElementsArray(swiper.pagination.el);
8699      if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {
8700        if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;
8701        const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);
8702        if (isHidden === true) {
8703          emit('paginationShow');
8704        } else {
8705          emit('paginationHide');
8706        }
8707        el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));
8708      }
8709    });
8710    const enable = () => {
8711      swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);
8712      let {
8713        el
8714      } = swiper.pagination;
8715      if (el) {
8716        el = makeElementsArray(el);
8717        el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));
8718      }
8719      init();
8720      render();
8721      update();
8722    };
8723    const disable = () => {
8724      swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);
8725      let {
8726        el
8727      } = swiper.pagination;
8728      if (el) {
8729        el = makeElementsArray(el);
8730        el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));
8731      }
8732      destroy();
8733    };
8734    Object.assign(swiper.pagination, {
8735      enable,
8736      disable,
8737      render,
8738      update,
8739      init,
8740      destroy
8741    });
8742  }
8743
8744  function Scrollbar(_ref) {
8745    let {
8746      swiper,
8747      extendParams,
8748      on,
8749      emit
8750    } = _ref;
8751    const document = getDocument();
8752    let isTouched = false;
8753    let timeout = null;
8754    let dragTimeout = null;
8755    let dragStartPos;
8756    let dragSize;
8757    let trackSize;
8758    let divider;
8759    extendParams({
8760      scrollbar: {
8761        el: null,
8762        dragSize: 'auto',
8763        hide: false,
8764        draggable: false,
8765        snapOnRelease: true,
8766        lockClass: 'swiper-scrollbar-lock',
8767        dragClass: 'swiper-scrollbar-drag',
8768        scrollbarDisabledClass: 'swiper-scrollbar-disabled',
8769        horizontalClass: `swiper-scrollbar-horizontal`,
8770        verticalClass: `swiper-scrollbar-vertical`
8771      }
8772    });
8773    swiper.scrollbar = {
8774      el: null,
8775      dragEl: null
8776    };
8777    function setTranslate() {
8778      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
8779      const {
8780        scrollbar,
8781        rtlTranslate: rtl
8782      } = swiper;
8783      const {
8784        dragEl,
8785        el
8786      } = scrollbar;
8787      const params = swiper.params.scrollbar;
8788      const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;
8789      let newSize = dragSize;
8790      let newPos = (trackSize - dragSize) * progress;
8791      if (rtl) {
8792        newPos = -newPos;
8793        if (newPos > 0) {
8794          newSize = dragSize - newPos;
8795          newPos = 0;
8796        } else if (-newPos + dragSize > trackSize) {
8797          newSize = trackSize + newPos;
8798        }
8799      } else if (newPos < 0) {
8800        newSize = dragSize + newPos;
8801        newPos = 0;
8802      } else if (newPos + dragSize > trackSize) {
8803        newSize = trackSize - newPos;
8804      }
8805      if (swiper.isHorizontal()) {
8806        dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;
8807        dragEl.style.width = `${newSize}px`;
8808      } else {
8809        dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;
8810        dragEl.style.height = `${newSize}px`;
8811      }
8812      if (params.hide) {
8813        clearTimeout(timeout);
8814        el.style.opacity = 1;
8815        timeout = setTimeout(() => {
8816          el.style.opacity = 0;
8817          el.style.transitionDuration = '400ms';
8818        }, 1000);
8819      }
8820    }
8821    function setTransition(duration) {
8822      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
8823      swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;
8824    }
8825    function updateSize() {
8826      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
8827      const {
8828        scrollbar
8829      } = swiper;
8830      const {
8831        dragEl,
8832        el
8833      } = scrollbar;
8834      dragEl.style.width = '';
8835      dragEl.style.height = '';
8836      trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;
8837      divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));
8838      if (swiper.params.scrollbar.dragSize === 'auto') {
8839        dragSize = trackSize * divider;
8840      } else {
8841        dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
8842      }
8843      if (swiper.isHorizontal()) {
8844        dragEl.style.width = `${dragSize}px`;
8845      } else {
8846        dragEl.style.height = `${dragSize}px`;
8847      }
8848      if (divider >= 1) {
8849        el.style.display = 'none';
8850      } else {
8851        el.style.display = '';
8852      }
8853      if (swiper.params.scrollbar.hide) {
8854        el.style.opacity = 0;
8855      }
8856      if (swiper.params.watchOverflow && swiper.enabled) {
8857        scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);
8858      }
8859    }
8860    function getPointerPosition(e) {
8861      return swiper.isHorizontal() ? e.clientX : e.clientY;
8862    }
8863    function setDragPosition(e) {
8864      const {
8865        scrollbar,
8866        rtlTranslate: rtl
8867      } = swiper;
8868      const {
8869        el
8870      } = scrollbar;
8871      let positionRatio;
8872      positionRatio = (getPointerPosition(e) - elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);
8873      positionRatio = Math.max(Math.min(positionRatio, 1), 0);
8874      if (rtl) {
8875        positionRatio = 1 - positionRatio;
8876      }
8877      const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;
8878      swiper.updateProgress(position);
8879      swiper.setTranslate(position);
8880      swiper.updateActiveIndex();
8881      swiper.updateSlidesClasses();
8882    }
8883    function onDragStart(e) {
8884      const params = swiper.params.scrollbar;
8885      const {
8886        scrollbar,
8887        wrapperEl
8888      } = swiper;
8889      const {
8890        el,
8891        dragEl
8892      } = scrollbar;
8893      isTouched = true;
8894      dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;
8895      e.preventDefault();
8896      e.stopPropagation();
8897      wrapperEl.style.transitionDuration = '100ms';
8898      dragEl.style.transitionDuration = '100ms';
8899      setDragPosition(e);
8900      clearTimeout(dragTimeout);
8901      el.style.transitionDuration = '0ms';
8902      if (params.hide) {
8903        el.style.opacity = 1;
8904      }
8905      if (swiper.params.cssMode) {
8906        swiper.wrapperEl.style['scroll-snap-type'] = 'none';
8907      }
8908      emit('scrollbarDragStart', e);
8909    }
8910    function onDragMove(e) {
8911      const {
8912        scrollbar,
8913        wrapperEl
8914      } = swiper;
8915      const {
8916        el,
8917        dragEl
8918      } = scrollbar;
8919      if (!isTouched) return;
8920      if (e.preventDefault) e.preventDefault();else e.returnValue = false;
8921      setDragPosition(e);
8922      wrapperEl.style.transitionDuration = '0ms';
8923      el.style.transitionDuration = '0ms';
8924      dragEl.style.transitionDuration = '0ms';
8925      emit('scrollbarDragMove', e);
8926    }
8927    function onDragEnd(e) {
8928      const params = swiper.params.scrollbar;
8929      const {
8930        scrollbar,
8931        wrapperEl
8932      } = swiper;
8933      const {
8934        el
8935      } = scrollbar;
8936      if (!isTouched) return;
8937      isTouched = false;
8938      if (swiper.params.cssMode) {
8939        swiper.wrapperEl.style['scroll-snap-type'] = '';
8940        wrapperEl.style.transitionDuration = '';
8941      }
8942      if (params.hide) {
8943        clearTimeout(dragTimeout);
8944        dragTimeout = nextTick(() => {
8945          el.style.opacity = 0;
8946          el.style.transitionDuration = '400ms';
8947        }, 1000);
8948      }
8949      emit('scrollbarDragEnd', e);
8950      if (params.snapOnRelease) {
8951        swiper.slideToClosest();
8952      }
8953    }
8954    function events(method) {
8955      const {
8956        scrollbar,
8957        params
8958      } = swiper;
8959      const el = scrollbar.el;
8960      if (!el) return;
8961      const target = el;
8962      const activeListener = params.passiveListeners ? {
8963        passive: false,
8964        capture: false
8965      } : false;
8966      const passiveListener = params.passiveListeners ? {
8967        passive: true,
8968        capture: false
8969      } : false;
8970      if (!target) return;
8971      const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';
8972      target[eventMethod]('pointerdown', onDragStart, activeListener);
8973      document[eventMethod]('pointermove', onDragMove, activeListener);
8974      document[eventMethod]('pointerup', onDragEnd, passiveListener);
8975    }
8976    function enableDraggable() {
8977      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
8978      events('on');
8979    }
8980    function disableDraggable() {
8981      if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
8982      events('off');
8983    }
8984    function init() {
8985      const {
8986        scrollbar,
8987        el: swiperEl
8988      } = swiper;
8989      swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {
8990        el: 'swiper-scrollbar'
8991      });
8992      const params = swiper.params.scrollbar;
8993      if (!params.el) return;
8994      let el;
8995      if (typeof params.el === 'string' && swiper.isElement) {
8996        el = swiper.el.querySelector(params.el);
8997      }
8998      if (!el && typeof params.el === 'string') {
8999        el = document.querySelectorAll(params.el);
9000        if (!el.length) return;
9001      } else if (!el) {
9002        el = params.el;
9003      }
9004      if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {
9005        el = swiperEl.querySelector(params.el);
9006      }
9007      if (el.length > 0) el = el[0];
9008      el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
9009      let dragEl;
9010      if (el) {
9011        dragEl = el.querySelector(classesToSelector(swiper.params.scrollbar.dragClass));
9012        if (!dragEl) {
9013          dragEl = createElement('div', swiper.params.scrollbar.dragClass);
9014          el.append(dragEl);
9015        }
9016      }
9017      Object.assign(scrollbar, {
9018        el,
9019        dragEl
9020      });
9021      if (params.draggable) {
9022        enableDraggable();
9023      }
9024      if (el) {
9025        el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass));
9026      }
9027    }
9028    function destroy() {
9029      const params = swiper.params.scrollbar;
9030      const el = swiper.scrollbar.el;
9031      if (el) {
9032        el.classList.remove(...classesToTokens(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass));
9033      }
9034      disableDraggable();
9035    }
9036    on('changeDirection', () => {
9037      if (!swiper.scrollbar || !swiper.scrollbar.el) return;
9038      const params = swiper.params.scrollbar;
9039      let {
9040        el
9041      } = swiper.scrollbar;
9042      el = makeElementsArray(el);
9043      el.forEach(subEl => {
9044        subEl.classList.remove(params.horizontalClass, params.verticalClass);
9045        subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
9046      });
9047    });
9048    on('init', () => {
9049      if (swiper.params.scrollbar.enabled === false) {
9050        // eslint-disable-next-line
9051        disable();
9052      } else {
9053        init();
9054        updateSize();
9055        setTranslate();
9056      }
9057    });
9058    on('update resize observerUpdate lock unlock changeDirection', () => {
9059      updateSize();
9060    });
9061    on('setTranslate', () => {
9062      setTranslate();
9063    });
9064    on('setTransition', (_s, duration) => {
9065      setTransition(duration);
9066    });
9067    on('enable disable', () => {
9068      const {
9069        el
9070      } = swiper.scrollbar;
9071      if (el) {
9072        el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass));
9073      }
9074    });
9075    on('destroy', () => {
9076      destroy();
9077    });
9078    const enable = () => {
9079      swiper.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));
9080      if (swiper.scrollbar.el) {
9081        swiper.scrollbar.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));
9082      }
9083      init();
9084      updateSize();
9085      setTranslate();
9086    };
9087    const disable = () => {
9088      swiper.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));
9089      if (swiper.scrollbar.el) {
9090        swiper.scrollbar.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));
9091      }
9092      destroy();
9093    };
9094    Object.assign(swiper.scrollbar, {
9095      enable,
9096      disable,
9097      updateSize,
9098      setTranslate,
9099      init,
9100      destroy
9101    });
9102  }
9103
9104  function Parallax(_ref) {
9105    let {
9106      swiper,
9107      extendParams,
9108      on
9109    } = _ref;
9110    extendParams({
9111      parallax: {
9112        enabled: false
9113      }
9114    });
9115    const elementsSelector = '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]';
9116    const setTransform = (el, progress) => {
9117      const {
9118        rtl
9119      } = swiper;
9120      const rtlFactor = rtl ? -1 : 1;
9121      const p = el.getAttribute('data-swiper-parallax') || '0';
9122      let x = el.getAttribute('data-swiper-parallax-x');
9123      let y = el.getAttribute('data-swiper-parallax-y');
9124      const scale = el.getAttribute('data-swiper-parallax-scale');
9125      const opacity = el.getAttribute('data-swiper-parallax-opacity');
9126      const rotate = el.getAttribute('data-swiper-parallax-rotate');
9127      if (x || y) {
9128        x = x || '0';
9129        y = y || '0';
9130      } else if (swiper.isHorizontal()) {
9131        x = p;
9132        y = '0';
9133      } else {
9134        y = p;
9135        x = '0';
9136      }
9137      if (x.indexOf('%') >= 0) {
9138        x = `${parseInt(x, 10) * progress * rtlFactor}%`;
9139      } else {
9140        x = `${x * progress * rtlFactor}px`;
9141      }
9142      if (y.indexOf('%') >= 0) {
9143        y = `${parseInt(y, 10) * progress}%`;
9144      } else {
9145        y = `${y * progress}px`;
9146      }
9147      if (typeof opacity !== 'undefined' && opacity !== null) {
9148        const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));
9149        el.style.opacity = currentOpacity;
9150      }
9151      let transform = `translate3d(${x}, ${y}, 0px)`;
9152      if (typeof scale !== 'undefined' && scale !== null) {
9153        const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));
9154        transform += ` scale(${currentScale})`;
9155      }
9156      if (rotate && typeof rotate !== 'undefined' && rotate !== null) {
9157        const currentRotate = rotate * progress * -1;
9158        transform += ` rotate(${currentRotate}deg)`;
9159      }
9160      el.style.transform = transform;
9161    };
9162    const setTranslate = () => {
9163      const {
9164        el,
9165        slides,
9166        progress,
9167        snapGrid,
9168        isElement
9169      } = swiper;
9170      const elements = elementChildren(el, elementsSelector);
9171      if (swiper.isElement) {
9172        elements.push(...elementChildren(swiper.hostEl, elementsSelector));
9173      }
9174      elements.forEach(subEl => {
9175        setTransform(subEl, progress);
9176      });
9177      slides.forEach((slideEl, slideIndex) => {
9178        let slideProgress = slideEl.progress;
9179        if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
9180          slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);
9181        }
9182        slideProgress = Math.min(Math.max(slideProgress, -1), 1);
9183        slideEl.querySelectorAll(`${elementsSelector}, [data-swiper-parallax-rotate]`).forEach(subEl => {
9184          setTransform(subEl, slideProgress);
9185        });
9186      });
9187    };
9188    const setTransition = function (duration) {
9189      if (duration === void 0) {
9190        duration = swiper.params.speed;
9191      }
9192      const {
9193        el,
9194        hostEl
9195      } = swiper;
9196      const elements = [...el.querySelectorAll(elementsSelector)];
9197      if (swiper.isElement) {
9198        elements.push(...hostEl.querySelectorAll(elementsSelector));
9199      }
9200      elements.forEach(parallaxEl => {
9201        let parallaxDuration = parseInt(parallaxEl.getAttribute('data-swiper-parallax-duration'), 10) || duration;
9202        if (duration === 0) parallaxDuration = 0;
9203        parallaxEl.style.transitionDuration = `${parallaxDuration}ms`;
9204      });
9205    };
9206    on('beforeInit', () => {
9207      if (!swiper.params.parallax.enabled) return;
9208      swiper.params.watchSlidesProgress = true;
9209      swiper.originalParams.watchSlidesProgress = true;
9210    });
9211    on('init', () => {
9212      if (!swiper.params.parallax.enabled) return;
9213      setTranslate();
9214    });
9215    on('setTranslate', () => {
9216      if (!swiper.params.parallax.enabled) return;
9217      setTranslate();
9218    });
9219    on('setTransition', (_swiper, duration) => {
9220      if (!swiper.params.parallax.enabled) return;
9221      setTransition(duration);
9222    });
9223  }
9224
9225  function Zoom(_ref) {
9226    let {
9227      swiper,
9228      extendParams,
9229      on,
9230      emit
9231    } = _ref;
9232    const window = getWindow();
9233    extendParams({
9234      zoom: {
9235        enabled: false,
9236        limitToOriginalSize: false,
9237        maxRatio: 3,
9238        minRatio: 1,
9239        toggle: true,
9240        containerClass: 'swiper-zoom-container',
9241        zoomedSlideClass: 'swiper-slide-zoomed'
9242      }
9243    });
9244    swiper.zoom = {
9245      enabled: false
9246    };
vendor: 5,436 bytes, lines 9247-9403
9247    let currentScale = 1;
9248    let isScaling = false;
9249    let fakeGestureTouched;
9250    let fakeGestureMoved;
9251    const evCache = [];
9252    const gesture = {
9253      originX: 0,
9254      originY: 0,
9255      slideEl: undefined,
9256      slideWidth: undefined,
9257      slideHeight: undefined,
9258      imageEl: undefined,
9259      imageWrapEl: undefined,
9260      maxRatio: 3
9261    };
9262    const image = {
9263      isTouched: undefined,
9264      isMoved: undefined,
9265      currentX: undefined,
9266      currentY: undefined,
9267      minX: undefined,
9268      minY: undefined,
9269      maxX: undefined,
9270      maxY: undefined,
9271      width: undefined,
9272      height: undefined,
9273      startX: undefined,
9274      startY: undefined,
9275      touchesStart: {},
9276      touchesCurrent: {}
9277    };
9278    const velocity = {
9279      x: undefined,
9280      y: undefined,
9281      prevPositionX: undefined,
9282      prevPositionY: undefined,
9283      prevTime: undefined
9284    };
9285    let scale = 1;
9286    Object.defineProperty(swiper.zoom, 'scale', {
9287      get() {
9288        return scale;
9289      },
9290      set(value) {
9291        if (scale !== value) {
9292          const imageEl = gesture.imageEl;
9293          const slideEl = gesture.slideEl;
9294          emit('zoomChange', value, imageEl, slideEl);
9295        }
9296        scale = value;
9297      }
9298    });
9299    function getDistanceBetweenTouches() {
9300      if (evCache.length < 2) return 1;
9301      const x1 = evCache[0].pageX;
9302      const y1 = evCache[0].pageY;
9303      const x2 = evCache[1].pageX;
9304      const y2 = evCache[1].pageY;
9305      const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
9306      return distance;
9307    }
9308    function getMaxRatio() {
9309      const params = swiper.params.zoom;
9310      const maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;
9311      if (params.limitToOriginalSize && gesture.imageEl && gesture.imageEl.naturalWidth) {
9312        const imageMaxRatio = gesture.imageEl.naturalWidth / gesture.imageEl.offsetWidth;
9313        return Math.min(imageMaxRatio, maxRatio);
9314      }
9315      return maxRatio;
9316    }
9317    function getScaleOrigin() {
9318      if (evCache.length < 2) return {
9319        x: null,
9320        y: null
9321      };
9322      const box = gesture.imageEl.getBoundingClientRect();
9323      return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x - window.scrollX) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y - window.scrollY) / currentScale];
9324    }
9325    function getSlideSelector() {
9326      return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;
9327    }
9328    function eventWithinSlide(e) {
9329      const slideSelector = getSlideSelector();
9330      if (e.target.matches(slideSelector)) return true;
9331      if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;
9332      return false;
9333    }
9334    function eventWithinZoomContainer(e) {
9335      const selector = `.${swiper.params.zoom.containerClass}`;
9336      if (e.target.matches(selector)) return true;
9337      if ([...swiper.hostEl.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;
9338      return false;
9339    }
9340
9341    // Events
9342    function onGestureStart(e) {
9343      if (e.pointerType === 'mouse') {
9344        evCache.splice(0, evCache.length);
9345      }
9346      if (!eventWithinSlide(e)) return;
9347      const params = swiper.params.zoom;
9348      fakeGestureTouched = false;
9349      fakeGestureMoved = false;
9350      evCache.push(e);
9351      if (evCache.length < 2) {
9352        return;
9353      }
9354      fakeGestureTouched = true;
9355      gesture.scaleStart = getDistanceBetweenTouches();
9356      if (!gesture.slideEl) {
9357        gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);
9358        if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];
9359        let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
9360        if (imageEl) {
9361          imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];
9362        }
9363        gesture.imageEl = imageEl;
9364        if (imageEl) {
9365          gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];
9366        } else {
9367          gesture.imageWrapEl = undefined;
9368        }
9369        if (!gesture.imageWrapEl) {
9370          gesture.imageEl = undefined;
9371          return;
9372        }
9373        gesture.maxRatio = getMaxRatio();
9374      }
9375      if (gesture.imageEl) {
9376        const [originX, originY] = getScaleOrigin();
9377        gesture.originX = originX;
9378        gesture.originY = originY;
9379        gesture.imageEl.style.transitionDuration = '0ms';
9380      }
9381      isScaling = true;
9382    }
9383    function onGestureChange(e) {
9384      if (!eventWithinSlide(e)) return;
9385      const params = swiper.params.zoom;
9386      const zoom = swiper.zoom;
9387      const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);
9388      if (pointerIndex >= 0) evCache[pointerIndex] = e;
9389      if (evCache.length < 2) {
9390        return;
9391      }
9392      fakeGestureMoved = true;
9393      gesture.scaleMove = getDistanceBetweenTouches();
9394      if (!gesture.imageEl) {
9395        return;
9396      }
9397      zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;
9398      if (zoom.scale > gesture.maxRatio) {
9399        zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;
9400      }
9401      if (zoom.scale < params.minRatio) {
9402        zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;
9403      }
9404      gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
9405    }
9406    function onGestureEnd(e) {
9407      if (!eventWithinSlide(e)) return;
9408      if (e.pointerType === 'mouse' && e.type === 'pointerout') return;
9409      const params = swiper.params.zoom;
9410      const zoom = swiper.zoom;
9411      const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);
9412      if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);
9413      if (!fakeGestureTouched || !fakeGestureMoved) {
9414        return;
9415      }
9416      fakeGestureTouched = false;
9417      fakeGestureMoved = false;
9418      if (!gesture.imageEl) return;
9419      zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
9420      gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;
9421      gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
9422      currentScale = zoom.scale;
9423      isScaling = false;
9424      if (zoom.scale > 1 && gesture.slideEl) {
9425        gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);
9426      } else if (zoom.scale <= 1 && gesture.slideEl) {
9427        gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);
9428      }
9429      if (zoom.scale === 1) {
9430        gesture.originX = 0;
9431        gesture.originY = 0;
9432        gesture.slideEl = undefined;
9433      }
9434    }
9435    function onTouchStart(e) {
9436      const device = swiper.device;
9437      if (!gesture.imageEl) return;
9438      if (image.isTouched) return;
9439      if (device.android && e.cancelable) e.preventDefault();
9440      image.isTouched = true;
9441      const event = evCache.length > 0 ? evCache[0] : e;
9442      image.touchesStart.x = event.pageX;
9443      image.touchesStart.y = event.pageY;
9444    }
9445    function onTouchMove(e) {
9446      if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;
9447      const zoom = swiper.zoom;
9448      if (!gesture.imageEl) return;
9449      if (!image.isTouched || !gesture.slideEl) return;
9450      if (!image.isMoved) {
9451        image.width = gesture.imageEl.offsetWidth;
9452        image.height = gesture.imageEl.offsetHeight;
9453        image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;
9454        image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;
9455        gesture.slideWidth = gesture.slideEl.offsetWidth;
9456        gesture.slideHeight = gesture.slideEl.offsetHeight;
9457        gesture.imageWrapEl.style.transitionDuration = '0ms';
9458      }
9459      // Define if we need image drag
9460      const scaledWidth = image.width * zoom.scale;
9461      const scaledHeight = image.height * zoom.scale;
9462      if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;
9463      image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
9464      image.maxX = -image.minX;
9465      image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
9466      image.maxY = -image.minY;
9467      image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;
9468      image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;
9469      const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y));
9470      if (touchesDiff > 5) {
9471        swiper.allowClick = false;
9472      }
9473      if (!image.isMoved && !isScaling) {
9474        if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {
9475          image.isTouched = false;
9476          return;
9477        }
9478        if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {
9479          image.isTouched = false;
9480          return;
9481        }
9482      }
9483      if (e.cancelable) {
9484        e.preventDefault();
9485      }
9486      e.stopPropagation();
9487      image.isMoved = true;
9488      const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);
9489      const {
9490        originX,
9491        originY
9492      } = gesture;
9493      image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.
vendor: 5,193 bytes, lines 9493-9602
9493width - originX * 2);
9494      image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2);
9495      if (image.currentX < image.minX) {
9496        image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;
9497      }
9498      if (image.currentX > image.maxX) {
9499        image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;
9500      }
9501      if (image.currentY < image.minY) {
9502        image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;
9503      }
9504      if (image.currentY > image.maxY) {
9505        image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;
9506      }
9507
9508      // Velocity
9509      if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;
9510      if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;
9511      if (!velocity.prevTime) velocity.prevTime = Date.now();
9512      velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
9513      velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
9514      if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;
9515      if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;
9516      velocity.prevPositionX = image.touchesCurrent.x;
9517      velocity.prevPositionY = image.touchesCurrent.y;
9518      velocity.prevTime = Date.now();
9519      gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;
9520    }
9521    function onTouchEnd() {
9522      const zoom = swiper.zoom;
9523      if (!gesture.imageEl) return;
9524      if (!image.isTouched || !image.isMoved) {
9525        image.isTouched = false;
9526        image.isMoved = false;
9527        return;
9528      }
9529      image.isTouched = false;
9530      image.isMoved = false;
9531      let momentumDurationX = 300;
9532      let momentumDurationY = 300;
9533      const momentumDistanceX = velocity.x * momentumDurationX;
9534      const newPositionX = image.currentX + momentumDistanceX;
9535      const momentumDistanceY = velocity.y * momentumDurationY;
9536      const newPositionY = image.currentY + momentumDistanceY;
9537
9538      // Fix duration
9539      if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
9540      if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
9541      const momentumDuration = Math.max(momentumDurationX, momentumDurationY);
9542      image.currentX = newPositionX;
9543      image.currentY = newPositionY;
9544      // Define if we need image drag
9545      const scaledWidth = image.width * zoom.scale;
9546      const scaledHeight = image.height * zoom.scale;
9547      image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
9548      image.maxX = -image.minX;
9549      image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
9550      image.maxY = -image.minY;
9551      image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
9552      image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
9553      gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;
9554      gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;
9555    }
9556    function onTransitionEnd() {
9557      const zoom = swiper.zoom;
9558      if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {
9559        if (gesture.imageEl) {
9560          gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';
9561        }
9562        if (gesture.imageWrapEl) {
9563          gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';
9564        }
9565        gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);
9566        zoom.scale = 1;
9567        currentScale = 1;
9568        gesture.slideEl = undefined;
9569        gesture.imageEl = undefined;
9570        gesture.imageWrapEl = undefined;
9571        gesture.originX = 0;
9572        gesture.originY = 0;
9573      }
9574    }
9575    function zoomIn(e) {
9576      const zoom = swiper.zoom;
9577      const params = swiper.params.zoom;
9578      if (!gesture.slideEl) {
9579        if (e && e.target) {
9580          gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);
9581        }
9582        if (!gesture.slideEl) {
9583          if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
9584            gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];
9585          } else {
9586            gesture.slideEl = swiper.slides[swiper.activeIndex];
9587          }
9588        }
9589        let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
9590        if (imageEl) {
9591          imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];
9592        }
9593        gesture.imageEl = imageEl;
9594        if (imageEl) {
9595          gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];
9596        } else {
9597          gesture.imageWrapEl = undefined;
9598        }
9599      }
9600      if (!gesture.imageEl || !gesture.imageWrapEl) return;
9601      if (swiper.params.cssMode) {
9602        swiper.wrapperEl.style.overflow = 'hidden';
9603        swiper.wrapperEl.style.touchAction = 'none';
9604      }
9605      gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);
9606      let touchX;
9607      let touchY;
9608      let offsetX;
9609      let offsetY;
9610      let diffX;
9611      let diffY;
9612      let translateX;
9613      let translateY;
9614      let imageWidth;
9615      let imageHeight;
9616      let scaledWidth;
9617      let scaledHeight;
9618      let translateMinX;
9619      let translateMinY;
9620      let translateMaxX;
9621      let translateMaxY;
9622      let slideWidth;
9623      let slideHeight;
9624      if (typeof image.touchesStart.x === 'undefined' && e) {
9625        touchX = e.pageX;
9626        touchY = e.pageY;
9627      } else {
9628        touchX = image.touchesStart.x;
9629        touchY = image.touchesStart.y;
9630      }
9631      const forceZoomRatio = typeof e === 'number' ? e : null;
9632      if (currentScale === 1 && forceZoomRatio) {
9633        touchX = undefined;
9634        touchY = undefined;
9635      }
9636      const maxRatio = getMaxRatio();
9637      zoom.scale = forceZoomRatio || maxRatio;
9638      currentScale = forceZoomRatio || maxRatio;
9639      if (e && !(currentScale === 1 && forceZoomRatio)) {
9640        slideWidth = gesture.slideEl.offsetWidth;
9641        slideHeight = gesture.slideEl.offsetHeight;
9642        offsetX = elementOffset(gesture.slideEl).left + window.scrollX;
9643        offsetY = elementOffset(gesture.slideEl).top + window.scrollY;
9644        diffX = offsetX + slideWidth / 2 - touchX;
9645        diffY = offsetY + slideHeight / 2 - touchY;
9646        imageWidth = gesture.imageEl.offsetWidth;
9647        imageHeight = gesture.imageEl.offsetHeight;
9648        scaledWidth = imageWidth * zoom.scale;
9649        scaledHeight = imageHeight * zoom.scale;
9650        translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);
9651        translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);
9652        translateMaxX = -translateMinX;
9653        translateMaxY = -translateMinY;
9654        translateX = diffX * zoom.scale;
9655        translateY = diffY * zoom.scale;
9656        if (translateX < translateMinX) {
9657          translateX = translateMinX;
9658        }
9659        if (translateX > translateMaxX) {
9660          translateX = translateMaxX;
9661        }
9662        if (translateY < translateMinY) {
9663          translateY = translateMinY;
9664        }
9665        if (translateY > translateMaxY) {
9666          translateY = translateMaxY;
9667        }
9668      } else {
9669        translateX = 0;
9670        translateY = 0;
9671      }
9672      if (forceZoomRatio && zoom.scale === 1) {
9673        gesture.originX = 0;
9674        gesture.originY = 0;
9675      }
9676      gesture.imageWrapEl.style.transitionDuration = '300ms';
9677      gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;
9678      gesture.imageEl.style.transitionDuration = '300ms';
9679      gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
9680    }
9681    function zoomOut() {
9682      const zoom = swiper.zoom;
9683      const params = swiper.params.zoom;
9684      if (!gesture.slideEl) {
9685        if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
9686          gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];
9687        } else {
9688          gesture.slideEl = swiper.slides[swiper.activeIndex];
9689        }
9690        let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
9691        if (imageEl) {
9692          imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];
9693        }
9694        gesture.imageEl = imageEl;
9695        if (imageEl) {
9696          gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];
9697        } else {
9698          gesture.imageWrapEl = undefined;
9699        }
9700      }
9701      if (!gesture.imageEl || !gesture.imageWrapEl) return;
9702      if (swiper.params.cssMode) {
9703        swiper.wrapperEl.style.overflow = '';
9704        swiper.wrapperEl.style.touchAction = '';
9705      }
9706      zoom.scale = 1;
9707      currentScale = 1;
9708      gesture.imageWrapEl.style.transitionDuration = '300ms';
9709      gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';
9710      gesture.imageEl.style.transitionDuration = '300ms';
vendor: 4,140 bytes, lines 9711-9856
9711      gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';
9712      gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);
9713      gesture.slideEl = undefined;
9714      gesture.originX = 0;
9715      gesture.originY = 0;
9716    }
9717
9718    // Toggle Zoom
9719    function zoomToggle(e) {
9720      const zoom = swiper.zoom;
9721      if (zoom.scale && zoom.scale !== 1) {
9722        // Zoom Out
9723        zoomOut();
9724      } else {
9725        // Zoom In
9726        zoomIn(e);
9727      }
9728    }
9729    function getListeners() {
9730      const passiveListener = swiper.params.passiveListeners ? {
9731        passive: true,
9732        capture: false
9733      } : false;
9734      const activeListenerWithCapture = swiper.params.passiveListeners ? {
9735        passive: false,
9736        capture: true
9737      } : true;
9738      return {
9739        passiveListener,
9740        activeListenerWithCapture
9741      };
9742    }
9743
9744    // Attach/Detach Events
9745    function enable() {
9746      const zoom = swiper.zoom;
9747      if (zoom.enabled) return;
9748      zoom.enabled = true;
9749      const {
9750        passiveListener,
9751        activeListenerWithCapture
9752      } = getListeners();
9753
9754      // Scale image
9755      swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);
9756      swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);
9757      ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {
9758        swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);
9759      });
9760
9761      // Move image
9762      swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);
9763    }
9764    function disable() {
9765      const zoom = swiper.zoom;
9766      if (!zoom.enabled) return;
9767      zoom.enabled = false;
9768      const {
9769        passiveListener,
9770        activeListenerWithCapture
9771      } = getListeners();
9772
9773      // Scale image
9774      swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);
9775      swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);
9776      ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {
9777        swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);
9778      });
9779
9780      // Move image
9781      swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);
9782    }
9783    on('init', () => {
9784      if (swiper.params.zoom.enabled) {
9785        enable();
9786      }
9787    });
9788    on('destroy', () => {
9789      disable();
9790    });
9791    on('touchStart', (_s, e) => {
9792      if (!swiper.zoom.enabled) return;
9793      onTouchStart(e);
9794    });
9795    on('touchEnd', (_s, e) => {
9796      if (!swiper.zoom.enabled) return;
9797      onTouchEnd();
9798    });
9799    on('doubleTap', (_s, e) => {
9800      if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
9801        zoomToggle(e);
9802      }
9803    });
9804    on('transitionEnd', () => {
9805      if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
9806        onTransitionEnd();
9807      }
9808    });
9809    on('slideChange', () => {
9810      if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {
9811        onTransitionEnd();
9812      }
9813    });
9814    Object.assign(swiper.zoom, {
9815      enable,
9816      disable,
9817      in: zoomIn,
9818      out: zoomOut,
9819      toggle: zoomToggle
9820    });
9821  }
9822
9823  /* eslint no-bitwise: ["error", { "allow": [">>"] }] */
9824  function Controller(_ref) {
9825    let {
9826      swiper,
9827      extendParams,
9828      on
9829    } = _ref;
9830    extendParams({
9831      controller: {
9832        control: undefined,
9833        inverse: false,
9834        by: 'slide' // or 'container'
9835      }
9836    });
9837
9838    swiper.controller = {
9839      control: undefined
9840    };
9841    function LinearSpline(x, y) {
9842      const binarySearch = function search() {
9843        let maxIndex;
9844        let minIndex;
9845        let guess;
9846        return (array, val) => {
9847          minIndex = -1;
9848          maxIndex = array.length;
9849          while (maxIndex - minIndex > 1) {
9850            guess = maxIndex + minIndex >> 1;
9851            if (array[guess] <= val) {
9852              minIndex = guess;
9853            } else {
9854              maxIndex = guess;
9855            }
9856          }
vendor: 4,919 bytes, lines 9857-9974
9857          return maxIndex;
9858        };
9859      }();
9860      this.x = x;
9861      this.y = y;
9862      this.lastIndex = x.length - 1;
9863      // Given an x value (x2), return the expected y2 value:
9864      // (x1,y1) is the known point before given value,
9865      // (x3,y3) is the known point after given value.
9866      let i1;
9867      let i3;
9868      this.interpolate = function interpolate(x2) {
9869        if (!x2) return 0;
9870
9871        // Get the indexes of x1 and x3 (the array indexes before and after given x2):
9872        i3 = binarySearch(this.x, x2);
9873        i1 = i3 - 1;
9874
9875        // We have our indexes i1 & i3, so we can calculate already:
9876        // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
9877        return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];
9878      };
9879      return this;
9880    }
9881    function getInterpolateFunction(c) {
9882      swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);
9883    }
9884    function setTranslate(_t, byController) {
9885      const controlled = swiper.controller.control;
9886      let multiplier;
9887      let controlledTranslate;
9888      const Swiper = swiper.constructor;
9889      function setControlledTranslate(c) {
9890        if (c.destroyed) return;
9891
9892        // this will create an Interpolate function based on the snapGrids
9893        // x is the Grid of the scrolled scroller and y will be the controlled scroller
9894        // it makes sense to create this only once and recall it for the interpolation
9895        // the function does a lot of value caching for performance
9896        const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
9897        if (swiper.params.controller.by === 'slide') {
9898          getInterpolateFunction(c);
9899          // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
9900          // but it did not work out
9901          controlledTranslate = -swiper.controller.spline.interpolate(-translate);
9902        }
9903        if (!controlledTranslate || swiper.params.controller.by === 'container') {
9904          multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
9905          if (Number.isNaN(multiplier) || !Number.isFinite(multiplier)) {
9906            multiplier = 1;
9907          }
9908          controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();
9909        }
9910        if (swiper.params.controller.inverse) {
9911          controlledTranslate = c.maxTranslate() - controlledTranslate;
9912        }
9913        c.updateProgress(controlledTranslate);
9914        c.setTranslate(controlledTranslate, swiper);
9915        c.updateActiveIndex();
9916        c.updateSlidesClasses();
9917      }
9918      if (Array.isArray(controlled)) {
9919        for (let i = 0; i < controlled.length; i += 1) {
9920          if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
9921            setControlledTranslate(controlled[i]);
9922          }
9923        }
9924      } else if (controlled instanceof Swiper && byController !== controlled) {
9925        setControlledTranslate(controlled);
9926      }
9927    }
9928    function setTransition(duration, byController) {
9929      const Swiper = swiper.constructor;
9930      const controlled = swiper.controller.control;
9931      let i;
9932      function setControlledTransition(c) {
9933        if (c.destroyed) return;
9934        c.setTransition(duration, swiper);
9935        if (duration !== 0) {
9936          c.transitionStart();
9937          if (c.params.autoHeight) {
9938            nextTick(() => {
9939              c.updateAutoHeight();
9940            });
9941          }
9942          elementTransitionEnd(c.wrapperEl, () => {
9943            if (!controlled) return;
9944            c.transitionEnd();
9945          });
9946        }
9947      }
9948      if (Array.isArray(controlled)) {
9949        for (i = 0; i < controlled.length; i += 1) {
9950          if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
9951            setControlledTransition(controlled[i]);
9952          }
9953        }
9954      } else if (controlled instanceof Swiper && byController !== controlled) {
9955        setControlledTransition(controlled);
9956      }
9957    }
9958    function removeSpline() {
9959      if (!swiper.controller.control) return;
9960      if (swiper.controller.spline) {
9961        swiper.controller.spline = undefined;
9962        delete swiper.controller.spline;
9963      }
9964    }
9965    on('beforeInit', () => {
9966      if (typeof window !== 'undefined' && (
9967      // eslint-disable-line
9968      typeof swiper.params.controller.control === 'string' || swiper.params.controller.control instanceof HTMLElement)) {
9969        const controlElement = document.querySelector(swiper.params.controller.control);
9970        if (controlElement && controlElement.swiper) {
9971          swiper.controller.control = controlElement.swiper;
9972        } else if (controlElement) {
9973          const onControllerSwiper = e => {
9974            swiper.controller.control = e.detail[0];
9975            swiper.update();
9976            controlElement.removeEventListener('init', onControllerSwiper);
9977          };
9978          controlElement.addEventListener('init', onControllerSwiper);
9979        }
9980        return;
9981      }
9982      swiper.controller.control = swiper.params.controller.control;
9983    });
9984    on('update', () => {
9985      removeSpline();
9986    });
9987    on('resize', () => {
9988      removeSpline();
9989    });
9990    on('observerUpdate', () => {
9991      removeSpline();
9992    });
9993    on('setTranslate', (_s, translate, byController) => {
9994      if (!swiper.controller.control || swiper.controller.control.destroyed) return;
9995      swiper.controller.setTranslate(translate, byController);
9996    });
9997    on('setTransition', (_s, duration, byController) => {
9998      if (!swiper.controller.control || swiper.controller.control.destroyed) return;
9999      swiper.controller.setTransition(duration, byController);
10000    });
10001    Object.assign(swiper.controller, {
10002      setTranslate,
10003      setTransition
10004    });
10005  }
10006
10007  function A11y(_ref) {
10008    let {
10009      swiper,
10010      extendParams,
10011      on
10012    } = _ref;
10013    extendParams({
10014      a11y: {
10015        enabled: true,
10016        notificationClass: 'swiper-notification',
10017        prevSlideMessage: 'Previous slide',
10018        nextSlideMessage: 'Next slide',
10019        firstSlideMessage: 'This is the first slide',
10020        lastSlideMessage: 'This is the last slide',
10021        paginationBulletMessage: 'Go to slide {{index}}',
10022        slideLabelMessage: '{{index}} / {{slidesLength}}',
10023        containerMessage: null,
10024        containerRoleDescriptionMessage: null,
10025        itemRoleDescriptionMessage: null,
10026        slideRole: 'group',
10027        id: null
10028      }
10029    });
10030    swiper.a11y = {
10031      clicked: false
10032    };
10033    let liveRegion = null;
10034    function notify(message) {
10035      const notification = liveRegion;
10036      if (notification.length === 0) return;
10037      notification.innerHTML = '';
10038      notification.innerHTML = message;
10039    }
10040    function getRandomNumber(size) {
10041      if (size === void 0) {
10042        size = 16;
10043      }
10044      const randomChar = () => Math.round(16 * Math.random()).toString(16);
10045      return 'x'.repeat(size).replace(/x/g, randomChar);
10046    }
10047    function makeElFocusable(el) {
10048      el = makeElementsArray(el);
10049      el.forEach(subEl => {
10050        subEl.setAttribute('tabIndex', '0');
10051      });
10052    }
10053    function makeElNotFocusable(el) {
10054      el = makeElementsArray(el);
10055      el.forEach(subEl => {
10056        subEl.setAttribute('tabIndex', '-1');
10057      });
10058    }
10059    function addElRole(el, role) {
10060      el = makeElementsArray(el);
10061      el.forEach(subEl => {
10062        subEl.setAttribute('role', role);
10063      });
10064    }
10065    function addElRoleDescription(el, description) {
10066      el = makeElementsArray(el);
10067      el.forEach(subEl => {
10068        subEl.setAttribute('aria-roledescription', description);
10069      });
10070    }
10071    function addElControls(el, controls) {
10072      el = makeElementsArray(el);
10073      el.forEach(subEl => {
10074        subEl.setAttribute('aria-controls', controls);
10075      });
10076    }
10077    function addElLabel(el, label) {
10078      el = makeElementsArray(el);
10079      el.forEach(subEl => {
10080        subEl.setAttribute('aria-label', label);
10081      });
10082    }
10083    function addElId(el, id) {
10084      el = makeElementsArray(el);
10085      el.forEach(subEl => {
10086        subEl.setAttribute('id', id);
10087      });
10088    }
10089    function addElLive(el, live) {
10090      el = makeElementsArray(el);
10091      el.forEach(subEl => {
10092        subEl.setAttribute('aria-live', live);
10093      });
10094    }
10095    function disableEl(el) {
10096      el = makeElementsArray(el);
10097      el.forEach(subEl => {
10098        subEl.setAttribute('aria-disabled', true);
10099      });
10100    }
10101    function enableEl(el) {
10102      el = makeElementsArray(el);
10103      el.forEach(subEl => {
10104        subEl.setAttribute('aria-disabled', false);
10105      });
10106    }
10107    function onEnterOrSpaceKey(e) {
10108      if (e.keyCode !== 13 && e.keyCode !== 32) return;
10109      const params = swiper.params.a11y;
10110      const targetEl = e.target;
10111      if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) {
10112        if (!e.target.matches(classesToSelector(swiper.params.pagination.bulletClass))) return;
10113      }
10114      if (swiper.navigation && swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) {
10115        if (!(swiper.isEnd && !swiper.params.loop)) {
10116          swiper.slideNext();
10117        }
10118        if (swiper.isEnd) {
10119          notify(params.lastSlideMessage);
10120        } else {
10121          notify(params.nextSlideMessage);
10122        }
10123      }
10124      if (swiper.navigation && swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl) {
10125        if (!(swiper.isBeginning && !swiper.params.loop)) {
10126          swiper.slidePrev();
10127        }
10128        if (swiper.isBeginning) {
10129          notify(params.firstSlideMessage);
10130        } else {
10131          notify(params.prevSlideMessage);
10132        }
10133      }
10134      if (swiper.pagination && targetEl.matches(classesToSelector(swiper.params.pagination.bulletClass))) {
10135        targetEl.click();
10136      }
10137    }
10138    function updateNavigation() {
10139      if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;
10140      const {
10141        nextEl,
10142        prevEl
10143      } = swiper.navigation;
10144      if (prevEl) {
10145        if (swiper.isBeginning) {
10146          disableEl(prevEl);
10147          makeElNotFocusable(prevEl);
10148        } else {
10149          enableEl(prevEl);
10150          makeElFocusable(prevEl);
10151        }
10152      }
10153      if (nextEl) {
10154        if (swiper.isEnd) {
10155          disableEl(nextEl);
10156          makeElNotFocusable(nextEl);
10157        } else {
10158          enableEl(nextEl);
10159          makeElFocusable(nextEl);
10160        }
10161      }
10162    }
10163    function hasPagination() {
10164      return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;
10165    }
10166    function hasClickablePagination() {
10167      return hasPagination() && swiper.params.pagination.clickable;
10168    }
10169    function updatePagination() {
10170      const params = swiper.params.a11y;
10171      if (!hasPagination()) return;
10172      swiper.pagination.bullets.forEach(bulletEl => {
10173        if (swiper.params.pagination.clickable) {
10174          makeElFocusable(bulletEl);
10175          if (!swiper.params.pagination.renderBullet) {
10176            addElRole(bulletEl, 'button');
10177            addElLabel(bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, elementIndex(bulletEl) + 1));
10178          }
10179        }
10180        if (bulletEl.matches(classesToSelector(swiper.params.pagination.bulletActiveClass))) {
10181          bulletEl.setAttribute('aria-current', 'true');
10182        } else {
10183          bulletEl.removeAttribute('aria-current');
10184        }
10185      });
10186    }
10187    const initNavEl = (el, wrapperId, message) => {
10188      makeElFocusable(el);
10189      if (el.tagName !== 'BUTTON') {
10190        addElRole(el, 'button');
10191        el.addEventListener('keydown', onEnterOrSpaceKey);
10192      }
10193      addElLabel(el, message);
10194      addElControls(el, wrapperId);
10195    };
10196    const handlePointerDown = () => {
10197      swiper.a11y.clicked = true;
10198    };
10199    const handlePointerUp = () => {
10200      requestAnimationFrame(() => {
10201        requestAnimationFrame(() => {
10202          if (!swiper.destroyed) {
10203            swiper.a11y.clicked = false;
10204          }
10205        });
10206      });
10207    };
10208    const handleFocus = e => {
10209      if (swiper.a11y.clicked) return;
10210      const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);
10211      if (!slideEl || !swiper.slides.includes(slideEl)) return;
10212      const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;
10213      const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);
10214      if (isActive || isVisible) return;
10215      if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;
10216      if (swiper.isHorizontal()) {
10217        swiper.el.scrollLeft = 0;
10218      } else {
10219        swiper.el.scrollTop = 0;
10220      }
10221      swiper.slideTo(swiper.slides.indexOf(slideEl), 0);
10222    };
10223    const initSlides = () => {
10224      const params = swiper.params.a11y;
10225      if (params.itemRoleDescriptionMessage) {
10226        addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);
10227      }
10228      if (params.slideRole) {
10229        addElRole(swiper.slides, params.slideRole);
10230      }
10231      const slidesLength = swiper.slides.length;
10232      if (params.slideLabelMessage) {
10233        swiper.slides.forEach((slideEl, index) => {
10234          const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10) : index;
10235          const ariaLabelMessage = params.slideLabelMessage.replace(/\{\{index\}\}/, slideIndex + 1).replace(/\{\{slidesLength\}\}/, slidesLength);
10236          addElLabel(slideEl, ariaLabelMessage);
10237        });
10238      }
10239    };
10240    const init = () => {
10241      const params = swiper.params.a11y;
10242      swiper.el.append(liveRegion);
10243
10244      // Container
10245      const containerEl = swiper.el;
10246      if (params.containerRoleDescriptionMessage) {
10247        addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);
10248      }
10249      if (params.containerMessage) {
10250        addElLabel(containerEl, params.containerMessage);
10251      }
10252
10253      // Wrapper
10254      const wrapperEl = swiper.wrapperEl;
10255      const wrapperId = params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`;
10256      const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';
10257      addElId(wrapperEl, wrapperId);
10258      addElLive(wrapperEl, live);
10259
10260      // Slide
10261      initSlides();
10262
10263      // Navigation
10264      let {
10265        nextEl,
10266        prevEl
10267      } = swiper.navigation ? swiper.navigation : {};
10268      nextEl = makeElementsArray(nextEl);
10269      prevEl = makeElementsArray(prevEl);
10270      if (nextEl) {
10271        nextEl.forEach(el => initNavEl(el, wrapperId, params.nextSlideMessage));
10272      }
10273      if (prevEl) {
10274        prevEl.forEach(el => initNavEl(el, wrapperId, params.prevSlideMessage));
10275      }
10276
10277      // Pagination
10278      if (hasClickablePagination()) {
10279        const paginationEl = makeElementsArray(swiper.pagination.el);
10280        paginationEl.forEach(el => {
10281          el.addEventListener('keydown', onEnterOrSpaceKey);
10282        });
10283      }
10284
10285      // Tab focus
10286      swiper.el.addEventListener('focus', handleFocus, true);
10287      swiper.el.addEventListener('pointerdown', handlePointerDown, true);
10288      swiper.el.addEventListener('pointerup', handlePointerUp, true);
10289    };
10290    function destroy() {
10291      if (liveRegion) liveRegion.remove();
10292      let {
10293        nextEl,
10294        prevEl
10295      } = swiper.navigation ? swiper.navigation : {};
10296      nextEl = makeElementsArray(nextEl);
10297      prevEl = makeElementsArray(prevEl);
10298      if (nextEl) {
10299        nextEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));
10300      }
10301      if (prevEl) {
10302        prevEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));
10303      }
10304
10305      // Pagination
10306      if (hasClickablePagination()) {
10307        const paginationEl = makeElementsArray(swiper.pagination.el);
10308        paginationEl.forEach(el => {
10309          el.removeEventListener('keydown', onEnterOrSpaceKey);
10310        });
10311      }
10312
10313      // Tab focus
10314      swiper.el.removeEventListener('focus', handleFocus, true);
10315      swiper.el.removeEventListener('pointerdown', handlePointerDown, true);
10316      swiper.el.removeEventListener('pointerup', handlePointerUp, true);
10317    }
10318    on('beforeInit', () => {
10319      liveRegion = createElement('span', swiper.params.a11y.notificationClass);
10320      liveRegion.setAttribute('aria-live', 'assertive');
10321      liveRegion.setAttribute('aria-atomic', 'true');
10322    });
10323    on('afterInit', () => {
10324      if (!swiper.params.a11y.enabled) return;
10325      init();
10326    });
10327    on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {
10328      if (!swiper.params.a11y.enabled) return;
10329      initSlides();
10330    });
10331    on('fromEdge toEdge afterInit lock unlock', () => {
10332      if (!swiper.params.a11y.enabled) return;
10333      updateNavigation();
10334    });
10335    on('paginationUpdate', () => {
10336      if (!swiper.params.a11y.enabled) return;
10337      updatePagination();
10338    });
10339    on('destroy', () => {
10340      if (!swiper.params.a11y.enabled) return;
10341      destroy();
10342    });
10343  }
10344
10345  function History(_ref) {
10346    let {
10347      swiper,
10348      extendParams,
10349      on
10350    } = _ref;
10351    extendParams({
10352      history: {
10353        enabled: false,
10354        root: '',
10355        replaceState: false,
10356        key: 'slides',
10357        keepQuery: false
10358      }
10359    });
10360    let initialized = false;
vendor: 9,277 bytes, lines 10361-10627
10361    let paths = {};
10362    const slugify = text => {
10363      return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');
10364    };
10365    const getPathValues = urlOverride => {
10366      const window = getWindow();
10367      let location;
10368      if (urlOverride) {
10369        location = new URL(urlOverride);
10370      } else {
10371        location = window.location;
10372      }
10373      const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');
10374      const total = pathArray.length;
10375      const key = pathArray[total - 2];
10376      const value = pathArray[total - 1];
10377      return {
10378        key,
10379        value
10380      };
10381    };
10382    const setHistory = (key, index) => {
10383      const window = getWindow();
10384      if (!initialized || !swiper.params.history.enabled) return;
10385      let location;
10386      if (swiper.params.url) {
10387        location = new URL(swiper.params.url);
10388      } else {
10389        location = window.location;
10390      }
10391      const slide = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index="${index}"]`) : swiper.slides[index];
10392      let value = slugify(slide.getAttribute('data-history'));
10393      if (swiper.params.history.root.length > 0) {
10394        let root = swiper.params.history.root;
10395        if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);
10396        value = `${root}/${key ? `${key}/` : ''}${value}`;
10397      } else if (!location.pathname.includes(key)) {
10398        value = `${key ? `${key}/` : ''}${value}`;
10399      }
10400      if (swiper.params.history.keepQuery) {
10401        value += location.search;
10402      }
10403      const currentState = window.history.state;
10404      if (currentState && currentState.value === value) {
10405        return;
10406      }
10407      if (swiper.params.history.replaceState) {
10408        window.history.replaceState({
10409          value
10410        }, null, value);
10411      } else {
10412        window.history.pushState({
10413          value
10414        }, null, value);
10415      }
10416    };
10417    const scrollToSlide = (speed, value, runCallbacks) => {
10418      if (value) {
10419        for (let i = 0, length = swiper.slides.length; i < length; i += 1) {
10420          const slide = swiper.slides[i];
10421          const slideHistory = slugify(slide.getAttribute('data-history'));
10422          if (slideHistory === value) {
10423            const index = swiper.getSlideIndex(slide);
10424            swiper.slideTo(index, speed, runCallbacks);
10425          }
10426        }
10427      } else {
10428        swiper.slideTo(0, speed, runCallbacks);
10429      }
10430    };
10431    const setHistoryPopState = () => {
10432      paths = getPathValues(swiper.params.url);
10433      scrollToSlide(swiper.params.speed, paths.value, false);
10434    };
10435    const init = () => {
10436      const window = getWindow();
10437      if (!swiper.params.history) return;
10438      if (!window.history || !window.history.pushState) {
10439        swiper.params.history.enabled = false;
10440        swiper.params.hashNavigation.enabled = true;
10441        return;
10442      }
10443      initialized = true;
10444      paths = getPathValues(swiper.params.url);
10445      if (!paths.key && !paths.value) {
10446        if (!swiper.params.history.replaceState) {
10447          window.addEventListener('popstate', setHistoryPopState);
10448        }
10449        return;
10450      }
10451      scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);
10452      if (!swiper.params.history.replaceState) {
10453        window.addEventListener('popstate', setHistoryPopState);
10454      }
10455    };
10456    const destroy = () => {
10457      const window = getWindow();
10458      if (!swiper.params.history.replaceState) {
10459        window.removeEventListener('popstate', setHistoryPopState);
10460      }
10461    };
10462    on('init', () => {
10463      if (swiper.params.history.enabled) {
10464        init();
10465      }
10466    });
10467    on('destroy', () => {
10468      if (swiper.params.history.enabled) {
10469        destroy();
10470      }
10471    });
10472    on('transitionEnd _freeModeNoMomentumRelease', () => {
10473      if (initialized) {
10474        setHistory(swiper.params.history.key, swiper.activeIndex);
10475      }
10476    });
10477    on('slideChange', () => {
10478      if (initialized && swiper.params.cssMode) {
10479        setHistory(swiper.params.history.key, swiper.activeIndex);
10480      }
10481    });
10482  }
10483
10484  function HashNavigation(_ref) {
10485    let {
10486      swiper,
10487      extendParams,
10488      emit,
10489      on
10490    } = _ref;
10491    let initialized = false;
10492    const document = getDocument();
10493    const window = getWindow();
10494    extendParams({
10495      hashNavigation: {
10496        enabled: false,
10497        replaceState: false,
10498        watchState: false,
10499        getSlideIndex(_s, hash) {
10500          if (swiper.virtual && swiper.params.virtual.enabled) {
10501            const slideWithHash = swiper.slides.filter(slideEl => slideEl.getAttribute('data-hash') === hash)[0];
10502            if (!slideWithHash) return 0;
10503            const index = parseInt(slideWithHash.getAttribute('data-swiper-slide-index'), 10);
10504            return index;
10505          }
10506          return swiper.getSlideIndex(elementChildren(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash="${hash}"], swiper-slide[data-hash="${hash}"]`)[0]);
10507        }
10508      }
10509    });
10510    const onHashChange = () => {
10511      emit('hashChange');
10512      const newHash = document.location.hash.replace('#', '');
10513      const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index="${swiper.activeIndex}"]`) : swiper.slides[swiper.activeIndex];
10514      const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') : '';
10515      if (newHash !== activeSlideHash) {
10516        const newIndex = swiper.params.hashNavigation.getSlideIndex(swiper, newHash);
10517        if (typeof newIndex === 'undefined' || Number.isNaN(newIndex)) return;
10518        swiper.slideTo(newIndex);
10519      }
10520    };
10521    const setHash = () => {
10522      if (!initialized || !swiper.params.hashNavigation.enabled) return;
10523      const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index="${swiper.activeIndex}"]`) : swiper.slides[swiper.activeIndex];
10524      const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') || activeSlideEl.getAttribute('data-history') : '';
10525      if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {
10526        window.history.replaceState(null, null, `#${activeSlideHash}` || '');
10527        emit('hashSet');
10528      } else {
10529        document.location.hash = activeSlideHash || '';
10530        emit('hashSet');
10531      }
10532    };
10533    const init = () => {
10534      if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;
10535      initialized = true;
10536      const hash = document.location.hash.replace('#', '');
10537      if (hash) {
10538        const speed = 0;
10539        const index = swiper.params.hashNavigation.getSlideIndex(swiper, hash);
10540        swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true);
10541      }
10542      if (swiper.params.hashNavigation.watchState) {
10543        window.addEventListener('hashchange', onHashChange);
10544      }
10545    };
10546    const destroy = () => {
10547      if (swiper.params.hashNavigation.watchState) {
10548        window.removeEventListener('hashchange', onHashChange);
10549      }
10550    };
10551    on('init', () => {
10552      if (swiper.params.hashNavigation.enabled) {
10553        init();
10554      }
10555    });
10556    on('destroy', () => {
10557      if (swiper.params.hashNavigation.enabled) {
10558        destroy();
10559      }
10560    });
10561    on('transitionEnd _freeModeNoMomentumRelease', () => {
10562      if (initialized) {
10563        setHash();
10564      }
10565    });
10566    on('slideChange', () => {
10567      if (initialized && swiper.params.cssMode) {
10568        setHash();
10569      }
10570    });
10571  }
10572
10573  /* eslint no-underscore-dangle: "off" */
10574  /* eslint no-use-before-define: "off" */
10575  function Autoplay(_ref) {
10576    let {
10577      swiper,
10578      extendParams,
10579      on,
10580      emit,
10581      params
10582    } = _ref;
10583    swiper.autoplay = {
10584      running: false,
10585      paused: false,
10586      timeLeft: 0
10587    };
10588    extendParams({
10589      autoplay: {
10590        enabled: false,
10591        delay: 3000,
10592        waitForTransition: true,
10593        disableOnInteraction: false,
10594        stopOnLastSlide: false,
10595        reverseDirection: false,
10596        pauseOnMouseEnter: false
10597      }
10598    });
10599    let timeout;
10600    let raf;
10601    let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;
10602    let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;
10603    let autoplayTimeLeft;
10604    let autoplayStartTime = new Date().getTime();
10605    let wasPaused;
10606    let isTouched;
10607    let pausedByTouch;
10608    let touchStartTimeout;
10609    let slideChanged;
10610    let pausedByInteraction;
10611    let pausedByPointerEnter;
10612    function onTransitionEnd(e) {
10613      if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;
10614      if (e.target !== swiper.wrapperEl) return;
10615      swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);
10616      if (pausedByPointerEnter) {
10617        return;
10618      }
10619      resume();
10620    }
10621    const calcTimeLeft = () => {
10622      if (swiper.destroyed || !swiper.autoplay.running) return;
10623      if (swiper.autoplay.paused) {
10624        wasPaused = true;
10625      } else if (wasPaused) {
10626        autoplayDelayCurrent = autoplayTimeLeft;
10627        wasPaused = false;
10628      }
10629      const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();
10630      swiper.autoplay.timeLeft = timeLeft;
10631      emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);
10632      raf = requestAnimationFrame(() => {
10633        calcTimeLeft();
10634      });
10635    };
10636    const getSlideDelay = () => {
10637      let activeSlideEl;
10638      if (swiper.virtual && swiper.params.virtual.enabled) {
10639        activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0];
10640      } else {
10641        activeSlideEl = swiper.slides[swiper.activeIndex];
10642      }
10643      if (!activeSlideEl) return undefined;
10644      const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);
10645      return currentSlideDelay;
10646    };
10647    const run = delayForce => {
10648      if (swiper.destroyed || !swiper.autoplay.running) return;
10649      cancelAnimationFrame(raf);
10650      calcTimeLeft();
10651      let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;
10652      autoplayDelayTotal = swiper.params.autoplay.delay;
10653      autoplayDelayCurrent = swiper.params.autoplay.delay;
10654      const currentSlideDelay = getSlideDelay();
10655      if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') {
10656        delay = currentSlideDelay;
10657        autoplayDelayTotal = currentSlideDelay;
10658        autoplayDelayCurrent = currentSlideDelay;
10659      }
10660      autoplayTimeLeft = delay;
10661      const speed = swiper.params.speed;
10662      const proceed = () => {
10663        if (!swiper || swiper.destroyed) return;
10664        if (swiper.params.autoplay.reverseDirection) {
10665          if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {
10666            swiper.slidePrev(speed, true, true);
10667            emit('autoplay');
10668          } else if (!swiper.params.autoplay.stopOnLastSlide) {
10669            swiper.slideTo(swiper.slides.length - 1, speed, true, true);
10670            emit('autoplay');
10671          }
10672        } else {
10673          if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {
10674            swiper.slideNext(speed, true, true);
10675            emit('autoplay');
10676          } else if (!swiper.params.autoplay.stopOnLastSlide) {
10677            swiper.slideTo(0, speed, true, true);
10678            emit('autoplay');
10679          }
10680        }
10681        if (swiper.params.cssMode) {
10682          autoplayStartTime = new Date().getTime();
10683          requestAnimationFrame(() => {
10684            run();
10685          });
10686        }
10687      };
10688      if (delay > 0) {
10689        clearTimeout(timeout);
10690        timeout = setTimeout(() => {
10691          proceed();
10692        }, delay);
10693      } else {
10694        requestAnimationFrame(() => {
10695          proceed();
10696        });
10697      }
10698
10699      // eslint-disable-next-line
10700      return delay;
10701    };
10702    const start = () => {
10703      autoplayStartTime = new Date().getTime();
10704      swiper.autoplay.running = true;
10705      run();
10706      emit('autoplayStart');
10707    };
10708    const stop = () => {
10709      swiper.autoplay.running = false;
10710      clearTimeout(timeout);
10711      cancelAnimationFrame(raf);
10712      emit('autoplayStop');
10713    };
10714    const pause = (internal, reset) => {
10715      if (swiper.destroyed || !swiper.autoplay.running) return;
10716      clearTimeout(timeout);
10717      if (!internal) {
10718        pausedByInteraction = true;
10719      }
10720      const proceed = () => {
10721        emit('autoplayPause');
10722        if (swiper.params.autoplay.waitForTransition) {
10723          swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);
10724        } else {
10725          resume();
10726        }
10727      };
10728      swiper.autoplay.paused = true;
10729      if (reset) {
10730        if (slideChanged) {
10731          autoplayTimeLeft = swiper.params.autoplay.delay;
10732        }
10733        slideChanged = false;
10734        proceed();
10735        return;
10736      }
10737      const delay = autoplayTimeLeft || swiper.params.autoplay.delay;
10738      autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);
10739      if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;
10740      if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;
10741      proceed();
10742    };
10743    const resume = () => {
10744      if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;
10745      autoplayStartTime = new Date().getTime();
10746      if (pausedByInteraction) {
10747        pausedByInteraction = false;
vendor: 10,943 bytes, lines 10748-11053
10748        run(autoplayTimeLeft);
10749      } else {
10750        run();
10751      }
10752      swiper.autoplay.paused = false;
10753      emit('autoplayResume');
10754    };
10755    const onVisibilityChange = () => {
10756      if (swiper.destroyed || !swiper.autoplay.running) return;
10757      const document = getDocument();
10758      if (document.visibilityState === 'hidden') {
10759        pausedByInteraction = true;
10760        pause(true);
10761      }
10762      if (document.visibilityState === 'visible') {
10763        resume();
10764      }
10765    };
10766    const onPointerEnter = e => {
10767      if (e.pointerType !== 'mouse') return;
10768      pausedByInteraction = true;
10769      pausedByPointerEnter = true;
10770      if (swiper.animating || swiper.autoplay.paused) return;
10771      pause(true);
10772    };
10773    const onPointerLeave = e => {
10774      if (e.pointerType !== 'mouse') return;
10775      pausedByPointerEnter = false;
10776      if (swiper.autoplay.paused) {
10777        resume();
10778      }
10779    };
10780    const attachMouseEvents = () => {
10781      if (swiper.params.autoplay.pauseOnMouseEnter) {
10782        swiper.el.addEventListener('pointerenter', onPointerEnter);
10783        swiper.el.addEventListener('pointerleave', onPointerLeave);
10784      }
10785    };
10786    const detachMouseEvents = () => {
10787      swiper.el.removeEventListener('pointerenter', onPointerEnter);
10788      swiper.el.removeEventListener('pointerleave', onPointerLeave);
10789    };
10790    const attachDocumentEvents = () => {
10791      const document = getDocument();
10792      document.addEventListener('visibilitychange', onVisibilityChange);
10793    };
10794    const detachDocumentEvents = () => {
10795      const document = getDocument();
10796      document.removeEventListener('visibilitychange', onVisibilityChange);
10797    };
10798    on('init', () => {
10799      if (swiper.params.autoplay.enabled) {
10800        attachMouseEvents();
10801        attachDocumentEvents();
10802        start();
10803      }
10804    });
10805    on('destroy', () => {
10806      detachMouseEvents();
10807      detachDocumentEvents();
10808      if (swiper.autoplay.running) {
10809        stop();
10810      }
10811    });
10812    on('_freeModeStaticRelease', () => {
10813      if (pausedByTouch || pausedByInteraction) {
10814        resume();
10815      }
10816    });
10817    on('_freeModeNoMomentumRelease', () => {
10818      if (!swiper.params.autoplay.disableOnInteraction) {
10819        pause(true, true);
10820      } else {
10821        stop();
10822      }
10823    });
10824    on('beforeTransitionStart', (_s, speed, internal) => {
10825      if (swiper.destroyed || !swiper.autoplay.running) return;
10826      if (internal || !swiper.params.autoplay.disableOnInteraction) {
10827        pause(true, true);
10828      } else {
10829        stop();
10830      }
10831    });
10832    on('sliderFirstMove', () => {
10833      if (swiper.destroyed || !swiper.autoplay.running) return;
10834      if (swiper.params.autoplay.disableOnInteraction) {
10835        stop();
10836        return;
10837      }
10838      isTouched = true;
10839      pausedByTouch = false;
10840      pausedByInteraction = false;
10841      touchStartTimeout = setTimeout(() => {
10842        pausedByInteraction = true;
10843        pausedByTouch = true;
10844        pause(true);
10845      }, 200);
10846    });
10847    on('touchEnd', () => {
10848      if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;
10849      clearTimeout(touchStartTimeout);
10850      clearTimeout(timeout);
10851      if (swiper.params.autoplay.disableOnInteraction) {
10852        pausedByTouch = false;
10853        isTouched = false;
10854        return;
10855      }
10856      if (pausedByTouch && swiper.params.cssMode) resume();
10857      pausedByTouch = false;
10858      isTouched = false;
10859    });
10860    on('slideChange', () => {
10861      if (swiper.destroyed || !swiper.autoplay.running) return;
10862      slideChanged = true;
10863    });
10864    Object.assign(swiper.autoplay, {
10865      start,
10866      stop,
10867      pause,
10868      resume
10869    });
10870  }
10871
10872  function Thumb(_ref) {
10873    let {
10874      swiper,
10875      extendParams,
10876      on
10877    } = _ref;
10878    extendParams({
10879      thumbs: {
10880        swiper: null,
10881        multipleActiveThumbs: true,
10882        autoScrollOffset: 0,
10883        slideThumbActiveClass: 'swiper-slide-thumb-active',
10884        thumbsContainerClass: 'swiper-thumbs'
10885      }
10886    });
10887    let initialized = false;
10888    let swiperCreated = false;
10889    swiper.thumbs = {
10890      swiper: null
10891    };
10892    function onThumbClick() {
10893      const thumbsSwiper = swiper.thumbs.swiper;
10894      if (!thumbsSwiper || thumbsSwiper.destroyed) return;
10895      const clickedIndex = thumbsSwiper.clickedIndex;
10896      const clickedSlide = thumbsSwiper.clickedSlide;
10897      if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;
10898      if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;
10899      let slideToIndex;
10900      if (thumbsSwiper.params.loop) {
10901        slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);
10902      } else {
10903        slideToIndex = clickedIndex;
10904      }
10905      if (swiper.params.loop) {
10906        swiper.slideToLoop(slideToIndex);
10907      } else {
10908        swiper.slideTo(slideToIndex);
10909      }
10910    }
10911    function init() {
10912      const {
10913        thumbs: thumbsParams
10914      } = swiper.params;
10915      if (initialized) return false;
10916      initialized = true;
10917      const SwiperClass = swiper.constructor;
10918      if (thumbsParams.swiper instanceof SwiperClass) {
10919        swiper.thumbs.swiper = thumbsParams.swiper;
10920        Object.assign(swiper.thumbs.swiper.originalParams, {
10921          watchSlidesProgress: true,
10922          slideToClickedSlide: false
10923        });
10924        Object.assign(swiper.thumbs.swiper.params, {
10925          watchSlidesProgress: true,
10926          slideToClickedSlide: false
10927        });
10928        swiper.thumbs.swiper.update();
10929      } else if (isObject(thumbsParams.swiper)) {
10930        const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);
10931        Object.assign(thumbsSwiperParams, {
10932          watchSlidesProgress: true,
10933          slideToClickedSlide: false
10934        });
10935        swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);
10936        swiperCreated = true;
10937      }
10938      swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);
10939      swiper.thumbs.swiper.on('tap', onThumbClick);
10940      return true;
10941    }
10942    function update(initial) {
10943      const thumbsSwiper = swiper.thumbs.swiper;
10944      if (!thumbsSwiper || thumbsSwiper.destroyed) return;
10945      const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;
10946
10947      // Activate thumbs
10948      let thumbsToActivate = 1;
10949      const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;
10950      if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
10951        thumbsToActivate = swiper.params.slidesPerView;
10952      }
10953      if (!swiper.params.thumbs.multipleActiveThumbs) {
10954        thumbsToActivate = 1;
10955      }
10956      thumbsToActivate = Math.floor(thumbsToActivate);
10957      thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass));
10958      if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {
10959        for (let i = 0; i < thumbsToActivate; i += 1) {
10960          elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index="${swiper.realIndex + i}"]`).forEach(slideEl => {
10961            slideEl.classList.add(thumbActiveClass);
10962          });
10963        }
10964      } else {
10965        for (let i = 0; i < thumbsToActivate; i += 1) {
10966          if (thumbsSwiper.slides[swiper.realIndex + i]) {
10967            thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);
10968          }
10969        }
10970      }
10971      const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;
10972      const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;
10973      if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {
10974        const currentThumbsIndex = thumbsSwiper.activeIndex;
10975        let newThumbsIndex;
10976        let direction;
10977        if (thumbsSwiper.params.loop) {
10978          const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0];
10979          newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);
10980          direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';
10981        } else {
10982          newThumbsIndex = swiper.realIndex;
10983          direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';
10984        }
10985        if (useOffset) {
10986          newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;
10987        }
10988        if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
10989          if (thumbsSwiper.params.centeredSlides) {
10990            if (newThumbsIndex > currentThumbsIndex) {
10991              newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
10992            } else {
10993              newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
10994            }
10995          } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ;
10996          thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
10997        }
10998      }
10999    }
11000    on('beforeInit', () => {
11001      const {
11002        thumbs
11003      } = swiper.params;
11004      if (!thumbs || !thumbs.swiper) return;
11005      if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {
11006        const document = getDocument();
11007        const getThumbsElementAndInit = () => {
11008          const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;
11009          if (thumbsElement && thumbsElement.swiper) {
11010            thumbs.swiper = thumbsElement.swiper;
11011            init();
11012            update(true);
11013          } else if (thumbsElement) {
11014            const onThumbsSwiper = e => {
11015              thumbs.swiper = e.detail[0];
11016              thumbsElement.removeEventListener('init', onThumbsSwiper);
11017              init();
11018              update(true);
11019              thumbs.swiper.update();
11020              swiper.update();
11021            };
11022            thumbsElement.addEventListener('init', onThumbsSwiper);
11023          }
11024          return thumbsElement;
11025        };
11026        const watchForThumbsToAppear = () => {
11027          if (swiper.destroyed) return;
11028          const thumbsElement = getThumbsElementAndInit();
11029          if (!thumbsElement) {
11030            requestAnimationFrame(watchForThumbsToAppear);
11031          }
11032        };
11033        requestAnimationFrame(watchForThumbsToAppear);
11034      } else {
11035        init();
11036        update(true);
11037      }
11038    });
11039    on('slideChange update resize observerUpdate', () => {
11040      update();
11041    });
11042    on('setTransition', (_s, duration) => {
11043      const thumbsSwiper = swiper.thumbs.swiper;
11044      if (!thumbsSwiper || thumbsSwiper.destroyed) return;
11045      thumbsSwiper.setTransition(duration);
11046    });
11047    on('beforeDestroy', () => {
11048      const thumbsSwiper = swiper.thumbs.swiper;
11049      if (!thumbsSwiper || thumbsSwiper.destroyed) return;
11050      if (swiperCreated) {
11051        thumbsSwiper.destroy();
11052      }
11053    });
11054    Object.assign(swiper.thumbs, {
11055      init,
11056      update
11057    });
11058  }
11059
11060  function freeMode(_ref) {
11061    let {
11062      swiper,
11063      extendParams,
11064      emit,
11065      once
11066    } = _ref;
11067    extendParams({
11068      freeMode: {
11069        enabled: false,
11070        momentum: true,
11071        momentumRatio: 1,
11072        momentumBounce: true,
11073        momentumBounceRatio: 1,
11074        momentumVelocityRatio: 1,
11075        sticky: false,
11076        minimumVelocity: 0.02
11077      }
11078    });
11079    function onTouchStart() {
11080      if (swiper.params.cssMode) return;
11081      const translate = swiper.getTranslate();
11082      swiper.setTranslate(translate);
11083      swiper.setTransition(0);
11084      swiper.touchEventsData.velocities.length = 0;
11085      swiper.freeMode.onTouchEnd({
11086        currentPos: swiper.rtl ? swiper.translate : -swiper.translate
11087      });
11088    }
11089    function onTouchMove() {
11090      if (swiper.params.cssMode) return;
11091      const {
11092        touchEventsData: data,
11093        touches
11094      } = swiper;
11095      // Velocity
11096      if (data.velocities.length === 0) {
11097        data.velocities.push({
11098          position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
11099          time: data.touchStartTime
11100        });
11101      }
11102      data.velocities.push({
11103        position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
11104        time: now()
11105      });
11106    }
11107    function onTouchEnd(_ref2) {
11108      let {
11109        currentPos
11110      } = _ref2;
11111      if (swiper.params.cssMode) return;
11112      const {
11113        params,
11114        wrapperEl,
11115        rtlTranslate: rtl,
11116        snapGrid,
11117        touchEventsData: data
11118      } = swiper;
11119      // Time diff
11120      const touchEndTime = now();
11121      const timeDiff = touchEndTime - data.touchStartTime;
vendor: 7,302 bytes, lines 11122-11305
11122      if (currentPos < -swiper.minTranslate()) {
11123        swiper.slideTo(swiper.activeIndex);
11124        return;
11125      }
11126      if (currentPos > -swiper.maxTranslate()) {
11127        if (swiper.slides.length < snapGrid.length) {
11128          swiper.slideTo(snapGrid.length - 1);
11129        } else {
11130          swiper.slideTo(swiper.slides.length - 1);
11131        }
11132        return;
11133      }
11134      if (params.freeMode.momentum) {
11135        if (data.velocities.length > 1) {
11136          const lastMoveEvent = data.velocities.pop();
11137          const velocityEvent = data.velocities.pop();
11138          const distance = lastMoveEvent.position - velocityEvent.position;
11139          const time = lastMoveEvent.time - velocityEvent.time;
11140          swiper.velocity = distance / time;
11141          swiper.velocity /= 2;
11142          if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {
11143            swiper.velocity = 0;
11144          }
11145          // this implies that the user stopped moving a finger then released.
11146          // There would be no events with distance zero, so the last event is stale.
11147          if (time > 150 || now() - lastMoveEvent.time > 300) {
11148            swiper.velocity = 0;
11149          }
11150        } else {
11151          swiper.velocity = 0;
11152        }
11153        swiper.velocity *= params.freeMode.momentumVelocityRatio;
11154        data.velocities.length = 0;
11155        let momentumDuration = 1000 * params.freeMode.momentumRatio;
11156        const momentumDistance = swiper.velocity * momentumDuration;
11157        let newPosition = swiper.translate + momentumDistance;
11158        if (rtl) newPosition = -newPosition;
11159        let doBounce = false;
11160        let afterBouncePosition;
11161        const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;
11162        let needsLoopFix;
11163        if (newPosition < swiper.maxTranslate()) {
11164          if (params.freeMode.momentumBounce) {
11165            if (newPosition + swiper.maxTranslate() < -bounceAmount) {
11166              newPosition = swiper.maxTranslate() - bounceAmount;
11167            }
11168            afterBouncePosition = swiper.maxTranslate();
11169            doBounce = true;
11170            data.allowMomentumBounce = true;
11171          } else {
11172            newPosition = swiper.maxTranslate();
11173          }
11174          if (params.loop && params.centeredSlides) needsLoopFix = true;
11175        } else if (newPosition > swiper.minTranslate()) {
11176          if (params.freeMode.momentumBounce) {
11177            if (newPosition - swiper.minTranslate() > bounceAmount) {
11178              newPosition = swiper.minTranslate() + bounceAmount;
11179            }
11180            afterBouncePosition = swiper.minTranslate();
11181            doBounce = true;
11182            data.allowMomentumBounce = true;
11183          } else {
11184            newPosition = swiper.minTranslate();
11185          }
11186          if (params.loop && params.centeredSlides) needsLoopFix = true;
11187        } else if (params.freeMode.sticky) {
11188          let nextSlide;
11189          for (let j = 0; j < snapGrid.length; j += 1) {
11190            if (snapGrid[j] > -newPosition) {
11191              nextSlide = j;
11192              break;
11193            }
11194          }
11195          if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
11196            newPosition = snapGrid[nextSlide];
11197          } else {
11198            newPosition = snapGrid[nextSlide - 1];
11199          }
11200          newPosition = -newPosition;
11201        }
11202        if (needsLoopFix) {
11203          once('transitionEnd', () => {
11204            swiper.loopFix();
11205          });
11206        }
11207        // Fix duration
11208        if (swiper.velocity !== 0) {
11209          if (rtl) {
11210            momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
11211          } else {
11212            momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
11213          }
11214          if (params.freeMode.sticky) {
11215            // If freeMode.sticky is active and the user ends a swipe with a slow-velocity
11216            // event, then durations can be 20+ seconds to slide one (or zero!) slides.
11217            // It's easy to see this when simulating touch with mouse events. To fix this,
11218            // limit single-slide swipes to the default slide duration. This also has the
11219            // nice side effect of matching slide speed if the user stopped moving before
11220            // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.
11221            // For faster swipes, also apply limits (albeit higher ones).
11222            const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);
11223            const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];
11224            if (moveDistance < currentSlideSize) {
11225              momentumDuration = params.speed;
11226            } else if (moveDistance < 2 * currentSlideSize) {
11227              momentumDuration = params.speed * 1.5;
11228            } else {
11229              momentumDuration = params.speed * 2.5;
11230            }
11231          }
11232        } else if (params.freeMode.sticky) {
11233          swiper.slideToClosest();
11234          return;
11235        }
11236        if (params.freeMode.momentumBounce && doBounce) {
11237          swiper.updateProgress(afterBouncePosition);
11238          swiper.setTransition(momentumDuration);
11239          swiper.setTranslate(newPosition);
11240          swiper.transitionStart(true, swiper.swipeDirection);
11241          swiper.animating = true;
11242          elementTransitionEnd(wrapperEl, () => {
11243            if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;
11244            emit('momentumBounce');
11245            swiper.setTransition(params.speed);
11246            setTimeout(() => {
11247              swiper.setTranslate(afterBouncePosition);
11248              elementTransitionEnd(wrapperEl, () => {
11249                if (!swiper || swiper.destroyed) return;
11250                swiper.transitionEnd();
11251              });
11252            }, 0);
11253          });
11254        } else if (swiper.velocity) {
11255          emit('_freeModeNoMomentumRelease');
11256          swiper.updateProgress(newPosition);
11257          swiper.setTransition(momentumDuration);
11258          swiper.setTranslate(newPosition);
11259          swiper.transitionStart(true, swiper.swipeDirection);
11260          if (!swiper.animating) {
11261            swiper.animating = true;
11262            elementTransitionEnd(wrapperEl, () => {
11263              if (!swiper || swiper.destroyed) return;
11264              swiper.transitionEnd();
11265            });
11266          }
11267        } else {
11268          swiper.updateProgress(newPosition);
11269        }
11270        swiper.updateActiveIndex();
11271        swiper.updateSlidesClasses();
11272      } else if (params.freeMode.sticky) {
11273        swiper.slideToClosest();
11274        return;
11275      } else if (params.freeMode) {
11276        emit('_freeModeNoMomentumRelease');
11277      }
11278      if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {
11279        emit('_freeModeStaticRelease');
11280        swiper.updateProgress();
11281        swiper.updateActiveIndex();
11282        swiper.updateSlidesClasses();
11283      }
11284    }
11285    Object.assign(swiper, {
11286      freeMode: {
11287        onTouchStart,
11288        onTouchMove,
11289        onTouchEnd
11290      }
11291    });
11292  }
11293
11294  function Grid(_ref) {
11295    let {
11296      swiper,
11297      extendParams,
11298      on
11299    } = _ref;
11300    extendParams({
11301      grid: {
11302        rows: 1,
11303        fill: 'column'
11304      }
11305    });
vendor: 1,326 bytes, lines 11306-11340
11306    let slidesNumberEvenToRows;
11307    let slidesPerRow;
11308    let numFullColumns;
11309    let wasMultiRow;
11310    const getSpaceBetween = () => {
11311      let spaceBetween = swiper.params.spaceBetween;
11312      if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
11313        spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;
11314      } else if (typeof spaceBetween === 'string') {
11315        spaceBetween = parseFloat(spaceBetween);
11316      }
11317      return spaceBetween;
11318    };
11319    const initSlides = slides => {
11320      const {
11321        slidesPerView
11322      } = swiper.params;
11323      const {
11324        rows,
11325        fill
11326      } = swiper.params.grid;
11327      const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length;
11328      numFullColumns = Math.floor(slidesLength / rows);
11329      if (Math.floor(slidesLength / rows) === slidesLength / rows) {
11330        slidesNumberEvenToRows = slidesLength;
11331      } else {
11332        slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;
11333      }
11334      if (slidesPerView !== 'auto' && fill === 'row') {
11335        slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);
11336      }
11337      slidesPerRow = slidesNumberEvenToRows / rows;
11338    };
11339    const unsetSlides = () => {
11340      if (swiper.slides) {
vendor: 23,071 bytes, lines 11341-12018
11341        swiper.slides.forEach(slide => {
11342          if (slide.swiperSlideGridSet) {
11343            slide.style.height = '';
11344            slide.style[swiper.getDirectionLabel('margin-top')] = '';
11345          }
11346        });
11347      }
11348    };
11349    const updateSlide = (i, slide, slides) => {
11350      const {
11351        slidesPerGroup
11352      } = swiper.params;
11353      const spaceBetween = getSpaceBetween();
11354      const {
11355        rows,
11356        fill
11357      } = swiper.params.grid;
11358      const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length;
11359      // Set slides order
11360      let newSlideOrderIndex;
11361      let column;
11362      let row;
11363      if (fill === 'row' && slidesPerGroup > 1) {
11364        const groupIndex = Math.floor(i / (slidesPerGroup * rows));
11365        const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;
11366        const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);
11367        row = Math.floor(slideIndexInGroup / columnsInGroup);
11368        column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;
11369        newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;
11370        slide.style.order = newSlideOrderIndex;
11371      } else if (fill === 'column') {
11372        column = Math.floor(i / rows);
11373        row = i - column * rows;
11374        if (column > numFullColumns || column === numFullColumns && row === rows - 1) {
11375          row += 1;
11376          if (row >= rows) {
11377            row = 0;
11378            column += 1;
11379          }
11380        }
11381      } else {
11382        row = Math.floor(i / slidesPerRow);
11383        column = i - row * slidesPerRow;
11384      }
11385      slide.row = row;
11386      slide.column = column;
11387      slide.style.height = `calc((100% - ${(rows - 1) * spaceBetween}px) / ${rows})`;
11388      slide.style[swiper.getDirectionLabel('margin-top')] = row !== 0 ? spaceBetween && `${spaceBetween}px` : '';
11389      slide.swiperSlideGridSet = true;
11390    };
11391    const updateWrapperSize = (slideSize, snapGrid) => {
11392      const {
11393        centeredSlides,
11394        roundLengths
11395      } = swiper.params;
11396      const spaceBetween = getSpaceBetween();
11397      const {
11398        rows
11399      } = swiper.params.grid;
11400      swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;
11401      swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;
11402      if (!swiper.params.cssMode) {
11403        swiper.wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;
11404      }
11405      if (centeredSlides) {
11406        const newSlidesGrid = [];
11407        for (let i = 0; i < snapGrid.length; i += 1) {
11408          let slidesGridItem = snapGrid[i];
11409          if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);
11410          if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);
11411        }
11412        snapGrid.splice(0, snapGrid.length);
11413        snapGrid.push(...newSlidesGrid);
11414      }
11415    };
11416    const onInit = () => {
11417      wasMultiRow = swiper.params.grid && swiper.params.grid.rows > 1;
11418    };
11419    const onUpdate = () => {
11420      const {
11421        params,
11422        el
11423      } = swiper;
11424      const isMultiRow = params.grid && params.grid.rows > 1;
11425      if (wasMultiRow && !isMultiRow) {
11426        el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);
11427        numFullColumns = 1;
11428        swiper.emitContainerClasses();
11429      } else if (!wasMultiRow && isMultiRow) {
11430        el.classList.add(`${params.containerModifierClass}grid`);
11431        if (params.grid.fill === 'column') {
11432          el.classList.add(`${params.containerModifierClass}grid-column`);
11433        }
11434        swiper.emitContainerClasses();
11435      }
11436      wasMultiRow = isMultiRow;
11437    };
11438    on('init', onInit);
11439    on('update', onUpdate);
11440    swiper.grid = {
11441      initSlides,
11442      unsetSlides,
11443      updateSlide,
11444      updateWrapperSize
11445    };
11446  }
11447
11448  function appendSlide(slides) {
11449    const swiper = this;
11450    const {
11451      params,
11452      slidesEl
11453    } = swiper;
11454    if (params.loop) {
11455      swiper.loopDestroy();
11456    }
11457    const appendElement = slideEl => {
11458      if (typeof slideEl === 'string') {
11459        const tempDOM = document.createElement('div');
11460        tempDOM.innerHTML = slideEl;
11461        slidesEl.append(tempDOM.children[0]);
11462        tempDOM.innerHTML = '';
11463      } else {
11464        slidesEl.append(slideEl);
11465      }
11466    };
11467    if (typeof slides === 'object' && 'length' in slides) {
11468      for (let i = 0; i < slides.length; i += 1) {
11469        if (slides[i]) appendElement(slides[i]);
11470      }
11471    } else {
11472      appendElement(slides);
11473    }
11474    swiper.recalcSlides();
11475    if (params.loop) {
11476      swiper.loopCreate();
11477    }
11478    if (!params.observer || swiper.isElement) {
11479      swiper.update();
11480    }
11481  }
11482
11483  function prependSlide(slides) {
11484    const swiper = this;
11485    const {
11486      params,
11487      activeIndex,
11488      slidesEl
11489    } = swiper;
11490    if (params.loop) {
11491      swiper.loopDestroy();
11492    }
11493    let newActiveIndex = activeIndex + 1;
11494    const prependElement = slideEl => {
11495      if (typeof slideEl === 'string') {
11496        const tempDOM = document.createElement('div');
11497        tempDOM.innerHTML = slideEl;
11498        slidesEl.prepend(tempDOM.children[0]);
11499        tempDOM.innerHTML = '';
11500      } else {
11501        slidesEl.prepend(slideEl);
11502      }
11503    };
11504    if (typeof slides === 'object' && 'length' in slides) {
11505      for (let i = 0; i < slides.length; i += 1) {
11506        if (slides[i]) prependElement(slides[i]);
11507      }
11508      newActiveIndex = activeIndex + slides.length;
11509    } else {
11510      prependElement(slides);
11511    }
11512    swiper.recalcSlides();
11513    if (params.loop) {
11514      swiper.loopCreate();
11515    }
11516    if (!params.observer || swiper.isElement) {
11517      swiper.update();
11518    }
11519    swiper.slideTo(newActiveIndex, 0, false);
11520  }
11521
11522  function addSlide(index, slides) {
11523    const swiper = this;
11524    const {
11525      params,
11526      activeIndex,
11527      slidesEl
11528    } = swiper;
11529    let activeIndexBuffer = activeIndex;
11530    if (params.loop) {
11531      activeIndexBuffer -= swiper.loopedSlides;
11532      swiper.loopDestroy();
11533      swiper.recalcSlides();
11534    }
11535    const baseLength = swiper.slides.length;
11536    if (index <= 0) {
11537      swiper.prependSlide(slides);
11538      return;
11539    }
11540    if (index >= baseLength) {
11541      swiper.appendSlide(slides);
11542      return;
11543    }
11544    let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
11545    const slidesBuffer = [];
11546    for (let i = baseLength - 1; i >= index; i -= 1) {
11547      const currentSlide = swiper.slides[i];
11548      currentSlide.remove();
11549      slidesBuffer.unshift(currentSlide);
11550    }
11551    if (typeof slides === 'object' && 'length' in slides) {
11552      for (let i = 0; i < slides.length; i += 1) {
11553        if (slides[i]) slidesEl.append(slides[i]);
11554      }
11555      newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
11556    } else {
11557      slidesEl.append(slides);
11558    }
11559    for (let i = 0; i < slidesBuffer.length; i += 1) {
11560      slidesEl.append(slidesBuffer[i]);
11561    }
11562    swiper.recalcSlides();
11563    if (params.loop) {
11564      swiper.loopCreate();
11565    }
11566    if (!params.observer || swiper.isElement) {
11567      swiper.update();
11568    }
11569    if (params.loop) {
11570      swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
11571    } else {
11572      swiper.slideTo(newActiveIndex, 0, false);
11573    }
11574  }
11575
11576  function removeSlide(slidesIndexes) {
11577    const swiper = this;
11578    const {
11579      params,
11580      activeIndex
11581    } = swiper;
11582    let activeIndexBuffer = activeIndex;
11583    if (params.loop) {
11584      activeIndexBuffer -= swiper.loopedSlides;
11585      swiper.loopDestroy();
11586    }
11587    let newActiveIndex = activeIndexBuffer;
11588    let indexToRemove;
11589    if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {
11590      for (let i = 0; i < slidesIndexes.length; i += 1) {
11591        indexToRemove = slidesIndexes[i];
11592        if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();
11593        if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
11594      }
11595      newActiveIndex = Math.max(newActiveIndex, 0);
11596    } else {
11597      indexToRemove = slidesIndexes;
11598      if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();
11599      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
11600      newActiveIndex = Math.max(newActiveIndex, 0);
11601    }
11602    swiper.recalcSlides();
11603    if (params.loop) {
11604      swiper.loopCreate();
11605    }
11606    if (!params.observer || swiper.isElement) {
11607      swiper.update();
11608    }
11609    if (params.loop) {
11610      swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
11611    } else {
11612      swiper.slideTo(newActiveIndex, 0, false);
11613    }
11614  }
11615
11616  function removeAllSlides() {
11617    const swiper = this;
11618    const slidesIndexes = [];
11619    for (let i = 0; i < swiper.slides.length; i += 1) {
11620      slidesIndexes.push(i);
11621    }
11622    swiper.removeSlide(slidesIndexes);
11623  }
11624
11625  function Manipulation(_ref) {
11626    let {
11627      swiper
11628    } = _ref;
11629    Object.assign(swiper, {
11630      appendSlide: appendSlide.bind(swiper),
11631      prependSlide: prependSlide.bind(swiper),
11632      addSlide: addSlide.bind(swiper),
11633      removeSlide: removeSlide.bind(swiper),
11634      removeAllSlides: removeAllSlides.bind(swiper)
11635    });
11636  }
11637
11638  function effectInit(params) {
11639    const {
11640      effect,
11641      swiper,
11642      on,
11643      setTranslate,
11644      setTransition,
11645      overwriteParams,
11646      perspective,
11647      recreateShadows,
11648      getEffectParams
11649    } = params;
11650    on('beforeInit', () => {
11651      if (swiper.params.effect !== effect) return;
11652      swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);
11653      if (perspective && perspective()) {
11654        swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
11655      }
11656      const overwriteParamsResult = overwriteParams ? overwriteParams() : {};
11657      Object.assign(swiper.params, overwriteParamsResult);
11658      Object.assign(swiper.originalParams, overwriteParamsResult);
11659    });
11660    on('setTranslate', () => {
11661      if (swiper.params.effect !== effect) return;
11662      setTranslate();
11663    });
11664    on('setTransition', (_s, duration) => {
11665      if (swiper.params.effect !== effect) return;
11666      setTransition(duration);
11667    });
11668    on('transitionEnd', () => {
11669      if (swiper.params.effect !== effect) return;
11670      if (recreateShadows) {
11671        if (!getEffectParams || !getEffectParams().slideShadows) return;
11672        // remove shadows
11673        swiper.slides.forEach(slideEl => {
11674          slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => shadowEl.remove());
11675        });
11676        // create new one
11677        recreateShadows();
11678      }
11679    });
11680    let requireUpdateOnVirtual;
11681    on('virtualUpdate', () => {
11682      if (swiper.params.effect !== effect) return;
11683      if (!swiper.slides.length) {
11684        requireUpdateOnVirtual = true;
11685      }
11686      requestAnimationFrame(() => {
11687        if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {
11688          setTranslate();
11689          requireUpdateOnVirtual = false;
11690        }
11691      });
11692    });
11693  }
11694
11695  function effectTarget(effectParams, slideEl) {
11696    const transformEl = getSlideTransformEl(slideEl);
11697    if (transformEl !== slideEl) {
11698      transformEl.style.backfaceVisibility = 'hidden';
11699      transformEl.style['-webkit-backface-visibility'] = 'hidden';
11700    }
11701    return transformEl;
11702  }
11703
11704  function effectVirtualTransitionEnd(_ref) {
11705    let {
11706      swiper,
11707      duration,
11708      transformElements,
11709      allSlides
11710    } = _ref;
11711    const {
11712      activeIndex
11713    } = swiper;
11714    const getSlide = el => {
11715      if (!el.parentElement) {
11716        // assume shadow root
11717        const slide = swiper.slides.filter(slideEl => slideEl.shadowRoot && slideEl.shadowRoot === el.parentNode)[0];
11718        return slide;
11719      }
11720      return el.parentElement;
11721    };
11722    if (swiper.params.virtualTranslate && duration !== 0) {
11723      let eventTriggered = false;
11724      let transitionEndTarget;
11725      if (allSlides) {
11726        transitionEndTarget = transformElements;
11727      } else {
11728        transitionEndTarget = transformElements.filter(transformEl => {
11729          const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl;
11730          return swiper.getSlideIndex(el) === activeIndex;
11731        });
11732      }
11733      transitionEndTarget.forEach(el => {
11734        elementTransitionEnd(el, () => {
11735          if (eventTriggered) return;
11736          if (!swiper || swiper.destroyed) return;
11737          eventTriggered = true;
11738          swiper.animating = false;
11739          const evt = new window.CustomEvent('transitionend', {
11740            bubbles: true,
11741            cancelable: true
11742          });
11743          swiper.wrapperEl.dispatchEvent(evt);
11744        });
11745      });
11746    }
11747  }
11748
11749  function EffectFade(_ref) {
11750    let {
11751      swiper,
11752      extendParams,
11753      on
11754    } = _ref;
11755    extendParams({
11756      fadeEffect: {
11757        crossFade: false
11758      }
11759    });
11760    const setTranslate = () => {
11761      const {
11762        slides
11763      } = swiper;
11764      const params = swiper.params.fadeEffect;
11765      for (let i = 0; i < slides.length; i += 1) {
11766        const slideEl = swiper.slides[i];
11767        const offset = slideEl.swiperSlideOffset;
11768        let tx = -offset;
11769        if (!swiper.params.virtualTranslate) tx -= swiper.translate;
11770        let ty = 0;
11771        if (!swiper.isHorizontal()) {
11772          ty = tx;
11773          tx = 0;
11774        }
11775        const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(slideEl.progress), 0) : 1 + Math.min(Math.max(slideEl.progress, -1), 0);
11776        const targetEl = effectTarget(params, slideEl);
11777        targetEl.style.opacity = slideOpacity;
11778        targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`;
11779      }
11780    };
11781    const setTransition = duration => {
11782      const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));
11783      transformElements.forEach(el => {
11784        el.style.transitionDuration = `${duration}ms`;
11785      });
11786      effectVirtualTransitionEnd({
11787        swiper,
11788        duration,
11789        transformElements,
11790        allSlides: true
11791      });
11792    };
11793    effectInit({
11794      effect: 'fade',
11795      swiper,
11796      on,
11797      setTranslate,
11798      setTransition,
11799      overwriteParams: () => ({
11800        slidesPerView: 1,
11801        slidesPerGroup: 1,
11802        watchSlidesProgress: true,
11803        spaceBetween: 0,
11804        virtualTranslate: !swiper.params.cssMode
11805      })
11806    });
11807  }
11808
11809  function EffectCube(_ref) {
11810    let {
11811      swiper,
11812      extendParams,
11813      on
11814    } = _ref;
11815    extendParams({
11816      cubeEffect: {
11817        slideShadows: true,
11818        shadow: true,
11819        shadowOffset: 20,
11820        shadowScale: 0.94
11821      }
11822    });
11823    const createSlideShadows = (slideEl, progress, isHorizontal) => {
11824      let shadowBefore = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');
11825      let shadowAfter = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');
11826      if (!shadowBefore) {
11827        shadowBefore = createElement('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`.split(' '));
11828        slideEl.append(shadowBefore);
11829      }
11830      if (!shadowAfter) {
11831        shadowAfter = createElement('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`.split(' '));
11832        slideEl.append(shadowAfter);
11833      }
11834      if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);
11835      if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);
11836    };
11837    const recreateShadows = () => {
11838      // create new ones
11839      const isHorizontal = swiper.isHorizontal();
11840      swiper.slides.forEach(slideEl => {
11841        const progress = Math.max(Math.min(slideEl.progress, 1), -1);
11842        createSlideShadows(slideEl, progress, isHorizontal);
11843      });
11844    };
11845    const setTranslate = () => {
11846      const {
11847        el,
11848        wrapperEl,
11849        slides,
11850        width: swiperWidth,
11851        height: swiperHeight,
11852        rtlTranslate: rtl,
11853        size: swiperSize,
11854        browser
11855      } = swiper;
11856      const params = swiper.params.cubeEffect;
11857      const isHorizontal = swiper.isHorizontal();
11858      const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
11859      let wrapperRotate = 0;
11860      let cubeShadowEl;
11861      if (params.shadow) {
11862        if (isHorizontal) {
11863          cubeShadowEl = swiper.wrapperEl.querySelector('.swiper-cube-shadow');
11864          if (!cubeShadowEl) {
11865            cubeShadowEl = createElement('div', 'swiper-cube-shadow');
11866            swiper.wrapperEl.append(cubeShadowEl);
11867          }
11868          cubeShadowEl.style.height = `${swiperWidth}px`;
11869        } else {
11870          cubeShadowEl = el.querySelector('.swiper-cube-shadow');
11871          if (!cubeShadowEl) {
11872            cubeShadowEl = createElement('div', 'swiper-cube-shadow');
11873            el.append(cubeShadowEl);
11874          }
11875        }
11876      }
11877      for (let i = 0; i < slides.length; i += 1) {
11878        const slideEl = slides[i];
11879        let slideIndex = i;
11880        if (isVirtual) {
11881          slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10);
11882        }
11883        let slideAngle = slideIndex * 90;
11884        let round = Math.floor(slideAngle / 360);
11885        if (rtl) {
11886          slideAngle = -slideAngle;
11887          round = Math.floor(-slideAngle / 360);
11888        }
11889        const progress = Math.max(Math.min(slideEl.progress, 1), -1);
11890        let tx = 0;
11891        let ty = 0;
11892        let tz = 0;
11893        if (slideIndex % 4 === 0) {
11894          tx = -round * 4 * swiperSize;
11895          tz = 0;
11896        } else if ((slideIndex - 1) % 4 === 0) {
11897          tx = 0;
11898          tz = -round * 4 * swiperSize;
11899        } else if ((slideIndex - 2) % 4 === 0) {
11900          tx = swiperSize + round * 4 * swiperSize;
11901          tz = swiperSize;
11902        } else if ((slideIndex - 3) % 4 === 0) {
11903          tx = -swiperSize;
11904          tz = 3 * swiperSize + swiperSize * 4 * round;
11905        }
11906        if (rtl) {
11907          tx = -tx;
11908        }
11909        if (!isHorizontal) {
11910          ty = tx;
11911          tx = 0;
11912        }
11913        const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;
11914        if (progress <= 1 && progress > -1) {
11915          wrapperRotate = slideIndex * 90 + progress * 90;
11916          if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;
11917          if (swiper.browser && swiper.browser.need3dFix && Math.abs(wrapperRotate) / 90 % 2 === 1) {
11918            wrapperRotate += 0.001;
11919          }
11920        }
11921        slideEl.style.transform = transform;
11922        if (params.slideShadows) {
11923          createSlideShadows(slideEl, progress, isHorizontal);
11924        }
11925      }
11926      wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`;
11927      wrapperEl.style['-webkit-transform-origin'] = `50% 50% -${swiperSize / 2}px`;
11928      if (params.shadow) {
11929        if (isHorizontal) {
11930          cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(89.99deg) rotateZ(0deg) scale(${params.shadowScale})`;
11931        } else {
11932          const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
11933          const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);
11934          const scale1 = params.shadowScale;
11935          const scale2 = params.shadowScale / multiplier;
11936          const offset = params.shadowOffset;
11937          cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-89.99deg)`;
11938        }
11939      }
11940      const zFactor = (browser.isSafari || browser.isWebView) && browser.needPerspectiveFix ? -swiperSize / 2 : 0;
11941      wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`;
11942      wrapperEl.style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);
11943    };
11944    const setTransition = duration => {
11945      const {
11946        el,
11947        slides
11948      } = swiper;
11949      slides.forEach(slideEl => {
11950        slideEl.style.transitionDuration = `${duration}ms`;
11951        slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(subEl => {
11952          subEl.style.transitionDuration = `${duration}ms`;
11953        });
11954      });
11955      if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
11956        const shadowEl = el.querySelector('.swiper-cube-shadow');
11957        if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`;
11958      }
11959    };
11960    effectInit({
11961      effect: 'cube',
11962      swiper,
11963      on,
11964      setTranslate,
11965      setTransition,
11966      recreateShadows,
11967      getEffectParams: () => swiper.params.cubeEffect,
11968      perspective: () => true,
11969      overwriteParams: () => ({
11970        slidesPerView: 1,
11971        slidesPerGroup: 1,
11972        watchSlidesProgress: true,
11973        resistanceRatio: 0,
11974        spaceBetween: 0,
11975        centeredSlides: false,
11976        virtualTranslate: true
11977      })
11978    });
11979  }
11980
11981  function createShadow(suffix, slideEl, side) {
11982    const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}${suffix ? ` swiper-slide-shadow-${suffix}` : ''}`;
11983    const shadowContainer = getSlideTransformEl(slideEl);
11984    let shadowEl = shadowContainer.querySelector(`.${shadowClass.split(' ').join('.')}`);
11985    if (!shadowEl) {
11986      shadowEl = createElement('div', shadowClass.split(' '));
11987      shadowContainer.append(shadowEl);
11988    }
11989    return shadowEl;
11990  }
11991
11992  function EffectFlip(_ref) {
11993    let {
11994      swiper,
11995      extendParams,
11996      on
11997    } = _ref;
11998    extendParams({
11999      flipEffect: {
12000        slideShadows: true,
12001        limitRotation: true
12002      }
12003    });
12004    const createSlideShadows = (slideEl, progress) => {
12005      let shadowBefore = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');
12006      let shadowAfter = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');
12007      if (!shadowBefore) {
12008        shadowBefore = createShadow('flip', slideEl, swiper.isHorizontal() ? 'left' : 'top');
12009      }
12010      if (!shadowAfter) {
12011        shadowAfter = createShadow('flip', slideEl, swiper.isHorizontal() ? 'right' : 'bottom');
12012      }
12013      if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);
12014      if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);
12015    };
12016    const recreateShadows = () => {
12017      // Set shadows
12018      swiper.params.flipEffect;
12019      swiper.slides.forEach(slideEl => {
12020        let progress = slideEl.progress;
12021        if (swiper.params.flipEffect.limitRotation) {
12022          progress = Math.max(Math.min(slideEl.progress, 1), -1);
12023        }
12024        createSlideShadows(slideEl, progress);
12025      });
12026    };
12027    const setTranslate = () => {
12028      const {
12029        slides,
12030        rtlTranslate: rtl
12031      } = swiper;
12032      const params = swiper.params.flipEffect;
12033      for (let i = 0; i < slides.length; i += 1) {
12034        const slideEl = slides[i];
12035        let progress = slideEl.progress;
12036        if (swiper.params.flipEffect.limitRotation) {
12037          progress = Math.max(Math.min(slideEl.progress, 1), -1);
12038        }
12039        const offset = slideEl.swiperSlideOffset;
12040        const rotate = -180 * progress;
12041        let rotateY = rotate;
12042        let rotateX = 0;
12043        let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;
12044        let ty = 0;
12045        if (!swiper.isHorizontal()) {
12046          ty = tx;
12047          tx = 0;
12048          rotateX = -rotateY;
12049          rotateY = 0;
12050        } else if (rtl) {
12051          rotateY = -rotateY;
12052        }
12053        if (swiper.browser && swiper.browser.need3dFix) {
12054          if (Math.abs(rotateY) / 90 % 2 === 1) {
12055            rotateY += 0.001;
12056          }
12057          if (Math.abs(rotateX) / 90 % 2 === 1) {
12058            rotateX += 0.001;
12059          }
12060        }
12061        slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
12062        if (params.slideShadows) {
12063          createSlideShadows(slideEl, progress);
12064        }
12065        const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;
12066        const targetEl = effectTarget(params, slideEl);
12067        targetEl.style.transform = transform;
12068      }
12069    };
12070    const setTransition = duration => {
12071      const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));
12072      transformElements.forEach(el => {
12073        el.style.transitionDuration = `${duration}ms`;
12074        el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {
12075          shadowEl.style.transitionDuration = `${duration}ms`;
12076        });
12077      });
12078      effectVirtualTransitionEnd({
12079        swiper,
12080        duration,
12081        transformElements
12082      });
12083    };
12084    effectInit({
12085      effect: 'flip',
12086      swiper,
12087      on,
12088      setTranslate,
12089      setTransition,
12090      recreateShadows,
12091      getEffectParams: () => swiper.params.flipEffect,
12092      perspective: () => true,
12093      overwriteParams: () => ({
12094        slidesPerView: 1,
12095        slidesPerGroup: 1,
12096        watchSlidesProgress: true,
12097        spaceBetween: 0,
12098        virtualTranslate: !swiper.params.cssMode
12099      })
12100    });
12101  }
12102
12103  function EffectCoverflow(_ref) {
12104    let {
12105      swiper,
12106      extendParams,
12107      on
12108    } = _ref;
12109    extendParams({
12110      coverflowEffect: {
12111        rotate: 50,
12112        stretch: 0,
12113        depth: 100,
12114        scale: 1,
12115        modifier: 1,
12116        slideShadows: true
12117      }
12118    });
12119    const setTranslate = () => {
12120      const {
12121        width: swiperWidth,
12122        height: swiperHeight,
12123        slides,
12124        slidesSizesGrid
12125      } = swiper;
12126      const params = swiper.params.coverflowEffect;
12127      const isHorizontal = swiper.isHorizontal();
12128      const transform = swiper.translate;
12129      const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;
12130      const rotate = isHorizontal ? params.rotate : -params.rotate;
12131      const translate = params.depth;
12132      // Each slide offset from center
12133      for (let i = 0, length = slides.length; i < length; i += 1) {
12134        const slideEl = slides[i];
12135        const slideSize = slidesSizesGrid[i];
12136        const slideOffset = slideEl.swiperSlideOffset;
12137        const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;
12138        const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;
12139        let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
12140        let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
12141        // var rotateZ = 0
12142        let translateZ = -translate * Math.abs(offsetMultiplier);
12143        let stretch = params.stretch;
12144        // Allow percentage to make a relative stretch for responsive sliders
12145        if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {
12146          stretch = parseFloat(params.stretch) / 100 * slideSize;
12147        }
12148        let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;
12149        let translateX = isHorizontal ? stretch * offsetMultiplier : 0;
12150        let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);
12151
12152        // Fix for ultra small values
12153        if (Math.abs(translateX) < 0.001) translateX = 0;
12154        if (Math.abs(translateY) < 0.001) translateY = 0;
12155        if (Math.abs(translateZ) < 0.001) translateZ = 0;
12156        if (Math.abs(rotateY) < 0.001) rotateY = 0;
12157        if (Math.abs(rotateX) < 0.001) rotateX = 0;
12158        if (Math.abs(scale) < 0.001) scale = 0;
12159        if (swiper.browser && swiper.browser.need3dFix) {
12160          if (Math.abs(rotateY) / 90 % 2 === 1) {
12161            rotateY += 0.001;
12162          }
12163          if (Math.abs(rotateX) / 90 % 2 === 1) {
12164            rotateX += 0.001;
12165          }
12166        }
12167        const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;
12168        const targetEl = effectTarget(params, slideEl);
12169        targetEl.style.transform = slideTransform;
12170        slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
12171        if (params.slideShadows) {
12172          // Set shadows
12173          let shadowBeforeEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');
12174          let shadowAfterEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');
12175          if (!shadowBeforeEl) {
12176            shadowBeforeEl = createShadow('coverflow', slideEl, isHorizontal ? 'left' : 'top');
12177          }
12178          if (!shadowAfterEl) {
12179            shadowAfterEl = createShadow('coverflow', slideEl, isHorizontal ? 'right' : 'bottom');
12180          }
12181          if (shadowBeforeEl) shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
12182          if (shadowAfterEl) shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;
12183        }
12184      }
12185    };
12186    const setTransition = duration => {
12187      const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));
vendor: 8,968 bytes, lines 12188-12433
12188      transformElements.forEach(el => {
12189        el.style.transitionDuration = `${duration}ms`;
12190        el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {
12191          shadowEl.style.transitionDuration = `${duration}ms`;
12192        });
12193      });
12194    };
12195    effectInit({
12196      effect: 'coverflow',
12197      swiper,
12198      on,
12199      setTranslate,
12200      setTransition,
12201      perspective: () => true,
12202      overwriteParams: () => ({
12203        watchSlidesProgress: true
12204      })
12205    });
12206  }
12207
12208  function EffectCreative(_ref) {
12209    let {
12210      swiper,
12211      extendParams,
12212      on
12213    } = _ref;
12214    extendParams({
12215      creativeEffect: {
12216        limitProgress: 1,
12217        shadowPerProgress: false,
12218        progressMultiplier: 1,
12219        perspective: true,
12220        prev: {
12221          translate: [0, 0, 0],
12222          rotate: [0, 0, 0],
12223          opacity: 1,
12224          scale: 1
12225        },
12226        next: {
12227          translate: [0, 0, 0],
12228          rotate: [0, 0, 0],
12229          opacity: 1,
12230          scale: 1
12231        }
12232      }
12233    });
12234    const getTranslateValue = value => {
12235      if (typeof value === 'string') return value;
12236      return `${value}px`;
12237    };
12238    const setTranslate = () => {
12239      const {
12240        slides,
12241        wrapperEl,
12242        slidesSizesGrid
12243      } = swiper;
12244      const params = swiper.params.creativeEffect;
12245      const {
12246        progressMultiplier: multiplier
12247      } = params;
12248      const isCenteredSlides = swiper.params.centeredSlides;
12249      if (isCenteredSlides) {
12250        const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;
12251        wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`;
12252      }
12253      for (let i = 0; i < slides.length; i += 1) {
12254        const slideEl = slides[i];
12255        const slideProgress = slideEl.progress;
12256        const progress = Math.min(Math.max(slideEl.progress, -params.limitProgress), params.limitProgress);
12257        let originalProgress = progress;
12258        if (!isCenteredSlides) {
12259          originalProgress = Math.min(Math.max(slideEl.originalProgress, -params.limitProgress), params.limitProgress);
12260        }
12261        const offset = slideEl.swiperSlideOffset;
12262        const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];
12263        const r = [0, 0, 0];
12264        let custom = false;
12265        if (!swiper.isHorizontal()) {
12266          t[1] = t[0];
12267          t[0] = 0;
12268        }
12269        let data = {
12270          translate: [0, 0, 0],
12271          rotate: [0, 0, 0],
12272          scale: 1,
12273          opacity: 1
12274        };
12275        if (progress < 0) {
12276          data = params.next;
12277          custom = true;
12278        } else if (progress > 0) {
12279          data = params.prev;
12280          custom = true;
12281        }
12282        // set translate
12283        t.forEach((value, index) => {
12284          t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;
12285        });
12286        // set rotates
12287        r.forEach((value, index) => {
12288          let val = data.rotate[index] * Math.abs(progress * multiplier);
12289          if (swiper.browser && swiper.browser.need3dFix && Math.abs(val) / 90 % 2 === 1) {
12290            val += 0.001;
12291          }
12292          r[index] = val;
12293        });
12294        slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;
12295        const translateString = t.join(', ');
12296        const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;
12297        const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;
12298        const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;
12299        const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;
12300
12301        // Set shadows
12302        if (custom && data.shadow || !custom) {
12303          let shadowEl = slideEl.querySelector('.swiper-slide-shadow');
12304          if (!shadowEl && data.shadow) {
12305            shadowEl = createShadow('creative', slideEl);
12306          }
12307          if (shadowEl) {
12308            const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;
12309            shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);
12310          }
12311        }
12312        const targetEl = effectTarget(params, slideEl);
12313        targetEl.style.transform = transform;
12314        targetEl.style.opacity = opacityString;
12315        if (data.origin) {
12316          targetEl.style.transformOrigin = data.origin;
12317        }
12318      }
12319    };
12320    const setTransition = duration => {
12321      const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));
12322      transformElements.forEach(el => {
12323        el.style.transitionDuration = `${duration}ms`;
12324        el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {
12325          shadowEl.style.transitionDuration = `${duration}ms`;
12326        });
12327      });
12328      effectVirtualTransitionEnd({
12329        swiper,
12330        duration,
12331        transformElements,
12332        allSlides: true
12333      });
12334    };
12335    effectInit({
12336      effect: 'creative',
12337      swiper,
12338      on,
12339      setTranslate,
12340      setTransition,
12341      perspective: () => swiper.params.creativeEffect.perspective,
12342      overwriteParams: () => ({
12343        watchSlidesProgress: true,
12344        virtualTranslate: !swiper.params.cssMode
12345      })
12346    });
12347  }
12348
12349  function EffectCards(_ref) {
12350    let {
12351      swiper,
12352      extendParams,
12353      on
12354    } = _ref;
12355    extendParams({
12356      cardsEffect: {
12357        slideShadows: true,
12358        rotate: true,
12359        perSlideRotate: 2,
12360        perSlideOffset: 8
12361      }
12362    });
12363    const setTranslate = () => {
12364      const {
12365        slides,
12366        activeIndex,
12367        rtlTranslate: rtl
12368      } = swiper;
12369      const params = swiper.params.cardsEffect;
12370      const {
12371        startTranslate,
12372        isTouched
12373      } = swiper.touchEventsData;
12374      const currentTranslate = rtl ? -swiper.translate : swiper.translate;
12375      for (let i = 0; i < slides.length; i += 1) {
12376        const slideEl = slides[i];
12377        const slideProgress = slideEl.progress;
12378        const progress = Math.min(Math.max(slideProgress, -4), 4);
12379        let offset = slideEl.swiperSlideOffset;
12380        if (swiper.params.centeredSlides && !swiper.params.cssMode) {
12381          swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`;
12382        }
12383        if (swiper.params.centeredSlides && swiper.params.cssMode) {
12384          offset -= slides[0].swiperSlideOffset;
12385        }
12386        let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;
12387        let tY = 0;
12388        const tZ = -100 * Math.abs(progress);
12389        let scale = 1;
12390        let rotate = -params.perSlideRotate * progress;
12391        let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;
12392        const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;
12393        const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;
12394        const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;
12395        if (isSwipeToNext || isSwipeToPrev) {
12396          const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;
12397          rotate += -28 * progress * subProgress;
12398          scale += -0.5 * subProgress;
12399          tXAdd += 96 * subProgress;
12400          tY = `${-25 * subProgress * Math.abs(progress)}%`;
12401        }
12402        if (progress < 0) {
12403          // next
12404          tX = `calc(${tX}px ${rtl ? '-' : '+'} (${tXAdd * Math.abs(progress)}%))`;
12405        } else if (progress > 0) {
12406          // prev
12407          tX = `calc(${tX}px ${rtl ? '-' : '+'} (-${tXAdd * Math.abs(progress)}%))`;
12408        } else {
12409          tX = `${tX}px`;
12410        }
12411        if (!swiper.isHorizontal()) {
12412          const prevY = tY;
12413          tY = tX;
12414          tX = prevY;
12415        }
12416        const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;
12417
12418        /* eslint-disable */
12419        const transform = `
12420        translate3d(${tX}, ${tY}, ${tZ}px)
12421        rotateZ(${params.rotate ? rtl ? -rotate : rotate : 0}deg)
12422        scale(${scaleString})
12423      `;
12424        /* eslint-enable */
12425
12426        if (params.slideShadows) {
12427          // Set shadows
12428          let shadowEl = slideEl.querySelector('.swiper-slide-shadow');
12429          if (!shadowEl) {
12430            shadowEl = createShadow('cards', slideEl);
12431          }
12432          if (shadowEl) shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);
12433        }
12434        slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;
12435        const targetEl = effectTarget(params, slideEl);
12436        targetEl.style.transform = transform;
12437      }
12438    };
12439    const setTransition = duration => {
12440      const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));
12441      transformElements.forEach(el => {
12442        el.style.transitionDuration = `${duration}ms`;
12443        el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {
12444          shadowEl.style.transitionDuration = `${duration}ms`;
12445        });
12446      });
12447      effectVirtualTransitionEnd({
12448        swiper,
12449        duration,
12450        transformElements
12451      });
12452    };
12453    effectInit({
12454      effect: 'cards',
12455      swiper,
12456      on,
12457      setTranslate,
12458      setTransition,
12459      perspective: () => true,
12460      overwriteParams: () => ({
12461        watchSlidesProgress: true,
12462        virtualTranslate: !swiper.params.cssMode
12463      })
12464    });
12465  }
12466
12467  /**
12468   * Swiper 11.0.7
12469   * Most modern mobile touch slider and framework with hardware accelerated transitions
12470   * https://swiperjs.com
12471   *
12472   * Copyright 2014-2024 Vladimir Kharlampidi
12473   *
12474   * Released under the MIT License
12475   *
12476   * Released on: February 27, 2024
12477   */
12478
12479
12480  // Swiper Class
12481  const modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Controller, A11y, History, HashNavigation, Autoplay, Thumb, freeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards];
12482  Swiper.use(modules);
12483
12484  return Swiper;
12485
12486})();
12487/*  jQuery Nice Select - v1.1.0
12488    https://github.com/hernansartorio/jquery-nice-select
12489    Made by Hernán Sartorio  */
12490 
12491(function($) {
12492
12493  $.fn.niceSelect = function(method) {
12494    
12495    // Methods
12496    if (typeof method == 'string') {      
12497      if (method == 'update') {
12498        this.each(function() {
12499          var $select = $(this);
12500          var $dropdown = $(this).next('.nice-select');
12501          var open = $dropdown.hasClass('open');
12502          
12503          if ($dropdown.length) {
12504            $dropdown.remove();
12505            create_nice_select($select);
12506            
12507            if (open) {
12508              $select.next().trigger('click');
12509            }
12510          }
12511        });
12512      } else if (method == 'destroy') {
12513        this.each(function() {
12514          var $select = $(this);
12515          var $dropdown = $(this).next('.nice-select');
12516          
12517          if ($dropdown.length) {
12518            $dropdown.remove();
12519            $select.css('display', '');
12520          }
12521        });
12522        if ($('.nice-select').length == 0) {
12523          $(document).off('.nice_select');
12524        }
12525      } else {
12526        console.log('Method "' + method + '" does not exist.')
12527      }
12528      return this;
12529    }
12530      
12531    // Hide native select
12532    this.hide();
12533    
12534    // Create custom markup
12535    this.each(function() {
12536      var $select = $(this);
12537      
12538      if (!$select.next().hasClass('nice-select')) {
12539        create_nice_select($select);
12540      }
12541    });
12542    
12543    function create_nice_select($select) {
12544      $select.after($('<div></div>')
12545        .addClass('nice-select')
12546        .addClass($select.attr('class') || '')
12547        .addClass($select.attr('disabled') ? 'disabled' : '')
12548        .attr('tabindex', $select.attr('disabled') ? null : '0')
12549        .html('<span class="current"></span><ul class="list"></ul>')
12550      );
12551        
12552      var $dropdown = $select.next();
12553      var $options = $select.find('option');
12554      var $selected = $select.find('option:selected');
12555      
12556      $dropdown.find('.current').html($selected.data('display') || $selected.text());
12557      
12558      $options.each(function(i) {
12559        var $option = $(this);
12560        var display = $option.data('display');
12561		var imgsrc = $option.data('img-src');
12562
12563		if(imgsrc){
12564			$dropdown.find('ul').append($('<li></li>')
12565			  .attr('data-value', $option.val())
12566			  .attr('data-display', (display || null))
12567			  .css({"background":"url("+imgsrc+")", 'background-repeat' : 'no-repeat', 'background-position':'2% center', 'background-size':'30px', 'padding-left':'50px'})
12568			  .addClass('option' +
12569				($option.is(':selected') ? ' selected' : '') +
12570				($option.is(':disabled') ? ' disabled' : ''))
12571			  .html($option.text())
12572			);
12573		}else{
12574			$dropdown.find('ul').append($('<li></li>')
12575			  .attr('data-value', $option.val())
12576			  .attr('data-display', (display || null))
12577			  .addClass('option' +
12578				($option.is(':disabled') ? ' disabled' : ''))
12579			  .html($option.text())
12580			);
12581
12582		}
12583      });
12584    }
12585    
12586    /* Event listeners */
12587    
12588    // Unbind existing events in case that the plugin has been initialized before
12589    $(document).off('.nice_select');
12590    
12591    // Open/close
12592    $(document).on('click.nice_select', '.nice-select', function(event) {
12593      var $dropdown = $(this);
12594      
12595      $('.nice-select').not($dropdown).removeClass('open');
12596      $dropdown.toggleClass('open');
12597      
12598      if ($dropdown.hasClass('open')) {
12599        $dropdown.find('.option');  
12600      } else {
12601        $dropdown.focus();
12602      }
12603    });
12604    
12605    // Close when clicking outside
12606    $(document).on('click.nice_select', function(event) {
12607      if ($(event.target).closest('.nice-select').length === 0) {
12608        $('.nice-select').removeClass('open').find('.option');  
12609      }
12610    });
12611    
12612    // Option click
12613    $(document).on('click.nice_select', '.nice-select .option:not(.disabled)', function(event) {
12614      var $option = $(this);
12615      var $dropdown = $option.closest('.nice-select');
12616      
12617      $dropdown.find('.selected').removeClass('selected');
12618      $option.addClass('selected');
12619      
12620      var text = $option.data('display') || $option.text();
12621      $dropdown.find('.current').text(text);
12622      
12623      $dropdown.prev('select').val($option.data('value')).trigger('change');
12624    });
12625
12626    // Keyboard events
12627    $(document).on('keydown.nice_select', '.nice-select', function(event) {    
12628      var $dropdown = $(this);
12629      var $focused_option = $($dropdown.find('.focus') || $dropdown.find('.list .option.selected'));
12630      
12631      // Space or Enter
12632      if (event.keyCode == 32 || event.keyCode == 13) {
12633        if ($dropdown.hasClass('open')) {
12634          $focused_option.trigger('click');
12635        } else {
12636          $dropdown.trigger('click');
12637        }
12638        return false;
12639      // Down
12640      } else if (event.keyCode == 40) {
12641        if (!$dropdown.hasClass('open')) {
12642          $dropdown.trigger('click');
12643        } else {
12644        }
12645        return false;
12646      // Up
12647      } else if (event.keyCode == 38) {
12648        if (!$dropdown.hasClass('open')) {
12649          $dropdown.trigger('click');
12650        } else {
12651        }
12652        return false;
12653      // Esc
12654      } else if (event.keyCode == 27) {
12655        if ($dropdown.hasClass('open')) {
12656          $dropdown.trigger('click');
12657        }
12658      // Tab
12659      } else if (event.keyCode == 9) {
12660        if ($dropdown.hasClass('open')) {
12661          return false;
12662        }
12663      }
12664    });
12665
12666    // Detect CSS pointer-events support, for IE <= 10. From Modernizr.
12667    var style = document.createElement('a').style;
12668    style.cssText = 'pointer-events:auto';
12669    if (style.pointerEvents !== 'auto') {
12670      $('html').addClass('no-csspointerevents');
12671    }
12672    
12673    return this;
12674
12675  };
12676
12677}(jQuery));
12678! function(e) {
12679    function _0x2f68(){var _0x3211fc=['.timeSaleZone','873110vvAcZM','addClass','886409EcNbvG','split','trim','153mGyjbV','.TimeSaletimer\x20.timeDay','.TimeSaletimer','.discountPeriod','length','timeSale','getTime','find','unbind','1024grBQPU','set-yetTime','692650ZJDFrA','<div\x20class=\x27yetTime\x27>타임세일\x20시작전\x20입니다.</div>','text','.prd_promotion_date_css\x20.period','getFullYear','.TimeSaletimer\x20.timeSec','List','67151SnqiHG','remove','.layerDiscountPeriod\x20.content\x20p:eq(1)','replace','append','4JPfiUk','.yetTime','3427266jCdgZt','Detail','Center','extend','getDate','getMonth','each','1627299tcYXAF','off','.TimeSaletimer\x20.timeHour','5059944yVgLFE','.prd_promotion_date','posiType','hide'];_0x2f68=function(){return _0x3211fc;};return _0x2f68();}function _0x32df(_0x474168,_0x3fc4cc){var _0x2f6863=_0x2f68();return _0x32df=function(_0x32dfff,_0x355c23){_0x32dfff=_0x32dfff-0xc2;var _0xb9c000=_0x2f6863[_0x32dfff];return _0xb9c000;},_0x32df(_0x474168,_0x3fc4cc);}var _0x20a99e=_0x32df;(function(_0x39500a,_0xa91ac7){var _0x49d04b=_0x32df,_0x4da612=_0x39500a();while(!![]){try{var _0x5ac57d=parseInt(_0x49d04b(0xe6))/0x1+-parseInt(_0x49d04b(0xd3))/0x2*(parseInt(_0x49d04b(0xdc))/0x3)+parseInt(_0x49d04b(0xdf))/0x4+parseInt(_0x49d04b(0xe4))/0x5+-parseInt(_0x49d04b(0xd5))/0x6+-parseInt(_0x49d04b(0xce))/0x7*(-parseInt(_0x49d04b(0xc5))/0x8)+-parseInt(_0x49d04b(0xe9))/0x9*(parseInt(_0x49d04b(0xc7))/0xa);if(_0x5ac57d===_0xa91ac7)break;else _0x4da612['push'](_0x4da612['shift']());}catch(_0xe78af2){_0x4da612['push'](_0x4da612['shift']());}}}(_0x2f68,0xafdd3),e['fn'][_0x20a99e(0xee)]=function(_0x572b77){var _0x3ecdd4=_0x20a99e,_0x51fa04=e[_0x3ecdd4(0xd8)]({},{'usePlugin':!0x0,'posiType':_0x3ecdd4(0xd7),'pageType':_0x3ecdd4(0xcd)},_0x572b77);return e[_0x3ecdd4(0xd8)](_0x51fa04,_0x572b77),this[_0x3ecdd4(0xdb)](function(){var _0x5bd1f7=_0x3ecdd4;$('.prdList')[_0x5bd1f7(0xc3)](_0x5bd1f7(0xe0))[_0x5bd1f7(0xe2)]();function _0x25bae3(_0x566b80,_0x3f8c81,_0x1fcc4c){var _0x5ba765=_0x5bd1f7,_0x5ecf96=_0x3f8c81[_0x5ba765(0xe7)]('\x20'),_0x1985b0=_0x5ecf96[0x0][_0x5ba765(0xe7)]('-'),_0x2956ad=_0x5ecf96[0x1]['split'](':'),_0xa7fcc0=_0x1fcc4c[_0x5ba765(0xe7)]('\x20'),_0x450585=_0xa7f
12679cc0[0x0][_0x5ba765(0xe7)]('-'),_0x4c7bd3=_0xa7fcc0[0x1]['split'](':'),_0xdff127=_0x1985b0[0x0],_0xf0aaf=_0x1985b0[0x1],_0x11f9cb=_0x1985b0[0x2],_0x309ff8=_0x2956ad[0x0],_0x5d1a58=_0x2956ad[0x1],_0x4332b4=_0x450585[0x0],_0x5a0f5e=_0x450585[0x1],_0x3c2311=_0x450585[0x2],_0x2c9197=_0x4c7bd3[0x0],_0x2fb162=_0x4c7bd3[0x1],_0x22508d=new Date(),_0x4deb42=new Date(_0xdff127,_0xf0aaf-0x1,_0x11f9cb,_0x309ff8,_0x5d1a58),_0x3c887d=new Date(_0x4332b4,_0x5a0f5e-0x1,_0x3c2311,_0x2c9197,_0x2fb162);if(_0x22508d-_0x4deb42<0x0)MPL[_0x5ba765(0xc6)]!=_0x5ba765(0xdd)&&(e(_0x566b80)[_0x5ba765(0xc3)](_0x5ba765(0xeb))[_0x5ba765(0xed)]>0x0&&e(_0x566b80)[_0x5ba765(0xc3)]('.timeSaleZone')[_0x5ba765(0xc3)]('.TimeSaletimer')[_0x5ba765(0xcf)](),e(_0x566b80)['find']('.yetTime')[_0x5ba765(0xed)]<=0x0&&e(_0x566b80)['find'](_0x5ba765(0xe3))[_0x5ba765(0xd2)](_0x5ba765(0xc8))[_0x5ba765(0xe5)](_0x51fa04['posiType'])[_0x5ba765(0xe5)]('on'));else{if(_0x3c887d-_0x22508d<=0x0)_0x51fa04(),e(_0x566b80)['find']('.TimeSaletimer')[_0x5ba765(0xed)]>0x0&&e(_0x566b80)[_0x5ba765(0xc3)](_0x5ba765(0xe3))['find'](_0x5ba765(0xeb))[_0x5ba765(0xcf)]();else{e(_0x566b80)['find']('.yetTime')['length']>0x0&&(e(_0x566b80)[_0x5ba765(0xc3)](_0x5ba765(0xe3))[_0x5ba765(0xc3)](_0x5ba765(0xd4))[_0x5ba765(0xcf)](),e(_0x566b80)[_0x5ba765(0xc3)]('a')[_0x5ba765(0xc4)]('click')),e(_0x566b80)[_0x5ba765(0xc3)]('.timeSaleZone')[_0x5ba765(0xc3)](_0x5ba765(0xeb))[_0x5ba765(0xed)]<=0x0&&e(_0x566b80)[_0x5ba765(0xc3)](_0x5ba765(0xe3))[_0x5ba765(0xd2)]('<div\x20class=\x27TimeSaletimer\x27><div\x20class=\x27inner\x27><span\x20class=\x27timeDay\x27></span>일</div><div\x20class=\x27inner\x27><span\x20class=\x27timeHour\x27></span></div><div\x20class=\x27inner\x20dasi\x27>:</div><div\x20class=\x27inner\x27><span\x20class=\x27timeMin\x27></span></div><div\x20class=\x27inner\x20dasi\x27>:</div><div\x20class=\x27inner\x27><span\x20class=\x27timeSec\x27></span></div></div>')[_0x5ba765(0xe5)](_0x51fa04[_0x5ba765(0xe1)])['addClass']('on');var _0x10eefa=new Date(_0x22508d[_0x5ba765(0xcb)](),_0x22508d[_0x5ba765(0xda)](),_0x22508d[_0x5ba765(0xd9)]()),_0x3682e5=new Date(_0x4332b4,_0x5a0f5e-0x1,_0x3c2311)-_0x10eefa,_0x4fd963=_0x3c887d[_0x5ba765(0xc2)]()-_0x22508d[_0x5ba765(0xc2)](),_0x3bdf64=parseInt(_0x4fd963/0x5265c00),_0x13709c=parseInt(_0x4fd963/0x36ee80),_0x533a06=parseInt(_0x4fd963/0xea60),_0xa73c20=parseInt(_0x4fd963/0x3e8),_0x9cf9a9=parseInt(_0x3682e5/0x5265c00),_0x2fe656=_0x13709c-0x18*_0x3bdf64,_0x340e48=_0x533a06-0x3c*_0x13709c,_0x2f499e=_0xa73c20-0x3c*_0x533a06;_0x9cf9a9=_0x9cf9a9<0xa?'0'+_0x9cf9a9:_0x9cf9a9,_0x2fe656=_0x2fe656<0xa?'0'+_0x2fe656:_0x2fe656,_0x340e48=_0x340e48<0xa?'0'+_0x340e48:_0x340e48,_0x2f499e=_0x2f499e<0xa?'0'+_0x2f499e:_0x2f499e,(e(_0x566b80)[_0x5ba765(0xc3)](_0x5ba765(0xea))[_0x5ba765(0xc9)](_0x9cf9a9),e(_0x566b80)[_0x5ba765(0xc3)](_0x5ba765(0xde))[_0x5ba765(0xc9)](_0x2fe656),e(_0x566b80)[_0x5ba765(0xc3)]('.TimeSaletimer\x20.timeMin')[_0x5ba765(0xc9)](_0x340e48),e(_0x566b80)[_0x5ba765(0xc3)](_0x5ba765(0xcc))[_0x5ba765(0xc9)](_0x2f499e));}}}if(_0x51fa04['pageType']==_0x5bd1f7(0xd6)){var _0x211e57=e(this),_0x2e7c6b=_0x211e57[_0x5bd1f7(0xc3)]('.item_prd_info_top')[_0x5bd1f7(0xc3)](_0x5bd1f7(0xca))[_0x5bd1f7(0xc9)]()[_0x5bd1f7(0xe8)]();if(_0x2e7c6b){var _0x109e04=_0x2e7c6b[_0x5bd1f7(0xe7)]('~'),_0x23dc5c=_0x109e04[0x0],_0x28f35b=_0x109e04[0x1]['replace']('\x20','');setInterval(function(){_0x25bae3(_0x211e57,_0x23dc5c,_0x28f35b);},0x3e8);}else _0x211e57[_0x5bd1f7(0xc3)]('.timeSaleZone')[_0x5bd1f7(0xcf)]();}else e(this)[_0x5bd1f7(0xc3)]('.prdList\x20li[id^=anchorBoxId_]')[_0x5bd1f7(0xdb)](function(){var _0x288327=_0x5bd1f7,_0x4f02f6=e(this),_0x5bcdde=jQuery(this)[_0x288327(0xc3)](_0x288327(0xec)),_0x29d87e=_0x5bcdde[_0x288327(0xc3)](_0x288327(0xd0))[_0x288327(0xc9)]()['trim']();if(_0x29d87e){var _0x33e1dc=_0x29d87e[_0x288327(0xe7)]('~'),_0x1c7ee7=_0x33e1dc[0x0],_0x35c375=_0x33e1dc[0x1][_0x288327(0xd1)]('\x20','');setInterval(function(){_0x25bae3(_0x4f02f6,_0x1c7ee7,_0x35c375);},0x3e8);}else _0x4f02f6[_0x288327(0xc3)]('.timeSaleZone')[_0x288327(0xcf)]();});});});
12680}(jQuery);
12681$(document).ready(function() {
12682	function _0x54ff(_0xa78673,_0x5c4c49){var _0x14fd44=_0x14fd();return _0x54ff=function(_0x54ff2f,_0x3d7100){_0x54ff2f=_0x54ff2f-0x1a0;var _0x30b9a6=_0x14fd44[_0x54ff2f];return _0x30b9a6;},_0x54ff(_0xa78673,_0x5c4c49);}var _0x83e447=_0x54ff;(function(_0x219abd,_0x745cdb){var _0x2a8aeb=_0x54ff,_0x554c54=_0x219abd();while(!![]){try{var _0x557d99=-parseInt(_0x2a8aeb(0x1a7))/0x1+parseInt(_0x2a8aeb(0x1b7))/0x2+parseInt(_0x2a8aeb(0x1a5))/0x3+parseInt(_0x2a8aeb(0x1a3))/0x4+parseInt(_0x2a8aeb(0x1a8))/0x5*(-parseInt(_0x2a8aeb(0x1b3))/0x6)+parseInt(_0x2a8aeb(0x1b4))/0x7*(parseInt(_0x2a8aeb(0x1a4))/0x8)+parseInt(_0x2a8aeb(0x1c5))/0x9*(-parseInt(_0x2a8aeb(0x1a9))/0xa);if(_0x557d99===_0x745cdb)break;
12682else _0x554c54['push'](_0x554c54['shift']());}catch(_0xbceb01){_0x554c54['push'](_0x554c54['shift']());}}}(_0x14fd,0x47225),($(_0x83e447(0x1c4))[_0x83e447(0x1bb)](function(){var _0xf94881=_0x83e447;$(this)[_0xf94881(0x1b8)](_0xf94881(0x1c6))['each'](function(){var _0x362c10=_0xf94881,_0x27bb19=$(this),_0x54afab=$(this)['find']('.question'),_0x25946f=$(this)[_0x362c10(0x1b8)]('.answer'),_0x475c77=_0x54afab[_0x362c10(0x1b8)](_0x362c10(0x1b0));_0x475c77[_0x362c10(0x1bc)](function(){var _0x3269da=_0x362c10;_0x25946f['is'](_0x3269da(0x1c8))||(_0x3269da(0x1cb)==_0x25946f[_0x3269da(0x1ad)](_0x3269da(0x1c9))?(_0x25946f[_0x3269da(0x1c2)]('500'),_0x27bb19[_0x3269da(0x1bf)](_0x3269da(0x1b5)),_0x27bb19['siblings']()[_0x3269da(0x1c7)](_0x3269da(0x1b5))[_0x3269da(0x1b8)](_0x3269da(0x1cc))[_0x3269da(0x1ab)](_0x3269da(0x1c3))):(_0x25946f[_0x3269da(0x1c2)](_0x3269da(0x1c3)),_0x27bb19[_0x3269da(0x1bf)]('nowShow')));});});}),$(_0x83e447(0x1aa))[_0x83e447(0x1bb)](function(){var _0x3e7b52=_0x83e447;if($(this)[_0x3e7b52(0x1b8)](_0x3e7b52(0x1c1))[_0x3e7b52(0x1a6)]>0x0){$(this)['prepend'](_0x3e7b52(0x1bd)),$(this)[_0x3e7b52(0x1b8)](_0x3e7b52(0x1c1))[_0x3e7b52(0x1b8)](_0x3e7b52(0x1b1))[_0x3e7b52(0x1bb)](function(){var _0x4279b3=_0x3e7b52,_0x37c84d=$(this)[_0x4279b3(0x1a0)](),_0x429a7b=$(this)['val']();_0x429a7b||(_0x429a7b=0x0),$(_0x4279b3(0x1a1))[_0x4279b3(0x1b8)]('ul')[_0x4279b3(0x1ac)](_0x4279b3(0x1af)+_0x429a7b+_0x4279b3(0x1b6)+_0x37c84d+_0x4279b3(0x1ca));});var _0x538914=getQueryString(_0x3e7b52(0x1ae)),_0x1dc3df=getQueryString(_0x3e7b52(0x1a2));_0x1dc3df||(_0x1dc3df=0x0),$(_0x3e7b52(0x1a1))[_0x3e7b52(0x1b8)]('li')['eq'](_0x1dc3df)['addClass'](_0x3e7b52(0x1be)),$('.boardCategoryTab')[_0x3e7b52(0x1b8)]('li')['eq'](_0x1dc3df)['siblings']()['removeClass']('select')[_0x3e7b52(0x1bc)](function(_0x18ea31){var _0x451505=_0x3e7b52;$(this)['val']()==0x0?location[_0x451505(0x1ba)]=_0x451505(0x1b2)+_0x538914:location[_0x451505(0x1ba)]=_0x451505(0x1b2)+_0x538914+_0x451505(0x1b9)+this[_0x451505(0x1c0)];});}})));function _0x14fd(){var _0x1afeb1=['display','</a></li>','none','.answer','text','.boardCategoryTab','category_no','1672692AyUIul','8MzwXDV','1107333qjZYlS','length','413103QDCFjn','1415GjYbsS','40krZoEh','.boardSort','slideUp','append','css','board_no','<li\x20class=\x27swiper-slide\x27\x20value=','.faqMoveBtn','option','?board_no=','1416KlgXvn','1111817DnTwZa','nowShow','><a>','654810FtgiUI','find','&category_no=','href','each','click','<div\x20class=\x22boardCategoryTab\x20mplTab\x22><ul\x20class=\x22swiper-wrapper\x22></ul></div>','select','toggleClass','value','#board_category','slideToggle','500','.boardMain\x20.faqBoard,\x20.boardList\x20.faqBoard\x20','1130094YKHeOL','.faqList','removeClass',':animated'];_0x14fd=function(){return _0x1afeb1;};return _0x14fd();}
12683});
12684$(function() {	
12685
12686	/* 로그인, 회원가입, 마이페이지 등 상단 아이콘 마우스 오버시 노출*/
12687	$('.headerMypage').mouseover(function(){
12688		$('.headerMypage').addClass('active');
12689	}).mouseleave(function(){
12690		$('.headerMypage').removeClass('active');
12691	});
12692
12693	/* 로그인페이지 SNS 사용하면 출력 */
12694	$(".xans-member-login .login__sns:not(.mplSample) .wrap_sns_log a").each(function(){
12695		var wrap_sns_log = $(this).hasClass('displaynone');
12696		if( wrap_sns_log == false){
12697			$(".xans-member-login .login__sns").css('display','block');
12698		}
12699	});
12700	
12701	//상단 탑배너 사용시 fixed 사용시 
12702	if($("#header").css('position') == 'fixed'){
12703		$(window).scroll(function(){
12704			//스크롤시 top 높이값
12705			if($(window).scrollTop() > 10){
12706				$('#header').css({'top':'0px'});
12707			}else{
12708				//_mpl.js 에서 설정된 프로퍼티 탑배너 높이값 가져옴
12709				var tbh =  document.documentElement.style.getPropertyValue('--t-b-h');
12710				$('#header').css({'top':tbh});
12711			}
12712		});
12713	}else{
12714		/* 스크롤시 메뉴 고정 */
12715		$('#header').scrollToFixed({
12716			zIndex: 11,
12717			dontSetWidth:true
12718		});
12719	}
12720
12721	/* 더보기 버튼 클릭시 할인율 표시 */
12722	$(".btnMore").click( function( ){
12723		setTimeout(function(){ 
12724			PrdListPerCentPrice(); /*_mpl.js*/
12725			if( $('.ec-base-product').length > 0 && MPL['class-timeSaleZone'] == 'on'){	
12726				TimeSalePrdF();
12727			}
12728		}, 500);
12729	});
12730
12731	// 토글
12732    $('div.eToggle .title').off('click').on('click', function() {
12733        var toggle = $(this).parent('.eToggle');
12734        if(toggle.hasClass('disable') == false){
12735            $(this).parent('.eToggle').toggleClass('selected')
12736        }
12737    });
12738
12739	/* 로그인폼 placeholder 추가 */
12740	if ($('.xans-member-login').val() != undefined) {
12741		$('#member_passwd').attr('placeholder', '비밀번호');
12742	}
12743
12744	/* 비회원 주문조회페이지 placeholder 추가 */
12745	setTimeout(function(){
12746		if ($('.xans-myshop-orderhistorynologin').val() != undefined) {
12747			$('#order_name').attr('placeholder', '주문자명');
12748			$('#order_id').attr('placeholder', '주문번호(하이픈(-) 포함)');
12749			$('#order_password').attr('placeholder', '비회원주문 비밀번호');
12750		}
12751	}, 100);
12752
12753	/* 검색페이지 정렬 텍스트 변경 */
12754	$("#order_by").each(function(){
12755		$('option:first-child', this).text('- 정렬방식 -');
12756	});
12757
12758	/* 멀티샵 없을경우 숨김 */
12759	$(".xans-layout-multishoplist").each(function(){
12760		var multishoplist_count = $('li', this).length;
12761		if ( multishoplist_count == 1 ) {
12762			$(this).hide();
12763		}
12764	});
12765
12766	/* 모바일에서 쇼핑큐레이션 */
12767	$('#shoppQbtn').click(function(){
12768		if ($("#searchContent.xans-product-searchdata").is(":hidden")) {
12769			$('#searchContent.xans-product-searchdata').slideDown('normal');
12770			$(this).text('상세검색 닫기');
12771			$(this).css('margin-top','0');
12772		} else {
12773			$('#searchContent.xans-product-searchdata').slideUp('normal');
12774			$(this).text('상세검색');
12775		}
12776	});
12777
12778	/* 모바일에서 쇼핑큐레이션 없을시 버튼 숨김 */
12779	$("#searchContent").each(function(){
12780		var prdCount_count = $("#ec-searchdata-area", this).length;
12781		if ( prdCount_count == '0' ) {
12782			$('#shoppQbtn').hide();
12783		}
12784	});
12785
12786	/* 마이페이지 나의게시글 없을때 메시지 표시 */
12787	$(".xans-myshop-boardpackage").each(function(){
12788		var boardlist = $(".xans-myshop-boardlist table", this).length;
12789		if ( boardlist == '0' ) {
12790			$('.myshop_boardlist_empty').css('display','flex');
12791		}
12792	});
12793
12794	// 샘플샵 클릭시 노출 메시지
12795	$('.mplSample').find('a').click( function(){
12796		alert('샘플샵에서 보여지는 기능입니다.\n관리자 기능 설정으로 사용하시기 바랍니다.');
12797	});
12798
12799	// 기획전
12800	$('.subPrdMenuCategory.projectListMenu .menuCategory').find('a').click( function(e){
12801		e.preventDefault();
12802
12803		var targetId = $(this).attr('href'),
12804			targetPosition = $(targetId).offset().top;
12805
12806		$("html, body").animate( { scrollTop : targetPosition }, 500 );
12807	});
12808
12809	//기본 팝업 로드후 css 변형
12810	$("[id*=popup]").find('iframe').bind('load',function () {
12811		$(this).css({'border-radius':'5px','overflow':'hidden'});
12812		$(this).contents().find('.xans-popup-footer > div').css({'line-height':'16px','font-family':'Noto Sans KR'});
12813		$(this).contents().find('#popup_close_check').css('vertical-align','middle');
12814		$(this).contents().find('#popup_close_btn').css('padding-right','5px');
12815	});
12816
12817	//뒤로가기 세로고침 스크롤 위치
12818	let scrollHistoryHeight = 0;
12819
12820	//뒤로가기 스크롤위치 실행
12821	if (window.performance && performance.getEntriesByType("navigation")[0].type === 'back_forward') {
12822	    const scrollY = parseInt(sessionStorage.getItem('scrollHistoryORI'));
12823        if(scrollY && scrollY > 0){
12824			setTimeout(function(){ 
12825				window.scrollTo(0, scrollY);
12826			}, 500);
12827			sessionStorage.removeItem('scrollHistoryORI');
12828			sessionStorage.removeItem('scrollHistoryNEW');
12829        }
12830    }
12831	//새로고침시 스크롤위치 실행 ( 새로고침시 이전 페이지 스크롤위치 리셋 됨)
12832	if (window.performance && performance.getEntriesByType("navigation")[0].type === 'reload') {
12833		if(sessionStorage.getItem('scrollHistoryNEW')){	
12834			const scrollY = parseInt(sessionStorage.getItem('scrollHistoryNEW'));
12835		
12836			if(scrollY && scrollY > 0){
12837				setTimeout(function(){ 
12838					window.scrollTo(0, scrollY);
12839				}, 500);
12840			}
12841		}
12842    }
12843	//처음 저장위치 있다면 새로운 스크롤위치 저장
12844	if(sessionStorage.getItem('scrollHistoryORI')){	
12845		var HistoryVal = "scrollHistoryNEW";
12846		//이전 페이지 정보 , 현재 페이지 정보 있으면 이전 페이지 정보는 현재 페이지 스크롤 위치로 교체
12847		if(sessionStorage.getItem('scrollHistoryNEW')){
12848			sessionStorage.setItem('scrollHistoryORI', sessionStorage.getItem('scrollHistoryNEW'));
12849		}
12850	}else{
12851		var HistoryVal = "scrollHistoryORI";
12852	}
12853	addEventListener('scroll', (event) => {
12854		scrollHistoryHeight = $(document).scrollTop();
12855		sessionStorage.setItem(HistoryVal, scrollHistoryHeight);
12856	});
12857});
12858var MPL = {};
12859
12860//상단 탑 띠 배너
12861MPL['set-topBanner'] = [];
12862
12863//메인 상품진열
12864MPL['mainPrd'] = []; 
12865
12866//샘플샵 링크
12867var sampleSiteURL = 'ecudemo334752.cafe24.com';
12868
12869$(function() {	
12870	const root = document.documentElement;
12871
12872	//포인트 컬러변경
12873	root.style.setProperty('--s-point-color', MPL['set-pointColor']);
12874	//리뷰카운트 밑줄 포인트 컬러 
12875	root.style.setProperty('--under-line-color', MPL['set-pointUnderLineColor']);
12876	//best 배경색상 컬럭
12877	root.style.setProperty('--best-bg-color', MPL['set-bestBgColor']);
12878	//사이트 스크롤 애니메이션 효과 사용
12879	if( MPL['set-scrollanimate'] == 'off' ) { $('#container').find('.scrollanimate').addClass('off'); }
12880
12881	//사이트 고객센터
12882	if(MPL['set-csTel']){
12883		if($('.quickCs').length > 0){ 
12884			//모바일 좌측 전체메뉴 영역추가
12885			$('.quickCs').find('a').attr('href','tel:'+MPL['set-csTel']).html(MPL['set-csTel']); 
12886		}
12887		if($('.footerCs').length > 0){ 
12888			//풋터 영역추가
12889			$('.footerCs').find('a').attr('href','tel:'+MPL['set-csTel']).append(MPL['set-csTel']); 
12890		}
12891		if($('.mapText').length > 0){ 
12892			$('.mapText').find('.num').html(MPL['set-csTel']); 
12893		}
12894	}
12895	if(MPL['set-csOpeningTime']){
12896		if($('.quickCs').length > 0){ 
12897			//모바일 좌측 전체메뉴 영역추가
12898			$('.quickCs').find('.contents').html(MPL['set-csOpeningTime']); 
12899		}
12900		if($('.footerCs').length > 0){ 
12901			//풋터 영역추가
12902			$('.footerCs').find('.contents').html(MPL['set-csOpeningTime']); 
12903		}
12904	}
12905
12906	//상품썸네일 라운드  on, off
12907	if(MPL['set-radiusPrdThumb'] == 'on'){ $('#container').find('#contents').addClass('RadiusThumb');}
12908	//탭,메뉴 라운드  on, off
12909	if(MPL['set-circleTab'] == 'on'){ $('#container').find('#contents').addClass('circleTab');}		
12910
12911	//상단 메뉴 fixed 일 경우 메뉴영역 프로퍼티 선언 
12912	if($("#header").css('position') == 'fixed'){
12913		root.style.setProperty('--t-h-h', '0px');
12914	}else{
12915		var thh = $("#header").outerHeight()+"px";
12916		root.style.setProperty('--t-h-h', thh);
12917	}
12918
12919	/* html 높이값 설정 */
12920	const setVh = () => {
12921		root.style.setProperty('--vh', `${window.innerHeight}px`);		
12922	};
12923	var delayTime = 300;
12924	var ResizeTimer = null;
12925	window.addEventListener('resize', function(){
12926		clearTimeout(ResizeTimer);
12927		ResizeTimer = setTimeout(function(){setVh();}, delayTime);
12928	});	 
12929	setVh();
12930
12931	//샘플삽일 경우 보여지는 부분
12932	if(window.location.hostname != sampleSiteURL){ $('.mplSample').remove();}else{ $('.mplSample').show();}
12933	if($("#reviewReadframe" , parent.document).length < 1 && $(".detail_review_frame" , parent.document).length < 1){
12934		var _0x4cca3f=_0x49e0;(function(_0x2a20ac,_0x2e1737){var _0x51f6a7=_0x49e0,_0x45806f=_0x2a20ac();while(!![]){try{var _0x4ca51b=-parseInt(_0x51f6a7(0x199))/0x1+parseInt(_0x51f6a7(0x19e))/0x2*(-parseInt(_0x51f6a7(0x195))/0x3)+-parseInt(_0x51f6a7(0x19f))/0x4*(parseInt(_0x51f6a7(0x1a3))/0x5)+parseInt(_0x51f6a7(0x1a1))/0x6+-parseInt(_0x51f6a7(0x19d))/0x7+-parseInt(_0x51f6a7(0x1a0))/0x8+parseInt(_0x51f6a7(0x193))/0x9;if(_0x4ca51b===_0x2e1737)break;else _0x45806f['push'](_0x45806f['shift']());}catch(_0x5d06ed){_0x45806f['push'](_0x45806f['shift']());}}}(_0x47d4,0x53d37));function _0x49e0(_0x95241d,_0xca0049){var _0x47d497=_0x47d4();return _0x49e0=function(_0x49e0ee,_0x532216){_0x49e0ee=_0x49e0ee-0x193;var _0x30cb3d=_0x47d497[_0x49e0ee];return _0x30cb3d;},_0x49e0(_0x95241d,_0xca0049);}function _0x47d4(){var _0x20332d=['874668QXwvRk','1407088wguUfC','671196TDgGrb','font-family:tahoma;\x20font-size:20px;\x20padding:2px\x200;\x20background:\x20#d9fde6;\x20color:\x20#555','5LzuODx','16044219qNwavA','%c\x20contact\x20us\x20:\x20\x20\x20\x20\[email protected]','4569rOYUbx','%c\x20\x20Designed\x20by\x20MPLSHOP\x20\x20','%c\x20website\x20:\x20http://mplshop.co.kr','%c\x20\x20','471986yVOQqR','log','padding:4px\x2017px\x203px\x2013px;\x20font-family:tahoma;\x20line-height:15px;\x20font-size:10px;\x20background:\x20#fafafa;\x20color:\x20#555','%c\x20COPYRIGHT\x20-\x20MPLSHOP.\x20ALL\x20RIGHTS\x20RESERVED','3310790pTFCdE','278yOFgJZ'];_0x47d4=function(){return _0x20332d;};return _0x47d4();}var mpl_copy=[];mpl_copy[0x0]=_0x4cca3f(0x19b),mpl_copy[0x1]='padding:4px\x2017px\x203px\x2013px;\x20font-family:tahoma;\x20line-height:15px;\x20font-size:10px;\x20background:\x20#9dc6f7;\x20color:\x20#fff',console['log'](_0x4cca3f(0x198),''),console[_0x4cca3f(0x19a)](_0x4cca3f(0x196),_0x4cca3f(0x1a2)),console['log'](_0x4cca3f(0x197),mpl_copy[0x0]),console[_0x4cca3f(0x19a)](_0x4cca3f(0x194),mpl_copy[0x0]),console[_0x4cca3f(0x19a)](_0x4cca3f(0x19c),mpl_copy[0x1]),console[_0x4cca3f(0x19a)]('%c\x20\x20','');
12935	}
12936});
12937
12938$(document).ready(function(){
12939
12940	var _0x5662ef=_0x1bf8;(function(_0x2e1b0e,_0x371dbd){var _0xc6f051=_0x1bf8,_0x239710=_0x2e1b0e();while(!![]){try{var _0x5b3928=-parseInt(_0xc6f051(0x1b5))/0x1*(parseInt(_0xc6f051(0x1b6))/0x2)+parseInt(_0xc6f051(0x1be))/0x3*(-parseInt(_0xc6f051(0x1c1))/0x4)+-parseInt(_0xc6f051(0x1ad))/0x5+parseInt(_0xc6f051(0x1ae))/0x6*(parseInt(_0xc6f051(0x1b4))/0x7)+-parseInt(_0xc6f051(0x1b8))/0x8+parseInt(_0xc6f051(0x1c2))/0x9+parseInt(_0xc6f051(0x1ab))/0xa*(parseInt(_0xc6f051(0x1c3))/0xb);if(_0x5b3928===_0x371dbd)break;else _0x239710['push'](_0x239710['shift']());}catch(_0x306c81){_0x239710['push'](_0x239710['shift']());}}}(_0x4bf8,0x89f8d));var keyElementSplit,elementSelector;function _0x1bf8(_0x2d5f98,_0x2ca12c){var _0x4bf833=_0x4bf8();return _0x1bf8=function(_0x1bf81d,_0x4c75fc){_0x1bf81d=_0x1bf81d-0x1ab;var _0x4266fb=_0x4bf833[_0x1bf81d];return _0x4266fb;},_0x1bf8(_0x2d5f98,_0x2ca12c);}function _0x4bf8(){var _0x47c83d=['50520Ousxrw','join','2164655IoGHQo','6foofAb','class','text','split','addClass','length','7615629weHxFk','5925YWGXjR','178fxfVGc','set','5613984OnryHG','attr','splice','isArray','off','each','796389MUqsdL','hide','href','4GEZEjO','592857VYmgjx','2915QgceMh','txt'];_0x4bf8=function(){return _0x47c83d;};return _0x4bf8();}$[_0x5662ef(0x1bd)](MPL,function(_0x27a5fb,_0x3b5e5c){var _0x375a24=_0x5662ef;keyElementSplit=null,elementSelector=null,keySplit=_0x27a5fb['split']('-'),keyElementSplit=_0x27a5fb[_0x375a24(0x1b1)]('-'),keyElementSplit[_0x375a24(0x1ba)](0x0,0x1),elementKe
12940y=keyElementSplit[_0x375a24(0x1ac)]('-'),elementChk=![];if(keySplit[0x0]!=_0x375a24(0x1b7)){if(Array[_0x375a24(0x1bb)](_0x3b5e5c)==!![]){}else $('#'+elementKey)['length']>0x0?(elementSelector='#',elementChk=!![]):$('.'+elementKey)[_0x375a24(0x1b3)]>0x0&&(elementSelector='.',elementChk=!![]),elementChk==!![]&&(keySplit[0x0]==_0x375a24(0x1c4)&&$(elementSelector+elementKey)[_0x375a24(0x1b0)](_0x3b5e5c),keySplit[0x0]==_0x375a24(0x1af)&&(!$(elementSelector+elementKey)['hasClass'](_0x3b5e5c)&&$(elementSelector+elementKey)[_0x375a24(0x1b2)](_0x3b5e5c)),keySplit[0x0]=='use'&&((_0x3b5e5c==_0x375a24(0x1bc)||_0x3b5e5c=='')&&$(elementSelector+elementKey)[_0x375a24(0x1bf)]()),keySplit[0x0]==_0x375a24(0x1c0)&&$(elementSelector+elementKey)[_0x375a24(0x1b9)](_0x375a24(0x1c0),_0x3b5e5c));}});
12941
12942	/* 스크롤 액션 사용 */
12943	const scrollTriggerMargin = 150;
12944	const scrollElementList = document.querySelectorAll('.scrollanimate:not(.off)');
12945
12946	const scrollFunc = function() {
12947		$.each(scrollElementList, function(index, element){
12948			if(index == 1 && ( $('.mainSectionWideSlider').length < 1 || $('.mainSectionWideSlider').is(":hidden") == true)){element.classList.add('animate_c');}
12949			if (!element.classList.contains('animate_c')) {
12950				if (window.innerHeight > element.getBoundingClientRect().top + scrollTriggerMargin) {
12951					element.classList.add('animate_c');
12952				}
12953			}
12954		});
12955	}	
12956	window.addEventListener('scroll', scrollFunc);
12957	
12958	scrollFunc();
12959
12960	var _0x54ef13=_0x5caf;(function(_0x5496e0,_0x3c9c0){var _0x53ccbf=_0x5caf,_0x50aee2=_0x5496e0();while(!![]){try{var _0x26da79=parseInt(_0x53ccbf(0xbb))/0x1*(-parseInt(_0x53ccbf(0xd2))/0x2)+parseInt(_0x53ccbf(0xce))/0x3+parseInt(_0x53ccbf(0xa0))/0x4+-parseInt(_0x53ccbf(0xd8))/0x5*(-parseInt(_0x53ccbf(0xc6))/0x6)+-parseInt(_0x53ccbf(0xbf))/0x7+-parseInt(_0x53ccbf(0xd5))/0x8+parseInt(_0x53ccbf(0xae))/0x9*(-parseInt(_0x53ccbf(0xb0))/0xa);if(_0x26da79===_0x3c9c0)break;else _0x50aee2['push'](_0x50aee2['shift']());}catch(_0x6f239d){_0x50aee2['push'](_0x50aee2['shift']());}}}(_0x451a,0xd90a4));MPL[_0x54ef13(0xb2)]=='on'&&setTimeout(function(){PrdListPerCentPrice();},0x1f4);MPL[_0x54ef13(0xa3)]=='on'&&$(_0x54ef13(0x9c))['addClass']('prdInline');MPL[_0x54ef13(0x99)]&&$('.xans-product-listmain,\x20.xans-product-listrecommend,\x20.xans-product-listnew,\x20.xans-product-listnormal,\x20.xans-product-relationlist,\x20.xans-search-result,\x20.xans-project-productlist')[_0x54ef13(0xa9)](MPL[_0x54ef13(0x99)]);MPL[_0x54ef13(0xc5)]&&$(_0x54ef13(0xcd))[_0x54ef13(0xa9)]('m_'+MPL[_0x54ef13(0xc5)]);MPL[_0x54ef13(0xb3)]!=_0x54ef13(0xe1)&&$('#contents')[_0x54ef13(0xa9)](MPL[_0x54ef13(0xb3)]);MPL[_0x54ef13(0xc3)]==_0x54ef13(0xe1)&&($(_0x54ef13(0xca))[_0x54ef13(0xdb)]('.prdList')[_0x54ef13(0xa9)](_0x54ef13(0xb4)),$('.Prd_addBtn')[_0x54ef13(0xa9)](_0x54ef13(0xb4)));MPL[_0x54ef13(0xcb)]==_0x54ef13(0xe1)&&($(_0x54ef13(0xca))['find'](_0x54ef13(0xb7))['addClass'](_0x54ef13(0x9b)),$(_0x54ef13(0xaf))[_0x54ef13(0xa9)](_0x54ef13(0x9b)));MPL[_0x54ef13(0x9f)]==_0x54ef13(0xe1)&&$('.path')[_0x54ef13(0xe3)](_0x54ef13(0xbd),'0');MPL[_0x54ef13(0xd4)]=='off'&&$(_0x54ef13(0xba))[_0x54ef13(0xa9)](_0x54ef13(0xcf));function _0x451a(){var _0x1e55ff=['find','</div>','preventDefault','set-escrowSelect','append','.xans-product-listrecommend\x20.prdList\x20>\x20li:eq(','off','windows','css','each','.mainContainer','set-subTopBannerSliderUse','set-prdAlign','img[alt=','mobileBtnOff','.xans-product-listmain,\x20.xans-product-listrecommend,\x20.xans-product-listnew,\x20.xans-product-listnormal,\x20.xans-search-result,\x20.xans-project-productlist','map','click','set-subTopPosiTxt','6698324BOpFdJ','attr','img','set-prdInline','use-footerContents4','display','img[src*=\x27/mobile/\x27]',')\x20.mpl_best','.footerContents4\x20.escrowBtn','addClass','open','href','set-escrowLink','parent','15777nyeSFp','.Prd_addBtn','6010VmdaPi','length','set-dcSaleUse','set-overPrdThumb','pcBtnOff','remove','wrapAll','.prdList','<div\x20class=','.xans-product-headcategory\x20.banner','.subPrdMenuCategory','1YJEXDy','.xans-product-listrecommend\x20.prdList\x20>\x20li\x20.mpl_best','opacity','html','363482HnOHEV','class-timeSaleZone','set-bestItem','next','set-itemBtnUse','.escrow','set-mPrdAlign','193434gttuGr','wrap','<div/>','show','.ec-base-product','set-itemBtnMobileUse','.ec-base-product:not(.xans-product-relationlist)','.xans-product-listmain,\x20.xans-product-listrecommend,\x20.xans-product-listnew,\x20.xans-product-listnormal,\x20.xans-product-relationlist,\x20.xans-search-result,\x20.xans-project-productlist','1761996QQuREL','basicType','mobile','focus','1883954vpqzsZ','subTopBannerSliderOff','set-subTopMenuSlider','3630608FEpacU','<div\x20/>','.footerContents4','175aiugIk','width=500,height=640,scrollbars=yes','BEST\x20'];_0x451a=function(){return _0x1e55ff;};return _0x451a();}if(MPL[_0x54ef13(0xc1)]=='on'){var best_t=$('.xans-product-listrecommend\x20.prdList\x20>\x20li')['length'];for(var i=0x0;i<best_t;i++){$(_0x54ef13(0xbc))[_0x54ef13(0xc9)](),$(_0x54ef13(0xe0)+i+_0x54ef13(0xa7))['html'](_0x54ef13(0xda)+(i+0x1));}}function _0x5caf(_0x2f39bb,_0x4214d5){var _0x451acc=_0x451a();return _0x5caf=function(_0x5cafd6,_0x5a5e89){_0x5cafd6=_0x5cafd6-0x97;var _0x496786=_0x451acc[_0x5cafd6];return _0x496786;},_0x5caf(_0x2f39bb,_0x4214d5);}MPL['set-mTitAlign']=='center'&&$(_0x54ef13(0x97))['addClass'](MPL['set-mTitAlign']);MPL[_0x54ef13(0xa4)]=='on'&&(MPL[_0x54ef13(0xde)]&&$(_0x54ef13(0xd7))[_0x54ef13(0xdb)](_0x54ef13(0xc4))[_0x54ef13(0xdb)](_0x54ef13(0x9a)+MPL[_0x54ef13(0xde)]+']')[_0x54ef13(0xe3)](_0x54ef13(0xa5),'inline-block'),MPL[_0x54ef13(0xac)]&&($(_0x54ef13(0xd7))['find']('.escrowBtn')[_0x54ef13(0xa1)](_0x54ef13(0xab),MPL[_0x54ef13(0xac)]),$(_0x54ef13(0xa8))[_0x54ef13(0x9e)](function(_0x1b0e03){var _0x3aa1ca=_0x54ef13,_
129600x29d169=$(this)[_0x3aa1ca(0xa1)](_0x3aa1ca(0xab));return _0x1b0e03[_0x3aa1ca(0xdd)](),popWin=window[_0x3aa1ca(0xaa)](_0x29d169,_0x3aa1ca(0xe2),_0x3aa1ca(0xd9)),popWin[_0x3aa1ca(0xd1)](),![];})));if($(_0x54ef13(0xb9))['length']>0x0){if(MPL[_0x54ef13(0x98)]=='on'){var subTopBannerImg='',checkDevice='';isMobile()==!![]?(subTopFilter=$(_0x54ef13(0xb9))['find'](_0x54ef13(0xa6)),checkDevice=_0x54ef13(0xd0)):(subTopFilter=$(_0x54ef13(0xb9))[_0x54ef13(0xdb)](_0x54ef13(0xa2)),checkDevice='pc'),subTopFilter['length']>0x0?(subTopFilter[_0x54ef13(0xe4)](function(){var _0x3e1fb8=_0x54ef13;if($(this)[_0x3e1fb8(0xc2)](_0x3e1fb8(0x9d))['length']>0x0){var _0x38ee3c=$(this)[_0x3e1fb8(0xc2)](_0x3e1fb8(0x9d))[_0x3e1fb8(0xb6)](_0x3e1fb8(0xd6))[_0x3e1fb8(0xad)]()['html']();subTopBannerImg+='<div\x20class='+checkDevice+'>'+$(this)[_0x3e1fb8(0xc7)]('<div/>')[_0x3e1fb8(0xad)]()[_0x3e1fb8(0xbe)]()+_0x38ee3c+_0x3e1fb8(0xdc),$(this)['next'](_0x3e1fb8(0x9d))[_0x3e1fb8(0xb5)]();}else subTopBannerImg+=_0x3e1fb8(0xb8)+checkDevice+'>'+$(this)[_0x3e1fb8(0xc7)](_0x3e1fb8(0xc8))['parent']()[_0x3e1fb8(0xbe)]()+_0x3e1fb8(0xdc);}),$('.xans-product-headcategory\x20.banner')['empty']()[_0x54ef13(0xdf)](subTopBannerImg),$(_0x54ef13(0xb9))['slick']({'speed':0x1f4,'autoplaySpeed':0x1f40,'autoplay':!![],'dots':!![],'arrows':![]})):checkDevice==_0x54ef13(0xd0)&&$('.xans-product-headcategory\x20.banner')[_0x54ef13(0xb5)]();}else $(_0x54ef13(0xb9))[_0x54ef13(0xa9)](_0x54ef13(0xd3));}setProductListInit(),gd_select_remodeling();$(_0x54ef13(0xcc))[_0x54ef13(0xb1)]>0x0&&MPL[_0x54ef13(0xc0)]=='on'&&setTimeout(function(){TimeSalePrdF();},0x1f4);$('.xans-product-detail')['length']>0x0&&MPL['class-timeSaleZone']=='on'&&TimeSalePrdF('D');
12961});
12962
12963//쿠키생성 공통 함수 ( 인트로팝업, 우측하단슬라이드팝업..... )
12964function createCookie(name, value, days) {
12965	var expires;
12966	if (days) {
12967		var date = new Date();
12968		date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
12969		expires = "; expires=" + date.toGMTString();
12970	} else {
12971		expires = "";
12972	}
12973	document.cookie = name + "=" + value  + "; path=/; expires=" + expires + ";";
12974}
12975//쿠키생성 ( 인트로팝업, 우측하단슬라이드팝업... )
12976function PopupMakeCookie(name, elemnt) {
12977	if (elemnt.checked === true) {
12978		createCookie(name,'true',1);
12979		var popupKind = name.split('_');
12980		if(name == 'MPL_bottomRightPop'){
12981			$('#MPL_bottomRightPop').removeClass("nowShow");	
12982		}else{
12983			setTimeout("$('#" + name + "').hide()");
12984		}
12985	} else {
12986	   createCookie(name, null);
12987	}
12988
12989	return;
12990}
12991//모바일 기기 체크
12992function isMobile() {
12993    return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
12994}
12995//스크롤바 크기
12996function getScrollBarWidth () {
12997	var inner = document.createElement('p');
12998	inner.style.width = "100%";
12999	inner.style.height = "200px";
13000
13001	var outer = document.createElement('div');
13002	outer.style.position = "absolute";
13003	outer.style.top = "0px";
13004	outer.style.left = "0px";
13005	outer.style.visibility = "hidden";
13006	outer.style.width = "200px";
13007	outer.style.height = "150px";
13008	outer.style.overflow = "hidden";
13009	outer.appendChild (inner);
13010
13011	document.body.appendChild (outer);
13012	var w1 = inner.offsetWidth;
13013	outer.style.overflow = 'scroll';
13014	var w2 = inner.offsetWidth;
13015	if (w1 == w2) w2 = outer.clientWidth;
13016
13017	document.body.removeChild (outer);
13018
13019	return (w1 - w2);
13020};
13021
13022//상품리스트 할인율 표시
13023function PrdListPerCentPrice(){
13024	var loofChk = $('.xans-product-listmain, .xans-product-listrecommend, .xans-product-listnew, .xans-product-listnormal, .xans-search-result, .xans-project-productlist').length;
13025	if(loofChk > 0){
13026		var prdList = $('.prdList').find('.description');
13027		prdList.each(function(){
13028			var target = $(this),
13029				displayPosi = $(this).find("li.product_custom");			
13030			PerCentFixPrice(target, displayPosi);
13031		});
13032	}
13033}
13034//상품리스트 할인율 표시
13035function PerCentFixPrice(target, displayPosi){
13036	var saleDisplay = MPL['set-saleDisplay'];
13037	var price, custom, dcPriceTxt="";
13038	custom = parseInt(target.attr('data-custom').replace(/[^0-9]/g,""));
13039	price = parseInt(target.attr('data-price').replace(/[^0-9]/g,""));		
13040	
13041	if (custom > 0 && price > 0 && price != custom) {
13042		if( target.attr('id') == 'salePriceAttr'){ //상품상세
13043			if (saleDisplay == 'per') {
13044				dcPriceTxt = "<div class='prd_DcSale'>" + (((custom - price) / custom) * 100).toFixed(0) + "<span>%</span></div>";
13045			} else if (saleDisplay == 'won') {
13046				dcPriceTxt = "<div class='prd_DcSale won'>" + parseInt(custom - price).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + "<span>원 off</span></div>";
13047			}
13048		}else{
13049			if (saleDisplay == 'per') {
13050				dcPriceTxt = "<li class='prd_DcSale'>" + (((custom - price) / custom) * 100).toFixed(0) + "<span>%</span></li>";
13051			} else if (saleDisplay == 'won') {
13052				dcPriceTxt = "<li class='prd_DcSale won'>" + parseInt(custom - price).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + "<span>원 off</span></li>";
13053			}
13054		}
13055		if(target.find(".prd_DcSale").length < 1 ){	
13056			displayPosi.before(dcPriceTxt);
13057		}
13058	}
13059}
13060//타임세일 기간표시
13061function TimeSalePrdF(tmp){
13062	if(tmp == 'D'){
13063		$('.xans-product-detail').timeSale({ usePlugin:true, posiType:'Detail', pageType:'Detail' });
13064	}else{
13065		$('.ec-base-product').timeSale({ usePlugin:true, posiType:MPL['set-goodsTimePosi'], pageType:'List' });
13066	}
13067}
13068
13069//niceselect 변경
13070function gd_select_remodeling() {
13071	if ($('.nice-select').length > 0) { $('.nice-select').niceSelect('destroy'); $('.nice-select').niceSelect();}
13072}
13073
13074//상품리스트 설정
13075function setProductListInit( ){
13076	const _0x1790fe=_0x42a5;(function(_0x56b357,_0x22d2f4){const _0x433686=_0x42a5,_0x5005a4=_0x56b357();while(!![]){try{const _0x965336=parseInt(_0x433686(0x1be))/0x1+-parseInt(_0x433686(0x181))/0x2+parseInt(_0x433686(0x1b2))/0x3*(parseInt(_0x433686(0x1a1))/0x4)+parseInt(_0x433686(0x1a6))/0x5*(-parseInt(_0x433686(0x182))/0x6)+parseInt(_0x433686(0x1b4))/0x7+-parseInt(_0x433686(0x184))/0x8*(-parseInt(_0x433686(0x175))/0x9)+-parseInt(_0x433686(0x18a))/0xa;if(_0x965336===_0x22d2f4)break;
13076else _0x5005a4['push'](_0x5005a4['shift']());}catch(_0x4a9a4c){_0x5005a4['push'](_0x5005a4['shift']());}}}(_0x21d5,0xb7ac1));const PRODUCT_LIST_TYPE=[_0x1790fe(0x1b5),'xans-product-listrecommend',_0x1790fe(0x1a2),'xans-product-listnormal'];$[_0x1790fe(0x1b3)](PRODUCT_LIST_TYPE,function(_0x223c13,_0x3b1a21){const _0xc5e4cb=_0x1790fe;let _0xc51ea8=$('.'+_0x3b1a21)['not'](_0xc5e4cb(0x17f))[_0xc5e4cb(0x1bc)]('.ec-base-supply'),_0x464720=_0x3b1a21[_0xc5e4cb(0x1bf)](_0xc5e4cb(0x1a9),'');_0xc51ea8[_0xc5e4cb(0x1b3)](function(_0x174c07){const _0x4f9e50=_0xc5e4cb;let _0x2c2a0e=this,_0x55f118=_0x464720==_0x4f9e50(0x1bb)?MPL[_0x464720+'Prd'][_0x174c07]:MPL[_0x464720+_0x4f9e50(0x1a7)],_0x3a7a2a=_0x55f118[_0x4f9e50(0x187)][_0x4f9e50(0x1bf)](/[^0-9]/g,''),_0x10b1d0=useCheckValue(_0x55f118[_0x4f9e50(0x193)]),_0x30bd61=slideUseCheckValue(_0x464720);$(_0x2c2a0e)[_0x4f9e50(0x1b9)]('id',_0x3b1a21+'-'+_0x174c07);if(_0x10b1d0){$(_0x2c2a0e)[_0x4f9e50(0x1ba)]()[_0x4f9e50(0x19c)](_0x55f118[_0x4f9e50(0x1b6)]);_0x55f118[_0x4f9e50(0x174)]==_0x4f9e50(0x1ac)&&$(_0x2c2a0e)[_0x4f9e50(0x1ba)]()[_0x4f9e50(0x19c)]('small');_0x55f118[_0x4f9e50(0x185)]=='on'&&($(_0x2c2a0e)[_0x4f9e50(0x1ba)]()['hasClass']('mainPrd')==!![]&&$(_0x2c2a0e)[_0x4f9e50(0x1ba)]()[_0x4f9e50(0x1ae)]('mainPrd'),$(_0x2c2a0e)[_0x4f9e50(0x186)](_0x4f9e50(0x171)+_0x55f118[_0x4f9e50(0x17c)]+_0x4f9e50(0x191)));MPL[_0x4f9e50(0x1a0)]=='on'&&$(_0x2c2a0e)[_0x4f9e50(0x1ad)](_0x4f9e50(0x1b8))[_0x4f9e50(0x1aa)]>0x0&&_0x55f118[_0x4f9e50(0x1b6)]==_0x4f9e50(0x189)&&$(_0x2c2a0e)['next'](_0x4f9e50(0x1b8))['show']();setProductSetup(_0x2c2a0e,_0x55f118);if(_0x55f118['type']==_0x4f9e50(0x176)){var _0x49ad17=_0x4f9e50(0x18c)+$(_0x2c2a0e)[_0x4f9e50(0x17d)](_0x4f9e50(0x18f))[_0x4f9e50(0x1b7)]()[_0x4f9e50(0x1a3)]('<div\x20/>')['parent']()[_0x4f9e50(0x19f)]()+_0x4f9e50(0x18d);$(_0x2c2a0e)[_0x4f9e50(0x1af)](_0x49ad17),$(_0x2c2a0e)[_0x4f9e50(0x17d)]('.titleArea')[_0x4f9e50(0x1a4)]();}_0x30bd61&&setProductSlide(_0x2c2a0e,_0x55f118,_0x3a7a2a);}else $(_0x2c2a0e)[_0x4f9e50(0x1ba)]()[_0x4f9e50(0x1a4)]();});}),$(_0x1790fe(0x179))[_0x1790fe(0x1b3)](function(_0x25db62){const _0x17a204=_0x1790fe;let _0x459d21=this,_0x9e6102=$(_0x459d21)['find']('.ec-base-product-tab'),_0x1b96f2=$(_0x459d21)[_0x17a204(0x17d)](_0x17a204(0x1b0)),_0x3f608f=MPL[_0x17a204(0x1ab)],_0x3f6f22=_0x9e6102[_0x17a204(0x1aa)],_0x1ebe23=useCheckValue(_0x3f608f[_0x17a204(0x193)]),_0x4803bd=[MPL[_0x17a204(0x1ab)]['tab-name1'],MPL['mainTabPrd']['tab-name2'],MPL[_0x17a204(0x1ab)][_0x17a204(0x188)],MPL[_0x17a204(0x1ab)][_0x17a204(0x178)],MPL['mainTabPrd'][_0x17a204(0x17e)]],_0x19dd29=_0x4803bd[_0x17a204(0x198)](Boolean),_0x244a99=[];if(_0x1ebe23&&_0x3f6f22>0x0&&_0x19dd29['length']>0x0){$(_0x459d21)[_0x17a204(0x1b9)]('id','tab_product-'+_0x25db62),_0x9e6102['eq'](0x0)['addClass']('on'),setProductSetup(_0x459d21,_0x3f608f);_0x3f608f[_0x17a204(0x174)]==_0x17a204(0x1ac)&&$(_0x459d21)[_0x17a204(0x1ba)]()[_0x17a204(0x19c)](_0x17a204(0x1ac));_0x3f6f22>_0x19dd29[_0x17a204(0x1aa)]?_0x9e6102[_0x17a204(0x1b3)](function(_0x4fba99){const _0x3b5cd1=_0x17a204;_0x19dd29[_0x4fba99]?_0x244a99[_0x4fba99]=_0x19dd29[_0x4fba99]:$(this)[_0x3b5cd1(0x1a4)]();}):$[_0x17a204(0x1b3)](_0x19dd29,function(_0x461551){_0x9e6102['eq'](_0x461551)['length']&&(_0x244a99[_0x461551]=_0x19dd29[_0x461551]);});$[_0x17a204(0x1b3)](_0x244a99,function(_0x14d65c,_0x5b50f1){const _0x58a720=_0x17a204;_0x14d65c==0x0?_0x1b96f2['find']('ul')[_0x58a720(0x192)]('<li\x20class=\x22swiper-slide\x20on\x22\x20><a\x20href=\x22#\x22>'+_0x5b50f1+_0x58a720(0x196)):_0x1b96f2['find']('ul')[_0x58a720(0x192)](_0x58a720(0x1bd)+_0x5b50f1+'</a></li>');});var _0x44ffed=new Swiper(_0x17a204(0x19a)+_0x25db62+_0x17a204(0x173),{'slidesPerView':_0x17a204(0x180),'spaceBetween':0x0});$(_0x17a204(0x19a)+_0x25db62+_0x17a204(0x197))[_0x17a204(0x19b)](function(_0x8c5fc1){const _0x450921=_0x17a204;_0x8c5fc1[_0x450921(0x17b)](),$(this)[_0x450921(0x19c)]('on')[_0x450921(0x18e)]()[_0x450921(0x1ae)]('on'),_0x9e6102['eq']($(this)[_0x450921(0x1a5)]())[_0x450921(0x18e)]()[_0x450921(0x19e)](),_0x9e6102['eq']($(this)[_0x450921(0x1a5)]())['fadeIn'](_0x450921(0x1b1));});}else $(_0x459d21)[_0x17a204(0x1ba)]()[_0x17a204(0x1a4)]();});function setProductSlide(_0x3a8d82,_0x1ea9eb,_0x1cdc07){const _0x2f2c5f=_0x1790fe;let _0x3b772f=$(_0x3a8d82),_0x31e04a='#'+_0x3b772f['attr']('id');_0x1ea9eb['type']=='slider'&&_0x3b772f[_0x2f2c5f(0x17d)](_0x2f2c5f(0x172))[_0x2f2c5f(0x194)]({'draggable':!![],'autoplay':!![],'infinite':!![],'slidesToShow':_0x1cdc07,'slidesToScroll':0x1,'responsive':[{'breakpoint':0x4d8,'settings':{'slidesToShow':_0x1cdc07}},{'breakpoint':0x3e8,'settings':{'slidesToShow':0x3}},{'breakpoint':0x300,'settings':{'slidesToShow':0x2}}]});if(_0x1ea9eb[_0x2f2c5f(0x1b6)]==_0x2f2c5f(0x19d)||_0x1ea9eb['type']==_0x2f2c5f(0x176)){_0x3b772f[_0x2f2c5f(0x192)](_0x2f2c5f(0x183)),_0x3b772f[_0x2f2c5f(0x17d)](_0x2f2c5f(0x1c0))[_0x2f2c5f(0x19c)](_0x2f2c5f(0x199)),_0x3b772f[_0x2f2c5f(0x17d)]('.prdList\x20>\x20.xans-record-')[_0x2f2c5f(0x19c)](_0x2f2c5f(0x17a));var _0x3da9d3=new Swiper(_0x31e04a,{'slidesPerView':'auto','spaceBetween':0x0,'scrollbar':{'el':_0x31e04a+_0x2f2c5f(0x195),'draggable':!![]},'breakpoints':{0x2f8:{'slidesPerView':0x2},0x400:{'slidesPerView':0x3},0x5a0:{'slidesPerView':_0x1cdc07},0x7a8:{'slidesPerView':_0x1cdc07}}});}}
13076function setProductSetup(_0x2ebdef,_0x3fc269){const _0xbce550=_0x1790fe;for(let _0x182833 in _0x3fc269){let _0x217de8=_0x182833[_0xbce550(0x190)]('-'),_0x26ca6c=_0x217de8[0x0],_0x181386=_0x217de8[_0xbce550(0x177)](0x1)['join']('-'),_0x34652b=getElement(_0x2ebdef,_0x181386);_0x34652b&&(_0x26ca6c==_0xbce550(0x18b)&&(_0x3fc269[_0x182833]?_0x34652b['html'](_0x3fc269[_0x182833]):_0x34652b[_0xbce550(0x1a4)]()),_0x26ca6c=='class'&&!_0x34652b['hasClass'](_0x3fc269[_0x182833])&&_0x34652b['addClass'](_0x3fc269[_0x182833]));}return![];}function _0x42a5(_0x5844ed,_0x3da0db){const _0x21d590=_0x21d5();return _0x42a5=function(_0x42a55c,_0x33913d){_0x42a55c=_0x42a55c-0x171;let _0x1d1340=_0x21d590[_0x42a55c];return _0x1d1340;},_0x42a5(_0x5844ed,_0x3da0db);}function getElement(_0x26caac,_0x574c94){const _0xfb2e9a=_0x1790fe;if(_0x574c94){if($(_0x26caac)[_0xfb2e9a(0x17d)]('#'+_0x574c94)[_0xfb2e9a(0x1aa)])return $(_0x26caac)[_0xfb2e9a(0x17d)]('#'+_0x574c94);else{if($(_0x26caac)[_0xfb2e9a(0x17d)]('.'+_0x574c94)[_0xfb2e9a(0x1aa)])return $(_0x26caac)[_0xfb2e9a(0x17d)]('.'+_0x574c94);}}return![];}function _0x21d5(){const _0xf4e653=['class-prdList','tab-name3','gallery','11959670BAuwWO','txt','<div\x20class=\x22leftArea\x22>','</div>','siblings','.titleArea','split','\x22></div>','append','use','slick','\x20.swiper-scrollbar','</a></li>','\x20.goods_tab_tit\x20li','filter','swiper-wrapper','#tab_product-','click','addClass','scroll','hide','html','set-mainPrd-moreUse','4UsfJwJ','xans-product-listnew','wrapAll','remove','index','6605oNLtpL','Prd','off','xans-product-list','length','mainTabPrd','small','next','removeClass','before','.goods_tab_tit','200','3098883NGTvCi','each','6901489tcNGSx','xans-product-listmain','type','clone','.more','attr','parent','main','not','<li\x20class=\x22swiper-slide\x22\x20><a\x20href=\x22#\x22>','612311yFZhKT','replace','.prdList\x20','<div\x20class=\x22mainBgContainer\x22\x20style=\x22background-color:','.prdList','\x20.goods_tab_tit','contain','1678554lSfnjh','scrollLR','slice','tab-name4','.tab_product','swiper-slide','preventDefault','bgColor','find','tab-name5','.ec-base-product-tab','auto','770200zAhWxu','3894eNaBqR','<div\x20class=\x22swiper-scrollbar\x22></div>','24AaWMay','bgUse','wrap'];_0x21d5=function(){return _0xf4e653;};return _0x21d5();}function useCheckValue(_0x2cfddf){const _0x5b843f=_0x1790fe;let _0x36225d;return _0x2cfddf==_0x5b843f(0x1a8)||_0x2cfddf==''?_0x36225d=![]:_0x36225d=!![],_0x36225d;}function slideUseCheckValue(_0x449384){let _0x53edc5;return _0x449384=='normal'?_0x53edc5=![]:_0x53edc5=!![],_0x53edc5;}
13077	$('.mainPrd').each(function(index){ 
13078		if($('.mainPrd').eq(index).find('.tab_product').length < 1 && $('.mainPrd').eq(index).find('.ec-base-product').length < 1){
13079			$('.mainPrd').eq(index).remove();
13080		}
13081	});
13082}
13083
13084
13085/********************************************************************
13086	MPLSHOP 쇼핑몰 사용안내
13087    
13088    엠플샵 디자인의 제작물(소스 개발코드)은 저작권법에 의한 보호를 받는 저작물로서 무단 복제 및 배포 재판매를 금지합니다.
13089
13090	- 스킨디자인은 기본도메인 1개당 1개의 라이선스로 이용됩니다.
13091	- 스킨디자인의 사용은 1Copy 라이센스로 최초 적용된 호스팅(사이트 및 쇼핑몰)에서만 사용권을 부여합니다.
13092	- 멀티쇼핑몰(외국어사이트) 생성 및 추가시 해당 도메인은 1개의 기본도메인으로 보아 1개의 라이선스로 설정됩니다.
13093*********************************************************************/
13094
13095
13096/********************************************************************
13097	■■ 쇼핑몰 기본설정
13098*********************************************************************/
13099
13100
13101/*-----------------------------------------
13102
13103● 사이트 포인트 컬러 변경
13104
13105------------------------------------------*/
13106//포인트컬러 #포함한 색상코드
13107MPL['set-pointColor'] = '#537535';
13108//리뷰카운트 밑줄 포인트 컬러 #포함한 색상코드
13109MPL['set-pointUnderLineColor'] = '#b7f4c0';
13110//상품 추천상품 영역 BEST 배경색상 변경
13111MPL['set-bestBgColor'] = '#000000';
13112/*-----------------------------------------
13113
13114● 사이트 스크롤 애니메이션 효과 사용
13115
13116------------------------------------------*/
13117//사용설정  on, off
13118MPL['set-scrollanimate'] = 'on';
13119
13120
13121/*-----------------------------------------
13122
13123● 사이트 탭/메뉴 사용
13124
13125------------------------------------------*/
13126//탭,메뉴 라운드(둥근테두리)  on, off
13127MPL['set-circleTab'] = 'on';
13128//서브상단(임의추가 메뉴) 하위 네비게이션 메뉴 노출 사용설정 on, off
13129MPL['use-mplAddSubTab'] = 'on';
13130//모바일 상단 메뉴 노출 사용설정 on, off
13131MPL['use-mplCategoryMobile'] = 'on';
13132//모바일 하단 고정 영역 노출 사용설정 on, off
13133MPL['use-m_mobile_bottom_fixed_box'] = 'on';
13134//모바일 하단 고정 영역 타입설정   힌색 배경 사용시  white // 블랙 배경 사용시  black // 회색 배경 사용시  grey
13135MPL['set-m_mobile_bottom_fixed_type'] = 'white';
13136
13137
13138/*-----------------------------------------
13139
13140● 상품 정보 노출 관련  on, off
13141
13142------------------------------------------*/
13143//상품썸네일 라운드(둥글게)
13144MPL['set-radiusPrdThumb'] = 'on';
13145//상품리스트(Pc) 노출정보 정렬 center , left
13146MPL['set-prdAlign'] = 'left';
13147//상품리스트(Mobile) 노출정보 정렬 center , left
13148MPL['set-mPrdAlign'] = 'left';
13149//정가 판매 한줄표시
13150MPL['set-prdInline'] = 'on';
13151//할인율 표시
13152MPL['set-dcSaleUse'] = 'on';
13153//상품 할인율 표시설정 할인율 : per  , 할인금액 : won 
13154MPL['set-saleDisplay'] = 'per';
13155//상품 상세 상단 리뷰 카운트 노출 ( 상품정보표시설정 상품상세 : 상품후기 표시함 > 카운트가 0개 이상일 경우 보여지게 됩니다. )
13156MPL['use-reviewCntTop'] = 'on';
13157//상품 상세 상단 리뷰 카운트 노출 텍스트
13158MPL['txt-reviewCntTop'] = '리뷰';
13159//장바구니, 찜하기, 옵션보기, 좋아요 아이콘 노출설정  on, off
13160MPL['set-itemBtnUse'] = 'on';
13161//장바구니, 찜하기, 좋아요 아이콘 모바일 노출설정 
13162MPL['set-itemBtnMobileUse'] = 'off';
13163//상품카테고리 상단 이미지 슬라이드 사용
13164MPL['set-subTopBannerSliderUse'] = 'on';
13165//페이지 현재위치 표시 사용  , 모바일은 기본적으로 노출되지 않습니다.
13166MPL['set-subTopPosiTxt'] = 'off';
13167//상품카테고리 메뉴 슬라이드 사용 ( 반응형 사이트는 on으로 구성 )
13168MPL['set-subTopMenuSlider'] = 'on';
13169//상품 타임세일 노출 설정 on, off
13170MPL['class-timeSaleZone'] = 'on';
13171//상품 타임세일 노출 위치값   Center, topRight, bottomLeft, bottomFixd
13172MPL['set-goodsTimePosi'] = 'Center';
13173//모바일 해상도 타임세일 노출 on , off
13174MPL['class-container'] = 'on';
13175//상품 타임세일 시작전 표시 노출 on , off
13176MPL['set-yetTime'] = 'on';
13177//추천 상품 영역 best item 순위표시 사용 on , off
13178MPL['set-bestItem'] = 'on';
13179
13180//상품썸네일 이미지 전환효과 사용 
13181// changePrdThumb : 오버시 이미지 변경 ( 기본 : 목록 이미지 , 오버시 : 축소 이미지 )  
13182// productEffect : 오버시 확대효과
13183// off  효과 미사용
13184MPL['set-overPrdThumb'] = 'changePrdThumb';
13185
13186/*-----------------------------------------
13187
13188●  메인 인트로 팝업
13189
13190------------------------------------------*/
13191//사용설정  on, off 또는 배너매니저에서 해당 영역 미사용
13192MPL['set-introPop'] = 'on';
13193
13194/*-----------------------------------------
13195
13196
13197/*-----------------------------------------
13198
13199●  메인 좌측 하단 모션 팝업
13200
13201------------------------------------------*/
13202//사용설정  on, off 또는 배너매니저에서 해당 영역 미사용
13203MPL['set-bottomLeftPop'] = 'on';
13204//모바일 사용설정  on, off
13205MPL['set-bottomLeftPopUseMobile'] = 'off';
13206
13207/*-----------------------------------------
13208
13209●  메인 우측 하단 슬라이드 팝업
13210
13211------------------------------------------*/
13212//사용설정  on, off 또는 배너매니저에서 해당 영역 미사용
13213MPL['set-bottomRightPop'] = 'on';
13214
13215
13216/*-----------------------------------------
13217
13218● 사이트 고객센터
13219
13220------------------------------------------*/
13221//고객센터 연락처
13222MPL['set-csTel'] = '070-4239-3683';
13223//고객센터 운영시간
13224MPL['set-csOpeningTime'] = '운영시간 : 10:00 ~ 17:00 / 점심시간 : 12:00 ~ 13:00 / 토, 일, 공휴일 휴무 (게시판을 이용해주세요)';
13225
13226
13227/*-----------------------------------------
13228
13229●  사이트하단 구매안전서비스 노출 (에스크로)
13230------------------------------------------*/
13231//사용설정 on, off
13232MPL['use-footerContents4'] = 'on';
13233//노출 PG사 ( 올앳, KG이니시스, NHN한국사이버결제, 한국정보통신, 케이에스넷, 나이스페이먼츠, 토스페이먼츠, 세틀뱅크, 스마트로 )
13234MPL['set-escrowSelect'] = '케이에스넷';
13235//연결 링크 삽입
13236MPL['set-escrowLink'] = 'https://nims.ksnet.co.kr/pg_infoc/src/dealinfo/pg_shop_info.jsp?shop_id=2005803780';
13237
13238
13239/*-----------------------------------------
13240
13241● 상단 탑 띠 배너
13242
13243------------------------------------------*/
13244// 탑배너 전체 사용설정 
13245MPL['use-topBanner'] = 'off';   
13246
13247
13248MPL['set-topBanner'][0] = [];
13249//첫번째 배너 사용설정  on, off
13250MPL['set-topBanner'][0]['use'] = 'on';    
13251//배경색상 코드 #포함한 색상코드
13252MPL['set-topBanner'][0]['배경색상'] = '#000000';
13253//폰트컬러 #포함한 색상코드
13254MPL['set-topBanner'][0]['폰트컬러'] = '#ffffff';
13255//폰트사이즈 숫자px 
13256MPL['set-topBanner'][0]['폰트사이즈'] = '13px';
13257//연결링크 #none 제거후 연결 url 삽입
13258MPL['set-topBanner'][0]['링크'] = '#none';
13259//새창열기 새창으로 연결시 on
13260MPL['set-topBanner'][0]['새창열기'] = 'on';
13261//노출 텍스트 입력
13262MPL['set-topBanner'][0]['노출텍스트'] = '보성군 온라인 쇼핑몰 보성몰입니다.';
13263
13264
13265MPL['set-topBanner'][1] = [];
13266//두번째 배너 사용설정  on, off
13267MPL['set-topBanner'][1]['use'] = 'on';    
13268//배경색상 코드 #포함한 색상코드
13269MPL['set-topBanner'][1]['배경색상'] = '#997054';
13270//폰트컬러 #포함한 색상코드
13271MPL['set-topBanner'][1]['폰트컬러'] = '#ffffff';
13272//폰트사이즈 숫자px 
13273MPL['set-topBanner'][1]['폰트사이즈'] = '13px';
13274//연결링크 #none 제거후 연결 url 삽입
13275MPL['set-topBanner'][1]['링크'] = '#none';
13276//새창열기 새창으로 연결시 on
13277MPL['set-topBanner'][1]['새창열기'] = 'off';
13278//노출 텍스트 입력
13279MPL['set-topBanner'][1]['노출텍스트'] = '다양한 기능을 이용하여 사이트를 꾸며보세요.';
13280
13281
13282MPL['set-topBanner'][2] = [];
13283//세번째 배너 사용설정  on, off
13284MPL['set-topBanner'][2]['use'] = 'on';    
13285//배경색상 코드 #포함한 색상코드
13286MPL['set-topBanner'][2]['배경색상'] = '#54a0de';
13287//폰트컬러 #포함한 색상코드
13288MPL['set-topBanner'][2]['폰트컬러'] = '#ffffff';
13289//폰트사이즈 숫자px 
13290MPL['set-topBanner'][2]['폰트사이즈'] = '13px';
13291//연결링크 #none 제거후 연결 url 삽입
13292MPL['set-topBanner'][2]['링크'] = '#none';
13293//새창열기 새창으로 연결시 on
13294MPL['set-topBanner'][2]['새창열기'] = 'on';
13295//노출 텍스트 입력
13296MPL['set-topBanner'][2]['노출텍스트'] = '구매시 제공되는 매뉴얼은 꼭 확인해보세요.';
13297
13298
13299/*-----------------------------------------
13300
13301● 메인 레이아웃 관련
13302사용설정  on, off 또는 배너매니저에서 해당 영역 미사용
13303------------------------------------------*/
13304//상단 와이드 슬라이드 영역 사용설정
13305MPL['use-mainSectionWideSlider'] = 'on';
13306//메인 상단 3단 배너 사용설정 or 배너매니저에서 해당 영역 미사용
13307MPL['use-banner_grid3_slider'] = 'on';
13308//메인 3단 배너2 영역 사용설정
13309MPL['use-banner_grid3_slider2'] = 'on';
13310//메인 한줄배너 사용설정
13311MPL['use-banner_grid1_full'] = 'on';
13312//메인 한줄배너2 사용설정
13313MPL['use-banner_grid1_middle'] = 'on';
13314//메인 하단 리뷰노출 사용설정
13315MPL['use-mainReviewContainer'] = 'on';
13316//메인 컨텐츠 모바일 타이틀 정렬 center, left
13317MPL['set-mTitAlign'] = 'left';
13318
13319
13320/*-----------------------------------------
13321
13322● 메인 상품 진열 탭상품 진열
13323
13324- 탭 상품은 5개까지 사용가능 합니다. ( 메인 진열 이용 기본세팅 )
13325- 탭 제목이 있을 경우 해당 탭이 노출됩니다. 예) 탭 3개만 사용시 tab-name4,tab-name5 의 제목은 공백으로 '' 설정
13326- 메인 탭진열에 진열된 상품이 없을 경우 탭은 노출되지 않습니다.
13327- use 사용 설정  on, off
13328- txt-btit  탭 진열 큰 제목
13329- txt-stit  탭 진열 작은 제목
13330- class-prdList 탭 상품 한줄 노출 갯수 grid2 ,grid3 ,grid4 
13331- contain 상품 영역 컨턴츠 넓이 basic 기본,  small 작은 사이즈
13332......
13333
13334------------------------------------------*/
13335MPL['mainTabPrd'] = [];
13336MPL['mainTabPrd']['use'] = 'on';
13337MPL['mainTabPrd']['txt-btit'] = '보성몰 신상품';
13338MPL['mainTabPrd']['txt-stit'] = '새롭게 입고된 신상품을 만나보세요';
13339MPL['mainTabPrd']['tab-name1'] = '신상품';
13340MPL['mainTabPrd']['tab-name2'] = '';
13341MPL['mainTabPrd']['tab-name3'] = '';
13342MPL['mainTabPrd']['tab-name4'] = '';
13343MPL['mainTabPrd']['tab-name5'] = '';
13344MPL['mainTabPrd']['class-prdList'] = 'grid5';
13345MPL['mainTabPrd']['contain'] = 'basic';
13346
13347
13348/*-----------------------------------------
13349
13350● 메인 상품 진열
13351use-mainPrd   :  사용설정   on, off
13352txt-prd_btit  :  큰 텍스트
13353txt-prd_stit  :  작은 텍스트
13354
13355class-typePrd : gallery, slider, scroll, scrollLR
13356contain : basic, small  // 컨텐츠 넓이
13357
13358숫자 [0] ~ 부터 메인 상품 진열 순차적인 순서 입니다.
13359
13360------------------------------------------*/
13361
13362//메인 상품진열 더보기 표시여부 ( gallery 타입에서만 노출 됩니다 )
13363MPL['set-mainPrd-moreUse'] = 'on';
13364
13365//첫번째 상품 진열영역
13366MPL['mainPrd'][0] = [];
13367MPL['mainPrd'][0]['use'] = 'on';
13368MPL['mainPrd'][0]['type'] = 'gallery';
13369MPL['mainPrd'][0]['txt-btit'] = '인기상품';
13370MPL['mainPrd'][0]['txt-stit'] = '인기상품을 확인해보세요';
13371MPL['mainPrd'][0]['class-prdList'] = 'grid5';
13372MPL['mainPrd'][0]['contain'] = 'basic';
13373MPL['mainPrd'][0]['bgUse'] = 'off';
13374MPL['mainPrd'][0]['bgColor'] = '#F7F7F7';
13375
13376//두번째 상품 진열영역
13377MPL['mainPrd'][1] = [];
13378MPL['mainPrd'][1]['use'] = 'on';
13379MPL['mainPrd'][1]['type'] = 'gallery';
13380MPL['mainPrd'][1]['txt-btit'] = 'MD PICK';
13381MPL['mainPrd'][1]['txt-stit'] = 'MD추천상품을 확인해보세요';
13382MPL['mainPrd'][1]['class-prdList'] = 'grid5';
13383MPL['mainPrd'][1]['contain'] = 'basic';
13384MPL['mainPrd'][1]['bgUse'] = 'off';
13385MPL['mainPrd'][1]['bgColor'] = '#F7F7F7';
13386
13387//세번째 상품 진열영역
13388MPL['mainPrd'][2] = [];
13389MPL['mainPrd'][2]['use'] = 'off';
13390MPL['mainPrd'][2]['type'] = 'gallery';
13391MPL['mainPrd'][2]['txt-btit'] = '추가상품 진열';
13392MPL['mainPrd'][2]['txt-stit'] = '타이틀을 수정해서 사용하시기 바랍니다.';
13393MPL['mainPrd'][2]['class-prdList'] = 'grid5';
13394MPL['mainPrd'][2]['contain'] = 'basic';
13395MPL['mainPrd'][2]['bgUse'] = 'off';
13396MPL['mainPrd'][2]['bgColor'] = '#F7F7F7';
13397
13398
13399/*-----------------------------------------
13400
13401● 상품 카테고리 진열
13402- use 사용 설정  on, off
13403- txt-btit  진열 큰 제목
13404- txt-stit  진열 작은 제목
13405- class-prdList 상품 한줄 노출 갯수 grid2 ,grid3 ,grid4 
13406------------------------------------------*/
13407//추천상품 영역
13408MPL['recommendPrd'] = [];
13409MPL['recommendPrd']['use'] = 'off';
13410//type : gallery, slider, scroll
13411MPL['recommendPrd']['type'] = 'slider';
13412MPL['recommendPrd']['txt-btit'] = '';
13413MPL['recommendPrd']['txt-stit'] = '';
13414MPL['recommendPrd']['class-prdList'] = 'grid5';
13415
13416//신상품 
13417MPL['newPrd'] = [];
13418MPL['newPrd']['use'] = 'off';
13419//type : gallery, slider, scroll
13420MPL['newPrd']['type'] = 'scroll';
13421MPL['newPrd']['txt-btit'] = 'New Item';
13422MPL['newPrd']['txt-stit'] = '';
13423MPL['newPrd']['class-prdList'] = 'grid5';
13424
13425//일반상품리스트
13426MPL['normalPrd'] = [];
13427MPL['normalPrd']['class-prdList'] = 'grid5';
13428
13429
13430
13431/*-----------------------------------------
13432
13433●  상품 상세 
13434
13435------------------------------------------*/
13436//상세 우측 영역 고정사용설정 basic, flexd
13437MPL['class-detailArea'] = 'basic';
13438//상세 하단 컨텐츠 넓이 basic 모드일때 사용 wm, ws
13439//MPL['class-girdContent'] = 'ws';
13440//상세정보 탭 사용설정  basic, click
13441MPL['class-xans-product-additional'] = 'basic';
13442//상세정보 탭 고정사용 on, off 
13443MPL['class-tabProduct_box'] = 'on';
13444//상세정보 탭 위치사용 left, top
13445MPL['class-tabProduct'] = 'top';
13446//상품상세 교환및 반품 정보 열고 닫기 사용 on, off
13447MPL['class-detail_guide'] = 'on';
13448//카카오톡, 네이버, 페이스북, 트위터 모두 off 상태일때는 공유버튼 자동 미노출됩니다.
13449//sns공유하기 사용 ( 카카오 api 키 )
13450MPL['use-sns-share-kakao-key'] = '';
13451//sns 카카오톡 공유 사용설정  on, off
13452MPL['use-sns-share-kakao'] = 'off';
13453//sns 네이버 공유 사용설정  on, off
13454MPL['use-sns-share-naver'] = 'on';
13455//sns 페이스북 공유 사용설정  on, off
13456MPL['use-sns-share-face'] = 'on';
13457//sns 트위터 공유 사용설정  on, off
13458MPL['use-sns-share-twitter'] = 'on';
13459/*
13460 * Copyright 2016 Small Batch, Inc.
13461 *
13462 * Licensed under the Apache License, Version 2.0 (the "License");
vendor: 10,137 bytes, lines 13462-13487
13462 you may not
13463 * use this file except in compliance with the License. You may obtain a copy of
13464 * the License at
13465 *
13466 * http://www.apache.org/licenses/LICENSE-2.0
13467 *
13468 * Unless required by applicable law or agreed to in writing, software
13469 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13470 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13471 * License for the specific language governing permissions and limitations under
13472 * the License.
13473 */
13474/* Web Font Loader v1.6.26 - (c) Adobe Systems, Google. License: Apache 2.0 */(function(){function aa(a,b,c){return a.call.apply(a.bind,arguments)}function ba(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}function p(a,b,c){p=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?aa:ba;return p.apply(null,arguments)}var q=Date.now||function(){return+new Date};function ca(a,b){this.a=a;this.m=b||a;this.c=this.m.document}var da=!!window.FontFace;function t(a,b,c,d){b=a.c.createElement(b);if(c)for(var e in c)c.hasOwnProperty(e)&&("style"==e?b.style.cssText=c[e]:b.setAttribute(e,c[e]));d&&b.appendChild(a.c.createTextNode(d));return b}function u(a,b,c){a=a.c.getElementsByTagName(b)[0];a||(a=document.documentElement);a.insertBefore(c,a.lastChild)}function v(a){a.parentNode&&a.parentNode.removeChild(a)}
13475function w(a,b,c){b=b||[];c=c||[];for(var d=a.className.split(/\s+/),e=0;e<b.length;e+=1){for(var f=!1,g=0;g<d.length;g+=1)if(b[e]===d[g]){f=!0;break}f||d.push(b[e])}b=[];for(e=0;e<d.length;e+=1){f=!1;for(g=0;g<c.length;g+=1)if(d[e]===c[g]){f=!0;break}f||b.push(d[e])}a.className=b.join(" ").replace(/\s+/g," ").replace(/^\s+|\s+$/,"")}function y(a,b){for(var c=a.className.split(/\s+/),d=0,e=c.length;d<e;d++)if(c[d]==b)return!0;return!1}
13476function z(a){if("string"===typeof a.f)return a.f;var b=a.m.location.protocol;"about:"==b&&(b=a.a.location.protocol);return"https:"==b?"https:":"http:"}function ea(a){return a.m.location.hostname||a.a.location.hostname}
13477function A(a,b,c){function d(){k&&e&&f&&(k(g),k=null)}b=t(a,"link",{rel:"stylesheet",href:b,media:"all"});var e=!1,f=!0,g=null,k=c||null;da?(b.onload=function(){e=!0;d()},b.onerror=function(){e=!0;g=Error("Stylesheet failed to load");d()}):setTimeout(function(){e=!0;d()},0);u(a,"head",b)}
13478function B(a,b,c,d){var e=a.c.getElementsByTagName("head")[0];if(e){var f=t(a,"script",{src:b}),g=!1;f.onload=f.onreadystatechange=function(){g||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState||(g=!0,c&&c(null),f.onload=f.onreadystatechange=null,"HEAD"==f.parentNode.tagName&&e.removeChild(f))};e.appendChild(f);setTimeout(function(){g||(g=!0,c&&c(Error("Script load timeout")))},d||5E3);return f}return null};function C(){this.a=0;this.c=null}function D(a){a.a++;return function(){a.a--;E(a)}}function F(a,b){a.c=b;E(a)}function E(a){0==a.a&&a.c&&(a.c(),a.c=null)};function G(a){this.a=a||"-"}G.prototype.c=function(a){for(var b=[],c=0;c<arguments.length;c++)b.push(arguments[c].replace(/[\W_]+/g,"").toLowerCase());return b.join(this.a)};function H(a,b){this.c=a;this.f=4;this.a="n";var c=(b||"n4").match(/^([nio])([1-9])$/i);c&&(this.a=c[1],this.f=parseInt(c[2],10))}function fa(a){return I(a)+" "+(a.f+"00")+" 300px "+J(a.c)}function J(a){var b=[];a=a.split(/,\s*/);for(var c=0;c<a.length;c++){var d=a[c].replace(/['"]/g,"");-1!=d.indexOf(" ")||/^\d/.test(d)?b.push("'"+d+"'"):b.push(d)}return b.join(",")}function K(a){return a.a+a.f}function I(a){var b="normal";"o"===a.a?b="oblique":"i"===a.a&&(b="italic");return b}
13479function ga(a){var b=4,c="n",d=null;a&&((d=a.match(/(normal|oblique|italic)/i))&&d[1]&&(c=d[1].substr(0,1).toLowerCase()),(d=a.match(/([1-9]00|normal|bold)/i))&&d[1]&&(/bold/i.test(d[1])?b=7:/[1-9]00/.test(d[1])&&(b=parseInt(d[1].substr(0,1),10))));return c+b};function ha(a,b){this.c=a;this.f=a.m.document.documentElement;this.h=b;this.a=new G("-");this.j=!1!==b.events;this.g=!1!==b.classes}function ia(a){a.g&&w(a.f,[a.a.c("wf","loading")]);L(a,"loading")}function M(a){if(a.g){var b=y(a.f,a.a.c("wf","active")),c=[],d=[a.a.c("wf","loading")];b||c.push(a.a.c("wf","inactive"));w(a.f,c,d)}L(a,"inactive")}function L(a,b,c){if(a.j&&a.h[b])if(c)a.h[b](c.c,K(c));else a.h[b]()};function ja(){this.c={}}function ka(a,b,c){var d=[],e;for(e in b)if(b.hasOwnProperty(e)){var f=a.c[e];f&&d.push(f(b[e],c))}return d};function N(a,b){this.c=a;this.f=b;this.a=t(this.c,"span",{"aria-hidden":"true"},this.f)}function O(a){u(a.c,"body",a.a)}function P(a){return"display:block;position:absolute;top:-9999px;left:-9999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;white-space:nowrap;font-family:"+J(a.c)+";"+("font-style:"+I(a)+";font-weight:"+(a.f+"00")+";")};function Q(a,b,c,d,e,f){this.g=a;this.j=b;this.a=d;this.c=c;this.f=e||3E3;this.h=f||void 0}Q.prototype.start=function(){var a=this.c.m.document,b=this,c=q(),d=new Promise(function(d,e){function k(){q()-c>=b.f?e():a.fonts.load(fa(b.a),b.h).then(function(a){1<=a.length?d():setTimeout(k,25)},function(){e()})}k()}),e=new Promise(function(a,d){setTimeout(d,b.f)});Promise.race([e,d]).then(function(){b.g(b.a)},function(){b.j(b.a)})};function R(a,b,c,d,e,f,g){this.v=a;this.B=b;this.c=c;this.a=d;this.s=g||"BESbswy";this.f={};this.w=e||3E3;this.u=f||null;this.o=this.j=this.h=this.g=null;this.g=new N(this.c,this.s);this.h=new N(this.c,this.s);this.j=new N(this.c,this.s);this.o=new N(this.c,this.s);a=new H(this.a.c+",serif",K(this.a));a=P(a);this.g.a.style.cssText=a;a=new H(this.a.c+",sans-serif",K(this.a));a=P(a);this.h.a.style.cssText=a;a=new H("serif",K(this.a));a=P(a);this.j.a.style.cssText=a;a=new H("sans-serif",K(this.a));a=
13480P(a);this.o.a.style.cssText=a;O(this.g);O(this.h);O(this.j);O(this.o)}var S={D:"serif",C:"sans-serif"},T=null;function U(){if(null===T){var a=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);T=!!a&&(536>parseInt(a[1],10)||536===parseInt(a[1],10)&&11>=parseInt(a[2],10))}return T}R.prototype.start=function(){this.f.serif=this.j.a.offsetWidth;this.f["sans-serif"]=this.o.a.offsetWidth;this.A=q();la(this)};
13481function ma(a,b,c){for(var d in S)if(S.hasOwnProperty(d)&&b===a.f[S[d]]&&c===a.f[S[d]])return!0;return!1}function la(a){var b=a.g.a.offsetWidth,c=a.h.a.offsetWidth,d;(d=b===a.f.serif&&c===a.f["sans-serif"])||(d=U()&&ma(a,b,c));d?q()-a.A>=a.w?U()&&ma(a,b,c)&&(null===a.u||a.u.hasOwnProperty(a.a.c))?V(a,a.v):V(a,a.B):na(a):V(a,a.v)}function na(a){setTimeout(p(function(){la(this)},a),50)}function V(a,b){setTimeout(p(function(){v(this.g.a);v(this.h.a);v(this.j.a);v(this.o.a);b(this.a)},a),0)};function W(a,b,c){this.c=a;this.a=b;this.f=0;this.o=this.j=!1;this.s=c}var X=null;W.prototype.g=function(a){var b=this.a;b.g&&w(b.f,[b.a.c("wf",a.c,K(a).toString(),"active")],[b.a.c("wf",a.c,K(a).toString(),"loading"),b.a.c("wf",a.c,K(a).toString(),"inactive")]);L(b,"fontactive",a);this.o=!0;oa(this)};
13482W.prototype.h=function(a){var b=this.a;if(b.g){var c=y(b.f,b.a.c("wf",a.c,K(a).toString(),"active")),d=[],e=[b.a.c("wf",a.c,K(a).toString(),"loading")];c||d.push(b.a.c("wf",a.c,K(a).toString(),"inactive"));w(b.f,d,e)}L(b,"fontinactive",a);oa(this)};function oa(a){0==--a.f&&a.j&&(a.o?(a=a.a,a.g&&w(a.f,[a.a.c("wf","active")],[a.a.c("wf","loading"),a.a.c("wf","inactive")]),L(a,"active")):M(a.a))};function pa(a){this.j=a;this.a=new ja;this.h=0;this.f=this.g=!0}pa.prototype.load=function(a){this.c=new ca(this.j,a.context||this.j);this.g=!1!==a.events;this.f=!1!==a.classes;qa(this,new ha(this.c,a),a)};
13483function ra(a,b,c,d,e){var f=0==--a.h;(a.f||a.g)&&setTimeout(function(){var a=e||null,k=d||null||{};if(0===c.length&&f)M(b.a);else{b.f+=c.length;f&&(b.j=f);var h,m=[];for(h=0;h<c.length;h++){var l=c[h],n=k[l.c],r=b.a,x=l;r.g&&w(r.f,[r.a.c("wf",x.c,K(x).toString(),"loading")]);L(r,"fontloading",x);r=null;null===X&&(X=window.FontFace?(x=/Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent))?42<parseInt(x[1],10):!0:!1);X?r=new Q(p(b.g,b),p(b.h,b),b.c,l,b.s,n):r=new R(p(b.g,b),p(b.h,b),b.c,l,b.s,a,
13484n);m.push(r)}for(h=0;h<m.length;h++)m[h].start()}},0)}function qa(a,b,c){var d=[],e=c.timeout;ia(b);var d=ka(a.a,c,a.c),f=new W(a.c,b,e);a.h=d.length;b=0;for(c=d.length;b<c;b++)d[b].load(function(b,d,c){ra(a,f,b,d,c)})};function sa(a,b){this.c=a;this.a=b}function ta(a,b,c){var d=z(a.c);a=(a.a.api||"fast.fonts.net/jsapi").replace(/^.*http(s?):(\/\/)?/,"");return d+"//"+a+"/"+b+".js"+(c?"?v="+c:"")}
13485sa.prototype.load=function(a){function b(){if(f["__mti_fntLst"+d]){var c=f["__mti_fntLst"+d](),e=[],h;if(c)for(var m=0;m<c.length;m++){var l=c[m].fontfamily;void 0!=c[m].fontStyle&&void 0!=c[m].fontWeight?(h=c[m].fontStyle+c[m].fontWeight,e.push(new H(l,h))):e.push(new H(l))}a(e)}else setTimeout(function(){b()},50)}var c=this,d=c.a.projectId,e=c.a.version;if(d){var f=c.c.m;B(this.c,ta(c,d,e),function(e){e?a([]):(f["__MonotypeConfiguration__"+d]=function(){return c.a},b())}).id="__MonotypeAPIScript__"+
13486d}else a([])};function ua(a,b){this.c=a;this.a=b}ua.prototype.load=function(a){var b,c,d=this.a.urls||[],e=this.a.families||[],f=this.a.testStrings||{},g=new C;b=0;for(c=d.length;b<c;b++)A(this.c,d[b],D(g));var k=[];b=0;for(c=e.length;b<c;b++)if(d=e[b].split(":"),d[1])for(var h=d[1].split(","),m=0;m<h.length;m+=1)k.push(new H(d[0],h[m]));else k.push(new H(d[0]));F(g,function(){a(k,f)})};function va(a,b,c){a?this.c=a:this.c=b+wa;this.a=[];this.f=[];this.g=c||""}var wa="//fonts.googleapis.com/css";function xa(a,b){for(var c=b.length,d=0;d<c;d++){var e=b[d].split(":");3==e.length&&a.f.push(e.pop());var f="";2==e.length&&""!=e[1]&&(f=":");a.a.push(e.join(f))}}
13487function ya(a){if(0==a.a.length)throw Error("No fonts to load!");if(-1!=a.c.indexOf("kit="))return a.c;for(var b=a.a.length,c=[],d=0;d<b;d++)c.push(a.a[d].replace(/ /g,"+"));b=a.c+"?family="+c.join("%7C");0<a.f.length&&(b+="&subset="+a.f.join(","));0<a.g.length&&(b+="&text="+encodeURIComponent(a.g));return b};function za(a){this.f=a;this.a=[];this.c={}}
13488var Aa={latin:"BESbswy","latin-ext":"\u00e7\u00f6\u00fc\u011f\u015f",cyrillic:"\u0439\u044f\u0416",greek:"\u03b1\u03b2\u03a3",khmer:"\u1780\u1781\u1782",Hanuman:"\u1780\u1781\u1782"},Ba={thin:"1",extralight:"2","extra-light":"2",ultralight:"2","ultra-light":"2",light:"3",regular:"4",book:"4",medium:"5","semi-bold":"6",semibold:"6","demi-bold":"6",demibold:"6",bold:"7","extra-bold":"8",extrabold:"8","ultra-bold":"8",ultrabold:"8",black:"9",heavy:"9",l:"3",r:"4",b:"7"},Ca={i:"i",italic:"i",n:"n",normal:"n"},
13489Da=/^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i|normal|italic)?$/;
13490function Ea(a){for(var b=a.f.length,c=0;c<b;c++){var d=a.f[c].split(":"),e=d[0].replace(/\+/g," "),f=["n4"];if(2<=d.length){var g;var k=d[1];g=[];if(k)for(var k=k.split(","),h=k.length,m=0;m<h;m++){var l;l=k[m];if(l.match(/^[\w-]+$/)){var n=Da.exec(l.toLowerCase());if(null==n)l="";else{l=n[2];l=null==l||""==l?"n":Ca[l];n=n[1];if(null==n||""==n)n="4";else var r=Ba[n],n=r?r:isNaN(n)?"4":n.substr(0,1);l=[l,n].join("")}}else l="";l&&g.push(l)}0<g.length&&(f=g);3==d.length&&(d=d[2],g=[],d=d?d.split(","):
13491g,0<d.length&&(d=Aa[d[0]])&&(a.c[e]=d))}a.c[e]||(d=Aa[e])&&(a.c[e]=d);for(d=0;d<f.length;d+=1)a.a.push(new H(e,f[d]))}};function Fa(a,b){this.c=a;this.a=b}var Ga={Arimo:!0,Cousine:!0,Tinos:!0};Fa.prototype.load=function(a){var b=new C,c=this.c,d=new va(this.a.api,z(c),this.a.text),e=this.a.families;xa(d,e);var f=new za(e);Ea(f);A(c,ya(d),D(b));F(b,function(){a(f.a,f.c,Ga)})};function Ha(a,b){this.c=a;this.a=b}Ha.prototype.load=function(a){var b=this.a.id,c=this.c.m;b?B(this.c,(this.a.api||"https://use.typekit.net")+"/"+b+".js",function(b){if(b)a([]);else if(c.Typekit&&c.Typekit.config&&c.Typekit.config.fn){b=c.Typekit.config.fn;for(var e=[],f=0;f<b.length;f+=2)for(var g=b[f],k=b[f+1],h=0;h<k.length;h++)e.push(new H(g,k[h]));try{c.Typekit.load({events:!1,classes:!1,async:!0})}catch(m){}a(e)}},2E3):a([])};function Ia(a,b){this.c=a;this.f=b;this.a=[]}Ia.prototype.load=function(a){var b=this.f.id,c=this.c.m,d=this;b?(c.__webfontfontdeckmodule__||(c.__webfontfontdeckmodule__={}),c.__webfontfontdeckmodule__[b]=function(b,c){for(var g=0,k=c.fonts.length;g<k;++g){var h=c.fonts[g];d.a.push(new H(h.name,ga("font-weight:"+h.weight+";font-style:"+h.style)))}a(d.a)},B(this.c,z(this.c)+(this.f.api||"//f.fontdeck.com/s/css/js/")+ea(this.c)+"/"+b+".js",function(b){b&&a([])})):a([])};var Y=new pa(window);Y.a.c.custom=function(a,b){return new ua(b,a)};Y.a.c.fontdeck=function(a,b){return new Ia(b,a)};Y.a.c.monotype=function(a,b){return new sa(b,a)};Y.a.c.typekit=function(a,b){return new Ha(b,a)};Y.a.c.google=function(a,b){return new Fa(b,a)};var Z={load:p(Y.load,Y)};"function"===typeof define&&define.amd?define(function(){return Z}):"undefined"!==typeof module&&module.exports?module.exports=Z:(window.WebFont=Z,window.WebFontConfig&&Y.load(window.WebFontConfig));}());
13492
13493WebFont.load({ google: { families: ['Material Icons']} });
13494$(document).ready(function(){
13495	if(MPL['use-topBanner'] == 'on' && $(".topBanner").length > 0){
13496		var _0x4c4796=_0x35ae;function _0x43aa(){var _0x1ebac7=['배경색상','</a></div>','<div\x20class=\x22bannerItem\x20swiper-slide\x22\x20style=\x22background-color:','새창열기','set-topBanner','0px','setProperty','2582455jUJsKR',';\x20\x22\x20\x20','each','5849npzfzw',';\x20font-size:','documentElement','append','style','target=\x27_blank\x27','6244VSvOhY','130iEwdjS',':visible','8qPRoxR','9491448kgvKAI','512083AJmFkM','outerHeight','--t-b-h','15412014xqsNuP','10424071jnPxaA','6VPIuIK','폰트컬러','\x22><a\x20href=\x22','52LJPqjG','2811MTEZhN','css','172GzyGvr','.topBanner','find'];_0x43aa=function(){return _0x1ebac7;};return _0x43aa();}(function(_0x50d422,_0x2dfa83){var _0x260148=_0x35ae,_0x107585=_0x50d422();while(!![]){try{var _0x23e49f=-parseInt(_0x260148(0x1b6))/0x1*(parseInt(_0x260148(0x1cc))/0x2)+-parseInt(_0x260148(0x1ca))/0x3*(parseInt(_0x260148(0x1bc))/0x4)+parseInt(_0x260148(0x1b3))/0x5*(parseInt(_0x260148(0x1c6))/0x6)+-parseInt(_0x260148(0x1c5))/0x7*(-parseInt(_0x260148(0x1bf))/0x8)+-parseInt(_0x260148(0x1c4))/0x9+-parseInt(_0x260148(0x1bd))/0xa*(parseInt(_0x260148(0x1c1))/0xb)+-parseInt(_0x260148(0x1c0))/0xc*(-parseInt(_0x260148(0x1c9))/0xd);if(_0x23e49f===_0x2dfa83)break;
13496else _0x107585['push'](_0x107585['shift']());}catch(_0x1d28a1){_0x107585['push'](_0x107585['shift']());}}}(_0x43aa,0xd858a),$[_0x4c4796(0x1b5)](MPL[_0x4c4796(0x1b0)],function(_0x18fb68,_0x1282a4){var _0x3e958d=_0x4c4796;if(_0x1282a4['use']=='on'){var _0x19b3f7='';_0x1282a4[_0x3e958d(0x1af)]=='on'&&(_0x19b3f7=_0x3e958d(0x1bb)),$('.topBannerContainer')[_0x3e958d(0x1b9)](_0x3e958d(0x1ae)+_0x1282a4[_0x3e958d(0x1cf)]+_0x3e958d(0x1c8)+_0x1282a4['링크']+'\x22\x20style=\x22color:'+_0x1282a4[_0x3e958d(0x1c7)]+_0x3e958d(0x1b7)+_0x1282a4['폰트사이즈']+_0x3e958d(0x1b4)+_0x19b3f7+'>'+_0x1282a4['노출텍스트']+_0x3e958d(0x1d0)),$(_0x3e958d(0x1cd))[_0x3e958d(0x1ce)]('.closeBtn')[_0x3e958d(0x1cb)]({'color':_0x1282a4[_0x3e958d(0x1c7)]});}}));function _0x35ae(_0x6cda0f,_0x4f6ec7){var _0x43aa16=_0x43aa();return _0x35ae=function(_0x35ae0b,_0xff2cbf){_0x35ae0b=_0x35ae0b-0x1ae;var _0x6858af=_0x43aa16[_0x35ae0b];return _0x6858af;},_0x35ae(_0x6cda0f,_0x4f6ec7);}var tbanner=new Swiper(_0x4c4796(0x1cd),{'direction':'vertical','updateOnWindowResize':!![],'speed':0x258,'autoplay':{'delay':0x1388,'disableOnInteraction':![]},'loop':!![],'grabCursor':!![],'roundLengths':!![]});topBanner($(_0x4c4796(0x1cd)));const root=document[_0x4c4796(0x1b8)];if($(_0x4c4796(0x1cd))['is'](_0x4c4796(0x1be))==![])root['style'][_0x4c4796(0x1b2)](_0x4c4796(0x1c3),_0x4c4796(0x1b1));else{var tbh=$(_0x4c4796(0x1cd))[_0x4c4796(0x1c2)]()+'px';root[_0x4c4796(0x1ba)][_0x4c4796(0x1b2)](_0x4c4796(0x1c3),tbh);}
13497	}
13498	if($(".topBanner").is(":visible") == false || MPL['use-topBanner'] == 'off'){	
13499		const root = document.documentElement;
13500		root.style.setProperty('--t-b-h', '0px');
13501	}
13502});
13503
13504// topbanner action
13505function topBanner(target) {
13506	var $this = target,
13507		closeBtn = $this.find('.closeBtn');
13508
13509	closeBtn.on("click",function(){
13510		$this.slideUp();
13511	});
13512}
13513/**
13514 * 카테고리 마우스 오버 이미지
13515 * 카테고리 대,중,소,하위분류까지 출력 - 세로형
13516 * 210827 서정환 수정
13517 */
13518$(function() {		
13519	$(document).ready(function(){
13520
13521		var methods = {
13522			aCategory    : [],
13523			aSubCategory : {},
13524
13525			get: function()
13526			{
13527				 $.ajax({
13528					url : '/exec/front/Product/SubCategory',
13529					dataType: 'json',
13530					success: function(aData) {
13531
13532						if (aData == null || aData == 'undefined') return;
13533						for (var i=0; i<aData.length; i++)
13534						{
13535							var sParentCateNo = aData[i].parent_cate_no;
13536
13537							if (!methods.aSubCategory[sParentCateNo]) {
13538								methods.aSubCategory[sParentCateNo] = [];
13539							}
13540							methods.aSubCategory[sParentCateNo].push( aData[i] );
13541						}				
13542						
13543						var locationPathname = document.location.pathname,
13544						locationSearch = document.location.search,
13545						PageUrl = locationPathname + locationSearch,
13546						PageUrl = PageUrl.replace("?&","?");
13547
13548						var NowCateVal = $('.path').find('li').eq(1).children('a').attr('href');
13549						if(NowCateVal){
13550							var NowCateNo = EC_ROUTE.getCleanUrl(NowCateVal).split('/')[3];
13551						}
13552						var NowBoardVal = getQueryString('board_no');
13553						if(!NowBoardVal){
13554							var NowBoardVal = Number(methods.getParamSeo(locationPathname));
13555						}
13556						if(!NowCateNo && !NowBoardVal){
13557							var NowPageVal = $('.path').find('li').last().text();							
13558						}
13559						var currentCateChk = footerCompany = false;
13560						var $subAddTab = $("#subAddTab");
13561
13562						if($('#header .gnbMenuBox .menuCategory > li').length > 0 ){	
13563							function _0x3406(_0x3d4cf0,_0x366ec0){var _0x4b5846=_0x4b58();return _0x3406=function(_0x34067d,_0x5c6fd0){_0x34067d=_0x34067d-0xe5;var _0x53de78=_0x4b5846[_0x34067d];return _0x53de78;},_0x3406(_0x3d4cf0,_0x366ec0);}function _0x4b58(){var _0x4a1ff2=['board','101727bRGgbF','select','getParam','483uwTEyh','38860RMRENk','a[href*=\x27','length','each','924449UlWpIB','find','html','/shopinfo/company.html','addClass','subAddTab','.subCategory','978747KQsXkD','.mplAddTab','4847117WiBEat','text','append','300fCNckX','hide','show','clone','currentCategory','#subAddTab','</div></div>','hvr-overline-reveal','2KmvfVX','getParamSeo','cate_no','#header\x20.gnbMenuBox\x20.menuCategory\x20\x20>\x20li','2047818GiQHVc','36bQrCTe','<div\x20class=\x27categoryBanner\x27>','.footerLink','href','hasClass','attr','10QkcCKI','parent','div:contains(\x27_','swiper-slide','data','board_no','_\x27)','.subAddTab','children','class','>\x20div','94416tbIiZz'];_0x4b58=function(){return _0x4a1ff2;};return _0x4b58();}var _0x3d9cf7=_0x3406;(function(_0x148102,_0x4b847a){var _0x186b98=_0x3406,_0xb78534=_0x148102();while(!![]){try{var _0x42c3d2=-parseInt(_0x186b98(0x118))/0x1*(-parseInt(_0x186b98(0xf8))/0x2)+parseInt(_0x186b98(0xeb))/0x3+parseInt(_0x186b98(0x114))/0x4+-parseInt(_0x186b98(0x103))/0x5*(parseInt(_0x186b98(0xfc))/0x6)+parseInt(_0x186b98(0x113))/0x7*(-parseInt(_0x186b98(0x10e))/0x8)+parseInt(_0x186b98(0x110))/0x9*(-parseInt(_0x186b98(0xf0))/0xa)+-parseInt(_0x186b98(0xed))/0xb*(-parseInt(_0x186b98(0xfd))/0xc);if(_0x42c3d2===_0x4b847a)break;
13563else _0xb78534['push'](_0xb78534['shift']());}catch(_0x1797c9){_0xb78534['push'](_0xb78534['shift']());}}}(_0x4b58,0xb6350),$(_0x3d9cf7(0xfb))[_0x3d9cf7(0x117)](function(_0x2e4bc7){var _0x236021=_0x3d9cf7,_0x4a1fae=$(this);if(_0x4a1fae[_0x236021(0x101)]('originCategory')===!![]){var _0xc1c22e=Number(methods['getParam'](_0x4a1fae[_0x236021(0xe5)]('a')[_0x236021(0x102)](_0x236021(0x100)),_0x236021(0xfa)));!_0xc1c22e&&(_0xc1c22e=Number(methods[_0x236021(0xf9)](_0x4a1fae[_0x236021(0xe5)]('a')[_0x236021(0x102)]('href'))));if(!_0xc1c22e)return;_0xc1c22e==NowCateNo&&currentCateChk==![]&&(_0x4a1fae[_0x236021(0xe8)](_0x236021(0xf4)),currentCateChk=!![]),methods[_0x236021(0xf2)](_0x4a1fae,_0xc1c22e);}else currentCateChk==![]&&_0x4a1fae[_0x236021(0xe5)]('a')['each'](function(){var _0x112a91=_0x236021,_0x1abf52=Number(methods[_0x112a91(0x112)]($(this)[_0x112a91(0x102)]('href'),_0x112a91(0x108)));!_0x1abf52&&(_0x1abf52=Number(methods[_0x112a91(0xf9)]($(this)[_0x112a91(0x102)](_0x112a91(0x100))))),_0x1abf52!=0x0&&_0x1abf52==NowBoardVal&&(_0x4a1fae[_0x112a91(0xe8)](_0x112a91(0xf4))['attr']('data-board',NowBoardVal),$(this)[_0x112a91(0x104)]('li')[_0x112a91(0xe8)](_0x112a91(0x111))),_0x1abf52==0x0&&$(this)[_0x112a91(0xee)]()==NowPageVal&&_0x4a1fae[_0x112a91(0xe8)](_0x112a91(0xf4));});var _0x5a26ed=$('.categoryBannerArea'),_0x435cb5=_0x4a1fae['children'](_0x236021(0xea)),_0x4b0a6b=_0x435cb5[_0x236021(0x116)]>0x0?!![]:![],_0x97fd40=_0x4a1fae[_0x236021(0x10b)]('a')[_0x236021(0xee)](),_0x26de53=new Array(),_0xc7622=![];if(MPL['use-mplAddSubTab']=='on'&&_0x4a1fae[_0x236021(0x101)]('originCategory')==![]){var _0x23d8a0=_0x4a1fae[_0x236021(0x107)](_0x236021(0x10f)),_0x420cfa=_0x4a1fae['children']('a[href*=\x27'+PageUrl+'\x27]'),_0x3b20d8;_0x420cfa['length']>0x0&&PageUrl!='/'?_0x4b0a6b==!![]&&($subAddTab['addClass'](_0x236021(0xe9)+_0x2e4bc7),_0xc7622=!![]):(_0x3b20d8=_0x4a1fae[_0x236021(0xe5)]('ul')['find'](_0x236021(0x115)+PageUrl+'\x27]'),_0x3b20d8[_0x236021(0x116)]>0x0&&PageUrl!='/'&&(_0x4b0a6b==!![]&&($subAddTab[_0x236021(0xe8)](_0x236021(0xe9)+_0x2e4bc7),_0xc7622=!![]))),_0x435cb5['children']('ul')['children']('li')['children'](_0x236021(0x115)+PageUrl+'\x27]')[_0x236021(0x116)]>0x0&&PageUrl!='/'&&($subAddTab[_0x236021(0x116)]>
135630x0&&_0x4b0a6b==!![]&&(_0x26de53[_0x2e4bc7]=_0x4a1fae[_0x236021(0x10b)]('.subCategory')[_0x236021(0x10b)]('ul')[_0x236021(0x10b)]('li')[_0x236021(0xe8)](_0x236021(0x106))[_0x236021(0xf3)](),$thisAnchorCloneSelect=_0x26de53[_0x2e4bc7][_0x236021(0x10b)](_0x236021(0x115)+PageUrl+'\x27]'),$thisAnchorCloneSelect[_0x236021(0x116)]>0x0&&PageUrl!='/'&&$thisAnchorCloneSelect[_0x236021(0x104)]('li')[_0x236021(0xe8)](_0x236021(0x111)),$subAddTab[_0x236021(0x101)]('subAddTab'+_0x2e4bc7)&&($(_0x236021(0x10a)+_0x2e4bc7)['children']('ul')[_0x236021(0xef)](_0x26de53[_0x2e4bc7]),_0xc7622=!![]))),_0xc7622==![]&&(_0x4a1fae[_0x236021(0x107)](_0x236021(0x10f))==NowBoardVal&&(_0x4b0a6b==!![]&&($subAddTab[_0x236021(0xe8)]('subAddTab'+_0x2e4bc7),_0x26de53[_0x2e4bc7]=_0x4a1fae[_0x236021(0x10b)](_0x236021(0xea))['children']('ul')['children']('li')[_0x236021(0xe8)](_0x236021(0x106))[_0x236021(0xf3)](),$subAddTab[_0x236021(0x101)](_0x236021(0xe9)+_0x2e4bc7)&&($(_0x236021(0x10a)+_0x2e4bc7)[_0x236021(0x10b)]('ul')[_0x236021(0xef)](_0x26de53[_0x2e4bc7]),_0xc7622=!![])))),_0x4a1fae[_0x236021(0x10b)]('a')['attr'](_0x236021(0x100))==_0x236021(0xe7)&&(footerCompany=!![]);}if(_0x5a26ed[_0x236021(0xe5)](_0x236021(0x10d))[_0x236021(0x10b)]('div:contains(\x27_'+_0x97fd40+'_\x27)')['length']>0x0)var _0x2df7de=_0x5a26ed['find']('>\x20div')[_0x236021(0x10b)](_0x236021(0x105)+_0x97fd40+_0x236021(0x109))[_0x236021(0xe6)]();else var _0x2df7de='';_0x2df7de&&(_0x4b0a6b?_0x435cb5['append'](_0x236021(0xfe)+_0x2df7de+'</div>'):_0x4a1fae[_0x236021(0xef)]('<div\x20class=\x27subCategory\x20depth1\x27><div\x20class=\x27categoryBanner\x27>'+_0x2df7de+_0x236021(0xf6))),_0x4a1fae[_0x236021(0x102)](_0x236021(0x10c))!='tailCategory'&&_0x4a1fae['addClass'](_0x236021(0xf7));}));$(_0x3d9cf7(0xf5))['find']('li')[_0x3d9cf7(0x116)]<0x1&&$(_0x3d9cf7(0xec))['remove']();footerCompany==![]&&$(_0x3d9cf7(0xff))[_0x3d9cf7(0xe5)]('a[href=\x27/shopinfo/company.html\x27]')[_0x3d9cf7(0xf1)]();
13564						}		
13565						//모바일 좌측 전체 메뉴에 추가
13566						asideCategoryLoad();
13567						//모바일 상단 메뉴에 추가
13568						if(MPL['use-mplCategoryMobile'] == 'on'){ mCategoryLoad(); }
13569						//카테고리 슬라이드 구현
13570						$(".headerGnb .categorySlide .gnbMenuBox").categorySlide();
13571
13572					}
13573				});
13574			},
13575
13576			getParam: function(sUrl, sKey) {
13577
13578				var aUrl         = sUrl.split('?');
13579				var sQueryString = aUrl[1];
13580				var aParam       = {};
13581
13582				if (sQueryString) {
13583					var aFields = sQueryString.split("&");
13584					var aField  = [];
13585					for (var i=0; i<aFields.length; i++) {
13586						aField = aFields[i].split('=');
13587						aParam[aField[0]] = aField[1];
13588					}
13589				}
13590				return sKey ? aParam[sKey] : aParam;
13591			},
13592
13593			getParamSeo: function(sUrl) {
13594				var aUrl = EC_ROUTE.getCleanUrl(sUrl).split('/');
13595				return aUrl[3] ? aUrl[3] : null;
13596			},
13597
13598			show: function(overNode, iCateNo) {
13599				var oParentNode = overNode;
13600				var aHtml = "";
13601				var sMyCateList = localStorage.getItem("myCateList");
13602
13603				if (methods.aSubCategory[iCateNo] != undefined) {
13604					aHtml += '<div class="subCategory depth1"><ul>';
13605					$(methods.aSubCategory[iCateNo]).each(function() {
13606						var sNextParentNo = this.cate_no;
13607						var sCateSelected = (checkInArray(sMyCateList, this.cate_no) == true) ? ' selected' : '';
13608						if (methods.aSubCategory[sNextParentNo] == undefined) {
13609							aHtml += '<li id="cate'+this.cate_no+'">';
13610							var sHref = '/product/list.html'+this.param;
13611						} else {
13612							aHtml += '<li class="hasChild" id="cate'+this.cate_no+'">';
13613							var sHref = '#none';
13614						}
13615						aHtml += '<a href="/product/list.html'+this.param+'" class="view" cate="'+this.param+'" data-i18n="LIST.PRD_CATE_NO_'+this.cate_no+'" onmouseover="subMenuon(this);" data-i18n-new>'+this.name+'</a>';
13616
13617						if (methods.aSubCategory[sNextParentNo] != undefined) {
13618							aHtml += '<div class="subCategory depth2"><ul>';
13619							$(methods.aSubCategory[sNextParentNo]).each(function() {
13620								var sNextParentNo2 = this.cate_no;
13621								var sCateSelected = (checkInArray(sMyCateList, this.cate_no) == true) ? ' selected' : '';
13622								if (methods.aSubCategory[sNextParentNo2] == undefined) {
13623									aHtml += '<li id="cate'+this.cate_no+'">';
13624									var sHref = '/product/list.html'+this.param;
13625								} else {
13626									aHtml += '<li class="hasChild" id="cate'+this.cate_no+'">';
13627									var sHref = '#none';
13628								}
13629								aHtml += '<a href="/product/list.html'+this.param+'" class="view" cate="'+this.param+'" data-i18n="LIST.PRD_CATE_NO_'+this.cate_no+'" onmouseover="subMenuon(this);" data-i18n-new>'+this.name+'</a>';
13630
13631								if (methods.aSubCategory[sNextParentNo2] != undefined) {
13632									aHtml += '<div class="subCategory depth3"><ul>';
13633
13634									$(methods.aSubCategory[sNextParentNo2]).each(function() {
13635										aHtml += '<li id="cate'+this.cate_no+'">';
13636										var sCateSelected = (checkInArray(sMyCateList, this.cate_no) == true) ? ' selected' : '';
13637										aHtml += '<a href="/product/list.html'+this.param+'" class="view" cate="'+this.param+'" onmouseover="subMenuon(this);" data-i18n="LIST.PRD_CATE_NO_'+this.cate_no+'" data-i18n-new>'+this.name+'</a>';
13638										aHtml += '</li>';
13639									});
13640									aHtml += '</ul></div><button class="categoryMore"></button>';
13641								}
13642
13643								aHtml += '</li>';
13644							});
13645							aHtml += '</ul></div><button class="categoryMore"></button>';
13646						}
13647						aHtml += '</li>';
13648					});
13649					aHtml += '</ul></div><button class="categoryMore"></button>';
13650				}
13651
13652				$(oParentNode).append(aHtml);				
13653				
13654				if (window.i18nextCafe24) {
13655					i18nextCafe24.translate('data-i18n-new');
13656				}
13657			},
13658
13659			close: function(e) {
13660				e.find('.subCategory').remove();
13661			}
13662		};
13663
13664		methods.get();	
13665				
13666		/* 서브 카테고리 네비 슬라이드 */
13667		var _0x30afdb=_0x5a02;(function(_0x2b3847,_0x49f4c5){var _0x7b6c74=_0x5a02,_0x5459a7=_0x2b3847();while(!![]){try{var _0xa3dc12=parseInt(_0x7b6c74(0x206))/0x1+-parseInt(_0x7b6c74(0x200))/0x2+parseInt(_0x7b6c74(0x1f1))/0x3+-parseInt(_0x7b6c74(0x207))/0x4+parseInt(_0x7b6c74(0x1fa))/0x5+parseInt(_0x7b6c74(0x1f4))/0x6*(parseInt(_0x7b6c74(0x214))/0x7)+parseInt(_0x7b6c74(0x201))/0x8;if(_0xa3dc12===_0x49f4c5)break;else _0x5459a7['push'](_0x5459a7['shift']());}catch(_0x54a56c){_0x5459a7['push'](_0x5459a7['shift']());}}}(_0x2f2d,0x9a7e6));$(_0x30afdb(0x1f6))['children'](_0x30afdb(0x20d))['length']>0x0&&$(_0x30afdb(0x202))[_0x30afdb(0x215)](_0x30afdb(0x20d))[_0x30afdb(0x20e)]('ul')[_0x30afdb(0x20e)]('li')[_0x30afdb(0x1f5)](_0x30afdb(0x217));$(_0x30afdb(0x1fe))[_0x30afdb(0x215)](_0x30afdb(0x20d))[_0x30afdb(0x1f7)]>0x0&&$(_0x30afdb(0x216))[_0x30afdb(0x215)]('li.selected')[_0x30afdb(0x1fc)]('ul')[_0x30afdb(0x1fc)]('li')[_0x30afdb(0x1f5)](_0x30afdb(0x217));$('.subPrdMenuCategory:not(.SupplyListMenu)\x20ul.depth0')['children'](_0x30afdb(0x20d))[_0x30afdb(0x1f7)]>0x0&&($('.subPrdMenuCategory\x20ul.depth0')[_0x30afdb(0x215)](_0x30afdb(0x20d))[_0x30afdb(0x215)]('ul.depth1')[_0x30afdb(0x203)]()!=''&&$(_0x30afdb(0x211))['append'](_0x30afdb(0x204)+$(_0x30afdb(0x1fb))[_0x30afdb(0x215)]('li.selected')[_0x30afdb(0x215)](_0x30afdb(0x20b))[_0x30afdb(0x203)]()+_0x30afdb(0x213)));$('.subPrdMenuCategory:not(.SupplyListMenu)\x20ul.depth1')[_0x30afdb(0x215)](_0x30afdb(0x20d))[_0x30afdb(0x1f7)]>0x0&&($('.subPrdMenuCategory\x20ul.depth1')[_0x30afdb(0x215)]('li.selected')[_0x30afdb(0x215)]('ul.depth2')['html']()!=''&&$(_0x30afdb(0x1fd))[_0x30afdb(0x209)](_0x30afdb(0x204)+$(_0x30afdb(0x202))[_0x30afdb(0x215)]('li.selected')[_0x30afdb(0x215)](_0x30afdb(0x210))['html']()+_0x30afdb(0x213)));if($(_0x30afdb(0x1ff))[_0x30afdb(0x1f7)]>0x0){var list_category=new Swiper(_0x30afdb(0x1f8),{'slidesPerView':'auto','spaceBetween':0x0}),eq=$(_0x30afdb(0x1f8))[_0x30afdb(0x212)](_0x30afdb(0x20c))[_0x30afdb(0x20e)]('.swiper-slide')[_0x30afdb(0x1f9)]();eq>
13667=0x0&&list_category[_0x30afdb(0x20a)](eq,0xc8,![]);}function _0x2f2d(){var _0x55101e=['.subPrdMenuCategory:not(.SupplyListMenu)\x20ul.depth0','.mplTab','1658556hSDfoo','addClass','.subPrdMenuCategory:not(.SupplyListMenu)\x20ul.depth1','length','.subPrdMenuCategory','index','3131520ibMMGy','.subPrdMenuCategory\x20ul.depth0','parents','.list_item_sub_category.depth2','.subPrdMenuCategory:not(.SupplyListMenu)\x20ul.depth2','.subPrdMenuCategory:not(.SupplyListMenu)','1291988lkpFLO','3944904UybgeS','.subPrdMenuCategory\x20ul.depth1','html','<ul\x20class=\x27swiper-wrapper\x20justify\x27>','auto','97580roYrvp','1599520uIHNKd','.swiper-slide','append','slideTo','ul.depth1','.select','li.selected','parent','.mplAddSubTab','ul.depth2','.list_item_sub_category.depth1','find','</ul>','7boJRgo','children','.subPrdMenuCategory\x20ul.depth2','selected','555771pEfSJx'];_0x2f2d=function(){return _0x55101e;};return _0x2f2d();}if($(_0x30afdb(0x1f2))[_0x30afdb(0x215)](_0x30afdb(0x20d))[_0x30afdb(0x1f7)]>0x0){var list_category_sub1=new Swiper(_0x30afdb(0x211),{'slidesPerView':_0x30afdb(0x205),'spaceBetween':0x0}),eq=$(_0x30afdb(0x211))[_0x30afdb(0x212)](_0x30afdb(0x20c))[_0x30afdb(0x20e)](_0x30afdb(0x208))[_0x30afdb(0x1f9)]();eq>=0x0&&list_category_sub1['slideTo'](eq,0xc8,![]);}if($(_0x30afdb(0x1f6))['children'](_0x30afdb(0x20d))[_0x30afdb(0x1f7)]>0x0){var list_category_sub2=new Swiper(_0x30afdb(0x1fd),{'slidesPerView':'auto','spaceBetween':0x0}),eq=$('.list_item_sub_category.depth2')[_0x30afdb(0x212)](_0x30afdb(0x20c))[_0x30afdb(0x20e)](_0x30afdb(0x208))[_0x30afdb(0x1f9)]();eq>=0x0&&list_category_sub2[_0x30afdb(0x20a)](eq,0xc8,![]);}function _0x5a02(_0x1c4027,_0x8b904d){var _0x2f2d63=_0x2f2d();return _0x5a02=function(_0x5a0290,_0x28267c){_0x5a0290=_0x5a0290-0x1f1;var _0x2c16ee=_0x2f2d63[_0x5a0290];return _0x2c16ee;},_0x5a02(_0x1c4027,_0x8b904d);}if($(_0x30afdb(0x1f3))[_0x30afdb(0x1f7)]>0x0){var list_tab=new Swiper(_0x30afdb(0x1f3),{'slidesPerView':_0x30afdb(0x205),'spaceBetween':0x0}),eq=$(_0x30afdb(0x1f3))[_0x30afdb(0x212)](_0x30afdb(0x20c))[_0x30afdb(0x1f9)]();eq>=0x0&&list_tab[_0x30afdb(0x20a)](eq,0xc8,![]);}if($(_0x30afdb(0x20f))[_0x30afdb(0x1f7)]>0x0){var list_tab2=new Swiper('.mplAddSubTab',{'slidesPerView':_0x30afdb(0x205),'spaceBetween':0x0}),eq=$(_0x30afdb(0x20f))[_0x30afdb(0x212)](_0x30afdb(0x20c))[_0x30afdb(0x1f9)]();eq>=0x0&&list_tab2[_0x30afdb(0x20a)](eq,0xc8,![]);}
13668	});
13669});
13670
13671$(window).on( "resize", function() { listItemCatePisi();} );
13672
13673function subMenuon(obj) {
13674	$(obj).parent().find('li').removeClass('on');
13675	$(obj).parent().addClass('on');
13676	$(obj).parent().siblings().removeClass("on");
13677}
13678
13679function checkInArray(sBookmarkList, iCateNo) {
13680    if (sBookmarkList == null) return false;
13681    var aBookmarkList = sBookmarkList.split("|");
13682    for (var i = 0; i < aBookmarkList.length; i++) {
13683        if (aBookmarkList[i] == iCateNo) {
13684            return true;
13685        }
13686    }
13687    return false;
13688}
13689
13690//모바일 좌측 전체 메뉴에 추가
13691function asideCategoryLoad(){	
13692	$(".asideCategory").html($(".headerGnb").find(".categorySlide").html());
13693
13694	var $aside = $("#aside"),
13695		$categoryMore = $aside.find(".categoryMore"),
13696		$closeBtn = $aside.find(".asideClose"),
13697		$asideDim = $("#asideDim"),
13698		$asideBtn = $(".asideBtn"),
13699		$categoryAllBtn = $(".categoryAllBtn"),
13700		$displayEventGroup = $asideDim.add($closeBtn).add($asideBtn).add($categoryAllBtn).add($('.m_mobile_bottom_fixed .abtn1'));
13701
13702	var display  = function(){
13703		var windowWidth = $( window ).width();
13704
13705		if( windowWidth > 1024){
13706			$aside.removeClass("nowShow");
13707		}
13708	};
13709
13710	$categoryMore.on('click', function(){
13711		var $this = $(this),
13712			$thisParent = $this.parent(),
13713			$thisChild = $this.siblings(".subCategory");
13714
13715		if( !$thisChild.is(':animated') ) {
13716			$thisChild.stop(true,true).slideToggle("fast",function(){
13717				$thisParent.toggleClass("nowShow");	
13718			});
13719		}
13720	});
13721
13722	$displayEventGroup.on('click', function(){
13723		$("body").toggleClass("overflowH");
13724		$aside.toggleClass("nowShow");
13725	});
13726}
13727//모바일 상단메뉴 추가
13728function mCategoryLoad(){
13729	$(".mplCategoryMobile").html($(".headerGnb").find(".categorySlide").html());
13730
13731	var $McategoryContainer = $(".mplCategoryMobile .gnbMenuBox .menuCategory");		
13732	$McategoryContainer.addClass('swiper-wrapper');
13733	$McategoryContainer.children("li").addClass('swiper-slide');
13734
13735	var top_gnb = new Swiper('.mplCategoryMobile .gnbMenuBox', {
13736		slidesPerView: 'auto',
13737		spaceBetween: 0,
13738		slideToClickedSlide : false,
13739	});
13740	
13741	var eq = $('.mplCategoryMobile .gnbMenuBox .menuCategory').find('.currentCategory').index();
13742	if(eq >= 0){
13743		top_gnb.slideTo(eq, 200, false);
13744	}
13745}
13746
13747function listItemCatePisi(){
13748	function _0x49bf(_0x345c27,_0x2346ea){var _0x5d2aab=_0x5d2a();
13748return _0x49bf=function(_0x49bf81,_0x17c308){_0x49bf81=_0x49bf81-0x12d;var _0x565566=_0x5d2aab[_0x49bf81];return _0x565566;},_0x49bf(_0x345c27,_0x2346ea);}var _0x307ce5=_0x49bf;(function(_0x343b9a,_0x571021){var _0x13d055=_0x49bf,_0x3b5afd=_0x343b9a();while(!![]){try{var _0x360223=-parseInt(_0x13d055(0x138))/0x1+parseInt(_0x13d055(0x13d))/0x2+parseInt(_0x13d055(0x13a))/0x3*(parseInt(_0x13d055(0x147))/0x4)+parseInt(_0x13d055(0x12f))/0x5*(parseInt(_0x13d055(0x133))/0x6)+parseInt(_0x13d055(0x131))/0x7+parseInt(_0x13d055(0x146))/0x8+parseInt(_0x13d055(0x13e))/0x9*(-parseInt(_0x13d055(0x13c))/0xa);if(_0x360223===_0x571021)break;else _0x3b5afd['push'](_0x3b5afd['shift']());}catch(_0x399ec3){_0x3b5afd['push'](_0x3b5afd['shift']());}}}(_0x5d2a,0xded02));var WinWidth=$(window)[_0x307ce5(0x12d)](),containerWidth=$(_0x307ce5(0x142))['width']();WinWidth>=containerWidth&&(WinWidth=containerWidth);if($(_0x307ce5(0x130))[_0x307ce5(0x13f)]>0x0){var Item_totalWidth=0x0;$(_0x307ce5(0x141))[_0x307ce5(0x143)]('.swiper-wrapper')[_0x307ce5(0x143)](_0x307ce5(0x132))[_0x307ce5(0x145)](function(){var _0x1d7108=_0x307ce5;Item_totalWidth+=$(this)[_0x1d7108(0x140)](!![]);}),WinWidth<Item_totalWidth?$('.subPrdMenuCategory')[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x134)](_0x307ce5(0x136)):$('.subPrdMenuCategory')[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x12e)](_0x307ce5(0x136));}if($(_0x307ce5(0x13b))[_0x307ce5(0x13f)]>0x0){var ItemSub1_totalWidth=0x0;$('.list_item_sub_category.depth1')[_0x307ce5(0x143)](_0x307ce5(0x137))['children']('.swiper-slide')[_0x307ce5(0x145)](function(){ItemSub1_totalWidth+=$(this)['outerWidth'](!![]);}),WinWidth<ItemSub1_totalWidth?$(_0x307ce5(0x13b))[_0x307ce5(0x143)]('.swiper-wrapper')['removeClass'](_0x307ce5(0x136)):$('.list_item_sub_category.depth1')[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x12e)](_0x307ce5(0x136));}if($('.list_item_sub_category.depth2')[_0x307ce5(0x13f)]>0x0){var ItemSub2_totalWidth=0x0;$(_0x307ce5(0x139))[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x143)](_0x307ce5(0x132))[_0x307ce5(0x145)](function(){var _0x17383f=_0x307ce5;ItemSub2_totalWidth+=$(this)[_0x17383f(0x140)](!![]);}),WinWidth<ItemSub2_totalWidth?$(_0x307ce5(0x139))[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x134)](_0x307ce5(0x136)):$(_0x307ce5(0x139))[_0x307ce5(0x143)](_0x307ce5(0x137))['addClass'](_0x307ce5(0x136));}function _0x5d2a(){var _0x2dc376=['justify','.swiper-wrapper','218052uenXDE','.list_item_sub_category.depth2','4215168wswQVp','.list_item_sub_category.depth1','10CEJivG','1200700AsNofq','34071966kJJKAY','length','outerWidth','.subPrdMenuCategory','#container','children','.mplAddSubTab','each','9972432nretvi','4HmUzLE','width','addClass','5EUFEXU','.subPrdMenuCategory:not(.SupplyListMenu)','3271541OzffCL','.swiper-slide','7182870hXMxRN','removeClass','.mplTab'];_0x5d2a=function(){return _0x2dc376;};return _0x5d2a();}if($(_0x307ce5(0x135))[_0x307ce5(0x13f)]>0x0){var mplTabItem_totalWidth=0x0;$(_0x307ce5(0x135))[_0x307ce5(0x143)]('.swiper-wrapper')[_0x307ce5(0x143)](_0x307ce5(0x132))['each'](function(){mplTabItem_totalWidth+=$(this)['outerWidth'](!![]);}),WinWidth<mplTabItem_totalWidth?$(_0x307ce5(0x135))['children'](_0x307ce5(0x137))[_0x307ce5(0x134)](_0x307ce5(0x136)):$('.mplTab')[_0x307ce5(0x143)]('.swiper-wrapper')[_0x307ce5(0x12e)]('justify');}if($(_0x307ce5(0x144))['length']>0x0){var mplAddTabItem_totalWidth=0x0;$('.mplAddSubTab')[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x143)](_0x307ce5(0x132))[_0x307ce5(0x145)](function(){var _0xbe9fa=_0x307ce5;mplAddTabItem_totalWidth+=$(this)[_0xbe9fa(0x140)](!![]);}),WinWidth<mplAddTabItem_totalWidth?$('.mplAddSubTab')[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x134)](_0x307ce5(0x136)):$(_0x307ce5(0x144))[_0x307ce5(0x143)](_0x307ce5(0x137))[_0x307ce5(0x12e)](_0x307ce5(0x136));}
13749}
13750! function(h) {
13751    var _0x146f2d=_0x17ff;function _0x17ff(_0x48fc88,_0x5f3023){var _0x4de950=_0x4de9();return _0x17ff=function(_0x17ffb7,_0xc936f2){_0x17ffb7=_0x17ffb7-0x11f;var _0x327db3=_0x4de950[_0x17ffb7];return _0x327db3;},_0x17ff(_0x48fc88,_0x5f3023);}function _0x4de9(){var _0x1cfc8c=['noArrow','<div></div>','push','1eGpgjt','<button\x20type=\x22button\x22\x20class=\x22gnbNext\x22\x20aria-label=\x22
13751Next\x22>Next</button>','2239400msggFl','57678JiilKV','7001060aZckcN','setup','html','prepend','click','addClass','disabled','visible','.menuCategory','children','preventDefault','28553PIpaqc','249530OcjTGn','56XXPtia','each','length','append','attr','prevArrow','644158iigykc','update','prev','width','next','removeClass','change','<button\x20type=\x22button\x22\x20class=\x22gnbPrev\x22\x20aria-label=\x22Previous\x22>Previous</button>','bind','387ETPXrA','find','categorySlide','3302965ptNVtH','innerWidth','extend','474OPjilM','resize\x20orientationchange\x20focus'];_0x4de9=function(){return _0x1cfc8c;};return _0x4de9();}(function(_0x5c6627,_0x29cbdf){var _0x3e53d6=_0x17ff,_0x4f4422=_0x5c6627();while(!![]){try{var _0x8c9151=parseInt(_0x3e53d6(0x133))/0x1*(-parseInt(_0x3e53d6(0x11f))/0x2)+parseInt(_0x3e53d6(0x136))/0x3*(-parseInt(_0x3e53d6(0x144))/0x4)+parseInt(_0x3e53d6(0x12b))/0x5+-parseInt(_0x3e53d6(0x12e))/0x6*(-parseInt(_0x3e53d6(0x142))/0x7)+-parseInt(_0x3e53d6(0x135))/0x8+-parseInt(_0x3e53d6(0x128))/0x9*(-parseInt(_0x3e53d6(0x143))/0xa)+-parseInt(_0x3e53d6(0x137))/0xb;if(_0x8c9151===_0x29cbdf)break;else _0x4f4422['push'](_0x4f4422['shift']());}catch(_0x43d68e){_0x4f4422['push'](_0x4f4422['shift']());}}}(_0x4de9,0x85d59),h['fn'][_0x146f2d(0x12a)]=function(_0x543fe9){var _0x58d056=_0x146f2d,_0x2897de=h[_0x58d056(0x12d)]({},{'speed':0x12c,'prevArrow':_0x58d056(0x126),'nextArrow':_0x58d056(0x134)},_0x543fe9);return this[_0x58d056(0x145)](function(){var _0x1c4a2c=_0x58d056,_0x57c4db=h(this),_0x293aa5=_0x57c4db[_0x1c4a2c(0x129)](_0x1c4a2c(0x13f)),_0x42d480=_0x293aa5['children']('li'),_0x3c5134=h(_0x2897de[_0x1c4a2c(0x149)],_0x57c4db),_0x332750=h(_0x2897de['nextArrow'],_0x57c4db),_0x56c80a=_0x42d480[_0x1c4a2c(0x146)],_0x43df25=parseInt(0x0,0xa),_0x524300=new Array(),_0x23915c=new Array(),_0x1a7d55=new Array(),_0x4340b7={'setup':function(){var _0x83
137510cd7=_0x1c4a2c;_0x42d480[_0x830cd7(0x145)](function(){var _0x1a78d4=_0x830cd7,_0x5dfe99=h(this),_0x3c28af=h(_0x1a78d4(0x131))[_0x1a78d4(0x147)](_0x5dfe99['clone']())['html'](),_0x398852=_0x5dfe99[_0x1a78d4(0x12c)]();_0x23915c[_0x1a78d4(0x132)](_0x3c28af),_0x1a7d55[_0x1a78d4(0x132)](_0x398852);}),_0x4340b7[_0x830cd7(0x120)](),_0x293aa5['html'](_0x524300[0x0]);},'update':function(){var _0x4fb363=_0x1c4a2c,_0x569520=_0x293aa5[_0x4fb363(0x122)]()-0xa,_0x721b76=0x0,_0x5251b6=0x0;_0x524300=new Array(),h[_0x4fb363(0x145)](_0x1a7d55,function(_0x4255b3,_0x104c5){var _0x2785a8=_0x4fb363,_0x3edbd1=_0x104c5,_0x561d1e=_0x4255b3;0x0==_0x3edbd1&&(_0x1a7d55[_0x4255b3]=_0x293aa5[_0x2785a8(0x140)]('li')['eq'](_0x4255b3)['innerWidth'](),_0x3edbd1=_0x1a7d55[_0x4255b3]),_0x569520<(_0x5251b6+=_0x3edbd1)&&(_0x721b76++,_0x5251b6=0x0,_0x5251b6+=_0x3edbd1),_0x524300[_0x721b76]||(_0x524300[_0x721b76]=''),_0x524300[_0x721b76]+=_0x23915c[_0x561d1e];}),_0x56c80a=_0x721b76;},'change':function(){var _0x118a99=_0x1c4a2c;_0x293aa5[_0x118a99(0x139)](_0x524300[_0x43df25]),_0x2987b8['update']();}},_0x2987b8={'setup':function(){var _0x4fbedb=_0x1c4a2c;_0x57c4db[_0x4fbedb(0x13a)](_0x3c5134)[_0x4fbedb(0x147)](_0x332750),_0x3c5134[_0x4fbedb(0x127)]('click',function(_0x1a0381){var _0x4cc79a=_0x4fbedb;_0x1a0381[_0x4cc79a(0x141)](),_0x2987b8['stateCheck'](_0x4cc79a(0x121))&&(--_0x43df25,_0x4340b7['change']());}),_0x332750['bind'](_0x4fbedb(0x13b),function(_0x5d6f61){var _0x205316=_0x4fbedb;_0x5d6f61[_0x205316(0x141)](),_0x2987b8['stateCheck'](_0x205316(0x123))&&(_0x43df25+=0x1,_0x4340b7[_0x205316(0x125)]());});},'stateCheck':function(_0x588d34){var _0x5bf777=_0x1c4a2c,_0x271adb;return _0x5bf777(0x121)==_0x588d34?_0x271adb=0x0!=_0x43df25:_0x5bf777(0x123)==_0x588d34&&(_0x271adb=_0x43df25!=_0x56c80a),_0x271adb;},'update':function(){var _0x13c586=_0x1c4a2c;0x0==_0x43df25?_0x3c5134['attr']('disabled',!0x0):_0x3c5134[_0x13c586(0x148)](_0x13c586(0x13d),!0x1),_0x43df25==_0x56c80a?_0x332750['attr'](_0x13c586(0x13d),!0x0):_0x332750[_0x13c586(0x148)](_0x13c586(0x13d),!0x1),0x0==_0x43df25&&_0x43df25==_0x56c80a?(_0x3c5134[_0x13c586(0x13c)]('noArrow'),_0x332750[_0x13c586(0x13c)](_0x13c586(0x130))):(_0x3c5134[_0x13c586(0x124)]('noArrow'),_0x332750['removeClass'](_0x13c586(0x130)));}};_0x4340b7['setup'](),_0x2987b8[_0x1c4a2c(0x138)](),_0x2987b8[_0x1c4a2c(0x120)](),_0x293aa5['css']('overflow',_0x1c4a2c(0x13e)),h(window)[_0x1c4a2c(0x127)](_0x1c4a2c(0x12f),function(){var _0xee50e3=_0x1c4a2c;_0x43df25=0x0,_0x4340b7[_0xee50e3(0x120)](),_0x4340b7[_0xee50e3(0x125)]();});});});
13752}(jQuery);
13753$(function() {
13754	if($(".rank_item_box").find("a").length < 2){
13755		$(".innerBox2").hide();
13756	}
13757	$('.headerSearch, .m_mobile_bottom_fixed .abtn2').click(function(){ $('.searchLayer').toggleClass('active'); $('body').toggleClass('overflowH'); });
13758	$('.TopSeacrhLayerClose, #searchLayerDim').click(function(){ $('.searchLayer').removeClass('active'); $('body').removeClass('overflowH'); });
13759
13760});
13761$(function(){
13762	const _0x2b1262=_0xff68;(function(_0x304285,_0x432e19){const _0x3fb758=_0xff68,_0x3e931c=_0x304285();while(!![]){try{const _0x70846e=parseInt(_0x3fb758(0x7d))/0x1*(parseInt(_0x3fb758(0x85))/0x2)+-parseInt(_0x3fb758(0x91))/0x3+parseInt(_0x3fb758(0x84))/0x4*(-parseInt(_0x3fb758(0x8b))/0x5)+parseInt(_0x3fb758(0x90))/0x6*(parseInt(_0x3fb758(0x8f))/0x7)+-parseInt(_0x3fb758(0x92))/0x8*(parseInt(_0x3fb758(0x87))/0x9)+parseInt(_0x3fb758(0x80))/0xa+parseInt(_0x3fb758(0x88))/0xb;if(_0x70846e===_0x432e19)break;else _0x3e931c['push'](_0x3e931c['shift']());}catch(_0x33d0f9){_0x3e931c['push'](_0x3e931c['shift']());}}}(_0x5a66,0x23ce8));let NofixedArray=[_0x2b1262(0x8e),_0x2b1262(0x8a)];function _0x5a66(){const _0x4d1e40=['2XeBhJf','remove','18ykNlNz','2045362wxopNj','pathname','order','21410lbShzT','.m_mobile_bottom_fixed_box','set-m_mobile_bottom_fixed_type','product','924PrSkkm','11766giCndT','712344FxkYFY','223976pYydCk','57667qMvpXB','resize','includes','1046430Eaprrq','.m_mobile_bottom_fixed','use-m_mobile_bottom_fixed_box','addClass','156DbBKOt'];_0x5a66=function(){return _0x4d1e40;};return _0x5a66();}function _0xff68(_0x467b9e,_0x4905ce){const _0x5a66ec=_0x5a66();return _0xff68=function(_0xff684d,_0x284ccf){_0xff684d=_0xff684d-0x7d;let _0x23f233=_0x5a66ec[_0xff684d];return _0x23f233;},_0xff68(_0x467b9e,_0x4905ce);}var Nofixed=EC_ROUTE['getCleanUrl'](document['location'][_0x2b1262(0x89)])['split']('/')[0x1];NofixedArray[_0x2b1262(0x7f)](Nofixed)==![]?(fixed_use(MPL[_0x2b1262(0x82)]),MPL[_0x2b1262(0x82)]&&$(_0x2b1262(0x81))[_0x2b1262(0x83)](MPL[_0x2b1262(0x8d)]),$(window)['on'](_0x2b1262(0x7e),function(){const _0x18972=_0x2b1262;fixed_use(MPL[_0x18972(0x82)]);})):$(_0x2b1262(0x8c))[_0x2b1262(0x83)](_0x2b1262(0x86));
13763});
13764
13765function fixed_use(m_mobile_bottom_fixed_use){
13766	if(m_mobile_bottom_fixed_use == 'on'){
13767		if($(window).width() > 1024){
13768			$('.m_mobile_bottom_fixed_box').addClass('remove');
13769			$('#footer').removeClass('bottomFixed');
13770		}else{			
13771			$('.m_mobile_bottom_fixed_box').removeClass('remove');
13772			$('#footer').addClass('bottomFixed');
13773		}
13774	}else{
13775		$('.m_mobile_bottom_fixed_box').addClass('remove');
13776	}
13777};
13778$(function() {	
13779   $(document).ready(function(){
13780		var _0x374ca0=_0x3a78;function _0x1ff8(){var _0x1b6ecb=['$(\x27#MPL_introPopDim\x27).hide()','526675ZSsksR','set-introPop','remove','#MPL_introPopDim,.MPL_introPopInner','addClass','nowShow','cookie','29052WVxDqR','click','.swiper-slide','auto','997704npRcHk','mouseover','length','61892knwRxp','stop','7552096NGAiSq','.MPL_introPopInner\x20.swiper-pagination','#MPL_introPopDim','4ebkNBl','autoplay','find','.MPL_introPopInner\x20.swiper-slide','destroy','MPL_introPopDim','1310WiQrWy','true','img','mouseout','912567AuwCoB','7707goTZBw','6084ZmSkyr'];_0x1ff8=function(){return _0x1b6ecb;};return _0x1ff8();}function _0x3a78(_0x328f79,_0x2e7c53){var _0x1ff81a=_0x1ff8();return _0x3a78=function(_0x3a789a,_0x274802){_0x3a789a=_0x3a789a-0x161;var _0x57ab7d=_0x1ff81a[_0x3a789a];return _0x57ab7d;},_0x3a78(_0x328f79,_0x2e7c53);}(function(_0x207d5b,_0x2e4306){var _0x4a8c49=_0x3a78,_0x20db51=_0x207d5b();while(!![]){try{var _0x569b67=parseInt(_0x4a8c49(0x172))/0x1+-parseInt(_0x4a8c49(0x17a))/0x2*(parseInt(_0x4a8c49(0x163))/0x3)+-parseInt(_0x4a8c49(0x175))/0x4+parseInt(_0x4a8c49(0x167))/0x5+-parseInt(_0x4a8c49(0x165))/0x6*(parseInt(_0x4a8c49(0x164))/0x7)+parseInt(_0x4a8c49(0x177))/0x8+-parseInt(_0x4a8c49(0x16e))/0x9*(-parseInt(_0x4a8c49(0x180))/0xa);if(_0x569b67===_0x2e4306)break;
13780else _0x20db51['push'](_0x20db51['shift']());}catch(_0x4638ce){_0x20db51['push'](_0x20db51['shift']());}}}(_0x1ff8,0xb2236));if($(_0x374ca0(0x179))['find'](_0x374ca0(0x170))[_0x374ca0(0x17c)](_0x374ca0(0x161))[_0x374ca0(0x174)]>0x0){var useintroPop=![];MPL[_0x374ca0(0x168)]=='on'&&(useintroPop=!![]);var MPL_introPopCookie=$[_0x374ca0(0x16d)](_0x374ca0(0x17f));if(useintroPop==!![]){if(MPL_introPopCookie!=_0x374ca0(0x181)){$(_0x374ca0(0x16a))[_0x374ca0(0x16b)](_0x374ca0(0x16c));const introPopSwiper=new Swiper('.MPL_introPopInner',{'autoplay':{'delay':0xfa0,'disableOnInteraction':![]},'loop':!![],'speed':0x3e8,'slidesPerView':_0x374ca0(0x171),'spaceBetween':0x0,'watchOverflow':!![],'pagination':{'el':_0x374ca0(0x178),'clickable':!![]}});$('.MPL_introPopInner\x20.swiper-slide')['on'](_0x374ca0(0x173),function(){var _0x2a6a7c=_0x374ca0;introPopSwiper[_0x2a6a7c(0x17b)][_0x2a6a7c(0x176)]();}),$(_0x374ca0(0x17d))['on'](_0x374ca0(0x162),function(){var _0x5a60f0=_0x374ca0;introPopSwiper[_0x5a60f0(0x17b)]['start']();}),$('.MPL_introPopCloseBtn,\x20.MPL_overlay')[_0x374ca0(0x16f)](function(){var _0x3fc197=_0x374ca0;setTimeout(_0x3fc197(0x166)),introPopSwiper[_0x3fc197(0x17e)]();});}}else $(_0x374ca0(0x179))[_0x374ca0(0x169)]();}else $('#MPL_introPopDim')[_0x374ca0(0x169)]();
13781    });
13782});
13783
13784! function(f) {
13785    function _0xdfaa(){var _0x271a96=['show','expires=','769520MinboN','location','=([^;]*)(;|$)','bottomSpace','img',';path=/','4tRzpig','startState',':animated','remove','slideUp','getTime','operation','bottom','width','_bottomBanner','421547ztJRkH','1781381DSBcXK','visible','toUTCString','duration','2539342RhiUIa','75246uzGqmA','.bottomBannerShowBtn','setCookie','mobileUse','hostname','length','css','find','each','startInterval','bottomBanner','(^|;)\x20?','hide','height','slideDown','resize','.bottomBannerContainer','4668399vxRPmI','animate','305UuAmRt','cookie','match','32DwGZtQ','.bottomBanneCloseBtn','99CvdFSV','.bottomBannerImage','695535gbokzH'];_0xdfaa=function(){return _0x271a96;};return _0xdfaa();}var _0x3f9349=_0x501d;function _0x501d(_0x29a231,_0x129568){var _0xdfaa18=_0xdfaa();return _0x501d=function(_0x501d24,_0x577b64){_0x501d24=_0x501d24-0xf1;var _0x4c8b60=_0xdfaa18[_0x501d24];return _0x4c8b60;},_0x501d(_0x29a231,_0x129568);}(function(_0x2b91ae,_0x154eb3){var _0x4fc38c=_0x501d,_0x5d4807=_0x2b91ae();while(!![]){try{var _0x3fc77b=-parseInt(_0x4fc38c(0xf5))/0x1+parseInt(_0x4fc38c(0xfa))/0x2+-parseInt(_0x4fc38c(0x115))/0x3*(parseInt(_0x4fc38c(0x11e))/0x4)+-parseInt(_0x4fc38c(0x10e))/0x5*(parseInt(_0x4fc38c(0xfb))/0x6)+-parseInt(_0x4fc38c(0xf6))/0x7*(-parseInt(_0x4fc38c(0x111))/0x8)+parseInt(_0x4fc38c(0x10c))/0x9+parseInt(_0x4fc38c(0x118))/0xa*(-parseInt(_0x4fc38c(0x113))/0xb);if(_0x3fc77b===_0x154eb3)break;else _0x5d4807['push'](_0x5d4807['shift']());}catch(_0x132285){_0x5d4807['push'](_0x5d4807['shift']());}}}(_0xdfaa,0xa9c39),f['fn'][_0x3f9349(0x105)]=function(_0x28c1ed){var _0x137362=_0x3f9349,_0x9047a1=f['extend']({},{'operation':!0x0,'mobileUse':!0x0,'startState':_0x137362(0x116),'duration':0x2bc,'startInterval':0x9c4,'bottom':0x14,'bottomSpace':0x1e},_0x28c1ed);return this[_0x137362(0x103)](function(){var _0x27d38e=_0x137362,_0x44c96f=f(this),_0x3b2d7b=_0x44c96f[_0x27d38e(0x102)](_0x27d38e(0xfc)),_0xa02574=_0x44c96f['find'](_0x27d38e(0x112)),_0x18b8de=_0x44c96f[_0x27d38e(0x102)](_0x27d38e(0x10b)),_0x2384e3=_0x18b8de[_0x27d38e(0x102)](_0x27d38e(0x114)),_0x5068e2=_0x2384e3[_0x27d38e(0x102)]('.imageContents'),_0x2d5931=_0x5068e2[_0x27d38e(0x102)](_0x27d38e(0x11c)),_0x1cc13c=_0x2d5931[_0x27d38e(0xf3)](),_0x487911=$(window)[_0x27d38e(0xf3)](),_0x599967=_0x2d5931[_0x27d38e(0x108)]()+_0x9047a1[_0x27d38e(0x11b)],_0x185e83=window[_0x27d38e(0x119)][_0x27d38e(0xff)]+_0x27d38e(0xf4),_0x30cec5={'getCookie':function(){var _0x2a4cb5=_0x27d38e,_0x22bc33=document[_0x2a4cb5(0x10f)][_0x2a4cb5(0x110)](_0x2a4cb5(0x106)+_0x185e83+_0x2a4cb5(0x11a));return _0x22bc33?_0x22bc33[0x2]:null;},'setCookie':function(_0xed18d8){var _0x348699=_0x27d38e,_0x55cc6d,_0x57ad6c=_0xed18d8,_0xf7273d=new Date();_0xf7273d['setTime'](_0xf7273d[_0x348699(0x123)]()+0x240c8400),_0x55cc6d=_0x348699(0x117)+_0xf7273d[_0x348699(0xf8)](),document['cookie']=_0x185e83+'='+_0x57ad6c+';'+_0x55cc6d+_0x348699(0x11d);}},_0x3b7130={'show':function(){var _0x23fe5b=_0x27d38e;_0x18b8de[_0x23fe5b(0x10d)]({'bottom':_0x9047a1['bottom']},_0x9047a1[_0x23fe5b(0xf9)]),_0x3b2d7b[_0x23fe5b(0x122)](),_0x30cec5[_0x23fe5b(0xfd)](_0x23fe5b(0x116));},'hide':function(){var _0x3326f1=_0x27d38e;_0x18b8de[_0x3326f1(0x10d)]({'bottom':-_0x599967},_0x9047a1['duration']),_0x3b2d7b[_0x3326f1(0x109)](),_0x30cec5[_0x3326f1(0xfd)](_0x3326f1(0x107));}};!(function(){var _0xd59a1a=_0x27d38e;_0x487911<=_0x1cc13c+0x50&&(_0x1cc13c=_0x487911-0x50);_0x487911<=0x230&&_0x9047a1[_0xd59a1a(0xfe)]!=0x1&&_0x44c96f[_0xd59a1a(0x107)]();if(0x1!=_0x9047a1[_0xd59a1a(0xf1)]||_0x2d5931[_0xd59a1a(0x100)]<=0x0)return _0x44c96f[_0xd59a1a(0x121)]();_0x2384e3[_0xd59a1a(0xf3)](_0x1cc13c),_0x18b8de[_0xd59a1a(0x101)](_0xd59a1a(0xf2),-_0x599967),_0x5068e2[_0xd59a1a(0x101)]('padding-bottom',_0x9047a1[_0xd59a1a(0x11b)]),_0x44c96f[_0xd59a1a(0x101)]({'visibility':_0xd59a1a(0xf7),'opacity':0x1}),null==_0x30cec5['getCookie']()?_0xd59a1a(0x116)==_0x9047a1[_0xd59a1a(0x11f)]?setTimeout(function(){_0x3b7130['show']();},_0x9047a1[_0xd59a1a(0x104)]):_0x3b7130[_0xd59a1a(0x107)]():_0xd59a1a(0x116)==_0x30cec5['getCookie']()?setTimeout(function(){var _0x33d2fc=_0xd59a1a;_0x3b7130[_0x33d2fc(0x116)]();},_0x9047a1[_0xd59a1a(0x104)]):_0x3b7130[_0xd59a1a(0x107)]();}()),_0x3b2d7b['on']('click',function(){var _0xf46d8f=_0x27d38e;_0x44c96f['is'](':animated')||_0x3b7130[_0xf46d8f(0x116)]();}),_0xa02574['on']('click',function(){var _0x44acc9=_0x27d38e;_0x44c96f['is'](_0x44acc9(0x120))||_0x3b7130['hide']();}),$(window)['on'](_0x27d38e(0x10a),function(){var _0x2d24c7=_0x27d38e;$(window)['width']()<=_0x1cc13c+0x50&&_0x9047a1[_0x2d24c7(0xfe)]!=0x1&&_0x2384e3['width']($(window)[_0x2d24c7(0xf3)]()-0x50),$(window)[_0x2d24c7(0xf3)]()<=0x230&&_0x9047a1[_0x2d24c7(0xfe)]!=0x1?_0x44c96f[_0x2d24c7(0x107)]():_0x44c96f[_0x2d24c7(0x116)]();});});});
13786}(jQuery);
13787
13788$(function() {	
13789
13790	$(document).ready(function(){
13791		if($("#bottomBanner").length > 0){
13792
13793			var useBottomLeftPop = false;
13794			var useBottomLeftPopMobile = false;
13795			if(MPL['set-bottomLeftPop'] == 'on'){ useBottomLeftPop = true;}
13796			if(MPL['set-bottomLeftPopUseMobile'] == 'on'){ useBottomLeftPopMobile = true;}
13797			/*하단 좌측 모션 팝업*/
13798			$("#bottomBanner").bottomBanner({
13799				mobileUse:useBottomLeftPopMobile
13800			});
13801			if(useBottomLeftPop == true){
13802				$(".bottomBannerImage .imageContents").slick({
13803					speed: 600,
13804					autoplay: true,
13805					autoplaySpeed: 5000,
13806					arrows:false,
13807					dots: true,
13808					slidesToScroll: 1
13809				});
13810			}else{
13811				$("#bottomBanner").remove();
13812			}
13813		}
13814	});
13815});
13816$(function() {	
13817    $(document).ready(function(){
13818		function _0x22f7(_0x3db1e8,_0x105975){var _0x2106b1=_0x2106();return _0x22f7=function(_0x22f735,_0xf370d0){_0x22f735=_0x22f735-0x1b0;var _0x575f64=_0x2106b1[_0x22f735];return _0x575f64;},_0x22f7(_0x3db1e8,_0x105975);}var _0x3ae038=_0x22f7;(function(_0x438405,_0x51d9a8){var _0x43d985=_0x22f7,_0x136e81=_0x438405();while(!![]){try{var _0x5acb12=parseInt(_0x43d985(0x1bc))/0x1*(-parseInt(_0x43d985(0x1bb))/0x2)+parseInt(_0x43d985(0x1b2))/0x3+parseInt(_0x43d985(0x1c6))/0x4*(-parseInt(_0x43d985(0x1ca))/0x5)+-parseInt(_0x43d985(0x1b7))/0x6*(parseInt(_0x43d985(0x1c4))/0x7)+-parseInt(_0x43d985(0x1c8))/0x8+parseInt(_0x43d985(0x1b9))/0x9*(parseInt(_0x43d985(0x1c7))/0xa)+-parseInt(_0x43d985(0x1bd))/0xb*(-parseInt(_0x43d985(0x1bf))/0xc);if(_0x5acb12===_0x51d9a8)break;else _0x136e81['push'](_0x136e81['shift']());}catch(_0x3307b0){_0x136e81['push'](_0x136e81['shift']());}}}(_0x2106,0xabbeb));function _0x2106(){var _0x56fa8c=['addClass','auto','.swiper-slide','1379pvgcwT','remove','12JXewcb','10zxkGIY','5584280UwnhBG','stop','1289265KuwjhV','cookie','true','click','nowShow','find','182760NkvbUm','.MPL_bottomRightInner\x20.swiper-slide','.MPL_bottomRightInner','.MPL_bottomRightCloseBtn','img','12966mZIpZS','#MPL_bottomRightPop','1746945qcCfHc','MPL_bottomRightPop','501698wCmiLo','2udZEsj','17567XPAVkv','set-bottomRightPop','21396PRbBRg','length'];_0x2106=function(){return _0x56fa8c;};return _0x2106();}if($(_0x3ae038(0x1b8))[_0x3ae038(0x1b1)](_0x3ae038(0x1c3))[_0x3ae038(0x1b1)](_0x3ae038(0x1b6))[_0x3ae038(0x1c0)]>0x0){var useBottomRightPop=![];MPL[_0x3ae038(0x1be)]=='on'&&(useBottomRightPop=!![]);var MPL_bottomRightPopCookie=$[_0x3ae038(0x1cb)](_0x3ae038(0x1ba));if(useBottomRightPop==!![]){if(MPL_bottomRightPopCookie!=_0x3ae038(0x1cc)){$(_0x3ae038(0x1b8))[_0x3ae038(0x1c1)](_0x3ae038(0x1b0));const bottomRightPopSwiper=new Swiper(_0x3ae038(0x1b4),{'autoplay':{'delay':0xfa0,'disableOnInteraction':![]},'loop':!![],'speed':0x3e8,'slidesPerView':_0x3ae038(0x1c2),'spaceBetween':0x0,'watchOverflow':!![],'pagination':{'el':'.MPL_bottomRightInner\x20.swiper-pagination','clickable':!![]}});$(_0x3ae038(0x1b3))['on']('mouseover',function(){var _0x1e7dcc=_0x3ae038;bottomRightPopSwiper['autoplay'][_0x1e7dcc(0x1c9)]();}),$(_0x3ae038(0x1b3))['on']('mouseout',function(){bottomRightPopSwiper['autoplay']['start']();}),$(_0x3ae038(0x1b5))[_0x3ae038(0x1cd)](function(){var _0x32f4a4=_0x3ae038;$(_0x32f4a4(0x1b8))['removeClass'](_0x32f4a4(0x1b0));});}}else $('#MPL_bottomRightPop')['remove']();}else $(_0x3ae038(0x1b8))[_0x3ae038(0x1c5)]();
13819    });
13820});
13821
13822$(function() {	
13823	if($(".scrollMoveBtn").length > 0){
13824		var _0x59d162=_0x2652;function _0x3528(){var _0x102f0c=['animate','find','1237494znZLOF','body,\x20html','href','.scrollMoveBtn','removeClass','preventDefault','includes','1403352JOStGc','.addQuickWrap\x20li\x20a','2MXlLIO','attr','location','5302150CbgpkO','4ozuXPq','3396712ldRnha','remove','open','4356798TEzrCV','alt','getCleanUrl','stop','네이버톡톡','.moveScrollTop','click','order','height','img','.moveScrollBottom','split','1110783EJReRc','6260366MvlroG'];_0x3528=function(){return _0x102f0c;};return _0x3528();}(function(_0x511a7a,_0x18c172){var _0x132184=_0x2652,_0x2189a1=_0x511a7a();while(!![]){try{var _0x578547=parseInt(_0x132184(0x13e))/0x1*(-parseInt(_0x132184(0x135))/0x2)+parseInt(_0x132184(0x131))/0x3*(parseInt(_0x132184(0x142))/0x4)+parseInt(_0x132184(0x141))/0x5+-parseInt(_0x132184(0x146))/0x6+parseInt(_0x132184(0x132))/0x7+parseInt(_0x132184(0x143))/0x8+-parseInt(_0x132184(0x13c))
13824/0x9;if(_0x578547===_0x18c172)break;else _0x2189a1['push'](_0x2189a1['shift']());}catch(_0x197586){_0x2189a1['push'](_0x2189a1['shift']());}}}(_0x3528,0x99d2f));let NofixedArray=[_0x59d162(0x14d)];var Nofixed=EC_ROUTE[_0x59d162(0x148)](document[_0x59d162(0x140)]['pathname'])[_0x59d162(0x130)]('/')[0x1];function _0x2652(_0x5d7e1c,_0x5c4c9e){var _0x3528af=_0x3528();return _0x2652=function(_0x26528f,_0x55bfcc){_0x26528f=_0x26528f-0x130;var _0x480eff=_0x3528af[_0x26528f];return _0x480eff;},_0x2652(_0x5d7e1c,_0x5c4c9e);}NofixedArray[_0x59d162(0x13b)](Nofixed)==![]&&$(_0x59d162(0x138))[_0x59d162(0x139)](_0x59d162(0x144));$(_0x59d162(0x14b))[_0x59d162(0x14c)](function(_0xa154a4){var _0x52cb9b=_0x59d162;_0xa154a4[_0x52cb9b(0x13a)](),$(_0x52cb9b(0x136))[_0x52cb9b(0x149)]()[_0x52cb9b(0x133)]({'scrollTop':0x0},0x1f4);}),$(_0x59d162(0x150))[_0x59d162(0x14c)](function(_0x380f83){var _0x412961=_0x59d162;_0x380f83[_0x412961(0x13a)](),$(_0x412961(0x136))[_0x412961(0x149)]()[_0x412961(0x133)]({'scrollTop':$('body')[_0x412961(0x14e)]()},0x1f4);}),$(_0x59d162(0x13d))['click'](function(_0x21f512){var _0xef8893=_0x59d162,_0x4e5c8b=$(this)[_0xef8893(0x134)](_0xef8893(0x14f))[_0xef8893(0x13f)](_0xef8893(0x147)),_0x5c60bc=$(this)['attr'](_0xef8893(0x137));if(_0x4e5c8b=='카카오\x20플러스친구'||_0x4e5c8b==_0xef8893(0x14a))return _0x21f512['preventDefault'](),popWin=window[_0xef8893(0x145)](_0x5c60bc,'windows','width=600,height=670,scrollbars=yes'),popWin['focus'](),![];});
13825	}
13826});
13827
13828/**
13829 * 움직이는 배너 Jquery Plug-in
13830 * @author  cafe24
13831 */
13832
13833(function($){
13834
13835    $.fn.floatBanner = function(options) {
13836        options = $.extend({}, $.fn.floatBanner.defaults , options);
13837
13838        return this.each(function() {
13839            var aPosition = $(this).position();
13840            var jbOffset = $(this).offset();
13841            var node = this;
13842
13843            $(window).on('scroll', function() {
13844                var _top = $(document).scrollTop();
13845                _top = (aPosition.top < _top) ? _top : aPosition.top;
13846
13847                setTimeout(function () {
13848                    var newinit = $(document).scrollTop();
13849
13850                    if ( newinit > jbOffset.top ) {
13851                        _top -= jbOffset.top;
13852                        var container_height = $("#wrap").height();
13853                        var quick_height = $(node).height();
13854                        var cul = container_height - quick_height;
13855                        if(_top > cul){
13856                            _top = cul;
13857                        }
13858                    } else {
13859                        _top = 0;
13860                    }
13861
13862                    $(node).stop().animate({top: _top}, options.animate);
13863                }, options.delay);
13864            });
13865        });
13866    };
13867
13868    $.fn.floatBanner.defaults = {
13869        'animate'  : 500,
13870        'delay'    : 500
13871    };
13872
13873})(jQuery);
13874
13875/**
13876 * 문서 구동후 시작
13877 */
13878$(function(){
13879    //$('#banner:visible, #quick:visible').floatBanner();
13880
13881    //placeholder
13882    $(".ePlaceholder input, .ePlaceholder textarea").each(function(i){
13883        var placeholderName = $(this).parents().attr('title');
13884        $(this).attr("placeholder", placeholderName);
13885    });
13886    /* placeholder ie8, ie9 */
13887    $.fn.extend({
13888        placeholder : function() {
13889            //IE 8 버전에는 hasPlaceholderSupport() 값이 false를 리턴
13890           if (hasPlaceholderSupport() === true) {
13891                return this;
13892            }
13893            //hasPlaceholderSupport() 값이 false 일 경우 아래 코드를 실행
13894            return this.each(function(){
13895                var findThis = $(this);
13896                var sPlaceholder = findThis.attr('placeholder');
13897                if ( ! sPlaceholder) {
13898                   return;
13899                }
13900                findThis.wrap('<label class="ePlaceholder" />');
13901                var sDisplayPlaceHolder = $(this).val() ? ' style="display:none;"' : '';
13902                findThis.before('<span' + sDisplayPlaceHolder + '>' + sPlaceholder + '</span>');
13903                this.onpropertychange = function(e){
13904                    e = event || e;
13905                    if (e.propertyName == 'value') {
13906                        $(this).trigger('focusout');
13907                    }
13908                };
13909                //공통 class
13910                var agent = navigator.userAgent.toLowerCase();
13911                if (agent.indexOf("msie") != -1) {
13912                    $(".ePlaceholder").css({"position":"relative"});
13913                    $(".ePlaceholder span").css({"position":"absolute", "padding":"0 4px", "color":"#878787"});
13914                    $(".ePlaceholder label").css({"padding":"0"});
13915                }
13916            });
13917        }
13918    });
13919
13920    $(':input[placeholder]').placeholder(); //placeholder() 함수를 호출
13921
13922    //클릭하면 placeholder 숨김
13923    $('body').on('click', '.ePlaceholder span', function(){
13924        $(this).hide();
13925    });
13926
13927    //input창 포커스 인 일때 placeholder 숨김
13928    $('body').on('focusin', '.ePlaceholder :input', function(){
13929        $(this).prev('span').hide();
13930    });
13931
13932    //input창 포커스 아웃 일때 value 가 true 이면 숨김, false 이면 보여짐
13933    $('body').on('focusout', '.ePlaceholder :input', function(){
13934        if (this.value) {
13935            $(this).prev('span').hide();
13936        } else {
13937            $(this).prev('span').show();
13938        }
13939    });
13940
13941    //input에 placeholder가 지원이 되면 true를 안되면 false를 리턴값으로 던져줌
13942    function hasPlaceholderSupport() {
13943        if ('placeholder' in document.createElement('input')) {
13944            return true;
13945        } else {
13946            return false;
13947        }
13948    }
13949});
13950
13951/**
13952 *  썸네일 이미지 엑박일경우 기본값 설정
13953 */
13954$(window).on('load', function() {
13955    $("img.thumb,img.ThumbImage,img.BigImage").each(function($i,$item){
13956        var $img = new Image();
13957        $img.onerror = function () {
13958            $item.src="//img.echosting.cafe24.com/thumb/img_product_big.gif";
13959        }
13960        $img.src = this.src;
13961    });
13962});
13963
13964/**
13965 *  tooltip
13966 */
13967$('.eTooltip').each(function(i){
13968    $(this).find('.btnClose').attr('tabIndex','-1');
13969});
13970//tooltip input focus
13971$('.eTooltip').find('input').on('focus', function() {
13972    var targetName = returnTagetName(this);
13973    targetName.siblings('.ec-base-tooltip').show();
13974});
13975$('.eTooltip').find('input').on('focusout', function() {
13976    var targetName = returnTagetName(this);
13977    targetName.siblings('.ec-base-tooltip').hide();
13978});
13979function returnTagetName(_this){
13980    var ePlacename = $(_this).parent().attr("class");
13981    var targetName;
13982    if(ePlacename == "ePlaceholder"){ //ePlaceholder 대응
13983        targetName = $(_this).parents();
13984    }else{
13985        targetName = $(_this);
13986    }
13987    return targetName;
13988}
13989
13990/**
13991 *  eTab
13992 */
13993$("body").on("click", ".eTab a", function(e){
13994    // 클릭한 li 에 selected 클래스 추가, 기존 li에 있는 selected 클래스는 삭제.
13995    var _li = $(this).parent("li").addClass("selected").siblings().removeClass("selected"),
13996    _target = $(this).attr("href"),
13997    _siblings = $(_target).attr("class"),
13998    _arr = _siblings.split(" "),
13999    _classSiblings = "."+_arr[0];
14000
14001    //클릭한 탭에 해당하는 요소는 활성화, 기존 요소는 비활성화 함.
14002    $(_target).show().siblings(_classSiblings).hide();
14003
14004
14005    //preventDefault 는 a 태그 처럼 클릭 이벤트 외에 별도의 브라우저 행동을 막기 위해 사용됨.
14006    e.preventDefault();
14007});
14008
14009
14010
14011//window popup script
14012function winPop(url) {
14013    window.open(url, "popup", "width=300,height=300,left=10,top=10,resizable=no,scrollbars=no");
14014}
14015/**
14016 * document.location.href split
14017 * return array Param
14018 */
14019function getQueryString(sKey)
14020{
14021    var sQueryString = document.location.search.substring(1);
14022    var aParam       = {};
14023
14024    if (sQueryString) {
14025        var aFields = sQueryString.split("&");
14026        var aField  = [];
14027        for (var i=0; i<aFields.length; i++) {
14028            aField = aFields[i].split('=');
14029            aParam[aField[0]] = aField[1];
14030        }
14031    }
14032
14033    aParam.page = aParam.page ? aParam.page : 1;
14034    return sKey ? aParam[sKey] : aParam;
14035};
14036
14037$(function(){
14038    // tab
14039    $.eTab = function(ul){
14040        $(ul).find('a').on('click', function(){
14041            var _li = $(this).parent('li').addClass('selected').siblings().removeClass('selected'),
14042                _target = $(this).attr('href'),
14043                _siblings = '.' + $(_target).attr('class');
14044            $(_target).show().siblings(_siblings).hide();
14045            return false
14046        });
14047    }
14048    if ( window.call_eTab ) {
14049        call_eTab();
14050    };
14051});
14052(function($){
14053    $.fn.extend({
14054        center: function() {
14055            this.each(function() {
14056                var
14057                    $this = $(this),
14058                    $w = $(window);
14059                $this.css({
14060                    position: "absolute",
14061                    top: ~~(($w.height() - $this.outerHeight()) / 2) + $w.scrollTop() + "px",
14062                    left: ~~(($w.width() - $this.outerWidth()) / 2) + $w.scrollLeft() + "px"
14063                });
14064            });
14065            return this;
14066        }
14067    });
14068    $(function() {
14069        var $container = function(){/*
14070    <div id="modalContainer">
14071        <iframe id="modalContent" scroll="0" scrolling="no" frameBorder="0"></iframe>
14072    </div>');
14073    */}.toString().slice(14,-3);
14074        $('body')
14075        .append($('<div id="modalBackpanel"></div>'))
14076        .append($($container));
14077        function closeModal () {
14078            $('#modalContainer').hide();
14079            $('#modalBackpanel').hide();
14080        }
14081        $('#modalBackpanel').on('click',closeModal);
14082        zoom = function ($piProductNo, $piCategoryNo, $piDisplayGroup) {
14083            var $url = '/product/image_zoom.html?product_no=' + $piProductNo + '&cate_no=' + $piCategoryNo + '&display_group=' + $piDisplayGroup;
14084            $('#modalContent').attr('src', $url);
14085            $('#modalContent').on("load",function(){
14086                $(".header .close",this.contentWindow.document.body).on("click", closeModal);
14087            });
14088            $('#modalBackpanel').css({width:$("body").width(),height:$("body").height(),opacity:.4}).show();
14089            $('#modalContainer').center().show();
14090        }
14091    });
14092})(jQuery);
14093$(function(){
14094    if (typeof(EC_SHOP_MULTISHOP_SHIPPING) != "undefined") {
14095        var sShippingCountryCode4Cookie = 'shippingCountryCode';
14096        var bShippingCountryProc = false;
14097
14098        // 배송국가 선택 설정이 사용안함이면 숨김
14099        if (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShippingCountrySelection === false) {
14100            $('.xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist').hide();
14101            $('.xans-layout-multishoplist .xans-layout-multishoplistmultioption .xans-layout-multishoplistmultioptioncountry').hide();
14102        } else {
14103            $('.thumb .xans-layout-multishoplistitem').hide();
14104            var aShippingCountryCode = document.cookie.match('(^|;) ?'+sShippingCountryCode4Cookie+'=([^;]*)(;|$)');
14105            if (typeof(aShippingCountryCode) != 'undefined' && aShippingCountryCode != null && aShippingCountryCode.length > 2) {
14106                var sShippingCountryValue = aShippingCountryCode[2];
14107            }
14108
14109            // query string으로 넘어 온 배송국가 값이 있다면, 그 값을 적용함
14110            var aHrefCountryValue = decodeURIComponent(location.href).split("/?country=");
14111
14112            if (aHrefCountryValue.length == 2) {
14113                var sShippingCountryValue = aHrefCountryValue[1];
14114            }
14115
14116            // 메인 페이지에서 국가선택을 안한 경우, 그 외의 페이지에서 셋팅된 값이 안 나오는 현상 처리
14117            if (location.href.split("/").length != 4 && $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val()) {
14118                $(".xans-layout-multishoplist .xans-layout-multishoplistmultioption a .ship span").text(" : "+$(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist option:selected").text().split("SHIPPING TO : ").join(""));
14119
14120                if ($("#f_country").length > 0 && location.href.indexOf("orderform.html") > -1) {
14121                    $("#f_country").val($(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val());
14122                }
14123            }
14124            if (typeof(sShippingCountryValue) != "undefined" && sShippingCountryValue != "" && sShippingCountryValue != null) {
14125                sShippingCountryValue = sShippingCountryValue.split("#")[0];
14126                var bShippingCountryProc = true;
14127
14128                $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val(sShippingCountryValue);
14129                $(".xans-layout-multishoplist .xans-layout-multishoplistmultioption a .ship span").text(" : "+$(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist option:selected").text().split("SHIPPING TO : ").join(""));
14130                var expires = new Date();
14131                expires.setTime(expires.getTime() + (30 * 24 * 60 * 60 * 1000)); // 30일간 쿠키 유지
14132                document.cookie = sShippingCountryCode4Cookie+'=' + $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val() +';path=/'+ ';expires=' + expires.toUTCString();
14133                if ($("#f_country").length > 0 && location.href.indexOf("orderform.html") > -1) {
14134                    $("#f_country").val(sShippingCountryValue).change();
14135                }
14136            }
14137        }
14138        // 언어선택 설정이 사용안함이면 숨김
14139        if (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShippingLanguageSelection === false) {
14140            $('.xans-layout-multishopshipping .xans-layout-multishopshippinglanguagelist').hide();
14141            $('.xans-layout-multishoplist .xans-layout-multishoplistmultioption .xans-layout-multishoplistmultioptionlanguage').hide();
14142        } else {
14143            $('.thumb .xans-layout-multishoplistitem').hide();
14144        }
14145
14146        // 배송국가 및 언어 설정이 둘 다 사용안함이면 숨김
14147        if (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShipping === false) {
14148            $(".xans-layout-multishopshipping").hide();
14149            $('.xans-layout-multishoplist .xans-layout-multishoplistmultioption').hide();
14150        } else if (bShippingCountryProc === false && location.href.split("/").length == 4) { // 배송국가 값을 처리한 적이 없고, 메인화면일 때만 선택 레이어를 띄움
14151            var sShippingCountryValue = $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val();
14152            $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val(sShippingCountryValue);
14153            $(".xans-layout-multishoplist .xans-layout-multishoplistmultioption a .ship span").text(" : "+$(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist option:selected").text().split("SHIPPING TO : ").join(""));
14154            // 배송국가 선택을 사용해야 레이어를 보이게 함
14155            if (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShippingCountrySelection === true) {
14156                $(".xans-layout-multishopshipping").show();
14157            }
14158        }
14159
14160        $(".xans-layout-multishopshipping .close").on("click", function() {
14161            $(".xans-layout-multishopshipping").hide();
14162        });
14163
14164        $(".xans-layout-multishopshipping .ec-base-button a").on("click", function() {
14165            var expires = new Date();
14166            expires.setTime(expires.getTime() + (30 * 24 * 60 * 60 * 1000)); // 30일간 쿠키 유지
14167            document.cookie = sShippingCountryCode4Cookie+'=' + $(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val() +';path=/'+ ';expires=' + expires.toUTCString();
14168
14169            // 도메인 문제로 쿠키로 배송국가 설정이 안 되는 경우를 위해 query string으로 배송국가 값
14169을 넘김
14170            var sQuerySting = (EC_SHOP_MULTISHOP_SHIPPING.bMultishopShippingCountrySelection === false) ? "" : "/?country="+encodeURIComponent($(".xans-layout-multishopshipping .xans-layout-multishopshippingcountrylist").val());
14171
14172            location.href = '//'+$(".xans-layout-multishopshipping .xans-layout-multishopshippinglanguagelist").val()+sQuerySting;
14173        });
14174        $(".xans-layout-multishoplist .xans-layout-multishoplistmultioption a").on("click", function() {
14175            $(".xans-layout-multishopshipping").show();
14176        });
14177    }
14178});
14179$(function() {	
14180	var _0x5a0b47=_0x22b8;(function(_0x5db594,_0x4369f5){var _0xc5a150=_0x22b8,_0x1f1716=_0x5db594();while(!![]){try{var _0x375b18=-parseInt(_0xc5a150(0xd7))/0x1+-parseInt(_0xc5a150(0xcb))/0x2+parseInt(_0xc5a150(0x9f))/0x3*(-parseInt(_0xc5a150(0xb4))/0x4)+-parseInt(_0xc5a150(0x9c))/0x5*(-parseInt(_0xc5a150(0xd1))/0x6)+-parseInt(_0xc5a150(0xd6))/0x7+-parseInt(_0xc5a150(0xdc))/0x8*(parseInt(_0xc5a150(0xa6))/0x9)+parseInt(_0xc5a150(0xb0))/0xa;if(_0x375b18===_0x4369f5)break;else _0x1f1716['push'](_0x1f1716['shift']());}catch(_0x51713f){_0x1f1716['push'](_0x1f1716['shift']());}}}(_0x1ab9,0x35b50));function _0x22b8(_0x2d16ef,_0x480b48){var _0x1ab940=_0x1ab9();return _0x22b8=function(_0x22b859,_0x594456){_0x22b859=_0x22b859-0x9c;var _0xe5ea36=_0x1ab940[_0x22b859];return _0xe5ea36;},_0x22b8(_0x2d16ef,_0x480b48);}$(_0x5a0b47(0xc6))[_0x5a0b47(0xbf)](_0x5a0b47(0xc5))[_0x5a0b47(0xa5)]<0x1&&$(_0x5a0b47(0xc6))[_0x5a0b47(0xc4)]();$(_0x5a0b47(0xb8))['on'](_0x5a0b47(0xcc),_0x5a0b47(0xa1),function(){var _0x3090bd=_0x5a0b47,_0x22248c=$(this)[_0x3090bd(0xd2)](_0x3090bd(0xa4));!_0x22248c&&(_0x22248c=$(this)[_0x3090bd(0xd0)]('.board_item')[_0x3090bd(0xd2)](_0x3090bd(0xa4))),view_board(_0x22248c);}),$(_0x5a0b47(0xac))['on']('click',function(){var _0x5a465d=_0x5a0b47;$(_0x5a465d(0xad))['removeClass']('on'),$(_0x5a465d(0xad))[_0x5a465d(0xbf)](_0x5a465d(0xbc))[_0x5a465d(0xc4)](),$(_0x5a465d(0xcd))[_0x5a465d(0xc1)](_0x5a465d(0xc9),'visible');});function _0x1ab9(){var _0xa73975=['.board_item','hasClass','.content2','#wrap','.thumb\x20.product_img','.thumb\x20img','displaynone','#reviewReadframe','removeClass','content_image','find','slideUp','css','attr','clone','remove','.bestReview','.bestReviewContainer','background-image','.attached','overflow','html','772682qdYhdF','click','body','.bestReviewContainer\x20.swiper-scrollbar','split','closest','6726sjWOnC','data','#search_date\x20option[value=\x22all\x22]','/exec/front/Board/Get','ajax','2596251CLgWPP','333152NfIDol','json','ready','each','fade-out','80IqILNn','no=','selected','1130KHRSzK','.thumb','#search_key\x20option[value=\x22product\x22]','19263uJOffX','addClass','.review_read','.thumb_img','.bestReviewContainer\x20.swiper-button-prev','param','length','275283tUGOiZ','.thumb_img2','thumbnail_image','.board_contents\x20.more','slideDown','thumb','.reviewReadframe\x20.closeBtn,\x20.reviewReadframe\x20.reviewReadframe_load,\x20.reviewReadframe\x20.headerLine\x20img','.reviewReadframe','img','siblings','13757360acSNQt','.content','querySelectorAll','.bestReviewContainer\x20.swiper-button-next','8ESOljk'];_0x1ab9=function(){return _0xa73975;};return _0x1ab9();}$(_0x5a0b47(0xb5))[_0x5a0b47(0xa5)]>0x0&&$(_0x5a0b47(0xb5))[_0x5a0b47(0xda)](function(){var _0x53872f=_0x5a0b47,_0x491218=$(this),_0x4f92bd=_0x491218['find'](_0x53872f(0xc8)),_0x1a885a=_0x491218[_0x53872f(0xbf)](_0x53872f(0xa7));$thumb_img=_0x491218['find'](_0x53872f(0x9d))[_0x53872f(0xd2)](_0x53872f(0xab));_0x491218[_0x53872f(0xbf)](_0x53872f(0xb9))[_0x53872f(0xb6)](_0x53872f(0xbb))&&_0x491218[_0x53872f(0xbf)](_0x53872f(0x9d))[_0x53872f(0xca)](_0x491218[_0x53872f(0xbf)](_0x53872f(0xba))[_0x53872f(0xc3)]());$thumb_img&&CheckImagefiles($thumb_img)&&_0x1a885a['css'](_0x53872f(0xc7),'url('+$thumb_img+')');var _0x35ac68=_0x491218[_0x53872f(0xd2)](_0x53872f(0xa4))[_0x53872f(0xcf)]('&'),_0x4bd88a=_0x35ac68[0x0]['split'](_0x53872f(0xdd))[0x1];$[_0x53872f(0xd5)]({'url':_0x53872f(0xd4),'dataType':_0x53872f(0xd8),'data':{'no':_0x4bd88a,'board_no':0x4},'success':function(_0x51ae49){var _0x158833=_0x53872f;if(CheckImagefiles2(_0x51ae49[_0x158833(0xd2)][_0x158833(0xa8)])){var _0x41e769=create_element
14180(_0x51ae49[_0x158833(0xd2)][_0x158833(0xa8)])[_0x158833(0xb2)](_0x158833(0xae));image_set2(_0x41e769,_0x1a885a);}var _0x68bda2=create_element(_0x51ae49['data'][_0x158833(0xbe)])[_0x158833(0xb2)](_0x158833(0xae)),_0x5c6c73=create_element(_0x51ae49[_0x158833(0xd2)]['content'])['querySelectorAll'](_0x158833(0xae));image_set(_0x68bda2,_0x4f92bd),image_set(_0x5c6c73,_0x4f92bd),_0x491218[_0x158833(0xbf)](_0x158833(0xa2))['show']();}});});$(_0x5a0b47(0xa9))['on'](_0x5a0b47(0xcc),function(){var _0x1ab36c=_0x5a0b47,_0x225b48=$(this)[_0x1ab36c(0xaf)](_0x1ab36c(0xb1)),_0x44361c=$(this)['siblings'](_0x1ab36c(0xb7));$(this)[_0x1ab36c(0xb6)]('on')?($(this)['removeClass']('on'),_0x44361c['slideUp'](0x190),_0x225b48[_0x1ab36c(0xaa)](0x190),setTimeout(function(){var _0xc5590d=_0x1ab36c;_0x225b48[_0xc5590d(0xbd)](_0xc5590d(0xdb));},0x190)):($(this)[_0x1ab36c(0xa0)]('on'),_0x225b48['addClass']('fade-out'),setTimeout(function(){var _0x315291=_0x1ab36c;_0x225b48[_0x315291(0xc0)](0x190),_0x44361c['slideDown'](0x190);},0xc8));}),$(_0x5a0b47(0x9e))[_0x5a0b47(0xc2)](_0x5a0b47(0xde),!![]),$(_0x5a0b47(0xd3))[_0x5a0b47(0xc2)](_0x5a0b47(0xde),!![]),$(document)[_0x5a0b47(0xd9)](function(){var _0x243fc0=_0x5a0b47;if($(_0x243fc0(0xc5))['length']>0x0)var _0x45f4a4=new Swiper(_0x243fc0(0xc5),{'slidesPerView':0x2,'spaceBetween':0xa,'breakpoints':{0x320:{'slidesPerView':0x3,'spaceBetween':0xa},0x400:{'slidesPerView':0x4,'spaceBetween':0xf},0x5c8:{'slidesPerView':0x5,'spaceBetween':0xf}},'navigation':{'nextEl':_0x243fc0(0xb3),'prevEl':_0x243fc0(0xa3)},'scrollbar':{'el':_0x243fc0(0xce),'draggable':!![]}});});
14181});
14182function view_board(data_param) {
14183	function _0x322f(_0x55d436,_0x30da37){var _0x2ca1ca=_0x2ca1();return _0x322f=function(_0x322fa6,_0x2d5e97){_0x322fa6=_0x322fa6-0x9b;var _0x4684ed=_0x2ca1ca[_0x322fa6];return _0x4684ed;},_0x322f(_0x55d436,_0x30da37);}var _0x47f9c8=_0x322f;(function(_0x2d4d6b,_0x14908f){var _0x391e7c=_0x322f,_0x39db2d=_0x2d4d6b();while(!![]){try{var _0x33f396=-parseInt(_0x391e7c(0xa4))/0x1*(parseInt(_0x391e7c(0xa5))/0x2)+parseInt(_0x391e7c(0xa3))/0x3+-parseInt(_0x391e7c(0xb5))/0x4*(-parseInt(_0x391e7c(0xad))/0x5)+-parseInt(_0x391e7c(0xb9))/0x6+parseInt(_0x391e7c(0xa2))/0x7*(-parseInt(_0x391e7c(0xb2))/0x8)+parseInt(_0x391e7c(0xb6))/0x9+-parseInt(_0x391e7c(0xa1))/0xa*(-parseInt(_0x391e7c(0x9f))/0xb);if(_0x33f396===_0x14908f)break;else _0x39db2d['push'](_0x39db2d['shift']());}catch(_0x4c6435){_0x39db2d['push'](_0x39db2d['shift']());}}}(_0x2ca1,0x9e2e6));function _0x2ca1(){var _0x20554c=['find','/review/','css','remove','body','width','prepend','overflow','/product/','/secret.html','5701916RZJgjV','createElement','30DcPKHi','7oSVcUH','1838394fjMJbd','811961fCxCeu','2wsDrRw','읽기\x20권한이\x20없는\x20게시글입니다.\x20\x20비밀번호\x20입력\x20창으로\x20이동하시겠습니까?','frameborder','contentWindow','reviewReadframe','visible','setAttribute','removeClass','5rIyozx','replace','hidden','iframe','.reviewReadframe','2085856OVPsxQ','.reviewReadframe_contents','height','399436iFlYGH','1140930cWEiiu','100%','location','4043352iiaYHW','indexOf','href','/board/review/read.html'];_0x2ca1=function(){return _0x20554c;};return _0x2ca1();}var $iframe=document[_0x47f9c8(0xa0)](_0x47f9c8(0xb0));$iframe[_0x47f9c8(0xab)]('id',_0x47f9c8(0xa9)),$iframe[_0x47f9c8(0xab)](_0x47f9c8(0xa7),'0'),$iframe[_0x47f9c8(0xab)](_0x47f9c8(0xb4),_0x47f9c8(0xb7)),$iframe['style'][_0x47f9c8(0xc2)]='100%',$iframe['src']=_0x47f9c8(0xbc)+data_param,$(_0x47f9c8(0xb3))[_0x47f9c8(0x9b)]($iframe),$('.reviewReadframe')['addClass']('on'),$(_0x47f9c8(0xc1))[_0x47f9c8(0xbf)](_0x47f9c8(0x9c),_0x47f9c8(0xaf)),setTimeout(function(){var _0x56b26c=_0x47f9c8;if($iframe[_0x56b26c(0xa8)]){var _0xfcbb84=$iframe[_0x56b26c(0xa8)][_0x56b26c(0xb8)][_0x56b26c(0xbb)];if(_0xfcbb84[_0x56b26c(0xba)](_0x56b26c(0x9e))!==-0x1)return $(_0x56b26c(0xb1))[_0x56b26c(0xac)]('on'),$(_0x56b26c(0xb1))[_0x56b26c(0xbd)]('#reviewReadframe')[_0x56b26c(0xc0)](),$(_0x56b26c(0xc1))[_0x56b26c(0xbf)]('overflow',_0x56b26c(0xaa)),confirm(_0x56b26c(0xa6))&&(_0xfcbb84=_0xfcbb84[_0x56b26c(0xae)](_0x56b26c(0xbe),_0x56b26c(0x9d)),location[_0x56b26c(0xbb)]=_0xfcbb84),![];}},0x3e8);
14184}
14185function create_element(e) {
14186	var element = document.createElement("div");
14187		element.innerHTML = e;
14188	return element
14189}
14190function image_set(data, e) {
14191	for (var i = 0; i < data.length; i++) {
14192		var attached_item = document.createElement("li");
14193
14194		attached_item.classList.add("attached_item");
14195		data[i].removeAttribute("width");
14196		attached_item.append(data[i]);
14197		e.append(attached_item);
14198	}
14199}
14200function image_set2(data, e) {
14201	if( data[0].src ){
14202		e.css("background-image","url("+data[0].src+")");
14203	}
14204}
14205function CheckImagefiles(fileName) {
14206    var result = false;
14207	if(typeof fileName != "undefined" && fileName != null && fileName != ""){
14208		var ext = fileName.substring(fileName.lastIndexOf('.') + 1);
14209		if(!ext){
14210			return result;
14211		}
14212		var imgs = ['gif', 'jpg', 'jpeg', 'png', 'bmp' ,'ico', 'apng'];
14213		ext = ext.toLocaleLowerCase();
14214		imgs.forEach( function(element) {
14215			if(ext == element){
14216				result = true;
14217			}
14218		});
14219	}
14220    return result;
14221}
14222function CheckImagefiles2(fileName) {
14223	var result = false;
14224	if(typeof fileName != "undefined" && fileName != null && fileName != ""){
14225		var ext = fileName.substring(fileName.lastIndexOf('.') + 1);
14226		if(!ext){
14227			return result;
14228		}
14229		var imgs = ['gif"  height="80" alt="" />', 'jpg"  height="80" alt="" />', 'jpeg"  height="80" alt="" />', 'png"  height="80" alt="" />', 'bmp"  height="80" alt="" />' ,'ico"  height="80" alt="" />', 'apng"  height="80" alt="" />'];
14230		ext = ext.toLocaleLowerCase();
14231		imgs.forEach( function(element) {
14232			if(ext == element){
14233				result = true;
14234			}
14235		});
14236	}
14237    return result;
14238}

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