PageSourceSearch

https://www.haenel.de/project-phoenix/_assets/f8fe083512fac66e815c…/JavaScript/main.min.js?1788851933

js haenel.de collected 2026-10-04 21:45:29 UTC 653,956 bytes, 20,653 lines download raw bytes

vendor: 87 bytes, lines 1-4
1/******/ (() => { // webpackBootstrap
2/******/ 	var __webpack_modules__ = ({
3
4/***/ "./
4Resources/Private/JavaScript/language-switch.js":
5/*!*********************************************************!*\
6  !*** ./Resources/Private/JavaScript/language-switch.js ***!
7  \*********************************************************/
8/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9
10"use strict";
11__webpack_require__.r(__webpack_exports__);
12/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");
13/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);
14
15
16(function ($) {
17  document
18    .getElementById('country-switcher')
19    .addEventListener('change', switcher);
20
21  document
22    .getElementById('submit-switch-language')
23    .addEventListener('click', switchLanguage);
24
25  const languageSwitcher = document.getElementById(
26    'language-switcher'
27  );
28
29  function switcher(e) {
30    console.log(languageSwitcher);
31    for (let language of languageSwitcher) {
32      if (
33        language.getAttribute('data-market') ==
34        e.target.options[e.target.selectedIndex].text
35      ) {
36        language.classList.remove('hide');
37      } else {
38        language.classList.add('hide');
39      }
40    }
41
42    // Setze die erste sichtbare Option als ausgewählt
43    languageSwitcher.value = Array.from(
44      languageSwitcher.options
45    ).find((option) => !option.classList.contains('hide')).value;
46  }
47
48  function switchLanguage(e) {
49    window.location.href = languageSwitcher.value;
50  }
51
52  $('.open-popup-link').magnificPopup({
53    type: 'inline',
54    midClick: true, // Allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source in href.
55  });
56})((jquery__WEBPACK_IMPORTED_MODULE_0___default()));
57
58
59/***/ }),
60
61/***/ "./Resources/Private/JavaScript/main.js":
62/*!**********************************************!*\
63  !*** ./Resources/Private/JavaScript/main.js ***!
64  \**********************************************/
65/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
66
67"use strict";
68__webpack_require__.r(__webpack_exports__);
69/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap */ "./node_modules/bootstrap/dist/js/bootstrap.esm.js");
70/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");
71/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_1__);
72/* harmony import */ var aos__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! aos */ "./node_modules/aos/dist/aos.js");
73/* harmony import */ var aos__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(aos__WEBPACK_IMPORTED_MODULE_2__);
74/* harmony import */ var magnific_popup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! magnific-popup */ "./node_modules/magnific-popup/dist/jquery.magnific-popup.js");
75/* harmony import */ var magnific_popup__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(magnific_popup__WEBPACK_IMPORTED_MODULE_3__);
76/* harmony import */ var _module_powermail__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./module/powermail */ "./Resources/Private/JavaScript/module/powermail.js");
77/* harmony import */ var _module_newsletter_contact__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./module/newsletter-contact */ "./Resources/Private/JavaScript/module/newsletter-contact.js");
78/* harmony import */ var _language_switch_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./language-switch.js */ "./Resources/Private/JavaScript/language-switch.js");
79// Import all of Bootstrap's JS
80
81
82
83
84
85
86
87globalThis = globalThis || window;
88
89//make it global
90globalThis.AOS = (aos__WEBPACK_IMPORTED_MODULE_2___default());
91globalThis.bootstrap = bootstrap__WEBPACK_IMPORTED_MODULE_0__;
92globalThis.jQuery = globalThis.$ = (jquery__WEBPACK_IMPORTED_MODULE_1___default());
93
94/**
95 * setup the html allow list for bootstrap e.g. tooltip
96 */
97function tooltipAllowList() {
98  var myDefaultAllowList = bootstrap__WEBPACK_IMPORTED_MODULE_0__.Tooltip.Default.allowList;
99  // To allow table elements
100  myDefaultAllowList.table = ['class'];
101  myDefaultAllowList.td = [];
102  myDefaultAllowList.tbody = [];
103  myDefaultAllowList.tr = [];
104  myDefaultAllowList.th = [];
105}
106
107//load "sub modules"
108
109
110function scrollFunction() {
111  let scrollTop =
112    document.body.scrollTop || document.documentElement.scrollTop;
113  if (scrollTop > 80) {
114    document.documentElement.classList.add('small-navbar');
115  } else if (scrollTop < 10) {
116    document.documentElement.classList.remove('small-navbar');
117  }
118}
119window.addEventListener('scroll', scrollFunction);
120jquery__WEBPACK_IMPORTED_MODULE_1___default()(($) => {
121  aos__WEBPACK_IMPORTED_MODULE_2___default().init({ easing: 'ease-in-out-sine' });
122  tooltipAllowList();
123  const tooltipTriggerList = document.querySelectorAll(
124    '[data-bs-toggle="tooltip"]'
125  );
126  const tooltipList = [...tooltipTriggerList].map(
127    (tooltipTriggerEl) => new bootstrap__WEBPACK_IMPORTED_MODULE_0__.Tooltip(tooltipTriggerEl)
128  );
129  _module_powermail__WEBPACK_IMPORTED_MODULE_4__["default"].init();
130
131  /*** Cookie-Einstellungen Link manipulieren, da im Backend kein Javascript Link gespeichert werden kann! ***/
132  if (jQuery("a[href*='#ccm-cookie-widget']")) {
133    jQuery("a[href*='#ccm-cookie-widget']")
134      .attr('onclick', 'CCM.openWidget();return false;')
135      .attr('href', '#');
136  }
137});
138
139document.addEventListener('DOMContentLoaded', function () {
140  let activeFormClass = null; // Merken, welches Formular aktiv war
141
142  // Conversion-Zuordnung zu Formularen
143  const formConversionMap = {
144    powermail_form_2: function () {
145      console.log('form2');
146      // Pushen eines benutzerdefinierten Events in den dataLayer
147      window.dataLayer = window.dataLayer || [];
148      dataLayer.push({
149        event: 'kontaktformular_express_2',
150      });
151    },
152    powermail_form_3: function () {
153      console.log('form3');
154      // Pushen eines benutzerdefinierten Events in den dataLayer
155      window.dataLayer = window.dataLayer || [];
156      dataLayer.push({
157        event: 'kontaktformular_express_1',
158      });
159    },
160    powermail_form_11: function () {
161      console.log('form11');
162      // Pushen eines benutzerdefinierten Events in den dataLayer
163      window.dataLayer = window.dataLayer || [];
164      dataLayer.push({
165        event: 'kontaktformular_konfigurator_2',
166      });
167    },
168    powermail_form_14: function () {
169      console.log('form14');
170      // Pushen eines benutzerdefinierten Events in den dataLayer
171      window.dataLayer = window.dataLayer || [];
172      dataLayer.push({
173        event: 'kontaktformular_konfigurator_1',
174      });
175    },
176  };
177
178  // Beim Klick auf einen Submit-Button merken wir uns, welches Formular es war
179  document
180    .querySelectorAll('form.powermail_form')
181    .forEach(function (form) {
182      const classList = Array.from(form.classList);
183      const knownClass = classList.find((cls) =>
184        cls.startsWith('powermail_form_')
185      );
186
187      const submitButton = form.querySelector('input[type="submit"]');
188      if (submitButton && knownClass) {
189        submitButton.addEventListener('click', function () {
190          activeFormClass = knownClass;
191        });
192      }
193    });
194
195  // Beobachte den DOM nach dem div.powermail_create
196  const observer = new MutationObserver(function (mutations) {
197    mutations.forEach(function (mutation) {
198      // Überprüfe, ob das div.powermail_create jetzt im DOM vorhanden ist
199      if (mutation.type === 'childList') {
200        const powermailCreateDiv = document.querySelector(
201          '.powermail_create'
202        );
203
204        if (
205          powermailCreateDiv &&
206          activeFormClass &&
207          formConversionMap[activeFormClass]
208        ) {
209          formConversionMap[activeFormClass](); // passendes Tracking auslösen
210          activeFormClass = null; // zurücksetzen
211        }
212      }
213    });
214  });
215
216  // Starte die Beobachtung des gesamten Body, um das div.powermail_create zu finden
217  observer.observe(document.body, {
218    childList: true,
219    subtree: true,
220  });
221
222  const modelModals = document.querySelectorAll('.model3d-iframe');
223
224  modelModals.forEach((el) => {
225    const modalEl = document.getElementById(el.dataset.modalId);
226    const containerEl = document.getElementById(
227      el.getAttribute('id')
228    );
229    modalEl.addEventListener('show.bs.modal', () => {
230      if (!containerEl.querySelector('iframe')) {
231        const iframe = document.createElement('iframe');
232        let data = el.dataset.iframeData ? JSON.parse(el.dataset.iframeData) : {};
233        iframe.src = el.dataset.iframeSrc;
234        iframe.name = el.dataset.iframeName;
235        iframe.style = el.dataset.iframeStyle;
236        iframe.innerHTML = "<p>Ihr Browser kann leider keine eingebetteten Frames anzeigen:<br>";
237        iframe.innerHTML+= "Sie können die eingebettete Seite über den folgenden Verweis aufrufen:<br>";
238        iframe.innerHTML+= "<a class='video-btn' href='" +  data?.button2?.url + "'>" + data?.button2?.text  + "</a></p>";
239        containerEl.replaceWith(iframe);
240      }
241    });
242  });
243});
244
245
246/***/ }),
247
248/***/ "./Resources/Private/JavaScript/module/newsletter-contact.js":
249/*!*******************************************************************!*\
250  !*** ./Resources/Private/JavaScript/module/newsletter-contact.js ***!
251  \*******************************************************************/
252/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
253
254"use strict";
255__webpack_require__.r(__webpack_exports__);
256/* harmony export */ __webpack_require__.d(__webpack_exports__, {
257/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
258/* harmony export */ });
259/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");
260/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);
261
262class NewsletterContact {
263    constructor() {
264        jquery__WEBPACK_IMPORTED_MODULE_0___default()(function() {
265            console.log( jquery__WEBPACK_IMPORTED_MODULE_0___default()('.frame-layout-main-two-cols-collapse .powermail_fieldset.powermail_fieldset_66'));
266            jquery__WEBPACK_IMPORTED_MODULE_0___default()('.frame-layout-main-two-cols-collapse .powermail_fieldset.powermail_fieldset_66').each(function () {
267                console.log('BUILD ACCORDION');
268                let $fieldset = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this);
269                let $legendText = $fieldset.find('legend').text();
270                let $accordion = jquery__WEBPACK_IMPORTED_MODULE_0___default()(`<div class="accordion" id="accordionFormCollapse">
271    <div class="accordion-item">
272        <h2 class="accordion-header">
273        <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseAdditionalInformation" aria-expanded="false" aria-controls="collapseAdditionalInformation">
274            ${$legendText}
275        </button>
276        </h2>
277        <div id="collapseAdditionalInformation" class="accordion-collapse collapse collapsed" data-bs-parent="#accordionFormCollapse">
278        <div class="accordion-body">
279        </div>
280        </div>
281    </div>
282    </div>`);
283            $accordion.insertAfter($fieldset);
284            $fieldset.appendTo($accordion.find('.accordion-body') );
285            $fieldset.find('legend').hide();
286
287            });
288        });
289    }
290}
291
292let newsletterContact = new NewsletterContact();
293/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (newsletterContact);
294
295/***/ }),
296
297/***/ "./Resources/Private/JavaScript/module/powermail.js":
298/*!**********************************************************!*\
299  !*** ./Resources/Private/JavaScript/module/powermail.js ***!
300  \**********************************************************/
301/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
302
303"use strict";
304__webpack_require__.r(__webpack_exports__);
305/* harmony export */ __webpack_require__.d(__webpack_exports__, {
306/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
307/* harmony export */ });
308class PowermailExtention {
309
310    #forms;
311
312    constructor() {
313        
314    }
315    init() {
316        this.#forms = document.querySelectorAll('.powermail_form');
317       /* document.querySelectorAll('.g-recaptcha').forEach((el, index) => {
318            let widgetId = grecaptcha.render(el, {
319                'sitekey': el.getAttribute('data-sitekey')
320            });
321            el.setAttribute('data-widget-id', widgetId); // Speichert die ID für spätere Verwendung
322        });*/
323        this.#forms.forEach(function(form) {
324            let formValidation = form.powermailFormValidation;
325        
326            formValidation.addValidator('grecaptcha', function(field) {
327                let $form = $(field).closest('form'); // Dem Formular zuordnen
328                // Überprüfen, ob das aktuelle Feld das reCAPTCHA-Feld ist
329                if ( (field.hasAttribute('name') && field.getAttribute('name') === 'g-recaptcha-response') 
330                    // oder ob es das letzte Eingabefeld im Formular ist und kein reCAPTCHA-Feld vorhanden ist
331                    || $(field).is($form.find('input').last()) && $form.find('[name="g-recaptcha-response"]').length == 0) {
332
333                    console.log("grecaptcha field:", field);
334                    // Die Widget-ID des reCAPTCHA holen
335                    let widgetId = $form.find('.g-recaptcha').attr('data-widget-id');
336        
337                    console.log('widgetId:', widgetId, $form.find('.g-recaptcha'));
338                    if (typeof grecaptcha !== "undefined" && typeof grecaptcha.getResponse  == "function" && grecaptcha.getResponse(widgetId).length !== 0) {
339                        console.log("reCAPTCHA resolved for form:", $form);
340                        $form.find(".g-recaptcha iframe").css("border", "none");
341                        return false; // Validierung erfolgreich
342                    } else {
343                        console.log("No captcha for form:", $form);
344                        $(field).attr('data-powermail-grecaptcha-message', 'reCAPTCHA validation failed');
345                        $form.find(".g-recaptcha iframe").css("border", "4px solid var(--pm-red)");
346                        $form.find(".recaptcha-placeholder").css("border", "4px solid var(--pm-red)");
347                        return true; // Validierung schlägt fehl
348                    }
349                } 
350                return false; // Falls das Feld nicht `g-recaptcha-response` ist
351            });
352        });
353    }
354}
355let powermail = new PowermailExtention();
356/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (powermail);
357
358/***/ }),
359
vendor: 9,944 bytes, lines 360-583
360/***/ "./node_modules/@popperjs/core/lib/createPopper.js":
361/*!*********************************************************!*\
362  !*** ./node_modules/@popperjs/core/lib/createPopper.js ***!
363  \*********************************************************/
364/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
365
366"use strict";
367__webpack_require__.r(__webpack_exports__);
368/* harmony export */ __webpack_require__.d(__webpack_exports__, {
369/* harmony export */   createPopper: () => (/* binding */ createPopper),
370/* harmony export */   detectOverflow: () => (/* reexport safe */ _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__["default"]),
371/* harmony export */   popperGenerator: () => (/* binding */ popperGenerator)
372/* harmony export */ });
373/* harmony import */ var _dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dom-utils/getCompositeRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js");
374/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js");
375/* harmony import */ var _dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom-utils/listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js");
376/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
377/* harmony import */ var _utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/orderModifiers.js */ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js");
378/* harmony import */ var _utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/debounce.js */ "./node_modules/@popperjs/core/lib/utils/debounce.js");
379/* harmony import */ var _utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/mergeByName.js */ "./node_modules/@popperjs/core/lib/utils/mergeByName.js");
380/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
381/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
382
383
384
385
386
387
388
389
390
391var DEFAULT_OPTIONS = {
392  placement: 'bottom',
393  modifiers: [],
394  strategy: 'absolute'
395};
396
397function areValidElements() {
398  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
399    args[_key] = arguments[_key];
400  }
401
402  return !args.some(function (element) {
403    return !(element && typeof element.getBoundingClientRect === 'function');
404  });
405}
406
407function popperGenerator(generatorOptions) {
408  if (generatorOptions === void 0) {
409    generatorOptions = {};
410  }
411
412  var _generatorOptions = generatorOptions,
413      _generatorOptions$def = _generatorOptions.defaultModifiers,
414      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
415      _generatorOptions$def2 = _generatorOptions.defaultOptions,
416      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
417  return function createPopper(reference, popper, options) {
418    if (options === void 0) {
419      options = defaultOptions;
420    }
421
422    var state = {
423      placement: 'bottom',
424      orderedModifiers: [],
425      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
426      modifiersData: {},
427      elements: {
428        reference: reference,
429        popper: popper
430      },
431      attributes: {},
432      styles: {}
433    };
434    var effectCleanupFns = [];
435    var isDestroyed = false;
436    var instance = {
437      state: state,
438      setOptions: function setOptions(setOptionsAction) {
439        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
440        cleanupModifierEffects();
441        state.options = Object.assign({}, defaultOptions, state.options, options);
442        state.scrollParents = {
443          reference: (0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(reference) ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(reference) : reference.contextElement ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(reference.contextElement) : [],
444          popper: (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(popper)
445        }; // Orders the modifiers based on their dependencies and `phase`
446        // properties
447
448        var orderedModifiers = (0,_utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__["default"])([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
449
450        state.orderedModifiers = orderedModifiers.filter(function (m) {
451          return m.enabled;
452        });
453        runModifierEffects();
454        return instance.update();
455      },
456      // Sync update – it will always be executed, even if not necessary. This
457      // is useful for low frequency updates where sync behavior simplifies the
458      // logic.
459      // For high frequency updates (e.g. `resize` and `scroll` events), always
460      // prefer the async Popper#update method
461      forceUpdate: function forceUpdate() {
462        if (isDestroyed) {
463          return;
464        }
465
466        var _state$elements = state.elements,
467            reference = _state$elements.reference,
468            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
469        // anymore
470
471        if (!areValidElements(reference, popper)) {
472          return;
473        } // Store the reference and popper rects to be read by modifiers
474
475
476        state.rects = {
477          reference: (0,_dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__["default"])(reference, (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(popper), state.options.strategy === 'fixed'),
478          popper: (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(popper)
479        }; // Modifiers have the ability to reset the current update cycle. The
480        // most common use case for this is the `flip` modifier changing the
481        // placement, which then needs to re-run all the modifiers, because the
482        // logic was previously ran for the previous placement and is therefore
483        // stale/incorrect
484
485        state.reset = false;
486        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
487        // is filled with the initial data specified by the modifier. This means
488        // it doesn't persist and is fresh on each update.
489        // To ensure persistent data, use `${name}#persistent`
490
491        state.orderedModifiers.forEach(function (modifier) {
492          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
493        });
494
495        for (var index = 0; index < state.orderedModifiers.length; index++) {
496          if (state.reset === true) {
497            state.reset = false;
498            index = -1;
499            continue;
500          }
501
502          var _state$orderedModifie = state.orderedModifiers[index],
503              fn = _state$orderedModifie.fn,
504              _state$orderedModifie2 = _state$orderedModifie.options,
505              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
506              name = _state$orderedModifie.name;
507
508          if (typeof fn === 'function') {
509            state = fn({
510              state: state,
511              options: _options,
512              name: name,
513              instance: instance
514            }) || state;
515          }
516        }
517      },
518      // Async and optimistically optimized update – it will not be executed if
519      // not necessary (debounced to run at most once-per-tick)
520      update: (0,_utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__["default"])(function () {
521        return new Promise(function (resolve) {
522          instance.forceUpdate();
523          resolve(state);
524        });
525      }),
526      destroy: function destroy() {
527        cleanupModifierEffects();
528        isDestroyed = true;
529      }
530    };
531
532    if (!areValidElements(reference, popper)) {
533      return instance;
534    }
535
536    instance.setOptions(options).then(function (state) {
537      if (!isDestroyed && options.onFirstUpdate) {
538        options.onFirstUpdate(state);
539      }
540    }); // Modifiers have the ability to execute arbitrary code before the first
541    // update cycle runs. They will be executed in the same order as the update
542    // cycle. This is useful when a modifier adds some persistent data that
543    // other modifiers need to use, but the modifier is run after the dependent
544    // one.
545
546    function runModifierEffects() {
547      state.orderedModifiers.forEach(function (_ref) {
548        var name = _ref.name,
549            _ref$options = _ref.options,
550            options = _ref$options === void 0 ? {} : _ref$options,
551            effect = _ref.effect;
552
553        if (typeof effect === 'function') {
554          var cleanupFn = effect({
555            state: state,
556            name: name,
557            instance: instance,
558            options: options
559          });
560
561          var noopFn = function noopFn() {};
562
563          effectCleanupFns.push(cleanupFn || noopFn);
564        }
565      });
566    }
567
568    function cleanupModifierEffects() {
569      effectCleanupFns.forEach(function (fn) {
570        return fn();
571      });
572      effectCleanupFns = [];
573    }
574
575    return instance;
576  };
577}
578var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules
579
580
581
582/***/ }),
583
vendor: 1,418 bytes, lines 584-621
584/***/ "./node_modules/@popperjs/core/lib/dom-utils/contains.js":
585/*!***************************************************************!*\
586  !*** ./node_modules/@popperjs/core/lib/dom-utils/contains.js ***!
587  \***************************************************************/
588/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
589
590"use strict";
591__webpack_require__.r(__webpack_exports__);
592/* harmony export */ __webpack_require__.d(__webpack_exports__, {
593/* harmony export */   "default": () => (/* binding */ contains)
594/* harmony export */ });
595/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
596
597function contains(parent, child) {
598  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
599
600  if (parent.contains(child)) {
601    return true;
602  } // then fallback to custom implementation with Shadow DOM support
603  else if (rootNode && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(rootNode)) {
604      var next = child;
605
606      do {
607        if (next && parent.isSameNode(next)) {
608          return true;
609        } // $FlowFixMe[prop-missing]: need a better way to handle this...
610
611
612        next = next.parentNode || next.host;
613      } while (next);
614    } // Give up, the result is false
615
616
617  return false;
618}
619
620/***/ }),
621
vendor: 2,806 bytes, lines 622-680
622/***/ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js":
623/*!****************************************************************************!*\
624  !*** ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js ***!
625  \****************************************************************************/
626/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
627
628"use strict";
629__webpack_require__.r(__webpack_exports__);
630/* harmony export */ __webpack_require__.d(__webpack_exports__, {
631/* harmony export */   "default": () => (/* binding */ getBoundingClientRect)
632/* harmony export */ });
633/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
634/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
635/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
636/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isLayoutViewport.js */ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js");
637
638
639
640
641function getBoundingClientRect(element, includeScale, isFixedStrategy) {
642  if (includeScale === void 0) {
643    includeScale = false;
644  }
645
646  if (isFixedStrategy === void 0) {
647    isFixedStrategy = false;
648  }
649
650  var clientRect = element.getBoundingClientRect();
651  var scaleX = 1;
652  var scaleY = 1;
653
654  if (includeScale && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {
655    scaleX = element.offsetWidth > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.width) / element.offsetWidth || 1 : 1;
656    scaleY = element.offsetHeight > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.height) / element.offsetHeight || 1 : 1;
657  }
658
659  var _ref = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element) : window,
660      visualViewport = _ref.visualViewport;
661
662  var addVisualOffsets = !(0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__["default"])() && isFixedStrategy;
663  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
664  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
665  var width = clientRect.width / scaleX;
666  var height = clientRect.height / scaleY;
667  return {
668    width: width,
669    height: height,
670    top: y,
671    right: x + width,
672    bottom: y + height,
673    left: x,
674    x: x,
675    y: y
676  };
677}
678
679/***/ }),
680
vendor: 6,916 bytes, lines 681-778
681/***/ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js":
682/*!**********************************************************************!*\
683  !*** ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js ***!
684  \**********************************************************************/
685/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
686
687"use strict";
688__webpack_require__.r(__webpack_exports__);
689/* harmony export */ __webpack_require__.d(__webpack_exports__, {
690/* harmony export */   "default": () => (/* binding */ getClippingRect)
691/* harmony export */ });
692/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
693/* harmony import */ var _getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getViewportRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js");
694/* harmony import */ var _getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js");
695/* harmony import */ var _listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js");
696/* harmony import */ var _getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
697/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
698/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
699/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
700/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
701/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");
702/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js");
703/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
704/* harmony import */ var _utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js");
705/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721function getInnerBoundingClientRect(element, strategy) {
722  var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, false, strategy === 'fixed');
723  rect.top = rect.top + element.clientTop;
724  rect.left = rect.left + element.clientLeft;
725  rect.bottom = rect.top + element.clientHeight;
726  rect.right = rect.left + element.clientWidth;
727  rect.width = element.clientWidth;
728  rect.height = element.clientHeight;
729  rect.x = rect.left;
730  rect.y = rect.top;
731  return rect;
732}
733
734function getClientRectFromMixedType(element, clippingParent, strategy) {
735  return clippingParent === _enums_js__WEBPACK_IMPORTED_MODULE_1__.viewport ? (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, strategy)) : (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element)));
736} // A "clipping parent" is an overflowable container with the characteristic of
737// clipping (or hiding) overflowing elements with a position different from
738// `initial`
739
740
741function getClippingParents(element) {
742  var clippingParents = (0,_listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__["default"])((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_8__["default"])(element));
743  var canEscapeClipping = ['absolute', 'fixed'].indexOf((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__["default"])(element).position) >= 0;
744  var clipperElement = canEscapeClipping && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isHTMLElement)(element) ? (0,_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__["default"])(element) : element;
745
746  if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clipperElement)) {
747    return [];
748  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
749
750
751  return clippingParents.filter(function (clippingParent) {
752    return (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) && (0,_contains_js__WEBPACK_IMPORTED_MODULE_11__["default"])(clippingParent, clipperElement) && (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_12__["default"])(clippingParent) !== 'body';
753  });
754} // Gets the maximum area that the element is visible in due to any number of
755// clipping parents
756
757
758function getClippingRect(element, boundary, rootBoundary, strategy) {
759  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
760  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
761  var firstClippingParent = clippingParents[0];
762  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
763    var rect = getClientRectFromMixedType(element, clippingParent, strategy);
764    accRect.top = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.top, accRect.top);
765    accRect.right = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.right, accRect.right);
766    accRect.bottom = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.bottom, accRect.bottom);
767    accRect.left = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.left, accRect.left);
768    return accRect;
769  }, getClientRectFromMixedType(element, firstClippingParent, strategy));
770  clippingRect.width = clippingRect.right - clippingRect.left;
771  clippingRect.height = clippingRect.bottom - clippingRect.top;
772  clippingRect.x = clippingRect.left;
773  clippingRect.y = clippingRect.top;
774  return clippingRect;
775}
776
777/***/ }),
778
vendor: 4,352 bytes, lines 779-858
779/***/ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js":
780/*!***********************************************************************!*\
781  !*** ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js ***!
782  \***********************************************************************/
783/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
784
785"use strict";
786__webpack_require__.r(__webpack_exports__);
787/* harmony export */ __webpack_require__.d(__webpack_exports__, {
788/* harmony export */   "default": () => (/* binding */ getCompositeRect)
789/* harmony export */ });
790/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
791/* harmony import */ var _getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getNodeScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js");
792/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
793/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
794/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js");
795/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
796/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js");
797/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
798
799
800
801
802
803
804
805
806
807function isElementScaled(element) {
808  var rect = element.getBoundingClientRect();
809  var scaleX = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.width) / element.offsetWidth || 1;
810  var scaleY = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.height) / element.offsetHeight || 1;
811  return scaleX !== 1 || scaleY !== 1;
812} // Returns the composite rect of an element relative to its offsetParent.
813// Composite means it takes into account transforms as well as layout.
814
815
816function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
817  if (isFixed === void 0) {
818    isFixed = false;
819  }
820
821  var isOffsetParentAnElement = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent);
822  var offsetParentIsScaled = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent) && isElementScaled(offsetParent);
823  var documentElement = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(offsetParent);
824  var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(elementOrVirtualElement, offsetParentIsScaled, isFixed);
825  var scroll = {
826    scrollLeft: 0,
827    scrollTop: 0
828  };
829  var offsets = {
830    x: 0,
831    y: 0
832  };
833
834  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
835    if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
836    (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(documentElement)) {
837      scroll = (0,_getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__["default"])(offsetParent);
838    }
839
840    if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent)) {
841      offsets = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(offsetParent, true);
842      offsets.x += offsetParent.clientLeft;
843      offsets.y += offsetParent.clientTop;
844    } else if (documentElement) {
845      offsets.x = (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__["default"])(documentElement);
846    }
847  }
848
849  return {
850    x: rect.left + scroll.scrollLeft - offsets.x,
851    y: rect.top + scroll.scrollTop - offsets.y,
852    width: rect.width,
853    height: rect.height
854  };
855}
856
857/***/ }),
858
vendor: 934 bytes, lines 859-877
859/***/ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js":
860/*!***********************************************************************!*\
861  !*** ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js ***!
862  \***********************************************************************/
863/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
864
865"use strict";
866__webpack_require__.r(__webpack_exports__);
867/* harmony export */ __webpack_require__.d(__webpack_exports__, {
868/* harmony export */   "default": () => (/* binding */ getComputedStyle)
869/* harmony export */ });
870/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
871
872function getComputedStyle(element) {
873  return (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element).getComputedStyle(element);
874}
875
876/***/ }),
877
vendor: 1,105 bytes, lines 878-898
878/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js":
879/*!*************************************************************************!*\
880  !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js ***!
881  \*************************************************************************/
882/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
883
884"use strict";
885__webpack_require__.r(__webpack_exports__);
886/* harmony export */ __webpack_require__.d(__webpack_exports__, {
887/* harmony export */   "default": () => (/* binding */ getDocumentElement)
888/* harmony export */ });
889/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
890
891function getDocumentElement(element) {
892  // $FlowFixMe[incompatible-return]: assume body is always available
893  return (((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
894  element.document) || window.document).documentElement;
895}
896
897/***/ }),
898
vendor: 2,858 bytes, lines 899-946
899/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js":
900/*!**********************************************************************!*\
901  !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js ***!
902  \**********************************************************************/
903/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
904
905"use strict";
906__webpack_require__.r(__webpack_exports__);
907/* harmony export */ __webpack_require__.d(__webpack_exports__, {
908/* harmony export */   "default": () => (/* binding */ getDocumentRect)
909/* harmony export */ });
910/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
911/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
912/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js");
913/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js");
914/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
915
916
917
918
919 // Gets the entire size of the scrollable document area, even extending outside
920// of the `<html>` and `<body>` rect bounds if horizontally scrollable
921
922function getDocumentRect(element) {
923  var _element$ownerDocumen;
924
925  var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element);
926  var winScroll = (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element);
927  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
928  var width = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
929  var height = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
930  var x = -winScroll.scrollLeft + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element);
931  var y = -winScroll.scrollTop;
932
933  if ((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__["default"])(body || html).direction === 'rtl') {
934    x += (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.clientWidth, body ? body.clientWidth : 0) - width;
935  }
936
937  return {
938    width: width,
939    height: height,
940    x: x,
941    y: y
942  };
943}
944
945/***/ }),
946
vendor: 766 bytes, lines 947-966
947/***/ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js":
948/*!***************************************************************************!*\
949  !*** ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js ***!
950  \***************************************************************************/
951/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
952
953"use strict";
954__webpack_require__.r(__webpack_exports__);
955/* harmony export */ __webpack_require__.d(__webpack_exports__, {
956/* harmony export */   "default": () => (/* binding */ getHTMLElementScroll)
957/* harmony export */ });
958function getHTMLElementScroll(element) {
959  return {
960    scrollLeft: element.scrollLeft,
961    scrollTop: element.scrollTop
962  };
963}
964
965/***/ }),
966
vendor: 1,550 bytes, lines 967-1006
967/***/ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js":
968/*!********************************************************************!*\
969  !*** ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js ***!
970  \********************************************************************/
971/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
972
973"use strict";
974__webpack_require__.r(__webpack_exports__);
975/* harmony export */ __webpack_require__.d(__webpack_exports__, {
976/* harmony export */   "default": () => (/* binding */ getLayoutRect)
977/* harmony export */ });
978/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
979 // Returns the layout rect of an element relative to its offsetParent. Layout
980// means it doesn't take into account transforms.
981
982function getLayoutRect(element) {
983  var clientRect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); // Use the clientRect sizes if it's not been transformed.
984  // Fixes https://github.com/popperjs/popper-core/issues/1223
985
986  var width = element.offsetWidth;
987  var height = element.offsetHeight;
988
989  if (Math.abs(clientRect.width - width) <= 1) {
990    width = clientRect.width;
991  }
992
993  if (Math.abs(clientRect.height - height) <= 1) {
994    height = clientRect.height;
995  }
996
997  return {
998    x: element.offsetLeft,
999    y: element.offsetTop,
1000    width: width,
1001    height: height
1002  };
1003}
1004
1005/***/ }),
1006
vendor: 693 bytes, lines 1007-1023
1007/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js":
1008/*!******************************************************************!*\
1009  !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js ***!
1010  \******************************************************************/
1011/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1012
1013"use strict";
1014__webpack_require__.r(__webpack_exports__);
1015/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1016/* harmony export */   "default": () => (/* binding */ getNodeName)
1017/* harmony export */ });
1018function getNodeName(element) {
1019  return element ? (element.nodeName || '').toLowerCase() : null;
1020}
1021
1022/***/ }),
1023
vendor: 1,724 bytes, lines 1024-1052
1024/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js":
1025/*!********************************************************************!*\
1026  !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js ***!
1027  \********************************************************************/
1028/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1029
1030"use strict";
1031__webpack_require__.r(__webpack_exports__);
1032/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1033/* harmony export */   "default": () => (/* binding */ getNodeScroll)
1034/* harmony export */ });
1035/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js");
1036/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1037/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
1038/* harmony import */ var _getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getHTMLElementScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js");
1039
1040
1041
1042
1043function getNodeScroll(node) {
1044  if (node === (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node) || !(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node)) {
1045    return (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node);
1046  } else {
1047    return (0,_getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node);
1048  }
1049}
1050
1051/***/ }),
1052
vendor: 4,972 bytes, lines 1053-1142
1053/***/ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js":
1054/*!**********************************************************************!*\
1055  !*** ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js ***!
1056  \**********************************************************************/
1057/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1058
1059"use strict";
1060__webpack_require__.r(__webpack_exports__);
1061/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1062/* harmony export */   "default": () => (/* binding */ getOffsetParent)
1063/* harmony export */ });
1064/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1065/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
1066/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
1067/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
1068/* harmony import */ var _isTableElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isTableElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js");
1069/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");
1070/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/userAgent.js */ "./node_modules/@popperjs/core/lib/utils/userAgent.js");
1071
1072
1073
1074
1075
1076
1077
1078
1079function getTrueOffsetParent(element) {
1080  if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || // https://github.com/popperjs/popper-core/issues/837
1081  (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element).position === 'fixed') {
1082    return null;
1083  }
1084
1085  return element.offsetParent;
1086} // `.offsetParent` reports `null` for fixed elements, while absolute elements
1087// return the containing block
1088
1089
1090function getContainingBlock(element) {
1091  var isFirefox = /firefox/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__["default"])());
1092  var isIE = /Trident/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__["default"])());
1093
1094  if (isIE && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {
1095    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
1096    var elementCss = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element);
1097
1098    if (elementCss.position === 'fixed') {
1099      return null;
1100    }
1101  }
1102
1103  var currentNode = (0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element);
1104
1105  if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(currentNode)) {
1106    currentNode = currentNode.host;
1107  }
1108
1109  while ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(currentNode) && ['html', 'body'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(currentNode)) < 0) {
1110    var css = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(currentNode); // This is non-exhaustive but covers the most common CSS properties that
1111    // create a containing block.
1112    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
1113
1114    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
1115      return currentNode;
1116    } else {
1117      currentNode = currentNode.parentNode;
1118    }
1119  }
1120
1121  return null;
1122} // Gets the closest ancestor positioned element. Handles some edge cases,
1123// such as table ancestors and cross browser bugs.
1124
1125
1126function getOffsetParent(element) {
1127  var window = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element);
1128  var offsetParent = getTrueOffsetParent(element);
1129
1130  while (offsetParent && (0,_isTableElement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(offsetParent) && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent).position === 'static') {
1131    offsetParent = getTrueOffsetParent(offsetParent);
1132  }
1133
1134  if (offsetParent && ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) === 'html' || (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) === 'body' && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent).position === 'static')) {
1135    return window;
1136  }
1137
1138  return offsetParent || getContainingBlock(element) || window;
1139}
1140
1141/***/ }),
1142
vendor: 1,900 bytes, lines 1143-1178
1143/***/ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js":
1144/*!********************************************************************!*\
1145  !*** ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js ***!
1146  \********************************************************************/
1147/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1148
1149"use strict";
1150__webpack_require__.r(__webpack_exports__);
1151/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1152/* harmony export */   "default": () => (/* binding */ getParentNode)
1153/* harmony export */ });
1154/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
1155/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
1156/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
1157
1158
1159
1160function getParentNode(element) {
1161  if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element) === 'html') {
1162    return element;
1163  }
1164
1165  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
1166    // $FlowFixMe[incompatible-return]
1167    // $FlowFixMe[prop-missing]
1168    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
1169    element.parentNode || ( // DOM Element detected
1170    (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isShadowRoot)(element) ? element.host : null) || // ShadowRoot detected
1171    // $FlowFixMe[incompatible-call]: HTMLElement is a Node
1172    (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element) // fallback
1173
1174  );
1175}
1176
1177/***/ }),
1178
vendor: 1,878 bytes, lines 1179-1212
1179/***/ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js":
1180/*!**********************************************************************!*\
1181  !*** ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js ***!
1182  \**********************************************************************/
1183/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1184
1185"use strict";
1186__webpack_require__.r(__webpack_exports__);
1187/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1188/* harmony export */   "default": () => (/* binding */ getScrollParent)
1189/* harmony export */ });
1190/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");
1191/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js");
1192/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
1193/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
1194
1195
1196
1197
1198function getScrollParent(node) {
1199  if (['html', 'body', '#document'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node)) >= 0) {
1200    // $FlowFixMe[incompatible-return]: assume body is always available
1201    return node.ownerDocument.body;
1202  }
1203
1204  if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node) && (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node)) {
1205    return node;
1206  }
1207
1208  return getScrollParent((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node));
1209}
1210
1211/***/ }),
1212
vendor: 2,234 bytes, lines 1213-1261
1213/***/ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js":
1214/*!**********************************************************************!*\
1215  !*** ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js ***!
1216  \**********************************************************************/
1217/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1218
1219"use strict";
1220__webpack_require__.r(__webpack_exports__);
1221/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1222/* harmony export */   "default": () => (/* binding */ getViewportRect)
1223/* harmony export */ });
1224/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1225/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
1226/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js");
1227/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isLayoutViewport.js */ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js");
1228
1229
1230
1231
1232function getViewportRect(element, strategy) {
1233  var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element);
1234  var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element);
1235  var visualViewport = win.visualViewport;
1236  var width = html.clientWidth;
1237  var height = html.clientHeight;
1238  var x = 0;
1239  var y = 0;
1240
1241  if (visualViewport) {
1242    width = visualViewport.width;
1243    height = visualViewport.height;
1244    var layoutViewport = (0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__["default"])();
1245
1246    if (layoutViewport || !layoutViewport && strategy === 'fixed') {
1247      x = visualViewport.offsetLeft;
1248      y = visualViewport.offsetTop;
1249    }
1250  }
1251
1252  return {
1253    width: width,
1254    height: height,
1255    x: x + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element),
1256    y: y
1257  };
1258}
1259
1260/***/ }),
1261
vendor: 842 bytes, lines 1262-1287
1262/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js":
1263/*!****************************************************************!*\
1264  !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js ***!
1265  \****************************************************************/
1266/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1267
1268"use strict";
1269__webpack_require__.r(__webpack_exports__);
1270/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1271/* harmony export */   "default": () => (/* binding */ getWindow)
1272/* harmony export */ });
1273function getWindow(node) {
1274  if (node == null) {
1275    return window;
1276  }
1277
1278  if (node.toString() !== '[object Window]') {
1279    var ownerDocument = node.ownerDocument;
1280    return ownerDocument ? ownerDocument.defaultView || window : window;
1281  }
1282
1283  return node;
1284}
1285
1286/***/ }),
1287
vendor: 1,039 bytes, lines 1288-1312
1288/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js":
1289/*!**********************************************************************!*\
1290  !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js ***!
1291  \**********************************************************************/
1292/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1293
1294"use strict";
1295__webpack_require__.r(__webpack_exports__);
1296/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1297/* harmony export */   "default": () => (/* binding */ getWindowScroll)
1298/* harmony export */ });
1299/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1300
1301function getWindowScroll(node) {
1302  var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node);
1303  var scrollLeft = win.pageXOffset;
1304  var scrollTop = win.pageYOffset;
1305  return {
1306    scrollLeft: scrollLeft,
1307    scrollTop: scrollTop
1308  };
1309}
1310
1311/***/ }),
1312
vendor: 1,913 bytes, lines 1313-1342
1313/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js":
1314/*!**************************************************************************!*\
1315  !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js ***!
1316  \**************************************************************************/
1317/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1318
1319"use strict";
1320__webpack_require__.r(__webpack_exports__);
1321/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1322/* harmony export */   "default": () => (/* binding */ getWindowScrollBarX)
1323/* harmony export */ });
1324/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
1325/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
1326/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js");
1327
1328
1329
1330function getWindowScrollBarX(element) {
1331  // If <html> has a CSS width greater than the viewport, then this will be
1332  // incorrect for RTL.
1333  // Popper 1 is broken in this case and never had a bug report so let's assume
1334  // it's not an issue. I don't think anyone ever specifies width on <html>
1335  // anyway.
1336  // Browsers where the left scrollbar doesn't cause an issue report `0` for
1337  // this (e.g. Edge 2019, IE11, Safari)
1338  return (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)).left + (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element).scrollLeft;
1339}
1340
1341/***/ }),
1342
vendor: 1,585 bytes, lines 1343-1382
1343/***/ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js":
1344/*!*****************************************************************!*\
1345  !*** ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js ***!
1346  \*****************************************************************/
1347/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1348
1349"use strict";
1350__webpack_require__.r(__webpack_exports__);
1351/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1352/* harmony export */   isElement: () => (/* binding */ isElement),
1353/* harmony export */   isHTMLElement: () => (/* binding */ isHTMLElement),
1354/* harmony export */   isShadowRoot: () => (/* binding */ isShadowRoot)
1355/* harmony export */ });
1356/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1357
1358
1359function isElement(node) {
1360  var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).Element;
1361  return node instanceof OwnElement || node instanceof Element;
1362}
1363
1364function isHTMLElement(node) {
1365  var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).HTMLElement;
1366  return node instanceof OwnElement || node instanceof HTMLElement;
1367}
1368
1369function isShadowRoot(node) {
1370  // IE 11 has no ShadowRoot
1371  if (typeof ShadowRoot === 'undefined') {
1372    return false;
1373  }
1374
1375  var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).ShadowRoot;
1376  return node instanceof OwnElement || node instanceof ShadowRoot;
1377}
1378
1379
1380
1381/***/ }),
1382
vendor: 949 bytes, lines 1383-1401
1383/***/ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js":
1384/*!***********************************************************************!*\
1385  !*** ./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js ***!
1386  \***********************************************************************/
1387/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1388
1389"use strict";
1390__webpack_require__.r(__webpack_exports__);
1391/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1392/* harmony export */   "default": () => (/* binding */ isLayoutViewport)
1393/* harmony export */ });
1394/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/userAgent.js */ "./node_modules/@popperjs/core/lib/utils/userAgent.js");
1395
1396function isLayoutViewport() {
1397  return !/^((?!chrome|android).)*safari/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__["default"])());
1398}
1399
1400/***/ }),
1401
vendor: 1,223 bytes, lines 1402-1426
1402/***/ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js":
1403/*!*********************************************************************!*\
1404  !*** ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js ***!
1405  \*********************************************************************/
1406/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1407
1408"use strict";
1409__webpack_require__.r(__webpack_exports__);
1410/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1411/* harmony export */   "default": () => (/* binding */ isScrollParent)
1412/* harmony export */ });
1413/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
1414
1415function isScrollParent(element) {
1416  // Firefox wants us to check `-x` and `-y` variations as well
1417  var _getComputedStyle = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element),
1418      overflow = _getComputedStyle.overflow,
1419      overflowX = _getComputedStyle.overflowX,
1420      overflowY = _getComputedStyle.overflowY;
1421
1422  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
1423}
1424
1425/***/ }),
1426
vendor: 940 bytes, lines 1427-1445
1427/***/ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js":
1428/*!*********************************************************************!*\
1429  !*** ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js ***!
1430  \*********************************************************************/
1431/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1432
1433"use strict";
1434__webpack_require__.r(__webpack_exports__);
1435/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1436/* harmony export */   "default": () => (/* binding */ isTableElement)
1437/* harmony export */ });
1438/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
1439
1440function isTableElement(element) {
1441  return ['table', 'td', 'th'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element)) >= 0;
1442}
1443
1444/***/ }),
1445
vendor: 2,529 bytes, lines 1446-1489
1446/***/ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js":
1447/*!************************************************************************!*\
1448  !*** ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js ***!
1449  \************************************************************************/
1450/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1451
1452"use strict";
1453__webpack_require__.r(__webpack_exports__);
1454/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1455/* harmony export */   "default": () => (/* binding */ listScrollParents)
1456/* harmony export */ });
1457/* harmony import */ var _getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js");
1458/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");
1459/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1460/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js");
1461
1462
1463
1464
1465/*
1466given a DOM element, return the list of all scroll parents, up the list of ancesors
1467until we get to the top window object. This list is what we attach scroll listeners
1468to, because if any of these parent elements scroll, we'll need to re-calculate the
1469reference element's position.
1470*/
1471
1472function listScrollParents(element, list) {
1473  var _element$ownerDocumen;
1474
1475  if (list === void 0) {
1476    list = [];
1477  }
1478
1479  var scrollParent = (0,_getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element);
1480  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
1481  var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scrollParent);
1482  var target = isBody ? [win].concat(win.visualViewport || [], (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(scrollParent) ? scrollParent : []) : scrollParent;
1483  var updatedList = list.concat(target);
1484  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
1485  updatedList.concat(listScrollParents((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(target)));
1486}
1487
1488/***/ }),
1489
vendor: 3,198 bytes, lines 1490-1557
1490/***/ "./node_modules/@popperjs/core/lib/enums.js":
1491/*!**************************************************!*\
1492  !*** ./node_modules/@popperjs/core/lib/enums.js ***!
1493  \**************************************************/
1494/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1495
1496"use strict";
1497__webpack_require__.r(__webpack_exports__);
1498/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1499/* harmony export */   afterMain: () => (/* binding */ afterMain),
1500/* harmony export */   afterRead: () => (/* binding */ afterRead),
1501/* harmony export */   afterWrite: () => (/* binding */ afterWrite),
1502/* harmony export */   auto: () => (/* binding */ auto),
1503/* harmony export */   basePlacements: () => (/* binding */ basePlacements),
1504/* harmony export */   beforeMain: () => (/* binding */ beforeMain),
1505/* harmony export */   beforeRead: () => (/* binding */ beforeRead),
1506/* harmony export */   beforeWrite: () => (/* binding */ beforeWrite),
1507/* harmony export */   bottom: () => (/* binding */ bottom),
1508/* harmony export */   clippingParents: () => (/* binding */ clippingParents),
1509/* harmony export */   end: () => (/* binding */ end),
1510/* harmony export */   left: () => (/* binding */ left),
1511/* harmony export */   main: () => (/* binding */ main),
1512/* harmony export */   modifierPhases: () => (/* binding */ modifierPhases),
1513/* harmony export */   placements: () => (/* binding */ placements),
1514/* harmony export */   popper: () => (/* binding */ popper),
1515/* harmony export */   read: () => (/* binding */ read),
1516/* harmony export */   reference: () => (/* binding */ reference),
1517/* harmony export */   right: () => (/* binding */ right),
1518/* harmony export */   start: () => (/* binding */ start),
1519/* harmony export */   top: () => (/* binding */ top),
1520/* harmony export */   variationPlacements: () => (/* binding */ variationPlacements),
1521/* harmony export */   viewport: () => (/* binding */ viewport),
1522/* harmony export */   write: () => (/* binding */ write)
1523/* harmony export */ });
1524var top = 'top';
1525var bottom = 'bottom';
1526var right = 'right';
1527var left = 'left';
1528var auto = 'auto';
1529var basePlacements = [top, bottom, right, left];
1530var start = 'start';
1531var end = 'end';
1532var clippingParents = 'clippingParents';
1533var viewport = 'viewport';
1534var popper = 'popper';
1535var reference = 'reference';
1536var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
1537  return acc.concat([placement + "-" + start, placement + "-" + end]);
1538}, []);
1539var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
1540  return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
1541}, []); // modifiers that need to read the DOM
1542
1543var beforeRead = 'beforeRead';
1544var read = 'read';
1545var afterRead = 'afterRead'; // pure-logic modifiers
1546
1547var beforeMain = 'beforeMain';
1548var main = 'main';
1549var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
1550
1551var beforeWrite = 'beforeWrite';
1552var write = 'write';
1553var afterWrite = 'afterWrite';
1554var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
1555
1556/***/ }),
1557
vendor: 6,022 bytes, lines 1558-1622
1558/***/ "./node_modules/@popperjs/core/lib/index.js":
1559/*!**************************************************!*\
1560  !*** ./node_modules/@popperjs/core/lib/index.js ***!
1561  \**************************************************/
1562/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1563
1564"use strict";
1565__webpack_require__.r(__webpack_exports__);
1566/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1567/* harmony export */   afterMain: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterMain),
1568/* harmony export */   afterRead: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterRead),
1569/* harmony export */   afterWrite: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterWrite),
1570/* harmony export */   applyStyles: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.applyStyles),
1571/* harmony export */   arrow: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.arrow),
1572/* harmony export */   auto: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.auto),
1573/* harmony export */   basePlacements: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements),
1574/* harmony export */   beforeMain: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeMain),
1575/* harmony export */   beforeRead: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeRead),
1576/* harmony export */   beforeWrite: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeWrite),
1577/* harmony export */   bottom: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom),
1578/* harmony export */   clippingParents: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents),
1579/* harmony export */   computeStyles: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.computeStyles),
1580/* harmony export */   createPopper: () => (/* reexport safe */ _popper_js__WEBPACK_IMPORTED_MODULE_4__.createPopper),
1581/* harmony export */   createPopperBase: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.createPopper),
1582/* harmony export */   createPopperLite: () => (/* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__.createPopper),
1583/* harmony export */   detectOverflow: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_3__["default"]),
1584/* harmony export */   end: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.end),
1585/* harmony export */   eventListeners: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.eventListeners),
1586/* harmony export */   flip: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.flip),
1587/* harmony export */   hide: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.hide),
1588/* harmony export */   left: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.left),
1589/* harmony export */   main: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.main),
1590/* harmony export */   modifierPhases: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases),
1591/* harmony export */   offset: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.offset),
1592/* harmony export */   placements: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements),
1593/* harmony export */   popper: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper),
1594/* harmony export */   popperGenerator: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.popperGenerator),
1595/* harmony export */   popperOffsets: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.popperOffsets),
1596/* harmony export */   preventOverflow: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.preventOverflow),
1597/* harmony export */   read: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.read),
1598/* harmony export */   reference: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference),
1599/* harmony export */   right: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.right),
1600/* harmony export */   start: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.start),
1601/* harmony export */   top: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.top),
1602/* harmony export */   variationPlacements: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements),
1603/* harmony export */   viewport: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport),
1604/* harmony export */   write: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.write)
1605/* harmony export */ });
1606/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
1607/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/index.js */ "./node_modules/@popperjs/core/lib/modifiers/index.js");
1608/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js");
1609/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
1610/* harmony import */ var _popper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./popper.js */ "./node_modules/@popperjs/core/lib/popper.js");
1611/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./popper-lite.js */ "./node_modules/@popperjs/core/lib/popper-lite.js");
1612
1613 // eslint-disable-next-line import/no-unused-modules
1614
1615 // eslint-disable-next-line import/no-unused-modules
1616
1617 // eslint-disable-next-line import/no-unused-modules
1618
1619
1620
1621/***/ }),
1622
vendor: 3,689 bytes, lines 1623-1722
1623/***/ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js":
1624/*!******************************************************************!*\
1625  !*** ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js ***!
1626  \******************************************************************/
1627/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1628
1629"use strict";
1630__webpack_require__.r(__webpack_exports__);
1631/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1632/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1633/* harmony export */ });
1634/* harmony import */ var _dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");
1635/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
1636
1637 // This modifier takes the styles prepared by the `computeStyles` modifier
1638// and applies them to the HTMLElements such as popper and arrow
1639
1640function applyStyles(_ref) {
1641  var state = _ref.state;
1642  Object.keys(state.elements).forEach(function (name) {
1643    var style = state.styles[name] || {};
1644    var attributes = state.attributes[name] || {};
1645    var element = state.elements[name]; // arrow is optional + virtual elements
1646
1647    if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)) {
1648      return;
1649    } // Flow doesn't support to extend this property, but it's the most
1650    // effective way to apply styles to an HTMLElement
1651    // $FlowFixMe[cannot-write]
1652
1653
1654    Object.assign(element.style, style);
1655    Object.keys(attributes).forEach(function (name) {
1656      var value = attributes[name];
1657
1658      if (value === false) {
1659        element.removeAttribute(name);
1660      } else {
1661        element.setAttribute(name, value === true ? '' : value);
1662      }
1663    });
1664  });
1665}
1666
1667function effect(_ref2) {
1668  var state = _ref2.state;
1669  var initialStyles = {
1670    popper: {
1671      position: state.options.strategy,
1672      left: '0',
1673      top: '0',
1674      margin: '0'
1675    },
1676    arrow: {
1677      position: 'absolute'
1678    },
1679    reference: {}
1680  };
1681  Object.assign(state.elements.popper.style, initialStyles.popper);
1682  state.styles = initialStyles;
1683
1684  if (state.elements.arrow) {
1685    Object.assign(state.elements.arrow.style, initialStyles.arrow);
1686  }
1687
1688  return function () {
1689    Object.keys(state.elements).forEach(function (name) {
1690      var element = state.elements[name];
1691      var attributes = state.attributes[name] || {};
1692      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
1693
1694      var style = styleProperties.reduce(function (style, property) {
1695        style[property] = '';
1696        return style;
1697      }, {}); // arrow is optional + virtual elements
1698
1699      if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)) {
1700        return;
1701      }
1702
1703      Object.assign(element.style, style);
1704      Object.keys(attributes).forEach(function (attribute) {
1705        element.removeAttribute(attribute);
1706      });
1707    });
1708  };
1709} // eslint-disable-next-line import/no-unused-modules
1710
1711
1712/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
1713  name: 'applyStyles',
1714  enabled: true,
1715  phase: 'write',
1716  fn: applyStyles,
1717  effect: effect,
1718  requires: ['computeStyles']
1719});
1720
1721/***/ }),
1722
vendor: 5,990 bytes, lines 1723-1835
1723/***/ "./node_modules/@popperjs/core/lib/modifiers/arrow.js":
1724/*!************************************************************!*\
1725  !*** ./node_modules/@popperjs/core/lib/modifiers/arrow.js ***!
1726  \************************************************************/
1727/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1728
1729"use strict";
1730__webpack_require__.r(__webpack_exports__);
1731/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1732/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1733/* harmony export */ });
1734/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
1735/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js");
1736/* harmony import */ var _dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../dom-utils/contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js");
1737/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
1738/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js");
1739/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js");
1740/* harmony import */ var _utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js");
1741/* harmony import */ var _utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js");
1742/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
1743
1744
1745
1746
1747
1748
1749
1750
1751 // eslint-disable-next-line import/no-unused-modules
1752
1753var toPaddingObject = function toPaddingObject(padding, state) {
1754  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
1755    placement: state.placement
1756  })) : padding;
1757  return (0,_utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(typeof padding !== 'number' ? padding : (0,_utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_2__.basePlacements));
1758};
1759
1760function arrow(_ref) {
1761  var _state$modifiersData$;
1762
1763  var state = _ref.state,
1764      name = _ref.name,
1765      options = _ref.options;
1766  var arrowElement = state.elements.arrow;
1767  var popperOffsets = state.modifiersData.popperOffsets;
1768  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(state.placement);
1769  var axis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(basePlacement);
1770  var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_2__.left, _enums_js__WEBPACK_IMPORTED_MODULE_2__.right].indexOf(basePlacement) >= 0;
1771  var len = isVertical ? 'height' : 'width';
1772
1773  if (!arrowElement || !popperOffsets) {
1774    return;
1775  }
1776
1777  var paddingObject = toPaddingObject(options.padding, state);
1778  var arrowRect = (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])(arrowElement);
1779  var minProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.top : _enums_js__WEBPACK_IMPORTED_MODULE_2__.left;
1780  var maxProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_2__.right;
1781  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
1782  var startDiff = popperOffsets[axis] - state.rects.reference[axis];
1783  var arrowOffsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__["default"])(arrowElement);
1784  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
1785  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
1786  // outside of the popper bounds
1787
1788  var min = paddingObject[minProp];
1789  var max = clientSize - arrowRect[len] - paddingObject[maxProp];
1790  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
1791  var offset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_7__.within)(min, center, max); // Prevents breaking syntax highlighting...
1792
1793  var axisProp = axis;
1794  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
1795}
1796
1797function effect(_ref2) {
1798  var state = _ref2.state,
1799      options = _ref2.options;
1800  var _options$element = options.element,
1801      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
1802
1803  if (arrowElement == null) {
1804    return;
1805  } // CSS selector
1806
1807
1808  if (typeof arrowElement === 'string') {
1809    arrowElement = state.elements.popper.querySelector(arrowElement);
1810
1811    if (!arrowElement) {
1812      return;
1813    }
1814  }
1815
1816  if (!(0,_dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_8__["default"])(state.elements.popper, arrowElement)) {
1817    return;
1818  }
1819
1820  state.elements.arrow = arrowElement;
1821} // eslint-disable-next-line import/no-unused-modules
1822
1823
1824/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
1825  name: 'arrow',
1826  enabled: true,
1827  phase: 'main',
1828  fn: arrow,
1829  effect: effect,
1830  requires: ['popperOffsets'],
1831  requiresIfExists: ['preventOverflow']
1832});
1833
1834/***/ }),
1835
vendor: 8,489 bytes, lines 1836-2027
1836/***/ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js":
1837/*!********************************************************************!*\
1838  !*** ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js ***!
1839  \********************************************************************/
1840/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1841
1842"use strict";
1843__webpack_require__.r(__webpack_exports__);
1844/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1845/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__),
1846/* harmony export */   mapToStyles: () => (/* binding */ mapToStyles)
1847/* harmony export */ });
1848/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
1849/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
1850/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
1851/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
1852/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");
1853/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
1854/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
1855/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
1856
1857
1858
1859
1860
1861
1862
1863 // eslint-disable-next-line import/no-unused-modules
1864
1865var unsetSides = {
1866  top: 'auto',
1867  right: 'auto',
1868  bottom: 'auto',
1869  left: 'auto'
1870}; // Round the offsets to the nearest suitable subpixel based on the DPR.
1871// Zooming can change the DPR, but it seems to report a value that will
1872// cleanly divide the values into the appropriate subpixels.
1873
1874function roundOffsetsByDPR(_ref, win) {
1875  var x = _ref.x,
1876      y = _ref.y;
1877  var dpr = win.devicePixelRatio || 1;
1878  return {
1879    x: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(x * dpr) / dpr || 0,
1880    y: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(y * dpr) / dpr || 0
1881  };
1882}
1883
1884function mapToStyles(_ref2) {
1885  var _Object$assign2;
1886
1887  var popper = _ref2.popper,
1888      popperRect = _ref2.popperRect,
1889      placement = _ref2.placement,
1890      variation = _ref2.variation,
1891      offsets = _ref2.offsets,
1892      position = _ref2.position,
1893      gpuAcceleration = _ref2.gpuAcceleration,
1894      adaptive = _ref2.adaptive,
1895      roundOffsets = _ref2.roundOffsets,
1896      isFixed = _ref2.isFixed;
1897  var _offsets$x = offsets.x,
1898      x = _offsets$x === void 0 ? 0 : _offsets$x,
1899      _offsets$y = offsets.y,
1900      y = _offsets$y === void 0 ? 0 : _offsets$y;
1901
1902  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
1903    x: x,
1904    y: y
1905  }) : {
1906    x: x,
1907    y: y
1908  };
1909
1910  x = _ref3.x;
1911  y = _ref3.y;
1912  var hasX = offsets.hasOwnProperty('x');
1913  var hasY = offsets.hasOwnProperty('y');
1914  var sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.left;
1915  var sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.top;
1916  var win = window;
1917
1918  if (adaptive) {
1919    var offsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(popper);
1920    var heightProp = 'clientHeight';
1921    var widthProp = 'clientWidth';
1922
1923    if (offsetParent === (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__["default"])(popper)) {
1924      offsetParent = (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(popper);
1925
1926      if ((0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__["default"])(offsetParent).position !== 'static' && position === 'absolute') {
1927        heightProp = 'scrollHeight';
1928        widthProp = 'scrollWidth';
1929      }
1930    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
1931
1932
1933    offsetParent = offsetParent;
1934
1935    if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.right) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) {
1936      sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom;
1937      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
1938      offsetParent[heightProp];
1939      y -= offsetY - popperRect.height;
1940      y *= gpuAcceleration ? 1 : -1;
1941    }
1942
1943    if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) {
1944      sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.right;
1945      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
1946      offsetParent[widthProp];
1947      x -= offsetX - popperRect.width;
1948      x *= gpuAcceleration ? 1 : -1;
1949    }
1950  }
1951
1952  var commonStyles = Object.assign({
1953    position: position
1954  }, adaptive && unsetSides);
1955
1956  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
1957    x: x,
1958    y: y
1959  }, (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__["default"])(popper)) : {
1960    x: x,
1961    y: y
1962  };
1963
1964  x = _ref4.x;
1965  y = _ref4.y;
1966
1967  if (gpuAcceleration) {
1968    var _Object$assign;
1969
1970    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
1971  }
1972
1973  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
1974}
1975
1976function computeStyles(_ref5) {
1977  var state = _ref5.state,
1978      options = _ref5.options;
1979  var _options$gpuAccelerat = options.gpuAcceleration,
1980      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
1981      _options$adaptive = options.adaptive,
1982      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
1983      _options$roundOffsets = options.roundOffsets,
1984      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
1985  var commonStyles = {
1986    placement: (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.placement),
1987    variation: (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__["default"])(state.placement),
1988    popper: state.elements.popper,
1989    popperRect: state.rects.popper,
1990    gpuAcceleration: gpuAcceleration,
1991    isFixed: state.options.strategy === 'fixed'
1992  };
1993
1994  if (state.modifiersData.popperOffsets != null) {
1995    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
1996      offsets: state.modifiersData.popperOffsets,
1997      position: state.options.strategy,
1998      adaptive: adaptive,
1999      roundOffsets: roundOffsets
2000    })));
2001  }
2002
2003  if (state.modifiersData.arrow != null) {
2004    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
2005      offsets: state.modifiersData.arrow,
2006      position: 'absolute',
2007      adaptive: false,
2008      roundOffsets: roundOffsets
2009    })));
2010  }
2011
2012  state.attributes.popper = Object.assign({}, state.attributes.popper, {
2013    'data-popper-placement': state.placement
2014  });
2015} // eslint-disable-next-line import/no-unused-modules
2016
2017
2018/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2019  name: 'computeStyles',
2020  enabled: true,
2021  phase: 'beforeWrite',
2022  fn: computeStyles,
2023  data: {}
2024});
2025
2026/***/ }),
2027
vendor: 2,190 bytes, lines 2028-2091
2028/***/ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js":
2029/*!*********************************************************************!*\
2030  !*** ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js ***!
2031  \*********************************************************************/
2032/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2033
2034"use strict";
2035__webpack_require__.r(__webpack_exports__);
2036/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2037/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2038/* harmony export */ });
2039/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");
2040 // eslint-disable-next-line import/no-unused-modules
2041
2042var passive = {
2043  passive: true
2044};
2045
2046function effect(_ref) {
2047  var state = _ref.state,
2048      instance = _ref.instance,
2049      options = _ref.options;
2050  var _options$scroll = options.scroll,
2051      scroll = _options$scroll === void 0 ? true : _options$scroll,
2052      _options$resize = options.resize,
2053      resize = _options$resize === void 0 ? true : _options$resize;
2054  var window = (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state.elements.popper);
2055  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
2056
2057  if (scroll) {
2058    scrollParents.forEach(function (scrollParent) {
2059      scrollParent.addEventListener('scroll', instance.update, passive);
2060    });
2061  }
2062
2063  if (resize) {
2064    window.addEventListener('resize', instance.update, passive);
2065  }
2066
2067  return function () {
2068    if (scroll) {
2069      scrollParents.forEach(function (scrollParent) {
2070        scrollParent.removeEventListener('scroll', instance.update, passive);
2071      });
2072    }
2073
2074    if (resize) {
2075      window.removeEventListener('resize', instance.update, passive);
2076    }
2077  };
2078} // eslint-disable-next-line import/no-unused-modules
2079
2080
2081/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2082  name: 'eventListeners',
2083  enabled: true,
2084  phase: 'write',
2085  fn: function fn() {},
2086  effect: effect,
2087  data: {}
2088});
2089
2090/***/ }),
2091
vendor: 7,538 bytes, lines 2092-2259
2092/***/ "./node_modules/@popperjs/core/lib/modifiers/flip.js":
2093/*!***********************************************************!*\
2094  !*** ./node_modules/@popperjs/core/lib/modifiers/flip.js ***!
2095  \***********************************************************/
2096/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2097
2098"use strict";
2099__webpack_require__.r(__webpack_exports__);
2100/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2101/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2102/* harmony export */ });
2103/* harmony import */ var _utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getOppositePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js");
2104/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
2105/* harmony import */ var _utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getOppositeVariationPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js");
2106/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
2107/* harmony import */ var _utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/computeAutoPlacement.js */ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js");
2108/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2109/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
2110
2111
2112
2113
2114
2115
2116 // eslint-disable-next-line import/no-unused-modules
2117
2118function getExpandedFallbackPlacements(placement) {
2119  if ((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto) {
2120    return [];
2121  }
2122
2123  var oppositePlacement = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(placement);
2124  return [(0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement), oppositePlacement, (0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(oppositePlacement)];
2125}
2126
2127function flip(_ref) {
2128  var state = _ref.state,
2129      options = _ref.options,
2130      name = _ref.name;
2131
2132  if (state.modifiersData[name]._skip) {
2133    return;
2134  }
2135
2136  var _options$mainAxis = options.mainAxis,
2137      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
2138      _options$altAxis = options.altAxis,
2139      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
2140      specifiedFallbackPlacements = options.fallbackPlacements,
2141      padding = options.padding,
2142      boundary = options.boundary,
2143      rootBoundary = options.rootBoundary,
2144      altBoundary = options.altBoundary,
2145      _options$flipVariatio = options.flipVariations,
2146      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
2147      allowedAutoPlacements = options.allowedAutoPlacements;
2148  var preferredPlacement = state.options.placement;
2149  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(preferredPlacement);
2150  var isBasePlacement = basePlacement === preferredPlacement;
2151  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [(0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
2152  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
2153    return acc.concat((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto ? (0,_utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(state, {
2154      placement: placement,
2155      boundary: boundary,
2156      rootBoundary: rootBoundary,
2157      padding: padding,
2158      flipVariations: flipVariations,
2159      allowedAutoPlacements: allowedAutoPlacements
2160    }) : placement);
2161  }, []);
2162  var referenceRect = state.rects.reference;
2163  var popperRect = state.rects.popper;
2164  var checksMap = new Map();
2165  var makeFallbackChecks = true;
2166  var firstFittingPlacement = placements[0];
2167
2168  for (var i = 0; i < placements.length; i++) {
2169    var placement = placements[i];
2170
2171    var _basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement);
2172
2173    var isStartVariation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.start;
2174    var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.top, _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom].indexOf(_basePlacement) >= 0;
2175    var len = isVertical ? 'width' : 'height';
2176    var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state, {
2177      placement: placement,
2178      boundary: boundary,
2179      rootBoundary: rootBoundary,
2180      altBoundary: altBoundary,
2181      padding: padding
2182    });
2183    var mainVariationSide = isVertical ? isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.right : _enums_js__WEBPACK_IMPORTED_MODULE_1__.left : isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_1__.top;
2184
2185    if (referenceRect[len] > popperRect[len]) {
2186      mainVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(mainVariationSide);
2187    }
2188
2189    var altVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(mainVariationSide);
2190    var checks = [];
2191
2192    if (checkMainAxis) {
2193      checks.push(overflow[_basePlacement] <= 0);
2194    }
2195
2196    if (checkAltAxis) {
2197      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
2198    }
2199
2200    if (checks.every(function (check) {
2201      return check;
2202    })) {
2203      firstFittingPlacement = placement;
2204      makeFallbackChecks = false;
2205      break;
2206    }
2207
2208    checksMap.set(placement, checks);
2209  }
2210
2211  if (makeFallbackChecks) {
2212    // `2` may be desired in some cases – research later
2213    var numberOfChecks = flipVariations ? 3 : 1;
2214
2215    var _loop = function _loop(_i) {
2216      var fittingPlacement = placements.find(function (placement) {
2217        var checks = checksMap.get(placement);
2218
2219        if (checks) {
2220          return checks.slice(0, _i).every(function (check) {
2221            return check;
2222          });
2223        }
2224      });
2225
2226      if (fittingPlacement) {
2227        firstFittingPlacement = fittingPlacement;
2228        return "break";
2229      }
2230    };
2231
2232    for (var _i = numberOfChecks; _i > 0; _i--) {
2233      var _ret = _loop(_i);
2234
2235      if (_ret === "break") break;
2236    }
2237  }
2238
2239  if (state.placement !== firstFittingPlacement) {
2240    state.modifiersData[name]._skip = true;
2241    state.placement = firstFittingPlacement;
2242    state.reset = true;
2243  }
2244} // eslint-disable-next-line import/no-unused-modules
2245
2246
2247/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2248  name: 'flip',
2249  enabled: true,
2250  phase: 'main',
2251  fn: flip,
2252  requiresIfExists: ['offset'],
2253  data: {
2254    _skip: false
2255  }
2256});
2257
2258/***/ }),
2259
vendor: 3,074 bytes, lines 2260-2336
2260/***/ "./node_modules/@popperjs/core/lib/modifiers/hide.js":
2261/*!***********************************************************!*\
2262  !*** ./node_modules/@popperjs/core/lib/modifiers/hide.js ***!
2263  \***********************************************************/
2264/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2265
2266"use strict";
2267__webpack_require__.r(__webpack_exports__);
2268/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2269/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2270/* harmony export */ });
2271/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2272/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
2273
2274
2275
2276function getSideOffsets(overflow, rect, preventedOffsets) {
2277  if (preventedOffsets === void 0) {
2278    preventedOffsets = {
2279      x: 0,
2280      y: 0
2281    };
2282  }
2283
2284  return {
2285    top: overflow.top - rect.height - preventedOffsets.y,
2286    right: overflow.right - rect.width + preventedOffsets.x,
2287    bottom: overflow.bottom - rect.height + preventedOffsets.y,
2288    left: overflow.left - rect.width - preventedOffsets.x
2289  };
2290}
2291
2292function isAnySideFullyClipped(overflow) {
2293  return [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom, _enums_js__WEBPACK_IMPORTED_MODULE_0__.left].some(function (side) {
2294    return overflow[side] >= 0;
2295  });
2296}
2297
2298function hide(_ref) {
2299  var state = _ref.state,
2300      name = _ref.name;
2301  var referenceRect = state.rects.reference;
2302  var popperRect = state.rects.popper;
2303  var preventedOffsets = state.modifiersData.preventOverflow;
2304  var referenceOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, {
2305    elementContext: 'reference'
2306  });
2307  var popperAltOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, {
2308    altBoundary: true
2309  });
2310  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
2311  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
2312  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
2313  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
2314  state.modifiersData[name] = {
2315    referenceClippingOffsets: referenceClippingOffsets,
2316    popperEscapeOffsets: popperEscapeOffsets,
2317    isReferenceHidden: isReferenceHidden,
2318    hasPopperEscaped: hasPopperEscaped
2319  };
2320  state.attributes.popper = Object.assign({}, state.attributes.popper, {
2321    'data-popper-reference-hidden': isReferenceHidden,
2322    'data-popper-escaped': hasPopperEscaped
2323  });
2324} // eslint-disable-next-line import/no-unused-modules
2325
2326
2327/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2328  name: 'hide',
2329  enabled: true,
2330  phase: 'main',
2331  requiresIfExists: ['preventOverflow'],
2332  fn: hide
2333});
2334
2335/***/ }),
2336
vendor: 3,139 bytes, lines 2337-2376
2337/***/ "./node_modules/@popperjs/core/lib/modifiers/index.js":
2338/*!************************************************************!*\
2339  !*** ./node_modules/@popperjs/core/lib/modifiers/index.js ***!
2340  \************************************************************/
2341/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2342
2343"use strict";
2344__webpack_require__.r(__webpack_exports__);
2345/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2346/* harmony export */   applyStyles: () => (/* reexport safe */ _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__["default"]),
2347/* harmony export */   arrow: () => (/* reexport safe */ _arrow_js__WEBPACK_IMPORTED_MODULE_1__["default"]),
2348/* harmony export */   computeStyles: () => (/* reexport safe */ _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"]),
2349/* harmony export */   eventListeners: () => (/* reexport safe */ _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__["default"]),
2350/* harmony export */   flip: () => (/* reexport safe */ _flip_js__WEBPACK_IMPORTED_MODULE_4__["default"]),
2351/* harmony export */   hide: () => (/* reexport safe */ _hide_js__WEBPACK_IMPORTED_MODULE_5__["default"]),
2352/* harmony export */   offset: () => (/* reexport safe */ _offset_js__WEBPACK_IMPORTED_MODULE_6__["default"]),
2353/* harmony export */   popperOffsets: () => (/* reexport safe */ _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__["default"]),
2354/* harmony export */   preventOverflow: () => (/* reexport safe */ _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__["default"])
2355/* harmony export */ });
2356/* harmony import */ var _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js");
2357/* harmony import */ var _arrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js");
2358/* harmony import */ var _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js");
2359/* harmony import */ var _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js");
2360/* harmony import */ var _flip_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js");
2361/* harmony import */ var _hide_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js");
2362/* harmony import */ var _offset_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js");
2363/* harmony import */ var _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js");
2364/* harmony import */ var _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js");
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375/***/ }),
2376
vendor: 2,812 bytes, lines 2377-2447
2377/***/ "./node_modules/@popperjs/core/lib/modifiers/offset.js":
2378/*!*************************************************************!*\
2379  !*** ./node_modules/@popperjs/core/lib/modifiers/offset.js ***!
2380  \*************************************************************/
2381/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2382
2383"use strict";
2384__webpack_require__.r(__webpack_exports__);
2385/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2386/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__),
2387/* harmony export */   distanceAndSkiddingToXY: () => (/* binding */ distanceAndSkiddingToXY)
2388/* harmony export */ });
2389/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
2390/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2391
2392 // eslint-disable-next-line import/no-unused-modules
2393
2394function distanceAndSkiddingToXY(placement, rects, offset) {
2395  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement);
2396  var invertDistance = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.top].indexOf(basePlacement) >= 0 ? -1 : 1;
2397
2398  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
2399    placement: placement
2400  })) : offset,
2401      skidding = _ref[0],
2402      distance = _ref[1];
2403
2404  skidding = skidding || 0;
2405  distance = (distance || 0) * invertDistance;
2406  return [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.right].indexOf(basePlacement) >= 0 ? {
2407    x: distance,
2408    y: skidding
2409  } : {
2410    x: skidding,
2411    y: distance
2412  };
2413}
2414
2415function offset(_ref2) {
2416  var state = _ref2.state,
2417      options = _ref2.options,
2418      name = _ref2.name;
2419  var _options$offset = options.offset,
2420      offset = _options$offset === void 0 ? [0, 0] : _options$offset;
2421  var data = _enums_js__WEBPACK_IMPORTED_MODULE_1__.placements.reduce(function (acc, placement) {
2422    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
2423    return acc;
2424  }, {});
2425  var _data$state$placement = data[state.placement],
2426      x = _data$state$placement.x,
2427      y = _data$state$placement.y;
2428
2429  if (state.modifiersData.popperOffsets != null) {
2430    state.modifiersData.popperOffsets.x += x;
2431    state.modifiersData.popperOffsets.y += y;
2432  }
2433
2434  state.modifiersData[name] = data;
2435} // eslint-disable-next-line import/no-unused-modules
2436
2437
2438/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2439  name: 'offset',
2440  enabled: true,
2441  phase: 'main',
2442  requires: ['popperOffsets'],
2443  fn: offset
2444});
2445
2446/***/ }),
2447
vendor: 1,555 bytes, lines 2448-2487
2448/***/ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js":
2449/*!********************************************************************!*\
2450  !*** ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js ***!
2451  \********************************************************************/
2452/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2453
2454"use strict";
2455__webpack_require__.r(__webpack_exports__);
2456/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2457/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2458/* harmony export */ });
2459/* harmony import */ var _utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js");
2460
2461
2462function popperOffsets(_ref) {
2463  var state = _ref.state,
2464      name = _ref.name;
2465  // Offsets are the actual position the popper needs to have to be
2466  // properly positioned near its reference element
2467  // This is the most basic placement, and will be adjusted by
2468  // the modifiers in the next step
2469  state.modifiersData[name] = (0,_utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__["default"])({
2470    reference: state.rects.reference,
2471    element: state.rects.popper,
2472    strategy: 'absolute',
2473    placement: state.placement
2474  });
2475} // eslint-disable-next-line import/no-unused-modules
2476
2477
2478/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2479  name: 'popperOffsets',
2480  enabled: true,
2481  phase: 'read',
2482  fn: popperOffsets,
2483  data: {}
2484});
2485
2486/***/ }),
2487
vendor: 9,904 bytes, lines 2488-2654
2488/***/ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js":
2489/*!**********************************************************************!*\
2490  !*** ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js ***!
2491  \**********************************************************************/
2492/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2493
2494"use strict";
2495__webpack_require__.r(__webpack_exports__);
2496/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2497/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2498/* harmony export */ });
2499/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2500/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
2501/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js");
2502/* harmony import */ var _utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getAltAxis.js */ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js");
2503/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js");
2504/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js");
2505/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");
2506/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
2507/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
2508/* harmony import */ var _utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js");
2509/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522function preventOverflow(_ref) {
2523  var state = _ref.state,
2524      options = _ref.options,
2525      name = _ref.name;
2526  var _options$mainAxis = options.mainAxis,
2527      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
2528      _options$altAxis = options.altAxis,
2529      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
2530      boundary = options.boundary,
2531      rootBoundary = options.rootBoundary,
2532      altBoundary = options.altBoundary,
2533      padding = options.padding,
2534      _options$tether = options.tether,
2535      tether = _options$tether === void 0 ? true : _options$tether,
2536      _options$tetherOffset = options.tetherOffset,
2537      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
2538  var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state, {
2539    boundary: boundary,
2540    rootBoundary: rootBoundary,
2541    padding: padding,
2542    altBoundary: altBoundary
2543  });
2544  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state.placement);
2545  var variation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state.placement);
2546  var isBasePlacement = !variation;
2547  var mainAxis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(basePlacement);
2548  var altAxis = (0,_utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__["default"])(mainAxis);
2549  var popperOffsets = state.modifiersData.popperOffsets;
2550  var referenceRect = state.rects.reference;
2551  var popperRect = state.rects.popper;
2552  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
2553    placement: state.placement
2554  })) : tetherOffset;
2555  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
2556    mainAxis: tetherOffsetValue,
2557    altAxis: tetherOffsetValue
2558  } : Object.assign({
2559    mainAxis: 0,
2560    altAxis: 0
2561  }, tetherOffsetValue);
2562  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
2563  var data = {
2564    x: 0,
2565    y: 0
2566  };
2567
2568  if (!popperOffsets) {
2569    return;
2570  }
2571
2572  if (checkMainAxis) {
2573    var _offsetModifierState$;
2574
2575    var mainSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left;
2576    var altSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right;
2577    var len = mainAxis === 'y' ? 'height' : 'width';
2578    var offset = popperOffsets[mainAxis];
2579    var min = offset + overflow[mainSide];
2580    var max = offset - overflow[altSide];
2581    var additive = tether ? -popperRect[len] / 2 : 0;
2582    var minLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? referenceRect[len] : popperRect[len];
2583    var maxLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
2584    // outside the reference bounds
2585
2586    var arrowElement = state.elements.arrow;
2587    var arrowRect = tether && arrowElement ? (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(arrowElement) : {
2588      width: 0,
2589      height: 0
2590    };
2591    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : (0,_utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__["default"])();
2592    var arrowPaddingMin = arrowPaddingObject[mainSide];
2593    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
2594    // to include its full size in the calculation. If the reference is small
2595    // and near the edge of a boundary, the popper can overflow even if the
2596    // reference is not overflowing as well (e.g. virtual elements with no
2597    // width or height)
2598
2599    var arrowLen = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(0, referenceRect[len], arrowRect[len]);
2600    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
2601    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
2602    var arrowOffsetParent = state.elements.arrow && (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__["default"])(state.elements.arrow);
2603    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
2604    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
2605    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
2606    var tetherMax = offset + maxOffset - offsetModifierValue;
2607    var preventedOffset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.min)(min, tetherMin) : min, offset, tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.max)(max, tetherMax) : max);
2608    popperOffsets[mainAxis] = preventedOffset;
2609    data[mainAxis] = preventedOffset - offset;
2610  }
2611
2612  if (checkAltAxis) {
2613    var _offsetModifierState$2;
2614
2615    var _mainSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left;
2616
2617    var _altSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right;
2618
2619    var _offset = popperOffsets[altAxis];
2620
2621    var _len = altAxis === 'y' ? 'height' : 'width';
2622
2623    var _min = _offset + overflow[_mainSide];
2624
2625    var _max = _offset - overflow[_altSide];
2626
2627    var isOriginSide = [_enums_js__WEBPACK_IMPORTED_MODULE_5__.top, _enums_js__WEBPACK_IMPORTED_MODULE_5__.left].indexOf(basePlacement) !== -1;
2628
2629    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
2630
2631    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
2632
2633    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
2634
2635    var _preventedOffset = tether && isOriginSide ? (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.withinMaxClamp)(_tetherMin, _offset, _tetherMax) : (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
2636
2637    popperOffsets[altAxis] = _preventedOffset;
2638    data[altAxis] = _preventedOffset - _offset;
2639  }
2640
2641  state.modifiersData[name] = data;
2642} // eslint-disable-next-line import/no-unused-modules
2643
2644
2645/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2646  name: 'preventOverflow',
2647  enabled: true,
2648  phase: 'main',
2649  fn: preventOverflow,
2650  requiresIfExists: ['offset']
2651});
2652
2653/***/ }),
2654
vendor: 2,564 bytes, lines 2655-2688
2655/***/ "./node_modules/@popperjs/core/lib/popper-lite.js":
2656/*!********************************************************!*\
2657  !*** ./node_modules/@popperjs/core/lib/popper-lite.js ***!
2658  \********************************************************/
2659/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2660
2661"use strict";
2662__webpack_require__.r(__webpack_exports__);
2663/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2664/* harmony export */   createPopper: () => (/* binding */ createPopper),
2665/* harmony export */   defaultModifiers: () => (/* binding */ defaultModifiers),
2666/* harmony export */   detectOverflow: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_5__["default"]),
2667/* harmony export */   popperGenerator: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)
2668/* harmony export */ });
2669/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js");
2670/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
2671/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js");
2672/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js");
2673/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js");
2674/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js");
2675
2676
2677
2678
2679
2680var defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__["default"]];
2681var createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)({
2682  defaultModifiers: defaultModifiers
2683}); // eslint-disable-next-line import/no-unused-modules
2684
2685
2686
2687/***/ }),
2688
vendor: 5,503 bytes, lines 2689-2748
2689/***/ "./node_modules/@popperjs/core/lib/popper.js":
2690/*!***************************************************!*\
2691  !*** ./node_modules/@popperjs/core/lib/popper.js ***!
2692  \***************************************************/
2693/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2694
2695"use strict";
2696__webpack_require__.r(__webpack_exports__);
2697/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2698/* harmony export */   applyStyles: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.applyStyles),
2699/* harmony export */   arrow: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.arrow),
2700/* harmony export */   computeStyles: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.computeStyles),
2701/* harmony export */   createPopper: () => (/* binding */ createPopper),
2702/* harmony export */   createPopperLite: () => (/* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__.createPopper),
2703/* harmony export */   defaultModifiers: () => (/* binding */ defaultModifiers),
2704/* harmony export */   detectOverflow: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_10__["default"]),
2705/* harmony export */   eventListeners: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.eventListeners),
2706/* harmony export */   flip: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.flip),
2707/* harmony export */   hide: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.hide),
2708/* harmony export */   offset: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.offset),
2709/* harmony export */   popperGenerator: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator),
2710/* harmony export */   popperOffsets: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.popperOffsets),
2711/* harmony export */   preventOverflow: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.preventOverflow)
2712/* harmony export */ });
2713/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js");
2714/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
2715/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js");
2716/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js");
2717/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js");
2718/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js");
2719/* harmony import */ var _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modifiers/offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js");
2720/* harmony import */ var _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modifiers/flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js");
2721/* harmony import */ var _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modifiers/preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js");
2722/* harmony import */ var _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modifiers/arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js");
2723/* harmony import */ var _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modifiers/hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js");
2724/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./popper-lite.js */ "./node_modules/@popperjs/core/lib/popper-lite.js");
2725/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modifiers/index.js */ "./node_modules/@popperjs/core/lib/modifiers/index.js");
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736var defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__["default"], _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__["default"], _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__["default"], _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__["default"], _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__["default"], _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__["default"]];
2737var createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator)({
2738  defaultModifiers: defaultModifiers
2739}); // eslint-disable-next-line import/no-unused-modules
2740
2741 // eslint-disable-next-line import/no-unused-modules
2742
2743 // eslint-disable-next-line import/no-unused-modules
2744
2745
2746
2747/***/ }),
2748
vendor: 3,096 bytes, lines 2749-2809
2749/***/ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js":
2750/*!***********************************************************************!*\
2751  !*** ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js ***!
2752  \***********************************************************************/
2753/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2754
2755"use strict";
2756__webpack_require__.r(__webpack_exports__);
2757/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2758/* harmony export */   "default": () => (/* binding */ computeAutoPlacement)
2759/* harmony export */ });
2760/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
2761/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2762/* harmony import */ var _detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");
2763/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
2764
2765
2766
2767
2768function computeAutoPlacement(state, options) {
2769  if (options === void 0) {
2770    options = {};
2771  }
2772
2773  var _options = options,
2774      placement = _options.placement,
2775      boundary = _options.boundary,
2776      rootBoundary = _options.rootBoundary,
2777      padding = _options.padding,
2778      flipVariations = _options.flipVariations,
2779      _options$allowedAutoP = _options.allowedAutoPlacements,
2780      allowedAutoPlacements = _options$allowedAutoP === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements : _options$allowedAutoP;
2781  var variation = (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement);
2782  var placements = variation ? flipVariations ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements : _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements.filter(function (placement) {
2783    return (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) === variation;
2784  }) : _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements;
2785  var allowedPlacements = placements.filter(function (placement) {
2786    return allowedAutoPlacements.indexOf(placement) >= 0;
2787  });
2788
2789  if (allowedPlacements.length === 0) {
2790    allowedPlacements = placements;
2791  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
2792
2793
2794  var overflows = allowedPlacements.reduce(function (acc, placement) {
2795    acc[placement] = (0,_detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state, {
2796      placement: placement,
2797      boundary: boundary,
2798      rootBoundary: rootBoundary,
2799      padding: padding
2800    })[(0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement)];
2801    return acc;
2802  }, {});
2803  return Object.keys(overflows).sort(function (a, b) {
2804    return overflows[a] - overflows[b];
2805  });
2806}
2807
2808/***/ }),
2809
vendor: 3,194 bytes, lines 2810-2897
2810/***/ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js":
2811/*!*****************************************************************!*\
2812  !*** ./node_modules/@popperjs/core/lib/utils/computeOffsets.js ***!
2813  \*****************************************************************/
2814/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2815
2816"use strict";
2817__webpack_require__.r(__webpack_exports__);
2818/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2819/* harmony export */   "default": () => (/* binding */ computeOffsets)
2820/* harmony export */ });
2821/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");
2822/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");
2823/* harmony import */ var _getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js");
2824/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2825
2826
2827
2828
2829function computeOffsets(_ref) {
2830  var reference = _ref.reference,
2831      element = _ref.element,
2832      placement = _ref.placement;
2833  var basePlacement = placement ? (0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) : null;
2834  var variation = placement ? (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) : null;
2835  var commonX = reference.x + reference.width / 2 - element.width / 2;
2836  var commonY = reference.y + reference.height / 2 - element.height / 2;
2837  var offsets;
2838
2839  switch (basePlacement) {
2840    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.top:
2841      offsets = {
2842        x: commonX,
2843        y: reference.y - element.height
2844      };
2845      break;
2846
2847    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom:
2848      offsets = {
2849        x: commonX,
2850        y: reference.y + reference.height
2851      };
2852      break;
2853
2854    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.right:
2855      offsets = {
2856        x: reference.x + reference.width,
2857        y: commonY
2858      };
2859      break;
2860
2861    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.left:
2862      offsets = {
2863        x: reference.x - element.width,
2864        y: commonY
2865      };
2866      break;
2867
2868    default:
2869      offsets = {
2870        x: reference.x,
2871        y: reference.y
2872      };
2873  }
2874
2875  var mainAxis = basePlacement ? (0,_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(basePlacement) : null;
2876
2877  if (mainAxis != null) {
2878    var len = mainAxis === 'y' ? 'height' : 'width';
2879
2880    switch (variation) {
2881      case _enums_js__WEBPACK_IMPORTED_MODULE_2__.start:
2882        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
2883        break;
2884
2885      case _enums_js__WEBPACK_IMPORTED_MODULE_2__.end:
2886        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
2887        break;
2888
2889      default:
2890    }
2891  }
2892
2893  return offsets;
2894}
2895
2896/***/ }),
2897
vendor: 850 bytes, lines 2898-2926
2898/***/ "./node_modules/@popperjs/core/lib/utils/debounce.js":
2899/*!***********************************************************!*\
2900  !*** ./node_modules/@popperjs/core/lib/utils/debounce.js ***!
2901  \***********************************************************/
2902/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2903
2904"use strict";
2905__webpack_require__.r(__webpack_exports__);
2906/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2907/* harmony export */   "default": () => (/* binding */ debounce)
2908/* harmony export */ });
2909function debounce(fn) {
2910  var pending;
2911  return function () {
2912    if (!pending) {
2913      pending = new Promise(function (resolve) {
2914        Promise.resolve().then(function () {
2915          pending = undefined;
2916          resolve(fn());
2917        });
2918      });
2919    }
2920
2921    return pending;
2922  };
2923}
2924
2925/***/ }),
2926
vendor: 6,226 bytes, lines 2927-3014
2927/***/ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js":
2928/*!*****************************************************************!*\
2929  !*** ./node_modules/@popperjs/core/lib/utils/detectOverflow.js ***!
2930  \*****************************************************************/
2931/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2932
2933"use strict";
2934__webpack_require__.r(__webpack_exports__);
2935/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2936/* harmony export */   "default": () => (/* binding */ detectOverflow)
2937/* harmony export */ });
2938/* harmony import */ var _dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getClippingRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js");
2939/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");
2940/* harmony import */ var _dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");
2941/* harmony import */ var _computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js");
2942/* harmony import */ var _rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js");
2943/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
2944/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");
2945/* harmony import */ var _mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js");
2946/* harmony import */ var _expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js");
2947
2948
2949
2950
2951
2952
2953
2954
2955 // eslint-disable-next-line import/no-unused-modules
2956
2957function detectOverflow(state, options) {
2958  if (options === void 0) {
2959    options = {};
2960  }
2961
2962  var _options = options,
2963      _options$placement = _options.placement,
2964      placement = _options$placement === void 0 ? state.placement : _options$placement,
2965      _options$strategy = _options.strategy,
2966      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
2967      _options$boundary = _options.boundary,
2968      boundary = _options$boundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents : _options$boundary,
2969      _options$rootBoundary = _options.rootBoundary,
2970      rootBoundary = _options$rootBoundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport : _options$rootBoundary,
2971      _options$elementConte = _options.elementContext,
2972      elementContext = _options$elementConte === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper : _options$elementConte,
2973      _options$altBoundary = _options.altBoundary,
2974      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
2975      _options$padding = _options.padding,
2976      padding = _options$padding === void 0 ? 0 : _options$padding;
2977  var paddingObject = (0,_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(typeof padding !== 'number' ? padding : (0,_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements));
2978  var altContext = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference : _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper;
2979  var popperRect = state.rects.popper;
2980  var element = state.elements[altBoundary ? altContext : elementContext];
2981  var clippingClientRect = (0,_dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(element) ? element : element.contextElement || (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(state.elements.popper), boundary, rootBoundary, strategy);
2982  var referenceClientRect = (0,_dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.elements.reference);
2983  var popperOffsets = (0,_computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__["default"])({
2984    reference: referenceClientRect,
2985    element: popperRect,
2986    strategy: 'absolute',
2987    placement: placement
2988  });
2989  var popperClientRect = (0,_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__["default"])(Object.assign({}, popperRect, popperOffsets));
2990  var elementClientRect = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
2991  // 0 or negative = within the clipping rect
2992
2993  var overflowOffsets = {
2994    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
2995    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
2996    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
2997    right: elementClientRect.right - clippingClientRect.right + paddingObject.right
2998  };
2999  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
3000
3001  if (elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper && offsetData) {
3002    var offset = offsetData[placement];
3003    Object.keys(overflowOffsets).forEach(function (key) {
3004      var multiply = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 1 : -1;
3005      var axis = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 'y' : 'x';
3006      overflowOffsets[key] += offset[axis] * multiply;
3007    });
3008  }
3009
3010  return overflowOffsets;
3011}
3012
3013/***/ }),
3014
vendor: 742 bytes, lines 3015-3034
3015/***/ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js":
3016/*!******************************************************************!*\
3017  !*** ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js ***!
3018  \******************************************************************/
3019/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3020
3021"use strict";
3022__webpack_require__.r(__webpack_exports__);
3023/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3024/* harmony export */   "default": () => (/* binding */ expandToHashMap)
3025/* harmony export */ });
3026function expandToHashMap(value, keys) {
3027  return keys.reduce(function (hashMap, key) {
3028    hashMap[key] = value;
3029    return hashMap;
3030  }, {});
3031}
3032
3033/***/ }),
3034
vendor: 637 bytes, lines 3035-3051
3035/***/ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js":
3036/*!*************************************************************!*\
3037  !*** ./node_modules/@popperjs/core/lib/utils/getAltAxis.js ***!
3038  \*************************************************************/
3039/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3040
3041"use strict";
3042__webpack_require__.r(__webpack_exports__);
3043/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3044/* harmony export */   "default": () => (/* binding */ getAltAxis)
3045/* harmony export */ });
3046function getAltAxis(axis) {
3047  return axis === 'x' ? 'y' : 'x';
3048}
3049
3050/***/ }),
3051
vendor: 678 bytes, lines 3052-3069
3052/***/ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js":
3053/*!*******************************************************************!*\
3054  !*** ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js ***!
3055  \*******************************************************************/
3056/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3057
3058"use strict";
3059__webpack_require__.r(__webpack_exports__);
3060/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3061/* harmony export */   "default": () => (/* binding */ getBasePlacement)
3062/* harmony export */ });
3063
3064function getBasePlacement(placement) {
3065  return placement.split('-')[0];
3066}
3067
3068/***/ }),
3069
vendor: 715 bytes, lines 3070-3091
3070/***/ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js":
3071/*!*********************************************************************!*\
3072  !*** ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js ***!
3073  \*********************************************************************/
3074/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3075
3076"use strict";
3077__webpack_require__.r(__webpack_exports__);
3078/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3079/* harmony export */   "default": () => (/* binding */ getFreshSideObject)
3080/* harmony export */ });
3081function getFreshSideObject() {
3082  return {
3083    top: 0,
3084    right: 0,
3085    bottom: 0,
3086    left: 0
3087  };
3088}
3089
3090/***/ }),
3091
vendor: 755 bytes, lines 3092-3108
3092/***/ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js":
3093/*!***************************************************************************!*\
3094  !*** ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js ***!
3095  \***************************************************************************/
3096/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3097
3098"use strict";
3099__webpack_require__.r(__webpack_exports__);
3100/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3101/* harmony export */   "default": () => (/* binding */ getMainAxisFromPlacement)
3102/* harmony export */ });
3103function getMainAxisFromPlacement(placement) {
3104  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
3105}
3106
3107/***/ }),
3108
vendor: 856 bytes, lines 3109-3133
3109/***/ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js":
3110/*!***********************************************************************!*\
3111  !*** ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js ***!
3112  \***********************************************************************/
3113/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3114
3115"use strict";
3116__webpack_require__.r(__webpack_exports__);
3117/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3118/* harmony export */   "default": () => (/* binding */ getOppositePlacement)
3119/* harmony export */ });
3120var hash = {
3121  left: 'right',
3122  right: 'left',
3123  bottom: 'top',
3124  top: 'bottom'
3125};
3126function getOppositePlacement(placement) {
3127  return placement.replace(/left|right|bottom|top/g, function (matched) {
3128    return hash[matched];
3129  });
3130}
3131
3132/***/ }),
3133
vendor: 862 bytes, lines 3134-3156
3134/***/ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js":
3135/*!********************************************************************************!*\
3136  !*** ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js ***!
3137  \********************************************************************************/
3138/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3139
3140"use strict";
3141__webpack_require__.r(__webpack_exports__);
3142/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3143/* harmony export */   "default": () => (/* binding */ getOppositeVariationPlacement)
3144/* harmony export */ });
3145var hash = {
3146  start: 'end',
3147  end: 'start'
3148};
3149function getOppositeVariationPlacement(placement) {
3150  return placement.replace(/start|end/g, function (matched) {
3151    return hash[matched];
3152  });
3153}
3154
3155/***/ }),
3156
vendor: 653 bytes, lines 3157-3173
3157/***/ "./node_modules/@popperjs/core/lib/utils/getVariation.js":
3158/*!***************************************************************!*\
3159  !*** ./node_modules/@popperjs/core/lib/utils/getVariation.js ***!
3160  \***************************************************************/
3161/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3162
3163"use strict";
3164__webpack_require__.r(__webpack_exports__);
3165/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3166/* harmony export */   "default": () => (/* binding */ getVariation)
3167/* harmony export */ });
3168function getVariation(placement) {
3169  return placement.split('-')[1];
3170}
3171
3172/***/ }),
3173
vendor: 713 bytes, lines 3174-3192
3174/***/ "./node_modules/@popperjs/core/lib/utils/math.js":
3175/*!*******************************************************!*\
3176  !*** ./node_modules/@popperjs/core/lib/utils/math.js ***!
3177  \*******************************************************/
3178/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3179
3180"use strict";
3181__webpack_require__.r(__webpack_exports__);
3182/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3183/* harmony export */   max: () => (/* binding */ max),
3184/* harmony export */   min: () => (/* binding */ min),
3185/* harmony export */   round: () => (/* binding */ round)
3186/* harmony export */ });
3187var max = Math.max;
3188var min = Math.min;
3189var round = Math.round;
3190
3191/***/ }),
3192
vendor: 1,087 bytes, lines 3193-3220
3193/***/ "./node_modules/@popperjs/core/lib/utils/mergeByName.js":
3194/*!**************************************************************!*\
3195  !*** ./node_modules/@popperjs/core/lib/utils/mergeByName.js ***!
3196  \**************************************************************/
3197/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3198
3199"use strict";
3200__webpack_require__.r(__webpack_exports__);
3201/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3202/* harmony export */   "default": () => (/* binding */ mergeByName)
3203/* harmony export */ });
3204function mergeByName(modifiers) {
3205  var merged = modifiers.reduce(function (merged, current) {
3206    var existing = merged[current.name];
3207    merged[current.name] = existing ? Object.assign({}, existing, current, {
3208      options: Object.assign({}, existing.options, current.options),
3209      data: Object.assign({}, existing.data, current.data)
3210    }) : current;
3211    return merged;
3212  }, {}); // IE11 does not support Object.values
3213
3214  return Object.keys(merged).map(function (key) {
3215    return merged[key];
3216  });
3217}
3218
3219/***/ }),
3220
vendor: 969 bytes, lines 3221-3239
3221/***/ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js":
3222/*!*********************************************************************!*\
3223  !*** ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js ***!
3224  \*********************************************************************/
3225/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3226
3227"use strict";
3228__webpack_require__.r(__webpack_exports__);
3229/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3230/* harmony export */   "default": () => (/* binding */ mergePaddingObject)
3231/* harmony export */ });
3232/* harmony import */ var _getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js");
3233
3234function mergePaddingObject(paddingObject) {
3235  return Object.assign({}, (0,_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), paddingObject);
3236}
3237
3238/***/ }),
3239
vendor: 1,964 bytes, lines 3240-3298
3240/***/ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js":
3241/*!*****************************************************************!*\
3242  !*** ./node_modules/@popperjs/core/lib/utils/orderModifiers.js ***!
3243  \*****************************************************************/
3244/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3245
3246"use strict";
3247__webpack_require__.r(__webpack_exports__);
3248/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3249/* harmony export */   "default": () => (/* binding */ orderModifiers)
3250/* harmony export */ });
3251/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");
3252 // source: https://stackoverflow.com/questions/49875255
3253
3254function order(modifiers) {
3255  var map = new Map();
3256  var visited = new Set();
3257  var result = [];
3258  modifiers.forEach(function (modifier) {
3259    map.set(modifier.name, modifier);
3260  }); // On visiting object, check for its dependencies and visit them recursively
3261
3262  function sort(modifier) {
3263    visited.add(modifier.name);
3264    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
3265    requires.forEach(function (dep) {
3266      if (!visited.has(dep)) {
3267        var depModifier = map.get(dep);
3268
3269        if (depModifier) {
3270          sort(depModifier);
3271        }
3272      }
3273    });
3274    result.push(modifier);
3275  }
3276
3277  modifiers.forEach(function (modifier) {
3278    if (!visited.has(modifier.name)) {
3279      // check for visited object
3280      sort(modifier);
3281    }
3282  });
3283  return result;
3284}
3285
3286function orderModifiers(modifiers) {
3287  // order based on dependencies
3288  var orderedModifiers = order(modifiers); // order based on phase
3289
3290  return _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases.reduce(function (acc, phase) {
3291    return acc.concat(orderedModifiers.filter(function (modifier) {
3292      return modifier.phase === phase;
3293    }));
3294  }, []);
3295}
3296
3297/***/ }),
3298
vendor: 779 bytes, lines 3299-3320
3299/***/ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js":
3300/*!*******************************************************************!*\
3301  !*** ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js ***!
3302  \*******************************************************************/
3303/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3304
3305"use strict";
3306__webpack_require__.r(__webpack_exports__);
3307/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3308/* harmony export */   "default": () => (/* binding */ rectToClientRect)
3309/* harmony export */ });
3310function rectToClientRect(rect) {
3311  return Object.assign({}, rect, {
3312    left: rect.x,
3313    top: rect.y,
3314    right: rect.x + rect.width,
3315    bottom: rect.y + rect.height
3316  });
3317}
3318
3319/***/ }),
3320
vendor: 856 bytes, lines 3321-3345
3321/***/ "./node_modules/@popperjs/core/lib/utils/userAgent.js":
3322/*!************************************************************!*\
3323  !*** ./node_modules/@popperjs/core/lib/utils/userAgent.js ***!
3324  \************************************************************/
3325/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3326
3327"use strict";
3328__webpack_require__.r(__webpack_exports__);
3329/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3330/* harmony export */   "default": () => (/* binding */ getUAString)
3331/* harmony export */ });
3332function getUAString() {
3333  var uaData = navigator.userAgentData;
3334
3335  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
3336    return uaData.brands.map(function (item) {
3337      return item.brand + "/" + item.version;
3338    }).join(' ');
3339  }
3340
3341  return navigator.userAgent;
3342}
3343
3344/***/ }),
3345
vendor: 1,046 bytes, lines 3346-3369
3346/***/ "./node_modules/@popperjs/core/lib/utils/within.js":
3347/*!*********************************************************!*\
3348  !*** ./node_modules/@popperjs/core/lib/utils/within.js ***!
3349  \*********************************************************/
3350/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3351
3352"use strict";
3353__webpack_require__.r(__webpack_exports__);
3354/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3355/* harmony export */   within: () => (/* binding */ within),
3356/* harmony export */   withinMaxClamp: () => (/* binding */ withinMaxClamp)
3357/* harmony export */ });
3358/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");
3359
3360function within(min, value, max) {
3361  return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.max)(min, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(value, max));
3362}
3363function withinMaxClamp(min, value, max) {
3364  var v = within(min, value, max);
3365  return v > max ? max : v;
3366}
3367
3368/***/ }),
3369
vendor: 14,757 bytes, lines 3370-3379
3370/***/ "./node_modules/aos/dist/aos.js":
3371/*!**************************************!*\
3372  !*** ./node_modules/aos/dist/aos.js ***!
3373  \**************************************/
3374/***/ (function(module) {
3375
3376!function(e,t){ true?module.exports=t():0}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="dist/",t(0)}([function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},r=n(1),a=(o(r),n(6)),u=o(a),c=n(7),s=o(c),f=n(8),d=o(f),l=n(9),p=o(l),m=n(10),b=o(m),v=n(11),y=o(v),g=n(14),h=o(g),w=[],k=!1,x={offset:120,delay:0,easing:"ease",duration:400,disable:!1,once:!1,startEvent:"DOMContentLoaded",throttleDelay:99,debounceDelay:50,disableMutationObserver:!1},j=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(e&&(k=!0),k)return w=(0,y.default)(w,x),(0,b.default)(w,x.once),w},O=function(){w=(0,h.default)(),j()},M=function(){w.forEach(function(e,t){e.node.removeAttribute("data-aos"),e.node.removeAttribute("data-aos-easing"),e.node.removeAttribute("data-aos-duration"),e.node.removeAttribute("data-aos-delay")})},S=function(e){return e===!0||"mobile"===e&&p.default.mobile()||"phone"===e&&p.default.phone()||"tablet"===e&&p.default.tablet()||"function"==typeof e&&e()===!0},_=function(e){x=i(x,e),w=(0,h.default)();var t=document.all&&!window.atob;return S(x.disable)||t?M():(x.disableMutationObserver||d.default.isSupported()||(console.info('\n      aos: MutationObserver is not supported on this browser,\n      code mutations observing has been disabled.\n      You may have to call "refreshHard()" by yourself.\n    '),x.disableMutationObserver=!0),document.querySelector("body").setAttribute("data-aos-easing",x.easing),document.querySelector("body").setAttribute("data-aos-duration",x.duration),document.querySelector("body").setAttribute("data-aos-delay",x.delay),"DOMContentLoaded"===x.startEvent&&["complete","interactive"].indexOf(document.readyState)>-1?j(!0):"load"===x.startEvent?window.addEventListener(x.startEvent,function(){j(!0)}):document.addEventListener(x.startEvent,function(){j(!0)}),window.addEventListener("resize",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener("orientationchange",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener("scroll",(0,u.default)(function(){(0,b.default)(w,x.once)},x.throttleDelay)),x.disableMutationObserver||d.default.ready("[data-aos]",O),w)};e.exports={init:_,refresh:j,refreshHard:O}},function(e,t){},,,,,function(e,t){(function(t){"use strict";function n(e,t,n){function o(t){var n=b,o=v;return b=v=void 0,k=t,g=e.apply(o,n)}function r(e){return k=e,h=setTimeout(f,t),M?o(e):g}function a(e){var n=e-w,o=e-k,i=t-n;return S?j(i,y-o):i}function c(e){var n=e-w,o=e-k;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=O();return c(e)?d(e):void(h=setTimeout(f,a(e)))}function d(e){return h=void 0,_&&b?o(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),k=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(O())}function m(){var e=O(),n=c(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),o(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,k=0,M=!1,S=!1,_=!0;if("function"!=typeof e)throw new TypeError(s);return t=u(t)||0,i(n)&&(M=!!n.leading,S="maxWait"in n,y=S?x(u(n.maxWait)||0,t):y,_="trailing"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e,t,o){var r=!0,a=!0;if("function"!=typeof e)throw new TypeError(s);return i(o)&&(r="leading"in o?!!o.leading:r,a="trailing"in o?!!o.trailing:a),n(e,t,{leading:r,maxWait:t,trailing:a})}function i(e){var t="undefined"==typeof e?"undefined":c(e);return!!e&&("object"==t||"function"==t)}function r(e){return!!e&&"object"==("undefined"==typeof e?"undefined":c(e))}function a(e){return"symbol"==("undefined"==typeof e?"undefined":c(e))||r(e)&&k.call(e)==d}function u(e){if("number"==typeof e)return e;if(a(e))return f;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(l,"");var n=m.test(e);return n||b.test(e)?v(e.slice(2),n?2:8):p.test(e)?f:+e}var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s="Expected a function",f=NaN,d="[object Symbol]",l=/^\s+|\s+$/g,p=/^[-+]0x[0-9a-f]+$/i,m=/^0b[01]+$/i,b=/^0o[0-7]+$/i,v=parseInt,y="object"==("undefined"==typeof t?"undefined":c(t))&&t&&t.Object===Object&&t,g="object"==("undefined"==typeof self?"undefined":c(self))&&self&&self.Object===Object&&self,h=y||g||Function("return this")(),w=Object.prototype,k=w.toString,x=Math.max,j=Math.min,O=function(){return h.Date.now()};e.exports=o}).call(t,function(){return this}())},function(e,t){(function(t){"use strict";function n(e,t,n){function i(t){var n=b,o=v;return b=v=void 0,O=t,g=e.apply(o,n)}function r(e){return O=e,h=setTimeout(f,t),M?i(e):g}function u(e){var n=e-w,o=e-O,i=t-n;return S?x(i,y-o):i}function s(e){var n=e-w,o=e-O;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=j();return s(e)?d(e):void(h=setTimeout(f,u(e)))}function d(e){return h=void 0,_&&b?i(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),O=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(j())}function m(){var e=j(),n=s(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),i(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,O=0,M=!1,S=!1,_=!0;if("function"!=typeof e)throw new TypeError(c);return t=a(t)||0,o(n)&&(M=!!n.leading,S="maxWait"in n,y=S?k(a(n.maxWait)||0,t):y,_="trailing"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e){var t="undefined"==typeof e?"undefined":u(e);return!!e&&("object"==t||"function"==t)}function i(e){return!!e&&"object"==("undefined"==typeof e?"undefined":u(e))}function r(e){return"symbol"==("undefined"==typeof e?"undefined":u(e))||i(e)&&w.call(e)==f}function a(e){if("number"==typeof e)return e;if(r(e))return s;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(d,"");var n=p.test(e);return n||m.test(e)?b(e.slice(2),n?2:8):l.test(e)?s:+e}var u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c="Expected a function",s=NaN,f="[object Symbol]",d=/^\s+|\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,m=/^0o[0-7]+$/i,b=parseInt,v="object"==("undefined"==typeof t?"undefined":u(t))&&t&&t.Object===Object&&t,y="object"==("undefined"==typeof self?"undefined":u(self))&&self&&self.Object===Object&&self,g=v||y||Function("return this")(),h=Object.prototype,w=h.toString,k=Math.max,x=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(t,function(){return this}())},function(e,t){"use strict";function n(e){var t=void 0,o=void 0,i=void 0;for(t=0;t<e.length;t+=1){if(o=e[t],o.dataset&&o.dataset.aos)return!0;if(i=o.children&&n(o.children))return!0}return!1}function o(){return window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver}function i(){return!!o()}function r(e,t){var n=window.document,i=o(),r=new i(a);u=t,r.observe(n.documentElement,{childList:!0,subtree:!0,removedNodes:!0})}function a(e){e&&e.forEach(function(e){var t=Array.prototype.slice.call(e.addedNodes),o=Array.prototype.slice.call(e.removedNodes),i=t.concat(o);if(n(i))return u()})}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){};t.default={isSupported:i,ready:r}},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(){return navigator.userAgent||navigator.vendor||window.opera||""}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),r=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,a=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,u=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i,c=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,s=function(){function e(){n(this,e)}return i(e,[{key:"phone",value:function(){var e=o();return!(!r.test(e)&&!a.test(e.substr(0,4)))}},{key:"mobile",value:function(){var e=o();return!(!u.test(e)&&!c.test(e.substr(0,4)))}},{key:"tablet",value:function(){return this.mobile()&&!this.phone()}}]),e}();t.default=new s},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e,t,n){var o=e.node.getAttribute("data-aos-once");t>e.position?e.node.classList.add("aos-animate"):"undefined"!=typeof o&&("false"===o||!n&&"true"!==o)&&e.node.classList.remove("aos-animate")},o=function(e,t){var o=window.pageYOffset,i=window.innerHeight;e.forEach(function(e,r){n(e,i+o,t)})};t.default=o},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(12),r=o(i),a=function(e,t){return e.forEach(function(e,n){e.node.classList.add("aos-init"),e.position=(0,r.default)(e.node,t.offset)}),e};t.default=a},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(13),r=o(i),a=function(e,t){var n=0,o=0,i=window.innerHeight,a={offset:e.getAttribute("data-aos-offset"),anchor:e.getAttribute("data-aos-anchor"),anchorPlacement:e.getAttribute("data-aos-anchor-placement")};switch(a.offset&&!isNaN(a.offset)&&(o=parseInt(a.offset)),a.anchor&&document.querySelectorAll(a.anchor)&&(e=document.querySelectorAll(a.anchor)[0]),n=(0,r.default)(e).top,a.anchorPlacement){case"top-bottom":break;case"center-bottom":n+=e.offsetHeight/2;break;case"bottom-bottom":n+=e.offsetHeight;break;case"top-center":n+=i/2;break;case"bottom-center":n+=i/2+e.offsetHeight;break;case"center-center":n+=i/2+e.offsetHeight/2;break;case"top-top":n+=i;break;case"bottom-top":n+=e.offsetHeight+i;break;case"center-top":n+=e.offsetHeight/2+i}return a.anchorPlacement||a.offset||isNaN(t)||(o=t),n+o};t.default=a},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-("BODY"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-("BODY"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}};t.default=n},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){return e=e||document.querySelectorAll("[data-aos]"),Array.prototype.map.call(e,function(e){return{node:e}})};t.default=n}])});
3377
3378/***/ }),
3379
vendor: 137,380 bytes, lines 3380-7854
3380/***/ "./node_modules/bootstrap/dist/js/bootstrap.esm.js":
3381/*!*********************************************************!*\
3382  !*** ./node_modules/bootstrap/dist/js/bootstrap.esm.js ***!
3383  \*********************************************************/
3384/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3385
3386"use strict";
3387__webpack_require__.r(__webpack_exports__);
3388/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3389/* harmony export */   Alert: () => (/* binding */ Alert),
3390/* harmony export */   Button: () => (/* binding */ Button),
3391/* harmony export */   Carousel: () => (/* binding */ Carousel),
3392/* harmony export */   Collapse: () => (/* binding */ Collapse),
3393/* harmony export */   Dropdown: () => (/* binding */ Dropdown),
3394/* harmony export */   Modal: () => (/* binding */ Modal),
3395/* harmony export */   Offcanvas: () => (/* binding */ Offcanvas),
3396/* harmony export */   Popover: () => (/* binding */ Popover),
3397/* harmony export */   ScrollSpy: () => (/* binding */ ScrollSpy),
3398/* harmony export */   Tab: () => (/* binding */ Tab),
3399/* harmony export */   Toast: () => (/* binding */ Toast),
3400/* harmony export */   Tooltip: () => (/* binding */ Tooltip)
3401/* harmony export */ });
3402/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @popperjs/core */ "./node_modules/@popperjs/core/lib/index.js");
3403/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @popperjs/core */ "./node_modules/@popperjs/core/lib/popper.js");
3404/*!
3405  * Bootstrap v5.3.3 (https://getbootstrap.com/)
3406  * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
3407  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3408  */
3409
3410
3411/**
3412 * --------------------------------------------------------------------------
3413 * Bootstrap dom/data.js
3414 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3415 * --------------------------------------------------------------------------
3416 */
3417
3418/**
3419 * Constants
3420 */
3421
3422const elementMap = new Map();
3423const Data = {
3424  set(element, key, instance) {
3425    if (!elementMap.has(element)) {
3426      elementMap.set(element, new Map());
3427    }
3428    const instanceMap = elementMap.get(element);
3429
3430    // make it clear we only want one instance per element
3431    // can be removed later when multiple key/instances are fine to be used
3432    if (!instanceMap.has(key) && instanceMap.size !== 0) {
3433      // eslint-disable-next-line no-console
3434      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
3435      return;
3436    }
3437    instanceMap.set(key, instance);
3438  },
3439  get(element, key) {
3440    if (elementMap.has(element)) {
3441      return elementMap.get(element).get(key) || null;
3442    }
3443    return null;
3444  },
3445  remove(element, key) {
3446    if (!elementMap.has(element)) {
3447      return;
3448    }
3449    const instanceMap = elementMap.get(element);
3450    instanceMap.delete(key);
3451
3452    // free up element references if there are no instances left for an element
3453    if (instanceMap.size === 0) {
3454      elementMap.delete(element);
3455    }
3456  }
3457};
3458
3459/**
3460 * --------------------------------------------------------------------------
3461 * Bootstrap util/index.js
3462 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3463 * --------------------------------------------------------------------------
3464 */
3465
3466const MAX_UID = 1000000;
3467const MILLISECONDS_MULTIPLIER = 1000;
3468const TRANSITION_END = 'transitionend';
3469
3470/**
3471 * Properly escape IDs selectors to handle weird IDs
3472 * @param {string} selector
3473 * @returns {string}
3474 */
3475const parseSelector = selector => {
3476  if (selector && window.CSS && window.CSS.escape) {
3477    // document.querySelector needs escaping to handle IDs (html5+) containing for instance /
3478    selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
3479  }
3480  return selector;
3481};
3482
3483// Shout-out Angus Croll (https://goo.gl/pxwQGp)
3484const toType = object => {
3485  if (object === null || object === undefined) {
3486    return `${object}`;
3487  }
3488  return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
3489};
3490
3491/**
3492 * Public Util API
3493 */
3494
3495const getUID = prefix => {
3496  do {
3497    prefix += Math.floor(Math.random() * MAX_UID);
3498  } while (document.getElementById(prefix));
3499  return prefix;
3500};
3501const getTransitionDurationFromElement = element => {
3502  if (!element) {
3503    return 0;
3504  }
3505
3506  // Get transition-duration of the element
3507  let {
3508    transitionDuration,
3509    transitionDelay
3510  } = window.getComputedStyle(element);
3511  const floatTransitionDuration = Number.parseFloat(transitionDuration);
3512  const floatTransitionDelay = Number.parseFloat(transitionDelay);
3513
3514  // Return 0 if element or transition duration is not found
3515  if (!floatTransitionDuration && !floatTransitionDelay) {
3516    return 0;
3517  }
3518
3519  // If multiple durations are defined, take the first
3520  transitionDuration = transitionDuration.split(',')[0];
3521  transitionDelay = transitionDelay.split(',')[0];
3522  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
3523};
3524const triggerTransitionEnd = element => {
3525  element.dispatchEvent(new Event(TRANSITION_END));
3526};
3527const isElement = object => {
3528  if (!object || typeof object !== 'object') {
3529    return false;
3530  }
3531  if (typeof object.jquery !== 'undefined') {
3532    object = object[0];
3533  }
3534  return typeof object.nodeType !== 'undefined';
3535};
3536const getElement = object => {
3537  // it's a jQuery object or a node element
3538  if (isElement(object)) {
3539    return object.jquery ? object[0] : object;
3540  }
3541  if (typeof object === 'string' && object.length > 0) {
3542    return document.querySelector(parseSelector(object));
3543  }
3544  return null;
3545};
3546const isVisible = element => {
3547  if (!isElement(element) || element.getClientRects().length === 0) {
3548    return false;
3549  }
3550  const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
3551  // Handle `details` element as its content may falsie appear visible when it is closed
3552  const closedDetails = element.closest('details:not([open])');
3553  if (!closedDetails) {
3554    return elementIsVisible;
3555  }
3556  if (closedDetails !== element) {
3557    const summary = element.closest('summary');
3558    if (summary && summary.parentNode !== closedDetails) {
3559      return false;
3560    }
3561    if (summary === null) {
3562      return false;
3563    }
3564  }
3565  return elementIsVisible;
3566};
3567const isDisabled = element => {
3568  if (!element || element.nodeType !== Node.ELEMENT_NODE) {
3569    return true;
3570  }
3571  if (element.classList.contains('disabled')) {
3572    return true;
3573  }
3574  if (typeof element.disabled !== 'undefined') {
3575    return element.disabled;
3576  }
3577  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
3578};
3579const findShadowRoot = element => {
3580  if (!document.documentElement.attachShadow) {
3581    return null;
3582  }
3583
3584  // Can find the shadow root otherwise it'll return the document
3585  if (typeof element.getRootNode === 'function') {
3586    const root = element.getRootNode();
3587    return root instanceof ShadowRoot ? root : null;
3588  }
3589  if (element instanceof ShadowRoot) {
3590    return element;
3591  }
3592
3593  // when we don't find a shadow root
3594  if (!element.parentNode) {
3595    return null;
3596  }
3597  return findShadowRoot(element.parentNode);
3598};
3599const noop = () => {};
3600
3601/**
3602 * Trick to restart an element's animation
3603 *
3604 * @param {HTMLElement} element
3605 * @return void
3606 *
3607 * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
3608 */
3609const reflow = element => {
3610  element.offsetHeight; // eslint-disable-line no-unused-expressions
3611};
3612const getjQuery = () => {
3613  if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
3614    return window.jQuery;
3615  }
3616  return null;
3617};
3618const DOMContentLoadedCallbacks = [];
3619const onDOMContentLoaded = callback => {
3620  if (document.readyState === 'loading') {
3621    // add listener on the first call when the document is in loading state
3622    if (!DOMContentLoadedCallbacks.length) {
3623      document.addEventListener('DOMContentLoaded', () => {
3624        for (const callback of DOMContentLoadedCallbacks) {
3625          callback();
3626        }
3627      });
3628    }
3629    DOMContentLoadedCallbacks.push(callback);
3630  } else {
3631    callback();
3632  }
3633};
3634const isRTL = () => document.documentElement.dir === 'rtl';
3635const defineJQueryPlugin = plugin => {
3636  onDOMContentLoaded(() => {
3637    const $ = getjQuery();
3638    /* istanbul ignore if */
3639    if ($) {
3640      const name = plugin.NAME;
3641      const JQUERY_NO_CONFLICT = $.fn[name];
3642      $.fn[name] = plugin.jQueryInterface;
3643      $.fn[name].Constructor = plugin;
3644      $.fn[name].noConflict = () => {
3645        $.fn[name] = JQUERY_NO_CONFLICT;
3646        return plugin.jQueryInterface;
3647      };
3648    }
3649  });
3650};
3651const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
3652  return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
3653};
3654const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
3655  if (!waitForTransition) {
3656    execute(callback);
3657    return;
3658  }
3659  const durationPadding = 5;
3660  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
3661  let called = false;
3662  const handler = ({
3663    target
3664  }) => {
3665    if (target !== transitionElement) {
3666      return;
3667    }
3668    called = true;
3669    transitionElement.removeEventListener(TRANSITION_END, handler);
3670    execute(callback);
3671  };
3672  transitionElement.addEventListener(TRANSITION_END, handler);
3673  setTimeout(() => {
3674    if (!called) {
3675      triggerTransitionEnd(transitionElement);
3676    }
3677  }, emulatedDuration);
3678};
3679
3680/**
3681 * Return the previous/next element of a list.
3682 *
3683 * @param {array} list    The list of elements
3684 * @param activeElement   The active element
3685 * @param shouldGetNext   Choose to get next or previous element
3686 * @param isCycleAllowed
3687 * @return {Element|elem} The proper element
3688 */
3689const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
3690  const listLength = list.length;
3691  let index = list.indexOf(activeElement);
3692
3693  // if the element does not exist in the list return an element
3694  // depending on the direction and if cycle is allowed
3695  if (index === -1) {
3696    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
3697  }
3698  index += shouldGetNext ? 1 : -1;
3699  if (isCycleAllowed) {
3700    index = (index + listLength) % listLength;
3701  }
3702  return list[Math.max(0, Math.min(index, listLength - 1))];
3703};
3704
3705/**
3706 * --------------------------------------------------------------------------
3707 * Bootstrap dom/event-handler.js
3708 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3709 * --------------------------------------------------------------------------
3710 */
3711
3712
3713/**
3714 * Constants
3715 */
3716
3717const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
3718const stripNameRegex = /\..*/;
3719const stripUidRegex = /::\d+$/;
3720const eventRegistry = {}; // Events storage
3721let uidEvent = 1;
3722const customEvents = {
3723  mouseenter: 'mouseover',
3724  mouseleave: 'mouseout'
3725};
3726const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
3727
3728/**
3729 * Private methods
3730 */
3731
3732function makeEventUid(element, uid) {
3733  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
3734}
3735function getElementEvents(element) {
3736  const uid = makeEventUid(element);
3737  element.uidEvent = uid;
3738  eventRegistry[uid] = eventRegistry[uid] || {};
3739  return eventRegistry[uid];
3740}
3741function bootstrapHandler(element, fn) {
3742  return function handler(event) {
3743    hydrateObj(event, {
3744      delegateTarget: element
3745    });
3746    if (handler.oneOff) {
3747      EventHandler.off(element, event.type, fn);
3748    }
3749    return fn.apply(element, [event]);
3750  };
3751}
3752function bootstrapDelegationHandler(element, selector, fn) {
3753  return function handler(event) {
3754    const domElements = element.querySelectorAll(selector);
3755    for (let {
3756      target
3757    } = event; target && target !== this; target = target.parentNode) {
3758      for (const domElement of domElements) {
3759        if (domElement !== target) {
3760          continue;
3761        }
3762        hydrateObj(event, {
3763          delegateTarget: target
3764        });
3765        if (handler.oneOff) {
3766          EventHandler.off(element, event.type, selector, fn);
3767        }
3768        return fn.apply(target, [event]);
3769      }
3770    }
3771  };
3772}
3773function findHandler(events, callable, delegationSelector = null) {
3774  return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
3775}
3776function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
3777  const isDelegated = typeof handler === 'string';
3778  // TODO: tooltip passes `false` instead of selector, so we need to check
3779  const callable = isDelegated ? delegationFunction : handler || delegationFunction;
3780  let typeEvent = getTypeEvent(originalTypeEvent);
3781  if (!nativeEvents.has(typeEvent)) {
3782    typeEvent = originalTypeEvent;
3783  }
3784  return [isDelegated, callable, typeEvent];
3785}
3786function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
3787  if (typeof originalTypeEvent !== 'string' || !element) {
3788    return;
3789  }
3790  let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
3791
3792  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
3793  // this prevents the handler from being dispatched the same way as mouseover or mouseout does
3794  if (originalTypeEvent in customEvents) {
3795    const wrapFunction = fn => {
3796      return function (event) {
3797        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
3798          return fn.call(this, event);
3799        }
3800      };
3801    };
3802    callable = wrapFunction(callable);
3803  }
3804  const events = getElementEvents(element);
3805  const handlers = events[typeEvent] || (events[typeEvent] = {});
3806  const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
3807  if (previousFunction) {
3808    previousFunction.oneOff = previousFunction.oneOff && oneOff;
3809    return;
3810  }
3811  const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
3812  const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
3813  fn.delegationSelector = isDelegated ? handler : null;
3814  fn.callable = callable;
3815  fn.oneOff = oneOff;
3816  fn.uidEvent = uid;
3817  handlers[uid] = fn;
3818  element.addEventListener(typeEvent, fn, isDelegated);
3819}
3820function removeHandler(element, events, typeEvent, handler, delegationSelector) {
3821  const fn = findHandler(events[typeEvent], handler, delegationSelector);
3822  if (!fn) {
3823    return;
3824  }
3825  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
3826  delete events[typeEvent][fn.uidEvent];
3827}
3828function removeNamespacedHandlers(element, events, typeEvent, namespace) {
3829  const storeElementEvent = events[typeEvent] || {};
3830  for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
3831    if (handlerKey.includes(namespace)) {
3832      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
3833    }
3834  }
3835}
3836function getTypeEvent(event) {
3837  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
3838  event = event.replace(stripNameRegex, '');
3839  return customEvents[event] || event;
3840}
3841const EventHandler = {
3842  on(element, event, handler, delegationFunction) {
3843    addHandler(element, event, handler, delegationFunction, false);
3844  },
3845  one(element, event, handler, delegationFunction) {
3846    addHandler(element, event, handler, delegationFunction, true);
3847  },
3848  off(element, originalTypeEvent, handler, delegationFunction) {
3849    if (typeof originalTypeEvent !== 'string' || !element) {
3850      return;
3851    }
3852    const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
3853    const inNamespace = typeEvent !== originalTypeEvent;
3854    const events = getElementEvents(element);
3855    const storeElementEvent = events[typeEvent] || {};
3856    const isNamespace = originalTypeEvent.startsWith('.');
3857    if (typeof callable !== 'undefined') {
3858      // Simplest case: handler is passed, remove that listener ONLY.
3859      if (!Object.keys(storeElementEvent).length) {
3860        return;
3861      }
3862      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
3863      return;
3864    }
3865    if (isNamespace) {
3866      for (const elementEvent of Object.keys(events)) {
3867        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
3868      }
3869    }
3870    for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
3871      const handlerKey = keyHandlers.replace(stripUidRegex, '');
3872      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
3873        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
3874      }
3875    }
3876  },
3877  trigger(element, event, args) {
3878    if (typeof event !== 'string' || !element) {
3879      return null;
3880    }
3881    const $ = getjQuery();
3882    const typeEvent = getTypeEvent(event);
3883    const inNamespace = event !== typeEvent;
3884    let jQueryEvent = null;
3885    let bubbles = true;
3886    let nativeDispatch = true;
3887    let defaultPrevented = false;
3888    if (inNamespace && $) {
3889      jQueryEvent = $.Event(event, args);
3890      $(element).trigger(jQueryEvent);
3891      bubbles = !jQueryEvent.isPropagationStopped();
3892      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
3893      defaultPrevented = jQueryEvent.isDefaultPrevented();
3894    }
3895    const evt = hydrateObj(new Event(event, {
3896      bubbles,
3897      cancelable: true
3898    }), args);
3899    if (defaultPrevented) {
3900      evt.preventDefault();
3901    }
3902    if (nativeDispatch) {
3903      element.dispatchEvent(evt);
3904    }
3905    if (evt.defaultPrevented && jQueryEvent) {
3906      jQueryEvent.preventDefault();
3907    }
3908    return evt;
3909  }
3910};
3911function hydrateObj(obj, meta = {}) {
3912  for (const [key, value] of Object.entries(meta)) {
3913    try {
3914      obj[key] = value;
3915    } catch (_unused) {
3916      Object.defineProperty(obj, key, {
3917        configurable: true,
3918        get() {
3919          return value;
3920        }
3921      });
3922    }
3923  }
3924  return obj;
3925}
3926
3927/**
3928 * --------------------------------------------------------------------------
3929 * Bootstrap dom/manipulator.js
3930 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3931 * --------------------------------------------------------------------------
3932 */
3933
3934function normalizeData(value) {
3935  if (value === 'true') {
3936    return true;
3937  }
3938  if (value === 'false') {
3939    return false;
3940  }
3941  if (value === Number(value).toString()) {
3942    return Number(value);
3943  }
3944  if (value === '' || value === 'null') {
3945    return null;
3946  }
3947  if (typeof value !== 'string') {
3948    return value;
3949  }
3950  try {
3951    return JSON.parse(decodeURIComponent(value));
3952  } catch (_unused) {
3953    return value;
3954  }
3955}
3956function normalizeDataKey(key) {
3957  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
3958}
3959const Manipulator = {
3960  setDataAttribute(element, key, value) {
3961    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
3962  },
3963  removeDataAttribute(element, key) {
3964    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
3965  },
3966  getDataAttributes(element) {
3967    if (!element) {
3968      return {};
3969    }
3970    const attributes = {};
3971    const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
3972    for (const key of bsKeys) {
3973      let pureKey = key.replace(/^bs/, '');
3974      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
3975      attributes[pureKey] = normalizeData(element.dataset[key]);
3976    }
3977    return attributes;
3978  },
3979  getDataAttribute(element, key) {
3980    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
3981  }
3982};
3983
3984/**
3985 * --------------------------------------------------------------------------
3986 * Bootstrap util/config.js
3987 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3988 * --------------------------------------------------------------------------
3989 */
3990
3991
3992/**
3993 * Class definition
3994 */
3995
3996class Config {
3997  // Getters
3998  static get Default() {
3999    return {};
4000  }
4001  static get DefaultType() {
4002    return {};
4003  }
4004  static get NAME() {
4005    throw new Error('You have to implement the static method "NAME", for each component!');
4006  }
4007  _getConfig(config) {
4008    config = this._mergeConfigObj(config);
4009    config = this._configAfterMerge(config);
4010    this._typeCheckConfig(config);
4011    return config;
4012  }
4013  _configAfterMerge(config) {
4014    return config;
4015  }
4016  _mergeConfigObj(config, element) {
4017    const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse
4018
4019    return {
4020      ...this.constructor.Default,
4021      ...(typeof jsonConfig === 'object' ? jsonConfig : {}),
4022      ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),
4023      ...(typeof config === 'object' ? config : {})
4024    };
4025  }
4026  _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
4027    for (const [property, expectedTypes] of Object.entries(configTypes)) {
4028      const value = config[property];
4029      const valueType = isElement(value) ? 'element' : toType(value);
4030      if (!new RegExp(expectedTypes).test(valueType)) {
4031        throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
4032      }
4033    }
4034  }
4035}
4036
4037/**
4038 * --------------------------------------------------------------------------
4039 * Bootstrap base-component.js
4040 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4041 * --------------------------------------------------------------------------
4042 */
4043
4044
4045/**
4046 * Constants
4047 */
4048
4049const VERSION = '5.3.3';
4050
4051/**
4052 * Class definition
4053 */
4054
4055class BaseComponent extends Config {
4056  constructor(element, config) {
4057    super();
4058    element = getElement(element);
4059    if (!element) {
4060      return;
4061    }
4062    this._element = element;
4063    this._config = this._getConfig(config);
4064    Data.set(this._element, this.constructor.DATA_KEY, this);
4065  }
4066
4067  // Public
4068  dispose() {
4069    Data.remove(this._element, this.constructor.DATA_KEY);
4070    EventHandler.off(this._element, this.constructor.EVENT_KEY);
4071    for (const propertyName of Object.getOwnPropertyNames(this)) {
4072      this[propertyName] = null;
4073    }
4074  }
4075  _queueCallback(callback, element, isAnimated = true) {
4076    executeAfterTransition(callback, element, isAnimated);
4077  }
4078  _getConfig(config) {
4079    config = this._mergeConfigObj(config, this._element);
4080    config = this._configAfterMerge(config);
4081    this._typeCheckConfig(config);
4082    return config;
4083  }
4084
4085  // Static
4086  static getInstance(element) {
4087    return Data.get(getElement(element), this.DATA_KEY);
4088  }
4089  static getOrCreateInstance(element, config = {}) {
4090    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
4091  }
4092  static get VERSION() {
4093    return VERSION;
4094  }
4095  static get DATA_KEY() {
4096    return `bs.${this.NAME}`;
4097  }
4098  static get EVENT_KEY() {
4099    return `.${this.DATA_KEY}`;
4100  }
4101  static eventName(name) {
4102    return `${name}${this.EVENT_KEY}`;
4103  }
4104}
4105
4106/**
4107 * --------------------------------------------------------------------------
4108 * Bootstrap dom/selector-engine.js
4109 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4110 * --------------------------------------------------------------------------
4111 */
4112
4113const getSelector = element => {
4114  let selector = element.getAttribute('data-bs-target');
4115  if (!selector || selector === '#') {
4116    let hrefAttribute = element.getAttribute('href');
4117
4118    // The only valid content that could double as a selector are IDs or classes,
4119    // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
4120    // `document.querySelector` will rightfully complain it is invalid.
4121    // See https://github.com/twbs/bootstrap/issues/32273
4122    if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
4123      return null;
4124    }
4125
4126    // Just in case some CMS puts out a full URL with the anchor appended
4127    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
4128      hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
4129    }
4130    selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
4131  }
4132  return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null;
4133};
4134const SelectorEngine = {
4135  find(selector, element = document.documentElement) {
4136    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
4137  },
4138  findOne(selector, element = document.documentElement) {
4139    return Element.prototype.querySelector.call(element, selector);
4140  },
4141  children(element, selector) {
4142    return [].concat(...element.children).filter(child => child.matches(selector));
4143  },
4144  parents(element, selector) {
4145    const parents = [];
4146    let ancestor = element.parentNode.closest(selector);
4147    while (ancestor) {
4148      parents.push(ancestor);
4149      ancestor = ancestor.parentNode.closest(selector);
4150    }
4151    return parents;
4152  },
4153  prev(element, selector) {
4154    let previous = element.previousElementSibling;
4155    while (previous) {
4156      if (previous.matches(selector)) {
4157        return [previous];
4158      }
4159      previous = previous.previousElementSibling;
4160    }
4161    return [];
4162  },
4163  // TODO: this is now unused; remove later along with prev()
4164  next(element, selector) {
4165    let next = element.nextElementSibling;
4166    while (next) {
4167      if (next.matches(selector)) {
4168        return [next];
4169      }
4170      next = next.nextElementSibling;
4171    }
4172    return [];
4173  },
4174  focusableChildren(element) {
4175    const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
4176    return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
4177  },
4178  getSelectorFromElement(element) {
4179    const selector = getSelector(element);
4180    if (selector) {
4181      return SelectorEngine.findOne(selector) ? selector : null;
4182    }
4183    return null;
4184  },
4185  getElementFromSelector(element) {
4186    const selector = getSelector(element);
4187    return selector ? SelectorEngine.findOne(selector) : null;
4188  },
4189  getMultipleElementsFromSelector(element) {
4190    const selector = getSelector(element);
4191    return selector ? SelectorEngine.find(selector) : [];
4192  }
4193};
4194
4195/**
4196 * --------------------------------------------------------------------------
4197 * Bootstrap util/component-functions.js
4198 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4199 * --------------------------------------------------------------------------
4200 */
4201
4202const enableDismissTrigger = (component, method = 'hide') => {
4203  const clickEvent = `click.dismiss${component.EVENT_KEY}`;
4204  const name = component.NAME;
4205  EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
4206    if (['A', 'AREA'].includes(this.tagName)) {
4207      event.preventDefault();
4208    }
4209    if (isDisabled(this)) {
4210      return;
4211    }
4212    const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
4213    const instance = component.getOrCreateInstance(target);
4214
4215    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
4216    instance[method]();
4217  });
4218};
4219
4220/**
4221 * --------------------------------------------------------------------------
4222 * Bootstrap alert.js
4223 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4224 * --------------------------------------------------------------------------
4225 */
4226
4227
4228/**
4229 * Constants
4230 */
4231
4232const NAME$f = 'alert';
4233const DATA_KEY$a = 'bs.alert';
4234const EVENT_KEY$b = `.${DATA_KEY$a}`;
4235const EVENT_CLOSE = `close${EVENT_KEY$b}`;
4236const EVENT_CLOSED = `closed${EVENT_KEY$b}`;
4237const CLASS_NAME_FADE$5 = 'fade';
4238const CLASS_NAME_SHOW$8 = 'show';
4239
4240/**
4241 * Class definition
4242 */
4243
4244class Alert extends BaseComponent {
4245  // Getters
4246  static get NAME() {
4247    return NAME$f;
4248  }
4249
4250  // Public
4251  close() {
4252    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
4253    if (closeEvent.defaultPrevented) {
4254      return;
4255    }
4256    this._element.classList.remove(CLASS_NAME_SHOW$8);
4257    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
4258    this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
4259  }
4260
4261  // Private
4262  _destroyElement() {
4263    this._element.remove();
4264    EventHandler.trigger(this._element, EVENT_CLOSED);
4265    this.dispose();
4266  }
4267
4268  // Static
4269  static jQueryInterface(config) {
4270    return this.each(function () {
4271      const data = Alert.getOrCreateInstance(this);
4272      if (typeof config !== 'string') {
4273        return;
4274      }
4275      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
4276        throw new TypeError(`No method named "${config}"`);
4277      }
4278      data[config](this);
4279    });
4280  }
4281}
4282
4283/**
4284 * Data API implementation
4285 */
4286
4287enableDismissTrigger(Alert, 'close');
4288
4289/**
4290 * jQuery
4291 */
4292
4293defineJQueryPlugin(Alert);
4294
4295/**
4296 * --------------------------------------------------------------------------
4297 * Bootstrap button.js
4298 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4299 * --------------------------------------------------------------------------
4300 */
4301
4302
4303/**
4304 * Constants
4305 */
4306
4307const NAME$e = 'button';
4308const DATA_KEY$9 = 'bs.button';
4309const EVENT_KEY$a = `.${DATA_KEY$9}`;
4310const DATA_API_KEY$6 = '.data-api';
4311const CLASS_NAME_ACTIVE$3 = 'active';
4312const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
4313const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
4314
4315/**
4316 * Class definition
4317 */
4318
4319class Button extends BaseComponent {
4320  // Getters
4321  static get NAME() {
4322    return NAME$e;
4323  }
4324
4325  // Public
4326  toggle() {
4327    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
4328    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
4329  }
4330
4331  // Static
4332  static jQueryInterface(config) {
4333    return this.each(function () {
4334      const data = Button.getOrCreateInstance(this);
4335      if (config === 'toggle') {
4336        data[config]();
4337      }
4338    });
4339  }
4340}
4341
4342/**
4343 * Data API implementation
4344 */
4345
4346EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {
4347  event.preventDefault();
4348  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
4349  const data = Button.getOrCreateInstance(button);
4350  data.toggle();
4351});
4352
4353/**
4354 * jQuery
4355 */
4356
4357defineJQueryPlugin(Button);
4358
4359/**
4360 * --------------------------------------------------------------------------
4361 * Bootstrap util/swipe.js
4362 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4363 * --------------------------------------------------------------------------
4364 */
4365
4366
4367/**
4368 * Constants
4369 */
4370
4371const NAME$d = 'swipe';
4372const EVENT_KEY$9 = '.bs.swipe';
4373const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;
4374const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;
4375const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;
4376const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;
4377const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;
4378const POINTER_TYPE_TOUCH = 'touch';
4379const POINTER_TYPE_PEN = 'pen';
4380const CLASS_NAME_POINTER_EVENT = 'pointer-event';
4381const SWIPE_THRESHOLD = 40;
4382const Default$c = {
4383  endCallback: null,
4384  leftCallback: null,
4385  rightCallback: null
4386};
4387const DefaultType$c = {
4388  endCallback: '(function|null)',
4389  leftCallback: '(function|null)',
4390  rightCallback: '(function|null)'
4391};
4392
4393/**
4394 * Class definition
4395 */
4396
4397class Swipe extends Config {
4398  constructor(element, config) {
4399    super();
4400    this._element = element;
4401    if (!element || !Swipe.isSupported()) {
4402      return;
4403    }
4404    this._config = this._getConfig(config);
4405    this._deltaX = 0;
4406    this._supportPointerEvents = Boolean(window.PointerEvent);
4407    this._initEvents();
4408  }
4409
4410  // Getters
4411  static get Default() {
4412    return Default$c;
4413  }
4414  static get DefaultType() {
4415    return DefaultType$c;
4416  }
4417  static get NAME() {
4418    return NAME$d;
4419  }
4420
4421  // Public
4422  dispose() {
4423    EventHandler.off(this._element, EVENT_KEY$9);
4424  }
4425
4426  // Private
4427  _start(event) {
4428    if (!this._supportPointerEvents) {
4429      this._deltaX = event.touches[0].clientX;
4430      return;
4431    }
4432    if (this._eventIsPointerPenTouch(event)) {
4433      this._deltaX = event.clientX;
4434    }
4435  }
4436  _end(event) {
4437    if (this._eventIsPointerPenTouch(event)) {
4438      this._deltaX = event.clientX - this._deltaX;
4439    }
4440    this._handleSwipe();
4441    execute(this._config.endCallback);
4442  }
4443  _move(event) {
4444    this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;
4445  }
4446  _handleSwipe() {
4447    const absDeltaX = Math.abs(this._deltaX);
4448    if (absDeltaX <= SWIPE_THRESHOLD) {
4449      return;
4450    }
4451    const direction = absDeltaX / this._deltaX;
4452    this._deltaX = 0;
4453    if (!direction) {
4454      return;
4455    }
4456    execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
4457  }
4458  _initEvents() {
4459    if (this._supportPointerEvents) {
4460      EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));
4461      EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));
4462      this._element.classList.add(CLASS_NAME_POINTER_EVENT);
4463    } else {
4464      EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));
4465      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));
4466      EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));
4467    }
4468  }
4469  _eventIsPointerPenTouch(event) {
4470    return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
4471  }
4472
4473  // Static
4474  static isSupported() {
4475    return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
4476  }
4477}
4478
4479/**
4480 * --------------------------------------------------------------------------
4481 * Bootstrap carousel.js
4482 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4483 * --------------------------------------------------------------------------
4484 */
4485
4486
4487/**
4488 * Constants
4489 */
4490
4491const NAME$c = 'carousel';
4492const DATA_KEY$8 = 'bs.carousel';
4493const EVENT_KEY$8 = `.${DATA_KEY$8}`;
4494const DATA_API_KEY$5 = '.data-api';
4495const ARROW_LEFT_KEY$1 = 'ArrowLeft';
4496const ARROW_RIGHT_KEY$1 = 'ArrowRight';
4497const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
4498
4499const ORDER_NEXT = 'next';
4500const ORDER_PREV = 'prev';
4501const DIRECTION_LEFT = 'left';
4502const DIRECTION_RIGHT = 'right';
4503const EVENT_SLIDE = `slide${EVENT_KEY$8}`;
4504const EVENT_SLID = `slid${EVENT_KEY$8}`;
4505const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;
4506const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;
4507const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;
4508const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;
4509const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;
4510const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;
4511const CLASS_NAME_CAROUSEL = 'carousel';
4512const CLASS_NAME_ACTIVE$2 = 'active';
4513const CLASS_NAME_SLIDE = 'slide';
4514const CLASS_NAME_END = 'carousel-item-end';
4515const CLASS_NAME_START = 'carousel-item-start';
4516const CLASS_NAME_NEXT = 'carousel-item-next';
4517const CLASS_NAME_PREV = 'carousel-item-prev';
4518const SELECTOR_ACTIVE = '.active';
4519const SELECTOR_ITEM = '.carousel-item';
4520const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;
4521const SELECTOR_ITEM_IMG = '.carousel-item img';
4522const SELECTOR_INDICATORS = '.carousel-indicators';
4523const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';
4524const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
4525const KEY_TO_DIRECTION = {
4526  [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,
4527  [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT
4528};
4529const Default$b = {
4530  interval: 5000,
4531  keyboard: true,
4532  pause: 'hover',
4533  ride: false,
4534  touch: true,
4535  wrap: true
4536};
4537const DefaultType$b = {
4538  interval: '(number|boolean)',
4539  // TODO:v6 remove boolean support
4540  keyboard: 'boolean',
4541  pause: '(string|boolean)',
4542  ride: '(boolean|string)',
4543  touch: 'boolean',
4544  wrap: 'boolean'
4545};
4546
4547/**
4548 * Class definition
4549 */
4550
4551class Carousel extends BaseComponent {
4552  constructor(element, config) {
4553    super(element, config);
4554    this._interval = null;
4555    this._activeElement = null;
4556    this._isSliding = false;
4557    this.touchTimeout = null;
4558    this._swipeHelper = null;
4559    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
4560    this._addEventListeners();
4561    if (this._config.ride === CLASS_NAME_CAROUSEL) {
4562      this.cycle();
4563    }
4564  }
4565
4566  // Getters
4567  static get Default() {
4568    return Default$b;
4569  }
4570  static get DefaultType() {
4571    return DefaultType$b;
4572  }
4573  static get NAME() {
4574    return NAME$c;
4575  }
4576
4577  // Public
4578  next() {
4579    this._slide(ORDER_NEXT);
4580  }
4581  nextWhenVisible() {
4582    // FIXME TODO use `document.visibilityState`
4583    // Don't call next when the page isn't visible
4584    // or the carousel or its parent isn't visible
4585    if (!document.hidden && isVisible(this._element)) {
4586      this.next();
4587    }
4588  }
4589  prev() {
4590    this._slide(ORDER_PREV);
4591  }
4592  pause() {
4593    if (this._isSliding) {
4594      triggerTransitionEnd(this._element);
4595    }
4596    this._clearInterval();
4597  }
4598  cycle() {
4599    this._clearInterval();
4600    this._updateInterval();
4601    this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);
4602  }
4603  _maybeEnableCycle() {
4604    if (!this._config.ride) {
4605      return;
4606    }
4607    if (this._isSliding) {
4608      EventHandler.one(this._element, EVENT_SLID, () => this.cycle());
4609      return;
4610    }
4611    this.cycle();
4612  }
4613  to(index) {
4614    const items = this._getItems();
4615    if (index > items.length - 1 || index < 0) {
4616      return;
4617    }
4618    if (this._isSliding) {
4619      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
4620      return;
4621    }
4622    const activeIndex = this._getItemIndex(this._getActive());
4623    if (activeIndex === index) {
4624      return;
4625    }
4626    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
4627    this._slide(order, items[index]);
4628  }
4629  dispose() {
4630    if (this._swipeHelper) {
4631      this._swipeHelper.dispose();
4632    }
4633    super.dispose();
4634  }
4635
4636  // Private
4637  _configAfterMerge(config) {
4638    config.defaultInterval = config.interval;
4639    return config;
4640  }
4641  _addEventListeners() {
4642    if (this._config.keyboard) {
4643      EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));
4644    }
4645    if (this._config.pause === 'hover') {
4646      EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());
4647      EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());
4648    }
4649    if (this._config.touch && Swipe.isSupported()) {
4650      this._addTouchEventListeners();
4651    }
4652  }
4653  _addTouchEventListeners() {
4654    for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
4655      EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());
4656    }
4657    const endCallBack = () => {
4658      if (this._config.pause !== 'hover') {
4659        return;
4660      }
4661
4662      // If it's a touch-enabled device, mouseenter/leave are fired as
4663      // part of the mouse compatibility events on first tap - the carousel
4664      // would stop cycling until user tapped out of it;
4665      // here, we listen for touchend, explicitly pause the carousel
4666      // (as if it's the second time we tap on it, mouseenter compat event
4667      // is NOT fired) and after a timeout (to allow for mouse compatibility
4668      // events to fire) we explicitly restart cycling
4669
4670      this.pause();
4671      if (this.touchTimeout) {
4672        clearTimeout(this.touchTimeout);
4673      }
4674      this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
4675    };
4676    const swipeConfig = {
4677      leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),
4678      rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),
4679      endCallback: endCallBack
4680    };
4681    this._swipeHelper = new Swipe(this._element, swipeConfig);
4682  }
4683  _keydown(event) {
4684    if (/input|textarea/i.test(event.target.tagName)) {
4685      return;
4686    }
4687    const direction = KEY_TO_DIRECTION[event.key];
4688    if (direction) {
4689      event.preventDefault();
4690      this._slide(this._directionToOrder(direction));
4691    }
4692  }
4693  _getItemIndex(element) {
4694    return this._getItems().indexOf(element);
4695  }
4696  _setActiveIndicatorElement(index) {
4697    if (!this._indicatorsElement) {
4698      return;
4699    }
4700    const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
4701    activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
4702    activeIndicator.removeAttribute('aria-current');
4703    const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement);
4704    if (newActiveIndicator) {
4705      newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);
4706      newActiveIndicator.setAttribute('aria-current', 'true');
4707    }
4708  }
4709  _updateInterval() {
4710    const element = this._activeElement || this._getActive();
4711    if (!element) {
4712      return;
4713    }
4714    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
4715    this._config.interval = elementInterval || this._config.defaultInterval;
4716  }
4717  _slide(order, element = null) {
4718    if (this._isSliding) {
4719      return;
4720    }
4721    const activeElement = this._getActive();
4722    const isNext = order === ORDER_NEXT;
4723    const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);
4724    if (nextElement === activeElement) {
4725      return;
4726    }
4727    const nextElementIndex = this._getItemIndex(nextElement);
4728    const triggerEvent = eventName => {
4729      return EventHandler.trigger(this._element, eventName, {
4730        relatedTarget: nextElement,
4731        direction: this._orderToDirection(order),
4732        from: this._getItemIndex(activeElement),
4733        to: nextElementIndex
4734      });
4735    };
4736    const slideEvent = triggerEvent(EVENT_SLIDE);
4737    if (slideEvent.defaultPrevented) {
4738      return;
4739    }
4740    if (!activeElement || !nextElement) {
4741      // Some weirdness is happening, so we bail
4742      // TODO: change tests that use empty divs to avoid this check
4743      return;
4744    }
4745    const isCycling = Boolean(this._interval);
4746    this.pause();
4747    this._isSliding = true;
4748    this._setActiveIndicatorElement(nextElementIndex);
4749    this._activeElement = nextElement;
4750    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
4751    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
4752    nextElement.classList.add(orderClassName);
4753    reflow(nextElement);
4754    activeElement.classList.add(directionalClassName);
4755    nextElement.classList.add(directionalClassName);
4756    const completeCallBack = () => {
4757      nextElement.classList.remove(directionalClassName, orderClassName);
4758      nextElement.classList.add(CLASS_NAME_ACTIVE$2);
4759      activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);
4760      this._isSliding = false;
4761      triggerEvent(EVENT_SLID);
4762    };
4763    this._queueCallback(completeCallBack, activeElement, this._isAnimated());
4764    if (isCycling) {
4765      this.cycle();
4766    }
4767  }
4768  _isAnimated() {
4769    return this._element.classList.contains(CLASS_NAME_SLIDE);
4770  }
4771  _getActive() {
4772    return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
4773  }
4774  _getItems() {
4775    return SelectorEngine.find(SELECTOR_ITEM, this._element);
4776  }
4777  _clearInterval() {
4778    if (this._interval) {
4779      clearInterval(this._interval);
4780      this._interval = null;
4781    }
4782  }
4783  _directionToOrder(direction) {
4784    if (isRTL()) {
4785      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
4786    }
4787    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
4788  }
4789  _orderToDirection(order) {
4790    if (isRTL()) {
4791      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
4792    }
4793    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
4794  }
4795
4796  // Static
4797  static jQueryInterface(config) {
4798    return this.each(function () {
4799      const data = Carousel.getOrCreateInstance(this, config);
4800      if (typeof config === 'number') {
4801        data.to(config);
4802        return;
4803      }
4804      if (typeof config === 'string') {
4805        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
4806          throw new TypeError(`No method named "${config}"`);
4807        }
4808        data[config]();
4809      }
4810    });
4811  }
4812}
4813
4814/**
4815 * Data API implementation
4816 */
4817
4818EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {
4819  const target = SelectorEngine.getElementFromSelector(this);
4820  if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
4821    return;
4822  }
4823  event.preventDefault();
4824  const carousel = Carousel.getOrCreateInstance(target);
4825  const slideIndex = this.getAttribute('data-bs-slide-to');
4826  if (slideIndex) {
4827    carousel.to(slideIndex);
4828    carousel._maybeEnableCycle();
4829    return;
4830  }
4831  if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
4832    carousel.next();
4833    carousel._maybeEnableCycle();
4834    return;
4835  }
4836  carousel.prev();
4837  carousel._maybeEnableCycle();
4838});
4839EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {
4840  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
4841  for (const carousel of carousels) {
4842    Carousel.getOrCreateInstance(carousel);
4843  }
4844});
4845
4846/**
4847 * jQuery
4848 */
4849
4850defineJQueryPlugin(Carousel);
4851
4852/**
4853 * --------------------------------------------------------------------------
4854 * Bootstrap collapse.js
4855 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4856 * --------------------------------------------------------------------------
4857 */
4858
4859
4860/**
4861 * Constants
4862 */
4863
4864const NAME$b = 'collapse';
4865const DATA_KEY$7 = 'bs.collapse';
4866const EVENT_KEY$7 = `.${DATA_KEY$7}`;
4867const DATA_API_KEY$4 = '.data-api';
4868const EVENT_SHOW$6 = `show${EVENT_KEY$7}`;
4869const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;
4870const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;
4871const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;
4872const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;
4873const CLASS_NAME_SHOW$7 = 'show';
4874const CLASS_NAME_COLLAPSE = 'collapse';
4875const CLASS_NAME_COLLAPSING = 'collapsing';
4876const CLASS_NAME_COLLAPSED = 'collapsed';
4877const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
4878const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
4879const WIDTH = 'width';
4880const HEIGHT = 'height';
4881const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
4882const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]';
4883const Default$a = {
4884  parent: null,
4885  toggle: true
4886};
4887const DefaultType$a = {
4888  parent: '(null|element)',
4889  toggle: 'boolean'
4890};
4891
4892/**
4893 * Class definition
4894 */
4895
4896class Collapse extends BaseComponent {
4897  constructor(element, config) {
4898    super(element, config);
4899    this._isTransitioning = false;
4900    this._triggerArray = [];
4901    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
4902    for (const elem of toggleList) {
4903      const selector = SelectorEngine.getSelectorFromElement(elem);
4904      const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
4905      if (selector !== null && filterElement.length) {
4906        this._triggerArray.push(elem);
4907      }
4908    }
4909    this._initializeChildren();
4910    if (!this._config.parent) {
4911      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
4912    }
4913    if (this._config.toggle) {
4914      this.toggle();
4915    }
4916  }
4917
4918  // Getters
4919  static get Default() {
4920    return Default$a;
4921  }
4922  static get DefaultType() {
4923    return DefaultType$a;
4924  }
4925  static get NAME() {
4926    return NAME$b;
4927  }
4928
4929  // Public
4930  toggle() {
4931    if (this._isShown()) {
4932      this.hide();
4933    } else {
4934      this.show();
4935    }
4936  }
4937  show() {
4938    if (this._isTransitioning || this._isShown()) {
4939      return;
4940    }
4941    let activeChildren = [];
4942
4943    // find active children
4944    if (this._config.parent) {
4945      activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
4946        toggle: false
4947      }));
4948    }
4949    if (activeChildren.length && activeChildren[0]._isTransitioning) {
4950      return;
4951    }
4952    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);
4953    if (startEvent.defaultPrevented) {
4954      return;
4955    }
4956    for (const activeInstance of activeChildren) {
4957      activeInstance.hide();
4958    }
4959    const dimension = this._getDimension();
4960    this._element.classList.remove(CLASS_NAME_COLLAPSE);
4961    this._element.classList.add(CLASS_NAME_COLLAPSING);
4962    this._element.style[dimension] = 0;
4963    this._addAriaAndCollapsedClass(this._triggerArray, true);
4964    this._isTransitioning = true;
4965    const complete = () => {
4966      this._isTransitioning = false;
4967      this._element.classList.remove(CLASS_NAME_COLLAPSING);
4968      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
4969      this._element.style[dimension] = '';
4970      EventHandler.trigger(this._element, EVENT_SHOWN$6);
4971    };
4972    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
4973    const scrollSize = `scroll${capitalizedDimension}`;
4974    this._queueCallback(complete, this._element, true);
4975    this._element.style[dimension] = `${this._element[scrollSize]}px`;
4976  }
4977  hide() {
4978    if (this._isTransitioning || !this._isShown()) {
4979      return;
4980    }
4981    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);
4982    if (startEvent.defaultPrevented) {
4983      return;
4984    }
4985    const dimension = this._getDimension();
4986    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
4987    reflow(this._element);
4988    this._element.classList.add(CLASS_NAME_COLLAPSING);
4989    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
4990    for (const trigger of this._triggerArray) {
4991      const element = SelectorEngine.getElementFromSelector(trigger);
4992      if (element && !this._isShown(element)) {
4993        this._addAriaAndCollapsedClass([trigger], false);
4994      }
4995    }
4996    this._isTransitioning = true;
4997    const complete = () => {
4998      this._isTransitioning = false;
4999      this._element.classList.remove(CLASS_NAME_COLLAPSING);
5000      this._element.classList.add(CLASS_NAME_COLLAPSE);
5001      EventHandler.trigger(this._element, EVENT_HIDDEN$6);
5002    };
5003    this._element.style[dimension] = '';
5004    this._queueCallback(complete, this._element, true);
5005  }
5006  _isShown(element = this._element) {
5007    return element.classList.contains(CLASS_NAME_SHOW$7);
5008  }
5009
5010  // Private
5011  _configAfterMerge(config) {
5012    config.toggle = Boolean(config.toggle); // Coerce string values
5013    config.parent = getElement(config.parent);
5014    return config;
5015  }
5016  _getDimension() {
5017    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
5018  }
5019  _initializeChildren() {
5020    if (!this._config.parent) {
5021      return;
5022    }
5023    const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);
5024    for (const element of children) {
5025      const selected = SelectorEngine.getElementFromSelector(element);
5026      if (selected) {
5027        this._addAriaAndCollapsedClass([element], this._isShown(selected));
5028      }
5029    }
5030  }
5031  _getFirstLevelChildren(selector) {
5032    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
5033    // remove children if greater depth
5034    return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));
5035  }
5036  _addAriaAndCollapsedClass(triggerArray, isOpen) {
5037    if (!triggerArray.length) {
5038      return;
5039    }
5040    for (const element of triggerArray) {
5041      element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
5042      element.setAttribute('aria-expanded', isOpen);
5043    }
5044  }
5045
5046  // Static
5047  static jQueryInterface(config) {
5048    const _config = {};
5049    if (typeof config === 'string' && /show|hide/.test(config)) {
5050      _config.toggle = false;
5051    }
5052    return this.each(function () {
5053      const data = Collapse.getOrCreateInstance(this, _config);
5054      if (typeof config === 'string') {
5055        if (typeof data[config] === 'undefined') {
5056          throw new TypeError(`No method named "${config}"`);
5057        }
5058        data[config]();
5059      }
5060    });
5061  }
5062}
5063
5064/**
5065 * Data API implementation
5066 */
5067
5068EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {
5069  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
5070  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
5071    event.preventDefault();
5072  }
5073  for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
5074    Collapse.getOrCreateInstance(element, {
5075      toggle: false
5076    }).toggle();
5077  }
5078});
5079
5080/**
5081 * jQuery
5082 */
5083
5084defineJQueryPlugin(Collapse);
5085
5086/**
5087 * --------------------------------------------------------------------------
5088 * Bootstrap dropdown.js
5089 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5090 * --------------------------------------------------------------------------
5091 */
5092
5093
5094/**
5095 * Constants
5096 */
5097
5098const NAME$a = 'dropdown';
5099const DATA_KEY$6 = 'bs.dropdown';
5100const EVENT_KEY$6 = `.${DATA_KEY$6}`;
5101const DATA_API_KEY$3 = '.data-api';
5102const ESCAPE_KEY$2 = 'Escape';
5103const TAB_KEY$1 = 'Tab';
5104const ARROW_UP_KEY$1 = 'ArrowUp';
5105const ARROW_DOWN_KEY$1 = 'ArrowDown';
5106const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
5107
5108const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;
5109const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;
5110const EVENT_SHOW$5 = `show${EVENT_KEY$6}`;
5111const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;
5112const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
5113const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;
5114const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;
5115const CLASS_NAME_SHOW$6 = 'show';
5116const CLASS_NAME_DROPUP = 'dropup';
5117const CLASS_NAME_DROPEND = 'dropend';
5118const CLASS_NAME_DROPSTART = 'dropstart';
5119const CLASS_NAME_DROPUP_CENTER = 'dropup-center';
5120const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';
5121const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)';
5122const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;
5123const SELECTOR_MENU = '.dropdown-menu';
5124const SELECTOR_NAVBAR = '.navbar';
5125const SELECTOR_NAVBAR_NAV = '.navbar-nav';
5126const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
5127const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';
5128const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';
5129const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';
5130const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
5131const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
5132const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
5133const PLACEMENT_TOPCENTER = 'top';
5134const PLACEMENT_BOTTOMCENTER = 'bottom';
5135const Default$9 = {
5136  autoClose: true,
5137  boundary: 'clippingParents',
5138  display: 'dynamic',
5139  offset: [0, 2],
5140  popperConfig: null,
5141  reference: 'toggle'
5142};
5143const DefaultType$9 = {
5144  autoClose: '(boolean|string)',
5145  boundary: '(string|element)',
5146  display: 'string',
5147  offset: '(array|string|function)',
5148  popperConfig: '(null|object|function)',
5149  reference: '(string|element|object)'
5150};
5151
5152/**
5153 * Class definition
5154 */
5155
5156class Dropdown extends BaseComponent {
5157  constructor(element, config) {
5158    super(element, config);
5159    this._popper = null;
5160    this._parent = this._element.parentNode; // dropdown wrapper
5161    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
5162    this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
5163    this._inNavbar = this._detectNavbar();
5164  }
5165
5166  // Getters
5167  static get Default() {
5168    return Default$9;
5169  }
5170  static get DefaultType() {
5171    return DefaultType$9;
5172  }
5173  static get NAME() {
5174    return NAME$a;
5175  }
5176
5177  // Public
5178  toggle() {
5179    return this._isShown() ? this.hide() : this.show();
5180  }
5181  show() {
5182    if (isDisabled(this._element) || this._isShown()) {
5183      return;
5184    }
5185    const relatedTarget = {
5186      relatedTarget: this._element
5187    };
5188    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);
5189    if (showEvent.defaultPrevented) {
5190      return;
5191    }
5192    this._createPopper();
5193
5194    // If this is a touch-enabled device we add extra
5195    // empty mouseover listeners to the body's immediate children;
5196    // only needed because of broken event delegation on iOS
5197    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
5198    if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
5199      for (const element of [].concat(...document.body.children)) {
5200        EventHandler.on(element, 'mouseover', noop);
5201      }
5202    }
5203    this._element.focus();
5204    this._element.setAttribute('aria-expanded', true);
5205    this._menu.classList.add(CLASS_NAME_SHOW$6);
5206    this._element.classList.add(CLASS_NAME_SHOW$6);
5207    EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);
5208  }
5209  hide() {
5210    if (isDisabled(this._element) || !this._isShown()) {
5211      return;
5212    }
5213    const relatedTarget = {
5214      relatedTarget: this._element
5215    };
5216    this._completeHide(relatedTarget);
5217  }
5218  dispose() {
5219    if (this._popper) {
5220      this._popper.destroy();
5221    }
5222    super.dispose();
5223  }
5224  update() {
5225    this._inNavbar = this._detectNavbar();
5226    if (this._popper) {
5227      this._popper.update();
5228    }
5229  }
5230
5231  // Private
5232  _completeHide(relatedTarget) {
5233    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);
5234    if (hideEvent.defaultPrevented) {
5235      return;
5236    }
5237
5238    // If this is a touch-enabled device we remove the extra
5239    // empty mouseover listeners we added for iOS support
5240    if ('ontouchstart' in document.documentElement) {
5241      for (const element of [].concat(...document.body.children)) {
5242        EventHandler.off(element, 'mouseover', noop);
5243      }
5244    }
5245    if (this._popper) {
5246      this._popper.destroy();
5247    }
5248    this._menu.classList.remove(CLASS_NAME_SHOW$6);
5249    this._element.classList.remove(CLASS_NAME_SHOW$6);
5250    this._element.setAttribute('aria-expanded', 'false');
5251    Manipulator.removeDataAttribute(this._menu, 'popper');
5252    EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);
5253  }
5254  _getConfig(config) {
5255    config = super._getConfig(config);
5256    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
5257      // Popper virtual elements require a getBoundingClientRect method
5258      throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
5259    }
5260    return config;
5261  }
5262  _createPopper() {
5263    if (typeof _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ === 'undefined') {
5264      throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
5265    }
5266    let referenceElement = this._element;
5267    if (this._config.reference === 'parent') {
5268      referenceElement = this._parent;
5269    } else if (isElement(this._config.reference)) {
5270      referenceElement = getElement(this._config.reference);
5271    } else if (typeof this._config.reference === 'object') {
5272      referenceElement = this._config.reference;
5273    }
5274    const popperConfig = this._getPopperConfig();
5275    this._popper = _popperjs_core__WEBPACK_IMPORTED_MODULE_1__.createPopper(referenceElement, this._menu, popperConfig);
5276  }
5277  _isShown() {
5278    return this._menu.classList.contains(CLASS_NAME_SHOW$6);
5279  }
5280  _getPlacement() {
5281    const parentDropdown = this._parent;
5282    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
5283      return PLACEMENT_RIGHT;
5284    }
5285    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
5286      return PLACEMENT_LEFT;
5287    }
5288    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
5289      return PLACEMENT_TOPCENTER;
5290    }
5291    if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
5292      return PLACEMENT_BOTTOMCENTER;
5293    }
5294
5295    // We need to trim the value because custom properties can also include spaces
5296    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
5297    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
5298      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
5299    }
5300    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
5301  }
5302  _detectNavbar() {
5303    return this._element.closest(SELECTOR_NAVBAR) !== null;
5304  }
5305  _getOffset() {
5306    const {
5307      offset
5308    } = this._config;
5309    if (typeof offset === 'string') {
5310      return offset.split(',').map(value => Number.parseInt(value, 10));
5311    }
5312    if (typeof offset === 'function') {
5313      return popperData => offset(popperData, this._element);
5314    }
5315    return offset;
5316  }
5317  _getPopperConfig() {
5318    const defaultBsPopperConfig = {
5319      placement: this._getPlacement(),
5320      modifiers: [{
5321        name: 'preventOverflow',
5322        options: {
5323          boundary: this._config.boundary
5324        }
5325      }, {
5326        name: 'offset',
5327        options: {
5328          offset: this._getOffset()
5329        }
5330      }]
5331    };
5332
5333    // Disable Popper if we have a static display or Dropdown is in Navbar
5334    if (this._inNavbar || this._config.display === 'static') {
5335      Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove
5336      defaultBsPopperConfig.modifiers = [{
5337        name: 'applyStyles',
5338        enabled: false
5339      }];
5340    }
5341    return {
5342      ...defaultBsPopperConfig,
5343      ...execute(this._config.popperConfig, [defaultBsPopperConfig])
5344    };
5345  }
5346  _selectMenuItem({
5347    key,
5348    target
5349  }) {
5350    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));
5351    if (!items.length) {
5352      return;
5353    }
5354
5355    // if target isn't included in items (e.g. when expanding the dropdown)
5356    // allow cycling to get the last item in case key equals ARROW_UP_KEY
5357    getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
5358  }
5359
5360  // Static
5361  static jQueryInterface(config) {
5362    return this.each(function () {
5363      const data = Dropdown.getOrCreateInstance(this, config);
5364      if (typeof config !== 'string') {
5365        return;
5366      }
5367      if (typeof data[config] === 'undefined') {
5368        throw new TypeError(`No method named "${config}"`);
5369      }
5370      data[config]();
5371    });
5372  }
5373  static clearMenus(event) {
5374    if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
5375      return;
5376    }
5377    const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
5378    for (const toggle of openToggles) {
5379      const context = Dropdown.getInstance(toggle);
5380      if (!context || context._config.autoClose === false) {
5381        continue;
5382      }
5383      const composedPath = event.composedPath();
5384      const isMenuTarget = composedPath.includes(context._menu);
5385      if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
5386        continue;
5387      }
5388
5389      // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
5390      if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
5391        continue;
5392      }
5393      const relatedTarget = {
5394        relatedTarget: context._element
5395      };
5396      if (event.type === 'click') {
5397        relatedTarget.clickEvent = event;
5398      }
5399      context._completeHide(relatedTarget);
5400    }
5401  }
5402  static dataApiKeydownHandler(event) {
5403    // If not an UP | DOWN | ESCAPE key => not a dropdown command
5404    // If input/textarea && if key is other than ESCAPE => not a dropdown command
5405
5406    const isInput = /input|textarea/i.test(event.target.tagName);
5407    const isEscapeEvent = event.key === ESCAPE_KEY$2;
5408    const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);
5409    if (!isUpOrDownEvent && !isEscapeEvent) {
5410      return;
5411    }
5412    if (isInput && !isEscapeEvent) {
5413      return;
5414    }
5415    event.preventDefault();
5416
5417    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
5418    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);
5419    const instance = Dropdown.getOrCreateInstance(getToggleButton);
5420    if (isUpOrDownEvent) {
5421      event.stopPropagation();
5422      instance.show();
5423      instance._selectMenuItem(event);
5424      return;
5425    }
5426    if (instance._isShown()) {
5427      // else is escape and we check if it is shown
5428      event.stopPropagation();
5429      instance.hide();
5430      getToggleButton.focus();
5431    }
5432  }
5433}
5434
5435/**
5436 * Data API implementation
5437 */
5438
5439EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
5440EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
5441EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
5442EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
5443EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
5444  event.preventDefault();
5445  Dropdown.getOrCreateInstance(this).toggle();
5446});
5447
5448/**
5449 * jQuery
5450 */
5451
5452defineJQueryPlugin(Dropdown);
5453
5454/**
5455 * --------------------------------------------------------------------------
5456 * Bootstrap util/backdrop.js
5457 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5458 * --------------------------------------------------------------------------
5459 */
5460
5461
5462/**
5463 * Constants
5464 */
5465
5466const NAME$9 = 'backdrop';
5467const CLASS_NAME_FADE$4 = 'fade';
5468const CLASS_NAME_SHOW$5 = 'show';
5469const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;
5470const Default$8 = {
5471  className: 'modal-backdrop',
5472  clickCallback: null,
5473  isAnimated: false,
5474  isVisible: true,
5475  // if false, we use the backdrop helper without adding any element to the dom
5476  rootElement: 'body' // give the choice to place backdrop under different elements
5477};
5478const DefaultType$8 = {
5479  className: 'string',
5480  clickCallback: '(function|null)',
5481  isAnimated: 'boolean',
5482  isVisible: 'boolean',
5483  rootElement: '(element|string)'
5484};
5485
5486/**
5487 * Class definition
5488 */
5489
5490class Backdrop extends Config {
5491  constructor(config) {
5492    super();
5493    this._config = this._getConfig(config);
5494    this._isAppended = false;
5495    this._element = null;
5496  }
5497
5498  // Getters
5499  static get Default() {
5500    return Default$8;
5501  }
5502  static get DefaultType() {
5503    return DefaultType$8;
5504  }
5505  static get NAME() {
5506    return NAME$9;
5507  }
5508
5509  // Public
5510  show(callback) {
5511    if (!this._config.isVisible) {
5512      execute(callback);
5513      return;
5514    }
5515    this._append();
5516    const element = this._getElement();
5517    if (this._config.isAnimated) {
5518      reflow(element);
5519    }
5520    element.classList.add(CLASS_NAME_SHOW$5);
5521    this._emulateAnimation(() => {
5522      execute(callback);
5523    });
5524  }
5525  hide(callback) {
5526    if (!this._config.isVisible) {
5527      execute(callback);
5528      return;
5529    }
5530    this._getElement().classList.remove(CLASS_NAME_SHOW$5);
5531    this._emulateAnimation(() => {
5532      this.dispose();
5533      execute(callback);
5534    });
5535  }
5536  dispose() {
5537    if (!this._isAppended) {
5538      return;
5539    }
5540    EventHandler.off(this._element, EVENT_MOUSEDOWN);
5541    this._element.remove();
5542    this._isAppended = false;
5543  }
5544
5545  // Private
5546  _getElement() {
5547    if (!this._element) {
5548      const backdrop = document.createElement('div');
5549      backdrop.className = this._config.className;
5550      if (this._config.isAnimated) {
5551        backdrop.classList.add(CLASS_NAME_FADE$4);
5552      }
5553      this._element = backdrop;
5554    }
5555    return this._element;
5556  }
5557  _configAfterMerge(config) {
5558    // use getElement() with the default "body" to get a fresh Element on each instantiation
5559    config.rootElement = getElement(config.rootElement);
5560    return config;
5561  }
5562  _append() {
5563    if (this._isAppended) {
5564      return;
5565    }
5566    const element = this._getElement();
5567    this._config.rootElement.append(element);
5568    EventHandler.on(element, EVENT_MOUSEDOWN, () => {
5569      execute(this._config.clickCallback);
5570    });
5571    this._isAppended = true;
5572  }
5573  _emulateAnimation(callback) {
5574    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
5575  }
5576}
5577
5578/**
5579 * --------------------------------------------------------------------------
5580 * Bootstrap util/focustrap.js
5581 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5582 * --------------------------------------------------------------------------
5583 */
5584
5585
5586/**
5587 * Constants
5588 */
5589
5590const NAME$8 = 'focustrap';
5591const DATA_KEY$5 = 'bs.focustrap';
5592const EVENT_KEY$5 = `.${DATA_KEY$5}`;
5593const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;
5594const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;
5595const TAB_KEY = 'Tab';
5596const TAB_NAV_FORWARD = 'forward';
5597const TAB_NAV_BACKWARD = 'backward';
5598const Default$7 = {
5599  autofocus: true,
5600  trapElement: null // The element to trap focus inside of
5601};
5602const DefaultType$7 = {
5603  autofocus: 'boolean',
5604  trapElement: 'element'
5605};
5606
5607/**
5608 * Class definition
5609 */
5610
5611class FocusTrap extends Config {
5612  constructor(config) {
5613    super();
5614    this._config = this._getConfig(config);
5615    this._isActive = false;
5616    this._lastTabNavDirection = null;
5617  }
5618
5619  // Getters
5620  static get Default() {
5621    return Default$7;
5622  }
5623  static get DefaultType() {
5624    return DefaultType$7;
5625  }
5626  static get NAME() {
5627    return NAME$8;
5628  }
5629
5630  // Public
5631  activate() {
5632    if (this._isActive) {
5633      return;
5634    }
5635    if (this._config.autofocus) {
5636      this._config.trapElement.focus();
5637    }
5638    EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop
5639    EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));
5640    EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
5641    this._isActive = true;
5642  }
5643  deactivate() {
5644    if (!this._isActive) {
5645      return;
5646    }
5647    this._isActive = false;
5648    EventHandler.off(document, EVENT_KEY$5);
5649  }
5650
5651  // Private
5652  _handleFocusin(event) {
5653    const {
5654      trapElement
5655    } = this._config;
5656    if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {
5657      return;
5658    }
5659    const elements = SelectorEngine.focusableChildren(trapElement);
5660    if (elements.length === 0) {
5661      trapElement.focus();
5662    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
5663      elements[elements.length - 1].focus();
5664    } else {
5665      elements[0].focus();
5666    }
5667  }
5668  _handleKeydown(event) {
5669    if (event.key !== TAB_KEY) {
5670      return;
5671    }
5672    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
5673  }
5674}
5675
5676/**
5677 * --------------------------------------------------------------------------
5678 * Bootstrap util/scrollBar.js
5679 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5680 * --------------------------------------------------------------------------
5681 */
5682
5683
5684/**
5685 * Constants
5686 */
5687
5688const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
5689const SELECTOR_STICKY_CONTENT = '.sticky-top';
5690const PROPERTY_PADDING = 'padding-right';
5691const PROPERTY_MARGIN = 'margin-right';
5692
5693/**
5694 * Class definition
5695 */
5696
5697class ScrollBarHelper {
5698  constructor() {
5699    this._element = document.body;
5700  }
5701
5702  // Public
5703  getWidth() {
5704    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
5705    const documentWidth = document.documentElement.clientWidth;
5706    return Math.abs(window.innerWidth - documentWidth);
5707  }
5708  hide() {
5709    const width = this.getWidth();
5710    this._disableOverFlow();
5711    // give padding to element to balance the hidden scrollbar width
5712    this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
5713    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
5714    this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
5715    this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);
5716  }
5717  reset() {
5718    this._resetElementAttributes(this._element, 'overflow');
5719    this._resetElementAttributes(this._element, PROPERTY_PADDING);
5720    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
5721    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
5722  }
5723  isOverflowing() {
5724    return this.getWidth() > 0;
5725  }
5726
5727  // Private
5728  _disableOverFlow() {
5729    this._saveInitialAttribute(this._element, 'overflow');
5730    this._element.style.overflow = 'hidden';
5731  }
5732  _setElementAttributes(selector, styleProperty, callback) {
5733    const scrollbarWidth = this.getWidth();
5734    const manipulationCallBack = element => {
5735      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
5736        return;
5737      }
5738      this._saveInitialAttribute(element, styleProperty);
5739      const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
5740      element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
5741    };
5742    this._applyManipulationCallback(selector, manipulationCallBack);
5743  }
5744  _saveInitialAttribute(element, styleProperty) {
5745    const actualValue = element.style.getPropertyValue(styleProperty);
5746    if (actualValue) {
5747      Manipulator.setDataAttribute(element, styleProperty, actualValue);
5748    }
5749  }
5750  _resetElementAttributes(selector, styleProperty) {
5751    const manipulationCallBack = element => {
5752      const value = Manipulator.getDataAttribute(element, styleProperty);
5753      // We only want to remove the property if the value is `null`; the value can also be zero
5754      if (value === null) {
5755        element.style.removeProperty(styleProperty);
5756        return;
5757      }
5758      Manipulator.removeDataAttribute(element, styleProperty);
5759      element.style.setProperty(styleProperty, value);
5760    };
5761    this._applyManipulationCallback(selector, manipulationCallBack);
5762  }
5763  _applyManipulationCallback(selector, callBack) {
5764    if (isElement(selector)) {
5765      callBack(selector);
5766      return;
5767    }
5768    for (const sel of SelectorEngine.find(selector, this._element)) {
5769      callBack(sel);
5770    }
5771  }
5772}
5773
5774/**
5775 * --------------------------------------------------------------------------
5776 * Bootstrap modal.js
5777 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5778 * --------------------------------------------------------------------------
5779 */
5780
5781
5782/**
5783 * Constants
5784 */
5785
5786const NAME$7 = 'modal';
5787const DATA_KEY$4 = 'bs.modal';
5788const EVENT_KEY$4 = `.${DATA_KEY$4}`;
5789const DATA_API_KEY$2 = '.data-api';
5790const ESCAPE_KEY$1 = 'Escape';
5791const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;
5792const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;
5793const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;
5794const EVENT_SHOW$4 = `show${EVENT_KEY$4}`;
5795const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;
5796const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;
5797const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;
5798const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;
5799const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;
5800const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;
5801const CLASS_NAME_OPEN = 'modal-open';
5802const CLASS_NAME_FADE$3 = 'fade';
5803const CLASS_NAME_SHOW$4 = 'show';
5804const CLASS_NAME_STATIC = 'modal-static';
5805const OPEN_SELECTOR$1 = '.modal.show';
5806const SELECTOR_DIALOG = '.modal-dialog';
5807const SELECTOR_MODAL_BODY = '.modal-body';
5808const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
5809const Default$6 = {
5810  backdrop: true,
5811  focus: true,
5812  keyboard: true
5813};
5814const DefaultType$6 = {
5815  backdrop: '(boolean|string)',
5816  focus: 'boolean',
5817  keyboard: 'boolean'
5818};
5819
5820/**
5821 * Class definition
5822 */
5823
5824class Modal extends BaseComponent {
5825  constructor(element, config) {
5826    super(element, config);
5827    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
5828    this._backdrop = this._initializeBackDrop();
5829    this._focustrap = this._initializeFocusTrap();
5830    this._isShown = false;
5831    this._isTransitioning = false;
5832    this._scrollBar = new ScrollBarHelper();
5833    this._addEventListeners();
5834  }
5835
5836  // Getters
5837  static get Default() {
5838    return Default$6;
5839  }
5840  static get DefaultType() {
5841    return DefaultType$6;
5842  }
5843  static get NAME() {
5844    return NAME$7;
5845  }
5846
5847  // Public
5848  toggle(relatedTarget) {
5849    return this._isShown ? this.hide() : this.show(relatedTarget);
5850  }
5851  show(relatedTarget) {
5852    if (this._isShown || this._isTransitioning) {
5853      return;
5854    }
5855    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {
5856      relatedTarget
5857    });
5858    if (showEvent.defaultPrevented) {
5859      return;
5860    }
5861    this._isShown = true;
5862    this._isTransitioning = true;
5863    this._scrollBar.hide();
5864    document.body.classList.add(CLASS_NAME_OPEN);
5865    this._adjustDialog();
5866    this._backdrop.show(() => this._showElement(relatedTarget));
5867  }
5868  hide() {
5869    if (!this._isShown || this._isTransitioning) {
5870      return;
5871    }
5872    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);
5873    if (hideEvent.defaultPrevented) {
5874      return;
5875    }
5876    this._isShown = false;
5877    this._isTransitioning = true;
5878    this._focustrap.deactivate();
5879    this._element.classList.remove(CLASS_NAME_SHOW$4);
5880    this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
5881  }
5882  dispose() {
5883    EventHandler.off(window, EVENT_KEY$4);
5884    EventHandler.off(this._dialog, EVENT_KEY$4);
5885    this._backdrop.dispose();
5886    this._focustrap.deactivate();
5887    super.dispose();
5888  }
5889  handleUpdate() {
5890    this._adjustDialog();
5891  }
5892
5893  // Private
5894  _initializeBackDrop() {
5895    return new Backdrop({
5896      isVisible: Boolean(this._config.backdrop),
5897      // 'static' option will be translated to true, and booleans will keep their value,
5898      isAnimated: this._isAnimated()
5899    });
5900  }
5901  _initializeFocusTrap() {
5902    return new FocusTrap({
5903      trapElement: this._element
5904    });
5905  }
5906  _showElement(relatedTarget) {
5907    // try to append dynamic modal
5908    if (!document.body.contains(this._element)) {
5909      document.body.append(this._element);
5910    }
5911    this._element.style.display = 'block';
5912    this._element.removeAttribute('aria-hidden');
5913    this._element.setAttribute('aria-modal', true);
5914    this._element.setAttribute('role', 'dialog');
5915    this._element.scrollTop = 0;
5916    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
5917    if (modalBody) {
5918      modalBody.scrollTop = 0;
5919    }
5920    reflow(this._element);
5921    this._element.classList.add(CLASS_NAME_SHOW$4);
5922    const transitionComplete = () => {
5923      if (this._config.focus) {
5924        this._focustrap.activate();
5925      }
5926      this._isTransitioning = false;
5927      EventHandler.trigger(this._element, EVENT_SHOWN$4, {
5928        relatedTarget
5929      });
5930    };
5931    this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
5932  }
5933  _addEventListeners() {
5934    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
5935      if (event.key !== ESCAPE_KEY$1) {
5936        return;
5937      }
5938      if (this._config.keyboard) {
5939        this.hide();
5940        return;
5941      }
5942      this._triggerBackdropTransition();
5943    });
5944    EventHandler.on(window, EVENT_RESIZE$1, () => {
5945      if (this._isShown && !this._isTransitioning) {
5946        this._adjustDialog();
5947      }
5948    });
5949    EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
5950      // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks
5951      EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {
5952        if (this._element !== event.target || this._element !== event2.target) {
5953          return;
5954        }
5955        if (this._config.backdrop === 'static') {
5956          this._triggerBackdropTransition();
5957          return;
5958        }
5959        if (this._config.backdrop) {
5960          this.hide();
5961        }
5962      });
5963    });
5964  }
5965  _hideModal() {
5966    this._element.style.display = 'none';
5967    this._element.setAttribute('aria-hidden', true);
5968    this._element.removeAttribute('aria-modal');
5969    this._element.removeAttribute('role');
5970    this._isTransitioning = false;
5971    this._backdrop.hide(() => {
5972      document.body.classList.remove(CLASS_NAME_OPEN);
5973      this._resetAdjustments();
5974      this._scrollBar.reset();
5975      EventHandler.trigger(this._element, EVENT_HIDDEN$4);
5976    });
5977  }
5978  _isAnimated() {
5979    return this._element.classList.contains(CLASS_NAME_FADE$3);
5980  }
5981  _triggerBackdropTransition() {
5982    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);
5983    if (hideEvent.defaultPrevented) {
5984      return;
5985    }
5986    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
5987    const initialOverflowY = this._element.style.overflowY;
5988    // return if the following background transition hasn't yet completed
5989    if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
5990      return;
5991    }
5992    if (!isModalOverflowing) {
5993      this._element.style.overflowY = 'hidden';
5994    }
5995    this._element.classList.add(CLASS_NAME_STATIC);
5996    this._queueCallback(() => {
5997      this._element.classList.remove(CLASS_NAME_STATIC);
5998      this._queueCallback(() => {
5999        this._element.style.overflowY = initialOverflowY;
6000      }, this._dialog);
6001    }, this._dialog);
6002    this._element.focus();
6003  }
6004
6005  /**
6006   * The following methods are used to handle overflowing modals
6007   */
6008
6009  _adjustDialog() {
6010    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
6011    const scrollbarWidth = this._scrollBar.getWidth();
6012    const isBodyOverflowing = scrollbarWidth > 0;
6013    if (isBodyOverflowing && !isModalOverflowing) {
6014      const property = isRTL() ? 'paddingLeft' : 'paddingRight';
6015      this._element.style[property] = `${scrollbarWidth}px`;
6016    }
6017    if (!isBodyOverflowing && isModalOverflowing) {
6018      const property = isRTL() ? 'paddingRight' : 'paddingLeft';
6019      this._element.style[property] = `${scrollbarWidth}px`;
6020    }
6021  }
6022  _resetAdjustments() {
6023    this._element.style.paddingLeft = '';
6024    this._element.style.paddingRight = '';
6025  }
6026
6027  // Static
6028  static jQueryInterface(config, relatedTarget) {
6029    return this.each(function () {
6030      const data = Modal.getOrCreateInstance(this, config);
6031      if (typeof config !== 'string') {
6032        return;
6033      }
6034      if (typeof data[config] === 'undefined') {
6035        throw new TypeError(`No method named "${config}"`);
6036      }
6037      data[config](relatedTarget);
6038    });
6039  }
6040}
6041
6042/**
6043 * Data API implementation
6044 */
6045
6046EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
6047  const target = SelectorEngine.getElementFromSelector(this);
6048  if (['A', 'AREA'].includes(this.tagName)) {
6049    event.preventDefault();
6050  }
6051  EventHandler.one(target, EVENT_SHOW$4, showEvent => {
6052    if (showEvent.defaultPrevented) {
6053      // only register focus restorer if modal will actually get shown
6054      return;
6055    }
6056    EventHandler.one(target, EVENT_HIDDEN$4, () => {
6057      if (isVisible(this)) {
6058        this.focus();
6059      }
6060    });
6061  });
6062
6063  // avoid conflict when clicking modal toggler while another one is open
6064  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
6065  if (alreadyOpen) {
6066    Modal.getInstance(alreadyOpen).hide();
6067  }
6068  const data = Modal.getOrCreateInstance(target);
6069  data.toggle(this);
6070});
6071enableDismissTrigger(Modal);
6072
6073/**
6074 * jQuery
6075 */
6076
6077defineJQueryPlugin(Modal);
6078
6079/**
6080 * --------------------------------------------------------------------------
6081 * Bootstrap offcanvas.js
6082 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6083 * --------------------------------------------------------------------------
6084 */
6085
6086
6087/**
6088 * Constants
6089 */
6090
6091const NAME$6 = 'offcanvas';
6092const DATA_KEY$3 = 'bs.offcanvas';
6093const EVENT_KEY$3 = `.${DATA_KEY$3}`;
6094const DATA_API_KEY$1 = '.data-api';
6095const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;
6096const ESCAPE_KEY = 'Escape';
6097const CLASS_NAME_SHOW$3 = 'show';
6098const CLASS_NAME_SHOWING$1 = 'showing';
6099const CLASS_NAME_HIDING = 'hiding';
6100const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
6101const OPEN_SELECTOR = '.offcanvas.show';
6102const EVENT_SHOW$3 = `show${EVENT_KEY$3}`;
6103const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;
6104const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;
6105const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;
6106const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;
6107const EVENT_RESIZE = `resize${EVENT_KEY$3}`;
6108const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;
6109const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;
6110const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
6111const Default$5 = {
6112  backdrop: true,
6113  keyboard: true,
6114  scroll: false
6115};
6116const DefaultType$5 = {
6117  backdrop: '(boolean|string)',
6118  keyboard: 'boolean',
6119  scroll: 'boolean'
6120};
6121
6122/**
6123 * Class definition
6124 */
6125
6126class Offcanvas extends BaseComponent {
6127  constructor(element, config) {
6128    super(element, config);
6129    this._isShown = false;
6130    this._backdrop = this._initializeBackDrop();
6131    this._focustrap = this._initializeFocusTrap();
6132    this._addEventListeners();
6133  }
6134
6135  // Getters
6136  static get Default() {
6137    return Default$5;
6138  }
6139  static get DefaultType() {
6140    return DefaultType$5;
6141  }
6142  static get NAME() {
6143    return NAME$6;
6144  }
6145
6146  // Public
6147  toggle(relatedTarget) {
6148    return this._isShown ? this.hide() : this.show(relatedTarget);
6149  }
6150  show(relatedTarget) {
6151    if (this._isShown) {
6152      return;
6153    }
6154    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
6155      relatedTarget
6156    });
6157    if (showEvent.defaultPrevented) {
6158      return;
6159    }
6160    this._isShown = true;
6161    this._backdrop.show();
6162    if (!this._config.scroll) {
6163      new ScrollBarHelper().hide();
6164    }
6165    this._element.setAttribute('aria-modal', true);
6166    this._element.setAttribute('role', 'dialog');
6167    this._element.classList.add(CLASS_NAME_SHOWING$1);
6168    const completeCallBack = () => {
6169      if (!this._config.scroll || this._config.backdrop) {
6170        this._focustrap.activate();
6171      }
6172      this._element.classList.add(CLASS_NAME_SHOW$3);
6173      this._element.classList.remove(CLASS_NAME_SHOWING$1);
6174      EventHandler.trigger(this._element, EVENT_SHOWN$3, {
6175        relatedTarget
6176      });
6177    };
6178    this._queueCallback(completeCallBack, this._element, true);
6179  }
6180  hide() {
6181    if (!this._isShown) {
6182      return;
6183    }
6184    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
6185    if (hideEvent.defaultPrevented) {
6186      return;
6187    }
6188    this._focustrap.deactivate();
6189    this._element.blur();
6190    this._isShown = false;
6191    this._element.classList.add(CLASS_NAME_HIDING);
6192    this._backdrop.hide();
6193    const completeCallback = () => {
6194      this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);
6195      this._element.removeAttribute('aria-modal');
6196      this._element.removeAttribute('role');
6197      if (!this._config.scroll) {
6198        new ScrollBarHelper().reset();
6199      }
6200      EventHandler.trigger(this._element, EVENT_HIDDEN$3);
6201    };
6202    this._queueCallback(completeCallback, this._element, true);
6203  }
6204  dispose() {
6205    this._backdrop.dispose();
6206    this._focustrap.deactivate();
6207    super.dispose();
6208  }
6209
6210  // Private
6211  _initializeBackDrop() {
6212    const clickCallback = () => {
6213      if (this._config.backdrop === 'static') {
6214        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
6215        return;
6216      }
6217      this.hide();
6218    };
6219
6220    // 'static' option will be translated to true, and booleans will keep their value
6221    const isVisible = Boolean(this._config.backdrop);
6222    return new Backdrop({
6223      className: CLASS_NAME_BACKDROP,
6224      isVisible,
6225      isAnimated: true,
6226      rootElement: this._element.parentNode,
6227      clickCallback: isVisible ? clickCallback : null
6228    });
6229  }
6230  _initializeFocusTrap() {
6231    return new FocusTrap({
6232      trapElement: this._element
6233    });
6234  }
6235  _addEventListeners() {
6236    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
6237      if (event.key !== ESCAPE_KEY) {
6238        return;
6239      }
6240      if (this._config.keyboard) {
6241        this.hide();
6242        return;
6243      }
6244      EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
6245    });
6246  }
6247
6248  // Static
6249  static jQueryInterface(config) {
6250    return this.each(function () {
6251      const data = Offcanvas.getOrCreateInstance(this, config);
6252      if (typeof config !== 'string') {
6253        return;
6254      }
6255      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
6256        throw new TypeError(`No method named "${config}"`);
6257      }
6258      data[config](this);
6259    });
6260  }
6261}
6262
6263/**
6264 * Data API implementation
6265 */
6266
6267EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
6268  const target = SelectorEngine.getElementFromSelector(this);
6269  if (['A', 'AREA'].includes(this.tagName)) {
6270    event.preventDefault();
6271  }
6272  if (isDisabled(this)) {
6273    return;
6274  }
6275  EventHandler.one(target, EVENT_HIDDEN$3, () => {
6276    // focus on trigger when it is closed
6277    if (isVisible(this)) {
6278      this.focus();
6279    }
6280  });
6281
6282  // avoid conflict when clicking a toggler of an offcanvas, while another is open
6283  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
6284  if (alreadyOpen && alreadyOpen !== target) {
6285    Offcanvas.getInstance(alreadyOpen).hide();
6286  }
6287  const data = Offcanvas.getOrCreateInstance(target);
6288  data.toggle(this);
6289});
6290EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {
6291  for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {
6292    Offcanvas.getOrCreateInstance(selector).show();
6293  }
6294});
6295EventHandler.on(window, EVENT_RESIZE, () => {
6296  for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {
6297    if (getComputedStyle(element).position !== 'fixed') {
6298      Offcanvas.getOrCreateInstance(element).hide();
6299    }
6300  }
6301});
6302enableDismissTrigger(Offcanvas);
6303
6304/**
6305 * jQuery
6306 */
6307
6308defineJQueryPlugin(Offcanvas);
6309
6310/**
6311 * --------------------------------------------------------------------------
6312 * Bootstrap util/sanitizer.js
6313 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6314 * --------------------------------------------------------------------------
6315 */
6316
6317// js-docs-start allow-list
6318const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
6319const DefaultAllowlist = {
6320  // Global attributes allowed on any supplied element below.
6321  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
6322  a: ['target', 'href', 'title', 'rel'],
6323  area: [],
6324  b: [],
6325  br: [],
6326  col: [],
6327  code: [],
6328  dd: [],
6329  div: [],
6330  dl: [],
6331  dt: [],
6332  em: [],
6333  hr: [],
6334  h1: [],
6335  h2: [],
6336  h3: [],
6337  h4: [],
6338  h5: [],
6339  h6: [],
6340  i: [],
6341  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
6342  li: [],
6343  ol: [],
6344  p: [],
6345  pre: [],
6346  s: [],
6347  small: [],
6348  span: [],
6349  sub: [],
6350  sup: [],
6351  strong: [],
6352  u: [],
6353  ul: []
6354};
6355// js-docs-end allow-list
6356
6357const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
6358
6359/**
6360 * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation
6361 * contexts.
6362 *
6363 * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38
6364 */
6365// eslint-disable-next-line unicorn/better-regex
6366const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
6367const allowedAttribute = (attribute, allowedAttributeList) => {
6368  const attributeName = attribute.nodeName.toLowerCase();
6369  if (allowedAttributeList.includes(attributeName)) {
6370    if (uriAttributes.has(attributeName)) {
6371      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));
6372    }
6373    return true;
6374  }
6375
6376  // Check if a regular expression validates the attribute.
6377  return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));
6378};
6379function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {
6380  if (!unsafeHtml.length) {
6381    return unsafeHtml;
6382  }
6383  if (sanitizeFunction && typeof sanitizeFunction === 'function') {
6384    return sanitizeFunction(unsafeHtml);
6385  }
6386  const domParser = new window.DOMParser();
6387  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
6388  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
6389  for (const element of elements) {
6390    const elementName = element.nodeName.toLowerCase();
6391    if (!Object.keys(allowList).includes(elementName)) {
6392      element.remove();
6393      continue;
6394    }
6395    const attributeList = [].concat(...element.attributes);
6396    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
6397    for (const attribute of attributeList) {
6398      if (!allowedAttribute(attribute, allowedAttributes)) {
6399        element.removeAttribute(attribute.nodeName);
6400      }
6401    }
6402  }
6403  return createdDocument.body.innerHTML;
6404}
6405
6406/**
6407 * --------------------------------------------------------------------------
6408 * Bootstrap util/template-factory.js
6409 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6410 * --------------------------------------------------------------------------
6411 */
6412
6413
6414/**
6415 * Constants
6416 */
6417
6418const NAME$5 = 'TemplateFactory';
6419const Default$4 = {
6420  allowList: DefaultAllowlist,
6421  content: {},
6422  // { selector : text ,  selector2 : text2 , }
6423  extraClass: '',
6424  html: false,
6425  sanitize: true,
6426  sanitizeFn: null,
6427  template: '<div></div>'
6428};
6429const DefaultType$4 = {
6430  allowList: 'object',
6431  content: 'object',
6432  extraClass: '(string|function)',
6433  html: 'boolean',
6434  sanitize: 'boolean',
6435  sanitizeFn: '(null|function)',
6436  template: 'string'
6437};
6438const DefaultContentType = {
6439  entry: '(string|element|function|null)',
6440  selector: '(string|element)'
6441};
6442
6443/**
6444 * Class definition
6445 */
6446
6447class TemplateFactory extends Config {
6448  constructor(config) {
6449    super();
6450    this._config = this._getConfig(config);
6451  }
6452
6453  // Getters
6454  static get Default() {
6455    return Default$4;
6456  }
6457  static get DefaultType() {
6458    return DefaultType$4;
6459  }
6460  static get NAME() {
6461    return NAME$5;
6462  }
6463
6464  // Public
6465  getContent() {
6466    return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);
6467  }
6468  hasContent() {
6469    return this.getContent().length > 0;
6470  }
6471  changeContent(content) {
6472    this._checkContent(content);
6473    this._config.content = {
6474      ...this._config.content,
6475      ...content
6476    };
6477    return this;
6478  }
6479  toHtml() {
6480    const templateWrapper = document.createElement('div');
6481    templateWrapper.innerHTML = this._maybeSanitize(this._config.template);
6482    for (const [selector, text] of Object.entries(this._config.content)) {
6483      this._setContent(templateWrapper, text, selector);
6484    }
6485    const template = templateWrapper.children[0];
6486    const extraClass = this._resolvePossibleFunction(this._config.extraClass);
6487    if (extraClass) {
6488      template.classList.add(...extraClass.split(' '));
6489    }
6490    return template;
6491  }
6492
6493  // Private
6494  _typeCheckConfig(config) {
6495    super._typeCheckConfig(config);
6496    this._checkContent(config.content);
6497  }
6498  _checkContent(arg) {
6499    for (const [selector, content] of Object.entries(arg)) {
6500      super._typeCheckConfig({
6501        selector,
6502        entry: content
6503      }, DefaultContentType);
6504    }
6505  }
6506  _setContent(template, content, selector) {
6507    const templateElement = SelectorEngine.findOne(selector, template);
6508    if (!templateElement) {
6509      return;
6510    }
6511    content = this._resolvePossibleFunction(content);
6512    if (!content) {
6513      templateElement.remove();
6514      return;
6515    }
6516    if (isElement(content)) {
6517      this._putElementInTemplate(getElement(content), templateElement);
6518      return;
6519    }
6520    if (this._config.html) {
6521      templateElement.innerHTML = this._maybeSanitize(content);
6522      return;
6523    }
6524    templateElement.textContent = content;
6525  }
6526  _maybeSanitize(arg) {
6527    return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
6528  }
6529  _resolvePossibleFunction(arg) {
6530    return execute(arg, [this]);
6531  }
6532  _putElementInTemplate(element, templateElement) {
6533    if (this._config.html) {
6534      templateElement.innerHTML = '';
6535      templateElement.append(element);
6536      return;
6537    }
6538    templateElement.textContent = element.textContent;
6539  }
6540}
6541
6542/**
6543 * --------------------------------------------------------------------------
6544 * Bootstrap tooltip.js
6545 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6546 * --------------------------------------------------------------------------
6547 */
6548
6549
6550/**
6551 * Constants
6552 */
6553
6554const NAME$4 = 'tooltip';
6555const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
6556const CLASS_NAME_FADE$2 = 'fade';
6557const CLASS_NAME_MODAL = 'modal';
6558const CLASS_NAME_SHOW$2 = 'show';
6559const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
6560const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
6561const EVENT_MODAL_HIDE = 'hide.bs.modal';
6562const TRIGGER_HOVER = 'hover';
6563const TRIGGER_FOCUS = 'focus';
6564const TRIGGER_CLICK = 'click';
6565const TRIGGER_MANUAL = 'manual';
6566const EVENT_HIDE$2 = 'hide';
6567const EVENT_HIDDEN$2 = 'hidden';
6568const EVENT_SHOW$2 = 'show';
6569const EVENT_SHOWN$2 = 'shown';
6570const EVENT_INSERTED = 'inserted';
6571const EVENT_CLICK$1 = 'click';
6572const EVENT_FOCUSIN$1 = 'focusin';
6573const EVENT_FOCUSOUT$1 = 'focusout';
6574const EVENT_MOUSEENTER = 'mouseenter';
6575const EVENT_MOUSELEAVE = 'mouseleave';
6576const AttachmentMap = {
6577  AUTO: 'auto',
6578  TOP: 'top',
6579  RIGHT: isRTL() ? 'left' : 'right',
6580  BOTTOM: 'bottom',
6581  LEFT: isRTL() ? 'right' : 'left'
6582};
6583const Default$3 = {
6584  allowList: DefaultAllowlist,
6585  animation: true,
6586  boundary: 'clippingParents',
6587  container: false,
6588  customClass: '',
6589  delay: 0,
6590  fallbackPlacements: ['top', 'right', 'bottom', 'left'],
6591  html: false,
6592  offset: [0, 6],
6593  placement: 'top',
6594  popperConfig: null,
6595  sanitize: true,
6596  sanitizeFn: null,
6597  selector: false,
6598  template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>',
6599  title: '',
6600  trigger: 'hover focus'
6601};
6602const DefaultType$3 = {
6603  allowList: 'object',
6604  animation: 'boolean',
6605  boundary: '(string|element)',
6606  container: '(string|element|boolean)',
6607  customClass: '(string|function)',
6608  delay: '(number|object)',
6609  fallbackPlacements: 'array',
6610  html: 'boolean',
6611  offset: '(array|string|function)',
6612  placement: '(string|function)',
6613  popperConfig: '(null|object|function)',
6614  sanitize: 'boolean',
6615  sanitizeFn: '(null|function)',
6616  selector: '(string|boolean)',
6617  template: 'string',
6618  title: '(string|element|function)',
6619  trigger: 'string'
6620};
6621
6622/**
6623 * Class definition
6624 */
6625
6626class Tooltip extends BaseComponent {
6627  constructor(element, config) {
6628    if (typeof _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ === 'undefined') {
6629      throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
6630    }
6631    super(element, config);
6632
6633    // Private
6634    this._isEnabled = true;
6635    this._timeout = 0;
6636    this._isHovered = null;
6637    this._activeTrigger = {};
6638    this._popper = null;
6639    this._templateFactory = null;
6640    this._newContent = null;
6641
6642    // Protected
6643    this.tip = null;
6644    this._setListeners();
6645    if (!this._config.selector) {
6646      this._fixTitle();
6647    }
6648  }
6649
6650  // Getters
6651  static get Default() {
6652    return Default$3;
6653  }
6654  static get DefaultType() {
6655    return DefaultType$3;
6656  }
6657  static get NAME() {
6658    return NAME$4;
6659  }
6660
6661  // Public
6662  enable() {
6663    this._isEnabled = true;
6664  }
6665  disable() {
6666    this._isEnabled = false;
6667  }
6668  toggleEnabled() {
6669    this._isEnabled = !this._isEnabled;
6670  }
6671  toggle() {
6672    if (!this._isEnabled) {
6673      return;
6674    }
6675    this._activeTrigger.click = !this._activeTrigger.click;
6676    if (this._isShown()) {
6677      this._leave();
6678      return;
6679    }
6680    this._enter();
6681  }
6682  dispose() {
6683    clearTimeout(this._timeout);
6684    EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
6685    if (this._element.getAttribute('data-bs-original-title')) {
6686      this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));
6687    }
6688    this._disposePopper();
6689    super.dispose();
6690  }
6691  show() {
6692    if (this._element.style.display === 'none') {
6693      throw new Error('Please use show on visible elements');
6694    }
6695    if (!(this._isWithContent() && this._isEnabled)) {
6696      return;
6697    }
6698    const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));
6699    const shadowRoot = findShadowRoot(this._element);
6700    const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);
6701    if (showEvent.defaultPrevented || !isInTheDom) {
6702      return;
6703    }
6704
6705    // TODO: v6 remove this or make it optional
6706    this._disposePopper();
6707    const tip = this._getTipElement();
6708    this._element.setAttribute('aria-describedby', tip.getAttribute('id'));
6709    const {
6710      container
6711    } = this._config;
6712    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
6713      container.append(tip);
6714      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
6715    }
6716    this._popper = this._createPopper(tip);
6717    tip.classList.add(CLASS_NAME_SHOW$2);
6718
6719    // If this is a touch-enabled device we add extra
6720    // empty mouseover listeners to the body's immediate children;
6721    // only needed because of broken event delegation on iOS
6722    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
6723    if ('ontouchstart' in document.documentElement) {
6724      for (const element of [].concat(...document.body.children)) {
6725        EventHandler.on(element, 'mouseover', noop);
6726      }
6727    }
6728    const complete = () => {
6729      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));
6730      if (this._isHovered === false) {
6731        this._leave();
6732      }
6733      this._isHovered = false;
6734    };
6735    this._queueCallback(complete, this.tip, this._isAnimated());
6736  }
6737  hide() {
6738    if (!this._isShown()) {
6739      return;
6740    }
6741    const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));
6742    if (hideEvent.defaultPrevented) {
6743      return;
6744    }
6745    const tip = this._getTipElement();
6746    tip.classList.remove(CLASS_NAME_SHOW$2);
6747
6748    // If this is a touch-enabled device we remove the extra
6749    // empty mouseover listeners we added for iOS support
6750    if ('ontouchstart' in document.documentElement) {
6751      for (const element of [].concat(...document.body.children)) {
6752        EventHandler.off(element, 'mouseover', noop);
6753      }
6754    }
6755    this._activeTrigger[TRIGGER_CLICK] = false;
6756    this._activeTrigger[TRIGGER_FOCUS] = false;
6757    this._activeTrigger[TRIGGER_HOVER] = false;
6758    this._isHovered = null; // it is a trick to support manual triggering
6759
6760    const complete = () => {
6761      if (this._isWithActiveTrigger()) {
6762        return;
6763      }
6764      if (!this._isHovered) {
6765        this._disposePopper();
6766      }
6767      this._element.removeAttribute('aria-describedby');
6768      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));
6769    };
6770    this._queueCallback(complete, this.tip, this._isAnimated());
6771  }
6772  update() {
6773    if (this._popper) {
6774      this._popper.update();
6775    }
6776  }
6777
6778  // Protected
6779  _isWithContent() {
6780    return Boolean(this._getTitle());
6781  }
6782  _getTipElement() {
6783    if (!this.tip) {
6784      this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());
6785    }
6786    return this.tip;
6787  }
6788  _createTipElement(content) {
6789    const tip = this._getTemplateFactory(content).toHtml();
6790
6791    // TODO: remove this check in v6
6792    if (!tip) {
6793      return null;
6794    }
6795    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
6796    // TODO: v6 the following can be achieved with CSS only
6797    tip.classList.add(`bs-${this.constructor.NAME}-auto`);
6798    const tipId = getUID(this.constructor.NAME).toString();
6799    tip.setAttribute('id', tipId);
6800    if (this._isAnimated()) {
6801      tip.classList.add(CLASS_NAME_FADE$2);
6802    }
6803    return tip;
6804  }
6805  setContent(content) {
6806    this._newContent = content;
6807    if (this._isShown()) {
6808      this._disposePopper();
6809      this.show();
6810    }
6811  }
6812  _getTemplateFactory(content) {
6813    if (this._templateFactory) {
6814      this._templateFactory.changeContent(content);
6815    } else {
6816      this._templateFactory = new TemplateFactory({
6817        ...this._config,
6818        // the `content` var has to be after `this._config`
6819        // to override config.content in case of popover
6820        content,
6821        extraClass: this._resolvePossibleFunction(this._config.customClass)
6822      });
6823    }
6824    return this._templateFactory;
6825  }
6826  _getContentForTemplate() {
6827    return {
6828      [SELECTOR_TOOLTIP_INNER]: this._getTitle()
6829    };
6830  }
6831  _getTitle() {
6832    return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');
6833  }
6834
6835  // Private
6836  _initializeOnDelegatedTarget(event) {
6837    return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
6838  }
6839  _isAnimated() {
6840    return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);
6841  }
6842  _isShown() {
6843    return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);
6844  }
6845  _createPopper(tip) {
6846    const placement = execute(this._config.placement, [this, tip, this._element]);
6847    const attachment = AttachmentMap[placement.toUpperCase()];
6848    return _popperjs_core__WEBPACK_IMPORTED_MODULE_1__.createPopper(this._element, tip, this._getPopperConfig(attachment));
6849  }
6850  _getOffset() {
6851    const {
6852      offset
6853    } = this._config;
6854    if (typeof offset === 'string') {
6855      return offset.split(',').map(value => Number.parseInt(value, 10));
6856    }
6857    if (typeof offset === 'function') {
6858      return popperData => offset(popperData, this._element);
6859    }
6860    return offset;
6861  }
6862  _resolvePossibleFunction(arg) {
6863    return execute(arg, [this._element]);
6864  }
6865  _getPopperConfig(attachment) {
6866    const defaultBsPopperConfig = {
6867      placement: attachment,
6868      modifiers: [{
6869        name: 'flip',
6870        options: {
6871          fallbackPlacements: this._config.fallbackPlacements
6872        }
6873      }, {
6874        name: 'offset',
6875        options: {
6876          offset: this._getOffset()
6877        }
6878      }, {
6879        name: 'preventOverflow',
6880        options: {
6881          boundary: this._config.boundary
6882        }
6883      }, {
6884        name: 'arrow',
6885        options: {
6886          element: `.${this.constructor.NAME}-arrow`
6887        }
6888      }, {
6889        name: 'preSetPlacement',
6890        enabled: true,
6891        phase: 'beforeMain',
6892        fn: data => {
6893          // Pre-set Popper's placement attribute in order to read the arrow sizes properly.
6894          // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement
6895          this._getTipElement().setAttribute('data-popper-placement', data.state.placement);
6896        }
6897      }]
6898    };
6899    return {
6900      ...defaultBsPopperConfig,
6901      ...execute(this._config.popperConfig, [defaultBsPopperConfig])
6902    };
6903  }
6904  _setListeners() {
6905    const triggers = this._config.trigger.split(' ');
6906    for (const trigger of triggers) {
6907      if (trigger === 'click') {
6908        EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
6909          const context = this._initializeOnDelegatedTarget(event);
6910          context.toggle();
6911        });
6912      } else if (trigger !== TRIGGER_MANUAL) {
6913        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);
6914        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);
6915        EventHandler.on(this._element, eventIn, this._config.selector, event => {
6916          const context = this._initializeOnDelegatedTarget(event);
6917          context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
6918          context._enter();
6919        });
6920        EventHandler.on(this._element, eventOut, this._config.selector, event => {
6921          const context = this._initializeOnDelegatedTarget(event);
6922          context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
6923          context._leave();
6924        });
6925      }
6926    }
6927    this._hideModalHandler = () => {
6928      if (this._element) {
6929        this.hide();
6930      }
6931    };
6932    EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
6933  }
6934  _fixTitle() {
6935    const title = this._element.getAttribute('title');
6936    if (!title) {
6937      return;
6938    }
6939    if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {
6940      this._element.setAttribute('aria-label', title);
6941    }
6942    this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility
6943    this._element.removeAttribute('title');
6944  }
6945  _enter() {
6946    if (this._isShown() || this._isHovered) {
6947      this._isHovered = true;
6948      return;
6949    }
6950    this._isHovered = true;
6951    this._setTimeout(() => {
6952      if (this._isHovered) {
6953        this.show();
6954      }
6955    }, this._config.delay.show);
6956  }
6957  _leave() {
6958    if (this._isWithActiveTrigger()) {
6959      return;
6960    }
6961    this._isHovered = false;
6962    this._setTimeout(() => {
6963      if (!this._isHovered) {
6964        this.hide();
6965      }
6966    }, this._config.delay.hide);
6967  }
6968  _setTimeout(handler, timeout) {
6969    clearTimeout(this._timeout);
6970    this._timeout = setTimeout(handler, timeout);
6971  }
6972  _isWithActiveTrigger() {
6973    return Object.values(this._activeTrigger).includes(true);
6974  }
6975  _getConfig(config) {
6976    const dataAttributes = Manipulator.getDataAttributes(this._element);
6977    for (const dataAttribute of Object.keys(dataAttributes)) {
6978      if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {
6979        delete dataAttributes[dataAttribute];
6980      }
6981    }
6982    config = {
6983      ...dataAttributes,
6984      ...(typeof config === 'object' && config ? config : {})
6985    };
6986    config = this._mergeConfigObj(config);
6987    config = this._configAfterMerge(config);
6988    this._typeCheckConfig(config);
6989    return config;
6990  }
6991  _configAfterMerge(config) {
6992    config.container = config.container === false ? document.body : getElement(config.container);
6993    if (typeof config.delay === 'number') {
6994      config.delay = {
6995        show: config.delay,
6996        hide: config.delay
6997      };
6998    }
6999    if (typeof config.title === 'number') {
7000      config.title = config.title.toString();
7001    }
7002    if (typeof config.content === 'number') {
7003      config.content = config.content.toString();
7004    }
7005    return config;
7006  }
7007  _getDelegateConfig() {
7008    const config = {};
7009    for (const [key, value] of Object.entries(this._config)) {
7010      if (this.constructor.Default[key] !== value) {
7011        config[key] = value;
7012      }
7013    }
7014    config.selector = false;
7015    config.trigger = 'manual';
7016
7017    // In the future can be replaced with:
7018    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
7019    // `Object.fromEntries(keysWithDifferentValues)`
7020    return config;
7021  }
7022  _disposePopper() {
7023    if (this._popper) {
7024      this._popper.destroy();
7025      this._popper = null;
7026    }
7027    if (this.tip) {
7028      this.tip.remove();
7029      this.tip = null;
7030    }
7031  }
7032
7033  // Static
7034  static jQueryInterface(config) {
7035    return this.each(function () {
7036      const data = Tooltip.getOrCreateInstance(this, config);
7037      if (typeof config !== 'string') {
7038        return;
7039      }
7040      if (typeof data[config] === 'undefined') {
7041        throw new TypeError(`No method named "${config}"`);
7042      }
7043      data[config]();
7044    });
7045  }
7046}
7047
7048/**
7049 * jQuery
7050 */
7051
7052defineJQueryPlugin(Tooltip);
7053
7054/**
7055 * --------------------------------------------------------------------------
7056 * Bootstrap popover.js
7057 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
7058 * --------------------------------------------------------------------------
7059 */
7060
7061
7062/**
7063 * Constants
7064 */
7065
7066const NAME$3 = 'popover';
7067const SELECTOR_TITLE = '.popover-header';
7068const SELECTOR_CONTENT = '.popover-body';
7069const Default$2 = {
7070  ...Tooltip.Default,
7071  content: '',
7072  offset: [0, 8],
7073  placement: 'right',
7074  template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>',
7075  trigger: 'click'
7076};
7077const DefaultType$2 = {
7078  ...Tooltip.DefaultType,
7079  content: '(null|string|element|function)'
7080};
7081
7082/**
7083 * Class definition
7084 */
7085
7086class Popover extends Tooltip {
7087  // Getters
7088  static get Default() {
7089    return Default$2;
7090  }
7091  static get DefaultType() {
7092    return DefaultType$2;
7093  }
7094  static get NAME() {
7095    return NAME$3;
7096  }
7097
7098  // Overrides
7099  _isWithContent() {
7100    return this._getTitle() || this._getContent();
7101  }
7102
7103  // Private
7104  _getContentForTemplate() {
7105    return {
7106      [SELECTOR_TITLE]: this._getTitle(),
7107      [SELECTOR_CONTENT]: this._getContent()
7108    };
7109  }
7110  _getContent() {
7111    return this._resolvePossibleFunction(this._config.content);
7112  }
7113
7114  // Static
7115  static jQueryInterface(config) {
7116    return this.each(function () {
7117      const data = Popover.getOrCreateInstance(this, config);
7118      if (typeof config !== 'string') {
7119        return;
7120      }
7121      if (typeof data[config] === 'undefined') {
7122        throw new TypeError(`No method named "${config}"`);
7123      }
7124      data[config]();
7125    });
7126  }
7127}
7128
7129/**
7130 * jQuery
7131 */
7132
7133defineJQueryPlugin(Popover);
7134
7135/**
7136 * --------------------------------------------------------------------------
7137 * Bootstrap scrollspy.js
7138 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
7139 * --------------------------------------------------------------------------
7140 */
7141
7142
7143/**
7144 * Constants
7145 */
7146
7147const NAME$2 = 'scrollspy';
7148const DATA_KEY$2 = 'bs.scrollspy';
7149const EVENT_KEY$2 = `.${DATA_KEY$2}`;
7150const DATA_API_KEY = '.data-api';
7151const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;
7152const EVENT_CLICK = `click${EVENT_KEY$2}`;
7153const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;
7154const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
7155const CLASS_NAME_ACTIVE$1 = 'active';
7156const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
7157const SELECTOR_TARGET_LINKS = '[href]';
7158const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
7159const SELECTOR_NAV_LINKS = '.nav-link';
7160const SELECTOR_NAV_ITEMS = '.nav-item';
7161const SELECTOR_LIST_ITEMS = '.list-group-item';
7162const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;
7163const SELECTOR_DROPDOWN = '.dropdown';
7164const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
7165const Default$1 = {
7166  offset: null,
7167  // TODO: v6 @deprecated, keep it for backwards compatibility reasons
7168  rootMargin: '0px 0px -25%',
7169  smoothScroll: false,
7170  target: null,
7171  threshold: [0.1, 0.5, 1]
7172};
7173const DefaultType$1 = {
7174  offset: '(number|null)',
7175  // TODO v6 @deprecated, keep it for backwards compatibility reasons
7176  rootMargin: 'string',
7177  smoothScroll: 'boolean',
7178  target: 'element',
7179  threshold: 'array'
7180};
7181
7182/**
7183 * Class definition
7184 */
7185
7186class ScrollSpy extends BaseComponent {
7187  constructor(element, config) {
7188    super(element, config);
7189
7190    // this._element is the observablesContainer and config.target the menu links wrapper
7191    this._targetLinks = new Map();
7192    this._observableSections = new Map();
7193    this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
7194    this._activeTarget = null;
7195    this._observer = null;
7196    this._previousScrollData = {
7197      visibleEntryTop: 0,
7198      parentScrollTop: 0
7199    };
7200    this.refresh(); // initialize
7201  }
7202
7203  // Getters
7204  static get Default() {
7205    return Default$1;
7206  }
7207  static get DefaultType() {
7208    return DefaultType$1;
7209  }
7210  static get NAME() {
7211    return NAME$2;
7212  }
7213
7214  // Public
7215  refresh() {
7216    this._initializeTargetsAndObservables();
7217    this._maybeEnableSmoothScroll();
7218    if (this._observer) {
7219      this._observer.disconnect();
7220    } else {
7221      this._observer = this._getNewObserver();
7222    }
7223    for (const section of this._observableSections.values()) {
7224      this._observer.observe(section);
7225    }
7226  }
7227  dispose() {
7228    this._observer.disconnect();
7229    super.dispose();
7230  }
7231
7232  // Private
7233  _configAfterMerge(config) {
7234    // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
7235    config.target = getElement(config.target) || document.body;
7236
7237    // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
7238    config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
7239    if (typeof config.threshold === 'string') {
7240      config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));
7241    }
7242    return config;
7243  }
7244  _maybeEnableSmoothScroll() {
7245    if (!this._config.smoothScroll) {
7246      return;
7247    }
7248
7249    // unregister any previous listeners
7250    EventHandler.off(this._config.target, EVENT_CLICK);
7251    EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
7252      const observableSection = this._observableSections.get(event.target.hash);
7253      if (observableSection) {
7254        event.preventDefault();
7255        const root = this._rootElement || window;
7256        const height = observableSection.offsetTop - this._element.offsetTop;
7257        if (root.scrollTo) {
7258          root.scrollTo({
7259            top: height,
7260            behavior: 'smooth'
7261          });
7262          return;
7263        }
7264
7265        // Chrome 60 doesn't support `scrollTo`
7266        root.scrollTop = height;
7267      }
7268    });
7269  }
7270  _getNewObserver() {
7271    const options = {
7272      root: this._rootElement,
7273      threshold: this._config.threshold,
7274      rootMargin: this._config.rootMargin
7275    };
7276    return new IntersectionObserver(entries => this._observerCallback(entries), options);
7277  }
7278
7279  // The logic of selection
7280  _observerCallback(entries) {
7281    const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
7282    const activate = entry => {
7283      this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
7284      this._process(targetElement(entry));
7285    };
7286    const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
7287    const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
7288    this._previousScrollData.parentScrollTop = parentScrollTop;
7289    for (const entry of entries) {
7290      if (!entry.isIntersecting) {
7291        this._activeTarget = null;
7292        this._clearActiveClass(targetElement(entry));
7293        continue;
7294      }
7295      const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
7296      // if we are scrolling down, pick the bigger offsetTop
7297      if (userScrollsDown && entryIsLowerThanPrevious) {
7298        activate(entry);
7299        // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
7300        if (!parentScrollTop) {
7301          return;
7302        }
7303        continue;
7304      }
7305
7306      // if we are scrolling up, pick the smallest offsetTop
7307      if (!userScrollsDown && !entryIsLowerThanPrevious) {
7308        activate(entry);
7309      }
7310    }
7311  }
7312  _initializeTargetsAndObservables() {
7313    this._targetLinks = new Map();
7314    this._observableSections = new Map();
7315    const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
7316    for (const anchor of targetLinks) {
7317      // ensure that the anchor has an id and is not disabled
7318      if (!anchor.hash || isDisabled(anchor)) {
7319        continue;
7320      }
7321      const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);
7322
7323      // ensure that the observableSection exists & is visible
7324      if (isVisible(observableSection)) {
7325        this._targetLinks.set(decodeURI(anchor.hash), anchor);
7326        this._observableSections.set(anchor.hash, observableSection);
7327      }
7328    }
7329  }
7330  _process(target) {
7331    if (this._activeTarget === target) {
7332      return;
7333    }
7334    this._clearActiveClass(this._config.target);
7335    this._activeTarget = target;
7336    target.classList.add(CLASS_NAME_ACTIVE$1);
7337    this._activateParents(target);
7338    EventHandler.trigger(this._element, EVENT_ACTIVATE, {
7339      relatedTarget: target
7340    });
7341  }
7342  _activateParents(target) {
7343    // Activate dropdown parents
7344    if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
7345      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);
7346      return;
7347    }
7348    for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
7349      // Set triggered links parents as active
7350      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
7351      for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {
7352        item.classList.add(CLASS_NAME_ACTIVE$1);
7353      }
7354    }
7355  }
7356  _clearActiveClass(parent) {
7357    parent.classList.remove(CLASS_NAME_ACTIVE$1);
7358    const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);
7359    for (const node of activeNodes) {
7360      node.classList.remove(CLASS_NAME_ACTIVE$1);
7361    }
7362  }
7363
7364  // Static
7365  static jQueryInterface(config) {
7366    return this.each(function () {
7367      const data = ScrollSpy.getOrCreateInstance(this, config);
7368      if (typeof config !== 'string') {
7369        return;
7370      }
7371      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
7372        throw new TypeError(`No method named "${config}"`);
7373      }
7374      data[config]();
7375    });
7376  }
7377}
7378
7379/**
7380 * Data API implementation
7381 */
7382
7383EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {
7384  for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
7385    ScrollSpy.getOrCreateInstance(spy);
7386  }
7387});
7388
7389/**
7390 * jQuery
7391 */
7392
7393defineJQueryPlugin(ScrollSpy);
7394
7395/**
7396 * --------------------------------------------------------------------------
7397 * Bootstrap tab.js
7398 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
7399 * --------------------------------------------------------------------------
7400 */
7401
7402
7403/**
7404 * Constants
7405 */
7406
7407const NAME$1 = 'tab';
7408const DATA_KEY$1 = 'bs.tab';
7409const EVENT_KEY$1 = `.${DATA_KEY$1}`;
7410const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;
7411const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;
7412const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;
7413const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;
7414const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;
7415const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;
7416const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;
7417const ARROW_LEFT_KEY = 'ArrowLeft';
7418const ARROW_RIGHT_KEY = 'ArrowRight';
7419const ARROW_UP_KEY = 'ArrowUp';
7420const ARROW_DOWN_KEY = 'ArrowDown';
7421const HOME_KEY = 'Home';
7422const END_KEY = 'End';
7423const CLASS_NAME_ACTIVE = 'active';
7424const CLASS_NAME_FADE$1 = 'fade';
7425const CLASS_NAME_SHOW$1 = 'show';
7426const CLASS_DROPDOWN = 'dropdown';
7427const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
7428const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';
7429const NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;
7430const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
7431const SELECTOR_OUTER = '.nav-item, .list-group-item';
7432const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
7433const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // TODO: could only be `tab` in v6
7434const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
7435const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;
7436
7437/**
7438 * Class definition
7439 */
7440
7441class Tab extends BaseComponent {
7442  constructor(element) {
7443    super(element);
7444    this._parent = this._element.closest(SELECTOR_TAB_PANEL);
7445    if (!this._parent) {
7446      return;
7447      // TODO: should throw exception in v6
7448      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
7449    }
7450
7451    // Set up initial aria attributes
7452    this._setInitialAttributes(this._parent, this._getChildren());
7453    EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
7454  }
7455
7456  // Getters
7457  static get NAME() {
7458    return NAME$1;
7459  }
7460
7461  // Public
7462  show() {
7463    // Shows this elem and deactivate the active sibling if exists
7464    const innerElem = this._element;
7465    if (this._elemIsActive(innerElem)) {
7466      return;
7467    }
7468
7469    // Search for active tab on same parent to deactivate it
7470    const active = this._getActiveElem();
7471    const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {
7472      relatedTarget: innerElem
7473    }) : null;
7474    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {
7475      relatedTarget: active
7476    });
7477    if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
7478      return;
7479    }
7480    this._deactivate(active, innerElem);
7481    this._activate(innerElem, active);
7482  }
7483
7484  // Private
7485  _activate(element, relatedElem) {
7486    if (!element) {
7487      return;
7488    }
7489    element.classList.add(CLASS_NAME_ACTIVE);
7490    this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section
7491
7492    const complete = () => {
7493      if (element.getAttribute('role') !== 'tab') {
7494        element.classList.add(CLASS_NAME_SHOW$1);
7495        return;
7496      }
7497      element.removeAttribute('tabindex');
7498      element.setAttribute('aria-selected', true);
7499      this._toggleDropDown(element, true);
7500      EventHandler.trigger(element, EVENT_SHOWN$1, {
7501        relatedTarget: relatedElem
7502      });
7503    };
7504    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
7505  }
7506  _deactivate(element, relatedElem) {
7507    if (!element) {
7508      return;
7509    }
7510    element.classList.remove(CLASS_NAME_ACTIVE);
7511    element.blur();
7512    this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too
7513
7514    const complete = () => {
7515      if (element.getAttribute('role') !== 'tab') {
7516        element.classList.remove(CLASS_NAME_SHOW$1);
7517        return;
7518      }
7519      element.setAttribute('aria-selected', false);
7520      element.setAttribute('tabindex', '-1');
7521      this._toggleDropDown(element, false);
7522      EventHandler.trigger(element, EVENT_HIDDEN$1, {
7523        relatedTarget: relatedElem
7524      });
7525    };
7526    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
7527  }
7528  _keydown(event) {
7529    if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {
7530      return;
7531    }
7532    event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
7533    event.preventDefault();
7534    const children = this._getChildren().filter(element => !isDisabled(element));
7535    let nextActiveElement;
7536    if ([HOME_KEY, END_KEY].includes(event.key)) {
7537      nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];
7538    } else {
7539      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
7540      nextActiveElement = getNextActiveElement(children, event.target, isNext, true);
7541    }
7542    if (nextActiveElement) {
7543      nextActiveElement.focus({
7544        preventScroll: true
7545      });
7546      Tab.getOrCreateInstance(nextActiveElement).show();
7547    }
7548  }
7549  _getChildren() {
7550    // collection of inner elements
7551    return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
7552  }
7553  _getActiveElem() {
7554    return this._getChildren().find(child => this._elemIsActive(child)) || null;
7555  }
7556  _setInitialAttributes(parent, children) {
7557    this._setAttributeIfNotExists(parent, 'role', 'tablist');
7558    for (const child of children) {
7559      this._setInitialAttributesOnChild(child);
7560    }
7561  }
7562  _setInitialAttributesOnChild(child) {
7563    child = this._getInnerElement(child);
7564    const isActive = this._elemIsActive(child);
7565    const outerElem = this._getOuterElement(child);
7566    child.setAttribute('aria-selected', isActive);
7567    if (outerElem !== child) {
7568      this._setAttributeIfNotExists(outerElem, 'role', 'presentation');
7569    }
7570    if (!isActive) {
7571      child.setAttribute('tabindex', '-1');
7572    }
7573    this._setAttributeIfNotExists(child, 'role', 'tab');
7574
7575    // set attributes to the related panel too
7576    this._setInitialAttributesOnTargetPanel(child);
7577  }
7578  _setInitialAttributesOnTargetPanel(child) {
7579    const target = SelectorEngine.getElementFromSelector(child);
7580    if (!target) {
7581      return;
7582    }
7583    this._setAttributeIfNotExists(target, 'role', 'tabpanel');
7584    if (child.id) {
7585      this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);
7586    }
7587  }
7588  _toggleDropDown(element, open) {
7589    const outerElem = this._getOuterElement(element);
7590    if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
7591      return;
7592    }
7593    const toggle = (selector, className) => {
7594      const element = SelectorEngine.findOne(selector, outerElem);
7595      if (element) {
7596        element.classList.toggle(className, open);
7597      }
7598    };
7599    toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
7600    toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);
7601    outerElem.setAttribute('aria-expanded', open);
7602  }
7603  _setAttributeIfNotExists(element, attribute, value) {
7604    if (!element.hasAttribute(attribute)) {
7605      element.setAttribute(attribute, value);
7606    }
7607  }
7608  _elemIsActive(elem) {
7609    return elem.classList.contains(CLASS_NAME_ACTIVE);
7610  }
7611
7612  // Try to get the inner element (usually the .nav-link)
7613  _getInnerElement(elem) {
7614    return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
7615  }
7616
7617  // Try to get the outer element (usually the .nav-item)
7618  _getOuterElement(elem) {
7619    return elem.closest(SELECTOR_OUTER) || elem;
7620  }
7621
7622  // Static
7623  static jQueryInterface(config) {
7624    return this.each(function () {
7625      const data = Tab.getOrCreateInstance(this);
7626      if (typeof config !== 'string') {
7627        return;
7628      }
7629      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
7630        throw new TypeError(`No method named "${config}"`);
7631      }
7632      data[config]();
7633    });
7634  }
7635}
7636
7637/**
7638 * Data API implementation
7639 */
7640
7641EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
7642  if (['A', 'AREA'].includes(this.tagName)) {
7643    event.preventDefault();
7644  }
7645  if (isDisabled(this)) {
7646    return;
7647  }
7648  Tab.getOrCreateInstance(this).show();
7649});
7650
7651/**
7652 * Initialize on focus
7653 */
7654EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
7655  for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
7656    Tab.getOrCreateInstance(element);
7657  }
7658});
7659/**
7660 * jQuery
7661 */
7662
7663defineJQueryPlugin(Tab);
7664
7665/**
7666 * --------------------------------------------------------------------------
7667 * Bootstrap toast.js
7668 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
7669 * --------------------------------------------------------------------------
7670 */
7671
7672
7673/**
7674 * Constants
7675 */
7676
7677const NAME = 'toast';
7678const DATA_KEY = 'bs.toast';
7679const EVENT_KEY = `.${DATA_KEY}`;
7680const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
7681const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
7682const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
7683const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
7684const EVENT_HIDE = `hide${EVENT_KEY}`;
7685const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
7686const EVENT_SHOW = `show${EVENT_KEY}`;
7687const EVENT_SHOWN = `shown${EVENT_KEY}`;
7688const CLASS_NAME_FADE = 'fade';
7689const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
7690const CLASS_NAME_SHOW = 'show';
7691const CLASS_NAME_SHOWING = 'showing';
7692const DefaultType = {
7693  animation: 'boolean',
7694  autohide: 'boolean',
7695  delay: 'number'
7696};
7697const Default = {
7698  animation: true,
7699  autohide: true,
7700  delay: 5000
7701};
7702
7703/**
7704 * Class definition
7705 */
7706
7707class Toast extends BaseComponent {
7708  constructor(element, config) {
7709    super(element, config);
7710    this._timeout = null;
7711    this._hasMouseInteraction = false;
7712    this._hasKeyboardInteraction = false;
7713    this._setListeners();
7714  }
7715
7716  // Getters
7717  static get Default() {
7718    return Default;
7719  }
7720  static get DefaultType() {
7721    return DefaultType;
7722  }
7723  static get NAME() {
7724    return NAME;
7725  }
7726
7727  // Public
7728  show() {
7729    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
7730    if (showEvent.defaultPrevented) {
7731      return;
7732    }
7733    this._clearTimeout();
7734    if (this._config.animation) {
7735      this._element.classList.add(CLASS_NAME_FADE);
7736    }
7737    const complete = () => {
7738      this._element.classList.remove(CLASS_NAME_SHOWING);
7739      EventHandler.trigger(this._element, EVENT_SHOWN);
7740      this._maybeScheduleHide();
7741    };
7742    this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
7743    reflow(this._element);
7744    this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
7745    this._queueCallback(complete, this._element, this._config.animation);
7746  }
7747  hide() {
7748    if (!this.isShown()) {
7749      return;
7750    }
7751    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
7752    if (hideEvent.defaultPrevented) {
7753      return;
7754    }
7755    const complete = () => {
7756      this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
7757      this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
7758      EventHandler.trigger(this._element, EVENT_HIDDEN);
7759    };
7760    this._element.classList.add(CLASS_NAME_SHOWING);
7761    this._queueCallback(complete, this._element, this._config.animation);
7762  }
7763  dispose() {
7764    this._clearTimeout();
7765    if (this.isShown()) {
7766      this._element.classList.remove(CLASS_NAME_SHOW);
7767    }
7768    super.dispose();
7769  }
7770  isShown() {
7771    return this._element.classList.contains(CLASS_NAME_SHOW);
7772  }
7773
7774  // Private
7775
7776  _maybeScheduleHide() {
7777    if (!this._config.autohide) {
7778      return;
7779    }
7780    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
7781      return;
7782    }
7783    this._timeout = setTimeout(() => {
7784      this.hide();
7785    }, this._config.delay);
7786  }
7787  _onInteraction(event, isInteracting) {
7788    switch (event.type) {
7789      case 'mouseover':
7790      case 'mouseout':
7791        {
7792          this._hasMouseInteraction = isInteracting;
7793          break;
7794        }
7795      case 'focusin':
7796      case 'focusout':
7797        {
7798          this._hasKeyboardInteraction = isInteracting;
7799          break;
7800        }
7801    }
7802    if (isInteracting) {
7803      this._clearTimeout();
7804      return;
7805    }
7806    const nextElement = event.relatedTarget;
7807    if (this._element === nextElement || this._element.contains(nextElement)) {
7808      return;
7809    }
7810    this._maybeScheduleHide();
7811  }
7812  _setListeners() {
7813    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
7814    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
7815    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
7816    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
7817  }
7818  _clearTimeout() {
7819    clearTimeout(this._timeout);
7820    this._timeout = null;
7821  }
7822
7823  // Static
7824  static jQueryInterface(config) {
7825    return this.each(function () {
7826      const data = Toast.getOrCreateInstance(this, config);
7827      if (typeof config === 'string') {
7828        if (typeof data[config] === 'undefined') {
7829          throw new TypeError(`No method named "${config}"`);
7830        }
7831        data[config](this);
7832      }
7833    });
7834  }
7835}
7836
7837/**
7838 * Data API implementation
7839 */
7840
7841enableDismissTrigger(Toast);
7842
7843/**
7844 * jQuery
7845 */
7846
7847defineJQueryPlugin(Toast);
7848
7849
7850//# sourceMappingURL=bootstrap.esm.js.map
7851
7852
7853/***/ }),
7854
vendor: 285,755 bytes, lines 7855-18581
7855/***/ "./node_modules/jquery/dist/jquery.js":
7856/*!********************************************!*\
7857  !*** ./node_modules/jquery/dist/jquery.js ***!
7858  \********************************************/
7859/***/ (function(module, exports) {
7860
7861var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
7862 * jQuery JavaScript Library v3.7.1
7863 * https://jquery.com/
7864 *
7865 * Copyright OpenJS Foundation and other contributors
7866 * Released under the MIT license
7867 * https://jquery.org/license
7868 *
7869 * Date: 2023-08-28T13:37Z
7870 */
7871( function( global, factory ) {
7872
7873	"use strict";
7874
7875	if (  true && typeof module.exports === "object" ) {
7876
7877		// For CommonJS and CommonJS-like environments where a proper `window`
7878		// is present, execute the factory and get jQuery.
7879		// For environments that do not have a `window` with a `document`
7880		// (such as Node.js), expose a factory as module.exports.
7881		// This accentuates the need for the creation of a real `window`.
7882		// e.g. var jQuery = require("jquery")(window);
7883		// See ticket trac-14549 for more info.
7884		module.exports = global.document ?
7885			factory( global, true ) :
7886			function( w ) {
7887				if ( !w.document ) {
7888					throw new Error( "jQuery requires a window with a document" );
7889				}
7890				return factory( w );
7891			};
7892	} else {
7893		factory( global );
7894	}
7895
7896// Pass this if window is not defined yet
7897} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
7898
7899// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
7900// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
7901// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
7902// enough that all such attempts are guarded in a try block.
7903"use strict";
7904
7905var arr = [];
7906
7907var getProto = Object.getPrototypeOf;
7908
7909var slice = arr.slice;
7910
7911var flat = arr.flat ? function( array ) {
7912	return arr.flat.call( array );
7913} : function( array ) {
7914	return arr.concat.apply( [], array );
7915};
7916
7917
7918var push = arr.push;
7919
7920var indexOf = arr.indexOf;
7921
7922var class2type = {};
7923
7924var toString = class2type.toString;
7925
7926var hasOwn = class2type.hasOwnProperty;
7927
7928var fnToString = hasOwn.toString;
7929
7930var ObjectFunctionString = fnToString.call( Object );
7931
7932var support = {};
7933
7934var isFunction = function isFunction( obj ) {
7935
7936		// Support: Chrome <=57, Firefox <=52
7937		// In some browsers, typeof returns "function" for HTML <object> elements
7938		// (i.e., `typeof document.createElement( "object" ) === "function"`).
7939		// We don't want to classify *any* DOM node as a function.
7940		// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
7941		// Plus for old WebKit, typeof returns "function" for HTML collections
7942		// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
7943		return typeof obj === "function" && typeof obj.nodeType !== "number" &&
7944			typeof obj.item !== "function";
7945	};
7946
7947
7948var isWindow = function isWindow( obj ) {
7949		return obj != null && obj === obj.window;
7950	};
7951
7952
7953var document = window.document;
7954
7955
7956
7957	var preservedScriptAttributes = {
7958		type: true,
7959		src: true,
7960		nonce: true,
7961		noModule: true
7962	};
7963
7964	function DOMEval( code, node, doc ) {
7965		doc = doc || document;
7966
7967		var i, val,
7968			script = doc.createElement( "script" );
7969
7970		script.text = code;
7971		if ( node ) {
7972			for ( i in preservedScriptAttributes ) {
7973
7974				// Support: Firefox 64+, Edge 18+
7975				// Some browsers don't support the "nonce" property on scripts.
7976				// On the other hand, just using `getAttribute` is not enough as
7977				// the `nonce` attribute is reset to an empty string whenever it
7978				// becomes browsing-context connected.
7979				// See https://github.com/whatwg/html/issues/2369
7980				// See https://html.spec.whatwg.org/#nonce-attributes
7981				// The `node.getAttribute` check was added for the sake of
7982				// `jQuery.globalEval` so that it can fake a nonce-containing node
7983				// via an object.
7984				val = node[ i ] || node.getAttribute && node.getAttribute( i );
7985				if ( val ) {
7986					script.setAttribute( i, val );
7987				}
7988			}
7989		}
7990		doc.head.appendChild( script ).parentNode.removeChild( script );
7991	}
7992
7993
7994function toType( obj ) {
7995	if ( obj == null ) {
7996		return obj + "";
7997	}
7998
7999	// Support: Android <=2.3 only (functionish RegExp)
8000	return typeof obj === "object" || typeof obj === "function" ?
8001		class2type[ toString.call( obj ) ] || "object" :
8002		typeof obj;
8003}
8004/* global Symbol */
8005// Defining this global in .eslintrc.json would create a danger of using the global
8006// unguarded in another place, it seems safer to define global only for this module
8007
8008
8009
8010var version = "3.7.1",
8011
8012	rhtmlSuffix = /HTML$/i,
8013
8014	// Define a local copy of jQuery
8015	jQuery = function( selector, context ) {
8016
8017		// The jQuery object is actually just the init constructor 'enhanced'
8018		// Need init if jQuery is called (just allow error to be thrown if not included)
8019		return new jQuery.fn.init( selector, context );
8020	};
8021
8022jQuery.fn = jQuery.prototype = {
8023
8024	// The current version of jQuery being used
8025	jquery: version,
8026
8027	constructor: jQuery,
8028
8029	// The default length of a jQuery object is 0
8030	length: 0,
8031
8032	toArray: function() {
8033		return slice.call( this );
8034	},
8035
8036	// Get the Nth element in the matched element set OR
8037	// Get the whole matched element set as a clean array
8038	get: function( num ) {
8039
8040		// Return all the elements in a clean array
8041		if ( num == null ) {
8042			return slice.call( this );
8043		}
8044
8045		// Return just the one element from the set
8046		return num < 0 ? this[ num + this.length ] : this[ num ];
8047	},
8048
8049	// Take an array of elements and push it onto the stack
8050	// (returning the new matched element set)
8051	pushStack: function( elems ) {
8052
8053		// Build a new jQuery matched element set
8054		var ret = jQuery.merge( this.constructor(), elems );
8055
8056		// Add the old object onto the stack (as a reference)
8057		ret.prevObject = this;
8058
8059		// Return the newly-formed element set
8060		return ret;
8061	},
8062
8063	// Execute a callback for every element in the matched set.
8064	each: function( callback ) {
8065		return jQuery.each( this, callback );
8066	},
8067
8068	map: function( callback ) {
8069		return this.pushStack( jQuery.map( this, function( elem, i ) {
8070			return callback.call( elem, i, elem );
8071		} ) );
8072	},
8073
8074	slice: function() {
8075		return this.pushStack( slice.apply( this, arguments ) );
8076	},
8077
8078	first: function() {
8079		return this.eq( 0 );
8080	},
8081
8082	last: function() {
8083		return this.eq( -1 );
8084	},
8085
8086	even: function() {
8087		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
8088			return ( i + 1 ) % 2;
8089		} ) );
8090	},
8091
8092	odd: function() {
8093		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
8094			return i % 2;
8095		} ) );
8096	},
8097
8098	eq: function( i ) {
8099		var len = this.length,
8100			j = +i + ( i < 0 ? len : 0 );
8101		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
8102	},
8103
8104	end: function() {
8105		return this.prevObject || this.constructor();
8106	},
8107
8108	// For internal use only.
8109	// Behaves like an Array's method, not like a jQuery method.
8110	push: push,
8111	sort: arr.sort,
8112	splice: arr.splice
8113};
8114
8115jQuery.extend = jQuery.fn.extend = function() {
8116	var options, name, src, copy, copyIsArray, clone,
8117		target = arguments[ 0 ] || {},
8118		i = 1,
8119		length = arguments.length,
8120		deep = false;
8121
8122	// Handle a deep copy situation
8123	if ( typeof target === "boolean" ) {
8124		deep = target;
8125
8126		// Skip the boolean and the target
8127		target = arguments[ i ] || {};
8128		i++;
8129	}
8130
8131	// Handle case when target is a string or something (possible in deep copy)
8132	if ( typeof target !== "object" && !isFunction( target ) ) {
8133		target = {};
8134	}
8135
8136	// Extend jQuery itself if only one argument is passed
8137	if ( i === length ) {
8138		target = this;
8139		i--;
8140	}
8141
8142	for ( ; i < length; i++ ) {
8143
8144		// Only deal with non-null/undefined values
8145		if ( ( options = arguments[ i ] ) != null ) {
8146
8147			// Extend the base object
8148			for ( name in options ) {
8149				copy = options[ name ];
8150
8151				// Prevent Object.prototype pollution
8152				// Prevent never-ending loop
8153				if ( name === "__proto__" || target === copy ) {
8154					continue;
8155				}
8156
8157				// Recurse if we're merging plain objects or arrays
8158				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
8159					( copyIsArray = Array.isArray( copy ) ) ) ) {
8160					src = target[ name ];
8161
8162					// Ensure proper type for the source value
8163					if ( copyIsArray && !Array.isArray( src ) ) {
8164						clone = [];
8165					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
8166						clone = {};
8167					} else {
8168						clone = src;
8169					}
8170					copyIsArray = false;
8171
8172					// Never move original objects, clone them
8173					target[ name ] = jQuery.extend( deep, clone, copy );
8174
8175				// Don't bring in undefined values
8176				} else if ( copy !== undefined ) {
8177					target[ name ] = copy;
8178				}
8179			}
8180		}
8181	}
8182
8183	// Return the modified object
8184	return target;
8185};
8186
8187jQuery.extend( {
8188
8189	// Unique for each copy of jQuery on the page
8190	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
8191
8192	// Assume jQuery is ready without the ready module
8193	isReady: true,
8194
8195	error: function( msg ) {
8196		throw new Error( msg );
8197	},
8198
8199	noop: function() {},
8200
8201	isPlainObject: function( obj ) {
8202		var proto, Ctor;
8203
8204		// Detect obvious negatives
8205		// Use toString instead of jQuery.type to catch host objects
8206		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
8207			return false;
8208		}
8209
8210		proto = getProto( obj );
8211
8212		// Objects with no prototype (e.g., `Object.create( null )`) are plain
8213		if ( !proto ) {
8214			return true;
8215		}
8216
8217		// Objects with prototype are plain iff they were constructed by a global Object function
8218		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
8219		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
8220	},
8221
8222	isEmptyObject: function( obj ) {
8223		var name;
8224
8225		for ( name in obj ) {
8226			return false;
8227		}
8228		return true;
8229	},
8230
8231	// Evaluates a script in a provided context; falls back to the global one
8232	// if not specified.
8233	globalEval: function( code, options, doc ) {
8234		DOMEval( code, { nonce: options && options.nonce }, doc );
8235	},
8236
8237	each: function( obj, callback ) {
8238		var length, i = 0;
8239
8240		if ( isArrayLike( obj ) ) {
8241			length = obj.length;
8242			for ( ; i < length; i++ ) {
8243				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
8244					break;
8245				}
8246			}
8247		} else {
8248			for ( i in obj ) {
8249				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
8250					break;
8251				}
8252			}
8253		}
8254
8255		return obj;
8256	},
8257
8258
8259	// Retrieve the text value of an array of DOM nodes
8260	text: function( elem ) {
8261		var node,
8262			ret = "",
8263			i = 0,
8264			nodeType = elem.nodeType;
8265
8266		if ( !nodeType ) {
8267
8268			// If no nodeType, this is expected to be an array
8269			while ( ( node = elem[ i++ ] ) ) {
8270
8271				// Do not traverse comment nodes
8272				ret += jQuery.text( node );
8273			}
8274		}
8275		if ( nodeType === 1 || nodeType === 11 ) {
8276			return elem.textContent;
8277		}
8278		if ( nodeType === 9 ) {
8279			return elem.documentElement.textContent;
8280		}
8281		if ( nodeType === 3 || nodeType === 4 ) {
8282			return elem.nodeValue;
8283		}
8284
8285		// Do not include comment or processing instruction nodes
8286
8287		return ret;
8288	},
8289
8290	// results is for internal usage only
8291	makeArray: function( arr, results ) {
8292		var ret = results || [];
8293
8294		if ( arr != null ) {
8295			if ( isArrayLike( Object( arr ) ) ) {
8296				jQuery.merge( ret,
8297					typeof arr === "string" ?
8298						[ arr ] : arr
8299				);
8300			} else {
8301				push.call( ret, arr );
8302			}
8303		}
8304
8305		return ret;
8306	},
8307
8308	inArray: function( elem, arr, i ) {
8309		return arr == null ? -1 : indexOf.call( arr, elem, i );
8310	},
8311
8312	isXMLDoc: function( elem ) {
8313		var namespace = elem && elem.namespaceURI,
8314			docElem = elem && ( elem.ownerDocument || elem ).documentElement;
8315
8316		// Assume HTML when documentElement doesn't yet exist, such as inside
8317		// document fragments.
8318		return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" );
8319	},
8320
8321	// Support: Android <=4.0 only, PhantomJS 1 only
8322	// push.apply(_, arraylike) throws on ancient WebKit
8323	merge: function( first, second ) {
8324		var len = +second.length,
8325			j = 0,
8326			i = first.length;
8327
8328		for ( ; j < len; j++ ) {
8329			first[ i++ ] = second[ j ];
8330		}
8331
8332		first.length = i;
8333
8334		return first;
8335	},
8336
8337	grep: function( elems, callback, invert ) {
8338		var callbackInverse,
8339			matches = [],
8340			i = 0,
8341			length = elems.length,
8342			callbackExpect = !invert;
8343
8344		// Go through the array, only saving the items
8345		// that pass the validator function
8346		for ( ; i < length; i++ ) {
8347			callbackInverse = !callback( elems[ i ], i );
8348			if ( callbackInverse !== callbackExpect ) {
8349				matches.push( elems[ i ] );
8350			}
8351		}
8352
8353		return matches;
8354	},
8355
8356	// arg is for internal usage only
8357	map: function( elems, callback, arg ) {
8358		var length, value,
8359			i = 0,
8360			ret = [];
8361
8362		// Go through the array, translating each of the items to their new values
8363		if ( isArrayLike( elems ) ) {
8364			length = elems.length;
8365			for ( ; i < length; i++ ) {
8366				value = callback( elems[ i ], i, arg );
8367
8368				if ( value != null ) {
8369					ret.push( value );
8370				}
8371			}
8372
8373		// Go through every key on the object,
8374		} else {
8375			for ( i in elems ) {
8376				value = callback( elems[ i ], i, arg );
8377
8378				if ( value != null ) {
8379					ret.push( value );
8380				}
8381			}
8382		}
8383
8384		// Flatten any nested arrays
8385		return flat( ret );
8386	},
8387
8388	// A global GUID counter for objects
8389	guid: 1,
8390
8391	// jQuery.support is not used in Core but other projects attach their
8392	// properties to it so it needs to exist.
8393	support: support
8394} );
8395
8396if ( typeof Symbol === "function" ) {
8397	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
8398}
8399
8400// Populate the class2type map
8401jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
8402	function( _i, name ) {
8403		class2type[ "[object " + name + "]" ] = name.toLowerCase();
8404	} );
8405
8406function isArrayLike( obj ) {
8407
8408	// Support: real iOS 8.2 only (not reproducible in simulator)
8409	// `in` check used to prevent JIT error (gh-2145)
8410	// hasOwn isn't used here due to false negatives
8411	// regarding Nodelist length in IE
8412	var length = !!obj && "length" in obj && obj.length,
8413		type = toType( obj );
8414
8415	if ( isFunction( obj ) || isWindow( obj ) ) {
8416		return false;
8417	}
8418
8419	return type === "array" || length === 0 ||
8420		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
8421}
8422
8423
8424function nodeName( elem, name ) {
8425
8426	return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
8427
8428}
8429var pop = arr.pop;
8430
8431
8432var sort = arr.sort;
8433
8434
8435var splice = arr.splice;
8436
8437
8438var whitespace = "[\\x20\\t\\r\\n\\f]";
8439
8440
8441var rtrimCSS = new RegExp(
8442	"^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
8443	"g"
8444);
8445
8446
8447
8448
8449// Note: an element does not contain itself
8450jQuery.contains = function( a, b ) {
8451	var bup = b && b.parentNode;
8452
8453	return a === bup || !!( bup && bup.nodeType === 1 && (
8454
8455		// Support: IE 9 - 11+
8456		// IE doesn't have `contains` on SVG.
8457		a.contains ?
8458			a.contains( bup ) :
8459			a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
8460	) );
8461};
8462
8463
8464
8465
8466// CSS string/identifier serialization
8467// https://drafts.csswg.org/cssom/#common-serializing-idioms
8468var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
8469
8470function fcssescape( ch, asCodePoint ) {
8471	if ( asCodePoint ) {
8472
8473		// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
8474		if ( ch === "\0" ) {
8475			return "\uFFFD";
8476		}
8477
8478		// Control characters and (dependent upon position) numbers get escaped as code points
8479		return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
8480	}
8481
8482	// Other potentially-special ASCII characters get backslash-escaped
8483	return "\\" + ch;
8484}
8485
8486jQuery.escapeSelector = function( sel ) {
8487	return ( sel + "" ).replace( rcssescape, fcssescape );
8488};
8489
8490
8491
8492
8493var preferredDoc = document,
8494	pushNative = push;
8495
8496( function() {
8497
8498var i,
8499	Expr,
8500	outermostContext,
8501	sortInput,
8502	hasDuplicate,
8503	push = pushNative,
8504
8505	// Local document vars
8506	document,
8507	documentElement,
8508	documentIsHTML,
8509	rbuggyQSA,
8510	matches,
8511
8512	// Instance-specific data
8513	expando = jQuery.expando,
8514	dirruns = 0,
8515	done = 0,
8516	classCache = createCache(),
8517	tokenCache = createCache(),
8518	compilerCache = createCache(),
8519	nonnativeSelectorCache = createCache(),
8520	sortOrder = function( a, b ) {
8521		if ( a === b ) {
8522			hasDuplicate = true;
8523		}
8524		return 0;
8525	},
8526
8527	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" +
8528		"loop|multiple|open|readonly|required|scoped",
8529
8530	// Regular expressions
8531
8532	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
8533	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
8534		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
8535
8536	// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors
8537	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
8538
8539		// Operator (capture 2)
8540		"*([*^$|!~]?=)" + whitespace +
8541
8542		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
8543		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
8544		whitespace + "*\\]",
8545
8546	pseudos = ":(" + identifier + ")(?:\\((" +
8547
8548		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
8549		// 1. quoted (capture 3; capture 4 or capture 5)
8550		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
8551
8552		// 2. simple (capture 6)
8553		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
8554
8555		// 3. anything else (capture 2)
8556		".*" +
8557		")\\)|)",
8558
8559	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
8560	rwhitespace = new RegExp( whitespace + "+", "g" ),
8561
8562	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
8563	rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" +
8564		whitespace + "*" ),
8565	rdescend = new RegExp( whitespace + "|>" ),
8566
8567	rpseudo = new RegExp( pseudos ),
8568	ridentifier = new RegExp( "^" + identifier + "$" ),
8569
8570	matchExpr = {
8571		ID: new RegExp( "^#(" + identifier + ")" ),
8572		CLASS: new RegExp( "^\\.(" + identifier + ")" ),
8573		TAG: new RegExp( "^(" + identifier + "|[*])" ),
8574		ATTR: new RegExp( "^" + attributes ),
8575		PSEUDO: new RegExp( "^" + pseudos ),
8576		CHILD: new RegExp(
8577			"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
8578				whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
8579				whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
8580		bool: new RegExp( "^(?:" + booleans + ")$", "i" ),
8581
8582		// For use in libraries implementing .is()
8583		// We use this for POS matching in `select`
8584		needsContext: new RegExp( "^" + whitespace +
8585			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
8586			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
8587	},
8588
8589	rinputs = /^(?:input|select|textarea|button)$/i,
8590	rheader = /^h\d$/i,
8591
8592	// Easily-parseable/retrievable ID or TAG or CLASS selectors
8593	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
8594
8595	rsibling = /[+~]/,
8596
8597	// CSS escapes
8598	// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters
8599	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace +
8600		"?|\\\\([^\\r\\n\\f])", "g" ),
8601	funescape = function( escape, nonHex ) {
8602		var high = "0x" + escape.slice( 1 ) - 0x10000;
8603
8604		if ( nonHex ) {
8605
8606			// Strip the backslash prefix from a non-hex escape sequence
8607			return nonHex;
8608		}
8609
8610		// Replace a hexadecimal escape sequence with the encoded Unicode code point
8611		// Support: IE <=11+
8612		// For values outside the Basic Multilingual Plane (BMP), manually construct a
8613		// surrogate pair
8614		return high < 0 ?
8615			String.fromCharCode( high + 0x10000 ) :
8616			String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
8617	},
8618
8619	// Used for iframes; see `setDocument`.
8620	// Support: IE 9 - 11+, Edge 12 - 18+
8621	// Removing the function wrapper causes a "Permission Denied"
8622	// error in IE/Edge.
8623	unloadHandler = function() {
8624		setDocument();
8625	},
8626
8627	inDisabledFieldset = addCombinator(
8628		function( elem ) {
8629			return elem.disabled === true && nodeName( elem, "fieldset" );
8630		},
8631		{ dir: "parentNode", next: "legend" }
8632	);
8633
8634// Support: IE <=9 only
8635// Accessing document.activeElement can throw unexpectedly
8636// https://bugs.jquery.com/ticket/13393
8637function safeActiveElement() {
8638	try {
8639		return document.activeElement;
8640	} catch ( err ) { }
8641}
8642
8643// Optimize for push.apply( _, NodeList )
8644try {
8645	push.apply(
8646		( arr = slice.call( preferredDoc.childNodes ) ),
8647		preferredDoc.childNodes
8648	);
8649
8650	// Support: Android <=4.0
8651	// Detect silently failing push.apply
8652	// eslint-disable-next-line no-unused-expressions
8653	arr[ preferredDoc.childNodes.length ].nodeType;
8654} catch ( e ) {
8655	push = {
8656		apply: function( target, els ) {
8657			pushNative.apply( target, slice.call( els ) );
8658		},
8659		call: function( target ) {
8660			pushNative.apply( target, slice.call( arguments, 1 ) );
8661		}
8662	};
8663}
8664
8665function find( selector, context, results, seed ) {
8666	var m, i, elem, nid, match, groups, newSelector,
8667		newContext = context && context.ownerDocument,
8668
8669		// nodeType defaults to 9, since context defaults to document
8670		nodeType = context ? context.nodeType : 9;
8671
8672	results = results || [];
8673
8674	// Return early from calls with invalid selector or context
8675	if ( typeof selector !== "string" || !selector ||
8676		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
8677
8678		return results;
8679	}
8680
8681	// Try to shortcut find operations (as opposed to filters) in HTML documents
8682	if ( !seed ) {
8683		setDocument( context );
8684		context = context || document;
8685
8686		if ( documentIsHTML ) {
8687
8688			// If the selector is sufficiently simple, try using a "get*By*" DOM method
8689			// (excepting DocumentFragment context, where the methods don't exist)
8690			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
8691
8692				// ID selector
8693				if ( ( m = match[ 1 ] ) ) {
8694
8695					// Document context
8696					if ( nodeType === 9 ) {
8697						if ( ( elem = context.getElementById( m ) ) ) {
8698
8699							// Support: IE 9 only
8700							// getElementById can match elements by name instead of ID
8701							if ( elem.id === m ) {
8702								push.call( results, elem );
8703								return results;
8704							}
8705						} else {
8706							return results;
8707						}
8708
8709					// Element context
8710					} else {
8711
8712						// Support: IE 9 only
8713						// getElementById can match elements by name instead of ID
8714						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
8715							find.contains( context, elem ) &&
8716							elem.id === m ) {
8717
8718							push.call( results, elem );
8719							return results;
8720						}
8721					}
8722
8723				// Type selector
8724				} else if ( match[ 2 ] ) {
8725					push.apply( results, context.getElementsByTagName( selector ) );
8726					return results;
8727
8728				// Class selector
8729				} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {
8730					push.apply( results, context.getElementsByClassName( m ) );
8731					return results;
8732				}
8733			}
8734
8735			// Take advantage of querySelectorAll
8736			if ( !nonnativeSelectorCache[ selector + " " ] &&
8737				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {
8738
8739				newSelector = selector;
8740				newContext = context;
8741
8742				// qSA considers elements outside a scoping root when evaluating child or
8743				// descendant combinators, which is not what we want.
8744				// In such cases, we work around the behavior by prefixing every selector in the
8745				// list with an ID selector referencing the scope context.
8746				// The technique has to be used as well when a leading combinator is used
8747				// as such selectors are not recognized by querySelectorAll.
8748				// Thanks to Andrew Dupont for this technique.
8749				if ( nodeType === 1 &&
8750					( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
8751
8752					// Expand context for sibling selectors
8753					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
8754						context;
8755
8756					// We can use :scope instead of the ID hack if the browser
8757					// supports it & if we're not changing the context.
8758					// Support: IE 11+, Edge 17 - 18+
8759					// IE/Edge sometimes throw a "Permission denied" error when
8760					// strict-comparing two documents; shallow comparisons work.
8761					// eslint-disable-next-line eqeqeq
8762					if ( newContext != context || !support.scope ) {
8763
8764						// Capture the context ID, setting it first if necessary
8765						if ( ( nid = context.getAttribute( "id" ) ) ) {
8766							nid = jQuery.escapeSelector( nid );
8767						} else {
8768							context.setAttribute( "id", ( nid = expando ) );
8769						}
8770					}
8771
8772					// Prefix every selector in the list
8773					groups = tokenize( selector );
8774					i = groups.length;
8775					while ( i-- ) {
8776						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
8777							toSelector( groups[ i ] );
8778					}
8779					newSelector = groups.join( "," );
8780				}
8781
8782				try {
8783					push.apply( results,
8784						newContext.querySelectorAll( newSelector )
8785					);
8786					return results;
8787				} catch ( qsaError ) {
8788					nonnativeSelectorCache( selector, true );
8789				} finally {
8790					if ( nid === expando ) {
8791						context.removeAttribute( "id" );
8792					}
8793				}
8794			}
8795		}
8796	}
8797
8798	// All others
8799	return select( selector.replace( rtrimCSS, "$1" ), context, results, seed );
8800}
8801
8802/**
8803 * Create key-value caches of limited size
8804 * @returns {function(string, object)} Returns the Object data after storing it on itself with
8805 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
8806 *	deleting the oldest entry
8807 */
8808function createCache() {
8809	var keys = [];
8810
8811	function cache( key, value ) {
8812
8813		// Use (key + " ") to avoid collision with native prototype properties
8814		// (see https://github.com/jquery/sizzle/issues/157)
8815		if ( keys.push( key + " " ) > Expr.cacheLength ) {
8816
8817			// Only keep the most recent entries
8818			delete cache[ keys.shift() ];
8819		}
8820		return ( cache[ key + " " ] = value );
8821	}
8822	return cache;
8823}
8824
8825/**
8826 * Mark a function for special use by jQuery selector module
8827 * @param {Function} fn The function to mark
8828 */
8829function markFunction( fn ) {
8830	fn[ expando ] = true;
8831	return fn;
8832}
8833
8834/**
8835 * Support testing using an element
8836 * @param {Function} fn Passed the created element and returns a boolean result
8837 */
8838function assert( fn ) {
8839	var el = document.createElement( "fieldset" );
8840
8841	try {
8842		return !!fn( el );
8843	} catch ( e ) {
8844		return false;
8845	} finally {
8846
8847		// Remove from its parent by default
8848		if ( el.parentNode ) {
8849			el.parentNode.removeChild( el );
8850		}
8851
8852		// release memory in IE
8853		el = null;
8854	}
8855}
8856
8857/**
8858 * Returns a function to use in pseudos for input types
8859 * @param {String} type
8860 */
8861function createInputPseudo( type ) {
8862	return function( elem ) {
8863		return nodeName( elem, "input" ) && elem.type === type;
8864	};
8865}
8866
8867/**
8868 * Returns a function to use in pseudos for buttons
8869 * @param {String} type
8870 */
8871function createButtonPseudo( type ) {
8872	return function( elem ) {
8873		return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) &&
8874			elem.type === type;
8875	};
8876}
8877
8878/**
8879 * Returns a function to use in pseudos for :enabled/:disabled
8880 * @param {Boolean} disabled true for :disabled; false for :enabled
8881 */
8882function createDisabledPseudo( disabled ) {
8883
8884	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
8885	return function( elem ) {
8886
8887		// Only certain elements can match :enabled or :disabled
8888		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
8889		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
8890		if ( "form" in elem ) {
8891
8892			// Check for inherited disabledness on relevant non-disabled elements:
8893			// * listed form-associated elements in a disabled fieldset
8894			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
8895			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
8896			// * option elements in a disabled optgroup
8897			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
8898			// All such elements have a "form" property.
8899			if ( elem.parentNode && elem.disabled === false ) {
8900
8901				// Option elements defer to a parent optgroup if present
8902				if ( "label" in elem ) {
8903					if ( "label" in elem.parentNode ) {
8904						return elem.parentNode.disabled === disabled;
8905					} else {
8906						return elem.disabled === disabled;
8907					}
8908				}
8909
8910				// Support: IE 6 - 11+
8911				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
8912				return elem.isDisabled === disabled ||
8913
8914					// Where there is no isDisabled, check manually
8915					elem.isDisabled !== !disabled &&
8916						inDisabledFieldset( elem ) === disabled;
8917			}
8918
8919			return elem.disabled === disabled;
8920
8921		// Try to winnow out elements that can't be disabled before trusting the disabled property.
8922		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
8923		// even exist on them, let alone have a boolean value.
8924		} else if ( "label" in elem ) {
8925			return elem.disabled === disabled;
8926		}
8927
8928		// Remaining elements are neither :enabled nor :disabled
8929		return false;
8930	};
8931}
8932
8933/**
8934 * Returns a function to use in pseudos for positionals
8935 * @param {Function} fn
8936 */
8937function createPositionalPseudo( fn ) {
8938	return markFunction( function( argument ) {
8939		argument = +argument;
8940		return markFunction( function( seed, matches ) {
8941			var j,
8942				matchIndexes = fn( [], seed.length, argument ),
8943				i = matchIndexes.length;
8944
8945			// Match elements found at the specified indexes
8946			while ( i-- ) {
8947				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
8948					seed[ j ] = !( matches[ j ] = seed[ j ] );
8949				}
8950			}
8951		} );
8952	} );
8953}
8954
8955/**
8956 * Checks a node for validity as a jQuery selector context
8957 * @param {Element|Object=} context
8958 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
8959 */
8960function testContext( context ) {
8961	return context && typeof context.getElementsByTagName !== "undefined" && context;
8962}
8963
8964/**
8965 * Sets document-related variables once based on the current document
8966 * @param {Element|Object} [node] An element or document object to use to set the document
8967 * @returns {Object} Returns the current document
8968 */
8969function setDocument( node ) {
8970	var subWindow,
8971		doc = node ? node.ownerDocument || node : preferredDoc;
8972
8973	// Return early if doc is invalid or already selected
8974	// Support: IE 11+, Edge 17 - 18+
8975	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
8976	// two documents; shallow comparisons work.
8977	// eslint-disable-next-line eqeqeq
8978	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
8979		return document;
8980	}
8981
8982	// Update global variables
8983	document = doc;
8984	documentElement = document.documentElement;
8985	documentIsHTML = !jQuery.isXMLDoc( document );
8986
8987	// Support: iOS 7 only, IE 9 - 11+
8988	// Older browsers didn't support unprefixed `matches`.
8989	matches = documentElement.matches ||
8990		documentElement.webkitMatchesSelector ||
8991		documentElement.msMatchesSelector;
8992
8993	// Support: IE 9 - 11+, Edge 12 - 18+
8994	// Accessing iframe documents after unload throws "permission denied" errors
8995	// (see trac-13936).
8996	// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,
8997	// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.
8998	if ( documentElement.msMatchesSelector &&
8999
9000		// Support: IE 11+, Edge 17 - 18+
9001		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9002		// two documents; shallow comparisons work.
9003		// eslint-disable-next-line eqeqeq
9004		preferredDoc != document &&
9005		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
9006
9007		// Support: IE 9 - 11+, Edge 12 - 18+
9008		subWindow.addEventListener( "unload", unloadHandler );
9009	}
9010
9011	// Support: IE <10
9012	// Check if getElementById returns elements by name
9013	// The broken getElementById methods don't pick up programmatically-set names,
9014	// so use a roundabout getElementsByName test
9015	support.getById = assert( function( el ) {
9016		documentElement.appendChild( el ).id = jQuery.expando;
9017		return !document.getElementsByName ||
9018			!document.getElementsByName( jQuery.expando ).length;
9019	} );
9020
9021	// Support: IE 9 only
9022	// Check to see if it's possible to do matchesSelector
9023	// on a disconnected node.
9024	support.disconnectedMatch = assert( function( el ) {
9025		return matches.call( el, "*" );
9026	} );
9027
9028	// Support: IE 9 - 11+, Edge 12 - 18+
9029	// IE/Edge don't support the :scope pseudo-class.
9030	support.scope = assert( function() {
9031		return document.querySelectorAll( ":scope" );
9032	} );
9033
9034	// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only
9035	// Make sure the `:has()` argument is parsed unforgivingly.
9036	// We include `*` in the test to detect buggy implementations that are
9037	// _selectively_ forgiving (specifically when the list includes at least
9038	// one valid selector).
9039	// Note that we treat complete lack of support for `:has()` as if it were
9040	// spec-compliant support, which is fine because use of `:has()` in such
9041	// environments will fail in the qSA path and fall back to jQuery traversal
9042	// anyway.
9043	support.cssHas = assert( function() {
9044		try {
9045			document.querySelector( ":has(*,:jqfake)" );
9046			return false;
9047		} catch ( e ) {
9048			return true;
9049		}
9050	} );
9051
9052	// ID filter and find
9053	if ( support.getById ) {
9054		Expr.filter.ID = function( id ) {
9055			var attrId = id.replace( runescape, funescape );
9056			return function( elem ) {
9057				return elem.getAttribute( "id" ) === attrId;
9058			};
9059		};
9060		Expr.find.ID = function( id, context ) {
9061			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
9062				var elem = context.getElementById( id );
9063				return elem ? [ elem ] : [];
9064			}
9065		};
9066	} else {
9067		Expr.filter.ID =  function( id ) {
9068			var attrId = id.replace( runescape, funescape );
9069			return function( elem ) {
9070				var node = typeof elem.getAttributeNode !== "undefined" &&
9071					elem.getAttributeNode( "id" );
9072				return node && node.value === attrId;
9073			};
9074		};
9075
9076		// Support: IE 6 - 7 only
9077		// getElementById is not reliable as a find shortcut
9078		Expr.find.ID = function( id, context ) {
9079			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
9080				var node, i, elems,
9081					elem = context.getElementById( id );
9082
9083				if ( elem ) {
9084
9085					// Verify the id attribute
9086					node = elem.getAttributeNode( "id" );
9087					if ( node && node.value === id ) {
9088						return [ elem ];
9089					}
9090
9091					// Fall back on getElementsByName
9092					elems = context.getElementsByName( id );
9093					i = 0;
9094					while ( ( elem = elems[ i++ ] ) ) {
9095						node = elem.getAttributeNode( "id" );
9096						if ( node && node.value === id ) {
9097							return [ elem ];
9098						}
9099					}
9100				}
9101
9102				return [];
9103			}
9104		};
9105	}
9106
9107	// Tag
9108	Expr.find.TAG = function( tag, context ) {
9109		if ( typeof context.getElementsByTagName !== "undefined" ) {
9110			return context.getElementsByTagName( tag );
9111
9112		// DocumentFragment nodes don't have gEBTN
9113		} else {
9114			return context.querySelectorAll( tag );
9115		}
9116	};
9117
9118	// Class
9119	Expr.find.CLASS = function( className, context ) {
9120		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
9121			return context.getElementsByClassName( className );
9122		}
9123	};
9124
9125	/* QSA/matchesSelector
9126	---------------------------------------------------------------------- */
9127
9128	// QSA and matchesSelector support
9129
9130	rbuggyQSA = [];
9131
9132	// Build QSA regex
9133	// Regex strategy adopted from Diego Perini
9134	assert( function( el ) {
9135
9136		var input;
9137
9138		documentElement.appendChild( el ).innerHTML =
9139			"<a id='" + expando + "' href='' disabled='disabled'></a>" +
9140			"<select id='" + expando + "-\r\\' disabled='disabled'>" +
9141			"<option selected=''></option></select>";
9142
9143		// Support: iOS <=7 - 8 only
9144		// Boolean attributes and "value" are not treated correctly in some XML documents
9145		if ( !el.querySelectorAll( "[selected]" ).length ) {
9146			rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
9147		}
9148
9149		// Support: iOS <=7 - 8 only
9150		if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
9151			rbuggyQSA.push( "~=" );
9152		}
9153
9154		// Support: iOS 8 only
9155		// https://bugs.webkit.org/show_bug.cgi?id=136851
9156		// In-page `selector#id sibling-combinator selector` fails
9157		if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
9158			rbuggyQSA.push( ".#.+[+~]" );
9159		}
9160
9161		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
9162		// In some of the document kinds, these selectors wouldn't work natively.
9163		// This is probably OK but for backwards compatibility we want to maintain
9164		// handling them through jQuery traversal in jQuery 3.x.
9165		if ( !el.querySelectorAll( ":checked" ).length ) {
9166			rbuggyQSA.push( ":checked" );
9167		}
9168
9169		// Support: Windows 8 Native Apps
9170		// The type and name attributes are restricted during .innerHTML assignment
9171		input = document.createElement( "input" );
9172		input.setAttribute( "type", "hidden" );
9173		el.appendChild( input ).setAttribute( "name", "D" );
9174
9175		// Support: IE 9 - 11+
9176		// IE's :disabled selector does not pick up the children of disabled fieldsets
9177		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
9178		// In some of the document kinds, these selectors wouldn't work natively.
9179		// This is probably OK but for backwards compatibility we want to maintain
9180		// handling them through jQuery traversal in jQuery 3.x.
9181		documentElement.appendChild( el ).disabled = true;
9182		if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
9183			rbuggyQSA.push( ":enabled", ":disabled" );
9184		}
9185
9186		// Support: IE 11+, Edge 15 - 18+
9187		// IE 11/Edge don't find elements on a `[name='']` query in some cases.
9188		// Adding a temporary attribute to the document before the selection works
9189		// around the issue.
9190		// Interestingly, IE 10 & older don't seem to have the issue.
9191		input = document.createElement( "input" );
9192		input.setAttribute( "name", "" );
9193		el.appendChild( input );
9194		if ( !el.querySelectorAll( "[name='']" ).length ) {
9195			rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
9196				whitespace + "*(?:''|\"\")" );
9197		}
9198	} );
9199
9200	if ( !support.cssHas ) {
9201
9202		// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
9203		// Our regular `try-catch` mechanism fails to detect natively-unsupported
9204		// pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)
9205		// in browsers that parse the `:has()` argument as a forgiving selector list.
9206		// https://drafts.csswg.org/selectors/#relational now requires the argument
9207		// to be parsed unforgivingly, but browsers have not yet fully adjusted.
9208		rbuggyQSA.push( ":has" );
9209	}
9210
9211	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
9212
9213	/* Sorting
9214	---------------------------------------------------------------------- */
9215
9216	// Document order sorting
9217	sortOrder = function( a, b ) {
9218
9219		// Flag for duplicate removal
9220		if ( a === b ) {
9221			hasDuplicate = true;
9222			return 0;
9223		}
9224
9225		// Sort on method existence if only one input has compareDocumentPosition
9226		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
9227		if ( compare ) {
9228			return compare;
9229		}
9230
9231		// Calculate position if both inputs belong to the same document
9232		// Support: IE 11+, Edge 17 - 18+
9233		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9234		// two documents; shallow comparisons work.
9235		// eslint-disable-next-line eqeqeq
9236		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
9237			a.compareDocumentPosition( b ) :
9238
9239			// Otherwise we know they are disconnected
9240			1;
9241
9242		// Disconnected nodes
9243		if ( compare & 1 ||
9244			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
9245
9246			// Choose the first element that is related to our preferred document
9247			// Support: IE 11+, Edge 17 - 18+
9248			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9249			// two documents; shallow comparisons work.
9250			// eslint-disable-next-line eqeqeq
9251			if ( a === document || a.ownerDocument == preferredDoc &&
9252				find.contains( preferredDoc, a ) ) {
9253				return -1;
9254			}
9255
9256			// Support: IE 11+, Edge 17 - 18+
9257			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9258			// two documents; shallow comparisons work.
9259			// eslint-disable-next-line eqeqeq
9260			if ( b === document || b.ownerDocument == preferredDoc &&
9261				find.contains( preferredDoc, b ) ) {
9262				return 1;
9263			}
9264
9265			// Maintain original order
9266			return sortInput ?
9267				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
9268				0;
9269		}
9270
9271		return compare & 4 ? -1 : 1;
9272	};
9273
9274	return document;
9275}
9276
9277find.matches = function( expr, elements ) {
9278	return find( expr, null, null, elements );
9279};
9280
9281find.matchesSelector = function( elem, expr ) {
9282	setDocument( elem );
9283
9284	if ( documentIsHTML &&
9285		!nonnativeSelectorCache[ expr + " " ] &&
9286		( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
9287
9288		try {
9289			var ret = matches.call( elem, expr );
9290
9291			// IE 9's matchesSelector returns false on disconnected nodes
9292			if ( ret || support.disconnectedMatch ||
9293
9294					// As well, disconnected nodes are said to be in a document
9295					// fragment in IE 9
9296					elem.document && elem.document.nodeType !== 11 ) {
9297				return ret;
9298			}
9299		} catch ( e ) {
9300			nonnativeSelectorCache( expr, true );
9301		}
9302	}
9303
9304	return find( expr, document, null, [ elem ] ).length > 0;
9305};
9306
9307find.contains = function( context, elem ) {
9308
9309	// Set document vars if needed
9310	// Support: IE 11+, Edge 17 - 18+
9311	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9312	// two documents; shallow comparisons work.
9313	// eslint-disable-next-line eqeqeq
9314	if ( ( context.ownerDocument || context ) != document ) {
9315		setDocument( context );
9316	}
9317	return jQuery.contains( context, elem );
9318};
9319
9320
9321find.attr = function( elem, name ) {
9322
9323	// Set document vars if needed
9324	// Support: IE 11+, Edge 17 - 18+
9325	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
9326	// two documents; shallow comparisons work.
9327	// eslint-disable-next-line eqeqeq
9328	if ( ( elem.ownerDocument || elem ) != document ) {
9329		setDocument( elem );
9330	}
9331
9332	var fn = Expr.attrHandle[ name.toLowerCase() ],
9333
9334		// Don't get fooled by Object.prototype properties (see trac-13807)
9335		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
9336			fn( elem, name, !documentIsHTML ) :
9337			undefined;
9338
9339	if ( val !== undefined ) {
9340		return val;
9341	}
9342
9343	return elem.getAttribute( name );
9344};
9345
9346find.error = function( msg ) {
9347	throw new Error( "Syntax error, unrecognized expression: " + msg );
9348};
9349
9350/**
9351 * Document sorting and removing duplicates
9352 * @param {ArrayLike} results
9353 */
9354jQuery.uniqueSort = function( results ) {
9355	var elem,
9356		duplicates = [],
9357		j = 0,
9358		i = 0;
9359
9360	// Unless we *know* we can detect duplicates, assume their presence
9361	//
9362	// Support: Android <=4.0+
9363	// Testing for detecting duplicates is unpredictable so instead assume we can't
9364	// depend on duplicate detection in all browsers without a stable sort.
9365	hasDuplicate = !support.sortStable;
9366	sortInput = !support.sortStable && slice.call( results, 0 );
9367	sort.call( results, sortOrder );
9368
9369	if ( hasDuplicate ) {
9370		while ( ( elem = results[ i++ ] ) ) {
9371			if ( elem === results[ i ] ) {
9372				j = duplicates.push( i );
9373			}
9374		}
9375		while ( j-- ) {
9376			splice.call( results, duplicates[ j ], 1 );
9377		}
9378	}
9379
9380	// Clear input after sorting to release objects
9381	// See https://github.com/jquery/sizzle/pull/225
9382	sortInput = null;
9383
9384	return results;
9385};
9386
9387jQuery.fn.uniqueSort = function() {
9388	return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );
9389};
9390
9391Expr = jQuery.expr = {
9392
9393	// Can be adjusted by the user
9394	cacheLength: 50,
9395
9396	createPseudo: markFunction,
9397
9398	match: matchExpr,
9399
9400	attrHandle: {},
9401
9402	find: {},
9403
9404	relative: {
9405		">": { dir: "parentNode", first: true },
9406		" ": { dir: "parentNode" },
9407		"+": { dir: "previousSibling", first: true },
9408		"~": { dir: "previousSibling" }
9409	},
9410
9411	preFilter: {
9412		ATTR: function( match ) {
9413			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
9414
9415			// Move the given value to match[3] whether quoted or unquoted
9416			match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" )
9417				.replace( runescape, funescape );
9418
9419			if ( match[ 2 ] === "~=" ) {
9420				match[ 3 ] = " " + match[ 3 ] + " ";
9421			}
9422
9423			return match.slice( 0, 4 );
9424		},
9425
9426		CHILD: function( match ) {
9427
9428			/* matches from matchExpr["CHILD"]
9429				1 type (only|nth|...)
9430				2 what (child|of-type)
9431				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
9432				4 xn-component of xn+y argument ([+-]?\d*n|)
9433				5 sign of xn-component
9434				6 x of xn-component
9435				7 sign of y-component
9436				8 y of y-component
9437			*/
9438			match[ 1 ] = match[ 1 ].toLowerCase();
9439
9440			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
9441
9442				// nth-* requires argument
9443				if ( !match[ 3 ] ) {
9444					find.error( match[ 0 ] );
9445				}
9446
9447				// numeric x and y parameters for Expr.filter.CHILD
9448				// remember that false/true cast respectively to 0/1
9449				match[ 4 ] = +( match[ 4 ] ?
9450					match[ 5 ] + ( match[ 6 ] || 1 ) :
9451					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" )
9452				);
9453				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
9454
9455			// other types prohibit arguments
9456			} else if ( match[ 3 ] ) {
9457				find.error( match[ 0 ] );
9458			}
9459
9460			return match;
9461		},
9462
9463		PSEUDO: function( match ) {
9464			var excess,
9465				unquoted = !match[ 6 ] && match[ 2 ];
9466
9467			if ( matchExpr.CHILD.test( match[ 0 ] ) ) {
9468				return null;
9469			}
9470
9471			// Accept quoted arguments as-is
9472			if ( match[ 3 ] ) {
9473				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
9474
9475			// Strip excess characters from unquoted arguments
9476			} else if ( unquoted && rpseudo.test( unquoted ) &&
9477
9478				// Get excess from tokenize (recursively)
9479				( excess = tokenize( unquoted, true ) ) &&
9480
9481				// advance to the next closing parenthesis
9482				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
9483
9484				// excess is a negative index
9485				match[ 0 ] = match[ 0 ].slice( 0, excess );
9486				match[ 2 ] = unquoted.slice( 0, excess );
9487			}
9488
9489			// Return only captures needed by the pseudo filter method (type and argument)
9490			return match.slice( 0, 3 );
9491		}
9492	},
9493
9494	filter: {
9495
9496		TAG: function( nodeNameSelector ) {
9497			var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
9498			return nodeNameSelector === "*" ?
9499				function() {
9500					return true;
9501				} :
9502				function( elem ) {
9503					return nodeName( elem, expectedNodeName );
9504				};
9505		},
9506
9507		CLASS: function( className ) {
9508			var pattern = classCache[ className + " " ];
9509
9510			return pattern ||
9511				( pattern = new RegExp( "(^|" + whitespace + ")" + className +
9512					"(" + whitespace + "|$)" ) ) &&
9513				classCache( className, function( elem ) {
9514					return pattern.test(
9515						typeof elem.className === "string" && elem.className ||
9516							typeof elem.getAttribute !== "undefined" &&
9517								elem.getAttribute( "class" ) ||
9518							""
9519					);
9520				} );
9521		},
9522
9523		ATTR: function( name, operator, check ) {
9524			return function( elem ) {
9525				var result = find.attr( elem, name );
9526
9527				if ( result == null ) {
9528					return operator === "!=";
9529				}
9530				if ( !operator ) {
9531					return true;
9532				}
9533
9534				result += "";
9535
9536				if ( operator === "=" ) {
9537					return result === check;
9538				}
9539				if ( operator === "!=" ) {
9540					return result !== check;
9541				}
9542				if ( operator === "^=" ) {
9543					return check && result.indexOf( check ) === 0;
9544				}
9545				if ( operator === "*=" ) {
9546					return check && result.indexOf( check ) > -1;
9547				}
9548				if ( operator === "$=" ) {
9549					return check && result.slice( -check.length ) === check;
9550				}
9551				if ( operator === "~=" ) {
9552					return ( " " + result.replace( rwhitespace, " " ) + " " )
9553						.indexOf( check ) > -1;
9554				}
9555				if ( operator === "|=" ) {
9556					return result === check || result.slice( 0, check.length + 1 ) === check + "-";
9557				}
9558
9559				return false;
9560			};
9561		},
9562
9563		CHILD: function( type, what, _argument, first, last ) {
9564			var simple = type.slice( 0, 3 ) !== "nth",
9565				forward = type.slice( -4 ) !== "last",
9566				ofType = what === "of-type";
9567
9568			return first === 1 && last === 0 ?
9569
9570				// Shortcut for :nth-*(n)
9571				function( elem ) {
9572					return !!elem.parentNode;
9573				} :
9574
9575				function( elem, _context, xml ) {
9576					var cache, outerCache, node, nodeIndex, start,
9577						dir = simple !== forward ? "nextSibling" : "previousSibling",
9578						parent = elem.parentNode,
9579						name = ofType && elem.nodeName.toLowerCase(),
9580						useCache = !xml && !ofType,
9581						diff = false;
9582
9583					if ( parent ) {
9584
9585						// :(first|last|only)-(child|of-type)
9586						if ( simple ) {
9587							while ( dir ) {
9588								node = elem;
9589								while ( ( node = node[ dir ] ) ) {
9590									if ( ofType ?
9591										nodeName( node, name ) :
9592										node.nodeType === 1 ) {
9593
9594										return false;
9595									}
9596								}
9597
9598								// Reverse direction for :only-* (if we haven't yet done so)
9599								start = dir = type === "only" && !start && "nextSibling";
9600							}
9601							return true;
9602						}
9603
9604						start = [ forward ? parent.firstChild : parent.lastChild ];
9605
9606						// non-xml :nth-child(...) stores cache data on `parent`
9607						if ( forward && useCache ) {
9608
9609							// Seek `elem` from a previously-cached index
9610							outerCache = parent[ expando ] || ( parent[ expando ] = {} );
9611							cache = outerCache[ type ] || [];
9612							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
9613							diff = nodeIndex && cache[ 2 ];
9614							node = nodeIndex && parent.childNodes[ nodeIndex ];
9615
9616							while ( ( node = ++nodeIndex && node && node[ dir ] ||
9617
9618								// Fallback to seeking `elem` from the start
9619								( diff = nodeIndex = 0 ) || start.pop() ) ) {
9620
9621								// When found, cache indexes on `parent` and break
9622								if ( node.nodeType === 1 && ++diff && node === elem ) {
9623									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
9624									break;
9625								}
9626							}
9627
9628						} else {
9629
9630							// Use previously-cached element index if available
9631							if ( useCache ) {
9632								outerCache = elem[ expando ] || ( elem[ expando ] = {} );
9633								cache = outerCache[ type ] || [];
9634								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
9635								diff = nodeIndex;
9636							}
9637
9638							// xml :nth-child(...)
9639							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
9640							if ( diff === false ) {
9641
9642								// Use the same loop as above to seek `elem` from the start
9643								while ( ( node = ++nodeIndex && node && node[ dir ] ||
9644									( diff = nodeIndex = 0 ) || start.pop() ) ) {
9645
9646									if ( ( ofType ?
9647										nodeName( node, name ) :
9648										node.nodeType === 1 ) &&
9649										++diff ) {
9650
9651										// Cache the index of each encountered element
9652										if ( useCache ) {
9653											outerCache = node[ expando ] ||
9654												( node[ expando ] = {} );
9655											outerCache[ type ] = [ dirruns, diff ];
9656										}
9657
9658										if ( node === elem ) {
9659											break;
9660										}
9661									}
9662								}
9663							}
9664						}
9665
9666						// Incorporate the offset, then check against cycle size
9667						diff -= last;
9668						return diff === first || ( diff % first === 0 && diff / first >= 0 );
9669					}
9670				};
9671		},
9672
9673		PSEUDO: function( pseudo, argument ) {
9674
9675			// pseudo-class names are case-insensitive
9676			// https://www.w3.org/TR/selectors/#pseudo-classes
9677			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
9678			// Remember that setFilters inherits from pseudos
9679			var args,
9680				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
9681					find.error( "unsupported pseudo: " + pseudo );
9682
9683			// The user may use createPseudo to indicate that
9684			// arguments are needed to create the filter function
9685			// just as jQuery does
9686			if ( fn[ expando ] ) {
9687				return fn( argument );
9688			}
9689
9690			// But maintain support for old signatures
9691			if ( fn.length > 1 ) {
9692				args = [ pseudo, pseudo, "", argument ];
9693				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
9694					markFunction( function( seed, matches ) {
9695						var idx,
9696							matched = fn( seed, argument ),
9697							i = matched.length;
9698						while ( i-- ) {
9699							idx = indexOf.call( seed, matched[ i ] );
9700							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
9701						}
9702					} ) :
9703					function( elem ) {
9704						return fn( elem, 0, args );
9705					};
9706			}
9707
9708			return fn;
9709		}
9710	},
9711
9712	pseudos: {
9713
9714		// Potentially complex pseudos
9715		not: markFunction( function( selector ) {
9716
9717			// Trim the selector passed to compile
9718			// to avoid treating leading and trailing
9719			// spaces as combinators
9720			var input = [],
9721				results = [],
9722				matcher = compile( selector.replace( rtrimCSS, "$1" ) );
9723
9724			return matcher[ expando ] ?
9725				markFunction( function( seed, matches, _context, xml ) {
9726					var elem,
9727						unmatched = matcher( seed, null, xml, [] ),
9728						i = seed.length;
9729
9730					// Match elements unmatched by `matcher`
9731					while ( i-- ) {
9732						if ( ( elem = unmatched[ i ] ) ) {
9733							seed[ i ] = !( matches[ i ] = elem );
9734						}
9735					}
9736				} ) :
9737				function( elem, _context, xml ) {
9738					input[ 0 ] = elem;
9739					matcher( input, null, xml, results );
9740
9741					// Don't keep the element
9742					// (see https://github.com/jquery/sizzle/issues/299)
9743					input[ 0 ] = null;
9744					return !results.pop();
9745				};
9746		} ),
9747
9748		has: markFunction( function( selector ) {
9749			return function( elem ) {
9750				return find( selector, elem ).length > 0;
9751			};
9752		} ),
9753
9754		contains: markFunction( function( text ) {
9755			text = text.replace( runescape, funescape );
9756			return function( elem ) {
9757				return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;
9758			};
9759		} ),
9760
9761		// "Whether an element is represented by a :lang() selector
9762		// is based solely on the element's language value
9763		// being equal to the identifier C,
9764		// or beginning with the identifier C immediately followed by "-".
9765		// The matching of C against the element's language value is performed case-insensitively.
9766		// The identifier C does not have to be a valid language name."
9767		// https://www.w3.org/TR/selectors/#lang-pseudo
9768		lang: markFunction( function( lang ) {
9769
9770			// lang value must be a valid identifier
9771			if ( !ridentifier.test( lang || "" ) ) {
9772				find.error( "unsupported lang: " + lang );
9773			}
9774			lang = lang.replace( runescape, funescape ).toLowerCase();
9775			return function( elem ) {
9776				var elemLang;
9777				do {
9778					if ( ( elemLang = documentIsHTML ?
9779						elem.lang :
9780						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
9781
9782						elemLang = elemLang.toLowerCase();
9783						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
9784					}
9785				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
9786				return false;
9787			};
9788		} ),
9789
9790		// Miscellaneous
9791		target: function( elem ) {
9792			var hash = window.location && window.location.hash;
9793			return hash && hash.slice( 1 ) === elem.id;
9794		},
9795
9796		root: function( elem ) {
9797			return elem === documentElement;
9798		},
9799
9800		focus: function( elem ) {
9801			return elem === safeActiveElement() &&
9802				document.hasFocus() &&
9803				!!( elem.type || elem.href || ~elem.tabIndex );
9804		},
9805
9806		// Boolean properties
9807		enabled: createDisabledPseudo( false ),
9808		disabled: createDisabledPseudo( true ),
9809
9810		checked: function( elem ) {
9811
9812			// In CSS3, :checked should return both checked and selected elements
9813			// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
9814			return ( nodeName( elem, "input" ) && !!elem.checked ) ||
9815				( nodeName( elem, "option" ) && !!elem.selected );
9816		},
9817
9818		selected: function( elem ) {
9819
9820			// Support: IE <=11+
9821			// Accessing the selectedIndex property
9822			// forces the browser to treat the default option as
9823			// selected when in an optgroup.
9824			if ( elem.parentNode ) {
9825				// eslint-disable-next-line no-unused-expressions
9826				elem.parentNode.selectedIndex;
9827			}
9828
9829			return elem.selected === true;
9830		},
9831
9832		// Contents
9833		empty: function( elem ) {
9834
9835			// https://www.w3.org/TR/selectors/#empty-pseudo
9836			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
9837			//   but not by others (comment: 8; processing instruction: 7; etc.)
9838			// nodeType < 6 works because attributes (2) do not appear as children
9839			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
9840				if ( elem.nodeType < 6 ) {
9841					return false;
9842				}
9843			}
9844			return true;
9845		},
9846
9847		parent: function( elem ) {
9848			return !Expr.pseudos.empty( elem );
9849		},
9850
9851		// Element/input types
9852		header: function( elem ) {
9853			return rheader.test( elem.nodeName );
9854		},
9855
9856		input: function( elem ) {
9857			return rinputs.test( elem.nodeName );
9858		},
9859
9860		button: function( elem ) {
9861			return nodeName( elem, "input" ) && elem.type === "button" ||
9862				nodeName( elem, "button" );
9863		},
9864
9865		text: function( elem ) {
9866			var attr;
9867			return nodeName( elem, "input" ) && elem.type === "text" &&
9868
9869				// Support: IE <10 only
9870				// New HTML5 attribute values (e.g., "search") appear
9871				// with elem.type === "text"
9872				( ( attr = elem.getAttribute( "type" ) ) == null ||
9873					attr.toLowerCase() === "text" );
9874		},
9875
9876		// Position-in-collection
9877		first: createPositionalPseudo( function() {
9878			return [ 0 ];
9879		} ),
9880
9881		last: createPositionalPseudo( function( _matchIndexes, length ) {
9882			return [ length - 1 ];
9883		} ),
9884
9885		eq: createPositionalPseudo( function( _matchIndexes, length, argument ) {
9886			return [ argument < 0 ? argument + length : argument ];
9887		} ),
9888
9889		even: createPositionalPseudo( function( matchIndexes, length ) {
9890			var i = 0;
9891			for ( ; i < length; i += 2 ) {
9892				matchIndexes.push( i );
9893			}
9894			return matchIndexes;
9895		} ),
9896
9897		odd: createPositionalPseudo( function( matchIndexes, length ) {
9898			var i = 1;
9899			for ( ; i < length; i += 2 ) {
9900				matchIndexes.push( i );
9901			}
9902			return matchIndexes;
9903		} ),
9904
9905		lt: createPositionalPseudo( function( matchIndexes, length, argument ) {
9906			var i;
9907
9908			if ( argument < 0 ) {
9909				i = argument + length;
9910			} else if ( argument > length ) {
9911				i = length;
9912			} else {
9913				i = argument;
9914			}
9915
9916			for ( ; --i >= 0; ) {
9917				matchIndexes.push( i );
9918			}
9919			return matchIndexes;
9920		} ),
9921
9922		gt: createPositionalPseudo( function( matchIndexes, length, argument ) {
9923			var i = argument < 0 ? argument + length : argument;
9924			for ( ; ++i < length; ) {
9925				matchIndexes.push( i );
9926			}
9927			return matchIndexes;
9928		} )
9929	}
9930};
9931
9932Expr.pseudos.nth = Expr.pseudos.eq;
9933
9934// Add button/input type pseudos
9935for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
9936	Expr.pseudos[ i ] = createInputPseudo( i );
9937}
9938for ( i in { submit: true, reset: true } ) {
9939	Expr.pseudos[ i ] = createButtonPseudo( i );
9940}
9941
9942// Easy API for creating new setFilters
9943function setFilters() {}
9944setFilters.prototype = Expr.filters = Expr.pseudos;
9945Expr.setFilters = new setFilters();
9946
9947function tokenize( selector, parseOnly ) {
9948	var matched, match, tokens, type,
9949		soFar, groups, preFilters,
9950		cached = tokenCache[ selector + " " ];
9951
9952	if ( cached ) {
9953		return parseOnly ? 0 : cached.slice( 0 );
9954	}
9955
9956	soFar = selector;
9957	groups = [];
9958	preFilters = Expr.preFilter;
9959
9960	while ( soFar ) {
9961
9962		// Comma and first run
9963		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
9964			if ( match ) {
9965
9966				// Don't consume trailing commas as valid
9967				soFar = soFar.slice( match[ 0 ].length ) || soFar;
9968			}
9969			groups.push( ( tokens = [] ) );
9970		}
9971
9972		matched = false;
9973
9974		// Combinators
9975		if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
9976			matched = match.shift();
9977			tokens.push( {
9978				value: matched,
9979
9980				// Cast descendant combinators to space
9981				type: match[ 0 ].replace( rtrimCSS, " " )
9982			} );
9983			soFar = soFar.slice( matched.length );
9984		}
9985
9986		// Filters
9987		for ( type in Expr.filter ) {
9988			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
9989				( match = preFilters[ type ]( match ) ) ) ) {
9990				matched = match.shift();
9991				tokens.push( {
9992					value: matched,
9993					type: type,
9994					matches: match
9995				} );
9996				soFar = soFar.slice( matched.length );
9997			}
9998		}
9999
10000		if ( !matched ) {
10001			break;
10002		}
10003	}
10004
10005	// Return the length of the invalid excess
10006	// if we're just parsing
10007	// Otherwise, throw an error or return tokens
10008	if ( parseOnly ) {
10009		return soFar.length;
10010	}
10011
10012	return soFar ?
10013		find.error( selector ) :
10014
10015		// Cache the tokens
10016		tokenCache( selector, groups ).slice( 0 );
10017}
10018
10019function toSelector( tokens ) {
10020	var i = 0,
10021		len = tokens.length,
10022		selector = "";
10023	for ( ; i < len; i++ ) {
10024		selector += tokens[ i ].value;
10025	}
10026	return selector;
10027}
10028
10029function addCombinator( matcher, combinator, base ) {
10030	var dir = combinator.dir,
10031		skip = combinator.next,
10032		key = skip || dir,
10033		checkNonElements = base && key === "parentNode",
10034		doneName = done++;
10035
10036	return combinator.first ?
10037
10038		// Check against closest ancestor/preceding element
10039		function( elem, context, xml ) {
10040			while ( ( elem = elem[ dir ] ) ) {
10041				if ( elem.nodeType === 1 || checkNonElements ) {
10042					return matcher( elem, context, xml );
10043				}
10044			}
10045			return false;
10046		} :
10047
10048		// Check against all ancestor/preceding elements
10049		function( elem, context, xml ) {
10050			var oldCache, outerCache,
10051				newCache = [ dirruns, doneName ];
10052
10053			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
10054			if ( xml ) {
10055				while ( ( elem = elem[ dir ] ) ) {
10056					if ( elem.nodeType === 1 || checkNonElements ) {
10057						if ( matcher( elem, context, xml ) ) {
10058							return true;
10059						}
10060					}
10061				}
10062			} else {
10063				while ( ( elem = elem[ dir ] ) ) {
10064					if ( elem.nodeType === 1 || checkNonElements ) {
10065						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
10066
10067						if ( skip && nodeName( elem, skip ) ) {
10068							elem = elem[ dir ] || elem;
10069						} else if ( ( oldCache = outerCache[ key ] ) &&
10070							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
10071
10072							// Assign to newCache so results back-propagate to previous elements
10073							return ( newCache[ 2 ] = oldCache[ 2 ] );
10074						} else {
10075
10076							// Reuse newcache so results back-propagate to previous elements
10077							outerCache[ key ] = newCache;
10078
10079							// A match means we're done; a fail means we have to keep checking
10080							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
10081								return true;
10082							}
10083						}
10084					}
10085				}
10086			}
10087			return false;
10088		};
10089}
10090
10091function elementMatcher( matchers ) {
10092	return matchers.length > 1 ?
10093		function( elem, context, xml ) {
10094			var i = matchers.length;
10095			while ( i-- ) {
10096				if ( !matchers[ i ]( elem, context, xml ) ) {
10097					return false;
10098				}
10099			}
10100			return true;
10101		} :
10102		matchers[ 0 ];
10103}
10104
10105function multipleContexts( selector, contexts, results ) {
10106	var i = 0,
10107		len = contexts.length;
10108	for ( ; i < len; i++ ) {
10109		find( selector, contexts[ i ], results );
10110	}
10111	return results;
10112}
10113
10114function condense( unmatched, map, filter, context, xml ) {
10115	var elem,
10116		newUnmatched = [],
10117		i = 0,
10118		len = unmatched.length,
10119		mapped = map != null;
10120
10121	for ( ; i < len; i++ ) {
10122		if ( ( elem = unmatched[ i ] ) ) {
10123			if ( !filter || filter( elem, context, xml ) ) {
10124				newUnmatched.push( elem );
10125				if ( mapped ) {
10126					map.push( i );
10127				}
10128			}
10129		}
10130	}
10131
10132	return newUnmatched;
10133}
10134
10135function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
10136	if ( postFilter && !postFilter[ expando ] ) {
10137		postFilter = setMatcher( postFilter );
10138	}
10139	if ( postFinder && !postFinder[ expando ] ) {
10140		postFinder = setMatcher( postFinder, postSelector );
10141	}
10142	return markFunction( function( seed, results, context, xml ) {
10143		var temp, i, elem, matcherOut,
10144			preMap = [],
10145			postMap = [],
10146			preexisting = results.length,
10147
10148			// Get initial elements from seed or context
10149			elems = seed ||
10150				multipleContexts( selector || "*",
10151					context.nodeType ? [ context ] : context, [] ),
10152
10153			// Prefilter to get matcher input, preserving a map for seed-results synchronization
10154			matcherIn = preFilter && ( seed || !selector ) ?
10155				condense( elems, preMap, preFilter, context, xml ) :
10156				elems;
10157
10158		if ( matcher ) {
10159
10160			// If we have a postFinder, or filtered seed, or non-seed postFilter
10161			// or preexisting results,
10162			matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
10163
10164				// ...intermediate processing is necessary
10165				[] :
10166
10167				// ...otherwise use results directly
10168				results;
10169
10170			// Find primary matches
10171			matcher( matcherIn, matcherOut, context, xml );
10172		} else {
10173			matcherOut = matcherIn;
10174		}
10175
10176		// Apply postFilter
10177		if ( postFilter ) {
10178			temp = condense( matcherOut, postMap );
10179			postFilter( temp, [], context, xml );
10180
10181			// Un-match failing elements by moving them back to matcherIn
10182			i = temp.length;
10183			while ( i-- ) {
10184				if ( ( elem = temp[ i ] ) ) {
10185					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
10186				}
10187			}
10188		}
10189
10190		if ( seed ) {
10191			if ( postFinder || preFilter ) {
10192				if ( postFinder ) {
10193
10194					// Get the final matcherOut by condensing this intermediate into postFinder contexts
10195					temp = [];
10196					i = matcherOut.length;
10197					while ( i-- ) {
10198						if ( ( elem = matcherOut[ i ] ) ) {
10199
10200							// Restore matcherIn since elem is not yet a final match
10201							temp.push( ( matcherIn[ i ] = elem ) );
10202						}
10203					}
10204					postFinder( null, ( matcherOut = [] ), temp, xml );
10205				}
10206
10207				// Move matched elements from seed to results to keep them synchronized
10208				i = matcherOut.length;
10209				while ( i-- ) {
10210					if ( ( elem = matcherOut[ i ] ) &&
10211						( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {
10212
10213						seed[ temp ] = !( results[ temp ] = elem );
10214					}
10215				}
10216			}
10217
10218		// Add elements to results, through postFinder if defined
10219		} else {
10220			matcherOut = condense(
10221				matcherOut === results ?
10222					matcherOut.splice( preexisting, matcherOut.length ) :
10223					matcherOut
10224			);
10225			if ( postFinder ) {
10226				postFinder( null, results, matcherOut, xml );
10227			} else {
10228				push.apply( results, matcherOut );
10229			}
10230		}
10231	} );
10232}
10233
10234function matcherFromTokens( tokens ) {
10235	var checkContext, matcher, j,
10236		len = tokens.length,
10237		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
10238		implicitRelative = leadingRelative || Expr.relative[ " " ],
10239		i = leadingRelative ? 1 : 0,
10240
10241		// The foundational matcher ensures that elements are reachable from top-level context(s)
10242		matchContext = addCombinator( function( elem ) {
10243			return elem === checkContext;
10244		}, implicitRelative, true ),
10245		matchAnyContext = addCombinator( function( elem ) {
10246			return indexOf.call( checkContext, elem ) > -1;
10247		}, implicitRelative, true ),
10248		matchers = [ function( elem, context, xml ) {
10249
10250			// Support: IE 11+, Edge 17 - 18+
10251			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10252			// two documents; shallow comparisons work.
10253			// eslint-disable-next-line eqeqeq
10254			var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (
10255				( checkContext = context ).nodeType ?
10256					matchContext( elem, context, xml ) :
10257					matchAnyContext( elem, context, xml ) );
10258
10259			// Avoid hanging onto element
10260			// (see https://github.com/jquery/sizzle/issues/299)
10261			checkContext = null;
10262			return ret;
10263		} ];
10264
10265	for ( ; i < len; i++ ) {
10266		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
10267			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
10268		} else {
10269			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
10270
10271			// Return special upon seeing a positional matcher
10272			if ( matcher[ expando ] ) {
10273
10274				// Find the next relative operator (if any) for proper handling
10275				j = ++i;
10276				for ( ; j < len; j++ ) {
10277					if ( Expr.relative[ tokens[ j ].type ] ) {
10278						break;
10279					}
10280				}
10281				return setMatcher(
10282					i > 1 && elementMatcher( matchers ),
10283					i > 1 && toSelector(
10284
10285						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
10286						tokens.slice( 0, i - 1 )
10287							.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
10288					).replace( rtrimCSS, "$1" ),
10289					matcher,
10290					i < j && matcherFromTokens( tokens.slice( i, j ) ),
10291					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
10292					j < len && toSelector( tokens )
10293				);
10294			}
10295			matchers.push( matcher );
10296		}
10297	}
10298
10299	return elementMatcher( matchers );
10300}
10301
10302function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
10303	var bySet = setMatchers.length > 0,
10304		byElement = elementMatchers.length > 0,
10305		superMatcher = function( seed, context, xml, results, outermost ) {
10306			var elem, j, matcher,
10307				matchedCount = 0,
10308				i = "0",
10309				unmatched = seed && [],
10310				setMatched = [],
10311				contextBackup = outermostContext,
10312
10313				// We must always have either seed elements or outermost context
10314				elems = seed || byElement && Expr.find.TAG( "*", outermost ),
10315
10316				// Use integer dirruns iff this is the outermost matcher
10317				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
10318				len = elems.length;
10319
10320			if ( outermost ) {
10321
10322				// Support: IE 11+, Edge 17 - 18+
10323				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10324				// two documents; shallow comparisons work.
10325				// eslint-disable-next-line eqeqeq
10326				outermostContext = context == document || context || outermost;
10327			}
10328
10329			// Add elements passing elementMatchers directly to results
10330			// Support: iOS <=7 - 9 only
10331			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching
10332			// elements by id. (see trac-14142)
10333			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
10334				if ( byElement && elem ) {
10335					j = 0;
10336
10337					// Support: IE 11+, Edge 17 - 18+
10338					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10339					// two documents; shallow comparisons work.
10340					// eslint-disable-next-line eqeqeq
10341					if ( !context && elem.ownerDocument != document ) {
10342						setDocument( elem );
10343						xml = !documentIsHTML;
10344					}
10345					while ( ( matcher = elementMatchers[ j++ ] ) ) {
10346						if ( matcher( elem, context || document, xml ) ) {
10347							push.call( results, elem );
10348							break;
10349						}
10350					}
10351					if ( outermost ) {
10352						dirruns = dirrunsUnique;
10353					}
10354				}
10355
10356				// Track unmatched elements for set filters
10357				if ( bySet ) {
10358
10359					// They will have gone through all possible matchers
10360					if ( ( elem = !matcher && elem ) ) {
10361						matchedCount--;
10362					}
10363
10364					// Lengthen the array for every element, matched or not
10365					if ( seed ) {
10366						unmatched.push( elem );
10367					}
10368				}
10369			}
10370
10371			// `i` is now the count of elements visited above, and adding it to `matchedCount`
10372			// makes the latter nonnegative.
10373			matchedCount += i;
10374
10375			// Apply set filters to unmatched elements
10376			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
10377			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
10378			// no element matchers and no seed.
10379			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
10380			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
10381			// numerically zero.
10382			if ( bySet && i !== matchedCount ) {
10383				j = 0;
10384				while ( ( matcher = setMatchers[ j++ ] ) ) {
10385					matcher( unmatched, setMatched, context, xml );
10386				}
10387
10388				if ( seed ) {
10389
10390					// Reintegrate element matches to eliminate the need for sorting
10391					if ( matchedCount > 0 ) {
10392						while ( i-- ) {
10393							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
10394								setMatched[ i ] = pop.call( results );
10395							}
10396						}
10397					}
10398
10399					// Discard index placeholder values to get only actual matches
10400					setMatched = condense( setMatched );
10401				}
10402
10403				// Add matches to results
10404				push.apply( results, setMatched );
10405
10406				// Seedless set matches succeeding multiple successful matchers stipulate sorting
10407				if ( outermost && !seed && setMatched.length > 0 &&
10408					( matchedCount + setMatchers.length ) > 1 ) {
10409
10410					jQuery.uniqueSort( results );
10411				}
10412			}
10413
10414			// Override manipulation of globals by nested matchers
10415			if ( outermost ) {
10416				dirruns = dirrunsUnique;
10417				outermostContext = contextBackup;
10418			}
10419
10420			return unmatched;
10421		};
10422
10423	return bySet ?
10424		markFunction( superMatcher ) :
10425		superMatcher;
10426}
10427
10428function compile( selector, match /* Internal Use Only */ ) {
10429	var i,
10430		setMatchers = [],
10431		elementMatchers = [],
10432		cached = compilerCache[ selector + " " ];
10433
10434	if ( !cached ) {
10435
10436		// Generate a function of recursive functions that can be used to check each element
10437		if ( !match ) {
10438			match = tokenize( selector );
10439		}
10440		i = match.length;
10441		while ( i-- ) {
10442			cached = matcherFromTokens( match[ i ] );
10443			if ( cached[ expando ] ) {
10444				setMatchers.push( cached );
10445			} else {
10446				elementMatchers.push( cached );
10447			}
10448		}
10449
10450		// Cache the compiled function
10451		cached = compilerCache( selector,
10452			matcherFromGroupMatchers( elementMatchers, setMatchers ) );
10453
10454		// Save selector and tokenization
10455		cached.selector = selector;
10456	}
10457	return cached;
10458}
10459
10460/**
10461 * A low-level selection function that works with jQuery's compiled
10462 *  selector functions
10463 * @param {String|Function} selector A selector or a pre-compiled
10464 *  selector function built with jQuery selector compile
10465 * @param {Element} context
10466 * @param {Array} [results]
10467 * @param {Array} [seed] A set of elements to match against
10468 */
10469function select( selector, context, results, seed ) {
10470	var i, tokens, token, type, find,
10471		compiled = typeof selector === "function" && selector,
10472		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
10473
10474	results = results || [];
10475
10476	// Try to minimize operations if there is only one selector in the list and no seed
10477	// (the latter of which guarantees us context)
10478	if ( match.length === 1 ) {
10479
10480		// Reduce context if the leading compound selector is an ID
10481		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
10482		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
10483				context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
10484
10485			context = ( Expr.find.ID(
10486				token.matches[ 0 ].replace( runescape, funescape ),
10487				context
10488			) || [] )[ 0 ];
10489			if ( !context ) {
10490				return results;
10491
10492			// Precompiled matchers will still verify ancestry, so step up a level
10493			} else if ( compiled ) {
10494				context = context.parentNode;
10495			}
10496
10497			selector = selector.slice( tokens.shift().value.length );
10498		}
10499
10500		// Fetch a seed set for right-to-left matching
10501		i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;
10502		while ( i-- ) {
10503			token = tokens[ i ];
10504
10505			// Abort if we hit a combinator
10506			if ( Expr.relative[ ( type = token.type ) ] ) {
10507				break;
10508			}
10509			if ( ( find = Expr.find[ type ] ) ) {
10510
10511				// Search, expanding context for leading sibling combinators
10512				if ( ( seed = find(
10513					token.matches[ 0 ].replace( runescape, funescape ),
10514					rsibling.test( tokens[ 0 ].type ) &&
10515						testContext( context.parentNode ) || context
10516				) ) ) {
10517
10518					// If seed is empty or no tokens remain, we can return early
10519					tokens.splice( i, 1 );
10520					selector = seed.length && toSelector( tokens );
10521					if ( !selector ) {
10522						push.apply( results, seed );
10523						return results;
10524					}
10525
10526					break;
10527				}
10528			}
10529		}
10530	}
10531
10532	// Compile and execute a filtering function if one is not provided
10533	// Provide `match` to avoid retokenization if we modified the selector above
10534	( compiled || compile( selector, match ) )(
10535		seed,
10536		context,
10537		!documentIsHTML,
10538		results,
10539		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
10540	);
10541	return results;
10542}
10543
10544// One-time assignments
10545
10546// Support: Android <=4.0 - 4.1+
10547// Sort stability
10548support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
10549
10550// Initialize against the default document
10551setDocument();
10552
10553// Support: Android <=4.0 - 4.1+
10554// Detached nodes confoundingly follow *each other*
10555support.sortDetached = assert( function( el ) {
10556
10557	// Should return 1, but returns 4 (following)
10558	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
10559} );
10560
10561jQuery.find = find;
10562
10563// Deprecated
10564jQuery.expr[ ":" ] = jQuery.expr.pseudos;
10565jQuery.unique = jQuery.uniqueSort;
10566
10567// These have always been private, but they used to be documented as part of
10568// Sizzle so let's maintain them for now for backwards compatibility purposes.
10569find.compile = compile;
10570find.select = select;
10571find.setDocument = setDocument;
10572find.tokenize = tokenize;
10573
10574find.escape = jQuery.escapeSelector;
10575find.getText = jQuery.text;
10576find.isXML = jQuery.isXMLDoc;
10577find.selectors = jQuery.expr;
10578find.support = jQuery.support;
10579find.uniqueSort = jQuery.uniqueSort;
10580
10581	/* eslint-enable */
10582
10583} )();
10584
10585
10586var dir = function( elem, dir, until ) {
10587	var matched = [],
10588		truncate = until !== undefined;
10589
10590	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
10591		if ( elem.nodeType === 1 ) {
10592			if ( truncate && jQuery( elem ).is( until ) ) {
10593				break;
10594			}
10595			matched.push( elem );
10596		}
10597	}
10598	return matched;
10599};
10600
10601
10602var siblings = function( n, elem ) {
10603	var matched = [];
10604
10605	for ( ; n; n = n.nextSibling ) {
10606		if ( n.nodeType === 1 && n !== elem ) {
10607			matched.push( n );
10608		}
10609	}
10610
10611	return matched;
10612};
10613
10614
10615var rneedsContext = jQuery.expr.match.needsContext;
10616
10617var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
10618
10619
10620
10621// Implement the identical functionality for filter and not
10622function winnow( elements, qualifier, not ) {
10623	if ( isFunction( qualifier ) ) {
10624		return jQuery.grep( elements, function( elem, i ) {
10625			return !!qualifier.call( elem, i, elem ) !== not;
10626		} );
10627	}
10628
10629	// Single element
10630	if ( qualifier.nodeType ) {
10631		return jQuery.grep( elements, function( elem ) {
10632			return ( elem === qualifier ) !== not;
10633		} );
10634	}
10635
10636	// Arraylike of elements (jQuery, arguments, Array)
10637	if ( typeof qualifier !== "string" ) {
10638		return jQuery.grep( elements, function( elem ) {
10639			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
10640		} );
10641	}
10642
10643	// Filtered directly for both simple and complex selectors
10644	return jQuery.filter( qualifier, elements, not );
10645}
10646
10647jQuery.filter = function( expr, elems, not ) {
10648	var elem = elems[ 0 ];
10649
10650	if ( not ) {
10651		expr = ":not(" + expr + ")";
10652	}
10653
10654	if ( elems.length === 1 && elem.nodeType === 1 ) {
10655		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
10656	}
10657
10658	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
10659		return elem.nodeType === 1;
10660	} ) );
10661};
10662
10663jQuery.fn.extend( {
10664	find: function( selector ) {
10665		var i, ret,
10666			len = this.length,
10667			self = this;
10668
10669		if ( typeof selector !== "string" ) {
10670			return this.pushStack( jQuery( selector ).filter( function() {
10671				for ( i = 0; i < len; i++ ) {
10672					if ( jQuery.contains( self[ i ], this ) ) {
10673						return true;
10674					}
10675				}
10676			} ) );
10677		}
10678
10679		ret = this.pushStack( [] );
10680
10681		for ( i = 0; i < len; i++ ) {
10682			jQuery.find( selector, self[ i ], ret );
10683		}
10684
10685		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
10686	},
10687	filter: function( selector ) {
10688		return this.pushStack( winnow( this, selector || [], false ) );
10689	},
10690	not: function( selector ) {
10691		return this.pushStack( winnow( this, selector || [], true ) );
10692	},
10693	is: function( selector ) {
10694		return !!winnow(
10695			this,
10696
10697			// If this is a positional/relative selector, check membership in the returned set
10698			// so $("p:first").is("p:last") won't return true for a doc with two "p".
10699			typeof selector === "string" && rneedsContext.test( selector ) ?
10700				jQuery( selector ) :
10701				selector || [],
10702			false
10703		).length;
10704	}
10705} );
10706
10707
10708// Initialize a jQuery object
10709
10710
10711// A central reference to the root jQuery(document)
10712var rootjQuery,
10713
10714	// A simple way to check for HTML strings
10715	// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)
10716	// Strict HTML recognition (trac-11290: must start with <)
10717	// Shortcut simple #id case for speed
10718	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
10719
10720	init = jQuery.fn.init = function( selector, context, root ) {
10721		var match, elem;
10722
10723		// HANDLE: $(""), $(null), $(undefined), $(false)
10724		if ( !selector ) {
10725			return this;
10726		}
10727
10728		// Method init() accepts an alternate rootjQuery
10729		// so migrate can support jQuery.sub (gh-2101)
10730		root = root || rootjQuery;
10731
10732		// Handle HTML strings
10733		if ( typeof selector === "string" ) {
10734			if ( selector[ 0 ] === "<" &&
10735				selector[ selector.length - 1 ] === ">" &&
10736				selector.length >= 3 ) {
10737
10738				// Assume that strings that start and end with <> are HTML and skip the regex check
10739				match = [ null, selector, null ];
10740
10741			} else {
10742				match = rquickExpr.exec( selector );
10743			}
10744
10745			// Match html or make sure no context is specified for #id
10746			if ( match && ( match[ 1 ] || !context ) ) {
10747
10748				// HANDLE: $(html) -> $(array)
10749				if ( match[ 1 ] ) {
10750					context = context instanceof jQuery ? context[ 0 ] : context;
10751
10752					// Option to run scripts is true for back-compat
10753					// Intentionally let the error be thrown if parseHTML is not present
10754					jQuery.merge( this, jQuery.parseHTML(
10755						match[ 1 ],
10756						context && context.nodeType ? context.ownerDocument || context : document,
10757						true
10758					) );
10759
10760					// HANDLE: $(html, props)
10761					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
10762						for ( match in context ) {
10763
10764							// Properties of context are called as methods if possible
10765							if ( isFunction( this[ match ] ) ) {
10766								this[ match ]( context[ match ] );
10767
10768							// ...and otherwise set as attributes
10769							} else {
10770								this.attr( match, context[ match ] );
10771							}
10772						}
10773					}
10774
10775					return this;
10776
10777				// HANDLE: $(#id)
10778				} else {
10779					elem = document.getElementById( match[ 2 ] );
10780
10781					if ( elem ) {
10782
10783						// Inject the element directly into the jQuery object
10784						this[ 0 ] = elem;
10785						this.length = 1;
10786					}
10787					return this;
10788				}
10789
10790			// HANDLE: $(expr, $(...))
10791			} else if ( !context || context.jquery ) {
10792				return ( context || root ).find( selector );
10793
10794			// HANDLE: $(expr, context)
10795			// (which is just equivalent to: $(context).find(expr)
10796			} else {
10797				return this.constructor( context ).find( selector );
10798			}
10799
10800		// HANDLE: $(DOMElement)
10801		} else if ( selector.nodeType ) {
10802			this[ 0 ] = selector;
10803			this.length = 1;
10804			return this;
10805
10806		// HANDLE: $(function)
10807		// Shortcut for document ready
10808		} else if ( isFunction( selector ) ) {
10809			return root.ready !== undefined ?
10810				root.ready( selector ) :
10811
10812				// Execute immediately if ready is not present
10813				selector( jQuery );
10814		}
10815
10816		return jQuery.makeArray( selector, this );
10817	};
10818
10819// Give the init function the jQuery prototype for later instantiation
10820init.prototype = jQuery.fn;
10821
10822// Initialize central reference
10823rootjQuery = jQuery( document );
10824
10825
10826var rparentsprev = /^(?:parents|prev(?:Until|All))/,
10827
10828	// Methods guaranteed to produce a unique set when starting from a unique set
10829	guaranteedUnique = {
10830		children: true,
10831		contents: true,
10832		next: true,
10833		prev: true
10834	};
10835
10836jQuery.fn.extend( {
10837	has: function( target ) {
10838		var targets = jQuery( target, this ),
10839			l = targets.length;
10840
10841		return this.filter( function() {
10842			var i = 0;
10843			for ( ; i < l; i++ ) {
10844				if ( jQuery.contains( this, targets[ i ] ) ) {
10845					return true;
10846				}
10847			}
10848		} );
10849	},
10850
10851	closest: function( selectors, context ) {
10852		var cur,
10853			i = 0,
10854			l = this.length,
10855			matched = [],
10856			targets = typeof selectors !== "string" && jQuery( selectors );
10857
10858		// Positional selectors never match, since there's no _selection_ context
10859		if ( !rneedsContext.test( selectors ) ) {
10860			for ( ; i < l; i++ ) {
10861				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
10862
10863					// Always skip document fragments
10864					if ( cur.nodeType < 11 && ( targets ?
10865						targets.index( cur ) > -1 :
10866
10867						// Don't pass non-elements to jQuery#find
10868						cur.nodeType === 1 &&
10869							jQuery.find.matchesSelector( cur, selectors ) ) ) {
10870
10871						matched.push( cur );
10872						break;
10873					}
10874				}
10875			}
10876		}
10877
10878		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
10879	},
10880
10881	// Determine the position of an element within the set
10882	index: function( elem ) {
10883
10884		// No argument, return index in parent
10885		if ( !elem ) {
10886			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
10887		}
10888
10889		// Index in selector
10890		if ( typeof elem === "string" ) {
10891			return indexOf.call( jQuery( elem ), this[ 0 ] );
10892		}
10893
10894		// Locate the position of the desired element
10895		return indexOf.call( this,
10896
10897			// If it receives a jQuery object, the first element is used
10898			elem.jquery ? elem[ 0 ] : elem
10899		);
10900	},
10901
10902	add: function( selector, context ) {
10903		return this.pushStack(
10904			jQuery.uniqueSort(
10905				jQuery.merge( this.get(), jQuery( selector, context ) )
10906			)
10907		);
10908	},
10909
10910	addBack: function( selector ) {
10911		return this.add( selector == null ?
10912			this.prevObject : this.prevObject.filter( selector )
10913		);
10914	}
10915} );
10916
10917function sibling( cur, dir ) {
10918	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
10919	return cur;
10920}
10921
10922jQuery.each( {
10923	parent: function( elem ) {
10924		var parent = elem.parentNode;
10925		return parent && parent.nodeType !== 11 ? parent : null;
10926	},
10927	parents: function( elem ) {
10928		return dir( elem, "parentNode" );
10929	},
10930	parentsUntil: function( elem, _i, until ) {
10931		return dir( elem, "parentNode", until );
10932	},
10933	next: function( elem ) {
10934		return sibling( elem, "nextSibling" );
10935	},
10936	prev: function( elem ) {
10937		return sibling( elem, "previousSibling" );
10938	},
10939	nextAll: function( elem ) {
10940		return dir( elem, "nextSibling" );
10941	},
10942	prevAll: function( elem ) {
10943		return dir( elem, "previousSibling" );
10944	},
10945	nextUntil: function( elem, _i, until ) {
10946		return dir( elem, "nextSibling", until );
10947	},
10948	prevUntil: function( elem, _i, until ) {
10949		return dir( elem, "previousSibling", until );
10950	},
10951	siblings: function( elem ) {
10952		return siblings( ( elem.parentNode || {} ).firstChild, elem );
10953	},
10954	children: function( elem ) {
10955		return siblings( elem.firstChild );
10956	},
10957	contents: function( elem ) {
10958		if ( elem.contentDocument != null &&
10959
10960			// Support: IE 11+
10961			// <object> elements with no `data` attribute has an object
10962			// `contentDocument` with a `null` prototype.
10963			getProto( elem.contentDocument ) ) {
10964
10965			return elem.contentDocument;
10966		}
10967
10968		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
10969		// Treat the template element as a regular one in browsers that
10970		// don't support it.
10971		if ( nodeName( elem, "template" ) ) {
10972			elem = elem.content || elem;
10973		}
10974
10975		return jQuery.merge( [], elem.childNodes );
10976	}
10977}, function( name, fn ) {
10978	jQuery.fn[ name ] = function( until, selector ) {
10979		var matched = jQuery.map( this, fn, until );
10980
10981		if ( name.slice( -5 ) !== "Until" ) {
10982			selector = until;
10983		}
10984
10985		if ( selector && typeof selector === "string" ) {
10986			matched = jQuery.filter( selector, matched );
10987		}
10988
10989		if ( this.length > 1 ) {
10990
10991			// Remove duplicates
10992			if ( !guaranteedUnique[ name ] ) {
10993				jQuery.uniqueSort( matched );
10994			}
10995
10996			// Reverse order for parents* and prev-derivatives
10997			if ( rparentsprev.test( name ) ) {
10998				matched.reverse();
10999			}
11000		}
11001
11002		return this.pushStack( matched );
11003	};
11004} );
11005var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
11006
11007
11008
11009// Convert String-formatted options into Object-formatted ones
11010function createOptions( options ) {
11011	var object = {};
11012	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
11013		object[ flag ] = true;
11014	} );
11015	return object;
11016}
11017
11018/*
11019 * Create a callback list using the following parameters:
11020 *
11021 *	options: an optional list of space-separated options that will change how
11022 *			the callback list behaves or a more traditional option object
11023 *
11024 * By default a callback list will act like an event callback list and can be
11025 * "fired" multiple times.
11026 *
11027 * Possible options:
11028 *
11029 *	once:			will ensure the callback list can only be fired once (like a Deferred)
11030 *
11031 *	memory:			will keep track of previous values and will call any callback added
11032 *					after the list has been fired right away with the latest "memorized"
11033 *					values (like a Deferred)
11034 *
11035 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
11036 *
11037 *	stopOnFalse:	interrupt callings when a callback returns false
11038 *
11039 */
11040jQuery.Callbacks = function( options ) {
11041
11042	// Convert options from String-formatted to Object-formatted if needed
11043	// (we check in cache first)
11044	options = typeof options === "string" ?
11045		createOptions( options ) :
11046		jQuery.extend( {}, options );
11047
11048	var // Flag to know if list is currently firing
11049		firing,
11050
11051		// Last fire value for non-forgettable lists
11052		memory,
11053
11054		// Flag to know if list was already fired
11055		fired,
11056
11057		// Flag to prevent firing
11058		locked,
11059
11060		// Actual callback list
11061		list = [],
11062
11063		// Queue of execution data for repeatable lists
11064		queue = [],
11065
11066		// Index of currently firing callback (modified by add/remove as needed)
11067		firingIndex = -1,
11068
11069		// Fire callbacks
11070		fire = function() {
11071
11072			// Enforce single-firing
11073			locked = locked || options.once;
11074
11075			// Execute callbacks for all pending executions,
11076			// respecting firingIndex overrides and runtime changes
11077			fired = firing = true;
11078			for ( ; queue.length; firingIndex = -1 ) {
11079				memory = queue.shift();
11080				while ( ++firingIndex < list.length ) {
11081
11082					// Run callback and check for early termination
11083					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
11084						options.stopOnFalse ) {
11085
11086						// Jump to end and forget the data so .add doesn't re-fire
11087						firingIndex = list.length;
11088						memory = false;
11089					}
11090				}
11091			}
11092
11093			// Forget the data if we're done with it
11094			if ( !options.memory ) {
11095				memory = false;
11096			}
11097
11098			firing = false;
11099
11100			// Clean up if we're done firing for good
11101			if ( locked ) {
11102
11103				// Keep an empty list if we have data for future add calls
11104				if ( memory ) {
11105					list = [];
11106
11107				// Otherwise, this object is spent
11108				} else {
11109					list = "";
11110				}
11111			}
11112		},
11113
11114		// Actual Callbacks object
11115		self = {
11116
11117			// Add a callback or a collection of callbacks to the list
11118			add: function() {
11119				if ( list ) {
11120
11121					// If we have memory from a past run, we should fire after adding
11122					if ( memory && !firing ) {
11123						firingIndex = list.length - 1;
11124						queue.push( memory );
11125					}
11126
11127					( function add( args ) {
11128						jQuery.each( args, function( _, arg ) {
11129							if ( isFunction( arg ) ) {
11130								if ( !options.unique || !self.has( arg ) ) {
11131									list.push( arg );
11132								}
11133							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
11134
11135								// Inspect recursively
11136								add( arg );
11137							}
11138						} );
11139					} )( arguments );
11140
11141					if ( memory && !firing ) {
11142						fire();
11143					}
11144				}
11145				return this;
11146			},
11147
11148			// Remove a callback from the list
11149			remove: function() {
11150				jQuery.each( arguments, function( _, arg ) {
11151					var index;
11152					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
11153						list.splice( index, 1 );
11154
11155						// Handle firing indexes
11156						if ( index <= firingIndex ) {
11157							firingIndex--;
11158						}
11159					}
11160				} );
11161				return this;
11162			},
11163
11164			// Check if a given callback is in the list.
11165			// If no argument is given, return whether or not list has callbacks attached.
11166			has: function( fn ) {
11167				return fn ?
11168					jQuery.inArray( fn, list ) > -1 :
11169					list.length > 0;
11170			},
11171
11172			// Remove all callbacks from the list
11173			empty: function() {
11174				if ( list ) {
11175					list = [];
11176				}
11177				return this;
11178			},
11179
11180			// Disable .fire and .add
11181			// Abort any current/pending executions
11182			// Clear all callbacks and values
11183			disable: function() {
11184				locked = queue = [];
11185				list = memory = "";
11186				return this;
11187			},
11188			disabled: function() {
11189				return !list;
11190			},
11191
11192			// Disable .fire
11193			// Also disable .add unless we have memory (since it would have no effect)
11194			// Abort any pending executions
11195			lock: function() {
11196				locked = queue = [];
11197				if ( !memory && !firing ) {
11198					list = memory = "";
11199				}
11200				return this;
11201			},
11202			locked: function() {
11203				return !!locked;
11204			},
11205
11206			// Call all callbacks with the given context and arguments
11207			fireWith: function( context, args ) {
11208				if ( !locked ) {
11209					args = args || [];
11210					args = [ context, args.slice ? args.slice() : args ];
11211					queue.push( args );
11212					if ( !firing ) {
11213						fire();
11214					}
11215				}
11216				return this;
11217			},
11218
11219			// Call all the callbacks with the given arguments
11220			fire: function() {
11221				self.fireWith( this, arguments );
11222				return this;
11223			},
11224
11225			// To know if the callbacks have already been called at least once
11226			fired: function() {
11227				return !!fired;
11228			}
11229		};
11230
11231	return self;
11232};
11233
11234
11235function Identity( v ) {
11236	return v;
11237}
11238function Thrower( ex ) {
11239	throw ex;
11240}
11241
11242function adoptValue( value, resolve, reject, noValue ) {
11243	var method;
11244
11245	try {
11246
11247		// Check for promise aspect first to privilege synchronous behavior
11248		if ( value && isFunction( ( method = value.promise ) ) ) {
11249			method.call( value ).done( resolve ).fail( reject );
11250
11251		// Other thenables
11252		} else if ( value && isFunction( ( method = value.then ) ) ) {
11253			method.call( value, resolve, reject );
11254
11255		// Other non-thenables
11256		} else {
11257
11258			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
11259			// * false: [ value ].slice( 0 ) => resolve( value )
11260			// * true: [ value ].slice( 1 ) => resolve()
11261			resolve.apply( undefined, [ value ].slice( noValue ) );
11262		}
11263
11264	// For Promises/A+, convert exceptions into rejections
11265	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
11266	// Deferred#then to conditionally suppress rejection.
11267	} catch ( value ) {
11268
11269		// Support: Android 4.0 only
11270		// Strict mode functions invoked without .call/.apply get global-object context
11271		reject.apply( undefined, [ value ] );
11272	}
11273}
11274
11275jQuery.extend( {
11276
11277	Deferred: function( func ) {
11278		var tuples = [
11279
11280				// action, add listener, callbacks,
11281				// ... .then handlers, argument index, [final state]
11282				[ "notify", "progress", jQuery.Callbacks( "memory" ),
11283					jQuery.Callbacks( "memory" ), 2 ],
11284				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
11285					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
11286				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
11287					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
11288			],
11289			state = "pending",
11290			promise = {
11291				state: function() {
11292					return state;
11293				},
11294				always: function() {
11295					deferred.done( arguments ).fail( arguments );
11296					return this;
11297				},
11298				"catch": function( fn ) {
11299					return promise.then( null, fn );
11300				},
11301
11302				// Keep pipe for back-compat
11303				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
11304					var fns = arguments;
11305
11306					return jQuery.Deferred( function( newDefer ) {
11307						jQuery.each( tuples, function( _i, tuple ) {
11308
11309							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
11310							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
11311
11312							// deferred.progress(function() { bind to newDefer or newDefer.notify })
11313							// deferred.done(function() { bind to newDefer or newDefer.resolve })
11314							// deferred.fail(function() { bind to newDefer or newDefer.reject })
11315							deferred[ tuple[ 1 ] ]( function() {
11316								var returned = fn && fn.apply( this, arguments );
11317								if ( returned && isFunction( returned.promise ) ) {
11318									returned.promise()
11319										.progress( newDefer.notify )
11320										.done( newDefer.resolve )
11321										.fail( newDefer.reject );
11322								} else {
11323									newDefer[ tuple[ 0 ] + "With" ](
11324										this,
11325										fn ? [ returned ] : arguments
11326									);
11327								}
11328							} );
11329						} );
11330						fns = null;
11331					} ).promise();
11332				},
11333				then: function( onFulfilled, onRejected, onProgress ) {
11334					var maxDepth = 0;
11335					function resolve( depth, deferred, handler, special ) {
11336						return function() {
11337							var that = this,
11338								args = arguments,
11339								mightThrow = function() {
11340									var returned, then;
11341
11342									// Support: Promises/A+ section 2.3.3.3.3
11343									// https://promisesaplus.com/#point-59
11344									// Ignore double-resolution attempts
11345									if ( depth < maxDepth ) {
11346										return;
11347									}
11348
11349									returned = handler.apply( that, args );
11350
11351									// Support: Promises/A+ section 2.3.1
11352									// https://promisesaplus.com/#point-48
11353									if ( returned === deferred.promise() ) {
11354										throw new TypeError( "Thenable self-resolution" );
11355									}
11356
11357									// Support: Promises/A+ sections 2.3.3.1, 3.5
11358									// https://promisesaplus.com/#point-54
11359									// https://promisesaplus.com/#point-75
11360									// Retrieve `then` only once
11361									then = returned &&
11362
11363										// Support: Promises/A+ section 2.3.4
11364										// https://promisesaplus.com/#point-64
11365										// Only check objects and functions for thenability
11366										( typeof returned === "object" ||
11367											typeof returned === "function" ) &&
11368										returned.then;
11369
11370									// Handle a returned thenable
11371									if ( isFunction( then ) ) {
11372
11373										// Special processors (notify) just wait for resolution
11374										if ( special ) {
11375											then.call(
11376												returned,
11377												resolve( maxDepth, deferred, Identity, special ),
11378												resolve( maxDepth, deferred, Thrower, special )
11379											);
11380
11381										// Normal processors (resolve) also hook into progress
11382										} else {
11383
11384											// ...and disregard older resolution values
11385											maxDepth++;
11386
11387											then.call(
11388												returned,
11389												resolve( maxDepth, deferred, Identity, special ),
11390												resolve( maxDepth, deferred, Thrower, special ),
11391												resolve( maxDepth, deferred, Identity,
11392													deferred.notifyWith )
11393											);
11394										}
11395
11396									// Handle all other returned values
11397									} else {
11398
11399										// Only substitute handlers pass on context
11400										// and multiple values (non-spec behavior)
11401										if ( handler !== Identity ) {
11402											that = undefined;
11403											args = [ returned ];
11404										}
11405
11406										// Process the value(s)
11407										// Default process is resolve
11408										( special || deferred.resolveWith )( that, args );
11409									}
11410								},
11411
11412								// Only normal processors (resolve) catch and reject exceptions
11413								process = special ?
11414									mightThrow :
11415									function() {
11416										try {
11417											mightThrow();
11418										} catch ( e ) {
11419
11420											if ( jQuery.Deferred.exceptionHook ) {
11421												jQuery.Deferred.exceptionHook( e,
11422													process.error );
11423											}
11424
11425											// Support: Promises/A+ section 2.3.3.3.4.1
11426											// https://promisesaplus.com/#point-61
11427											// Ignore post-resolution exceptions
11428											if ( depth + 1 >= maxDepth ) {
11429
11430												// Only substitute handlers pass on context
11431												// and multiple values (non-spec behavior)
11432												if ( handler !== Thrower ) {
11433													that = undefined;
11434													args = [ e ];
11435												}
11436
11437												deferred.rejectWith( that, args );
11438											}
11439										}
11440									};
11441
11442							// Support: Promises/A+ section 2.3.3.3.1
11443							// https://promisesaplus.com/#point-57
11444							// Re-resolve promises immediately to dodge false rejection from
11445							// subsequent errors
11446							if ( depth ) {
11447								process();
11448							} else {
11449
11450								// Call an optional hook to record the error, in case of exception
11451								// since it's otherwise lost when execution goes async
11452								if ( jQuery.Deferred.getErrorHook ) {
11453									process.error = jQuery.Deferred.getErrorHook();
11454
11455								// The deprecated alias of the above. While the name suggests
11456								// returning the stack, not an error instance, jQuery just passes
11457								// it directly to `console.warn` so both will work; an instance
11458								// just better cooperates with source maps.
11459								} else if ( jQuery.Deferred.getStackHook ) {
11460									process.error = jQuery.Deferred.getStackHook();
11461								}
11462								window.setTimeout( process );
11463							}
11464						};
11465					}
11466
11467					return jQuery.Deferred( function( newDefer ) {
11468
11469						// progress_handlers.add( ... )
11470						tuples[ 0 ][ 3 ].add(
11471							resolve(
11472								0,
11473								newDefer,
11474								isFunction( onProgress ) ?
11475									onProgress :
11476									Identity,
11477								newDefer.notifyWith
11478							)
11479						);
11480
11481						// fulfilled_handlers.add( ... )
11482						tuples[ 1 ][ 3 ].add(
11483							resolve(
11484								0,
11485								newDefer,
11486								isFunction( onFulfilled ) ?
11487									onFulfilled :
11488									Identity
11489							)
11490						);
11491
11492						// rejected_handlers.add( ... )
11493						tuples[ 2 ][ 3 ].add(
11494							resolve(
11495								0,
11496								newDefer,
11497								isFunction( onRejected ) ?
11498									onRejected :
11499									Thrower
11500							)
11501						);
11502					} ).promise();
11503				},
11504
11505				// Get a promise for this deferred
11506				// If obj is provided, the promise aspect is added to the object
11507				promise: function( obj ) {
11508					return obj != null ? jQuery.extend( obj, promise ) : promise;
11509				}
11510			},
11511			deferred = {};
11512
11513		// Add list-specific methods
11514		jQuery.each( tuples, function( i, tuple ) {
11515			var list = tuple[ 2 ],
11516				stateString = tuple[ 5 ];
11517
11518			// promise.progress = list.add
11519			// promise.done = list.add
11520			// promise.fail = list.add
11521			promise[ tuple[ 1 ] ] = list.add;
11522
11523			// Handle state
11524			if ( stateString ) {
11525				list.add(
11526					function() {
11527
11528						// state = "resolved" (i.e., fulfilled)
11529						// state = "rejected"
11530						state = stateString;
11531					},
11532
11533					// rejected_callbacks.disable
11534					// fulfilled_callbacks.disable
11535					tuples[ 3 - i ][ 2 ].disable,
11536
11537					// rejected_handlers.disable
11538					// fulfilled_handlers.disable
11539					tuples[ 3 - i ][ 3 ].disable,
11540
11541					// progress_callbacks.lock
11542					tuples[ 0 ][ 2 ].lock,
11543
11544					// progress_handlers.lock
11545					tuples[ 0 ][ 3 ].lock
11546				);
11547			}
11548
11549			// progress_handlers.fire
11550			// fulfilled_handlers.fire
11551			// rejected_handlers.fire
11552			list.add( tuple[ 3 ].fire );
11553
11554			// deferred.notify = function() { deferred.notifyWith(...) }
11555			// deferred.resolve = function() { deferred.resolveWith(...) }
11556			// deferred.reject = function() { deferred.rejectWith(...) }
11557			deferred[ tuple[ 0 ] ] = function() {
11558				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
11559				return this;
11560			};
11561
11562			// deferred.notifyWith = list.fireWith
11563			// deferred.resolveWith = list.fireWith
11564			// deferred.rejectWith = list.fireWith
11565			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
11566		} );
11567
11568		// Make the deferred a promise
11569		promise.promise( deferred );
11570
11571		// Call given func if any
11572		if ( func ) {
11573			func.call( deferred, deferred );
11574		}
11575
11576		// All done!
11577		return deferred;
11578	},
11579
11580	// Deferred helper
11581	when: function( singleValue ) {
11582		var
11583
11584			// count of uncompleted subordinates
11585			remaining = arguments.length,
11586
11587			// count of unprocessed arguments
11588			i = remaining,
11589
11590			// subordinate fulfillment data
11591			resolveContexts = Array( i ),
11592			resolveValues = slice.call( arguments ),
11593
11594			// the primary Deferred
11595			primary = jQuery.Deferred(),
11596
11597			// subordinate callback factory
11598			updateFunc = function( i ) {
11599				return function( value ) {
11600					resolveContexts[ i ] = this;
11601					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
11602					if ( !( --remaining ) ) {
11603						primary.resolveWith( resolveContexts, resolveValues );
11604					}
11605				};
11606			};
11607
11608		// Single- and empty arguments are adopted like Promise.resolve
11609		if ( remaining <= 1 ) {
11610			adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
11611				!remaining );
11612
11613			// Use .then() to unwrap secondary thenables (cf. gh-3000)
11614			if ( primary.state() === "pending" ||
11615				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
11616
11617				return primary.then();
11618			}
11619		}
11620
11621		// Multiple arguments are aggregated like Promise.all array elements
11622		while ( i-- ) {
11623			adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
11624		}
11625
11626		return primary.promise();
11627	}
11628} );
11629
11630
11631// These usually indicate a programmer mistake during development,
11632// warn about them ASAP rather than swallowing them by default.
11633var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
11634
11635// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error
11636// captured before the async barrier to get the original error cause
11637// which may otherwise be hidden.
11638jQuery.Deferred.exceptionHook = function( error, asyncError ) {
11639
11640	// Support: IE 8 - 9 only
11641	// Console exists when dev tools are open, which can happen at any time
11642	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
11643		window.console.warn( "jQuery.Deferred exception: " + error.message,
11644			error.stack, asyncError );
11645	}
11646};
11647
11648
11649
11650
11651jQuery.readyException = function( error ) {
11652	window.setTimeout( function() {
11653		throw error;
11654	} );
11655};
11656
11657
11658
11659
11660// The deferred used on DOM ready
11661var readyList = jQuery.Deferred();
11662
11663jQuery.fn.ready = function( fn ) {
11664
11665	readyList
11666		.then( fn )
11667
11668		// Wrap jQuery.readyException in a function so that the lookup
11669		// happens at the time of error handling instead of callback
11670		// registration.
11671		.catch( function( error ) {
11672			jQuery.readyException( error );
11673		} );
11674
11675	return this;
11676};
11677
11678jQuery.extend( {
11679
11680	// Is the DOM ready to be used? Set to true once it occurs.
11681	isReady: false,
11682
11683	// A counter to track how many items to wait for before
11684	// the ready event fires. See trac-6781
11685	readyWait: 1,
11686
11687	// Handle when the DOM is ready
11688	ready: function( wait ) {
11689
11690		// Abort if there are pending holds or we're already ready
11691		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
11692			return;
11693		}
11694
11695		// Remember that the DOM is ready
11696		jQuery.isReady = true;
11697
11698		// If a normal DOM Ready event fired, decrement, and wait if need be
11699		if ( wait !== true && --jQuery.readyWait > 0 ) {
11700			return;
11701		}
11702
11703		// If there are functions bound, to execute
11704		readyList.resolveWith( document, [ jQuery ] );
11705	}
11706} );
11707
11708jQuery.ready.then = readyList.then;
11709
11710// The ready event handler and self cleanup method
11711function completed() {
11712	document.removeEventListener( "DOMContentLoaded", completed );
11713	window.removeEventListener( "load", completed );
11714	jQuery.ready();
11715}
11716
11717// Catch cases where $(document).ready() is called
11718// after the browser event has already occurred.
11719// Support: IE <=9 - 10 only
11720// Older IE sometimes signals "interactive" too soon
11721if ( document.readyState === "complete" ||
11722	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
11723
11724	// Handle it asynchronously to allow scripts the opportunity to delay ready
11725	window.setTimeout( jQuery.ready );
11726
11727} else {
11728
11729	// Use the handy event callback
11730	document.addEventListener( "DOMContentLoaded", completed );
11731
11732	// A fallback to window.onload, that will always work
11733	window.addEventListener( "load", completed );
11734}
11735
11736
11737
11738
11739// Multifunctional method to get and set values of a collection
11740// The value/s can optionally be executed if it's a function
11741var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
11742	var i = 0,
11743		len = elems.length,
11744		bulk = key == null;
11745
11746	// Sets many values
11747	if ( toType( key ) === "object" ) {
11748		chainable = true;
11749		for ( i in key ) {
11750			access( elems, fn, i, key[ i ], true, emptyGet, raw );
11751		}
11752
11753	// Sets one value
11754	} else if ( value !== undefined ) {
11755		chainable = true;
11756
11757		if ( !isFunction( value ) ) {
11758			raw = true;
11759		}
11760
11761		if ( bulk ) {
11762
11763			// Bulk operations run against the entire set
11764			if ( raw ) {
11765				fn.call( elems, value );
11766				fn = null;
11767
11768			// ...except when executing function values
11769			} else {
11770				bulk = fn;
11771				fn = function( elem, _key, value ) {
11772					return bulk.call( jQuery( elem ), value );
11773				};
11774			}
11775		}
11776
11777		if ( fn ) {
11778			for ( ; i < len; i++ ) {
11779				fn(
11780					elems[ i ], key, raw ?
11781						value :
11782						value.call( elems[ i ], i, fn( elems[ i ], key ) )
11783				);
11784			}
11785		}
11786	}
11787
11788	if ( chainable ) {
11789		return elems;
11790	}
11791
11792	// Gets
11793	if ( bulk ) {
11794		return fn.call( elems );
11795	}
11796
11797	return len ? fn( elems[ 0 ], key ) : emptyGet;
11798};
11799
11800
11801// Matches dashed string for camelizing
11802var rmsPrefix = /^-ms-/,
11803	rdashAlpha = /-([a-z])/g;
11804
11805// Used by camelCase as callback to replace()
11806function fcamelCase( _all, letter ) {
11807	return letter.toUpperCase();
11808}
11809
11810// Convert dashed to camelCase; used by the css and data modules
11811// Support: IE <=9 - 11, Edge 12 - 15
11812// Microsoft forgot to hump their vendor prefix (trac-9572)
11813function camelCase( string ) {
11814	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
11815}
11816var acceptData = function( owner ) {
11817
11818	// Accepts only:
11819	//  - Node
11820	//    - Node.ELEMENT_NODE
11821	//    - Node.DOCUMENT_NODE
11822	//  - Object
11823	//    - Any
11824	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
11825};
11826
11827
11828
11829
11830function Data() {
11831	this.expando = jQuery.expando + Data.uid++;
11832}
11833
11834Data.uid = 1;
11835
11836Data.prototype = {
11837
11838	cache: function( owner ) {
11839
11840		// Check if the owner object already has a cache
11841		var value = owner[ this.expando ];
11842
11843		// If not, create one
11844		if ( !value ) {
11845			value = {};
11846
11847			// We can accept data for non-element nodes in modern browsers,
11848			// but we should not, see trac-8335.
11849			// Always return an empty object.
11850			if ( acceptData( owner ) ) {
11851
11852				// If it is a node unlikely to be stringify-ed or looped over
11853				// use plain assignment
11854				if ( owner.nodeType ) {
11855					owner[ this.expando ] = value;
11856
11857				// Otherwise secure it in a non-enumerable property
11858				// configurable must be true to allow the property to be
11859				// deleted when data is removed
11860				} else {
11861					Object.defineProperty( owner, this.expando, {
11862						value: value,
11863						configurable: true
11864					} );
11865				}
11866			}
11867		}
11868
11869		return value;
11870	},
11871	set: function( owner, data, value ) {
11872		var prop,
11873			cache = this.cache( owner );
11874
11875		// Handle: [ owner, key, value ] args
11876		// Always use camelCase key (gh-2257)
11877		if ( typeof data === "string" ) {
11878			cache[ camelCase( data ) ] = value;
11879
11880		// Handle: [ owner, { properties } ] args
11881		} else {
11882
11883			// Copy the properties one-by-one to the cache object
11884			for ( prop in data ) {
11885				cache[ camelCase( prop ) ] = data[ prop ];
11886			}
11887		}
11888		return cache;
11889	},
11890	get: function( owner, key ) {
11891		return key === undefined ?
11892			this.cache( owner ) :
11893
11894			// Always use camelCase key (gh-2257)
11895			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
11896	},
11897	access: function( owner, key, value ) {
11898
11899		// In cases where either:
11900		//
11901		//   1. No key was specified
11902		//   2. A string key was specified, but no value provided
11903		//
11904		// Take the "read" path and allow the get method to determine
11905		// which value to return, respectively either:
11906		//
11907		//   1. The entire cache object
11908		//   2. The data stored at the key
11909		//
11910		if ( key === undefined ||
11911				( ( key && typeof key === "string" ) && value === undefined ) ) {
11912
11913			return this.get( owner, key );
11914		}
11915
11916		// When the key is not a string, or both a key and value
11917		// are specified, set or extend (existing objects) with either:
11918		//
11919		//   1. An object of properties
11920		//   2. A key and value
11921		//
11922		this.set( owner, key, value );
11923
11924		// Since the "set" path can have two possible entry points
11925		// return the expected data based on which path was taken[*]
11926		return value !== undefined ? value : key;
11927	},
11928	remove: function( owner, key ) {
11929		var i,
11930			cache = owner[ this.expando ];
11931
11932		if ( cache === undefined ) {
11933			return;
11934		}
11935
11936		if ( key !== undefined ) {
11937
11938			// Support array or space separated string of keys
11939			if ( Array.isArray( key ) ) {
11940
11941				// If key is an array of keys...
11942				// We always set camelCase keys, so remove that.
11943				key = key.map( camelCase );
11944			} else {
11945				key = camelCase( key );
11946
11947				// If a key with the spaces exists, use it.
11948				// Otherwise, create an array by matching non-whitespace
11949				key = key in cache ?
11950					[ key ] :
11951					( key.match( rnothtmlwhite ) || [] );
11952			}
11953
11954			i = key.length;
11955
11956			while ( i-- ) {
11957				delete cache[ key[ i ] ];
11958			}
11959		}
11960
11961		// Remove the expando if there's no more data
11962		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
11963
11964			// Support: Chrome <=35 - 45
11965			// Webkit & Blink performance suffers when deleting properties
11966			// from DOM nodes, so set to undefined instead
11967			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
11968			if ( owner.nodeType ) {
11969				owner[ this.expando ] = undefined;
11970			} else {
11971				delete owner[ this.expando ];
11972			}
11973		}
11974	},
11975	hasData: function( owner ) {
11976		var cache = owner[ this.expando ];
11977		return cache !== undefined && !jQuery.isEmptyObject( cache );
11978	}
11979};
11980var dataPriv = new Data();
11981
11982var dataUser = new Data();
11983
11984
11985
11986//	Implementation Summary
11987//
11988//	1. Enforce API surface and semantic compatibility with 1.9.x branch
11989//	2. Improve the module's maintainability by reducing the storage
11990//		paths to a single mechanism.
11991//	3. Use the same single mechanism to support "private" and "user" data.
11992//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
11993//	5. Avoid exposing implementation details on user objects (eg. expando properties)
11994//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
11995
11996var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
11997	rmultiDash = /[A-Z]/g;
11998
11999function getData( data ) {
12000	if ( data === "true" ) {
12001		return true;
12002	}
12003
12004	if ( data === "false" ) {
12005		return false;
12006	}
12007
12008	if ( data === "null" ) {
12009		return null;
12010	}
12011
12012	// Only convert to a number if it doesn't change the string
12013	if ( data === +data + "" ) {
12014		return +data;
12015	}
12016
12017	if ( rbrace.test( data ) ) {
12018		return JSON.parse( data );
12019	}
12020
12021	return data;
12022}
12023
12024function dataAttr( elem, key, data ) {
12025	var name;
12026
12027	// If nothing was found internally, try to fetch any
12028	// data from the HTML5 data-* attribute
12029	if ( data === undefined && elem.nodeType === 1 ) {
12030		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
12031		data = elem.getAttribute( name );
12032
12033		if ( typeof data === "string" ) {
12034			try {
12035				data = getData( data );
12036			} catch ( e ) {}
12037
12038			// Make sure we set the data so it isn't changed later
12039			dataUser.set( elem, key, data );
12040		} else {
12041			data = undefined;
12042		}
12043	}
12044	return data;
12045}
12046
12047jQuery.extend( {
12048	hasData: function( elem ) {
12049		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
12050	},
12051
12052	data: function( elem, name, data ) {
12053		return dataUser.access( elem, name, data );
12054	},
12055
12056	removeData: function( elem, name ) {
12057		dataUser.remove( elem, name );
12058	},
12059
12060	// TODO: Now that all calls to _data and _removeData have been replaced
12061	// with direct calls to dataPriv methods, these can be deprecated.
12062	_data: function( elem, name, data ) {
12063		return dataPriv.access( elem, name, data );
12064	},
12065
12066	_removeData: function( elem, name ) {
12067		dataPriv.remove( elem, name );
12068	}
12069} );
12070
12071jQuery.fn.extend( {
12072	data: function( key, value ) {
12073		var i, name, data,
12074			elem = this[ 0 ],
12075			attrs = elem && elem.attributes;
12076
12077		// Gets all values
12078		if ( key === undefined ) {
12079			if ( this.length ) {
12080				data = dataUser.get( elem );
12081
12082				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
12083					i = attrs.length;
12084					while ( i-- ) {
12085
12086						// Support: IE 11 only
12087						// The attrs elements can be null (trac-14894)
12088						if ( attrs[ i ] ) {
12089							name = attrs[ i ].name;
12090							if ( name.indexOf( "data-" ) === 0 ) {
12091								name = camelCase( name.slice( 5 ) );
12092								dataAttr( elem, name, data[ name ] );
12093							}
12094						}
12095					}
12096					dataPriv.set( elem, "hasDataAttrs", true );
12097				}
12098			}
12099
12100			return data;
12101		}
12102
12103		// Sets multiple values
12104		if ( typeof key === "object" ) {
12105			return this.each( function() {
12106				dataUser.set( this, key );
12107			} );
12108		}
12109
12110		return access( this, function( value ) {
12111			var data;
12112
12113			// The calling jQuery object (element matches) is not empty
12114			// (and therefore has an element appears at this[ 0 ]) and the
12115			// `value` parameter was not undefined. An empty jQuery object
12116			// will result in `undefined` for elem = this[ 0 ] which will
12117			// throw an exception if an attempt to read a data cache is made.
12118			if ( elem && value === undefined ) {
12119
12120				// Attempt to get data from the cache
12121				// The key will always be camelCased in Data
12122				data = dataUser.get( elem, key );
12123				if ( data !== undefined ) {
12124					return data;
12125				}
12126
12127				// Attempt to "discover" the data in
12128				// HTML5 custom data-* attrs
12129				data = dataAttr( elem, key );
12130				if ( data !== undefined ) {
12131					return data;
12132				}
12133
12134				// We tried really hard, but the data doesn't exist.
12135				return;
12136			}
12137
12138			// Set the data...
12139			this.each( function() {
12140
12141				// We always store the camelCased key
12142				dataUser.set( this, key, value );
12143			} );
12144		}, null, value, arguments.length > 1, null, true );
12145	},
12146
12147	removeData: function( key ) {
12148		return this.each( function() {
12149			dataUser.remove( this, key );
12150		} );
12151	}
12152} );
12153
12154
12155jQuery.extend( {
12156	queue: function( elem, type, data ) {
12157		var queue;
12158
12159		if ( elem ) {
12160			type = ( type || "fx" ) + "queue";
12161			queue = dataPriv.get( elem, type );
12162
12163			// Speed up dequeue by getting out quickly if this is just a lookup
12164			if ( data ) {
12165				if ( !queue || Array.isArray( data ) ) {
12166					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
12167				} else {
12168					queue.push( data );
12169				}
12170			}
12171			return queue || [];
12172		}
12173	},
12174
12175	dequeue: function( elem, type ) {
12176		type = type || "fx";
12177
12178		var queue = jQuery.queue( elem, type ),
12179			startLength = queue.length,
12180			fn = queue.shift(),
12181			hooks = jQuery._queueHooks( elem, type ),
12182			next = function() {
12183				jQuery.dequeue( elem, type );
12184			};
12185
12186		// If the fx queue is dequeued, always remove the progress sentinel
12187		if ( fn === "inprogress" ) {
12188			fn = queue.shift();
12189			startLength--;
12190		}
12191
12192		if ( fn ) {
12193
12194			// Add a progress sentinel to prevent the fx queue from being
12195			// automatically dequeued
12196			if ( type === "fx" ) {
12197				queue.unshift( "inprogress" );
12198			}
12199
12200			// Clear up the last queue stop function
12201			delete hooks.stop;
12202			fn.call( elem, next, hooks );
12203		}
12204
12205		if ( !startLength && hooks ) {
12206			hooks.empty.fire();
12207		}
12208	},
12209
12210	// Not public - generate a queueHooks object, or return the current one
12211	_queueHooks: function( elem, type ) {
12212		var key = type + "queueHooks";
12213		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
12214			empty: jQuery.Callbacks( "once memory" ).add( function() {
12215				dataPriv.remove( elem, [ type + "queue", key ] );
12216			} )
12217		} );
12218	}
12219} );
12220
12221jQuery.fn.extend( {
12222	queue: function( type, data ) {
12223		var setter = 2;
12224
12225		if ( typeof type !== "string" ) {
12226			data = type;
12227			type = "fx";
12228			setter--;
12229		}
12230
12231		if ( arguments.length < setter ) {
12232			return jQuery.queue( this[ 0 ], type );
12233		}
12234
12235		return data === undefined ?
12236			this :
12237			this.each( function() {
12238				var queue = jQuery.queue( this, type, data );
12239
12240				// Ensure a hooks for this queue
12241				jQuery._queueHooks( this, type );
12242
12243				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
12244					jQuery.dequeue( this, type );
12245				}
12246			} );
12247	},
12248	dequeue: function( type ) {
12249		return this.each( function() {
12250			jQuery.dequeue( this, type );
12251		} );
12252	},
12253	clearQueue: function( type ) {
12254		return this.queue( type || "fx", [] );
12255	},
12256
12257	// Get a promise resolved when queues of a certain type
12258	// are emptied (fx is the type by default)
12259	promise: function( type, obj ) {
12260		var tmp,
12261			count = 1,
12262			defer = jQuery.Deferred(),
12263			elements = this,
12264			i = this.length,
12265			resolve = function() {
12266				if ( !( --count ) ) {
12267					defer.resolveWith( elements, [ elements ] );
12268				}
12269			};
12270
12271		if ( typeof type !== "string" ) {
12272			obj = type;
12273			type = undefined;
12274		}
12275		type = type || "fx";
12276
12277		while ( i-- ) {
12278			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
12279			if ( tmp && tmp.empty ) {
12280				count++;
12281				tmp.empty.add( resolve );
12282			}
12283		}
12284		resolve();
12285		return defer.promise( obj );
12286	}
12287} );
12288var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
12289
12290var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
12291
12292
12293var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
12294
12295var documentElement = document.documentElement;
12296
12297
12298
12299	var isAttached = function( elem ) {
12300			return jQuery.contains( elem.ownerDocument, elem );
12301		},
12302		composed = { composed: true };
12303
12304	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
12305	// Check attachment across shadow DOM boundaries when possible (gh-3504)
12306	// Support: iOS 10.0-10.2 only
12307	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
12308	// leading to errors. We need to check for `getRootNode`.
12309	if ( documentElement.getRootNode ) {
12310		isAttached = function( elem ) {
12311			return jQuery.contains( elem.ownerDocument, elem ) ||
12312				elem.getRootNode( composed ) === elem.ownerDocument;
12313		};
12314	}
12315var isHiddenWithinTree = function( elem, el ) {
12316
12317		// isHiddenWithinTree might be called from jQuery#filter function;
12318		// in that case, element will be second argument
12319		elem = el || elem;
12320
12321		// Inline style trumps all
12322		return elem.style.display === "none" ||
12323			elem.style.display === "" &&
12324
12325			// Otherwise, check computed style
12326			// Support: Firefox <=43 - 45
12327			// Disconnected elements can have computed display: none, so first confirm that elem is
12328			// in the document.
12329			isAttached( elem ) &&
12330
12331			jQuery.css( elem, "display" ) === "none";
12332	};
12333
12334
12335
12336function adjustCSS( elem, prop, valueParts, tween ) {
12337	var adjusted, scale,
12338		maxIterations = 20,
12339		currentValue = tween ?
12340			function() {
12341				return tween.cur();
12342			} :
12343			function() {
12344				return jQuery.css( elem, prop, "" );
12345			},
12346		initial = currentValue(),
12347		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
12348
12349		// Starting value computation is required for potential unit mismatches
12350		initialInUnit = elem.nodeType &&
12351			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
12352			rcssNum.exec( jQuery.css( elem, prop ) );
12353
12354	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
12355
12356		// Support: Firefox <=54
12357		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
12358		initial = initial / 2;
12359
12360		// Trust units reported by jQuery.css
12361		unit = unit || initialInUnit[ 3 ];
12362
12363		// Iteratively approximate from a nonzero starting point
12364		initialInUnit = +initial || 1;
12365
12366		while ( maxIterations-- ) {
12367
12368			// Evaluate and update our best guess (doubling guesses that zero out).
12369			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
12370			jQuery.style( elem, prop, initialInUnit + unit );
12371			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
12372				maxIterations = 0;
12373			}
12374			initialInUnit = initialInUnit / scale;
12375
12376		}
12377
12378		initialInUnit = initialInUnit * 2;
12379		jQuery.style( elem, prop, initialInUnit + unit );
12380
12381		// Make sure we update the tween properties later on
12382		valueParts = valueParts || [];
12383	}
12384
12385	if ( valueParts ) {
12386		initialInUnit = +initialInUnit || +initial || 0;
12387
12388		// Apply relative offset (+=/-=) if specified
12389		adjusted = valueParts[ 1 ] ?
12390			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
12391			+valueParts[ 2 ];
12392		if ( tween ) {
12393			tween.unit = unit;
12394			tween.start = initialInUnit;
12395			tween.end = adjusted;
12396		}
12397	}
12398	return adjusted;
12399}
12400
12401
12402var defaultDisplayMap = {};
12403
12404function getDefaultDisplay( elem ) {
12405	var temp,
12406		doc = elem.ownerDocument,
12407		nodeName = elem.nodeName,
12408		display = defaultDisplayMap[ nodeName ];
12409
12410	if ( display ) {
12411		return display;
12412	}
12413
12414	temp = doc.body.appendChild( doc.createElement( nodeName ) );
12415	display = jQuery.css( temp, "display" );
12416
12417	temp.parentNode.removeChild( temp );
12418
12419	if ( display === "none" ) {
12420		display = "block";
12421	}
12422	defaultDisplayMap[ nodeName ] = display;
12423
12424	return display;
12425}
12426
12427function showHide( elements, show ) {
12428	var display, elem,
12429		values = [],
12430		index = 0,
12431		length = elements.length;
12432
12433	// Determine new display value for elements that need to change
12434	for ( ; index < length; index++ ) {
12435		elem = elements[ index ];
12436		if ( !elem.style ) {
12437			continue;
12438		}
12439
12440		display = elem.style.display;
12441		if ( show ) {
12442
12443			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
12444			// check is required in this first loop unless we have a nonempty display value (either
12445			// inline or about-to-be-restored)
12446			if ( display === "none" ) {
12447				values[ index ] = dataPriv.get( elem, "display" ) || null;
12448				if ( !values[ index ] ) {
12449					elem.style.display = "";
12450				}
12451			}
12452			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
12453				values[ index ] = getDefaultDisplay( elem );
12454			}
12455		} else {
12456			if ( display !== "none" ) {
12457				values[ index ] = "none";
12458
12459				// Remember what we're overwriting
12460				dataPriv.set( elem, "display", display );
12461			}
12462		}
12463	}
12464
12465	// Set the display of the elements in a second loop to avoid constant reflow
12466	for ( index = 0; index < length; index++ ) {
12467		if ( values[ index ] != null ) {
12468			elements[ index ].style.display = values[ index ];
12469		}
12470	}
12471
12472	return elements;
12473}
12474
12475jQuery.fn.extend( {
12476	show: function() {
12477		return showHide( this, true );
12478	},
12479	hide: function() {
12480		return showHide( this );
12481	},
12482	toggle: function( state ) {
12483		if ( typeof state === "boolean" ) {
12484			return state ? this.show() : this.hide();
12485		}
12486
12487		return this.each( function() {
12488			if ( isHiddenWithinTree( this ) ) {
12489				jQuery( this ).show();
12490			} else {
12491				jQuery( this ).hide();
12492			}
12493		} );
12494	}
12495} );
12496var rcheckableType = ( /^(?:checkbox|radio)$/i );
12497
12498var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
12499
12500var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
12501
12502
12503
12504( function() {
12505	var fragment = document.createDocumentFragment(),
12506		div = fragment.appendChild( document.createElement( "div" ) ),
12507		input = document.createElement( "input" );
12508
12509	// Support: Android 4.0 - 4.3 only
12510	// Check state lost if the name is set (trac-11217)
12511	// Support: Windows Web Apps (WWA)
12512	// `name` and `type` must use .setAttribute for WWA (trac-14901)
12513	input.setAttribute( "type", "radio" );
12514	input.setAttribute( "checked", "checked" );
12515	input.setAttribute( "name", "t" );
12516
12517	div.appendChild( input );
12518
12519	// Support: Android <=4.1 only
12520	// Older WebKit doesn't clone checked state correctly in fragments
12521	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
12522
12523	// Support: IE <=11 only
12524	// Make sure textarea (and checkbox) defaultValue is properly cloned
12525	div.innerHTML = "<textarea>x</textarea>";
12526	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
12527
12528	// Support: IE <=9 only
12529	// IE <=9 replaces <option> tags with their contents when inserted outside of
12530	// the select element.
12531	div.innerHTML = "<option></option>";
12532	support.option = !!div.lastChild;
12533} )();
12534
12535
12536// We have to close these tags to support XHTML (trac-13200)
12537var wrapMap = {
12538
12539	// XHTML parsers do not magically insert elements in the
12540	// same way that tag soup parsers do. So we cannot shorten
12541	// this by omitting <tbody> or other required elements.
12542	thead: [ 1, "<table>", "</table>" ],
12543	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
12544	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
12545	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
12546
12547	_default: [ 0, "", "" ]
12548};
12549
12550wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
12551wrapMap.th = wrapMap.td;
12552
12553// Support: IE <=9 only
12554if ( !support.option ) {
12555	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
12556}
12557
12558
12559function getAll( context, tag ) {
12560
12561	// Support: IE <=9 - 11 only
12562	// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
12563	var ret;
12564
12565	if ( typeof context.getElementsByTagName !== "undefined" ) {
12566		ret = context.getElementsByTagName( tag || "*" );
12567
12568	} else if ( typeof context.querySelectorAll !== "undefined" ) {
12569		ret = context.querySelectorAll( tag || "*" );
12570
12571	} else {
12572		ret = [];
12573	}
12574
12575	if ( tag === undefined || tag && nodeName( context, tag ) ) {
12576		return jQuery.merge( [ context ], ret );
12577	}
12578
12579	return ret;
12580}
12581
12582
12583// Mark scripts as having already been evaluated
12584function setGlobalEval( elems, refElements ) {
12585	var i = 0,
12586		l = elems.length;
12587
12588	for ( ; i < l; i++ ) {
12589		dataPriv.set(
12590			elems[ i ],
12591			"globalEval",
12592			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
12593		);
12594	}
12595}
12596
12597
12598var rhtml = /<|&#?\w+;/;
12599
12600function buildFragment( elems, context, scripts, selection, ignored ) {
12601	var elem, tmp, tag, wrap, attached, j,
12602		fragment = context.createDocumentFragment(),
12603		nodes = [],
12604		i = 0,
12605		l = elems.length;
12606
12607	for ( ; i < l; i++ ) {
12608		elem = elems[ i ];
12609
12610		if ( elem || elem === 0 ) {
12611
12612			// Add nodes directly
12613			if ( toType( elem ) === "object" ) {
12614
12615				// Support: Android <=4.0 only, PhantomJS 1 only
12616				// push.apply(_, arraylike) throws on ancient WebKit
12617				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
12618
12619			// Convert non-html into a text node
12620			} else if ( !rhtml.test( elem ) ) {
12621				nodes.push( context.createTextNode( elem ) );
12622
12623			// Convert html into DOM nodes
12624			} else {
12625				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
12626
12627				// Deserialize a standard representation
12628				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
12629				wrap = wrapMap[ tag ] || wrapMap._default;
12630				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
12631
12632				// Descend through wrappers to the right content
12633				j = wrap[ 0 ];
12634				while ( j-- ) {
12635					tmp = tmp.lastChild;
12636				}
12637
12638				// Support: Android <=4.0 only, PhantomJS 1 only
12639				// push.apply(_, arraylike) throws on ancient WebKit
12640				jQuery.merge( nodes, tmp.childNodes );
12641
12642				// Remember the top-level container
12643				tmp = fragment.firstChild;
12644
12645				// Ensure the created nodes are orphaned (trac-12392)
12646				tmp.textContent = "";
12647			}
12648		}
12649	}
12650
12651	// Remove wrapper from fragment
12652	fragment.textContent = "";
12653
12654	i = 0;
12655	while ( ( elem = nodes[ i++ ] ) ) {
12656
12657		// Skip elements already in the context collection (trac-4087)
12658		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
12659			if ( ignored ) {
12660				ignored.push( elem );
12661			}
12662			continue;
12663		}
12664
12665		attached = isAttached( elem );
12666
12667		// Append to fragment
12668		tmp = getAll( fragment.appendChild( elem ), "script" );
12669
12670		// Preserve script evaluation history
12671		if ( attached ) {
12672			setGlobalEval( tmp );
12673		}
12674
12675		// Capture executables
12676		if ( scripts ) {
12677			j = 0;
12678			while ( ( elem = tmp[ j++ ] ) ) {
12679				if ( rscriptType.test( elem.type || "" ) ) {
12680					scripts.push( elem );
12681				}
12682			}
12683		}
12684	}
12685
12686	return fragment;
12687}
12688
12689
12690var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
12691
12692function returnTrue() {
12693	return true;
12694}
12695
12696function returnFalse() {
12697	return false;
12698}
12699
12700function on( elem, types, selector, data, fn, one ) {
12701	var origFn, type;
12702
12703	// Types can be a map of types/handlers
12704	if ( typeof types === "object" ) {
12705
12706		// ( types-Object, selector, data )
12707		if ( typeof selector !== "string" ) {
12708
12709			// ( types-Object, data )
12710			data = data || selector;
12711			selector = undefined;
12712		}
12713		for ( type in types ) {
12714			on( elem, type, selector, data, types[ type ], one );
12715		}
12716		return elem;
12717	}
12718
12719	if ( data == null && fn == null ) {
12720
12721		// ( types, fn )
12722		fn = selector;
12723		data = selector = undefined;
12724	} else if ( fn == null ) {
12725		if ( typeof selector === "string" ) {
12726
12727			// ( types, selector, fn )
12728			fn = data;
12729			data = undefined;
12730		} else {
12731
12732			// ( types, data, fn )
12733			fn = data;
12734			data = selector;
12735			selector = undefined;
12736		}
12737	}
12738	if ( fn === false ) {
12739		fn = returnFalse;
12740	} else if ( !fn ) {
12741		return elem;
12742	}
12743
12744	if ( one === 1 ) {
12745		origFn = fn;
12746		fn = function( event ) {
12747
12748			// Can use an empty set, since event contains the info
12749			jQuery().off( event );
12750			return origFn.apply( this, arguments );
12751		};
12752
12753		// Use same guid so caller can remove using origFn
12754		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
12755	}
12756	return elem.each( function() {
12757		jQuery.event.add( this, types, fn, data, selector );
12758	} );
12759}
12760
12761/*
12762 * Helper functions for managing events -- not part of the public interface.
12763 * Props to Dean Edwards' addEvent library for many of the ideas.
12764 */
12765jQuery.event = {
12766
12767	global: {},
12768
12769	add: function( elem, types, handler, data, selector ) {
12770
12771		var handleObjIn, eventHandle, tmp,
12772			events, t, handleObj,
12773			special, handlers, type, namespaces, origType,
12774			elemData = dataPriv.get( elem );
12775
12776		// Only attach events to objects that accept data
12777		if ( !acceptData( elem ) ) {
12778			return;
12779		}
12780
12781		// Caller can pass in an object of custom data in lieu of the handler
12782		if ( handler.handler ) {
12783			handleObjIn = handler;
12784			handler = handleObjIn.handler;
12785			selector = handleObjIn.selector;
12786		}
12787
12788		// Ensure that invalid selectors throw exceptions at attach time
12789		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
12790		if ( selector ) {
12791			jQuery.find.matchesSelector( documentElement, selector );
12792		}
12793
12794		// Make sure that the handler has a unique ID, used to find/remove it later
12795		if ( !handler.guid ) {
12796			handler.guid = jQuery.guid++;
12797		}
12798
12799		// Init the element's event structure and main handler, if this is the first
12800		if ( !( events = elemData.events ) ) {
12801			events = elemData.events = Object.create( null );
12802		}
12803		if ( !( eventHandle = elemData.handle ) ) {
12804			eventHandle = elemData.handle = function( e ) {
12805
12806				// Discard the second event of a jQuery.event.trigger() and
12807				// when an event is called after a page has unloaded
12808				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
12809					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
12810			};
12811		}
12812
12813		// Handle multiple events separated by a space
12814		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
12815		t = types.length;
12816		while ( t-- ) {
12817			tmp = rtypenamespace.exec( types[ t ] ) || [];
12818			type = origType = tmp[ 1 ];
12819			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
12820
12821			// There *must* be a type, no attaching namespace-only handlers
12822			if ( !type ) {
12823				continue;
12824			}
12825
12826			// If event changes its type, use the special event handlers for the changed type
12827			special = jQuery.event.special[ type ] || {};
12828
12829			// If selector defined, determine special event api type, otherwise given type
12830			type = ( selector ? special.delegateType : special.bindType ) || type;
12831
12832			// Update special based on newly reset type
12833			special = jQuery.event.special[ type ] || {};
12834
12835			// handleObj is passed to all event handlers
12836			handleObj = jQuery.extend( {
12837				type: type,
12838				origType: origType,
12839				data: data,
12840				handler: handler,
12841				guid: handler.guid,
12842				selector: selector,
12843				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
12844				namespace: namespaces.join( "." )
12845			}, handleObjIn );
12846
12847			// Init the event handler queue if we're the first
12848			if ( !( handlers = events[ type ] ) ) {
12849				handlers = events[ type ] = [];
12850				handlers.delegateCount = 0;
12851
12852				// Only use addEventListener if the special events handler returns false
12853				if ( !special.setup ||
12854					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
12855
12856					if ( elem.addEventListener ) {
12857						elem.addEventListener( type, eventHandle );
12858					}
12859				}
12860			}
12861
12862			if ( special.add ) {
12863				special.add.call( elem, handleObj );
12864
12865				if ( !handleObj.handler.guid ) {
12866					handleObj.handler.guid = handler.guid;
12867				}
12868			}
12869
12870			// Add to the element's handler list, delegates in front
12871			if ( selector ) {
12872				handlers.splice( handlers.delegateCount++, 0, handleObj );
12873			} else {
12874				handlers.push( handleObj );
12875			}
12876
12877			// Keep track of which events have ever been used, for event optimization
12878			jQuery.event.global[ type ] = true;
12879		}
12880
12881	},
12882
12883	// Detach an event or set of events from an element
12884	remove: function( elem, types, handler, selector, mappedTypes ) {
12885
12886		var j, origCount, tmp,
12887			events, t, handleObj,
12888			special, handlers, type, namespaces, origType,
12889			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
12890
12891		if ( !elemData || !( events = elemData.events ) ) {
12892			return;
12893		}
12894
12895		// Once for each type.namespace in types; type may be omitted
12896		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
12897		t = types.length;
12898		while ( t-- ) {
12899			tmp = rtypenamespace.exec( types[ t ] ) || [];
12900			type = origType = tmp[ 1 ];
12901			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
12902
12903			// Unbind all events (on this namespace, if provided) for the element
12904			if ( !type ) {
12905				for ( type in events ) {
12906					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
12907				}
12908				continue;
12909			}
12910
12911			special = jQuery.event.special[ type ] || {};
12912			type = ( selector ? special.delegateType : special.bindType ) || type;
12913			handlers = events[ type ] || [];
12914			tmp = tmp[ 2 ] &&
12915				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
12916
12917			// Remove matching events
12918			origCount = j = handlers.length;
12919			while ( j-- ) {
12920				handleObj = handlers[ j ];
12921
12922				if ( ( mappedTypes || origType === handleObj.origType ) &&
12923					( !handler || handler.guid === handleObj.guid ) &&
12924					( !tmp || tmp.test( handleObj.namespace ) ) &&
12925					( !selector || selector === handleObj.selector ||
12926						selector === "**" && handleObj.selector ) ) {
12927					handlers.splice( j, 1 );
12928
12929					if ( handleObj.selector ) {
12930						handlers.delegateCount--;
12931					}
12932					if ( special.remove ) {
12933						special.remove.call( elem, handleObj );
12934					}
12935				}
12936			}
12937
12938			// Remove generic event handler if we removed something and no more handlers exist
12939			// (avoids potential for endless recursion during removal of special event handlers)
12940			if ( origCount && !handlers.length ) {
12941				if ( !special.teardown ||
12942					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
12943
12944					jQuery.removeEvent( elem, type, elemData.handle );
12945				}
12946
12947				delete events[ type ];
12948			}
12949		}
12950
12951		// Remove data and the expando if it's no longer used
12952		if ( jQuery.isEmptyObject( events ) ) {
12953			dataPriv.remove( elem, "handle events" );
12954		}
12955	},
12956
12957	dispatch: function( nativeEvent ) {
12958
12959		var i, j, ret, matched, handleObj, handlerQueue,
12960			args = new Array( arguments.length ),
12961
12962			// Make a writable jQuery.Event from the native event object
12963			event = jQuery.event.fix( nativeEvent ),
12964
12965			handlers = (
12966				dataPriv.get( this, "events" ) || Object.create( null )
12967			)[ event.type ] || [],
12968			special = jQuery.event.special[ event.type ] || {};
12969
12970		// Use the fix-ed jQuery.Event rather than the (read-only) native event
12971		args[ 0 ] = event;
12972
12973		for ( i = 1; i < arguments.length; i++ ) {
12974			args[ i ] = arguments[ i ];
12975		}
12976
12977		event.delegateTarget = this;
12978
12979		// Call the preDispatch hook for the mapped type, and let it bail if desired
12980		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
12981			return;
12982		}
12983
12984		// Determine handlers
12985		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
12986
12987		// Run delegates first; they may want to stop propagation beneath us
12988		i = 0;
12989		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
12990			event.currentTarget = matched.elem;
12991
12992			j = 0;
12993			while ( ( handleObj = matched.handlers[ j++ ] ) &&
12994				!event.isImmediatePropagationStopped() ) {
12995
12996				// If the event is namespaced, then each handler is only invoked if it is
12997				// specially universal or its namespaces are a superset of the event's.
12998				if ( !event.rnamespace || handleObj.namespace === false ||
12999					event.rnamespace.test( handleObj.namespace ) ) {
13000
13001					event.handleObj = handleObj;
13002					event.data = handleObj.data;
13003
13004					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
13005						handleObj.handler ).apply( matched.elem, args );
13006
13007					if ( ret !== undefined ) {
13008						if ( ( event.result = ret ) === false ) {
13009							event.preventDefault();
13010							event.stopPropagation();
13011						}
13012					}
13013				}
13014			}
13015		}
13016
13017		// Call the postDispatch hook for the mapped type
13018		if ( special.postDispatch ) {
13019			special.postDispatch.call( this, event );
13020		}
13021
13022		return event.result;
13023	},
13024
13025	handlers: function( event, handlers ) {
13026		var i, handleObj, sel, matchedHandlers, matchedSelectors,
13027			handlerQueue = [],
13028			delegateCount = handlers.delegateCount,
13029			cur = event.target;
13030
13031		// Find delegate handlers
13032		if ( delegateCount &&
13033
13034			// Support: IE <=9
13035			// Black-hole SVG <use> instance trees (trac-13180)
13036			cur.nodeType &&
13037
13038			// Support: Firefox <=42
13039			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
13040			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
13041			// Support: IE 11 only
13042			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
13043			!( event.type === "click" && event.button >= 1 ) ) {
13044
13045			for ( ; cur !== this; cur = cur.parentNode || this ) {
13046
13047				// Don't check non-elements (trac-13208)
13048				// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
13049				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
13050					matchedHandlers = [];
13051					matchedSelectors = {};
13052					for ( i = 0; i < delegateCount; i++ ) {
13053						handleObj = handlers[ i ];
13054
13055						// Don't conflict with Object.prototype properties (trac-13203)
13056						sel = handleObj.selector + " ";
13057
13058						if ( matchedSelectors[ sel ] === undefined ) {
13059							matchedSelectors[ sel ] = handleObj.needsContext ?
13060								jQuery( sel, this ).index( cur ) > -1 :
13061								jQuery.find( sel, this, null, [ cur ] ).length;
13062						}
13063						if ( matchedSelectors[ sel ] ) {
13064							matchedHandlers.push( handleObj );
13065						}
13066					}
13067					if ( matchedHandlers.length ) {
13068						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
13069					}
13070				}
13071			}
13072		}
13073
13074		// Add the remaining (directly-bound) handlers
13075		cur = this;
13076		if ( delegateCount < handlers.length ) {
13077			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
13078		}
13079
13080		return handlerQueue;
13081	},
13082
13083	addProp: function( name, hook ) {
13084		Object.defineProperty( jQuery.Event.prototype, name, {
13085			enumerable: true,
13086			configurable: true,
13087
13088			get: isFunction( hook ) ?
13089				function() {
13090					if ( this.originalEvent ) {
13091						return hook( this.originalEvent );
13092					}
13093				} :
13094				function() {
13095					if ( this.originalEvent ) {
13096						return this.originalEvent[ name ];
13097					}
13098				},
13099
13100			set: function( value ) {
13101				Object.defineProperty( this, name, {
13102					enumerable: true,
13103					configurable: true,
13104					writable: true,
13105					value: value
13106				} );
13107			}
13108		} );
13109	},
13110
13111	fix: function( originalEvent ) {
13112		return originalEvent[ jQuery.expando ] ?
13113			originalEvent :
13114			new jQuery.Event( originalEvent );
13115	},
13116
13117	special: {
13118		load: {
13119
13120			// Prevent triggered image.load events from bubbling to window.load
13121			noBubble: true
13122		},
13123		click: {
13124
13125			// Utilize native event to ensure correct state for checkable inputs
13126			setup: function( data ) {
13127
13128				// For mutual compressibility with _default, replace `this` access with a local var.
13129				// `|| data` is dead code meant only to preserve the variable through minification.
13130				var el = this || data;
13131
13132				// Claim the first handler
13133				if ( rcheckableType.test( el.type ) &&
13134					el.click && nodeName( el, "input" ) ) {
13135
13136					// dataPriv.set( el, "click", ... )
13137					leverageNative( el, "click", true );
13138				}
13139
13140				// Return false to allow normal processing in the caller
13141				return false;
13142			},
13143			trigger: function( data ) {
13144
13145				// For mutual compressibility with _default, replace `this` access with a local var.
13146				// `|| data` is dead code meant only to preserve the variable through minification.
13147				var el = this || data;
13148
13149				// Force setup before triggering a click
13150				if ( rcheckableType.test( el.type ) &&
13151					el.click && nodeName( el, "input" ) ) {
13152
13153					leverageNative( el, "click" );
13154				}
13155
13156				// Return non-false to allow normal event-path propagation
13157				return true;
13158			},
13159
13160			// For cross-browser consistency, suppress native .click() on links
13161			// Also prevent it if we're currently inside a leveraged native-event stack
13162			_default: function( event ) {
13163				var target = event.target;
13164				return rcheckableType.test( target.type ) &&
13165					target.click && nodeName( target, "input" ) &&
13166					dataPriv.get( target, "click" ) ||
13167					nodeName( target, "a" );
13168			}
13169		},
13170
13171		beforeunload: {
13172			postDispatch: function( event ) {
13173
13174				// Support: Firefox 20+
13175				// Firefox doesn't alert if the returnValue field is not set.
13176				if ( event.result !== undefined && event.originalEvent ) {
13177					event.originalEvent.returnValue = event.result;
13178				}
13179			}
13180		}
13181	}
13182};
13183
13184// Ensure the presence of an event listener that handles manually-triggered
13185// synthetic events by interrupting progress until reinvoked in response to
13186// *native* events that it fires directly, ensuring that state changes have
13187// already occurred before other listeners are invoked.
13188function leverageNative( el, type, isSetup ) {
13189
13190	// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add
13191	if ( !isSetup ) {
13192		if ( dataPriv.get( el, type ) === undefined ) {
13193			jQuery.event.add( el, type, returnTrue );
13194		}
13195		return;
13196	}
13197
13198	// Register the controller as a special universal handler for all event namespaces
13199	dataPriv.set( el, type, false );
13200	jQuery.event.add( el, type, {
13201		namespace: false,
13202		handler: function( event ) {
13203			var result,
13204				saved = dataPriv.get( this, type );
13205
13206			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
13207
13208				// Interrupt processing of the outer synthetic .trigger()ed event
13209				if ( !saved ) {
13210
13211					// Store arguments for use when handling the inner native event
13212					// There will always be at least one argument (an event object), so this array
13213					// will not be confused with a leftover capture object.
13214					saved = slice.call( arguments );
13215					dataPriv.set( this, type, saved );
13216
13217					// Trigger the native event and capture its result
13218					this[ type ]();
13219					result = dataPriv.get( this, type );
13220					dataPriv.set( this, type, false );
13221
13222					if ( saved !== result ) {
13223
13224						// Cancel the outer synthetic event
13225						event.stopImmediatePropagation();
13226						event.preventDefault();
13227
13228						return result;
13229					}
13230
13231				// If this is an inner synthetic event for an event with a bubbling surrogate
13232				// (focus or blur), assume that the surrogate already propagated from triggering
13233				// the native event and prevent that from happening again here.
13234				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
13235				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
13236				// less bad than duplication.
13237				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
13238					event.stopPropagation();
13239				}
13240
13241			// If this is a native event triggered above, everything is now in order
13242			// Fire an inner synthetic event with the original arguments
13243			} else if ( saved ) {
13244
13245				// ...and capture the result
13246				dataPriv.set( this, type, jQuery.event.trigger(
13247					saved[ 0 ],
13248					saved.slice( 1 ),
13249					this
13250				) );
13251
13252				// Abort handling of the native event by all jQuery handlers while allowing
13253				// native handlers on the same element to run. On target, this is achieved
13254				// by stopping immediate propagation just on the jQuery event. However,
13255				// the native event is re-wrapped by a jQuery one on each level of the
13256				// propagation so the only way to stop it for jQuery is to stop it for
13257				// everyone via native `stopPropagation()`. This is not a problem for
13258				// focus/blur which don't bubble, but it does also stop click on checkboxes
13259				// and radios. We accept this limitation.
13260				event.stopPropagation();
13261				event.isImmediatePropagationStopped = returnTrue;
13262			}
13263		}
13264	} );
13265}
13266
13267jQuery.removeEvent = function( elem, type, handle ) {
13268
13269	// This "if" is needed for plain objects
13270	if ( elem.removeEventListener ) {
13271		elem.removeEventListener( type, handle );
13272	}
13273};
13274
13275jQuery.Event = function( src, props ) {
13276
13277	// Allow instantiation without the 'new' keyword
13278	if ( !( this instanceof jQuery.Event ) ) {
13279		return new jQuery.Event( src, props );
13280	}
13281
13282	// Event object
13283	if ( src && src.type ) {
13284		this.originalEvent = src;
13285		this.type = src.type;
13286
13287		// Events bubbling up the document may have been marked as prevented
13288		// by a handler lower down the tree; reflect the correct value.
13289		this.isDefaultPrevented = src.defaultPrevented ||
13290				src.defaultPrevented === undefined &&
13291
13292				// Support: Android <=2.3 only
13293				src.returnValue === false ?
13294			returnTrue :
13295			returnFalse;
13296
13297		// Create target properties
13298		// Support: Safari <=6 - 7 only
13299		// Target should not be a text node (trac-504, trac-13143)
13300		this.target = ( src.target && src.target.nodeType === 3 ) ?
13301			src.target.parentNode :
13302			src.target;
13303
13304		this.currentTarget = src.currentTarget;
13305		this.relatedTarget = src.relatedTarget;
13306
13307	// Event type
13308	} else {
13309		this.type = src;
13310	}
13311
13312	// Put explicitly provided properties onto the event object
13313	if ( props ) {
13314		jQuery.extend( this, props );
13315	}
13316
13317	// Create a timestamp if incoming event doesn't have one
13318	this.timeStamp = src && src.timeStamp || Date.now();
13319
13320	// Mark it as fixed
13321	this[ jQuery.expando ] = true;
13322};
13323
13324// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
13325// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
13326jQuery.Event.prototype = {
13327	constructor: jQuery.Event,
13328	isDefaultPrevented: returnFalse,
13329	isPropagationStopped: returnFalse,
13330	isImmediatePropagationStopped: returnFalse,
13331	isSimulated: false,
13332
13333	preventDefault: function() {
13334		var e = this.originalEvent;
13335
13336		this.isDefaultPrevented = returnTrue;
13337
13338		if ( e && !this.isSimulated ) {
13339			e.preventDefault();
13340		}
13341	},
13342	stopPropagation: function() {
13343		var e = this.originalEvent;
13344
13345		this.isPropagationStopped = returnTrue;
13346
13347		if ( e && !this.isSimulated ) {
13348			e.stopPropagation();
13349		}
13350	},
13351	stopImmediatePropagation: function() {
13352		var e = this.originalEvent;
13353
13354		this.isImmediatePropagationStopped = returnTrue;
13355
13356		if ( e && !this.isSimulated ) {
13357			e.stopImmediatePropagation();
13358		}
13359
13360		this.stopPropagation();
13361	}
13362};
13363
13364// Includes all common event props including KeyEvent and MouseEvent specific props
13365jQuery.each( {
13366	altKey: true,
13367	bubbles: true,
13368	cancelable: true,
13369	changedTouches: true,
13370	ctrlKey: true,
13371	detail: true,
13372	eventPhase: true,
13373	metaKey: true,
13374	pageX: true,
13375	pageY: true,
13376	shiftKey: true,
13377	view: true,
13378	"char": true,
13379	code: true,
13380	charCode: true,
13381	key: true,
13382	keyCode: true,
13383	button: true,
13384	buttons: true,
13385	clientX: true,
13386	clientY: true,
13387	offsetX: true,
13388	offsetY: true,
13389	pointerId: true,
13390	pointerType: true,
13391	screenX: true,
13392	screenY: true,
13393	targetTouches: true,
13394	toElement: true,
13395	touches: true,
13396	which: true
13397}, jQuery.event.addProp );
13398
13399jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
13400
13401	function focusMappedHandler( nativeEvent ) {
13402		if ( document.documentMode ) {
13403
13404			// Support: IE 11+
13405			// Attach a single focusin/focusout handler on the document while someone wants
13406			// focus/blur. This is because the former are synchronous in IE while the latter
13407			// are async. In other browsers, all those handlers are invoked synchronously.
13408
13409			// `handle` from private data would already wrap the event, but we need
13410			// to change the `type` here.
13411			var handle = dataPriv.get( this, "handle" ),
13412				event = jQuery.event.fix( nativeEvent );
13413			event.type = nativeEvent.type === "focusin" ? "focus" : "blur";
13414			event.isSimulated = true;
13415
13416			// First, handle focusin/focusout
13417			handle( nativeEvent );
13418
13419			// ...then, handle focus/blur
13420			//
13421			// focus/blur don't bubble while focusin/focusout do; simulate the former by only
13422			// invoking the handler at the lower level.
13423			if ( event.target === event.currentTarget ) {
13424
13425				// The setup part calls `leverageNative`, which, in turn, calls
13426				// `jQuery.event.add`, so event handle will already have been set
13427				// by this point.
13428				handle( event );
13429			}
13430		} else {
13431
13432			// For non-IE browsers, attach a single capturing handler on the document
13433			// while someone wants focusin/focusout.
13434			jQuery.event.simulate( delegateType, nativeEvent.target,
13435				jQuery.event.fix( nativeEvent ) );
13436		}
13437	}
13438
13439	jQuery.event.special[ type ] = {
13440
13441		// Utilize native event if possible so blur/focus sequence is correct
13442		setup: function() {
13443
13444			var attaches;
13445
13446			// Claim the first handler
13447			// dataPriv.set( this, "focus", ... )
13448			// dataPriv.set( this, "blur", ... )
13449			leverageNative( this, type, true );
13450
13451			if ( document.documentMode ) {
13452
13453				// Support: IE 9 - 11+
13454				// We use the same native handler for focusin & focus (and focusout & blur)
13455				// so we need to coordinate setup & teardown parts between those events.
13456				// Use `delegateType` as the key as `type` is already used by `leverageNative`.
13457				attaches = dataPriv.get( this, delegateType );
13458				if ( !attaches ) {
13459					this.addEventListener( delegateType, focusMappedHandler );
13460				}
13461				dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );
13462			} else {
13463
13464				// Return false to allow normal processing in the caller
13465				return false;
13466			}
13467		},
13468		trigger: function() {
13469
13470			// Force setup before trigger
13471			leverageNative( this, type );
13472
13473			// Return non-false to allow normal event-path propagation
13474			return true;
13475		},
13476
13477		teardown: function() {
13478			var attaches;
13479
13480			if ( document.documentMode ) {
13481				attaches = dataPriv.get( this, delegateType ) - 1;
13482				if ( !attaches ) {
13483					this.removeEventListener( delegateType, focusMappedHandler );
13484					dataPriv.remove( this, delegateType );
13485				} else {
13486					dataPriv.set( this, delegateType, attaches );
13487				}
13488			} else {
13489
13490				// Return false to indicate standard teardown should be applied
13491				return false;
13492			}
13493		},
13494
13495		// Suppress native focus or blur if we're currently inside
13496		// a leveraged native-event stack
13497		_default: function( event ) {
13498			return dataPriv.get( event.target, type );
13499		},
13500
13501		delegateType: delegateType
13502	};
13503
13504	// Support: Firefox <=44
13505	// Firefox doesn't have focus(in | out) events
13506	// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
13507	//
13508	// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
13509	// focus(in | out) events fire after focus & blur events,
13510	// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
13511	// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
13512	//
13513	// Support: IE 9 - 11+
13514	// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,
13515	// attach a single handler for both events in IE.
13516	jQuery.event.special[ delegateType ] = {
13517		setup: function() {
13518
13519			// Handle: regular nodes (via `this.ownerDocument`), window
13520			// (via `this.document`) & document (via `this`).
13521			var doc = this.ownerDocument || this.document || this,
13522				dataHolder = document.documentMode ? this : doc,
13523				attaches = dataPriv.get( dataHolder, delegateType );
13524
13525			// Support: IE 9 - 11+
13526			// We use the same native handler for focusin & focus (and focusout & blur)
13527			// so we need to coordinate setup & teardown parts between those events.
13528			// Use `delegateType` as the key as `type` is already used by `leverageNative`.
13529			if ( !attaches ) {
13530				if ( document.documentMode ) {
13531					this.addEventListener( delegateType, focusMappedHandler );
13532				} else {
13533					doc.addEventListener( type, focusMappedHandler, true );
13534				}
13535			}
13536			dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );
13537		},
13538		teardown: function() {
13539			var doc = this.ownerDocument || this.document || this,
13540				dataHolder = document.documentMode ? this : doc,
13541				attaches = dataPriv.get( dataHolder, delegateType ) - 1;
13542
13543			if ( !attaches ) {
13544				if ( document.documentMode ) {
13545					this.removeEventListener( delegateType, focusMappedHandler );
13546				} else {
13547					doc.removeEventListener( type, focusMappedHandler, true );
13548				}
13549				dataPriv.remove( dataHolder, delegateType );
13550			} else {
13551				dataPriv.set( dataHolder, delegateType, attaches );
13552			}
13553		}
13554	};
13555} );
13556
13557// Create mouseenter/leave events using mouseover/out and event-time checks
13558// so that event delegation works in jQuery.
13559// Do the same for pointerenter/pointerleave and pointerover/pointerout
13560//
13561// Support: Safari 7 only
13562// Safari sends mouseenter too often; see:
13563// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
13564// for the description of the bug (it existed in older Chrome versions as well).
13565jQuery.each( {
13566	mouseenter: "mouseover",
13567	mouseleave: "mouseout",
13568	pointerenter: "pointerover",
13569	pointerleave: "pointerout"
13570}, function( orig, fix ) {
13571	jQuery.event.special[ orig ] = {
13572		delegateType: fix,
13573		bindType: fix,
13574
13575		handle: function( event ) {
13576			var ret,
13577				target = this,
13578				related = event.relatedTarget,
13579				handleObj = event.handleObj;
13580
13581			// For mouseenter/leave call the handler if related is outside the target.
13582			// NB: No relatedTarget if the mouse left/entered the browser window
13583			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
13584				event.type = handleObj.origType;
13585				ret = handleObj.handler.apply( this, arguments );
13586				event.type = fix;
13587			}
13588			return ret;
13589		}
13590	};
13591} );
13592
13593jQuery.fn.extend( {
13594
13595	on: function( types, selector, data, fn ) {
13596		return on( this, types, selector, data, fn );
13597	},
13598	one: function( types, selector, data, fn ) {
13599		return on( this, types, selector, data, fn, 1 );
13600	},
13601	off: function( types, selector, fn ) {
13602		var handleObj, type;
13603		if ( types && types.preventDefault && types.handleObj ) {
13604
13605			// ( event )  dispatched jQuery.Event
13606			handleObj = types.handleObj;
13607			jQuery( types.delegateTarget ).off(
13608				handleObj.namespace ?
13609					handleObj.origType + "." + handleObj.namespace :
13610					handleObj.origType,
13611				handleObj.selector,
13612				handleObj.handler
13613			);
13614			return this;
13615		}
13616		if ( typeof types === "object" ) {
13617
13618			// ( types-object [, selector] )
13619			for ( type in types ) {
13620				this.off( type, selector, types[ type ] );
13621			}
13622			return this;
13623		}
13624		if ( selector === false || typeof selector === "function" ) {
13625
13626			// ( types [, fn] )
13627			fn = selector;
13628			selector = undefined;
13629		}
13630		if ( fn === false ) {
13631			fn = returnFalse;
13632		}
13633		return this.each( function() {
13634			jQuery.event.remove( this, types, fn, selector );
13635		} );
13636	}
13637} );
13638
13639
13640var
13641
13642	// Support: IE <=10 - 11, Edge 12 - 13 only
13643	// In IE/Edge using regex groups here causes severe slowdowns.
13644	// See https://connect.microsoft.com/IE/feedback/details/1736512/
13645	rnoInnerhtml = /<script|<style|<link/i,
13646
13647	// checked="checked" or checked
13648	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
13649
13650	rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
13651
13652// Prefer a tbody over its parent table for containing new rows
13653function manipulationTarget( elem, content ) {
13654	if ( nodeName( elem, "table" ) &&
13655		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
13656
13657		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
13658	}
13659
13660	return elem;
13661}
13662
13663// Replace/restore the type attribute of script elements for safe DOM manipulation
13664function disableScript( elem ) {
13665	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
13666	return elem;
13667}
13668function restoreScript( elem ) {
13669	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
13670		elem.type = elem.type.slice( 5 );
13671	} else {
13672		elem.removeAttribute( "type" );
13673	}
13674
13675	return elem;
13676}
13677
13678function cloneCopyEvent( src, dest ) {
13679	var i, l, type, pdataOld, udataOld, udataCur, events;
13680
13681	if ( dest.nodeType !== 1 ) {
13682		return;
13683	}
13684
13685	// 1. Copy private data: events, handlers, etc.
13686	if ( dataPriv.hasData( src ) ) {
13687		pdataOld = dataPriv.get( src );
13688		events = pdataOld.events;
13689
13690		if ( events ) {
13691			dataPriv.remove( dest, "handle events" );
13692
13693			for ( type in events ) {
13694				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
13695					jQuery.event.add( dest, type, events[ type ][ i ] );
13696				}
13697			}
13698		}
13699	}
13700
13701	// 2. Copy user data
13702	if ( dataUser.hasData( src ) ) {
13703		udataOld = dataUser.access( src );
13704		udataCur = jQuery.extend( {}, udataOld );
13705
13706		dataUser.set( dest, udataCur );
13707	}
13708}
13709
13710// Fix IE bugs, see support tests
13711function fixInput( src, dest ) {
13712	var nodeName = dest.nodeName.toLowerCase();
13713
13714	// Fails to persist the checked state of a cloned checkbox or radio button.
13715	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
13716		dest.checked = src.checked;
13717
13718	// Fails to return the selected option to the default selected state when cloning options
13719	} else if ( nodeName === "input" || nodeName === "textarea" ) {
13720		dest.defaultValue = src.defaultValue;
13721	}
13722}
13723
13724function domManip( collection, args, callback, ignored ) {
13725
13726	// Flatten any nested arrays
13727	args = flat( args );
13728
13729	var fragment, first, scripts, hasScripts, node, doc,
13730		i = 0,
13731		l = collection.length,
13732		iNoClone = l - 1,
13733		value = args[ 0 ],
13734		valueIsFunction = isFunction( value );
13735
13736	// We can't cloneNode fragments that contain checked, in WebKit
13737	if ( valueIsFunction ||
13738			( l > 1 && typeof value === "string" &&
13739				!support.checkClone && rchecked.test( value ) ) ) {
13740		return collection.each( function( index ) {
13741			var self = collection.eq( index );
13742			if ( valueIsFunction ) {
13743				args[ 0 ] = value.call( this, index, self.html() );
13744			}
13745			domManip( self, args, callback, ignored );
13746		} );
13747	}
13748
13749	if ( l ) {
13750		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
13751		first = fragment.firstChild;
13752
13753		if ( fragment.childNodes.length === 1 ) {
13754			fragment = first;
13755		}
13756
13757		// Require either new content or an interest in ignored elements to invoke the callback
13758		if ( first || ignored ) {
13759			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
13760			hasScripts = scripts.length;
13761
13762			// Use the original fragment for the last item
13763			// instead of the first because it can end up
13764			// being emptied incorrectly in certain situations (trac-8070).
13765			for ( ; i < l; i++ ) {
13766				node = fragment;
13767
13768				if ( i !== iNoClone ) {
13769					node = jQuery.clone( node, true, true );
13770
13771					// Keep references to cloned scripts for later restoration
13772					if ( hasScripts ) {
13773
13774						// Support: Android <=4.0 only, PhantomJS 1 only
13775						// push.apply(_, arraylike) throws on ancient WebKit
13776						jQuery.merge( scripts, getAll( node, "script" ) );
13777					}
13778				}
13779
13780				callback.call( collection[ i ], node, i );
13781			}
13782
13783			if ( hasScripts ) {
13784				doc = scripts[ scripts.length - 1 ].ownerDocument;
13785
13786				// Re-enable scripts
13787				jQuery.map( scripts, restoreScript );
13788
13789				// Evaluate executable scripts on first document insertion
13790				for ( i = 0; i < hasScripts; i++ ) {
13791					node = scripts[ i ];
13792					if ( rscriptType.test( node.type || "" ) &&
13793						!dataPriv.access( node, "globalEval" ) &&
13794						jQuery.contains( doc, node ) ) {
13795
13796						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
13797
13798							// Optional AJAX dependency, but won't run scripts if not present
13799							if ( jQuery._evalUrl && !node.noModule ) {
13800								jQuery._evalUrl( node.src, {
13801									nonce: node.nonce || node.getAttribute( "nonce" )
13802								}, doc );
13803							}
13804						} else {
13805
13806							// Unwrap a CDATA section containing script contents. This shouldn't be
13807							// needed as in XML documents they're already not visible when
13808							// inspecting element contents and in HTML documents they have no
13809							// meaning but we're preserving that logic for backwards compatibility.
13810							// This will be removed completely in 4.0. See gh-4904.
13811							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
13812						}
13813					}
13814				}
13815			}
13816		}
13817	}
13818
13819	return collection;
13820}
13821
13822function remove( elem, selector, keepData ) {
13823	var node,
13824		nodes = selector ? jQuery.filter( selector, elem ) : elem,
13825		i = 0;
13826
13827	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
13828		if ( !keepData && node.nodeType === 1 ) {
13829			jQuery.cleanData( getAll( node ) );
13830		}
13831
13832		if ( node.parentNode ) {
13833			if ( keepData && isAttached( node ) ) {
13834				setGlobalEval( getAll( node, "script" ) );
13835			}
13836			node.parentNode.removeChild( node );
13837		}
13838	}
13839
13840	return elem;
13841}
13842
13843jQuery.extend( {
13844	htmlPrefilter: function( html ) {
13845		return html;
13846	},
13847
13848	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
13849		var i, l, srcElements, destElements,
13850			clone = elem.cloneNode( true ),
13851			inPage = isAttached( elem );
13852
13853		// Fix IE cloning issues
13854		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
13855				!jQuery.isXMLDoc( elem ) ) {
13856
13857			// We eschew jQuery#find here for performance reasons:
13858			// https://jsperf.com/getall-vs-sizzle/2
13859			destElements = getAll( clone );
13860			srcElements = getAll( elem );
13861
13862			for ( i = 0, l = srcElements.length; i < l; i++ ) {
13863				fixInput( srcElements[ i ], destElements[ i ] );
13864			}
13865		}
13866
13867		// Copy the events from the original to the clone
13868		if ( dataAndEvents ) {
13869			if ( deepDataAndEvents ) {
13870				srcElements = srcElements || getAll( elem );
13871				destElements = destElements || getAll( clone );
13872
13873				for ( i = 0, l = srcElements.length; i < l; i++ ) {
13874					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
13875				}
13876			} else {
13877				cloneCopyEvent( elem, clone );
13878			}
13879		}
13880
13881		// Preserve script evaluation history
13882		destElements = getAll( clone, "script" );
13883		if ( destElements.length > 0 ) {
13884			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
13885		}
13886
13887		// Return the cloned set
13888		return clone;
13889	},
13890
13891	cleanData: function( elems ) {
13892		var data, elem, type,
13893			special = jQuery.event.special,
13894			i = 0;
13895
13896		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
13897			if ( acceptData( elem ) ) {
13898				if ( ( data = elem[ dataPriv.expando ] ) ) {
13899					if ( data.events ) {
13900						for ( type in data.events ) {
13901							if ( special[ type ] ) {
13902								jQuery.event.remove( elem, type );
13903
13904							// This is a shortcut to avoid jQuery.event.remove's overhead
13905							} else {
13906								jQuery.removeEvent( elem, type, data.handle );
13907							}
13908						}
13909					}
13910
13911					// Support: Chrome <=35 - 45+
13912					// Assign undefined instead of using delete, see Data#remove
13913					elem[ dataPriv.expando ] = undefined;
13914				}
13915				if ( elem[ dataUser.expando ] ) {
13916
13917					// Support: Chrome <=35 - 45+
13918					// Assign undefined instead of using delete, see Data#remove
13919					elem[ dataUser.expando ] = undefined;
13920				}
13921			}
13922		}
13923	}
13924} );
13925
13926jQuery.fn.extend( {
13927	detach: function( selector ) {
13928		return remove( this, selector, true );
13929	},
13930
13931	remove: function( selector ) {
13932		return remove( this, selector );
13933	},
13934
13935	text: function( value ) {
13936		return access( this, function( value ) {
13937			return value === undefined ?
13938				jQuery.text( this ) :
13939				this.empty().each( function() {
13940					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
13941						this.textContent = value;
13942					}
13943				} );
13944		}, null, value, arguments.length );
13945	},
13946
13947	append: function() {
13948		return domManip( this, arguments, function( elem ) {
13949			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
13950				var target = manipulationTarget( this, elem );
13951				target.appendChild( elem );
13952			}
13953		} );
13954	},
13955
13956	prepend: function() {
13957		return domManip( this, arguments, function( elem ) {
13958			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
13959				var target = manipulationTarget( this, elem );
13960				target.insertBefore( elem, target.firstChild );
13961			}
13962		} );
13963	},
13964
13965	before: function() {
13966		return domManip( this, arguments, function( elem ) {
13967			if ( this.parentNode ) {
13968				this.parentNode.insertBefore( elem, this );
13969			}
13970		} );
13971	},
13972
13973	after: function() {
13974		return domManip( this, arguments, function( elem ) {
13975			if ( this.parentNode ) {
13976				this.parentNode.insertBefore( elem, this.nextSibling );
13977			}
13978		} );
13979	},
13980
13981	empty: function() {
13982		var elem,
13983			i = 0;
13984
13985		for ( ; ( elem = this[ i ] ) != null; i++ ) {
13986			if ( elem.nodeType === 1 ) {
13987
13988				// Prevent memory leaks
13989				jQuery.cleanData( getAll( elem, false ) );
13990
13991				// Remove any remaining nodes
13992				elem.textContent = "";
13993			}
13994		}
13995
13996		return this;
13997	},
13998
13999	clone: function( dataAndEvents, deepDataAndEvents ) {
14000		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
14001		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
14002
14003		return this.map( function() {
14004			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
14005		} );
14006	},
14007
14008	html: function( value ) {
14009		return access( this, function( value ) {
14010			var elem = this[ 0 ] || {},
14011				i = 0,
14012				l = this.length;
14013
14014			if ( value === undefined && elem.nodeType === 1 ) {
14015				return elem.innerHTML;
14016			}
14017
14018			// See if we can take a shortcut and just use innerHTML
14019			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
14020				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
14021
14022				value = jQuery.htmlPrefilter( value );
14023
14024				try {
14025					for ( ; i < l; i++ ) {
14026						elem = this[ i ] || {};
14027
14028						// Remove element nodes and prevent memory leaks
14029						if ( elem.nodeType === 1 ) {
14030							jQuery.cleanData( getAll( elem, false ) );
14031							elem.innerHTML = value;
14032						}
14033					}
14034
14035					elem = 0;
14036
14037				// If using innerHTML throws an exception, use the fallback method
14038				} catch ( e ) {}
14039			}
14040
14041			if ( elem ) {
14042				this.empty().append( value );
14043			}
14044		}, null, value, arguments.length );
14045	},
14046
14047	replaceWith: function() {
14048		var ignored = [];
14049
14050		// Make the changes, replacing each non-ignored context element with the new content
14051		return domManip( this, arguments, function( elem ) {
14052			var parent = this.parentNode;
14053
14054			if ( jQuery.inArray( this, ignored ) < 0 ) {
14055				jQuery.cleanData( getAll( this ) );
14056				if ( parent ) {
14057					parent.replaceChild( elem, this );
14058				}
14059			}
14060
14061		// Force callback invocation
14062		}, ignored );
14063	}
14064} );
14065
14066jQuery.each( {
14067	appendTo: "append",
14068	prependTo: "prepend",
14069	insertBefore: "before",
14070	insertAfter: "after",
14071	replaceAll: "replaceWith"
14072}, function( name, original ) {
14073	jQuery.fn[ name ] = function( selector ) {
14074		var elems,
14075			ret = [],
14076			insert = jQuery( selector ),
14077			last = insert.length - 1,
14078			i = 0;
14079
14080		for ( ; i <= last; i++ ) {
14081			elems = i === last ? this : this.clone( true );
14082			jQuery( insert[ i ] )[ original ]( elems );
14083
14084			// Support: Android <=4.0 only, PhantomJS 1 only
14085			// .get() because push.apply(_, arraylike) throws on ancient WebKit
14086			push.apply( ret, elems.get() );
14087		}
14088
14089		return this.pushStack( ret );
14090	};
14091} );
14092var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
14093
14094var rcustomProp = /^--/;
14095
14096
14097var getStyles = function( elem ) {
14098
14099		// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)
14100		// IE throws on elements created in popups
14101		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
14102		var view = elem.ownerDocument.defaultView;
14103
14104		if ( !view || !view.opener ) {
14105			view = window;
14106		}
14107
14108		return view.getComputedStyle( elem );
14109	};
14110
14111var swap = function( elem, options, callback ) {
14112	var ret, name,
14113		old = {};
14114
14115	// Remember the old values, and insert the new ones
14116	for ( name in options ) {
14117		old[ name ] = elem.style[ name ];
14118		elem.style[ name ] = options[ name ];
14119	}
14120
14121	ret = callback.call( elem );
14122
14123	// Revert the old values
14124	for ( name in options ) {
14125		elem.style[ name ] = old[ name ];
14126	}
14127
14128	return ret;
14129};
14130
14131
14132var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
14133
14134
14135
14136( function() {
14137
14138	// Executing both pixelPosition & boxSizingReliable tests require only one layout
14139	// so they're executed at the same time to save the second computation.
14140	function computeStyleTests() {
14141
14142		// This is a singleton, we need to execute it only once
14143		if ( !div ) {
14144			return;
14145		}
14146
14147		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
14148			"margin-top:1px;padding:0;border:0";
14149		div.style.cssText =
14150			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
14151			"margin:auto;border:1px;padding:1px;" +
14152			"width:60%;top:1%";
14153		documentElement.appendChild( container ).appendChild( div );
14154
14155		var divStyle = window.getComputedStyle( div );
14156		pixelPositionVal = divStyle.top !== "1%";
14157
14158		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
14159		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
14160
14161		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
14162		// Some styles come back with percentage values, even though they shouldn't
14163		div.style.right = "60%";
14164		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
14165
14166		// Support: IE 9 - 11 only
14167		// Detect misreporting of content dimensions for box-sizing:border-box elements
14168		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
14169
14170		// Support: IE 9 only
14171		// Detect overflow:scroll screwiness (gh-3699)
14172		// Support: Chrome <=64
14173		// Don't get tricked when zoom affects offsetWidth (gh-4029)
14174		div.style.position = "absolute";
14175		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
14176
14177		documentElement.removeChild( container );
14178
14179		// Nullify the div so it wouldn't be stored in the memory and
14180		// it will also be a sign that checks already performed
14181		div = null;
14182	}
14183
14184	function roundPixelMeasures( measure ) {
14185		return Math.round( parseFloat( measure ) );
14186	}
14187
14188	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
14189		reliableTrDimensionsVal, reliableMarginLeftVal,
14190		container = document.createElement( "div" ),
14191		div = document.createElement( "div" );
14192
14193	// Finish early in limited (non-browser) environments
14194	if ( !div.style ) {
14195		return;
14196	}
14197
14198	// Support: IE <=9 - 11 only
14199	// Style of cloned element affects source element cloned (trac-8908)
14200	div.style.backgroundClip = "content-box";
14201	div.cloneNode( true ).style.backgroundClip = "";
14202	support.clearCloneStyle = div.style.backgroundClip === "content-box";
14203
14204	jQuery.extend( support, {
14205		boxSizingReliable: function() {
14206			computeStyleTests();
14207			return boxSizingReliableVal;
14208		},
14209		pixelBoxStyles: function() {
14210			computeStyleTests();
14211			return pixelBoxStylesVal;
14212		},
14213		pixelPosition: function() {
14214			computeStyleTests();
14215			return pixelPositionVal;
14216		},
14217		reliableMarginLeft: function() {
14218			computeStyleTests();
14219			return reliableMarginLeftVal;
14220		},
14221		scrollboxSize: function() {
14222			computeStyleTests();
14223			return scrollboxSizeVal;
14224		},
14225
14226		// Support: IE 9 - 11+, Edge 15 - 18+
14227		// IE/Edge misreport `getComputedStyle` of table rows with width/height
14228		// set in CSS while `offset*` properties report correct values.
14229		// Behavior in IE 9 is more subtle than in newer versions & it passes
14230		// some versions of this test; make sure not to make it pass there!
14231		//
14232		// Support: Firefox 70+
14233		// Only Firefox includes border widths
14234		// in computed dimensions. (gh-4529)
14235		reliableTrDimensions: function() {
14236			var table, tr, trChild, trStyle;
14237			if ( reliableTrDimensionsVal == null ) {
14238				table = document.createElement( "table" );
14239				tr = document.createElement( "tr" );
14240				trChild = document.createElement( "div" );
14241
14242				table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
14243				tr.style.cssText = "box-sizing:content-box;border:1px solid";
14244
14245				// Support: Chrome 86+
14246				// Height set through cssText does not get applied.
14247				// Computed height then comes back as 0.
14248				tr.style.height = "1px";
14249				trChild.style.height = "9px";
14250
14251				// Support: Android 8 Chrome 86+
14252				// In our bodyBackground.html iframe,
14253				// display for all div elements is set to "inline",
14254				// which causes a problem only in Android 8 Chrome 86.
14255				// Ensuring the div is `display: block`
14256				// gets around this issue.
14257				trChild.style.display = "block";
14258
14259				documentElement
14260					.appendChild( table )
14261					.appendChild( tr )
14262					.appendChild( trChild );
14263
14264				trStyle = window.getComputedStyle( tr );
14265				reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
14266					parseInt( trStyle.borderTopWidth, 10 ) +
14267					parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
14268
14269				documentElement.removeChild( table );
14270			}
14271			return reliableTrDimensionsVal;
14272		}
14273	} );
14274} )();
14275
14276
14277function curCSS( elem, name, computed ) {
14278	var width, minWidth, maxWidth, ret,
14279		isCustomProp = rcustomProp.test( name ),
14280
14281		// Support: Firefox 51+
14282		// Retrieving style before computed somehow
14283		// fixes an issue with getting wrong values
14284		// on detached elements
14285		style = elem.style;
14286
14287	computed = computed || getStyles( elem );
14288
14289	// getPropertyValue is needed for:
14290	//   .css('filter') (IE 9 only, trac-12537)
14291	//   .css('--customProperty) (gh-3144)
14292	if ( computed ) {
14293
14294		// Support: IE <=9 - 11+
14295		// IE only supports `"float"` in `getPropertyValue`; in computed styles
14296		// it's only available as `"cssFloat"`. We no longer modify properties
14297		// sent to `.css()` apart from camelCasing, so we need to check both.
14298		// Normally, this would create difference in behavior: if
14299		// `getPropertyValue` returns an empty string, the value returned
14300		// by `.css()` would be `undefined`. This is usually the case for
14301		// disconnected elements. However, in IE even disconnected elements
14302		// with no styles return `"none"` for `getPropertyValue( "float" )`
14303		ret = computed.getPropertyValue( name ) || computed[ name ];
14304
14305		if ( isCustomProp && ret ) {
14306
14307			// Support: Firefox 105+, Chrome <=105+
14308			// Spec requires trimming whitespace for custom properties (gh-4926).
14309			// Firefox only trims leading whitespace. Chrome just collapses
14310			// both leading & trailing whitespace to a single space.
14311			//
14312			// Fall back to `undefined` if empty string returned.
14313			// This collapses a missing definition with property defined
14314			// and set to an empty string but there's no standard API
14315			// allowing us to differentiate them without a performance penalty
14316			// and returning `undefined` aligns with older jQuery.
14317			//
14318			// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
14319			// as whitespace while CSS does not, but this is not a problem
14320			// because CSS preprocessing replaces them with U+000A LINE FEED
14321			// (which *is* CSS whitespace)
14322			// https://www.w3.org/TR/css-syntax-3/#input-preprocessing
14323			ret = ret.replace( rtrimCSS, "$1" ) || undefined;
14324		}
14325
14326		if ( ret === "" && !isAttached( elem ) ) {
14327			ret = jQuery.style( elem, name );
14328		}
14329
14330		// A tribute to the "awesome hack by Dean Edwards"
14331		// Android Browser returns percentage for some values,
14332		// but width seems to be reliably pixels.
14333		// This is against the CSSOM draft spec:
14334		// https://drafts.csswg.org/cssom/#resolved-values
14335		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
14336
14337			// Remember the original values
14338			width = style.width;
14339			minWidth = style.minWidth;
14340			maxWidth = style.maxWidth;
14341
14342			// Put in the new values to get a computed value out
14343			style.minWidth = style.maxWidth = style.width = ret;
14344			ret = computed.width;
14345
14346			// Revert the changed values
14347			style.width = width;
14348			style.minWidth = minWidth;
14349			style.maxWidth = maxWidth;
14350		}
14351	}
14352
14353	return ret !== undefined ?
14354
14355		// Support: IE <=9 - 11 only
14356		// IE returns zIndex value as an integer.
14357		ret + "" :
14358		ret;
14359}
14360
14361
14362function addGetHookIf( conditionFn, hookFn ) {
14363
14364	// Define the hook, we'll check on the first run if it's really needed.
14365	return {
14366		get: function() {
14367			if ( conditionFn() ) {
14368
14369				// Hook not needed (or it's not possible to use it due
14370				// to missing dependency), remove it.
14371				delete this.get;
14372				return;
14373			}
14374
14375			// Hook needed; redefine it so that the support test is not executed again.
14376			return ( this.get = hookFn ).apply( this, arguments );
14377		}
14378	};
14379}
14380
14381
14382var cssPrefixes = [ "Webkit", "Moz", "ms" ],
14383	emptyStyle = document.createElement( "div" ).style,
14384	vendorProps = {};
14385
14386// Return a vendor-prefixed property or undefined
14387function vendorPropName( name ) {
14388
14389	// Check for vendor prefixed names
14390	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
14391		i = cssPrefixes.length;
14392
14393	while ( i-- ) {
14394		name = cssPrefixes[ i ] + capName;
14395		if ( name in emptyStyle ) {
14396			return name;
14397		}
14398	}
14399}
14400
14401// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
14402function finalPropName( name ) {
14403	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
14404
14405	if ( final ) {
14406		return final;
14407	}
14408	if ( name in emptyStyle ) {
14409		return name;
14410	}
14411	return vendorProps[ name ] = vendorPropName( name ) || name;
14412}
14413
14414
14415var
14416
14417	// Swappable if display is none or starts with table
14418	// except "table", "table-cell", or "table-caption"
14419	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
14420	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
14421	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
14422	cssNormalTransform = {
14423		letterSpacing: "0",
14424		fontWeight: "400"
14425	};
14426
14427function setPositiveNumber( _elem, value, subtract ) {
14428
14429	// Any relative (+/-) values have already been
14430	// normalized at this point
14431	var matches = rcssNum.exec( value );
14432	return matches ?
14433
14434		// Guard against undefined "subtract", e.g., when used as in cssHooks
14435		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
14436		value;
14437}
14438
14439function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
14440	var i = dimension === "width" ? 1 : 0,
14441		extra = 0,
14442		delta = 0,
14443		marginDelta = 0;
14444
14445	// Adjustment may not be necessary
14446	if ( box === ( isBorderBox ? "border" : "content" ) ) {
14447		return 0;
14448	}
14449
14450	for ( ; i < 4; i += 2 ) {
14451
14452		// Both box models exclude margin
14453		// Count margin delta separately to only add it after scroll gutter adjustment.
14454		// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).
14455		if ( box === "margin" ) {
14456			marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
14457		}
14458
14459		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
14460		if ( !isBorderBox ) {
14461
14462			// Add padding
14463			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
14464
14465			// For "border" or "margin", add border
14466			if ( box !== "padding" ) {
14467				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
14468
14469			// But still keep track of it otherwise
14470			} else {
14471				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
14472			}
14473
14474		// If we get here with a border-box (content + padding + border), we're seeking "content" or
14475		// "padding" or "margin"
14476		} else {
14477
14478			// For "content", subtract padding
14479			if ( box === "content" ) {
14480				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
14481			}
14482
14483			// For "content" or "padding", subtract border
14484			if ( box !== "margin" ) {
14485				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
14486			}
14487		}
14488	}
14489
14490	// Account for positive content-box scroll gutter when requested by providing computedVal
14491	if ( !isBorderBox && computedVal >= 0 ) {
14492
14493		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
14494		// Assuming integer scroll gutter, subtract the rest and round down
14495		delta += Math.max( 0, Math.ceil(
14496			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
14497			computedVal -
14498			delta -
14499			extra -
14500			0.5
14501
14502		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
14503		// Use an explicit zero to avoid NaN (gh-3964)
14504		) ) || 0;
14505	}
14506
14507	return delta + marginDelta;
14508}
14509
14510function getWidthOrHeight( elem, dimension, extra ) {
14511
14512	// Start with computed style
14513	var styles = getStyles( elem ),
14514
14515		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
14516		// Fake content-box until we know it's needed to know the true value.
14517		boxSizingNeeded = !support.boxSizingReliable() || extra,
14518		isBorderBox = boxSizingNeeded &&
14519			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
14520		valueIsBorderBox = isBorderBox,
14521
14522		val = curCSS( elem, dimension, styles ),
14523		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
14524
14525	// Support: Firefox <=54
14526	// Return a confounding non-pixel value or feign ignorance, as appropriate.
14527	if ( rnumnonpx.test( val ) ) {
14528		if ( !extra ) {
14529			return val;
14530		}
14531		val = "auto";
14532	}
14533
14534
14535	// Support: IE 9 - 11 only
14536	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
14537	// In those cases, the computed value can be trusted to be border-box.
14538	if ( ( !support.boxSizingReliable() && isBorderBox ||
14539
14540		// Support: IE 10 - 11+, Edge 15 - 18+
14541		// IE/Edge misreport `getComputedStyle` of table rows with width/height
14542		// set in CSS while `offset*` properties report correct values.
14543		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
14544		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
14545
14546		// Fall back to offsetWidth/offsetHeight when value is "auto"
14547		// This happens for inline elements with no explicit setting (gh-3571)
14548		val === "auto" ||
14549
14550		// Support: Android <=4.1 - 4.3 only
14551		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
14552		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
14553
14554		// Make sure the element is visible & connected
14555		elem.getClientRects().length ) {
14556
14557		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
14558
14559		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
14560		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
14561		// retrieved value as a content box dimension.
14562		valueIsBorderBox = offsetProp in elem;
14563		if ( valueIsBorderBox ) {
14564			val = elem[ offsetProp ];
14565		}
14566	}
14567
14568	// Normalize "" and auto
14569	val = parseFloat( val ) || 0;
14570
14571	// Adjust for the element's box model
14572	return ( val +
14573		boxModelAdjustment(
14574			elem,
14575			dimension,
14576			extra || ( isBorderBox ? "border" : "content" ),
14577			valueIsBorderBox,
14578			styles,
14579
14580			// Provide the current computed size to request scroll gutter calculation (gh-3589)
14581			val
14582		)
14583	) + "px";
14584}
14585
14586jQuery.extend( {
14587
14588	// Add in style property hooks for overriding the default
14589	// behavior of getting and setting a style property
14590	cssHooks: {
14591		opacity: {
14592			get: function( elem, computed ) {
14593				if ( computed ) {
14594
14595					// We should always get a number back from opacity
14596					var ret = curCSS( elem, "opacity" );
14597					return ret === "" ? "1" : ret;
14598				}
14599			}
14600		}
14601	},
14602
14603	// Don't automatically add "px" to these possibly-unitless properties
14604	cssNumber: {
14605		animationIterationCount: true,
14606		aspectRatio: true,
14607		borderImageSlice: true,
14608		columnCount: true,
14609		flexGrow: true,
14610		flexShrink: true,
14611		fontWeight: true,
14612		gridArea: true,
14613		gridColumn: true,
14614		gridColumnEnd: true,
14615		gridColumnStart: true,
14616		gridRow: true,
14617		gridRowEnd: true,
14618		gridRowStart: true,
14619		lineHeight: true,
14620		opacity: true,
14621		order: true,
14622		orphans: true,
14623		scale: true,
14624		widows: true,
14625		zIndex: true,
14626		zoom: true,
14627
14628		// SVG-related
14629		fillOpacity: true,
14630		floodOpacity: true,
14631		stopOpacity: true,
14632		strokeMiterlimit: true,
14633		strokeOpacity: true
14634	},
14635
14636	// Add in properties whose names you wish to fix before
14637	// setting or getting the value
14638	cssProps: {},
14639
14640	// Get and set the style property on a DOM Node
14641	style: function( elem, name, value, extra ) {
14642
14643		// Don't set styles on text and comment nodes
14644		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
14645			return;
14646		}
14647
14648		// Make sure that we're working with the right name
14649		var ret, type, hooks,
14650			origName = camelCase( name ),
14651			isCustomProp = rcustomProp.test( name ),
14652			style = elem.style;
14653
14654		// Make sure that we're working with the right name. We don't
14655		// want to query the value if it is a CSS custom property
14656		// since they are user-defined.
14657		if ( !isCustomProp ) {
14658			name = finalPropName( origName );
14659		}
14660
14661		// Gets hook for the prefixed version, then unprefixed version
14662		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
14663
14664		// Check if we're setting a value
14665		if ( value !== undefined ) {
14666			type = typeof value;
14667
14668			// Convert "+=" or "-=" to relative numbers (trac-7345)
14669			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
14670				value = adjustCSS( elem, name, ret );
14671
14672				// Fixes bug trac-9237
14673				type = "number";
14674			}
14675
14676			// Make sure that null and NaN values aren't set (trac-7116)
14677			if ( value == null || value !== value ) {
14678				return;
14679			}
14680
14681			// If a number was passed in, add the unit (except for certain CSS properties)
14682			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
14683			// "px" to a few hardcoded values.
14684			if ( type === "number" && !isCustomProp ) {
14685				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
14686			}
14687
14688			// background-* props affect original clone's values
14689			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
14690				style[ name ] = "inherit";
14691			}
14692
14693			// If a hook was provided, use that value, otherwise just set the specified value
14694			if ( !hooks || !( "set" in hooks ) ||
14695				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
14696
14697				if ( isCustomProp ) {
14698					style.setProperty( name, value );
14699				} else {
14700					style[ name ] = value;
14701				}
14702			}
14703
14704		} else {
14705
14706			// If a hook was provided get the non-computed value from there
14707			if ( hooks && "get" in hooks &&
14708				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
14709
14710				return ret;
14711			}
14712
14713			// Otherwise just get the value from the style object
14714			return style[ name ];
14715		}
14716	},
14717
14718	css: function( elem, name, extra, styles ) {
14719		var val, num, hooks,
14720			origName = camelCase( name ),
14721			isCustomProp = rcustomProp.test( name );
14722
14723		// Make sure that we're working with the right name. We don't
14724		// want to modify the value if it is a CSS custom property
14725		// since they are user-defined.
14726		if ( !isCustomProp ) {
14727			name = finalPropName( origName );
14728		}
14729
14730		// Try prefixed name followed by the unprefixed name
14731		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
14732
14733		// If a hook was provided get the computed value from there
14734		if ( hooks && "get" in hooks ) {
14735			val = hooks.get( elem, true, extra );
14736		}
14737
14738		// Otherwise, if a way to get the computed value exists, use that
14739		if ( val === undefined ) {
14740			val = curCSS( elem, name, styles );
14741		}
14742
14743		// Convert "normal" to computed value
14744		if ( val === "normal" && name in cssNormalTransform ) {
14745			val = cssNormalTransform[ name ];
14746		}
14747
14748		// Make numeric if forced or a qualifier was provided and val looks numeric
14749		if ( extra === "" || extra ) {
14750			num = parseFloat( val );
14751			return extra === true || isFinite( num ) ? num || 0 : val;
14752		}
14753
14754		return val;
14755	}
14756} );
14757
14758jQuery.each( [ "height", "width" ], function( _i, dimension ) {
14759	jQuery.cssHooks[ dimension ] = {
14760		get: function( elem, computed, extra ) {
14761			if ( computed ) {
14762
14763				// Certain elements can have dimension info if we invisibly show them
14764				// but it must have a current display style that would benefit
14765				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
14766
14767					// Support: Safari 8+
14768					// Table columns in Safari have non-zero offsetWidth & zero
14769					// getBoundingClientRect().width unless display is changed.
14770					// Support: IE <=11 only
14771					// Running getBoundingClientRect on a disconnected node
14772					// in IE throws an error.
14773					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
14774					swap( elem, cssShow, function() {
14775						return getWidthOrHeight( elem, dimension, extra );
14776					} ) :
14777					getWidthOrHeight( elem, dimension, extra );
14778			}
14779		},
14780
14781		set: function( elem, value, extra ) {
14782			var matches,
14783				styles = getStyles( elem ),
14784
14785				// Only read styles.position if the test has a chance to fail
14786				// to avoid forcing a reflow.
14787				scrollboxSizeBuggy = !support.scrollboxSize() &&
14788					styles.position === "absolute",
14789
14790				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
14791				boxSizingNeeded = scrollboxSizeBuggy || extra,
14792				isBorderBox = boxSizingNeeded &&
14793					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
14794				subtract = extra ?
14795					boxModelAdjustment(
14796						elem,
14797						dimension,
14798						extra,
14799						isBorderBox,
14800						styles
14801					) :
14802					0;
14803
14804			// Account for unreliable border-box dimensions by comparing offset* to computed and
14805			// faking a content-box to get border and padding (gh-3699)
14806			if ( isBorderBox && scrollboxSizeBuggy ) {
14807				subtract -= Math.ceil(
14808					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
14809					parseFloat( styles[ dimension ] ) -
14810					boxModelAdjustment( elem, dimension, "border", false, styles ) -
14811					0.5
14812				);
14813			}
14814
14815			// Convert to pixels if value adjustment is needed
14816			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
14817				( matches[ 3 ] || "px" ) !== "px" ) {
14818
14819				elem.style[ dimension ] = value;
14820				value = jQuery.css( elem, dimension );
14821			}
14822
14823			return setPositiveNumber( elem, value, subtract );
14824		}
14825	};
14826} );
14827
14828jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
14829	function( elem, computed ) {
14830		if ( computed ) {
14831			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
14832				elem.getBoundingClientRect().left -
14833					swap( elem, { marginLeft: 0 }, function() {
14834						return elem.getBoundingClientRect().left;
14835					} )
14836			) + "px";
14837		}
14838	}
14839);
14840
14841// These hooks are used by animate to expand properties
14842jQuery.each( {
14843	margin: "",
14844	padding: "",
14845	border: "Width"
14846}, function( prefix, suffix ) {
14847	jQuery.cssHooks[ prefix + suffix ] = {
14848		expand: function( value ) {
14849			var i = 0,
14850				expanded = {},
14851
14852				// Assumes a single number if not a string
14853				parts = typeof value === "string" ? value.split( " " ) : [ value ];
14854
14855			for ( ; i < 4; i++ ) {
14856				expanded[ prefix + cssExpand[ i ] + suffix ] =
14857					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
14858			}
14859
14860			return expanded;
14861		}
14862	};
14863
14864	if ( prefix !== "margin" ) {
14865		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
14866	}
14867} );
14868
14869jQuery.fn.extend( {
14870	css: function( name, value ) {
14871		return access( this, function( elem, name, value ) {
14872			var styles, len,
14873				map = {},
14874				i = 0;
14875
14876			if ( Array.isArray( name ) ) {
14877				styles = getStyles( elem );
14878				len = name.length;
14879
14880				for ( ; i < len; i++ ) {
14881					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
14882				}
14883
14884				return map;
14885			}
14886
14887			return value !== undefined ?
14888				jQuery.style( elem, name, value ) :
14889				jQuery.css( elem, name );
14890		}, name, value, arguments.length > 1 );
14891	}
14892} );
14893
14894
14895function Tween( elem, options, prop, end, easing ) {
14896	return new Tween.prototype.init( elem, options, prop, end, easing );
14897}
14898jQuery.Tween = Tween;
14899
14900Tween.prototype = {
14901	constructor: Tween,
14902	init: function( elem, options, prop, end, easing, unit ) {
14903		this.elem = elem;
14904		this.prop = prop;
14905		this.easing = easing || jQuery.easing._default;
14906		this.options = options;
14907		this.start = this.now = this.cur();
14908		this.end = end;
14909		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
14910	},
14911	cur: function() {
14912		var hooks = Tween.propHooks[ this.prop ];
14913
14914		return hooks && hooks.get ?
14915			hooks.get( this ) :
14916			Tween.propHooks._default.get( this );
14917	},
14918	run: function( percent ) {
14919		var eased,
14920			hooks = Tween.propHooks[ this.prop ];
14921
14922		if ( this.options.duration ) {
14923			this.pos = eased = jQuery.easing[ this.easing ](
14924				percent, this.options.duration * percent, 0, 1, this.options.duration
14925			);
14926		} else {
14927			this.pos = eased = percent;
14928		}
14929		this.now = ( this.end - this.start ) * eased + this.start;
14930
14931		if ( this.options.step ) {
14932			this.options.step.call( this.elem, this.now, this );
14933		}
14934
14935		if ( hooks && hooks.set ) {
14936			hooks.set( this );
14937		} else {
14938			Tween.propHooks._default.set( this );
14939		}
14940		return this;
14941	}
14942};
14943
14944Tween.prototype.init.prototype = Tween.prototype;
14945
14946Tween.propHooks = {
14947	_default: {
14948		get: function( tween ) {
14949			var result;
14950
14951			// Use a property on the element directly when it is not a DOM element,
14952			// or when there is no matching style property that exists.
14953			if ( tween.elem.nodeType !== 1 ||
14954				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
14955				return tween.elem[ tween.prop ];
14956			}
14957
14958			// Passing an empty string as a 3rd parameter to .css will automatically
14959			// attempt a parseFloat and fallback to a string if the parse fails.
14960			// Simple values such as "10px" are parsed to Float;
14961			// complex values such as "rotate(1rad)" are returned as-is.
14962			result = jQuery.css( tween.elem, tween.prop, "" );
14963
14964			// Empty strings, null, undefined and "auto" are converted to 0.
14965			return !result || result === "auto" ? 0 : result;
14966		},
14967		set: function( tween ) {
14968
14969			// Use step hook for back compat.
14970			// Use cssHook if its there.
14971			// Use .style if available and use plain properties where available.
14972			if ( jQuery.fx.step[ tween.prop ] ) {
14973				jQuery.fx.step[ tween.prop ]( tween );
14974			} else if ( tween.elem.nodeType === 1 && (
14975				jQuery.cssHooks[ tween.prop ] ||
14976					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
14977				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
14978			} else {
14979				tween.elem[ tween.prop ] = tween.now;
14980			}
14981		}
14982	}
14983};
14984
14985// Support: IE <=9 only
14986// Panic based approach to setting things on disconnected nodes
14987Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
14988	set: function( tween ) {
14989		if ( tween.elem.nodeType && tween.elem.parentNode ) {
14990			tween.elem[ tween.prop ] = tween.now;
14991		}
14992	}
14993};
14994
14995jQuery.easing = {
14996	linear: function( p ) {
14997		return p;
14998	},
14999	swing: function( p ) {
15000		return 0.5 - Math.cos( p * Math.PI ) / 2;
15001	},
15002	_default: "swing"
15003};
15004
15005jQuery.fx = Tween.prototype.init;
15006
15007// Back compat <1.8 extension point
15008jQuery.fx.step = {};
15009
15010
15011
15012
15013var
15014	fxNow, inProgress,
15015	rfxtypes = /^(?:toggle|show|hide)$/,
15016	rrun = /queueHooks$/;
15017
15018function schedule() {
15019	if ( inProgress ) {
15020		if ( document.hidden === false && window.requestAnimationFrame ) {
15021			window.requestAnimationFrame( schedule );
15022		} else {
15023			window.setTimeout( schedule, jQuery.fx.interval );
15024		}
15025
15026		jQuery.fx.tick();
15027	}
15028}
15029
15030// Animations created synchronously will run synchronously
15031function createFxNow() {
15032	window.setTimeout( function() {
15033		fxNow = undefined;
15034	} );
15035	return ( fxNow = Date.now() );
15036}
15037
15038// Generate parameters to create a standard animation
15039function genFx( type, includeWidth ) {
15040	var which,
15041		i = 0,
15042		attrs = { height: type };
15043
15044	// If we include width, step value is 1 to do all cssExpand values,
15045	// otherwise step value is 2 to skip over Left and Right
15046	includeWidth = includeWidth ? 1 : 0;
15047	for ( ; i < 4; i += 2 - includeWidth ) {
15048		which = cssExpand[ i ];
15049		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
15050	}
15051
15052	if ( includeWidth ) {
15053		attrs.opacity = attrs.width = type;
15054	}
15055
15056	return attrs;
15057}
15058
15059function createTween( value, prop, animation ) {
15060	var tween,
15061		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
15062		index = 0,
15063		length = collection.length;
15064	for ( ; index < length; index++ ) {
15065		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
15066
15067			// We're done with this property
15068			return tween;
15069		}
15070	}
15071}
15072
15073function defaultPrefilter( elem, props, opts ) {
15074	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
15075		isBox = "width" in props || "height" in props,
15076		anim = this,
15077		orig = {},
15078		style = elem.style,
15079		hidden = elem.nodeType && isHiddenWithinTree( elem ),
15080		dataShow = dataPriv.get( elem, "fxshow" );
15081
15082	// Queue-skipping animations hijack the fx hooks
15083	if ( !opts.queue ) {
15084		hooks = jQuery._queueHooks( elem, "fx" );
15085		if ( hooks.unqueued == null ) {
15086			hooks.unqueued = 0;
15087			oldfire = hooks.empty.fire;
15088			hooks.empty.fire = function() {
15089				if ( !hooks.unqueued ) {
15090					oldfire();
15091				}
15092			};
15093		}
15094		hooks.unqueued++;
15095
15096		anim.always( function() {
15097
15098			// Ensure the complete handler is called before this completes
15099			anim.always( function() {
15100				hooks.unqueued--;
15101				if ( !jQuery.queue( elem, "fx" ).length ) {
15102					hooks.empty.fire();
15103				}
15104			} );
15105		} );
15106	}
15107
15108	// Detect show/hide animations
15109	for ( prop in props ) {
15110		value = props[ prop ];
15111		if ( rfxtypes.test( value ) ) {
15112			delete props[ prop ];
15113			toggle = toggle || value === "toggle";
15114			if ( value === ( hidden ? "hide" : "show" ) ) {
15115
15116				// Pretend to be hidden if this is a "show" and
15117				// there is still data from a stopped show/hide
15118				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
15119					hidden = true;
15120
15121				// Ignore all other no-op show/hide data
15122				} else {
15123					continue;
15124				}
15125			}
15126			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
15127		}
15128	}
15129
15130	// Bail out if this is a no-op like .hide().hide()
15131	propTween = !jQuery.isEmptyObject( props );
15132	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
15133		return;
15134	}
15135
15136	// Restrict "overflow" and "display" styles during box animations
15137	if ( isBox && elem.nodeType === 1 ) {
15138
15139		// Support: IE <=9 - 11, Edge 12 - 15
15140		// Record all 3 overflow attributes because IE does not infer the shorthand
15141		// from identically-valued overflowX and overflowY and Edge just mirrors
15142		// the overflowX value there.
15143		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
15144
15145		// Identify a display type, preferring old show/hide data over the CSS cascade
15146		restoreDisplay = dataShow && dataShow.display;
15147		if ( restoreDisplay == null ) {
15148			restoreDisplay = dataPriv.get( elem, "display" );
15149		}
15150		display = jQuery.css( elem, "display" );
15151		if ( display === "none" ) {
15152			if ( restoreDisplay ) {
15153				display = restoreDisplay;
15154			} else {
15155
15156				// Get nonempty value(s) by temporarily forcing visibility
15157				showHide( [ elem ], true );
15158				restoreDisplay = elem.style.display || restoreDisplay;
15159				display = jQuery.css( elem, "display" );
15160				showHide( [ elem ] );
15161			}
15162		}
15163
15164		// Animate inline elements as inline-block
15165		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
15166			if ( jQuery.css( elem, "float" ) === "none" ) {
15167
15168				// Restore the original display value at the end of pure show/hide animations
15169				if ( !propTween ) {
15170					anim.done( function() {
15171						style.display = restoreDisplay;
15172					} );
15173					if ( restoreDisplay == null ) {
15174						display = style.display;
15175						restoreDisplay = display === "none" ? "" : display;
15176					}
15177				}
15178				style.display = "inline-block";
15179			}
15180		}
15181	}
15182
15183	if ( opts.overflow ) {
15184		style.overflow = "hidden";
15185		anim.always( function() {
15186			style.overflow = opts.overflow[ 0 ];
15187			style.overflowX = opts.overflow[ 1 ];
15188			style.overflowY = opts.overflow[ 2 ];
15189		} );
15190	}
15191
15192	// Implement show/hide animations
15193	propTween = false;
15194	for ( prop in orig ) {
15195
15196		// General show/hide setup for this element animation
15197		if ( !propTween ) {
15198			if ( dataShow ) {
15199				if ( "hidden" in dataShow ) {
15200					hidden = dataShow.hidden;
15201				}
15202			} else {
15203				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
15204			}
15205
15206			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
15207			if ( toggle ) {
15208				dataShow.hidden = !hidden;
15209			}
15210
15211			// Show elements before animating them
15212			if ( hidden ) {
15213				showHide( [ elem ], true );
15214			}
15215
15216			/* eslint-disable no-loop-func */
15217
15218			anim.done( function() {
15219
15220				/* eslint-enable no-loop-func */
15221
15222				// The final step of a "hide" animation is actually hiding the element
15223				if ( !hidden ) {
15224					showHide( [ elem ] );
15225				}
15226				dataPriv.remove( elem, "fxshow" );
15227				for ( prop in orig ) {
15228					jQuery.style( elem, prop, orig[ prop ] );
15229				}
15230			} );
15231		}
15232
15233		// Per-property setup
15234		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
15235		if ( !( prop in dataShow ) ) {
15236			dataShow[ prop ] = propTween.start;
15237			if ( hidden ) {
15238				propTween.end = propTween.start;
15239				propTween.start = 0;
15240			}
15241		}
15242	}
15243}
15244
15245function propFilter( props, specialEasing ) {
15246	var index, name, easing, value, hooks;
15247
15248	// camelCase, specialEasing and expand cssHook pass
15249	for ( index in props ) {
15250		name = camelCase( index );
15251		easing = specialEasing[ name ];
15252		value = props[ index ];
15253		if ( Array.isArray( value ) ) {
15254			easing = value[ 1 ];
15255			value = props[ index ] = value[ 0 ];
15256		}
15257
15258		if ( index !== name ) {
15259			props[ name ] = value;
15260			delete props[ index ];
15261		}
15262
15263		hooks = jQuery.cssHooks[ name ];
15264		if ( hooks && "expand" in hooks ) {
15265			value = hooks.expand( value );
15266			delete props[ name ];
15267
15268			// Not quite $.extend, this won't overwrite existing keys.
15269			// Reusing 'index' because we have the correct "name"
15270			for ( index in value ) {
15271				if ( !( index in props ) ) {
15272					props[ index ] = value[ index ];
15273					specialEasing[ index ] = easing;
15274				}
15275			}
15276		} else {
15277			specialEasing[ name ] = easing;
15278		}
15279	}
15280}
15281
15282function Animation( elem, properties, options ) {
15283	var result,
15284		stopped,
15285		index = 0,
15286		length = Animation.prefilters.length,
15287		deferred = jQuery.Deferred().always( function() {
15288
15289			// Don't match elem in the :animated selector
15290			delete tick.elem;
15291		} ),
15292		tick = function() {
15293			if ( stopped ) {
15294				return false;
15295			}
15296			var currentTime = fxNow || createFxNow(),
15297				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
15298
15299				// Support: Android 2.3 only
15300				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)
15301				temp = remaining / animation.duration || 0,
15302				percent = 1 - temp,
15303				index = 0,
15304				length = animation.tweens.length;
15305
15306			for ( ; index < length; index++ ) {
15307				animation.tweens[ index ].run( percent );
15308			}
15309
15310			deferred.notifyWith( elem, [ animation, percent, remaining ] );
15311
15312			// If there's more to do, yield
15313			if ( percent < 1 && length ) {
15314				return remaining;
15315			}
15316
15317			// If this was an empty animation, synthesize a final progress notification
15318			if ( !length ) {
15319				deferred.notifyWith( elem, [ animation, 1, 0 ] );
15320			}
15321
15322			// Resolve the animation and report its conclusion
15323			deferred.resolveWith( elem, [ animation ] );
15324			return false;
15325		},
15326		animation = deferred.promise( {
15327			elem: elem,
15328			props: jQuery.extend( {}, properties ),
15329			opts: jQuery.extend( true, {
15330				specialEasing: {},
15331				easing: jQuery.easing._default
15332			}, options ),
15333			originalProperties: properties,
15334			originalOptions: options,
15335			startTime: fxNow || createFxNow(),
15336			duration: options.duration,
15337			tweens: [],
15338			createTween: function( prop, end ) {
15339				var tween = jQuery.Tween( elem, animation.opts, prop, end,
15340					animation.opts.specialEasing[ prop ] || animation.opts.easing );
15341				animation.tweens.push( tween );
15342				return tween;
15343			},
15344			stop: function( gotoEnd ) {
15345				var index = 0,
15346
15347					// If we are going to the end, we want to run all the tweens
15348					// otherwise we skip this part
15349					length = gotoEnd ? animation.tweens.length : 0;
15350				if ( stopped ) {
15351					return this;
15352				}
15353				stopped = true;
15354				for ( ; index < length; index++ ) {
15355					animation.tweens[ index ].run( 1 );
15356				}
15357
15358				// Resolve when we played the last frame; otherwise, reject
15359				if ( gotoEnd ) {
15360					deferred.notifyWith( elem, [ animation, 1, 0 ] );
15361					deferred.resolveWith( elem, [ animation, gotoEnd ] );
15362				} else {
15363					deferred.rejectWith( elem, [ animation, gotoEnd ] );
15364				}
15365				return this;
15366			}
15367		} ),
15368		props = animation.props;
15369
15370	propFilter( props, animation.opts.specialEasing );
15371
15372	for ( ; index < length; index++ ) {
15373		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
15374		if ( result ) {
15375			if ( isFunction( result.stop ) ) {
15376				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
15377					result.stop.bind( result );
15378			}
15379			return result;
15380		}
15381	}
15382
15383	jQuery.map( props, createTween, animation );
15384
15385	if ( isFunction( animation.opts.start ) ) {
15386		animation.opts.start.call( elem, animation );
15387	}
15388
15389	// Attach callbacks from options
15390	animation
15391		.progress( animation.opts.progress )
15392		.done( animation.opts.done, animation.opts.complete )
15393		.fail( animation.opts.fail )
15394		.always( animation.opts.always );
15395
15396	jQuery.fx.timer(
15397		jQuery.extend( tick, {
15398			elem: elem,
15399			anim: animation,
15400			queue: animation.opts.queue
15401		} )
15402	);
15403
15404	return animation;
15405}
15406
15407jQuery.Animation = jQuery.extend( Animation, {
15408
15409	tweeners: {
15410		"*": [ function( prop, value ) {
15411			var tween = this.createTween( prop, value );
15412			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
15413			return tween;
15414		} ]
15415	},
15416
15417	tweener: function( props, callback ) {
15418		if ( isFunction( props ) ) {
15419			callback = props;
15420			props = [ "*" ];
15421		} else {
15422			props = props.match( rnothtmlwhite );
15423		}
15424
15425		var prop,
15426			index = 0,
15427			length = props.length;
15428
15429		for ( ; index < length; index++ ) {
15430			prop = props[ index ];
15431			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
15432			Animation.tweeners[ prop ].unshift( callback );
15433		}
15434	},
15435
15436	prefilters: [ defaultPrefilter ],
15437
15438	prefilter: function( callback, prepend ) {
15439		if ( prepend ) {
15440			Animation.prefilters.unshift( callback );
15441		} else {
15442			Animation.prefilters.push( callback );
15443		}
15444	}
15445} );
15446
15447jQuery.speed = function( speed, easing, fn ) {
15448	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
15449		complete: fn || !fn && easing ||
15450			isFunction( speed ) && speed,
15451		duration: speed,
15452		easing: fn && easing || easing && !isFunction( easing ) && easing
15453	};
15454
15455	// Go to the end state if fx are off
15456	if ( jQuery.fx.off ) {
15457		opt.duration = 0;
15458
15459	} else {
15460		if ( typeof opt.duration !== "number" ) {
15461			if ( opt.duration in jQuery.fx.speeds ) {
15462				opt.duration = jQuery.fx.speeds[ opt.duration ];
15463
15464			} else {
15465				opt.duration = jQuery.fx.speeds._default;
15466			}
15467		}
15468	}
15469
15470	// Normalize opt.queue - true/undefined/null -> "fx"
15471	if ( opt.queue == null || opt.queue === true ) {
15472		opt.queue = "fx";
15473	}
15474
15475	// Queueing
15476	opt.old = opt.complete;
15477
15478	opt.complete = function() {
15479		if ( isFunction( opt.old ) ) {
15480			opt.old.call( this );
15481		}
15482
15483		if ( opt.queue ) {
15484			jQuery.dequeue( this, opt.queue );
15485		}
15486	};
15487
15488	return opt;
15489};
15490
15491jQuery.fn.extend( {
15492	fadeTo: function( speed, to, easing, callback ) {
15493
15494		// Show any hidden elements after setting opacity to 0
15495		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
15496
15497			// Animate to the value specified
15498			.end().animate( { opacity: to }, speed, easing, callback );
15499	},
15500	animate: function( prop, speed, easing, callback ) {
15501		var empty = jQuery.isEmptyObject( prop ),
15502			optall = jQuery.speed( speed, easing, callback ),
15503			doAnimation = function() {
15504
15505				// Operate on a copy of prop so per-property easing won't be lost
15506				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
15507
15508				// Empty animations, or finishing resolves immediately
15509				if ( empty || dataPriv.get( this, "finish" ) ) {
15510					anim.stop( true );
15511				}
15512			};
15513
15514		doAnimation.finish = doAnimation;
15515
15516		return empty || optall.queue === false ?
15517			this.each( doAnimation ) :
15518			this.queue( optall.queue, doAnimation );
15519	},
15520	stop: function( type, clearQueue, gotoEnd ) {
15521		var stopQueue = function( hooks ) {
15522			var stop = hooks.stop;
15523			delete hooks.stop;
15524			stop( gotoEnd );
15525		};
15526
15527		if ( typeof type !== "string" ) {
15528			gotoEnd = clearQueue;
15529			clearQueue = type;
15530			type = undefined;
15531		}
15532		if ( clearQueue ) {
15533			this.queue( type || "fx", [] );
15534		}
15535
15536		return this.each( function() {
15537			var dequeue = true,
15538				index = type != null && type + "queueHooks",
15539				timers = jQuery.timers,
15540				data = dataPriv.get( this );
15541
15542			if ( index ) {
15543				if ( data[ index ] && data[ index ].stop ) {
15544					stopQueue( data[ index ] );
15545				}
15546			} else {
15547				for ( index in data ) {
15548					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
15549						stopQueue( data[ index ] );
15550					}
15551				}
15552			}
15553
15554			for ( index = timers.length; index--; ) {
15555				if ( timers[ index ].elem === this &&
15556					( type == null || timers[ index ].queue === type ) ) {
15557
15558					timers[ index ].anim.stop( gotoEnd );
15559					dequeue = false;
15560					timers.splice( index, 1 );
15561				}
15562			}
15563
15564			// Start the next in the queue if the last step wasn't forced.
15565			// Timers currently will call their complete callbacks, which
15566			// will dequeue but only if they were gotoEnd.
15567			if ( dequeue || !gotoEnd ) {
15568				jQuery.dequeue( this, type );
15569			}
15570		} );
15571	},
15572	finish: function( type ) {
15573		if ( type !== false ) {
15574			type = type || "fx";
15575		}
15576		return this.each( function() {
15577			var index,
15578				data = dataPriv.get( this ),
15579				queue = data[ type + "queue" ],
15580				hooks = data[ type + "queueHooks" ],
15581				timers = jQuery.timers,
15582				length = queue ? queue.length : 0;
15583
15584			// Enable finishing flag on private data
15585			data.finish = true;
15586
15587			// Empty the queue first
15588			jQuery.queue( this, type, [] );
15589
15590			if ( hooks && hooks.stop ) {
15591				hooks.stop.call( this, true );
15592			}
15593
15594			// Look for any active animations, and finish them
15595			for ( index = timers.length; index--; ) {
15596				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
15597					timers[ index ].anim.stop( true );
15598					timers.splice( index, 1 );
15599				}
15600			}
15601
15602			// Look for any animations in the old queue and finish them
15603			for ( index = 0; index < length; index++ ) {
15604				if ( queue[ index ] && queue[ index ].finish ) {
15605					queue[ index ].finish.call( this );
15606				}
15607			}
15608
15609			// Turn off finishing flag
15610			delete data.finish;
15611		} );
15612	}
15613} );
15614
15615jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
15616	var cssFn = jQuery.fn[ name ];
15617	jQuery.fn[ name ] = function( speed, easing, callback ) {
15618		return speed == null || typeof speed === "boolean" ?
15619			cssFn.apply( this, arguments ) :
15620			this.animate( genFx( name, true ), speed, easing, callback );
15621	};
15622} );
15623
15624// Generate shortcuts for custom animations
15625jQuery.each( {
15626	slideDown: genFx( "show" ),
15627	slideUp: genFx( "hide" ),
15628	slideToggle: genFx( "toggle" ),
15629	fadeIn: { opacity: "show" },
15630	fadeOut: { opacity: "hide" },
15631	fadeToggle: { opacity: "toggle" }
15632}, function( name, props ) {
15633	jQuery.fn[ name ] = function( speed, easing, callback ) {
15634		return this.animate( props, speed, easing, callback );
15635	};
15636} );
15637
15638jQuery.timers = [];
15639jQuery.fx.tick = function() {
15640	var timer,
15641		i = 0,
15642		timers = jQuery.timers;
15643
15644	fxNow = Date.now();
15645
15646	for ( ; i < timers.length; i++ ) {
15647		timer = timers[ i ];
15648
15649		// Run the timer and safely remove it when done (allowing for external removal)
15650		if ( !timer() && timers[ i ] === timer ) {
15651			timers.splice( i--, 1 );
15652		}
15653	}
15654
15655	if ( !timers.length ) {
15656		jQuery.fx.stop();
15657	}
15658	fxNow = undefined;
15659};
15660
15661jQuery.fx.timer = function( timer ) {
15662	jQuery.timers.push( timer );
15663	jQuery.fx.start();
15664};
15665
15666jQuery.fx.interval = 13;
15667jQuery.fx.start = function() {
15668	if ( inProgress ) {
15669		return;
15670	}
15671
15672	inProgress = true;
15673	schedule();
15674};
15675
15676jQuery.fx.stop = function() {
15677	inProgress = null;
15678};
15679
15680jQuery.fx.speeds = {
15681	slow: 600,
15682	fast: 200,
15683
15684	// Default speed
15685	_default: 400
15686};
15687
15688
15689// Based off of the plugin by Clint Helfers, with permission.
15690jQuery.fn.delay = function( time, type ) {
15691	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
15692	type = type || "fx";
15693
15694	return this.queue( type, function( next, hooks ) {
15695		var timeout = window.setTimeout( next, time );
15696		hooks.stop = function() {
15697			window.clearTimeout( timeout );
15698		};
15699	} );
15700};
15701
15702
15703( function() {
15704	var input = document.createElement( "input" ),
15705		select = document.createElement( "select" ),
15706		opt = select.appendChild( document.createElement( "option" ) );
15707
15708	input.type = "checkbox";
15709
15710	// Support: Android <=4.3 only
15711	// Default value for a checkbox should be "on"
15712	support.checkOn = input.value !== "";
15713
15714	// Support: IE <=11 only
15715	// Must access selectedIndex to make default options select
15716	support.optSelected = opt.selected;
15717
15718	// Support: IE <=11 only
15719	// An input loses its value after becoming a radio
15720	input = document.createElement( "input" );
15721	input.value = "t";
15722	input.type = "radio";
15723	support.radioValue = input.value === "t";
15724} )();
15725
15726
15727var boolHook,
15728	attrHandle = jQuery.expr.attrHandle;
15729
15730jQuery.fn.extend( {
15731	attr: function( name, value ) {
15732		return access( this, jQuery.attr, name, value, arguments.length > 1 );
15733	},
15734
15735	removeAttr: function( name ) {
15736		return this.each( function() {
15737			jQuery.removeAttr( this, name );
15738		} );
15739	}
15740} );
15741
15742jQuery.extend( {
15743	attr: function( elem, name, value ) {
15744		var ret, hooks,
15745			nType = elem.nodeType;
15746
15747		// Don't get/set attributes on text, comment and attribute nodes
15748		if ( nType === 3 || nType === 8 || nType === 2 ) {
15749			return;
15750		}
15751
15752		// Fallback to prop when attributes are not supported
15753		if ( typeof elem.getAttribute === "undefined" ) {
15754			return jQuery.prop( elem, name, value );
15755		}
15756
15757		// Attribute hooks are determined by the lowercase version
15758		// Grab necessary hook if one is defined
15759		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
15760			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
15761				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
15762		}
15763
15764		if ( value !== undefined ) {
15765			if ( value === null ) {
15766				jQuery.removeAttr( elem, name );
15767				return;
15768			}
15769
15770			if ( hooks && "set" in hooks &&
15771				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
15772				return ret;
15773			}
15774
15775			elem.setAttribute( name, value + "" );
15776			return value;
15777		}
15778
15779		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
15780			return ret;
15781		}
15782
15783		ret = jQuery.find.attr( elem, name );
15784
15785		// Non-existent attributes return null, we normalize to undefined
15786		return ret == null ? undefined : ret;
15787	},
15788
15789	attrHooks: {
15790		type: {
15791			set: function( elem, value ) {
15792				if ( !support.radioValue && value === "radio" &&
15793					nodeName( elem, "input" ) ) {
15794					var val = elem.value;
15795					elem.setAttribute( "type", value );
15796					if ( val ) {
15797						elem.value = val;
15798					}
15799					return value;
15800				}
15801			}
15802		}
15803	},
15804
15805	removeAttr: function( elem, value ) {
15806		var name,
15807			i = 0,
15808
15809			// Attribute names can contain non-HTML whitespace characters
15810			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
15811			attrNames = value && value.match( rnothtmlwhite );
15812
15813		if ( attrNames && elem.nodeType === 1 ) {
15814			while ( ( name = attrNames[ i++ ] ) ) {
15815				elem.removeAttribute( name );
15816			}
15817		}
15818	}
15819} );
15820
15821// Hooks for boolean attributes
15822boolHook = {
15823	set: function( elem, value, name ) {
15824		if ( value === false ) {
15825
15826			// Remove boolean attributes when set to false
15827			jQuery.removeAttr( elem, name );
15828		} else {
15829			elem.setAttribute( name, name );
15830		}
15831		return name;
15832	}
15833};
15834
15835jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
15836	var getter = attrHandle[ name ] || jQuery.find.attr;
15837
15838	attrHandle[ name ] = function( elem, name, isXML ) {
15839		var ret, handle,
15840			lowercaseName = name.toLowerCase();
15841
15842		if ( !isXML ) {
15843
15844			// Avoid an infinite loop by temporarily removing this function from the getter
15845			handle = attrHandle[ lowercaseName ];
15846			attrHandle[ lowercaseName ] = ret;
15847			ret = getter( elem, name, isXML ) != null ?
15848				lowercaseName :
15849				null;
15850			attrHandle[ lowercaseName ] = handle;
15851		}
15852		return ret;
15853	};
15854} );
15855
15856
15857
15858
15859var rfocusable = /^(?:input|select|textarea|button)$/i,
15860	rclickable = /^(?:a|area)$/i;
15861
15862jQuery.fn.extend( {
15863	prop: function( name, value ) {
15864		return access( this, jQuery.prop, name, value, arguments.length > 1 );
15865	},
15866
15867	removeProp: function( name ) {
15868		return this.each( function() {
15869			delete this[ jQuery.propFix[ name ] || name ];
15870		} );
15871	}
15872} );
15873
15874jQuery.extend( {
15875	prop: function( elem, name, value ) {
15876		var ret, hooks,
15877			nType = elem.nodeType;
15878
15879		// Don't get/set properties on text, comment and attribute nodes
15880		if ( nType === 3 || nType === 8 || nType === 2 ) {
15881			return;
15882		}
15883
15884		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
15885
15886			// Fix name and attach hooks
15887			name = jQuery.propFix[ name ] || name;
15888			hooks = jQuery.propHooks[ name ];
15889		}
15890
15891		if ( value !== undefined ) {
15892			if ( hooks && "set" in hooks &&
15893				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
15894				return ret;
15895			}
15896
15897			return ( elem[ name ] = value );
15898		}
15899
15900		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
15901			return ret;
15902		}
15903
15904		return elem[ name ];
15905	},
15906
15907	propHooks: {
15908		tabIndex: {
15909			get: function( elem ) {
15910
15911				// Support: IE <=9 - 11 only
15912				// elem.tabIndex doesn't always return the
15913				// correct value when it hasn't been explicitly set
15914				// Use proper attribute retrieval (trac-12072)
15915				var tabindex = jQuery.find.attr( elem, "tabindex" );
15916
15917				if ( tabindex ) {
15918					return parseInt( tabindex, 10 );
15919				}
15920
15921				if (
15922					rfocusable.test( elem.nodeName ) ||
15923					rclickable.test( elem.nodeName ) &&
15924					elem.href
15925				) {
15926					return 0;
15927				}
15928
15929				return -1;
15930			}
15931		}
15932	},
15933
15934	propFix: {
15935		"for": "htmlFor",
15936		"class": "className"
15937	}
15938} );
15939
15940// Support: IE <=11 only
15941// Accessing the selectedIndex property
15942// forces the browser to respect setting selected
15943// on the option
15944// The getter ensures a default option is selected
15945// when in an optgroup
15946// eslint rule "no-unused-expressions" is disabled for this code
15947// since it considers such accessions noop
15948if ( !support.optSelected ) {
15949	jQuery.propHooks.selected = {
15950		get: function( elem ) {
15951
15952			/* eslint no-unused-expressions: "off" */
15953
15954			var parent = elem.parentNode;
15955			if ( parent && parent.parentNode ) {
15956				parent.parentNode.selectedIndex;
15957			}
15958			return null;
15959		},
15960		set: function( elem ) {
15961
15962			/* eslint no-unused-expressions: "off" */
15963
15964			var parent = elem.parentNode;
15965			if ( parent ) {
15966				parent.selectedIndex;
15967
15968				if ( parent.parentNode ) {
15969					parent.parentNode.selectedIndex;
15970				}
15971			}
15972		}
15973	};
15974}
15975
15976jQuery.each( [
15977	"tabIndex",
15978	"readOnly",
15979	"maxLength",
15980	"cellSpacing",
15981	"cellPadding",
15982	"rowSpan",
15983	"colSpan",
15984	"useMap",
15985	"frameBorder",
15986	"contentEditable"
15987], function() {
15988	jQuery.propFix[ this.toLowerCase() ] = this;
15989} );
15990
15991
15992
15993
15994	// Strip and collapse whitespace according to HTML spec
15995	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
15996	function stripAndCollapse( value ) {
15997		var tokens = value.match( rnothtmlwhite ) || [];
15998		return tokens.join( " " );
15999	}
16000
16001
16002function getClass( elem ) {
16003	return elem.getAttribute && elem.getAttribute( "class" ) || "";
16004}
16005
16006function classesToArray( value ) {
16007	if ( Array.isArray( value ) ) {
16008		return value;
16009	}
16010	if ( typeof value === "string" ) {
16011		return value.match( rnothtmlwhite ) || [];
16012	}
16013	return [];
16014}
16015
16016jQuery.fn.extend( {
16017	addClass: function( value ) {
16018		var classNames, cur, curValue, className, i, finalValue;
16019
16020		if ( isFunction( value ) ) {
16021			return this.each( function( j ) {
16022				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
16023			} );
16024		}
16025
16026		classNames = classesToArray( value );
16027
16028		if ( classNames.length ) {
16029			return this.each( function() {
16030				curValue = getClass( this );
16031				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
16032
16033				if ( cur ) {
16034					for ( i = 0; i < classNames.length; i++ ) {
16035						className = classNames[ i ];
16036						if ( cur.indexOf( " " + className + " " ) < 0 ) {
16037							cur += className + " ";
16038						}
16039					}
16040
16041					// Only assign if different to avoid unneeded rendering.
16042					finalValue = stripAndCollapse( cur );
16043					if ( curValue !== finalValue ) {
16044						this.setAttribute( "class", finalValue );
16045					}
16046				}
16047			} );
16048		}
16049
16050		return this;
16051	},
16052
16053	removeClass: function( value ) {
16054		var classNames, cur, curValue, className, i, finalValue;
16055
16056		if ( isFunction( value ) ) {
16057			return this.each( function( j ) {
16058				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
16059			} );
16060		}
16061
16062		if ( !arguments.length ) {
16063			return this.attr( "class", "" );
16064		}
16065
16066		classNames = classesToArray( value );
16067
16068		if ( classNames.length ) {
16069			return this.each( function() {
16070				curValue = getClass( this );
16071
16072				// This expression is here for better compressibility (see addClass)
16073				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
16074
16075				if ( cur ) {
16076					for ( i = 0; i < classNames.length; i++ ) {
16077						className = classNames[ i ];
16078
16079						// Remove *all* instances
16080						while ( cur.indexOf( " " + className + " " ) > -1 ) {
16081							cur = cur.replace( " " + className + " ", " " );
16082						}
16083					}
16084
16085					// Only assign if different to avoid unneeded rendering.
16086					finalValue = stripAndCollapse( cur );
16087					if ( curValue !== finalValue ) {
16088						this.setAttribute( "class", finalValue );
16089					}
16090				}
16091			} );
16092		}
16093
16094		return this;
16095	},
16096
16097	toggleClass: function( value, stateVal ) {
16098		var classNames, className, i, self,
16099			type = typeof value,
16100			isValidValue = type === "string" || Array.isArray( value );
16101
16102		if ( isFunction( value ) ) {
16103			return this.each( function( i ) {
16104				jQuery( this ).toggleClass(
16105					value.call( this, i, getClass( this ), stateVal ),
16106					stateVal
16107				);
16108			} );
16109		}
16110
16111		if ( typeof stateVal === "boolean" && isValidValue ) {
16112			return stateVal ? this.addClass( value ) : this.removeClass( value );
16113		}
16114
16115		classNames = classesToArray( value );
16116
16117		return this.each( function() {
16118			if ( isValidValue ) {
16119
16120				// Toggle individual class names
16121				self = jQuery( this );
16122
16123				for ( i = 0; i < classNames.length; i++ ) {
16124					className = classNames[ i ];
16125
16126					// Check each className given, space separated list
16127					if ( self.hasClass( className ) ) {
16128						self.removeClass( className );
16129					} else {
16130						self.addClass( className );
16131					}
16132				}
16133
16134			// Toggle whole class name
16135			} else if ( value === undefined || type === "boolean" ) {
16136				className = getClass( this );
16137				if ( className ) {
16138
16139					// Store className if set
16140					dataPriv.set( this, "__className__", className );
16141				}
16142
16143				// If the element has a class name or if we're passed `false`,
16144				// then remove the whole classname (if there was one, the above saved it).
16145				// Otherwise bring back whatever was previously saved (if anything),
16146				// falling back to the empty string if nothing was stored.
16147				if ( this.setAttribute ) {
16148					this.setAttribute( "class",
16149						className || value === false ?
16150							"" :
16151							dataPriv.get( this, "__className__" ) || ""
16152					);
16153				}
16154			}
16155		} );
16156	},
16157
16158	hasClass: function( selector ) {
16159		var className, elem,
16160			i = 0;
16161
16162		className = " " + selector + " ";
16163		while ( ( elem = this[ i++ ] ) ) {
16164			if ( elem.nodeType === 1 &&
16165				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
16166				return true;
16167			}
16168		}
16169
16170		return false;
16171	}
16172} );
16173
16174
16175
16176
16177var rreturn = /\r/g;
16178
16179jQuery.fn.extend( {
16180	val: function( value ) {
16181		var hooks, ret, valueIsFunction,
16182			elem = this[ 0 ];
16183
16184		if ( !arguments.length ) {
16185			if ( elem ) {
16186				hooks = jQuery.valHooks[ elem.type ] ||
16187					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
16188
16189				if ( hooks &&
16190					"get" in hooks &&
16191					( ret = hooks.get( elem, "value" ) ) !== undefined
16192				) {
16193					return ret;
16194				}
16195
16196				ret = elem.value;
16197
16198				// Handle most common string cases
16199				if ( typeof ret === "string" ) {
16200					return ret.replace( rreturn, "" );
16201				}
16202
16203				// Handle cases where value is null/undef or number
16204				return ret == null ? "" : ret;
16205			}
16206
16207			return;
16208		}
16209
16210		valueIsFunction = isFunction( value );
16211
16212		return this.each( function( i ) {
16213			var val;
16214
16215			if ( this.nodeType !== 1 ) {
16216				return;
16217			}
16218
16219			if ( valueIsFunction ) {
16220				val = value.call( this, i, jQuery( this ).val() );
16221			} else {
16222				val = value;
16223			}
16224
16225			// Treat null/undefined as ""; convert numbers to string
16226			if ( val == null ) {
16227				val = "";
16228
16229			} else if ( typeof val === "number" ) {
16230				val += "";
16231
16232			} else if ( Array.isArray( val ) ) {
16233				val = jQuery.map( val, function( value ) {
16234					return value == null ? "" : value + "";
16235				} );
16236			}
16237
16238			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
16239
16240			// If set returns undefined, fall back to normal setting
16241			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
16242				this.value = val;
16243			}
16244		} );
16245	}
16246} );
16247
16248jQuery.extend( {
16249	valHooks: {
16250		option: {
16251			get: function( elem ) {
16252
16253				var val = jQuery.find.attr( elem, "value" );
16254				return val != null ?
16255					val :
16256
16257					// Support: IE <=10 - 11 only
16258					// option.text throws exceptions (trac-14686, trac-14858)
16259					// Strip and collapse whitespace
16260					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
16261					stripAndCollapse( jQuery.text( elem ) );
16262			}
16263		},
16264		select: {
16265			get: function( elem ) {
16266				var value, option, i,
16267					options = elem.options,
16268					index = elem.selectedIndex,
16269					one = elem.type === "select-one",
16270					values = one ? null : [],
16271					max = one ? index + 1 : options.length;
16272
16273				if ( index < 0 ) {
16274					i = max;
16275
16276				} else {
16277					i = one ? index : 0;
16278				}
16279
16280				// Loop through all the selected options
16281				for ( ; i < max; i++ ) {
16282					option = options[ i ];
16283
16284					// Support: IE <=9 only
16285					// IE8-9 doesn't update selected after form reset (trac-2551)
16286					if ( ( option.selected || i === index ) &&
16287
16288							// Don't return options that are disabled or in a disabled optgroup
16289							!option.disabled &&
16290							( !option.parentNode.disabled ||
16291								!nodeName( option.parentNode, "optgroup" ) ) ) {
16292
16293						// Get the specific value for the option
16294						value = jQuery( option ).val();
16295
16296						// We don't need an array for one selects
16297						if ( one ) {
16298							return value;
16299						}
16300
16301						// Multi-Selects return an array
16302						values.push( value );
16303					}
16304				}
16305
16306				return values;
16307			},
16308
16309			set: function( elem, value ) {
16310				var optionSet, option,
16311					options = elem.options,
16312					values = jQuery.makeArray( value ),
16313					i = options.length;
16314
16315				while ( i-- ) {
16316					option = options[ i ];
16317
16318					/* eslint-disable no-cond-assign */
16319
16320					if ( option.selected =
16321						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
16322					) {
16323						optionSet = true;
16324					}
16325
16326					/* eslint-enable no-cond-assign */
16327				}
16328
16329				// Force browsers to behave consistently when non-matching value is set
16330				if ( !optionSet ) {
16331					elem.selectedIndex = -1;
16332				}
16333				return values;
16334			}
16335		}
16336	}
16337} );
16338
16339// Radios and checkboxes getter/setter
16340jQuery.each( [ "radio", "checkbox" ], function() {
16341	jQuery.valHooks[ this ] = {
16342		set: function( elem, value ) {
16343			if ( Array.isArray( value ) ) {
16344				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
16345			}
16346		}
16347	};
16348	if ( !support.checkOn ) {
16349		jQuery.valHooks[ this ].get = function( elem ) {
16350			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
16351		};
16352	}
16353} );
16354
16355
16356
16357
16358// Return jQuery for attributes-only inclusion
16359var location = window.location;
16360
16361var nonce = { guid: Date.now() };
16362
16363var rquery = ( /\?/ );
16364
16365
16366
16367// Cross-browser xml parsing
16368jQuery.parseXML = function( data ) {
16369	var xml, parserErrorElem;
16370	if ( !data || typeof data !== "string" ) {
16371		return null;
16372	}
16373
16374	// Support: IE 9 - 11 only
16375	// IE throws on parseFromString with invalid input.
16376	try {
16377		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
16378	} catch ( e ) {}
16379
16380	parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
16381	if ( !xml || parserErrorElem ) {
16382		jQuery.error( "Invalid XML: " + (
16383			parserErrorElem ?
16384				jQuery.map( parserErrorElem.childNodes, function( el ) {
16385					return el.textContent;
16386				} ).join( "\n" ) :
16387				data
16388		) );
16389	}
16390	return xml;
16391};
16392
16393
16394var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
16395	stopPropagationCallback = function( e ) {
16396		e.stopPropagation();
16397	};
16398
16399jQuery.extend( jQuery.event, {
16400
16401	trigger: function( event, data, elem, onlyHandlers ) {
16402
16403		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
16404			eventPath = [ elem || document ],
16405			type = hasOwn.call( event, "type" ) ? event.type : event,
16406			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
16407
16408		cur = lastElement = tmp = elem = elem || document;
16409
16410		// Don't do events on text and comment nodes
16411		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
16412			return;
16413		}
16414
16415		// focus/blur morphs to focusin/out; ensure we're not firing them right now
16416		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
16417			return;
16418		}
16419
16420		if ( type.indexOf( "." ) > -1 ) {
16421
16422			// Namespaced trigger; create a regexp to match event type in handle()
16423			namespaces = type.split( "." );
16424			type = namespaces.shift();
16425			namespaces.sort();
16426		}
16427		ontype = type.indexOf( ":" ) < 0 && "on" + type;
16428
16429		// Caller can pass in a jQuery.Event object, Object, or just an event type string
16430		event = event[ jQuery.expando ] ?
16431			event :
16432			new jQuery.Event( type, typeof event === "object" && event );
16433
16434		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
16435		event.isTrigger = onlyHandlers ? 2 : 3;
16436		event.namespace = namespaces.join( "." );
16437		event.rnamespace = event.namespace ?
16438			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
16439			null;
16440
16441		// Clean up the event in case it is being reused
16442		event.result = undefined;
16443		if ( !event.target ) {
16444			event.target = elem;
16445		}
16446
16447		// Clone any incoming data and prepend the event, creating the handler arg list
16448		data = data == null ?
16449			[ event ] :
16450			jQuery.makeArray( data, [ event ] );
16451
16452		// Allow special events to draw outside the lines
16453		special = jQuery.event.special[ type ] || {};
16454		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
16455			return;
16456		}
16457
16458		// Determine event propagation path in advance, per W3C events spec (trac-9951)
16459		// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
16460		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
16461
16462			bubbleType = special.delegateType || type;
16463			if ( !rfocusMorph.test( bubbleType + type ) ) {
16464				cur = cur.parentNode;
16465			}
16466			for ( ; cur; cur = cur.parentNode ) {
16467				eventPath.push( cur );
16468				tmp = cur;
16469			}
16470
16471			// Only add window if we got to document (e.g., not plain obj or detached DOM)
16472			if ( tmp === ( elem.ownerDocument || document ) ) {
16473				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
16474			}
16475		}
16476
16477		// Fire handlers on the event path
16478		i = 0;
16479		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
16480			lastElement = cur;
16481			event.type = i > 1 ?
16482				bubbleType :
16483				special.bindType || type;
16484
16485			// jQuery handler
16486			handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
16487				dataPriv.get( cur, "handle" );
16488			if ( handle ) {
16489				handle.apply( cur, data );
16490			}
16491
16492			// Native handler
16493			handle = ontype && cur[ ontype ];
16494			if ( handle && handle.apply && acceptData( cur ) ) {
16495				event.result = handle.apply( cur, data );
16496				if ( event.result === false ) {
16497					event.preventDefault();
16498				}
16499			}
16500		}
16501		event.type = type;
16502
16503		// If nobody prevented the default action, do it now
16504		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
16505
16506			if ( ( !special._default ||
16507				special._default.apply( eventPath.pop(), data ) === false ) &&
16508				acceptData( elem ) ) {
16509
16510				// Call a native DOM method on the target with the same name as the event.
16511				// Don't do default actions on window, that's where global variables be (trac-6170)
16512				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
16513
16514					// Don't re-trigger an onFOO event when we call its FOO() method
16515					tmp = elem[ ontype ];
16516
16517					if ( tmp ) {
16518						elem[ ontype ] = null;
16519					}
16520
16521					// Prevent re-triggering of the same event, since we already bubbled it above
16522					jQuery.event.triggered = type;
16523
16524					if ( event.isPropagationStopped() ) {
16525						lastElement.addEventListener( type, stopPropagationCallback );
16526					}
16527
16528					elem[ type ]();
16529
16530					if ( event.isPropagationStopped() ) {
16531						lastElement.removeEventListener( type, stopPropagationCallback );
16532					}
16533
16534					jQuery.event.triggered = undefined;
16535
16536					if ( tmp ) {
16537						elem[ ontype ] = tmp;
16538					}
16539				}
16540			}
16541		}
16542
16543		return event.result;
16544	},
16545
16546	// Piggyback on a donor event to simulate a different one
16547	// Used only for `focus(in | out)` events
16548	simulate: function( type, elem, event ) {
16549		var e = jQuery.extend(
16550			new jQuery.Event(),
16551			event,
16552			{
16553				type: type,
16554				isSimulated: true
16555			}
16556		);
16557
16558		jQuery.event.trigger( e, null, elem );
16559	}
16560
16561} );
16562
16563jQuery.fn.extend( {
16564
16565	trigger: function( type, data ) {
16566		return this.each( function() {
16567			jQuery.event.trigger( type, data, this );
16568		} );
16569	},
16570	triggerHandler: function( type, data ) {
16571		var elem = this[ 0 ];
16572		if ( elem ) {
16573			return jQuery.event.trigger( type, data, elem, true );
16574		}
16575	}
16576} );
16577
16578
16579var
16580	rbracket = /\[\]$/,
16581	rCRLF = /\r?\n/g,
16582	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
16583	rsubmittable = /^(?:input|select|textarea|keygen)/i;
16584
16585function buildParams( prefix, obj, traditional, add ) {
16586	var name;
16587
16588	if ( Array.isArray( obj ) ) {
16589
16590		// Serialize array item.
16591		jQuery.each( obj, function( i, v ) {
16592			if ( traditional || rbracket.test( prefix ) ) {
16593
16594				// Treat each array item as a scalar.
16595				add( prefix, v );
16596
16597			} else {
16598
16599				// Item is non-scalar (array or object), encode its numeric index.
16600				buildParams(
16601					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
16602					v,
16603					traditional,
16604					add
16605				);
16606			}
16607		} );
16608
16609	} else if ( !traditional && toType( obj ) === "object" ) {
16610
16611		// Serialize object item.
16612		for ( name in obj ) {
16613			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
16614		}
16615
16616	} else {
16617
16618		// Serialize scalar item.
16619		add( prefix, obj );
16620	}
16621}
16622
16623// Serialize an array of form elements or a set of
16624// key/values into a query string
16625jQuery.param = function( a, traditional ) {
16626	var prefix,
16627		s = [],
16628		add = function( key, valueOrFunction ) {
16629
16630			// If value is a function, invoke it and use its return value
16631			var value = isFunction( valueOrFunction ) ?
16632				valueOrFunction() :
16633				valueOrFunction;
16634
16635			s[ s.length ] = encodeURIComponent( key ) + "=" +
16636				encodeURIComponent( value == null ? "" : value );
16637		};
16638
16639	if ( a == null ) {
16640		return "";
16641	}
16642
16643	// If an array was passed in, assume that it is an array of form elements.
16644	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
16645
16646		// Serialize the form elements
16647		jQuery.each( a, function() {
16648			add( this.name, this.value );
16649		} );
16650
16651	} else {
16652
16653		// If traditional, encode the "old" way (the way 1.3.2 or older
16654		// did it), otherwise encode params recursively.
16655		for ( prefix in a ) {
16656			buildParams( prefix, a[ prefix ], traditional, add );
16657		}
16658	}
16659
16660	// Return the resulting serialization
16661	return s.join( "&" );
16662};
16663
16664jQuery.fn.extend( {
16665	serialize: function() {
16666		return jQuery.param( this.serializeArray() );
16667	},
16668	serializeArray: function() {
16669		return this.map( function() {
16670
16671			// Can add propHook for "elements" to filter or add form elements
16672			var elements = jQuery.prop( this, "elements" );
16673			return elements ? jQuery.makeArray( elements ) : this;
16674		} ).filter( function() {
16675			var type = this.type;
16676
16677			// Use .is( ":disabled" ) so that fieldset[disabled] works
16678			return this.name && !jQuery( this ).is( ":disabled" ) &&
16679				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
16680				( this.checked || !rcheckableType.test( type ) );
16681		} ).map( function( _i, elem ) {
16682			var val = jQuery( this ).val();
16683
16684			if ( val == null ) {
16685				return null;
16686			}
16687
16688			if ( Array.isArray( val ) ) {
16689				return jQuery.map( val, function( val ) {
16690					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
16691				} );
16692			}
16693
16694			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
16695		} ).get();
16696	}
16697} );
16698
16699
16700var
16701	r20 = /%20/g,
16702	rhash = /#.*$/,
16703	rantiCache = /([?&])_=[^&]*/,
16704	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
16705
16706	// trac-7653, trac-8125, trac-8152: local protocol detection
16707	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
16708	rnoContent = /^(?:GET|HEAD)$/,
16709	rprotocol = /^\/\//,
16710
16711	/* Prefilters
16712	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
16713	 * 2) These are called:
16714	 *    - BEFORE asking for a transport
16715	 *    - AFTER param serialization (s.data is a string if s.processData is true)
16716	 * 3) key is the dataType
16717	 * 4) the catchall symbol "*" can be used
16718	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
16719	 */
16720	prefilters = {},
16721
16722	/* Transports bindings
16723	 * 1) key is the dataType
16724	 * 2) the catchall symbol "*" can be used
16725	 * 3) selection will start with transport dataType and THEN go to "*" if needed
16726	 */
16727	transports = {},
16728
16729	// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
16730	allTypes = "*/".concat( "*" ),
16731
16732	// Anchor tag for parsing the document origin
16733	originAnchor = document.createElement( "a" );
16734
16735originAnchor.href = location.href;
16736
16737// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
16738function addToPrefiltersOrTransports( structure ) {
16739
16740	// dataTypeExpression is optional and defaults to "*"
16741	return function( dataTypeExpression, func ) {
16742
16743		if ( typeof dataTypeExpression !== "string" ) {
16744			func = dataTypeExpression;
16745			dataTypeExpression = "*";
16746		}
16747
16748		var dataType,
16749			i = 0,
16750			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
16751
16752		if ( isFunction( func ) ) {
16753
16754			// For each dataType in the dataTypeExpression
16755			while ( ( dataType = dataTypes[ i++ ] ) ) {
16756
16757				// Prepend if requested
16758				if ( dataType[ 0 ] === "+" ) {
16759					dataType = dataType.slice( 1 ) || "*";
16760					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
16761
16762				// Otherwise append
16763				} else {
16764					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
16765				}
16766			}
16767		}
16768	};
16769}
16770
16771// Base inspection function for prefilters and transports
16772function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
16773
16774	var inspected = {},
16775		seekingTransport = ( structure === transports );
16776
16777	function inspect( dataType ) {
16778		var selected;
16779		inspected[ dataType ] = true;
16780		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
16781			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
16782			if ( typeof dataTypeOrTransport === "string" &&
16783				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
16784
16785				options.dataTypes.unshift( dataTypeOrTransport );
16786				inspect( dataTypeOrTransport );
16787				return false;
16788			} else if ( seekingTransport ) {
16789				return !( selected = dataTypeOrTransport );
16790			}
16791		} );
16792		return selected;
16793	}
16794
16795	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
16796}
16797
16798// A special extend for ajax options
16799// that takes "flat" options (not to be deep extended)
16800// Fixes trac-9887
16801function ajaxExtend( target, src ) {
16802	var key, deep,
16803		flatOptions = jQuery.ajaxSettings.flatOptions || {};
16804
16805	for ( key in src ) {
16806		if ( src[ key ] !== undefined ) {
16807			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
16808		}
16809	}
16810	if ( deep ) {
16811		jQuery.extend( true, target, deep );
16812	}
16813
16814	return target;
16815}
16816
16817/* Handles responses to an ajax request:
16818 * - finds the right dataType (mediates between content-type and expected dataType)
16819 * - returns the corresponding response
16820 */
16821function ajaxHandleResponses( s, jqXHR, responses ) {
16822
16823	var ct, type, finalDataType, firstDataType,
16824		contents = s.contents,
16825		dataTypes = s.dataTypes;
16826
16827	// Remove auto dataType and get content-type in the process
16828	while ( dataTypes[ 0 ] === "*" ) {
16829		dataTypes.shift();
16830		if ( ct === undefined ) {
16831			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
16832		}
16833	}
16834
16835	// Check if we're dealing with a known content-type
16836	if ( ct ) {
16837		for ( type in contents ) {
16838			if ( contents[ type ] && contents[ type ].test( ct ) ) {
16839				dataTypes.unshift( type );
16840				break;
16841			}
16842		}
16843	}
16844
16845	// Check to see if we have a response for the expected dataType
16846	if ( dataTypes[ 0 ] in responses ) {
16847		finalDataType = dataTypes[ 0 ];
16848	} else {
16849
16850		// Try convertible dataTypes
16851		for ( type in responses ) {
16852			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
16853				finalDataType = type;
16854				break;
16855			}
16856			if ( !firstDataType ) {
16857				firstDataType = type;
16858			}
16859		}
16860
16861		// Or just use first one
16862		finalDataType = finalDataType || firstDataType;
16863	}
16864
16865	// If we found a dataType
16866	// We add the dataType to the list if needed
16867	// and return the corresponding response
16868	if ( finalDataType ) {
16869		if ( finalDataType !== dataTypes[ 0 ] ) {
16870			dataTypes.unshift( finalDataType );
16871		}
16872		return responses[ finalDataType ];
16873	}
16874}
16875
16876/* Chain conversions given the request and the original response
16877 * Also sets the responseXXX fields on the jqXHR instance
16878 */
16879function ajaxConvert( s, response, jqXHR, isSuccess ) {
16880	var conv2, current, conv, tmp, prev,
16881		converters = {},
16882
16883		// Work with a copy of dataTypes in case we need to modify it for conversion
16884		dataTypes = s.dataTypes.slice();
16885
16886	// Create converters map with lowercased keys
16887	if ( dataTypes[ 1 ] ) {
16888		for ( conv in s.converters ) {
16889			converters[ conv.toLowerCase() ] = s.converters[ conv ];
16890		}
16891	}
16892
16893	current = dataTypes.shift();
16894
16895	// Convert to each sequential dataType
16896	while ( current ) {
16897
16898		if ( s.responseFields[ current ] ) {
16899			jqXHR[ s.responseFields[ current ] ] = response;
16900		}
16901
16902		// Apply the dataFilter if provided
16903		if ( !prev && isSuccess && s.dataFilter ) {
16904			response = s.dataFilter( response, s.dataType );
16905		}
16906
16907		prev = current;
16908		current = dataTypes.shift();
16909
16910		if ( current ) {
16911
16912			// There's only work to do if current dataType is non-auto
16913			if ( current === "*" ) {
16914
16915				current = prev;
16916
16917			// Convert response if prev dataType is non-auto and differs from current
16918			} else if ( prev !== "*" && prev !== current ) {
16919
16920				// Seek a direct converter
16921				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
16922
16923				// If none found, seek a pair
16924				if ( !conv ) {
16925					for ( conv2 in converters ) {
16926
16927						// If conv2 outputs current
16928						tmp = conv2.split( " " );
16929						if ( tmp[ 1 ] === current ) {
16930
16931							// If prev can be converted to accepted input
16932							conv = converters[ prev + " " + tmp[ 0 ] ] ||
16933								converters[ "* " + tmp[ 0 ] ];
16934							if ( conv ) {
16935
16936								// Condense equivalence converters
16937								if ( conv === true ) {
16938									conv = converters[ conv2 ];
16939
16940								// Otherwise, insert the intermediate dataType
16941								} else if ( converters[ conv2 ] !== true ) {
16942									current = tmp[ 0 ];
16943									dataTypes.unshift( tmp[ 1 ] );
16944								}
16945								break;
16946							}
16947						}
16948					}
16949				}
16950
16951				// Apply converter (if not an equivalence)
16952				if ( conv !== true ) {
16953
16954					// Unless errors are allowed to bubble, catch and return them
16955					if ( conv && s.throws ) {
16956						response = conv( response );
16957					} else {
16958						try {
16959							response = conv( response );
16960						} catch ( e ) {
16961							return {
16962								state: "parsererror",
16963								error: conv ? e : "No conversion from " + prev + " to " + current
16964							};
16965						}
16966					}
16967				}
16968			}
16969		}
16970	}
16971
16972	return { state: "success", data: response };
16973}
16974
16975jQuery.extend( {
16976
16977	// Counter for holding the number of active queries
16978	active: 0,
16979
16980	// Last-Modified header cache for next request
16981	lastModified: {},
16982	etag: {},
16983
16984	ajaxSettings: {
16985		url: location.href,
16986		type: "GET",
16987		isLocal: rlocalProtocol.test( location.protocol ),
16988		global: true,
16989		processData: true,
16990		async: true,
16991		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
16992
16993		/*
16994		timeout: 0,
16995		data: null,
16996		dataType: null,
16997		username: null,
16998		password: null,
16999		cache: null,
17000		throws: false,
17001		traditional: false,
17002		headers: {},
17003		*/
17004
17005		accepts: {
17006			"*": allTypes,
17007			text: "text/plain",
17008			html: "text/html",
17009			xml: "application/xml, text/xml",
17010			json: "application/json, text/javascript"
17011		},
17012
17013		contents: {
17014			xml: /\bxml\b/,
17015			html: /\bhtml/,
17016			json: /\bjson\b/
17017		},
17018
17019		responseFields: {
17020			xml: "responseXML",
17021			text: "responseText",
17022			json: "responseJSON"
17023		},
17024
17025		// Data converters
17026		// Keys separate source (or catchall "*") and destination types with a single space
17027		converters: {
17028
17029			// Convert anything to text
17030			"* text": String,
17031
17032			// Text to html (true = no transformation)
17033			"text html": true,
17034
17035			// Evaluate text as a json expression
17036			"text json": JSON.parse,
17037
17038			// Parse text as xml
17039			"text xml": jQuery.parseXML
17040		},
17041
17042		// For options that shouldn't be deep extended:
17043		// you can add your own custom options here if
17044		// and when you create one that shouldn't be
17045		// deep extended (see ajaxExtend)
17046		flatOptions: {
17047			url: true,
17048			context: true
17049		}
17050	},
17051
17052	// Creates a full fledged settings object into target
17053	// with both ajaxSettings and settings fields.
17054	// If target is omitted, writes into ajaxSettings.
17055	ajaxSetup: function( target, settings ) {
17056		return settings ?
17057
17058			// Building a settings object
17059			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
17060
17061			// Extending ajaxSettings
17062			ajaxExtend( jQuery.ajaxSettings, target );
17063	},
17064
17065	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
17066	ajaxTransport: addToPrefiltersOrTransports( transports ),
17067
17068	// Main method
17069	ajax: function( url, options ) {
17070
17071		// If url is an object, simulate pre-1.5 signature
17072		if ( typeof url === "object" ) {
17073			options = url;
17074			url = undefined;
17075		}
17076
17077		// Force options to be an object
17078		options = options || {};
17079
17080		var transport,
17081
17082			// URL without anti-cache param
17083			cacheURL,
17084
17085			// Response headers
17086			responseHeadersString,
17087			responseHeaders,
17088
17089			// timeout handle
17090			timeoutTimer,
17091
17092			// Url cleanup var
17093			urlAnchor,
17094
17095			// Request state (becomes false upon send and true upon completion)
17096			completed,
17097
17098			// To know if global events are to be dispatched
17099			fireGlobals,
17100
17101			// Loop variable
17102			i,
17103
17104			// uncached part of the url
17105			uncached,
17106
17107			// Create the final options object
17108			s = jQuery.ajaxSetup( {}, options ),
17109
17110			// Callbacks context
17111			callbackContext = s.context || s,
17112
17113			// Context for global events is callbackContext if it is a DOM node or jQuery collection
17114			globalEventContext = s.context &&
17115				( callbackContext.nodeType || callbackContext.jquery ) ?
17116				jQuery( callbackContext ) :
17117				jQuery.event,
17118
17119			// Deferreds
17120			deferred = jQuery.Deferred(),
17121			completeDeferred = jQuery.Callbacks( "once memory" ),
17122
17123			// Status-dependent callbacks
17124			statusCode = s.statusCode || {},
17125
17126			// Headers (they are sent all at once)
17127			requestHeaders = {},
17128			requestHeadersNames = {},
17129
17130			// Default abort message
17131			strAbort = "canceled",
17132
17133			// Fake xhr
17134			jqXHR = {
17135				readyState: 0,
17136
17137				// Builds headers hashtable if needed
17138				getResponseHeader: function( key ) {
17139					var match;
17140					if ( completed ) {
17141						if ( !responseHeaders ) {
17142							responseHeaders = {};
17143							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
17144								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
17145									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
17146										.concat( match[ 2 ] );
17147							}
17148						}
17149						match = responseHeaders[ key.toLowerCase() + " " ];
17150					}
17151					return match == null ? null : match.join( ", " );
17152				},
17153
17154				// Raw string
17155				getAllResponseHeaders: function() {
17156					return completed ? responseHeadersString : null;
17157				},
17158
17159				// Caches the header
17160				setRequestHeader: function( name, value ) {
17161					if ( completed == null ) {
17162						name = requestHeadersNames[ name.toLowerCase() ] =
17163							requestHeadersNames[ name.toLowerCase() ] || name;
17164						requestHeaders[ name ] = value;
17165					}
17166					return this;
17167				},
17168
17169				// Overrides response content-type header
17170				overrideMimeType: function( type ) {
17171					if ( completed == null ) {
17172						s.mimeType = type;
17173					}
17174					return this;
17175				},
17176
17177				// Status-dependent callbacks
17178				statusCode: function( map ) {
17179					var code;
17180					if ( map ) {
17181						if ( completed ) {
17182
17183							// Execute the appropriate callbacks
17184							jqXHR.always( map[ jqXHR.status ] );
17185						} else {
17186
17187							// Lazy-add the new callbacks in a way that preserves old ones
17188							for ( code in map ) {
17189								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
17190							}
17191						}
17192					}
17193					return this;
17194				},
17195
17196				// Cancel the request
17197				abort: function( statusText ) {
17198					var finalText = statusText || strAbort;
17199					if ( transport ) {
17200						transport.abort( finalText );
17201					}
17202					done( 0, finalText );
17203					return this;
17204				}
17205			};
17206
17207		// Attach deferreds
17208		deferred.promise( jqXHR );
17209
17210		// Add protocol if not provided (prefilters might expect it)
17211		// Handle falsy url in the settings object (trac-10093: consistency with old signature)
17212		// We also use the url parameter if available
17213		s.url = ( ( url || s.url || location.href ) + "" )
17214			.replace( rprotocol, location.protocol + "//" );
17215
17216		// Alias method option to type as per ticket trac-12004
17217		s.type = options.method || options.type || s.method || s.type;
17218
17219		// Extract dataTypes list
17220		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
17221
17222		// A cross-domain request is in order when the origin doesn't match the current origin.
17223		if ( s.crossDomain == null ) {
17224			urlAnchor = document.createElement( "a" );
17225
17226			// Support: IE <=8 - 11, Edge 12 - 15
17227			// IE throws exception on accessing the href property if url is malformed,
17228			// e.g. http://example.com:80x/
17229			try {
17230				urlAnchor.href = s.url;
17231
17232				// Support: IE <=8 - 11 only
17233				// Anchor's host property isn't correctly set when s.url is relative
17234				urlAnchor.href = urlAnchor.href;
17235				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
17236					urlAnchor.protocol + "//" + urlAnchor.host;
17237			} catch ( e ) {
17238
17239				// If there is an error parsing the URL, assume it is crossDomain,
17240				// it can be rejected by the transport if it is invalid
17241				s.crossDomain = true;
17242			}
17243		}
17244
17245		// Convert data if not already a string
17246		if ( s.data && s.processData && typeof s.data !== "string" ) {
17247			s.data = jQuery.param( s.data, s.traditional );
17248		}
17249
17250		// Apply prefilters
17251		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
17252
17253		// If request was aborted inside a prefilter, stop there
17254		if ( completed ) {
17255			return jqXHR;
17256		}
17257
17258		// We can fire global events as of now if asked to
17259		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
17260		fireGlobals = jQuery.event && s.global;
17261
17262		// Watch for a new set of requests
17263		if ( fireGlobals && jQuery.active++ === 0 ) {
17264			jQuery.event.trigger( "ajaxStart" );
17265		}
17266
17267		// Uppercase the type
17268		s.type = s.type.toUpperCase();
17269
17270		// Determine if request has content
17271		s.hasContent = !rnoContent.test( s.type );
17272
17273		// Save the URL in case we're toying with the If-Modified-Since
17274		// and/or If-None-Match header later on
17275		// Remove hash to simplify url manipulation
17276		cacheURL = s.url.replace( rhash, "" );
17277
17278		// More options handling for requests with no content
17279		if ( !s.hasContent ) {
17280
17281			// Remember the hash so we can put it back
17282			uncached = s.url.slice( cacheURL.length );
17283
17284			// If data is available and should be processed, append data to url
17285			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
17286				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
17287
17288				// trac-9682: remove data so that it's not used in an eventual retry
17289				delete s.data;
17290			}
17291
17292			// Add or update anti-cache param if needed
17293			if ( s.cache === false ) {
17294				cacheURL = cacheURL.replace( rantiCache, "$1" );
17295				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
17296					uncached;
17297			}
17298
17299			// Put hash and anti-cache on the URL that will be requested (gh-1732)
17300			s.url = cacheURL + uncached;
17301
17302		// Change '%20' to '+' if this is encoded form body content (gh-2658)
17303		} else if ( s.data && s.processData &&
17304			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
17305			s.data = s.data.replace( r20, "+" );
17306		}
17307
17308		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
17309		if ( s.ifModified ) {
17310			if ( jQuery.lastModified[ cacheURL ] ) {
17311				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
17312			}
17313			if ( jQuery.etag[ cacheURL ] ) {
17314				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
17315			}
17316		}
17317
17318		// Set the correct header, if data is being sent
17319		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
17320			jqXHR.setRequestHeader( "Content-Type", s.contentType );
17321		}
17322
17323		// Set the Accepts header for the server, depending on the dataType
17324		jqXHR.setRequestHeader(
17325			"Accept",
17326			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
17327				s.accepts[ s.dataTypes[ 0 ] ] +
17328					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
17329				s.accepts[ "*" ]
17330		);
17331
17332		// Check for headers option
17333		for ( i in s.headers ) {
17334			jqXHR.setRequestHeader( i, s.headers[ i ] );
17335		}
17336
17337		// Allow custom headers/mimetypes and early abort
17338		if ( s.beforeSend &&
17339			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
17340
17341			// Abort if not done already and return
17342			return jqXHR.abort();
17343		}
17344
17345		// Aborting is no longer a cancellation
17346		strAbort = "abort";
17347
17348		// Install callbacks on deferreds
17349		completeDeferred.add( s.complete );
17350		jqXHR.done( s.success );
17351		jqXHR.fail( s.error );
17352
17353		// Get transport
17354		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
17355
17356		// If no transport, we auto-abort
17357		if ( !transport ) {
17358			done( -1, "No Transport" );
17359		} else {
17360			jqXHR.readyState = 1;
17361
17362			// Send global event
17363			if ( fireGlobals ) {
17364				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
17365			}
17366
17367			// If request was aborted inside ajaxSend, stop there
17368			if ( completed ) {
17369				return jqXHR;
17370			}
17371
17372			// Timeout
17373			if ( s.async && s.timeout > 0 ) {
17374				timeoutTimer = window.setTimeout( function() {
17375					jqXHR.abort( "timeout" );
17376				}, s.timeout );
17377			}
17378
17379			try {
17380				completed = false;
17381				transport.send( requestHeaders, done );
17382			} catch ( e ) {
17383
17384				// Rethrow post-completion exceptions
17385				if ( completed ) {
17386					throw e;
17387				}
17388
17389				// Propagate others as results
17390				done( -1, e );
17391			}
17392		}
17393
17394		// Callback for when everything is done
17395		function done( status, nativeStatusText, responses, headers ) {
17396			var isSuccess, success, error, response, modified,
17397				statusText = nativeStatusText;
17398
17399			// Ignore repeat invocations
17400			if ( completed ) {
17401				return;
17402			}
17403
17404			completed = true;
17405
17406			// Clear timeout if it exists
17407			if ( timeoutTimer ) {
17408				window.clearTimeout( timeoutTimer );
17409			}
17410
17411			// Dereference transport for early garbage collection
17412			// (no matter how long the jqXHR object will be used)
17413			transport = undefined;
17414
17415			// Cache response headers
17416			responseHeadersString = headers || "";
17417
17418			// Set readyState
17419			jqXHR.readyState = status > 0 ? 4 : 0;
17420
17421			// Determine if successful
17422			isSuccess = status >= 200 && status < 300 || status === 304;
17423
17424			// Get response data
17425			if ( responses ) {
17426				response = ajaxHandleResponses( s, jqXHR, responses );
17427			}
17428
17429			// Use a noop converter for missing script but not if jsonp
17430			if ( !isSuccess &&
17431				jQuery.inArray( "script", s.dataTypes ) > -1 &&
17432				jQuery.inArray( "json", s.dataTypes ) < 0 ) {
17433				s.converters[ "text script" ] = function() {};
17434			}
17435
17436			// Convert no matter what (that way responseXXX fields are always set)
17437			response = ajaxConvert( s, response, jqXHR, isSuccess );
17438
17439			// If successful, handle type chaining
17440			if ( isSuccess ) {
17441
17442				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
17443				if ( s.ifModified ) {
17444					modified = jqXHR.getResponseHeader( "Last-Modified" );
17445					if ( modified ) {
17446						jQuery.lastModified[ cacheURL ] = modified;
17447					}
17448					modified = jqXHR.getResponseHeader( "etag" );
17449					if ( modified ) {
17450						jQuery.etag[ cacheURL ] = modified;
17451					}
17452				}
17453
17454				// if no content
17455				if ( status === 204 || s.type === "HEAD" ) {
17456					statusText = "nocontent";
17457
17458				// if not modified
17459				} else if ( status === 304 ) {
17460					statusText = "notmodified";
17461
17462				// If we have data, let's convert it
17463				} else {
17464					statusText = response.state;
17465					success = response.data;
17466					error = response.error;
17467					isSuccess = !error;
17468				}
17469			} else {
17470
17471				// Extract error from statusText and normalize for non-aborts
17472				error = statusText;
17473				if ( status || !statusText ) {
17474					statusText = "error";
17475					if ( status < 0 ) {
17476						status = 0;
17477					}
17478				}
17479			}
17480
17481			// Set data for the fake xhr object
17482			jqXHR.status = status;
17483			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
17484
17485			// Success/Error
17486			if ( isSuccess ) {
17487				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
17488			} else {
17489				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
17490			}
17491
17492			// Status-dependent callbacks
17493			jqXHR.statusCode( statusCode );
17494			statusCode = undefined;
17495
17496			if ( fireGlobals ) {
17497				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
17498					[ jqXHR, s, isSuccess ? success : error ] );
17499			}
17500
17501			// Complete
17502			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
17503
17504			if ( fireGlobals ) {
17505				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
17506
17507				// Handle the global AJAX counter
17508				if ( !( --jQuery.active ) ) {
17509					jQuery.event.trigger( "ajaxStop" );
17510				}
17511			}
17512		}
17513
17514		return jqXHR;
17515	},
17516
17517	getJSON: function( url, data, callback ) {
17518		return jQuery.get( url, data, callback, "json" );
17519	},
17520
17521	getScript: function( url, callback ) {
17522		return jQuery.get( url, undefined, callback, "script" );
17523	}
17524} );
17525
17526jQuery.each( [ "get", "post" ], function( _i, method ) {
17527	jQuery[ method ] = function( url, data, callback, type ) {
17528
17529		// Shift arguments if data argument was omitted
17530		if ( isFunction( data ) ) {
17531			type = type || callback;
17532			callback = data;
17533			data = undefined;
17534		}
17535
17536		// The url can be an options object (which then must have .url)
17537		return jQuery.ajax( jQuery.extend( {
17538			url: url,
17539			type: method,
17540			dataType: type,
17541			data: data,
17542			success: callback
17543		}, jQuery.isPlainObject( url ) && url ) );
17544	};
17545} );
17546
17547jQuery.ajaxPrefilter( function( s ) {
17548	var i;
17549	for ( i in s.headers ) {
17550		if ( i.toLowerCase() === "content-type" ) {
17551			s.contentType = s.headers[ i ] || "";
17552		}
17553	}
17554} );
17555
17556
17557jQuery._evalUrl = function( url, options, doc ) {
17558	return jQuery.ajax( {
17559		url: url,
17560
17561		// Make this explicit, since user can override this through ajaxSetup (trac-11264)
17562		type: "GET",
17563		dataType: "script",
17564		cache: true,
17565		async: false,
17566		global: false,
17567
17568		// Only evaluate the response if it is successful (gh-4126)
17569		// dataFilter is not invoked for failure responses, so using it instead
17570		// of the default converter is kludgy but it works.
17571		converters: {
17572			"text script": function() {}
17573		},
17574		dataFilter: function( response ) {
17575			jQuery.globalEval( response, options, doc );
17576		}
17577	} );
17578};
17579
17580
17581jQuery.fn.extend( {
17582	wrapAll: function( html ) {
17583		var wrap;
17584
17585		if ( this[ 0 ] ) {
17586			if ( isFunction( html ) ) {
17587				html = html.call( this[ 0 ] );
17588			}
17589
17590			// The elements to wrap the target around
17591			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
17592
17593			if ( this[ 0 ].parentNode ) {
17594				wrap.insertBefore( this[ 0 ] );
17595			}
17596
17597			wrap.map( function() {
17598				var elem = this;
17599
17600				while ( elem.firstElementChild ) {
17601					elem = elem.firstElementChild;
17602				}
17603
17604				return elem;
17605			} ).append( this );
17606		}
17607
17608		return this;
17609	},
17610
17611	wrapInner: function( html ) {
17612		if ( isFunction( html ) ) {
17613			return this.each( function( i ) {
17614				jQuery( this ).wrapInner( html.call( this, i ) );
17615			} );
17616		}
17617
17618		return this.each( function() {
17619			var self = jQuery( this ),
17620				contents = self.contents();
17621
17622			if ( contents.length ) {
17623				contents.wrapAll( html );
17624
17625			} else {
17626				self.append( html );
17627			}
17628		} );
17629	},
17630
17631	wrap: function( html ) {
17632		var htmlIsFunction = isFunction( html );
17633
17634		return this.each( function( i ) {
17635			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
17636		} );
17637	},
17638
17639	unwrap: function( selector ) {
17640		this.parent( selector ).not( "body" ).each( function() {
17641			jQuery( this ).replaceWith( this.childNodes );
17642		} );
17643		return this;
17644	}
17645} );
17646
17647
17648jQuery.expr.pseudos.hidden = function( elem ) {
17649	return !jQuery.expr.pseudos.visible( elem );
17650};
17651jQuery.expr.pseudos.visible = function( elem ) {
17652	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
17653};
17654
17655
17656
17657
17658jQuery.ajaxSettings.xhr = function() {
17659	try {
17660		return new window.XMLHttpRequest();
17661	} catch ( e ) {}
17662};
17663
17664var xhrSuccessStatus = {
17665
17666		// File protocol always yields status code 0, assume 200
17667		0: 200,
17668
17669		// Support: IE <=9 only
17670		// trac-1450: sometimes IE returns 1223 when it should be 204
17671		1223: 204
17672	},
17673	xhrSupported = jQuery.ajaxSettings.xhr();
17674
17675support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
17676support.ajax = xhrSupported = !!xhrSupported;
17677
17678jQuery.ajaxTransport( function( options ) {
17679	var callback, errorCallback;
17680
17681	// Cross domain only allowed if supported through XMLHttpRequest
17682	if ( support.cors || xhrSupported && !options.crossDomain ) {
17683		return {
17684			send: function( headers, complete ) {
17685				var i,
17686					xhr = options.xhr();
17687
17688				xhr.open(
17689					options.type,
17690					options.url,
17691					options.async,
17692					options.username,
17693					options.password
17694				);
17695
17696				// Apply custom fields if provided
17697				if ( options.xhrFields ) {
17698					for ( i in options.xhrFields ) {
17699						xhr[ i ] = options.xhrFields[ i ];
17700					}
17701				}
17702
17703				// Override mime type if needed
17704				if ( options.mimeType && xhr.overrideMimeType ) {
17705					xhr.overrideMimeType( options.mimeType );
17706				}
17707
17708				// X-Requested-With header
17709				// For cross-domain requests, seeing as conditions for a preflight are
17710				// akin to a jigsaw puzzle, we simply never set it to be sure.
17711				// (it can always be set on a per-request basis or even using ajaxSetup)
17712				// For same-domain requests, won't change header if already provided.
17713				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
17714					headers[ "X-Requested-With" ] = "XMLHttpRequest";
17715				}
17716
17717				// Set headers
17718				for ( i in headers ) {
17719					xhr.setRequestHeader( i, headers[ i ] );
17720				}
17721
17722				// Callback
17723				callback = function( type ) {
17724					return function() {
17725						if ( callback ) {
17726							callback = errorCallback = xhr.onload =
17727								xhr.onerror = xhr.onabort = xhr.ontimeout =
17728									xhr.onreadystatechange = null;
17729
17730							if ( type === "abort" ) {
17731								xhr.abort();
17732							} else if ( type === "error" ) {
17733
17734								// Support: IE <=9 only
17735								// On a manual native abort, IE9 throws
17736								// errors on any property access that is not readyState
17737								if ( typeof xhr.status !== "number" ) {
17738									complete( 0, "error" );
17739								} else {
17740									complete(
17741
17742										// File: protocol always yields status 0; see trac-8605, trac-14207
17743										xhr.status,
17744										xhr.statusText
17745									);
17746								}
17747							} else {
17748								complete(
17749									xhrSuccessStatus[ xhr.status ] || xhr.status,
17750									xhr.statusText,
17751
17752									// Support: IE <=9 only
17753									// IE9 has no XHR2 but throws on binary (trac-11426)
17754									// For XHR2 non-text, let the caller handle it (gh-2498)
17755									( xhr.responseType || "text" ) !== "text"  ||
17756									typeof xhr.responseText !== "string" ?
17757										{ binary: xhr.response } :
17758										{ text: xhr.responseText },
17759									xhr.getAllResponseHeaders()
17760								);
17761							}
17762						}
17763					};
17764				};
17765
17766				// Listen to events
17767				xhr.onload = callback();
17768				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
17769
17770				// Support: IE 9 only
17771				// Use onreadystatechange to replace onabort
17772				// to handle uncaught aborts
17773				if ( xhr.onabort !== undefined ) {
17774					xhr.onabort = errorCallback;
17775				} else {
17776					xhr.onreadystatechange = function() {
17777
17778						// Check readyState before timeout as it changes
17779						if ( xhr.readyState === 4 ) {
17780
17781							// Allow onerror to be called first,
17782							// but that will not handle a native abort
17783							// Also, save errorCallback to a variable
17784							// as xhr.onerror cannot be accessed
17785							window.setTimeout( function() {
17786								if ( callback ) {
17787									errorCallback();
17788								}
17789							} );
17790						}
17791					};
17792				}
17793
17794				// Create the abort callback
17795				callback = callback( "abort" );
17796
17797				try {
17798
17799					// Do send the request (this may raise an exception)
17800					xhr.send( options.hasContent && options.data || null );
17801				} catch ( e ) {
17802
17803					// trac-14683: Only rethrow if this hasn't been notified as an error yet
17804					if ( callback ) {
17805						throw e;
17806					}
17807				}
17808			},
17809
17810			abort: function() {
17811				if ( callback ) {
17812					callback();
17813				}
17814			}
17815		};
17816	}
17817} );
17818
17819
17820
17821
17822// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
17823jQuery.ajaxPrefilter( function( s ) {
17824	if ( s.crossDomain ) {
17825		s.contents.script = false;
17826	}
17827} );
17828
17829// Install script dataType
17830jQuery.ajaxSetup( {
17831	accepts: {
17832		script: "text/javascript, application/javascript, " +
17833			"application/ecmascript, application/x-ecmascript"
17834	},
17835	contents: {
17836		script: /\b(?:java|ecma)script\b/
17837	},
17838	converters: {
17839		"text script": function( text ) {
17840			jQuery.globalEval( text );
17841			return text;
17842		}
17843	}
17844} );
17845
17846// Handle cache's special case and crossDomain
17847jQuery.ajaxPrefilter( "script", function( s ) {
17848	if ( s.cache === undefined ) {
17849		s.cache = false;
17850	}
17851	if ( s.crossDomain ) {
17852		s.type = "GET";
17853	}
17854} );
17855
17856// Bind script tag hack transport
17857jQuery.ajaxTransport( "script", function( s ) {
17858
17859	// This transport only deals with cross domain or forced-by-attrs requests
17860	if ( s.crossDomain || s.scriptAttrs ) {
17861		var script, callback;
17862		return {
17863			send: function( _, complete ) {
17864				script = jQuery( "<script>" )
17865					.attr( s.scriptAttrs || {} )
17866					.prop( { charset: s.scriptCharset, src: s.url } )
17867					.on( "load error", callback = function( evt ) {
17868						script.remove();
17869						callback = null;
17870						if ( evt ) {
17871							complete( evt.type === "error" ? 404 : 200, evt.type );
17872						}
17873					} );
17874
17875				// Use native DOM manipulation to avoid our domManip AJAX trickery
17876				document.head.appendChild( script[ 0 ] );
17877			},
17878			abort: function() {
17879				if ( callback ) {
17880					callback();
17881				}
17882			}
17883		};
17884	}
17885} );
17886
17887
17888
17889
17890var oldCallbacks = [],
17891	rjsonp = /(=)\?(?=&|$)|\?\?/;
17892
17893// Default jsonp settings
17894jQuery.ajaxSetup( {
17895	jsonp: "callback",
17896	jsonpCallback: function() {
17897		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
17898		this[ callback ] = true;
17899		return callback;
17900	}
17901} );
17902
17903// Detect, normalize options and install callbacks for jsonp requests
17904jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
17905
17906	var callbackName, overwritten, responseContainer,
17907		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
17908			"url" :
17909			typeof s.data === "string" &&
17910				( s.contentType || "" )
17911					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
17912				rjsonp.test( s.data ) && "data"
17913		);
17914
17915	// Handle iff the expected data type is "jsonp" or we have a parameter to set
17916	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
17917
17918		// Get callback name, remembering preexisting value associated with it
17919		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
17920			s.jsonpCallback() :
17921			s.jsonpCallback;
17922
17923		// Insert callback into url or form data
17924		if ( jsonProp ) {
17925			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
17926		} else if ( s.jsonp !== false ) {
17927			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
17928		}
17929
17930		// Use data converter to retrieve json after script execution
17931		s.converters[ "script json" ] = function() {
17932			if ( !responseContainer ) {
17933				jQuery.error( callbackName + " was not called" );
17934			}
17935			return responseContainer[ 0 ];
17936		};
17937
17938		// Force json dataType
17939		s.dataTypes[ 0 ] = "json";
17940
17941		// Install callback
17942		overwritten = window[ callbackName ];
17943		window[ callbackName ] = function() {
17944			responseContainer = arguments;
17945		};
17946
17947		// Clean-up function (fires after converters)
17948		jqXHR.always( function() {
17949
17950			// If previous value didn't exist - remove it
17951			if ( overwritten === undefined ) {
17952				jQuery( window ).removeProp( callbackName );
17953
17954			// Otherwise restore preexisting value
17955			} else {
17956				window[ callbackName ] = overwritten;
17957			}
17958
17959			// Save back as free
17960			if ( s[ callbackName ] ) {
17961
17962				// Make sure that re-using the options doesn't screw things around
17963				s.jsonpCallback = originalSettings.jsonpCallback;
17964
17965				// Save the callback name for future use
17966				oldCallbacks.push( callbackName );
17967			}
17968
17969			// Call if it was a function and we have a response
17970			if ( responseContainer && isFunction( overwritten ) ) {
17971				overwritten( responseContainer[ 0 ] );
17972			}
17973
17974			responseContainer = overwritten = undefined;
17975		} );
17976
17977		// Delegate to script
17978		return "script";
17979	}
17980} );
17981
17982
17983
17984
17985// Support: Safari 8 only
17986// In Safari 8 documents created via document.implementation.createHTMLDocument
17987// collapse sibling forms: the second one becomes a child of the first one.
17988// Because of that, this security measure has to be disabled in Safari 8.
17989// https://bugs.webkit.org/show_bug.cgi?id=137337
17990support.createHTMLDocument = ( function() {
17991	var body = document.implementation.createHTMLDocument( "" ).body;
17992	body.innerHTML = "<form></form><form></form>";
17993	return body.childNodes.length === 2;
17994} )();
17995
17996
17997// Argument "data" should be string of html
17998// context (optional): If specified, the fragment will be created in this context,
17999// defaults to document
18000// keepScripts (optional): If true, will include scripts passed in the html string
18001jQuery.parseHTML = function( data, context, keepScripts ) {
18002	if ( typeof data !== "string" ) {
18003		return [];
18004	}
18005	if ( typeof context === "boolean" ) {
18006		keepScripts = context;
18007		context = false;
18008	}
18009
18010	var base, parsed, scripts;
18011
18012	if ( !context ) {
18013
18014		// Stop scripts or inline event handlers from being executed immediately
18015		// by using document.implementation
18016		if ( support.createHTMLDocument ) {
18017			context = document.implementation.createHTMLDocument( "" );
18018
18019			// Set the base href for the created document
18020			// so any parsed elements with URLs
18021			// are based on the document's URL (gh-2965)
18022			base = context.createElement( "base" );
18023			base.href = document.location.href;
18024			context.head.appendChild( base );
18025		} else {
18026			context = document;
18027		}
18028	}
18029
18030	parsed = rsingleTag.exec( data );
18031	scripts = !keepScripts && [];
18032
18033	// Single tag
18034	if ( parsed ) {
18035		return [ context.createElement( parsed[ 1 ] ) ];
18036	}
18037
18038	parsed = buildFragment( [ data ], context, scripts );
18039
18040	if ( scripts && scripts.length ) {
18041		jQuery( scripts ).remove();
18042	}
18043
18044	return jQuery.merge( [], parsed.childNodes );
18045};
18046
18047
18048/**
18049 * Load a url into a page
18050 */
18051jQuery.fn.load = function( url, params, callback ) {
18052	var selector, type, response,
18053		self = this,
18054		off = url.indexOf( " " );
18055
18056	if ( off > -1 ) {
18057		selector = stripAndCollapse( url.slice( off ) );
18058		url = url.slice( 0, off );
18059	}
18060
18061	// If it's a function
18062	if ( isFunction( params ) ) {
18063
18064		// We assume that it's the callback
18065		callback = params;
18066		params = undefined;
18067
18068	// Otherwise, build a param string
18069	} else if ( params && typeof params === "object" ) {
18070		type = "POST";
18071	}
18072
18073	// If we have elements to modify, make the request
18074	if ( self.length > 0 ) {
18075		jQuery.ajax( {
18076			url: url,
18077
18078			// If "type" variable is undefined, then "GET" method will be used.
18079			// Make value of this field explicit since
18080			// user can override it through ajaxSetup method
18081			type: type || "GET",
18082			dataType: "html",
18083			data: params
18084		} ).done( function( responseText ) {
18085
18086			// Save response for use in complete callback
18087			response = arguments;
18088
18089			self.html( selector ?
18090
18091				// If a selector was specified, locate the right elements in a dummy div
18092				// Exclude scripts to avoid IE 'Permission Denied' errors
18093				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
18094
18095				// Otherwise use the full result
18096				responseText );
18097
18098		// If the request succeeds, this function gets "data", "status", "jqXHR"
18099		// but they are ignored because response was set above.
18100		// If it fails, this function gets "jqXHR", "status", "error"
18101		} ).always( callback && function( jqXHR, status ) {
18102			self.each( function() {
18103				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
18104			} );
18105		} );
18106	}
18107
18108	return this;
18109};
18110
18111
18112
18113
18114jQuery.expr.pseudos.animated = function( elem ) {
18115	return jQuery.grep( jQuery.timers, function( fn ) {
18116		return elem === fn.elem;
18117	} ).length;
18118};
18119
18120
18121
18122
18123jQuery.offset = {
18124	setOffset: function( elem, options, i ) {
18125		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
18126			position = jQuery.css( elem, "position" ),
18127			curElem = jQuery( elem ),
18128			props = {};
18129
18130		// Set position first, in-case top/left are set even on static elem
18131		if ( position === "static" ) {
18132			elem.style.position = "relative";
18133		}
18134
18135		curOffset = curElem.offset();
18136		curCSSTop = jQuery.css( elem, "top" );
18137		curCSSLeft = jQuery.css( elem, "left" );
18138		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
18139			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
18140
18141		// Need to be able to calculate position if either
18142		// top or left is auto and position is either absolute or fixed
18143		if ( calculatePosition ) {
18144			curPosition = curElem.position();
18145			curTop = curPosition.top;
18146			curLeft = curPosition.left;
18147
18148		} else {
18149			curTop = parseFloat( curCSSTop ) || 0;
18150			curLeft = parseFloat( curCSSLeft ) || 0;
18151		}
18152
18153		if ( isFunction( options ) ) {
18154
18155			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
18156			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
18157		}
18158
18159		if ( options.top != null ) {
18160			props.top = ( options.top - curOffset.top ) + curTop;
18161		}
18162		if ( options.left != null ) {
18163			props.left = ( options.left - curOffset.left ) + curLeft;
18164		}
18165
18166		if ( "using" in options ) {
18167			options.using.call( elem, props );
18168
18169		} else {
18170			curElem.css( props );
18171		}
18172	}
18173};
18174
18175jQuery.fn.extend( {
18176
18177	// offset() relates an element's border box to the document origin
18178	offset: function( options ) {
18179
18180		// Preserve chaining for setter
18181		if ( arguments.length ) {
18182			return options === undefined ?
18183				this :
18184				this.each( function( i ) {
18185					jQuery.offset.setOffset( this, options, i );
18186				} );
18187		}
18188
18189		var rect, win,
18190			elem = this[ 0 ];
18191
18192		if ( !elem ) {
18193			return;
18194		}
18195
18196		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
18197		// Support: IE <=11 only
18198		// Running getBoundingClientRect on a
18199		// disconnected node in IE throws an error
18200		if ( !elem.getClientRects().length ) {
18201			return { top: 0, left: 0 };
18202		}
18203
18204		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
18205		rect = elem.getBoundingClientRect();
18206		win = elem.ownerDocument.defaultView;
18207		return {
18208			top: rect.top + win.pageYOffset,
18209			left: rect.left + win.pageXOffset
18210		};
18211	},
18212
18213	// position() relates an element's margin box to its offset parent's padding box
18214	// This corresponds to the behavior of CSS absolute positioning
18215	position: function() {
18216		if ( !this[ 0 ] ) {
18217			return;
18218		}
18219
18220		var offsetParent, offset, doc,
18221			elem = this[ 0 ],
18222			parentOffset = { top: 0, left: 0 };
18223
18224		// position:fixed elements are offset from the viewport, which itself always has zero offset
18225		if ( jQuery.css( elem, "position" ) === "fixed" ) {
18226
18227			// Assume position:fixed implies availability of getBoundingClientRect
18228			offset = elem.getBoundingClientRect();
18229
18230		} else {
18231			offset = this.offset();
18232
18233			// Account for the *real* offset parent, which can be the document or its root element
18234			// when a statically positioned element is identified
18235			doc = elem.ownerDocument;
18236			offsetParent = elem.offsetParent || doc.documentElement;
18237			while ( offsetParent &&
18238				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
18239				jQuery.css( offsetParent, "position" ) === "static" ) {
18240
18241				offsetParent = offsetParent.parentNode;
18242			}
18243			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
18244
18245				// Incorporate borders into its offset, since they are outside its content origin
18246				parentOffset = jQuery( offsetParent ).offset();
18247				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
18248				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
18249			}
18250		}
18251
18252		// Subtract parent offsets and element margins
18253		return {
18254			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
18255			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
18256		};
18257	},
18258
18259	// This method will return documentElement in the following cases:
18260	// 1) For the element inside the iframe without offsetParent, this method will return
18261	//    documentElement of the parent window
18262	// 2) For the hidden or detached element
18263	// 3) For body or html element, i.e. in case of the html node - it will return itself
18264	//
18265	// but those exceptions were never presented as a real life use-cases
18266	// and might be considered as more preferable results.
18267	//
18268	// This logic, however, is not guaranteed and can change at any point in the future
18269	offsetParent: function() {
18270		return this.map( function() {
18271			var offsetParent = this.offsetParent;
18272
18273			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
18274				offsetParent = offsetParent.offsetParent;
18275			}
18276
18277			return offsetParent || documentElement;
18278		} );
18279	}
18280} );
18281
18282// Create scrollLeft and scrollTop methods
18283jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
18284	var top = "pageYOffset" === prop;
18285
18286	jQuery.fn[ method ] = function( val ) {
18287		return access( this, function( elem, method, val ) {
18288
18289			// Coalesce documents and windows
18290			var win;
18291			if ( isWindow( elem ) ) {
18292				win = elem;
18293			} else if ( elem.nodeType === 9 ) {
18294				win = elem.defaultView;
18295			}
18296
18297			if ( val === undefined ) {
18298				return win ? win[ prop ] : elem[ method ];
18299			}
18300
18301			if ( win ) {
18302				win.scrollTo(
18303					!top ? val : win.pageXOffset,
18304					top ? val : win.pageYOffset
18305				);
18306
18307			} else {
18308				elem[ method ] = val;
18309			}
18310		}, method, val, arguments.length );
18311	};
18312} );
18313
18314// Support: Safari <=7 - 9.1, Chrome <=37 - 49
18315// Add the top/left cssHooks using jQuery.fn.position
18316// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
18317// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
18318// getComputedStyle returns percent when specified for top/left/bottom/right;
18319// rather than make the css module depend on the offset module, just check for it here
18320jQuery.each( [ "top", "left" ], function( _i, prop ) {
18321	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
18322		function( elem, computed ) {
18323			if ( computed ) {
18324				computed = curCSS( elem, prop );
18325
18326				// If curCSS returns percentage, fallback to offset
18327				return rnumnonpx.test( computed ) ?
18328					jQuery( elem ).position()[ prop ] + "px" :
18329					computed;
18330			}
18331		}
18332	);
18333} );
18334
18335
18336// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
18337jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
18338	jQuery.each( {
18339		padding: "inner" + name,
18340		content: type,
18341		"": "outer" + name
18342	}, function( defaultExtra, funcName ) {
18343
18344		// Margin is only for outerHeight, outerWidth
18345		jQuery.fn[ funcName ] = function( margin, value ) {
18346			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
18347				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
18348
18349			return access( this, function( elem, type, value ) {
18350				var doc;
18351
18352				if ( isWindow( elem ) ) {
18353
18354					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
18355					return funcName.indexOf( "outer" ) === 0 ?
18356						elem[ "inner" + name ] :
18357						elem.document.documentElement[ "client" + name ];
18358				}
18359
18360				// Get document width or height
18361				if ( elem.nodeType === 9 ) {
18362					doc = elem.documentElement;
18363
18364					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
18365					// whichever is greatest
18366					return Math.max(
18367						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
18368						elem.body[ "offset" + name ], doc[ "offset" + name ],
18369						doc[ "client" + name ]
18370					);
18371				}
18372
18373				return value === undefined ?
18374
18375					// Get width or height on the element, requesting but not forcing parseFloat
18376					jQuery.css( elem, type, extra ) :
18377
18378					// Set width or height on the element
18379					jQuery.style( elem, type, value, extra );
18380			}, type, chainable ? margin : undefined, chainable );
18381		};
18382	} );
18383} );
18384
18385
18386jQuery.each( [
18387	"ajaxStart",
18388	"ajaxStop",
18389	"ajaxComplete",
18390	"ajaxError",
18391	"ajaxSuccess",
18392	"ajaxSend"
18393], function( _i, type ) {
18394	jQuery.fn[ type ] = function( fn ) {
18395		return this.on( type, fn );
18396	};
18397} );
18398
18399
18400
18401
18402jQuery.fn.extend( {
18403
18404	bind: function( types, data, fn ) {
18405		return this.on( types, null, data, fn );
18406	},
18407	unbind: function( types, fn ) {
18408		return this.off( types, null, fn );
18409	},
18410
18411	delegate: function( selector, types, data, fn ) {
18412		return this.on( types, selector, data, fn );
18413	},
18414	undelegate: function( selector, types, fn ) {
18415
18416		// ( namespace ) or ( selector, types [, fn] )
18417		return arguments.length === 1 ?
18418			this.off( selector, "**" ) :
18419			this.off( types, selector || "**", fn );
18420	},
18421
18422	hover: function( fnOver, fnOut ) {
18423		return this
18424			.on( "mouseenter", fnOver )
18425			.on( "mouseleave", fnOut || fnOver );
18426	}
18427} );
18428
18429jQuery.each(
18430	( "blur focus focusin focusout resize scroll click dblclick " +
18431	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
18432	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
18433	function( _i, name ) {
18434
18435		// Handle event binding
18436		jQuery.fn[ name ] = function( data, fn ) {
18437			return arguments.length > 0 ?
18438				this.on( name, null, data, fn ) :
18439				this.trigger( name );
18440		};
18441	}
18442);
18443
18444
18445
18446
18447// Support: Android <=4.0 only
18448// Make sure we trim BOM and NBSP
18449// Require that the "whitespace run" starts from a non-whitespace
18450// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
18451var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
18452
18453// Bind a function to a context, optionally partially applying any
18454// arguments.
18455// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
18456// However, it is not slated for removal any time soon
18457jQuery.proxy = function( fn, context ) {
18458	var tmp, args, proxy;
18459
18460	if ( typeof context === "string" ) {
18461		tmp = fn[ context ];
18462		context = fn;
18463		fn = tmp;
18464	}
18465
18466	// Quick check to determine if target is callable, in the spec
18467	// this throws a TypeError, but we will just return undefined.
18468	if ( !isFunction( fn ) ) {
18469		return undefined;
18470	}
18471
18472	// Simulated bind
18473	args = slice.call( arguments, 2 );
18474	proxy = function() {
18475		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
18476	};
18477
18478	// Set the guid of unique handler to the same of original handler, so it can be removed
18479	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
18480
18481	return proxy;
18482};
18483
18484jQuery.holdReady = function( hold ) {
18485	if ( hold ) {
18486		jQuery.readyWait++;
18487	} else {
18488		jQuery.ready( true );
18489	}
18490};
18491jQuery.isArray = Array.isArray;
18492jQuery.parseJSON = JSON.parse;
18493jQuery.nodeName = nodeName;
18494jQuery.isFunction = isFunction;
18495jQuery.isWindow = isWindow;
18496jQuery.camelCase = camelCase;
18497jQuery.type = toType;
18498
18499jQuery.now = Date.now;
18500
18501jQuery.isNumeric = function( obj ) {
18502
18503	// As of jQuery 3.0, isNumeric is limited to
18504	// strings and numbers (primitives or objects)
18505	// that can be coerced to finite numbers (gh-2662)
18506	var type = jQuery.type( obj );
18507	return ( type === "number" || type === "string" ) &&
18508
18509		// parseFloat NaNs numeric-cast false positives ("")
18510		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
18511		// subtraction forces infinities to NaN
18512		!isNaN( obj - parseFloat( obj ) );
18513};
18514
18515jQuery.trim = function( text ) {
18516	return text == null ?
18517		"" :
18518		( text + "" ).replace( rtrim, "$1" );
18519};
18520
18521
18522
18523// Register as a named AMD module, since jQuery can be concatenated with other
18524// files that may use define, but not via a proper concatenation script that
18525// understands anonymous AMD modules. A named AMD is safest and most robust
18526// way to register. Lowercase jquery is used because AMD module names are
18527// derived from file names, and jQuery is normally delivered in a lowercase
18528// file name. Do this after creating the global so that if an AMD module wants
18529// to call noConflict to hide this version of jQuery, it will work.
18530
18531// Note that for maximum portability, libraries that are not jQuery should
18532// declare themselves as anonymous modules, and avoid setting a global if an
18533// AMD loader is present. jQuery is a special case. For more information, see
18534// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
18535
18536if ( true ) {
18537	!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {
18538		return jQuery;
18539	}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
18540		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
18541}
18542
18543
18544
18545
18546var
18547
18548	// Map over jQuery in case of overwrite
18549	_jQuery = window.jQuery,
18550
18551	// Map over the $ in case of overwrite
18552	_$ = window.$;
18553
18554jQuery.noConflict = function( deep ) {
18555	if ( window.$ === jQuery ) {
18556		window.$ = _$;
18557	}
18558
18559	if ( deep && window.jQuery === jQuery ) {
18560		window.jQuery = _jQuery;
18561	}
18562
18563	return jQuery;
18564};
18565
18566// Expose jQuery and $ identifiers, even in AMD
18567// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
18568// and CommonJS for browser emulators (trac-13566)
18569if ( typeof noGlobal === "undefined" ) {
18570	window.jQuery = window.$ = jQuery;
18571}
18572
18573
18574
18575
18576return jQuery;
18577} );
18578
18579
18580/***/ }),
18581
vendor: 46,377 bytes, lines 18582-20529
18582/***/ "./node_modules/magnific-popup/dist/jquery.magnific-popup.js":
18583/*!*******************************************************************!*\
18584  !*** ./node_modules/magnific-popup/dist/jquery.magnific-popup.js ***!
18585  \*******************************************************************/
18586/***/ ((module, exports, __webpack_require__) => {
18587
18588var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! Magnific Popup - v1.2.0 - 2024-06-08
18589* http://dimsemenov.com/plugins/magnific-popup/
18590* Copyright (c) 2024 Dmytro Semenov; */
18591;(function (factory) { 
18592if (true) { 
18593 // AMD. Register as an anonymous module. 
18594 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
18595		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
18596		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
18597		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 
18598 } else {} 
18599 }(function($) { 
18600
18601/*>>core*/
18602/**
18603 * 
18604 * Magnific Popup Core JS file
18605 * 
18606 */
18607
18608
18609/**
18610 * Private static constants
18611 */
18612var CLOSE_EVENT = 'Close',
18613	BEFORE_CLOSE_EVENT = 'BeforeClose',
18614	AFTER_CLOSE_EVENT = 'AfterClose',
18615	BEFORE_APPEND_EVENT = 'BeforeAppend',
18616	MARKUP_PARSE_EVENT = 'MarkupParse',
18617	OPEN_EVENT = 'Open',
18618	CHANGE_EVENT = 'Change',
18619	NS = 'mfp',
18620	EVENT_NS = '.' + NS,
18621	READY_CLASS = 'mfp-ready',
18622	REMOVING_CLASS = 'mfp-removing',
18623	PREVENT_CLOSE_CLASS = 'mfp-prevent-close';
18624
18625
18626/**
18627 * Private vars 
18628 */
18629/*jshint -W079 */
18630var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'
18631	MagnificPopup = function(){},
18632	_isJQ = !!(window.jQuery),
18633	_prevStatus,
18634	_window = $(window),
18635	_document,
18636	_prevContentType,
18637	_wrapClasses,
18638	_currPopupType;
18639
18640
18641/**
18642 * Private functions
18643 */
18644var _mfpOn = function(name, f) {
18645		mfp.ev.on(NS + name + EVENT_NS, f);
18646	},
18647	_getEl = function(className, appendTo, html, raw) {
18648		var el = document.createElement('div');
18649		el.className = 'mfp-'+className;
18650		if(html) {
18651			el.innerHTML = html;
18652		}
18653		if(!raw) {
18654			el = $(el);
18655			if(appendTo) {
18656				el.appendTo(appendTo);
18657			}
18658		} else if(appendTo) {
18659			appendTo.appendChild(el);
18660		}
18661		return el;
18662	},
18663	_mfpTrigger = function(e, data) {
18664		mfp.ev.triggerHandler(NS + e, data);
18665
18666		if(mfp.st.callbacks) {
18667			// converts "mfpEventName" to "eventName" callback and triggers it if it's present
18668			e = e.charAt(0).toLowerCase() + e.slice(1);
18669			if(mfp.st.callbacks[e]) {
18670				mfp.st.callbacks[e].apply(mfp, Array.isArray(data) ? data : [data]);
18671			}
18672		}
18673	},
18674	_getCloseBtn = function(type) {
18675		if(type !== _currPopupType || !mfp.currTemplate.closeBtn) {
18676			mfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );
18677			_currPopupType = type;
18678		}
18679		return mfp.currTemplate.closeBtn;
18680	},
18681	// Initialize Magnific Popup only when called at least once
18682	_checkInstance = function() {
18683		if(!$.magnificPopup.instance) {
18684			/*jshint -W020 */
18685			mfp = new MagnificPopup();
18686			mfp.init();
18687			$.magnificPopup.instance = mfp;
18688		}
18689	},
18690	// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr
18691	supportsTransitions = function() {
18692		var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist
18693			v = ['ms','O','Moz','Webkit']; // 'v' for vendor
18694
18695		if( s['transition'] !== undefined ) {
18696			return true; 
18697		}
18698			
18699		while( v.length ) {
18700			if( v.pop() + 'Transition' in s ) {
18701				return true;
18702			}
18703		}
18704				
18705		return false;
18706	};
18707
18708
18709
18710/**
18711 * Public functions
18712 */
18713MagnificPopup.prototype = {
18714
18715	constructor: MagnificPopup,
18716
18717	/**
18718	 * Initializes Magnific Popup plugin. 
18719	 * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed
18720	 */
18721	init: function() {
18722		var appVersion = navigator.appVersion;
18723		mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;
18724		mfp.isAndroid = (/android/gi).test(appVersion);
18725		mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);
18726		mfp.supportsTransition = supportsTransitions();
18727
18728		// We disable fixed positioned lightbox on devices that don't handle it nicely.
18729		// If you know a better way of detecting this - let me know.
18730		mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );
18731		_document = $(document);
18732
18733		mfp.popupsCache = {};
18734	},
18735
18736	/**
18737	 * Opens popup
18738	 * @param  data [description]
18739	 */
18740	open: function(data) {
18741
18742		var i;
18743
18744		if(data.isObj === false) { 
18745			// convert jQuery collection to array to avoid conflicts later
18746			mfp.items = data.items.toArray();
18747
18748			mfp.index = 0;
18749			var items = data.items,
18750				item;
18751			for(i = 0; i < items.length; i++) {
18752				item = items[i];
18753				if(item.parsed) {
18754					item = item.el[0];
18755				}
18756				if(item === data.el[0]) {
18757					mfp.index = i;
18758					break;
18759				}
18760			}
18761		} else {
18762			mfp.items = Array.isArray(data.items) ? data.items : [data.items];
18763			mfp.index = data.index || 0;
18764		}
18765
18766		// if popup is already opened - we just update the content
18767		if(mfp.isOpen) {
18768			mfp.updateItemHTML();
18769			return;
18770		}
18771		
18772		mfp.types = []; 
18773		_wrapClasses = '';
18774		if(data.mainEl && data.mainEl.length) {
18775			mfp.ev = data.mainEl.eq(0);
18776		} else {
18777			mfp.ev = _document;
18778		}
18779
18780		if(data.key) {
18781			if(!mfp.popupsCache[data.key]) {
18782				mfp.popupsCache[data.key] = {};
18783			}
18784			mfp.currTemplate = mfp.popupsCache[data.key];
18785		} else {
18786			mfp.currTemplate = {};
18787		}
18788
18789
18790
18791		mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); 
18792		mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;
18793
18794		if(mfp.st.modal) {
18795			mfp.st.closeOnContentClick = false;
18796			mfp.st.closeOnBgClick = false;
18797			mfp.st.showCloseBtn = false;
18798			mfp.st.enableEscapeKey = false;
18799		}
18800		
18801
18802		// Building markup
18803		// main containers are created only once
18804		if(!mfp.bgOverlay) {
18805
18806			// Dark overlay
18807			mfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {
18808				mfp.close();
18809			});
18810
18811			mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {
18812				if(mfp._checkIfClose(e.target)) {
18813					mfp.close();
18814				}
18815			});
18816
18817			mfp.container = _getEl('container', mfp.wrap);
18818		}
18819
18820		mfp.contentContainer = _getEl('content');
18821		if(mfp.st.preloader) {
18822			mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);
18823		}
18824
18825
18826		// Initializing modules
18827		var modules = $.magnificPopup.modules;
18828		for(i = 0; i < modules.length; i++) {
18829			var n = modules[i];
18830			n = n.charAt(0).toUpperCase() + n.slice(1);
18831			mfp['init'+n].call(mfp);
18832		}
18833		_mfpTrigger('BeforeOpen');
18834
18835
18836		if(mfp.st.showCloseBtn) {
18837			// Close button
18838			if(!mfp.st.closeBtnInside) {
18839				mfp.wrap.append( _getCloseBtn() );
18840			} else {
18841				_mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {
18842					values.close_replaceWith = _getCloseBtn(item.type);
18843				});
18844				_wrapClasses += ' mfp-close-btn-in';
18845			}
18846		}
18847
18848		if(mfp.st.alignTop) {
18849			_wrapClasses += ' mfp-align-top';
18850		}
18851
18852	
18853
18854		if(mfp.fixedContentPos) {
18855			mfp.wrap.css({
18856				overflow: mfp.st.overflowY,
18857				overflowX: 'hidden',
18858				overflowY: mfp.st.overflowY
18859			});
18860		} else {
18861			mfp.wrap.css({ 
18862				top: _window.scrollTop(),
18863				position: 'absolute'
18864			});
18865		}
18866		if( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {
18867			mfp.bgOverlay.css({
18868				height: _document.height(),
18869				position: 'absolute'
18870			});
18871		}
18872
18873		
18874
18875		if(mfp.st.enableEscapeKey) {
18876			// Close on ESC key
18877			_document.on('keyup' + EVENT_NS, function(e) {
18878				if(e.keyCode === 27) {
18879					mfp.close();
18880				}
18881			});
18882		}
18883
18884		_window.on('resize' + EVENT_NS, function() {
18885			mfp.updateSize();
18886		});
18887
18888
18889		if(!mfp.st.closeOnContentClick) {
18890			_wrapClasses += ' mfp-auto-cursor';
18891		}
18892		
18893		if(_wrapClasses)
18894			mfp.wrap.addClass(_wrapClasses);
18895
18896
18897		// this triggers recalculation of layout, so we get it once to not to trigger twice
18898		var windowHeight = mfp.wH = _window.height();
18899
18900		
18901		var windowStyles = {};
18902
18903		if( mfp.fixedContentPos ) {
18904            if(mfp._hasScrollBar(windowHeight)){
18905                var s = mfp._getScrollbarSize();
18906                if(s) {
18907                    windowStyles.marginRight = s;
18908                }
18909            }
18910        }
18911
18912		if(mfp.fixedContentPos) {
18913			if(!mfp.isIE7) {
18914				windowStyles.overflow = 'hidden';
18915			} else {
18916				// ie7 double-scroll bug
18917				$('body, html').css('overflow', 'hidden');
18918			}
18919		}
18920
18921		
18922		
18923		var classesToadd = mfp.st.mainClass;
18924		if(mfp.isIE7) {
18925			classesToadd += ' mfp-ie7';
18926		}
18927		if(classesToadd) {
18928			mfp._addClassToMFP( classesToadd );
18929		}
18930
18931		// add content
18932		mfp.updateItemHTML();
18933
18934		_mfpTrigger('BuildControls');
18935
18936		// remove scrollbar, add margin e.t.c
18937		$('html').css(windowStyles);
18938		
18939		// add everything to DOM
18940		mfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );
18941
18942		// Save last focused element
18943		mfp._lastFocusedEl = document.activeElement;
18944		
18945		// Wait for next cycle to allow CSS transition
18946		setTimeout(function() {
18947			
18948			if(mfp.content) {
18949				mfp._addClassToMFP(READY_CLASS);
18950				mfp._setFocus();
18951			} else {
18952				// if content is not defined (not loaded e.t.c) we add class only for BG
18953				mfp.bgOverlay.addClass(READY_CLASS);
18954			}
18955			
18956			// Trap the focus in popup
18957			_document.on('focusin' + EVENT_NS, mfp._onFocusIn);
18958
18959		}, 16);
18960
18961		mfp.isOpen = true;
18962		mfp.updateSize(windowHeight);
18963		_mfpTrigger(OPEN_EVENT);
18964
18965		return data;
18966	},
18967
18968	/**
18969	 * Closes the popup
18970	 */
18971	close: function() {
18972		if(!mfp.isOpen) return;
18973		_mfpTrigger(BEFORE_CLOSE_EVENT);
18974
18975		mfp.isOpen = false;
18976		// for CSS3 animation
18977		if(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition )  {
18978			mfp._addClassToMFP(REMOVING_CLASS);
18979			setTimeout(function() {
18980				mfp._close();
18981			}, mfp.st.removalDelay);
18982		} else {
18983			mfp._close();
18984		}
18985	},
18986
18987	/**
18988	 * Helper for close() function
18989	 */
18990	_close: function() {
18991		_mfpTrigger(CLOSE_EVENT);
18992
18993		var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';
18994
18995		mfp.bgOverlay.detach();
18996		mfp.wrap.detach();
18997		mfp.container.empty();
18998
18999		if(mfp.st.mainClass) {
19000			classesToRemove += mfp.st.mainClass + ' ';
19001		}
19002
19003		mfp._removeClassFromMFP(classesToRemove);
19004
19005		if(mfp.fixedContentPos) {
19006			var windowStyles = {marginRight: ''};
19007			if(mfp.isIE7) {
19008				$('body, html').css('overflow', '');
19009			} else {
19010				windowStyles.overflow = '';
19011			}
19012			$('html').css(windowStyles);
19013		}
19014		
19015		_document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);
19016		mfp.ev.off(EVENT_NS);
19017
19018		// clean up DOM elements that aren't removed
19019		mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');
19020		mfp.bgOverlay.attr('class', 'mfp-bg');
19021		mfp.container.attr('class', 'mfp-container');
19022
19023		// remove close button from target element
19024		if(mfp.st.showCloseBtn &&
19025		(!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {
19026			if(mfp.currTemplate.closeBtn)
19027				mfp.currTemplate.closeBtn.detach();
19028		}
19029
19030
19031		if(mfp.st.autoFocusLast && mfp._lastFocusedEl) {
19032			$(mfp._lastFocusedEl).trigger('focus'); // put tab focus back
19033		}
19034		mfp.currItem = null;	
19035		mfp.content = null;
19036		mfp.currTemplate = null;
19037		mfp.prevHeight = 0;
19038
19039		_mfpTrigger(AFTER_CLOSE_EVENT);
19040	},
19041	
19042	updateSize: function(winHeight) {
19043
19044		if(mfp.isIOS) {
19045			// fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2
19046			var zoomLevel = document.documentElement.clientWidth / window.innerWidth;
19047			var height = window.innerHeight * zoomLevel;
19048			mfp.wrap.css('height', height);
19049			mfp.wH = height;
19050		} else {
19051			mfp.wH = winHeight || _window.height();
19052		}
19053		// Fixes #84: popup incorrectly positioned with position:relative on body
19054		if(!mfp.fixedContentPos) {
19055			mfp.wrap.css('height', mfp.wH);
19056		}
19057
19058		_mfpTrigger('Resize');
19059
19060	},
19061
19062	/**
19063	 * Set content of popup based on current index
19064	 */
19065	updateItemHTML: function() {
19066		var item = mfp.items[mfp.index];
19067
19068		// Detach and perform modifications
19069		mfp.contentContainer.detach();
19070
19071		if(mfp.content)
19072			mfp.content.detach();
19073
19074		if(!item.parsed) {
19075			item = mfp.parseEl( mfp.index );
19076		}
19077
19078		var type = item.type;
19079
19080		_mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);
19081		// BeforeChange event works like so:
19082		// _mfpOn('BeforeChange', function(e, prevType, newType) { });
19083
19084		mfp.currItem = item;
19085
19086		if(!mfp.currTemplate[type]) {
19087			var markup = mfp.st[type] ? mfp.st[type].markup : false;
19088
19089			// allows to modify markup
19090			_mfpTrigger('FirstMarkupParse', markup);
19091
19092			if(markup) {
19093				mfp.currTemplate[type] = $(markup);
19094			} else {
19095				// if there is no markup found we just define that template is parsed
19096				mfp.currTemplate[type] = true;
19097			}
19098		}
19099
19100		if(_prevContentType && _prevContentType !== item.type) {
19101			mfp.container.removeClass('mfp-'+_prevContentType+'-holder');
19102		}
19103
19104		var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);
19105		mfp.appendContent(newContent, type);
19106
19107		item.preloaded = true;
19108
19109		_mfpTrigger(CHANGE_EVENT, item);
19110		_prevContentType = item.type;
19111
19112		// Append container back after its content changed
19113		mfp.container.prepend(mfp.contentContainer);
19114
19115		_mfpTrigger('AfterChange');
19116	},
19117
19118
19119	/**
19120	 * Set HTML content of popup
19121	 */
19122	appendContent: function(newContent, type) {
19123		mfp.content = newContent;
19124
19125		if(newContent) {
19126			if(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&
19127				mfp.currTemplate[type] === true) {
19128				// if there is no markup, we just append close button element inside
19129				if(!mfp.content.find('.mfp-close').length) {
19130					mfp.content.append(_getCloseBtn());
19131				}
19132			} else {
19133				mfp.content = newContent;
19134			}
19135		} else {
19136			mfp.content = '';
19137		}
19138
19139		_mfpTrigger(BEFORE_APPEND_EVENT);
19140		mfp.container.addClass('mfp-'+type+'-holder');
19141
19142		mfp.contentContainer.append(mfp.content);
19143	},
19144
19145
19146	/**
19147	 * Creates Magnific Popup data object based on given data
19148	 * @param  {int} index Index of item to parse
19149	 */
19150	parseEl: function(index) {
19151		var item = mfp.items[index],
19152			type;
19153
19154		if(item.tagName) {
19155			item = { el: $(item) };
19156		} else {
19157			type = item.type;
19158			item = { data: item, src: item.src };
19159		}
19160
19161		if(item.el) {
19162			var types = mfp.types;
19163
19164			// check for 'mfp-TYPE' class
19165			for(var i = 0; i < types.length; i++) {
19166				if( item.el.hasClass('mfp-'+types[i]) ) {
19167					type = types[i];
19168					break;
19169				}
19170			}
19171
19172			item.src = item.el.attr('data-mfp-src');
19173			if(!item.src) {
19174				item.src = item.el.attr('href');
19175			}
19176		}
19177
19178		item.type = type || mfp.st.type || 'inline';
19179		item.index = index;
19180		item.parsed = true;
19181		mfp.items[index] = item;
19182		_mfpTrigger('ElementParse', item);
19183
19184		return mfp.items[index];
19185	},
19186
19187
19188	/**
19189	 * Initializes single popup or a group of popups
19190	 */
19191	addGroup: function(el, options) {
19192		var eHandler = function(e) {
19193			e.mfpEl = this;
19194			mfp._openClick(e, el, options);
19195		};
19196
19197		if(!options) {
19198			options = {};
19199		}
19200
19201		var eName = 'click.magnificPopup';
19202		options.mainEl = el;
19203
19204		if(options.items) {
19205			options.isObj = true;
19206			el.off(eName).on(eName, eHandler);
19207		} else {
19208			options.isObj = false;
19209			if(options.delegate) {
19210				el.off(eName).on(eName, options.delegate , eHandler);
19211			} else {
19212				options.items = el;
19213				el.off(eName).on(eName, eHandler);
19214			}
19215		}
19216	},
19217	_openClick: function(e, el, options) {
19218		var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;
19219
19220
19221		if(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {
19222			return;
19223		}
19224
19225		var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;
19226
19227		if(disableOn) {
19228			if(typeof disableOn === "function") {
19229				if( !disableOn.call(mfp) ) {
19230					return true;
19231				}
19232			} else { // else it's number
19233				if( _window.width() < disableOn ) {
19234					return true;
19235				}
19236			}
19237		}
19238
19239		if(e.type) {
19240			e.preventDefault();
19241
19242			// This will prevent popup from closing if element is inside and popup is already opened
19243			if(mfp.isOpen) {
19244				e.stopPropagation();
19245			}
19246		}
19247
19248		options.el = $(e.mfpEl);
19249		if(options.delegate) {
19250			options.items = el.find(options.delegate);
19251		}
19252		mfp.open(options);
19253	},
19254
19255
19256	/**
19257	 * Updates text on preloader
19258	 */
19259	updateStatus: function(status, text) {
19260
19261		if(mfp.preloader) {
19262			if(_prevStatus !== status) {
19263				mfp.container.removeClass('mfp-s-'+_prevStatus);
19264			}
19265
19266			if(!text && status === 'loading') {
19267				text = mfp.st.tLoading;
19268			}
19269
19270			var data = {
19271				status: status,
19272				text: text
19273			};
19274			// allows to modify status
19275			_mfpTrigger('UpdateStatus', data);
19276
19277			status = data.status;
19278			text = data.text;
19279
19280			if (mfp.st.allowHTMLInStatusIndicator) {
19281				mfp.preloader.html(text);
19282			} else {
19283				mfp.preloader.text(text);
19284			}
19285
19286			mfp.preloader.find('a').on('click', function(e) {
19287				e.stopImmediatePropagation();
19288			});
19289
19290			mfp.container.addClass('mfp-s-'+status);
19291			_prevStatus = status;
19292		}
19293	},
19294
19295
19296	/*
19297		"Private" helpers that aren't private at all
19298	 */
19299	// Check to close popup or not
19300	// "target" is an element that was clicked
19301	_checkIfClose: function(target) {
19302
19303		if($(target).closest('.' + PREVENT_CLOSE_CLASS).length) {
19304			return;
19305		}
19306
19307		var closeOnContent = mfp.st.closeOnContentClick;
19308		var closeOnBg = mfp.st.closeOnBgClick;
19309
19310		if(closeOnContent && closeOnBg) {
19311			return true;
19312		} else {
19313
19314			// We close the popup if click is on close button or on preloader. Or if there is no content.
19315			if(!mfp.content || $(target).closest('.mfp-close').length || (mfp.preloader && target === mfp.preloader[0]) ) {
19316				return true;
19317			}
19318
19319			// if click is outside the content
19320			if(  (target !== mfp.content[0] && !$.contains(mfp.content[0], target))  ) {
19321				if(closeOnBg) {
19322					// last check, if the clicked element is in DOM, (in case it's removed onclick)
19323					if( $.contains(document, target) ) {
19324						return true;
19325					}
19326				}
19327			} else if(closeOnContent) {
19328				return true;
19329			}
19330
19331		}
19332		return false;
19333	},
19334	_addClassToMFP: function(cName) {
19335		mfp.bgOverlay.addClass(cName);
19336		mfp.wrap.addClass(cName);
19337	},
19338	_removeClassFromMFP: function(cName) {
19339		this.bgOverlay.removeClass(cName);
19340		mfp.wrap.removeClass(cName);
19341	},
19342	_hasScrollBar: function(winHeight) {
19343		return (  (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );
19344	},
19345	_setFocus: function() {
19346		(mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).trigger('focus');
19347	},
19348	_onFocusIn: function(e) {
19349		if( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {
19350			mfp._setFocus();
19351			return false;
19352		}
19353	},
19354	_parseMarkup: function(template, values, item) {
19355		var arr;
19356		if(item.data) {
19357			values = $.extend(item.data, values);
19358		}
19359		_mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );
19360
19361		$.each(values, function(key, value) {
19362			if(value === undefined || value === false) {
19363				return true;
19364			}
19365			arr = key.split('_');
19366			if(arr.length > 1) {
19367				var el = template.find(EVENT_NS + '-'+arr[0]);
19368
19369				if(el.length > 0) {
19370					var attr = arr[1];
19371					if(attr === 'replaceWith') {
19372						if(el[0] !== value[0]) {
19373							el.replaceWith(value);
19374						}
19375					} else if(attr === 'img') {
19376						if(el.is('img')) {
19377							el.attr('src', value);
19378						} else {
19379							el.replaceWith( $('<img>').attr('src', value).attr('class', el.attr('class')) );
19380						}
19381					} else {
19382						el.attr(arr[1], value);
19383					}
19384				}
19385
19386			} else {
19387				if (mfp.st.allowHTMLInTemplate) {
19388					template.find(EVENT_NS + '-'+key).html(value);
19389				} else {
19390					template.find(EVENT_NS + '-'+key).text(value);
19391				}
19392			}
19393		});
19394	},
19395
19396	_getScrollbarSize: function() {
19397		// thx David
19398		if(mfp.scrollbarSize === undefined) {
19399			var scrollDiv = document.createElement("div");
19400			scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';
19401			document.body.appendChild(scrollDiv);
19402			mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
19403			document.body.removeChild(scrollDiv);
19404		}
19405		return mfp.scrollbarSize;
19406	}
19407
19408}; /* MagnificPopup core prototype end */
19409
19410
19411
19412
19413/**
19414 * Public static functions
19415 */
19416$.magnificPopup = {
19417	instance: null,
19418	proto: MagnificPopup.prototype,
19419	modules: [],
19420
19421	open: function(options, index) {
19422		_checkInstance();
19423
19424		if(!options) {
19425			options = {};
19426		} else {
19427			options = $.extend(true, {}, options);
19428		}
19429
19430		options.isObj = true;
19431		options.index = index || 0;
19432		return this.instance.open(options);
19433	},
19434
19435	close: function() {
19436		return $.magnificPopup.instance && $.magnificPopup.instance.close();
19437	},
19438
19439	registerModule: function(name, module) {
19440		if(module.options) {
19441			$.magnificPopup.defaults[name] = module.options;
19442		}
19443		$.extend(this.proto, module.proto);
19444		this.modules.push(name);
19445	},
19446
19447	defaults: {
19448
19449		// Info about options is in docs:
19450		// http://dimsemenov.com/plugins/magnific-popup/documentation.html#options
19451
19452		disableOn: 0,
19453
19454		key: null,
19455
19456		midClick: false,
19457
19458		mainClass: '',
19459
19460		preloader: true,
19461
19462		focus: '', // CSS selector of input to focus after popup is opened
19463
19464		closeOnContentClick: false,
19465
19466		closeOnBgClick: true,
19467
19468		closeBtnInside: true,
19469
19470		showCloseBtn: true,
19471
19472		enableEscapeKey: true,
19473
19474		modal: false,
19475
19476		alignTop: false,
19477
19478		removalDelay: 0,
19479
19480		prependTo: null,
19481
19482		fixedContentPos: 'auto',
19483
19484		fixedBgPos: 'auto',
19485
19486		overflowY: 'auto',
19487
19488		closeMarkup: '<button title="%title%" type="button" class="mfp-close">&#215;</button>',
19489
19490		tClose: 'Close (Esc)',
19491
19492		tLoading: 'Loading...',
19493
19494		autoFocusLast: true,
19495
19496		allowHTMLInStatusIndicator: false,
19497
19498		allowHTMLInTemplate: false
19499
19500	}
19501};
19502
19503
19504
19505$.fn.magnificPopup = function(options) {
19506	_checkInstance();
19507
19508	var jqEl = $(this);
19509
19510	// We call some API method of first param is a string
19511	if (typeof options === "string" ) {
19512
19513		if(options === 'open') {
19514			var items,
19515				itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,
19516				index = parseInt(arguments[1], 10) || 0;
19517
19518			if(itemOpts.items) {
19519				items = itemOpts.items[index];
19520			} else {
19521				items = jqEl;
19522				if(itemOpts.delegate) {
19523					items = items.find(itemOpts.delegate);
19524				}
19525				items = items.eq( index );
19526			}
19527			mfp._openClick({mfpEl:items}, jqEl, itemOpts);
19528		} else {
19529			if(mfp.isOpen)
19530				mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));
19531		}
19532
19533	} else {
19534		// clone options obj
19535		options = $.extend(true, {}, options);
19536
19537		/*
19538		 * As Zepto doesn't support .data() method for objects
19539		 * and it works only in normal browsers
19540		 * we assign "options" object directly to the DOM element. FTW!
19541		 */
19542		if(_isJQ) {
19543			jqEl.data('magnificPopup', options);
19544		} else {
19545			jqEl[0].magnificPopup = options;
19546		}
19547
19548		mfp.addGroup(jqEl, options);
19549
19550	}
19551	return jqEl;
19552};
19553
19554/*>>core*/
19555
19556/*>>inline*/
19557
19558var INLINE_NS = 'inline',
19559	_hiddenClass,
19560	_inlinePlaceholder,
19561	_lastInlineElement,
19562	_putInlineElementsBack = function() {
19563		if(_lastInlineElement) {
19564			_inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();
19565			_lastInlineElement = null;
19566		}
19567	};
19568
19569$.magnificPopup.registerModule(INLINE_NS, {
19570	options: {
19571		hiddenClass: 'hide', // will be appended with `mfp-` prefix
19572		markup: '',
19573		tNotFound: 'Content not found'
19574	},
19575	proto: {
19576
19577		initInline: function() {
19578			mfp.types.push(INLINE_NS);
19579
19580			_mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {
19581				_putInlineElementsBack();
19582			});
19583		},
19584
19585		getInline: function(item, template) {
19586
19587			_putInlineElementsBack();
19588
19589			if(item.src) {
19590				var inlineSt = mfp.st.inline,
19591					el = $(item.src);
19592
19593				if(el.length) {
19594
19595					// If target element has parent - we replace it with placeholder and put it back after popup is closed
19596					var parent = el[0].parentNode;
19597					if(parent && parent.tagName) {
19598						if(!_inlinePlaceholder) {
19599							_hiddenClass = inlineSt.hiddenClass;
19600							_inlinePlaceholder = _getEl(_hiddenClass);
19601							_hiddenClass = 'mfp-'+_hiddenClass;
19602						}
19603						// replace target inline element with placeholder
19604						_lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);
19605					}
19606
19607					mfp.updateStatus('ready');
19608				} else {
19609					mfp.updateStatus('error', inlineSt.tNotFound);
19610					el = $('<div>');
19611				}
19612
19613				item.inlineElement = el;
19614				return el;
19615			}
19616
19617			mfp.updateStatus('ready');
19618			mfp._parseMarkup(template, {}, item);
19619			return template;
19620		}
19621	}
19622});
19623
19624/*>>inline*/
19625
19626/*>>ajax*/
19627var AJAX_NS = 'ajax',
19628	_ajaxCur,
19629	_removeAjaxCursor = function() {
19630		if(_ajaxCur) {
19631			$(document.body).removeClass(_ajaxCur);
19632		}
19633	},
19634	_destroyAjaxRequest = function() {
19635		_removeAjaxCursor();
19636		if(mfp.req) {
19637			mfp.req.abort();
19638		}
19639	};
19640
19641$.magnificPopup.registerModule(AJAX_NS, {
19642
19643	options: {
19644		settings: null,
19645		cursor: 'mfp-ajax-cur',
19646		tError: 'The content could not be loaded.'
19647	},
19648
19649	proto: {
19650		initAjax: function() {
19651			mfp.types.push(AJAX_NS);
19652			_ajaxCur = mfp.st.ajax.cursor;
19653
19654			_mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);
19655			_mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);
19656		},
19657		getAjax: function(item) {
19658
19659			if(_ajaxCur) {
19660				$(document.body).addClass(_ajaxCur);
19661			}
19662
19663			mfp.updateStatus('loading');
19664
19665			var opts = $.extend({
19666				url: item.src,
19667				success: function(data, textStatus, jqXHR) {
19668					var temp = {
19669						data:data,
19670						xhr:jqXHR
19671					};
19672
19673					_mfpTrigger('ParseAjax', temp);
19674
19675					mfp.appendContent( $(temp.data), AJAX_NS );
19676
19677					item.finished = true;
19678
19679					_removeAjaxCursor();
19680
19681					mfp._setFocus();
19682
19683					setTimeout(function() {
19684						mfp.wrap.addClass(READY_CLASS);
19685					}, 16);
19686
19687					mfp.updateStatus('ready');
19688
19689					_mfpTrigger('AjaxContentAdded');
19690				},
19691				error: function() {
19692					_removeAjaxCursor();
19693					item.finished = item.loadError = true;
19694					mfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));
19695				}
19696			}, mfp.st.ajax.settings);
19697
19698			mfp.req = $.ajax(opts);
19699
19700			return '';
19701		}
19702	}
19703});
19704
19705/*>>ajax*/
19706
19707/*>>image*/
19708var _imgInterval,
19709	_getTitle = function(item) {
19710		if(item.data && item.data.title !== undefined)
19711			return item.data.title;
19712
19713		var src = mfp.st.image.titleSrc;
19714
19715		if(src) {
19716			if(typeof src === "function") {
19717				return src.call(mfp, item);
19718			} else if(item.el) {
19719				return item.el.attr(src) || '';
19720			}
19721		}
19722		return '';
19723	};
19724
19725$.magnificPopup.registerModule('image', {
19726
19727	options: {
19728		markup: '<div class="mfp-figure">'+
19729					'<div class="mfp-close"></div>'+
19730					'<figure>'+
19731						'<div class="mfp-img"></div>'+
19732						'<figcaption>'+
19733							'<div class="mfp-bottom-bar">'+
19734								'<div class="mfp-title"></div>'+
19735								'<div class="mfp-counter"></div>'+
19736							'</div>'+
19737						'</figcaption>'+
19738					'</figure>'+
19739				'</div>',
19740		cursor: 'mfp-zoom-out-cur',
19741		titleSrc: 'title',
19742		verticalFit: true,
19743		tError: 'The image could not be loaded.'
19744	},
19745
19746	proto: {
19747		initImage: function() {
19748			var imgSt = mfp.st.image,
19749				ns = '.image';
19750
19751			mfp.types.push('image');
19752
19753			_mfpOn(OPEN_EVENT+ns, function() {
19754				if(mfp.currItem.type === 'image' && imgSt.cursor) {
19755					$(document.body).addClass(imgSt.cursor);
19756				}
19757			});
19758
19759			_mfpOn(CLOSE_EVENT+ns, function() {
19760				if(imgSt.cursor) {
19761					$(document.body).removeClass(imgSt.cursor);
19762				}
19763				_window.off('resize' + EVENT_NS);
19764			});
19765
19766			_mfpOn('Resize'+ns, mfp.resizeImage);
19767			if(mfp.isLowIE) {
19768				_mfpOn('AfterChange', mfp.resizeImage);
19769			}
19770		},
19771		resizeImage: function() {
19772			var item = mfp.currItem;
19773			if(!item || !item.img) return;
19774
19775			if(mfp.st.image.verticalFit) {
19776				var decr = 0;
19777				// fix box-sizing in ie7/8
19778				if(mfp.isLowIE) {
19779					decr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);
19780				}
19781				item.img.css('max-height', mfp.wH-decr);
19782			}
19783		},
19784		_onImageHasSize: function(item) {
19785			if(item.img) {
19786
19787				item.hasSize = true;
19788
19789				if(_imgInterval) {
19790					clearInterval(_imgInterval);
19791				}
19792
19793				item.isCheckingImgSize = false;
19794
19795				_mfpTrigger('ImageHasSize', item);
19796
19797				if(item.imgHidden) {
19798					if(mfp.content)
19799						mfp.content.removeClass('mfp-loading');
19800
19801					item.imgHidden = false;
19802				}
19803
19804			}
19805		},
19806
19807		/**
19808		 * Function that loops until the image has size to display elements that rely on it asap
19809		 */
19810		findImageSize: function(item) {
19811
19812			var counter = 0,
19813				img = item.img[0],
19814				mfpSetInterval = function(delay) {
19815
19816					if(_imgInterval) {
19817						clearInterval(_imgInterval);
19818					}
19819					// decelerating interval that checks for size of an image
19820					_imgInterval = setInterval(function() {
19821						if(img.naturalWidth > 0) {
19822							mfp._onImageHasSize(item);
19823							return;
19824						}
19825
19826						if(counter > 200) {
19827							clearInterval(_imgInterval);
19828						}
19829
19830						counter++;
19831						if(counter === 3) {
19832							mfpSetInterval(10);
19833						} else if(counter === 40) {
19834							mfpSetInterval(50);
19835						} else if(counter === 100) {
19836							mfpSetInterval(500);
19837						}
19838					}, delay);
19839				};
19840
19841			mfpSetInterval(1);
19842		},
19843
19844		getImage: function(item, template) {
19845
19846			var guard = 0,
19847
19848				imgSt = mfp.st.image,
19849
19850				// image error handler
19851				onLoadError = function() {
19852					if(item) {
19853						item.img.off('.mfploader');
19854						if(item === mfp.currItem){
19855							mfp._onImageHasSize(item);
19856							mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );
19857						}
19858
19859						item.hasSize = true;
19860						item.loaded = true;
19861						item.loadError = true;
19862					}
19863				},
19864
19865				// image load complete handler
19866				onLoadComplete = function() {
19867					if(item) {
19868						if (item.img[0].complete) {
19869							item.img.off('.mfploader');
19870
19871							if(item === mfp.currItem){
19872								mfp._onImageHasSize(item);
19873
19874								mfp.updateStatus('ready');
19875							}
19876
19877							item.hasSize = true;
19878							item.loaded = true;
19879
19880							_mfpTrigger('ImageLoadComplete');
19881
19882						}
19883						else {
19884							// if image complete check fails 200 times (20 sec), we assume that there was an error.
19885							guard++;
19886							if(guard < 200) {
19887								setTimeout(onLoadComplete,100);
19888							} else {
19889								onLoadError();
19890							}
19891						}
19892					}
19893				};
19894				
19895
19896
19897			var el = template.find('.mfp-img');
19898			if(el.length) {
19899				var img = document.createElement('img');
19900				img.className = 'mfp-img';
19901				if(item.el && item.el.find('img').length) {
19902					img.alt = item.el.find('img').attr('alt');
19903				}
19904				item.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);
19905				img.src = item.src;
19906
19907				// without clone() "error" event is not firing when IMG is replaced by new IMG
19908				// TODO: find a way to avoid such cloning
19909				if(el.is('img')) {
19910					item.img = item.img.clone();
19911				}
19912
19913				img = item.img[0];
19914				if(img.naturalWidth > 0) {
19915					item.hasSize = true;
19916				} else if(!img.width) {
19917					item.hasSize = false;
19918				}
19919			}
19920
19921			mfp._parseMarkup(template, {
19922				title: _getTitle(item),
19923				img_replaceWith: item.img
19924			}, item);
19925
19926			mfp.resizeImage();
19927
19928			if(item.hasSize) {
19929				if(_imgInterval) clearInterval(_imgInterval);
19930
19931				if(item.loadError) {
19932					template.addClass('mfp-loading');
19933					mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );
19934				} else {
19935					template.removeClass('mfp-loading');
19936					mfp.updateStatus('ready');
19937				}
19938				return template;
19939			}
19940
19941			mfp.updateStatus('loading');
19942			item.loading = true;
19943
19944			if(!item.hasSize) {
19945				item.imgHidden = true;
19946				template.addClass('mfp-loading');
19947				mfp.findImageSize(item);
19948			}
19949
19950			return template;
19951		}
19952	}
19953});
19954
19955/*>>image*/
19956
19957/*>>zoom*/
19958var hasMozTransform,
19959	getHasMozTransform = function() {
19960		if(hasMozTransform === undefined) {
19961			hasMozTransform = document.createElement('p').style.MozTransform !== undefined;
19962		}
19963		return hasMozTransform;
19964	};
19965
19966$.magnificPopup.registerModule('zoom', {
19967
19968	options: {
19969		enabled: false,
19970		easing: 'ease-in-out',
19971		duration: 300,
19972		opener: function(element) {
19973			return element.is('img') ? element : element.find('img');
19974		}
19975	},
19976
19977	proto: {
19978
19979		initZoom: function() {
19980			var zoomSt = mfp.st.zoom,
19981				ns = '.zoom',
19982				image;
19983
19984			if(!zoomSt.enabled || !mfp.supportsTransition) {
19985				return;
19986			}
19987
19988			var duration = zoomSt.duration,
19989				getElToAnimate = function(image) {
19990					var newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),
19991						transition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,
19992						cssObj = {
19993							position: 'fixed',
19994							zIndex: 9999,
19995							left: 0,
19996							top: 0,
19997							'-webkit-backface-visibility': 'hidden'
19998						},
19999						t = 'transition';
20000
20001					cssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;
20002
20003					newImg.css(cssObj);
20004					return newImg;
20005				},
20006				showMainContent = function() {
20007					mfp.content.css('visibility', 'visible');
20008				},
20009				openTimeout,
20010				animatedImg;
20011
20012			_mfpOn('BuildControls'+ns, function() {
20013				if(mfp._allowZoom()) {
20014
20015					clearTimeout(openTimeout);
20016					mfp.content.css('visibility', 'hidden');
20017
20018					// Basically, all code below does is clones existing image, puts in on top of the current one and animated it
20019
20020					image = mfp._getItemToZoom();
20021
20022					if(!image) {
20023						showMainContent();
20024						return;
20025					}
20026
20027					animatedImg = getElToAnimate(image);
20028
20029					animatedImg.css( mfp._getOffset() );
20030
20031					mfp.wrap.append(animatedImg);
20032
20033					openTimeout = setTimeout(function() {
20034						animatedImg.css( mfp._getOffset( true ) );
20035						openTimeout = setTimeout(function() {
20036
20037							showMainContent();
20038
20039							setTimeout(function() {
20040								animatedImg.remove();
20041								image = animatedImg = null;
20042								_mfpTrigger('ZoomAnimationEnded');
20043							}, 16); // avoid blink when switching images
20044
20045						}, duration); // this timeout equals animation duration
20046
20047					}, 16); // by adding this timeout we avoid short glitch at the beginning of animation
20048
20049
20050					// Lots of timeouts...
20051				}
20052			});
20053			_mfpOn(BEFORE_CLOSE_EVENT+ns, function() {
20054				if(mfp._allowZoom()) {
20055
20056					clearTimeout(openTimeout);
20057
20058					mfp.st.removalDelay = duration;
20059
20060					if(!image) {
20061						image = mfp._getItemToZoom();
20062						if(!image) {
20063							return;
20064						}
20065						animatedImg = getElToAnimate(image);
20066					}
20067
20068					animatedImg.css( mfp._getOffset(true) );
20069					mfp.wrap.append(animatedImg);
20070					mfp.content.css('visibility', 'hidden');
20071
20072					setTimeout(function() {
20073						animatedImg.css( mfp._getOffset() );
20074					}, 16);
20075				}
20076
20077			});
20078
20079			_mfpOn(CLOSE_EVENT+ns, function() {
20080				if(mfp._allowZoom()) {
20081					showMainContent();
20082					if(animatedImg) {
20083						animatedImg.remove();
20084					}
20085					image = null;
20086				}
20087			});
20088		},
20089
20090		_allowZoom: function() {
20091			return mfp.currItem.type === 'image';
20092		},
20093
20094		_getItemToZoom: function() {
20095			if(mfp.currItem.hasSize) {
20096				return mfp.currItem.img;
20097			} else {
20098				return false;
20099			}
20100		},
20101
20102		// Get element postion relative to viewport
20103		_getOffset: function(isLarge) {
20104			var el;
20105			if(isLarge) {
20106				el = mfp.currItem.img;
20107			} else {
20108				el = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);
20109			}
20110
20111			var offset = el.offset();
20112			var paddingTop = parseInt(el.css('padding-top'),10);
20113			var paddingBottom = parseInt(el.css('padding-bottom'),10);
20114			offset.top -= ( $(window).scrollTop() - paddingTop );
20115
20116
20117			/*
20118
20119			Animating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.
20120
20121			 */
20122			var obj = {
20123				width: el.width(),
20124				// fix Zepto height+padding issue
20125				height: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop
20126			};
20127
20128			// I hate to do this, but there is no another option
20129			if( getHasMozTransform() ) {
20130				obj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';
20131			} else {
20132				obj.left = offset.left;
20133				obj.top = offset.top;
20134			}
20135			return obj;
20136		}
20137
20138	}
20139});
20140
20141
20142
20143/*>>zoom*/
20144
20145/*>>iframe*/
20146
20147var IFRAME_NS = 'iframe',
20148	_emptyPage = '//about:blank',
20149
20150	_fixIframeBugs = function(isShowing) {
20151		if(mfp.currTemplate[IFRAME_NS]) {
20152			var el = mfp.currTemplate[IFRAME_NS].find('iframe');
20153			if(el.length) {
20154				// reset src after the popup is closed to avoid "video keeps playing after popup is closed" bug
20155				if(!isShowing) {
20156					el[0].src = _emptyPage;
20157				}
20158
20159				// IE8 black screen bug fix
20160				if(mfp.isIE8) {
20161					el.css('display', isShowing ? 'block' : 'none');
20162				}
20163			}
20164		}
20165	};
20166
20167$.magnificPopup.registerModule(IFRAME_NS, {
20168
20169	options: {
20170		markup: '<div class="mfp-iframe-scaler">'+
20171					'<div class="mfp-close"></div>'+
20172					'<iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe>'+
20173				'</div>',
20174
20175		srcAction: 'iframe_src',
20176
20177		// we don't care and support only one default type of URL by default
20178		patterns: {
20179			youtube: {
20180				index: 'youtube.com',
20181				id: 'v=',
20182				src: '//www.youtube.com/embed/%id%?autoplay=1'
20183			},
20184			vimeo: {
20185				index: 'vimeo.com/',
20186				id: '/',
20187				src: '//player.vimeo.com/video/%id%?autoplay=1'
20188			},
20189			gmaps: {
20190				index: '//maps.google.',
20191				src: '%id%&output=embed'
20192			}
20193		}
20194	},
20195
20196	proto: {
20197		initIframe: function() {
20198			mfp.types.push(IFRAME_NS);
20199
20200			_mfpOn('BeforeChange', function(e, prevType, newType) {
20201				if(prevType !== newType) {
20202					if(prevType === IFRAME_NS) {
20203						_fixIframeBugs(); // iframe if removed
20204					} else if(newType === IFRAME_NS) {
20205						_fixIframeBugs(true); // iframe is showing
20206					}
20207				}// else {
20208					// iframe source is switched, don't do anything
20209				//}
20210			});
20211
20212			_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {
20213				_fixIframeBugs();
20214			});
20215		},
20216
20217		getIframe: function(item, template) {
20218			var embedSrc = item.src;
20219			var iframeSt = mfp.st.iframe;
20220
20221			$.each(iframeSt.patterns, function() {
20222				if(embedSrc.indexOf( this.index ) > -1) {
20223					if(this.id) {
20224						if(typeof this.id === 'string') {
20225							embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);
20226						} else {
20227							embedSrc = this.id.call( this, embedSrc );
20228						}
20229					}
20230					embedSrc = this.src.replace('%id%', embedSrc );
20231					return false; // break;
20232				}
20233			});
20234
20235			var dataObj = {};
20236			if(iframeSt.srcAction) {
20237				dataObj[iframeSt.srcAction] = embedSrc;
20238			}
20239
20240			mfp._parseMarkup(template, dataObj, item);
20241
20242			mfp.updateStatus('ready');
20243
20244			return template;
20245		}
20246	}
20247});
20248
20249
20250
20251/*>>iframe*/
20252
20253/*>>gallery*/
20254/**
20255 * Get looped index depending on number of slides
20256 */
20257var _getLoopedId = function(index) {
20258		var numSlides = mfp.items.length;
20259		if(index > numSlides - 1) {
20260			return index - numSlides;
20261		} else  if(index < 0) {
20262			return numSlides + index;
20263		}
20264		return index;
20265	},
20266	_replaceCurrTotal = function(text, curr, total) {
20267		return text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);
20268	};
20269
20270$.magnificPopup.registerModule('gallery', {
20271
20272	options: {
20273		enabled: false,
20274		arrowMarkup: '<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',
20275		preload: [0,2],
20276		navigateByImgClick: true,
20277		arrows: true,
20278
20279		tPrev: 'Previous (Left arrow key)',
20280		tNext: 'Next (Right arrow key)',
20281		tCounter: '%curr% of %total%',
20282		
20283		langDir: null,
20284		loop: true,
20285	},
20286
20287	proto: {
20288		initGallery: function() {
20289
20290			var gSt = mfp.st.gallery,
20291				ns = '.mfp-gallery';
20292
20293			mfp.direction = true; // true - next, false - prev
20294
20295			if(!gSt || !gSt.enabled ) return false;
20296			
20297			if (!gSt.langDir) {
20298				gSt.langDir = document.dir || 'ltr';
20299			}
20300
20301			_wrapClasses += ' mfp-gallery';
20302
20303			_mfpOn(OPEN_EVENT+ns, function() {
20304
20305				if(gSt.navigateByImgClick) {
20306					mfp.wrap.on('click'+ns, '.mfp-img', function() {
20307						if(mfp.items.length > 1) {
20308							mfp.next();
20309							return false;
20310						}
20311					});
20312				}
20313
20314				_document.on('keydown'+ns, function(e) {
20315					if (e.keyCode === 37) {
20316						if (gSt.langDir === 'rtl') mfp.next();
20317						else mfp.prev();
20318					} else if (e.keyCode === 39) {
20319						if (gSt.langDir === 'rtl') mfp.prev();
20320						else mfp.next();
20321					}
20322				});
20323
20324				mfp.updateGalleryButtons();
20325
20326			});
20327
20328			_mfpOn('UpdateStatus'+ns, function(/*e, data*/) {
20329				mfp.updateGalleryButtons();
20330			});
20331
20332			_mfpOn('UpdateStatus'+ns, function(e, data) {
20333				if(data.text) {
20334					data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);
20335				}
20336			});
20337
20338			_mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {
20339				var l = mfp.items.length;
20340				values.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';
20341			});
20342
20343			_mfpOn('BuildControls' + ns, function() {
20344				if(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {
20345
20346					var arrowLeftDesc, arrowRightDesc, arrowLeftAction, arrowRightAction;
20347
20348					if (gSt.langDir === 'rtl') {
20349						arrowLeftDesc = gSt.tNext;
20350						arrowRightDesc = gSt.tPrev;
20351						arrowLeftAction = 'next';
20352						arrowRightAction = 'prev';
20353					} else {
20354						arrowLeftDesc = gSt.tPrev;
20355						arrowRightDesc = gSt.tNext;
20356						arrowLeftAction = 'prev';
20357						arrowRightAction = 'next';
20358					}
20359
20360					var markup     = gSt.arrowMarkup,
20361					    arrowLeft  = mfp.arrowLeft = $( markup.replace(/%title%/gi, arrowLeftDesc).replace(/%action%/gi, arrowLeftAction).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),
20362					    arrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, arrowRightDesc).replace(/%action%/gi, arrowRightAction).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);
20363
20364					if (gSt.langDir === 'rtl') {
20365						mfp.arrowNext = arrowLeft;
20366						mfp.arrowPrev = arrowRight;
20367					} else {
20368						mfp.arrowNext = arrowRight;
20369						mfp.arrowPrev = arrowLeft;
20370					}
20371
20372					arrowLeft.on('click', function() {
20373						if (gSt.langDir === 'rtl') mfp.next();
20374						else mfp.prev();
20375					});
20376					arrowRight.on('click', function() {
20377						if (gSt.langDir === 'rtl') mfp.prev();
20378						else mfp.next();
20379					});
20380
20381					mfp.container.append(arrowLeft.add(arrowRight));
20382
20383				}
20384			});
20385
20386			_mfpOn(CHANGE_EVENT+ns, function() {
20387				if(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);
20388
20389				mfp._preloadTimeout = setTimeout(function() {
20390					mfp.preloadNearbyImages();
20391					mfp._preloadTimeout = null;
20392				}, 16);
20393			});
20394
20395
20396			_mfpOn(CLOSE_EVENT+ns, function() {
20397				_document.off(ns);
20398				mfp.wrap.off('click'+ns);
20399				mfp.arrowRight = mfp.arrowLeft = null;
20400			});
20401
20402		},
20403		next: function() {
20404			var newIndex = _getLoopedId(mfp.index + 1);
20405			if (!mfp.st.gallery.loop && newIndex === 0 ) return false;
20406			mfp.direction = true;
20407			mfp.index = newIndex;
20408			mfp.updateItemHTML();
20409		},
20410		prev: function() {
20411			var newIndex = mfp.index - 1;
20412			if (!mfp.st.gallery.loop && newIndex < 0) return false;
20413			mfp.direction = false;
20414			mfp.index = _getLoopedId(newIndex);
20415			mfp.updateItemHTML();
20416		},
20417		goTo: function(newIndex) {
20418			mfp.direction = (newIndex >= mfp.index);
20419			mfp.index = newIndex;
20420			mfp.updateItemHTML();
20421		},
20422		preloadNearbyImages: function() {
20423			var p = mfp.st.gallery.preload,
20424				preloadBefore = Math.min(p[0], mfp.items.length),
20425				preloadAfter = Math.min(p[1], mfp.items.length),
20426				i;
20427
20428			for(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {
20429				mfp._preloadItem(mfp.index+i);
20430			}
20431			for(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {
20432				mfp._preloadItem(mfp.index-i);
20433			}
20434		},
20435		_preloadItem: function(index) {
20436			index = _getLoopedId(index);
20437
20438			if(mfp.items[index].preloaded) {
20439				return;
20440			}
20441
20442			var item = mfp.items[index];
20443			if(!item.parsed) {
20444				item = mfp.parseEl( index );
20445			}
20446
20447			_mfpTrigger('LazyLoad', item);
20448
20449			if(item.type === 'image') {
20450				item.img = $('<img class="mfp-img" />').on('load.mfploader', function() {
20451					item.hasSize = true;
20452				}).on('error.mfploader', function() {
20453					item.hasSize = true;
20454					item.loadError = true;
20455					_mfpTrigger('LazyLoadError', item);
20456				}).attr('src', item.src);
20457			}
20458
20459
20460			item.preloaded = true;
20461		},
20462
20463		/**
20464		 * Show/hide the gallery prev/next buttons if we're at the start/end, if looping is turned off
20465		 * Added by Joloco for Veg
20466		 */
20467		updateGalleryButtons: function() {
20468
20469			if ( !mfp.st.gallery.loop && typeof mfp.arrowPrev === 'object' && mfp.arrowPrev !== null) {
20470
20471				if (mfp.index === 0) mfp.arrowPrev.hide();
20472				else mfp.arrowPrev.show();
20473
20474				if (mfp.index === (mfp.items.length - 1)) mfp.arrowNext.hide();
20475				else mfp.arrowNext.show();
20476
20477			}
20478
20479		},
20480
20481	}
20482
20483});
20484
20485
20486/*>>gallery*/
20487
20488/*>>retina*/
20489
20490var RETINA_NS = 'retina';
20491
20492$.magnificPopup.registerModule(RETINA_NS, {
20493	options: {
20494		replaceSrc: function(item) {
20495			return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; });
20496		},
20497		ratio: 1 // Function or number.  Set to 1 to disable.
20498	},
20499	proto: {
20500		initRetina: function() {
20501			if(window.devicePixelRatio > 1) {
20502
20503				var st = mfp.st.retina,
20504					ratio = st.ratio;
20505
20506				ratio = !isNaN(ratio) ? ratio : ratio();
20507
20508				if(ratio > 1) {
20509					_mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {
20510						item.img.css({
20511							'max-width': item.img[0].naturalWidth / ratio,
20512							'width': '100%'
20513						});
20514					});
20515					_mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {
20516						item.src = st.replaceSrc(item, ratio);
20517					});
20518				}
20519			}
20520
20521		}
20522	}
20523});
20524
20525/*>>retina*/
20526 _checkInstance(); }));
20527
20528/***/ }),
20529
20530/***/ "./Resources/Private/Scss/main.scss":
20531/*!******************************************!*\
20532  !*** ./Resources/Private/Scss/main.scss ***!
20533  \******************************************/
20534/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
20535
20536"use strict";
20537module.exports = __webpack_require__.p + "Css/main.min.css";
20538
20539/***/ })
vendor: 4,820 bytes, lines 20539-20653
20539
20540
20541/******/ 	});
20542/************************************************************************/
20543/******/ 	// The module cache
20544/******/ 	var __webpack_module_cache__ = {};
20545/******/ 	
20546/******/ 	// The require function
20547/******/ 	function __webpack_require__(moduleId) {
20548/******/ 		// Check if module is in cache
20549/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
20550/******/ 		if (cachedModule !== undefined) {
20551/******/ 			return cachedModule.exports;
20552/******/ 		}
20553/******/ 		// Create a new module (and put it into the cache)
20554/******/ 		var module = __webpack_module_cache__[moduleId] = {
20555/******/ 			// no module.id needed
20556/******/ 			// no module.loaded needed
20557/******/ 			exports: {}
20558/******/ 		};
20559/******/ 	
20560/******/ 		// Execute the module function
20561/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
20562/******/ 	
20563/******/ 		// Return the exports of the module
20564/******/ 		return module.exports;
20565/******/ 	}
20566/******/ 	
20567/************************************************************************/
20568/******/ 	/* webpack/runtime/compat get default export */
20569/******/ 	(() => {
20570/******/ 		// getDefaultExport function for compatibility with non-harmony modules
20571/******/ 		__webpack_require__.n = (module) => {
20572/******/ 			var getter = module && module.__esModule ?
20573/******/ 				() => (module['default']) :
20574/******/ 				() => (module);
20575/******/ 			__webpack_require__.d(getter, { a: getter });
20576/******/ 			return getter;
20577/******/ 		};
20578/******/ 	})();
20579/******/ 	
20580/******/ 	/* webpack/runtime/define property getters */
20581/******/ 	(() => {
20582/******/ 		// define getter functions for harmony exports
20583/******/ 		__webpack_require__.d = (exports, definition) => {
20584/******/ 			for(var key in definition) {
20585/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
20586/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
20587/******/ 				}
20588/******/ 			}
20589/******/ 		};
20590/******/ 	})();
20591/******/ 	
20592/******/ 	/* webpack/runtime/global */
20593/******/ 	(() => {
20594/******/ 		__webpack_require__.g = (function() {
20595/******/ 			if (typeof globalThis === 'object') return globalThis;
20596/******/ 			try {
20597/******/ 				return this || new Function('return this')();
20598/******/ 			} catch (e) {
20599/******/ 				if (typeof window === 'object') return window;
20600/******/ 			}
20601/******/ 		})();
20602/******/ 	})();
20603/******/ 	
20604/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
20605/******/ 	(() => {
20606/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
20607/******/ 	})();
20608/******/ 	
20609/******/ 	/* webpack/runtime/make namespace object */
20610/******/ 	(() => {
20611/******/ 		// define __esModule on exports
20612/******/ 		__webpack_require__.r = (exports) => {
20613/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
20614/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
20615/******/ 			}
20616/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
20617/******/ 		};
20618/******/ 	})();
20619/******/ 	
20620/******/ 	/* webpack/runtime/publicPath */
20621/******/ 	(() => {
20622/******/ 		var scriptUrl;
20623/******/ 		if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + "";
20624/******/ 		var document = __webpack_require__.g.document;
20625/******/ 		if (!scriptUrl && document) {
20626/******/ 			if (document.currentScript)
20627/******/ 				scriptUrl = document.currentScript.src;
20628/******/ 			if (!scriptUrl) {
20629/******/ 				var scripts = document.getElementsByTagName("script");
20630/******/ 				if(scripts.length) {
20631/******/ 					var i = scripts.length - 1;
20632/******/ 					while (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;
20633/******/ 				}
20634/******/ 			}
20635/******/ 		}
20636/******/ 		// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration
20637/******/ 		// or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.
20638/******/ 		if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser");
20639/******/ 		scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/");
20640/******/ 		__webpack_require__.p = scriptUrl + "../";
20641/******/ 	})();
20642/******/ 	
20643/************************************************************************/
20644/******/ 	
20645/******/ 	// startup
20646/******/ 	// Load entry module and return exports
20647/******/ 	__webpack_require__("./Resources/Private/JavaScript/main.js");
20648/******/ 	// This entry module doesn't tell about it's top-level declarations so it can't be inlined
20649/******/ 	var __webpack_exports__ = __webpack_require__("./Resources/Private/Scss/main.scss");
20650/******/ 	
20651/******/ })()
20652;
20653//# sourceMappingURL=main.min.js.map

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