Conditional Fields for Contact Form 7 - Version 1.8.6

Version Description

(2020-04-18) = * Fixed: accidentally packed the entire jQuery library in scripts.js * Cleaned up some console.logs that was still hanging around in the code.

Download this release

Release Info

Developer Jules Colle
Plugin Icon 128x128 Conditional Fields for Contact Form 7
Version 1.8.6
Comparing to
See all releases

Code changes from version 1.8.5 to 1.8.6

contact-form-7-conditional-fields.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: Contact Form 7 Conditional Fields
4
  Plugin URI: http://bdwm.be/
5
  Description: Adds support for conditional fields to Contact Form 7. This plugin depends on Contact Form 7.
6
  Author: Jules Colle
7
- Version: 1.8.5
8
  Author URI: http://bdwm.be/
9
  */
10
 
4
  Plugin URI: http://bdwm.be/
5
  Description: Adds support for conditional fields to Contact Form 7. This plugin depends on Contact Form 7.
6
  Author: Jules Colle
7
+ Version: 1.8.6
8
  Author URI: http://bdwm.be/
9
  */
10
 
init.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- if (!defined('WPCF7CF_VERSION')) define( 'WPCF7CF_VERSION', '1.8.5' );
4
  if (!defined('WPCF7CF_REQUIRED_WP_VERSION')) define( 'WPCF7CF_REQUIRED_WP_VERSION', '4.1' );
5
  if (!defined('WPCF7CF_PLUGIN')) define( 'WPCF7CF_PLUGIN', __FILE__ );
6
  if (!defined('WPCF7CF_PLUGIN_BASENAME')) define( 'WPCF7CF_PLUGIN_BASENAME', plugin_basename( WPCF7CF_PLUGIN ) );
1
  <?php
2
 
3
+ if (!defined('WPCF7CF_VERSION')) define( 'WPCF7CF_VERSION', '1.8.6' );
4
  if (!defined('WPCF7CF_REQUIRED_WP_VERSION')) define( 'WPCF7CF_REQUIRED_WP_VERSION', '4.1' );
5
  if (!defined('WPCF7CF_PLUGIN')) define( 'WPCF7CF_PLUGIN', __FILE__ );
6
  if (!defined('WPCF7CF_PLUGIN_BASENAME')) define( 'WPCF7CF_PLUGIN_BASENAME', plugin_basename( WPCF7CF_PLUGIN ) );
js/scripts.js CHANGED
@@ -99,9 +99,6 @@ __webpack_require__.r(__webpack_exports__);
99
  /* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);
100
  /* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js");
101
  /* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);
102
- /* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");
103
- /* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_2__);
104
-
105
 
106
 
107
 
@@ -110,7 +107,6 @@ var cf7signature_resized = 0; // for compatibility with contact-form-7-signature
110
 
111
  var wpcf7cf_timeout;
112
  var wpcf7cf_change_time_ms = window.wpcf7cf_running_tests ? 0 : 100;
113
- console.log(wpcf7cf_change_time_ms);
114
  var wpcf7cf_show_animation = {
115
  "height": "show",
116
  "marginTop": "show",
@@ -177,7 +173,7 @@ var Wpcf7cfForm = function Wpcf7cfForm($form) {
177
 
178
  form.initial_conditions = form.conditions;
179
  form.settings = form_options['settings'];
180
- form.$groups = jquery__WEBPACK_IMPORTED_MODULE_2___default()(); // empty jQuery set
181
 
182
  form.repeaters = [];
183
  form.multistep = null;
@@ -206,13 +202,13 @@ var Wpcf7cfForm = function Wpcf7cfForm($form) {
206
  }, 200);
207
  }); // PRO ONLY
208
 
209
- jquery__WEBPACK_IMPORTED_MODULE_2___default()('.wpcf7cf_repeater:not(.wpcf7cf_repeater .wpcf7cf_repeater)', $form).each(function () {
210
- form.repeaters.push(new Wpcf7cfRepeater(jquery__WEBPACK_IMPORTED_MODULE_2___default()(this), form));
211
  });
212
  form.$input_repeaters.val(JSON.stringify(form.repeaters.map(function (item) {
213
  return item.params.$repeater.id;
214
  })));
215
- var $multistep = jquery__WEBPACK_IMPORTED_MODULE_2___default()('.wpcf7cf_multistep', $form);
216
 
217
  if ($multistep.length) {
218
  form.multistep = new Wpcf7cfMultistep($multistep, form); // window.wpcf7cf.updateMultistepState(form.multistep);
@@ -242,8 +238,8 @@ Wpcf7cfForm.prototype.displayFields = function () {
242
  if (cf7signature_resized === 0 && typeof signatures !== 'undefined' && signatures.constructor === Array && signatures.length > 0) {
243
  for (var i = 0; i < signatures.length; i++) {
244
  if (signatures[i].canvas.width === 0) {
245
- var $sig_canvas = jquery__WEBPACK_IMPORTED_MODULE_2___default()(".wpcf7-form-control-signature-body>canvas");
246
- var $sig_wrap = jquery__WEBPACK_IMPORTED_MODULE_2___default()(".wpcf7-form-control-signature-wrap");
247
  $sig_canvas.eq(i).attr('width', $sig_wrap.width());
248
  $sig_canvas.eq(i).attr('height', $sig_wrap.height());
249
  cf7signature_resized = 1;
@@ -258,14 +254,14 @@ Wpcf7cfForm.prototype.displayFields = function () {
258
  var show_group = window.wpcf7cf.should_group_be_shown(condition, form.$form);
259
 
260
  if (show_group) {
261
- jquery__WEBPACK_IMPORTED_MODULE_2___default()('[data-id="' + condition.then_field + '"]', form.$form).eq(0).removeClass('wpcf7cf-hidden');
262
  }
263
  }
264
 
265
  var animation_intime = wpcf7cf_settings.animation_intime;
266
  var animation_outtime = wpcf7cf_settings.animation_outtime;
267
  form.$groups.each(function (index) {
268
- var $group = jquery__WEBPACK_IMPORTED_MODULE_2___default()(this);
269
  if ($group.is(':animated')) $group.finish(); // stop any current animations on the group
270
 
271
  if ($group.css('display') === 'none' && !$group.hasClass('wpcf7cf-hidden')) {
@@ -276,20 +272,20 @@ Wpcf7cfForm.prototype.displayFields = function () {
276
  }
277
  } else if ($group.css('display') !== 'none' && $group.hasClass('wpcf7cf-hidden')) {
278
  if ($group.attr('data-clear_on_hide') !== undefined) {
279
- var $inputs = jquery__WEBPACK_IMPORTED_MODULE_2___default()(':input', $group).not(':button, :submit, :reset, :hidden');
280
  $inputs.each(function () {
281
- var $this = jquery__WEBPACK_IMPORTED_MODULE_2___default()(this);
282
  $this.val(this.defaultValue);
283
  $this.prop('checked', this.defaultChecked);
284
  });
285
- jquery__WEBPACK_IMPORTED_MODULE_2___default()('option', $group).each(function () {
286
  this.selected = this.defaultSelected;
287
  });
288
- jquery__WEBPACK_IMPORTED_MODULE_2___default()('select', $group).each(function () {
289
- var $select = jquery__WEBPACK_IMPORTED_MODULE_2___default()(this);
290
 
291
  if ($select.val() === null) {
292
- $select.val(jquery__WEBPACK_IMPORTED_MODULE_2___default()("option:first", $select).val());
293
  }
294
  });
295
  $inputs.change(); //display_fields();
@@ -307,14 +303,14 @@ Wpcf7cfForm.prototype.displayFields = function () {
307
  };
308
 
309
  Wpcf7cfForm.prototype.updateSummaryFields = function () {
310
- var $summary = jquery__WEBPACK_IMPORTED_MODULE_2___default()('.wpcf7cf-summary', this.$form);
311
  if ($summary.length == 0 || !$summary.is(':visible')) return;
312
  var fd = new FormData();
313
  var formdata = this.$form.serializeArray();
314
- jquery__WEBPACK_IMPORTED_MODULE_2___default.a.each(formdata, function (key, input) {
315
  fd.append(input.name, input.value);
316
  });
317
- jquery__WEBPACK_IMPORTED_MODULE_2___default.a.ajax({
318
  url: wpcf7cf_global_settings.ajaxurl + '?action=wpcf7cf_get_summary',
319
  type: 'POST',
320
  data: fd,
@@ -333,12 +329,12 @@ Wpcf7cfForm.prototype.updateHiddenFields = function () {
333
  var hidden_groups = [];
334
  var visible_groups = [];
335
  form.$groups.each(function () {
336
- var $this = jquery__WEBPACK_IMPORTED_MODULE_2___default()(this);
337
 
338
  if ($this.hasClass('wpcf7cf-hidden')) {
339
  hidden_groups.push($this.data('id'));
340
  $this.find('input,select,textarea').each(function () {
341
- hidden_fields.push(jquery__WEBPACK_IMPORTED_MODULE_2___default()(this).attr('name'));
342
  });
343
  } else {
344
  visible_groups.push($this.data('id'));
@@ -362,7 +358,7 @@ Wpcf7cfForm.prototype.updateGroups = function () {
362
  Wpcf7cfForm.prototype.updateEventListeners = function () {
363
  var form = this; // monitor input changes, and call display_fields() if something has changed
364
 
365
- jquery__WEBPACK_IMPORTED_MODULE_2___default()('input, select, textarea, button', form.$form).not('.wpcf7cf_add, .wpcf7cf_remove').off(wpcf7cf_change_events).on(wpcf7cf_change_events, form, function (e) {
366
  var form = e.data;
367
  clearTimeout(wpcf7cf_timeout);
368
  wpcf7cf_timeout = setTimeout(function () {
@@ -370,8 +366,8 @@ Wpcf7cfForm.prototype.updateEventListeners = function () {
370
  }, wpcf7cf_change_time_ms);
371
  }); // PRO ONLY
372
 
373
- jquery__WEBPACK_IMPORTED_MODULE_2___default()('.wpcf7cf-togglebutton', form.$form).off('click.toggle_wpcf7cf').on('click.toggle_wpcf7cf', function () {
374
- var $this = jquery__WEBPACK_IMPORTED_MODULE_2___default()(this);
375
 
376
  if ($this.text() === $this.data('val-1')) {
377
  $this.text($this.data('val-2'));
@@ -385,7 +381,7 @@ Wpcf7cfForm.prototype.updateEventListeners = function () {
385
 
386
 
387
  function Wpcf7cfRepeater($repeater, form) {
388
- var $ = jquery__WEBPACK_IMPORTED_MODULE_2___default.a;
389
  var repeater = this;
390
  var wpcf7cf_settings = form.settings;
391
  repeater.form = form;
@@ -400,13 +396,13 @@ function Wpcf7cfRepeater($repeater, form) {
400
  var $repeater_controls = $repeater.children('.wpcf7cf_repeater_controls').eq(0);
401
  var $repeater_sub_clone = $repeater_sub.clone();
402
  $repeater_sub_clone.find('.wpcf7cf_repeater_sub').addBack('.wpcf7cf_repeater_sub').each(function () {
403
- var $this = jquery__WEBPACK_IMPORTED_MODULE_2___default()(this);
404
  var prev_suffix = $this.attr('data-repeater_sub_suffix');
405
  var new_suffix = prev_suffix + '__{{repeater_sub_suffix}}';
406
  $this.attr('data-repeater_sub_suffix', new_suffix);
407
  });
408
  $repeater_sub_clone.find('[name]').each(function () {
409
- var $this = jquery__WEBPACK_IMPORTED_MODULE_2___default()(this);
410
  var prev_name = $this.attr('name');
411
  var orig_name = $this.attr('data-orig_name') != null ? $this.attr('data-orig_name') : prev_name;
412
  var new_name = prev_name + '__{{repeater_sub_suffix}}';
@@ -420,7 +416,7 @@ function Wpcf7cfRepeater($repeater, form) {
420
  $this.closest('.wpcf7-form-control-wrap').addClass(new_name);
421
  });
422
  $repeater_sub_clone.find('.wpcf7cf_repeater,[data-class="wpcf7cf_group"]').each(function () {
423
- var $this = jquery__WEBPACK_IMPORTED_MODULE_2___default()(this);
424
  var prev_data_id = $this.attr('data-id');
425
  var orig_data_id = $this.attr('data-orig_data_id') != null ? $this.attr('data-orig_data_id') : prev_data_id;
426
  var new_data_id = prev_data_id + '__{{repeater_sub_suffix}}';
@@ -434,7 +430,7 @@ function Wpcf7cfRepeater($repeater, form) {
434
  $this.closest('.wpcf7-form-control-wrap').addClass(new_data_id);
435
  });
436
  $repeater_sub_clone.find('[id]').each(function () {
437
- var $this = jquery__WEBPACK_IMPORTED_MODULE_2___default()(this);
438
  var prev_id = $this.attr('id');
439
  var orig_id = $this.attr('data-orig_id') != null ? $this.attr('data-orig_id') : prev_id;
440
  var new_id = prev_id + '__{{repeater_sub_suffix}}';
@@ -443,7 +439,7 @@ function Wpcf7cfRepeater($repeater, form) {
443
  $this.closest('.wpcf7-form-control-wrap').addClass(new_id);
444
  });
445
  $repeater_sub_clone.find('[for]').each(function () {
446
- var $this = jquery__WEBPACK_IMPORTED_MODULE_2___default()(this);
447
  var prev_for = $this.attr('for');
448
  var orig_for = $this.attr('data-orig_for') != null ? $this.attr('data-orig_for') : prev_for;
449
  var new_for = prev_for + '__{{repeater_sub_suffix}}';
@@ -473,7 +469,7 @@ function Wpcf7cfRepeater($repeater, form) {
473
  var repeater = e.data;
474
  repeater.updateSubs(params.$repeater.num_subs - 1);
475
  });
476
- jquery__WEBPACK_IMPORTED_MODULE_2___default()('> .wpcf7cf_repeater_sub', params.$repeater).eq(0).remove(); // remove the first sub, it's just a template.
477
 
478
  repeater.updateSubs($repeater.initial_subs);
479
  }
@@ -516,7 +512,7 @@ Wpcf7cfRepeater.prototype.updateSubs = function (subs_to_show) {
516
  };
517
 
518
  Wpcf7cfRepeater.prototype.addSubs = function (subs_to_add) {
519
- var $ = jquery__WEBPACK_IMPORTED_MODULE_2___default.a;
520
  var params = this.params;
521
  var repeater = this;
522
  var form = repeater.form;
@@ -530,11 +526,11 @@ Wpcf7cfRepeater.prototype.addSubs = function (subs_to_add) {
530
  html_str += params.repeater_sub_html.replace(/\{\{repeater_sub_suffix\}\}/g, sub_suffix).replace(new RegExp('\{\{' + $repeater.orig_id + '_index\}\}', 'g'), sub_suffix);
531
  }
532
 
533
- var $html = jquery__WEBPACK_IMPORTED_MODULE_2___default()(html_str); // Add the newly created fields to the form
534
 
535
  $html.hide().insertBefore($repeater_controls).animate(wpcf7cf_show_animation, params.wpcf7cf_settings.animation_intime).trigger('wpcf7cf_repeater_added');
536
- jquery__WEBPACK_IMPORTED_MODULE_2___default()('.wpcf7cf_repeater', $html).each(function () {
537
- form.repeaters.push(new Wpcf7cfRepeater(jquery__WEBPACK_IMPORTED_MODULE_2___default()(this), form));
538
  });
539
  form.$input_repeaters.val(JSON.stringify(form.repeaters.map(function (item) {
540
  return item.params.$repeater.id;
@@ -558,14 +554,14 @@ Wpcf7cfRepeater.prototype.addSubs = function (subs_to_add) {
558
  };
559
 
560
  Wpcf7cfRepeater.prototype.removeSubs = function (num_subs) {
561
- var $ = jquery__WEBPACK_IMPORTED_MODULE_2___default.a;
562
  var params = this.params;
563
  var form = this.form;
564
  params.$repeater.num_subs -= num_subs;
565
- jquery__WEBPACK_IMPORTED_MODULE_2___default()('> .wpcf7cf_repeater_sub', params.$repeater).slice(-num_subs).animate(wpcf7cf_hide_animation, {
566
  duration: params.wpcf7cf_settings.animation_intime,
567
  done: function done() {
568
- var $this = jquery__WEBPACK_IMPORTED_MODULE_2___default()(this); //remove the actual fields from the form
569
 
570
  $this.remove();
571
  params.$repeater.trigger('wpcf7cf_repeater_removed');
@@ -632,9 +628,9 @@ function Wpcf7cfMultistep($multistep, form) {
632
  multistep.moveToStep(1);
633
  }
634
 
635
- jquery__WEBPACK_IMPORTED_MODULE_2___default()(document).ajaxComplete(function (e, xhr, settings) {
636
  if (xhr.hasOwnProperty('responseJSON') && xhr.responseJSON != null && xhr.responseJSON.hasOwnProperty('status') && xhr.responseJSON.hasOwnProperty('into') && xhr.responseJSON.status === "mail_success") {
637
- jquery__WEBPACK_IMPORTED_MODULE_2___default()(xhr.responseJSON.into).trigger('reset.wpcf7cf');
638
  }
639
  });
640
 
@@ -646,17 +642,17 @@ Wpcf7cfMultistep.prototype.validateStep = function (step_index) {
646
  return new Promise(function (resolve) {
647
  var fd = new FormData(); // Make sure to add file fields to FormData
648
 
649
- jquery__WEBPACK_IMPORTED_MODULE_2___default.a.each($form.find('[data-id="step-' + step_index + '"] input[type="file"]'), function (index, el) {
650
  if (!el.files.length) return false;
651
  var file = el.files[0];
652
  var fieldName = el.name;
653
  fd.append(fieldName, file);
654
  });
655
  var formdata = $form.serializeArray();
656
- jquery__WEBPACK_IMPORTED_MODULE_2___default.a.each(formdata, function (key, input) {
657
  fd.append(input.name, input.value);
658
  });
659
- jquery__WEBPACK_IMPORTED_MODULE_2___default.a.ajax({
660
  url: wpcf7cf_global_settings.ajaxurl + '?action=wpcf7cf_validate_step',
661
  type: 'POST',
662
  data: fd,
@@ -681,10 +677,10 @@ Wpcf7cfMultistep.prototype.validateStep = function (step_index) {
681
 
682
  if (!json.success) {
683
  var checkError = 0;
684
- jquery__WEBPACK_IMPORTED_MODULE_2___default.a.each(json.invalid_fields, function (index, el) {
685
  if ($multistep.find('input[name="' + index + '"]').length || $multistep.find('input[name="' + index + '[]"]').length || $multistep.find('select[name="' + index + '"]').length || $multistep.find('select[name="' + index + '[]"]').length || $multistep.find('textarea[name="' + index + '"]').length || $multistep.find('textarea[name="' + index + '[]"]').length) {
686
  checkError = checkError + 1;
687
- var controlWrap = jquery__WEBPACK_IMPORTED_MODULE_2___default()('.wpcf7-form-control-wrap.' + index, $form); //controlWrap.addClass('cf7mls-invalid');
688
 
689
  controlWrap.find('input').addClass('wpcf7-not-valid');
690
  controlWrap.find('span.wpcf7-not-valid-tip').remove();
@@ -693,7 +689,6 @@ Wpcf7cfMultistep.prototype.validateStep = function (step_index) {
693
  });
694
  resolve('failed'); //$multistep.append('<div class="wpcf7-response-output wpcf7-display-none wpcf7-validation-errors" style="display: block;" role="alert">' + json.message + '</div>');
695
 
696
- console.log($multistep.parent().find('.wpcf7-response-output'));
697
  $multistep.parent().find('.wpcf7-response-output').removeClass('wpcf7-display-none').html(json.message);
698
  } else if (json.success) {
699
  resolve('success');
@@ -896,13 +891,13 @@ window.wpcf7cf = {
896
  }
897
  },
898
  should_group_be_shown: function should_group_be_shown(condition, $current_form) {
899
- var $ = jquery__WEBPACK_IMPORTED_MODULE_2___default.a;
900
  var show_group = true;
901
 
902
  for (var and_rule_i = 0; and_rule_i < condition.and_rules.length; and_rule_i++) {
903
  var condition_ok = false;
904
  var condition_and_rule = condition.and_rules[and_rule_i];
905
- var $field = jquery__WEBPACK_IMPORTED_MODULE_2___default()('[name="' + condition_and_rule.if_field + '"], [name="' + condition_and_rule.if_field + '[]"], [data-original-name="' + condition_and_rule.if_field + '"], [data-original-name="' + condition_and_rule.if_field + '[]"]', $current_form);
906
  var if_val = condition_and_rule.if_value;
907
  var if_val_as_number = isFinite(parseFloat(if_val)) ? parseFloat(if_val) : 0;
908
  var operator = condition_and_rule.operator;
@@ -926,10 +921,10 @@ window.wpcf7cf = {
926
  var all_values = [];
927
  var checked_values = [];
928
  $field.each(function () {
929
- all_values.push(jquery__WEBPACK_IMPORTED_MODULE_2___default()(this).val());
930
 
931
- if (jquery__WEBPACK_IMPORTED_MODULE_2___default()(this).is(':checked')) {
932
- checked_values.push(jquery__WEBPACK_IMPORTED_MODULE_2___default()(this).val());
933
  }
934
  });
935
  condition_ok = this.isConditionTrue(checked_values, operator, if_val, $field);
@@ -944,7 +939,7 @@ window.wpcf7cf = {
944
  },
945
  isConditionTrue: function isConditionTrue(values, operator) {
946
  var testValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
947
- var $field = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : jquery__WEBPACK_IMPORTED_MODULE_2___default()();
948
 
949
  if (!Array.isArray(values)) {
950
  values = [values];
@@ -1014,23 +1009,23 @@ window.wpcf7cf = {
1014
  return condition_ok;
1015
  }
1016
  };
1017
- jquery__WEBPACK_IMPORTED_MODULE_2___default()('.wpcf7-form').each(function () {
1018
- wpcf7cf_forms.push(new Wpcf7cfForm(jquery__WEBPACK_IMPORTED_MODULE_2___default()(this)));
1019
  }); // Call displayFields again on all forms
1020
  // Necessary in case some theme or plugin changed a form value by the time the entire page is fully loaded.
1021
 
1022
- jquery__WEBPACK_IMPORTED_MODULE_2___default()('document').ready(function () {
1023
  wpcf7cf_forms.forEach(function (f) {
1024
  f.displayFields();
1025
  });
1026
  }); // fix for exclusive checkboxes in IE (this will call the change-event again after all other checkboxes are unchecked, triggering the display_fields() function)
1027
 
1028
- var old_wpcf7ExclusiveCheckbox = jquery__WEBPACK_IMPORTED_MODULE_2___default.a.fn.wpcf7ExclusiveCheckbox;
1029
 
1030
- jquery__WEBPACK_IMPORTED_MODULE_2___default.a.fn.wpcf7ExclusiveCheckbox = function () {
1031
  return this.find('input:checkbox').click(function () {
1032
- var name = jquery__WEBPACK_IMPORTED_MODULE_2___default()(this).attr('name');
1033
- jquery__WEBPACK_IMPORTED_MODULE_2___default()(this).closest('form').find('input:checkbox[name="' + name + '"]').not(this).prop('checked', false).eq(0).change();
1034
  });
1035
  };
1036
 
@@ -1094,9487 +1089,6 @@ module.exports = __webpack_require__(/*! regenerator-runtime */ "./node_modules/
1094
 
1095
  /***/ }),
1096
 
1097
- /***/ "./node_modules/jquery/dist/jquery.js":
1098
- /*!********************************************!*\
1099
- !*** ./node_modules/jquery/dist/jquery.js ***!
1100
- \********************************************/
1101
- /*! no static exports found */
1102
- /***/ (function(module, exports, __webpack_require__) {
1103
-
1104
- /* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
1105
-
1106
- /*!
1107
- * jQuery JavaScript Library v3.5.0
1108
- * https://jquery.com/
1109
- *
1110
- * Includes Sizzle.js
1111
- * https://sizzlejs.com/
1112
- *
1113
- * Copyright JS Foundation and other contributors
1114
- * Released under the MIT license
1115
- * https://jquery.org/license
1116
- *
1117
- * Date: 2020-04-10T15:07Z
1118
- */
1119
- (function (global, factory) {
1120
- "use strict";
1121
-
1122
- if (( false ? undefined : _typeof(module)) === "object" && _typeof(module.exports) === "object") {
1123
- // For CommonJS and CommonJS-like environments where a proper `window`
1124
- // is present, execute the factory and get jQuery.
1125
- // For environments that do not have a `window` with a `document`
1126
- // (such as Node.js), expose a factory as module.exports.
1127
- // This accentuates the need for the creation of a real `window`.
1128
- // e.g. var jQuery = require("jquery")(window);
1129
- // See ticket #14549 for more info.
1130
- module.exports = global.document ? factory(global, true) : function (w) {
1131
- if (!w.document) {
1132
- throw new Error("jQuery requires a window with a document");
1133
- }
1134
-
1135
- return factory(w);
1136
- };
1137
- } else {
1138
- factory(global);
1139
- } // Pass this if window is not defined yet
1140
-
1141
- })(typeof window !== "undefined" ? window : this, function (window, noGlobal) {
1142
- // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
1143
- // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
1144
- // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
1145
- // enough that all such attempts are guarded in a try block.
1146
- "use strict";
1147
-
1148
- var arr = [];
1149
- var getProto = Object.getPrototypeOf;
1150
- var _slice = arr.slice;
1151
- var flat = arr.flat ? function (array) {
1152
- return arr.flat.call(array);
1153
- } : function (array) {
1154
- return arr.concat.apply([], array);
1155
- };
1156
- var push = arr.push;
1157
- var indexOf = arr.indexOf;
1158
- var class2type = {};
1159
- var toString = class2type.toString;
1160
- var hasOwn = class2type.hasOwnProperty;
1161
- var fnToString = hasOwn.toString;
1162
- var ObjectFunctionString = fnToString.call(Object);
1163
- var support = {};
1164
-
1165
- var isFunction = function isFunction(obj) {
1166
- // Support: Chrome <=57, Firefox <=52
1167
- // In some browsers, typeof returns "function" for HTML <object> elements
1168
- // (i.e., `typeof document.createElement( "object" ) === "function"`).
1169
- // We don't want to classify *any* DOM node as a function.
1170
- return typeof obj === "function" && typeof obj.nodeType !== "number";
1171
- };
1172
-
1173
- var isWindow = function isWindow(obj) {
1174
- return obj != null && obj === obj.window;
1175
- };
1176
-
1177
- var document = window.document;
1178
- var preservedScriptAttributes = {
1179
- type: true,
1180
- src: true,
1181
- nonce: true,
1182
- noModule: true
1183
- };
1184
-
1185
- function DOMEval(code, node, doc) {
1186
- doc = doc || document;
1187
- var i,
1188
- val,
1189
- script = doc.createElement("script");
1190
- script.text = code;
1191
-
1192
- if (node) {
1193
- for (i in preservedScriptAttributes) {
1194
- // Support: Firefox 64+, Edge 18+
1195
- // Some browsers don't support the "nonce" property on scripts.
1196
- // On the other hand, just using `getAttribute` is not enough as
1197
- // the `nonce` attribute is reset to an empty string whenever it
1198
- // becomes browsing-context connected.
1199
- // See https://github.com/whatwg/html/issues/2369
1200
- // See https://html.spec.whatwg.org/#nonce-attributes
1201
- // The `node.getAttribute` check was added for the sake of
1202
- // `jQuery.globalEval` so that it can fake a nonce-containing node
1203
- // via an object.
1204
- val = node[i] || node.getAttribute && node.getAttribute(i);
1205
-
1206
- if (val) {
1207
- script.setAttribute(i, val);
1208
- }
1209
- }
1210
- }
1211
-
1212
- doc.head.appendChild(script).parentNode.removeChild(script);
1213
- }
1214
-
1215
- function toType(obj) {
1216
- if (obj == null) {
1217
- return obj + "";
1218
- } // Support: Android <=2.3 only (functionish RegExp)
1219
-
1220
-
1221
- return _typeof(obj) === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : _typeof(obj);
1222
- }
1223
- /* global Symbol */
1224
- // Defining this global in .eslintrc.json would create a danger of using the global
1225
- // unguarded in another place, it seems safer to define global only for this module
1226
-
1227
-
1228
- var version = "3.5.0",
1229
- // Define a local copy of jQuery
1230
- jQuery = function jQuery(selector, context) {
1231
- // The jQuery object is actually just the init constructor 'enhanced'
1232
- // Need init if jQuery is called (just allow error to be thrown if not included)
1233
- return new jQuery.fn.init(selector, context);
1234
- };
1235
-
1236
- jQuery.fn = jQuery.prototype = {
1237
- // The current version of jQuery being used
1238
- jquery: version,
1239
- constructor: jQuery,
1240
- // The default length of a jQuery object is 0
1241
- length: 0,
1242
- toArray: function toArray() {
1243
- return _slice.call(this);
1244
- },
1245
- // Get the Nth element in the matched element set OR
1246
- // Get the whole matched element set as a clean array
1247
- get: function get(num) {
1248
- // Return all the elements in a clean array
1249
- if (num == null) {
1250
- return _slice.call(this);
1251
- } // Return just the one element from the set
1252
-
1253
-
1254
- return num < 0 ? this[num + this.length] : this[num];
1255
- },
1256
- // Take an array of elements and push it onto the stack
1257
- // (returning the new matched element set)
1258
- pushStack: function pushStack(elems) {
1259
- // Build a new jQuery matched element set
1260
- var ret = jQuery.merge(this.constructor(), elems); // Add the old object onto the stack (as a reference)
1261
-
1262
- ret.prevObject = this; // Return the newly-formed element set
1263
-
1264
- return ret;
1265
- },
1266
- // Execute a callback for every element in the matched set.
1267
- each: function each(callback) {
1268
- return jQuery.each(this, callback);
1269
- },
1270
- map: function map(callback) {
1271
- return this.pushStack(jQuery.map(this, function (elem, i) {
1272
- return callback.call(elem, i, elem);
1273
- }));
1274
- },
1275
- slice: function slice() {
1276
- return this.pushStack(_slice.apply(this, arguments));
1277
- },
1278
- first: function first() {
1279
- return this.eq(0);
1280
- },
1281
- last: function last() {
1282
- return this.eq(-1);
1283
- },
1284
- even: function even() {
1285
- return this.pushStack(jQuery.grep(this, function (_elem, i) {
1286
- return (i + 1) % 2;
1287
- }));
1288
- },
1289
- odd: function odd() {
1290
- return this.pushStack(jQuery.grep(this, function (_elem, i) {
1291
- return i % 2;
1292
- }));
1293
- },
1294
- eq: function eq(i) {
1295
- var len = this.length,
1296
- j = +i + (i < 0 ? len : 0);
1297
- return this.pushStack(j >= 0 && j < len ? [this[j]] : []);
1298
- },
1299
- end: function end() {
1300
- return this.prevObject || this.constructor();
1301
- },
1302
- // For internal use only.
1303
- // Behaves like an Array's method, not like a jQuery method.
1304
- push: push,
1305
- sort: arr.sort,
1306
- splice: arr.splice
1307
- };
1308
-
1309
- jQuery.extend = jQuery.fn.extend = function () {
1310
- var options,
1311
- name,
1312
- src,
1313
- copy,
1314
- copyIsArray,
1315
- clone,
1316
- target = arguments[0] || {},
1317
- i = 1,
1318
- length = arguments.length,
1319
- deep = false; // Handle a deep copy situation
1320
-
1321
- if (typeof target === "boolean") {
1322
- deep = target; // Skip the boolean and the target
1323
-
1324
- target = arguments[i] || {};
1325
- i++;
1326
- } // Handle case when target is a string or something (possible in deep copy)
1327
-
1328
-
1329
- if (_typeof(target) !== "object" && !isFunction(target)) {
1330
- target = {};
1331
- } // Extend jQuery itself if only one argument is passed
1332
-
1333
-
1334
- if (i === length) {
1335
- target = this;
1336
- i--;
1337
- }
1338
-
1339
- for (; i < length; i++) {
1340
- // Only deal with non-null/undefined values
1341
- if ((options = arguments[i]) != null) {
1342
- // Extend the base object
1343
- for (name in options) {
1344
- copy = options[name]; // Prevent Object.prototype pollution
1345
- // Prevent never-ending loop
1346
-
1347
- if (name === "__proto__" || target === copy) {
1348
- continue;
1349
- } // Recurse if we're merging plain objects or arrays
1350
-
1351
-
1352
- if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {
1353
- src = target[name]; // Ensure proper type for the source value
1354
-
1355
- if (copyIsArray && !Array.isArray(src)) {
1356
- clone = [];
1357
- } else if (!copyIsArray && !jQuery.isPlainObject(src)) {
1358
- clone = {};
1359
- } else {
1360
- clone = src;
1361
- }
1362
-
1363
- copyIsArray = false; // Never move original objects, clone them
1364
-
1365
- target[name] = jQuery.extend(deep, clone, copy); // Don't bring in undefined values
1366
- } else if (copy !== undefined) {
1367
- target[name] = copy;
1368
- }
1369
- }
1370
- }
1371
- } // Return the modified object
1372
-
1373
-
1374
- return target;
1375
- };
1376
-
1377
- jQuery.extend({
1378
- // Unique for each copy of jQuery on the page
1379
- expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""),
1380
- // Assume jQuery is ready without the ready module
1381
- isReady: true,
1382
- error: function error(msg) {
1383
- throw new Error(msg);
1384
- },
1385
- noop: function noop() {},
1386
- isPlainObject: function isPlainObject(obj) {
1387
- var proto, Ctor; // Detect obvious negatives
1388
- // Use toString instead of jQuery.type to catch host objects
1389
-
1390
- if (!obj || toString.call(obj) !== "[object Object]") {
1391
- return false;
1392
- }
1393
-
1394
- proto = getProto(obj); // Objects with no prototype (e.g., `Object.create( null )`) are plain
1395
-
1396
- if (!proto) {
1397
- return true;
1398
- } // Objects with prototype are plain iff they were constructed by a global Object function
1399
-
1400
-
1401
- Ctor = hasOwn.call(proto, "constructor") && proto.constructor;
1402
- return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString;
1403
- },
1404
- isEmptyObject: function isEmptyObject(obj) {
1405
- var name;
1406
-
1407
- for (name in obj) {
1408
- return false;
1409
- }
1410
-
1411
- return true;
1412
- },
1413
- // Evaluates a script in a provided context; falls back to the global one
1414
- // if not specified.
1415
- globalEval: function globalEval(code, options, doc) {
1416
- DOMEval(code, {
1417
- nonce: options && options.nonce
1418
- }, doc);
1419
- },
1420
- each: function each(obj, callback) {
1421
- var length,
1422
- i = 0;
1423
-
1424
- if (isArrayLike(obj)) {
1425
- length = obj.length;
1426
-
1427
- for (; i < length; i++) {
1428
- if (callback.call(obj[i], i, obj[i]) === false) {
1429
- break;
1430
- }
1431
- }
1432
- } else {
1433
- for (i in obj) {
1434
- if (callback.call(obj[i], i, obj[i]) === false) {
1435
- break;
1436
- }
1437
- }
1438
- }
1439
-
1440
- return obj;
1441
- },
1442
- // results is for internal usage only
1443
- makeArray: function makeArray(arr, results) {
1444
- var ret = results || [];
1445
-
1446
- if (arr != null) {
1447
- if (isArrayLike(Object(arr))) {
1448
- jQuery.merge(ret, typeof arr === "string" ? [arr] : arr);
1449
- } else {
1450
- push.call(ret, arr);
1451
- }
1452
- }
1453
-
1454
- return ret;
1455
- },
1456
- inArray: function inArray(elem, arr, i) {
1457
- return arr == null ? -1 : indexOf.call(arr, elem, i);
1458
- },
1459
- // Support: Android <=4.0 only, PhantomJS 1 only
1460
- // push.apply(_, arraylike) throws on ancient WebKit
1461
- merge: function merge(first, second) {
1462
- var len = +second.length,
1463
- j = 0,
1464
- i = first.length;
1465
-
1466
- for (; j < len; j++) {
1467
- first[i++] = second[j];
1468
- }
1469
-
1470
- first.length = i;
1471
- return first;
1472
- },
1473
- grep: function grep(elems, callback, invert) {
1474
- var callbackInverse,
1475
- matches = [],
1476
- i = 0,
1477
- length = elems.length,
1478
- callbackExpect = !invert; // Go through the array, only saving the items
1479
- // that pass the validator function
1480
-
1481
- for (; i < length; i++) {
1482
- callbackInverse = !callback(elems[i], i);
1483
-
1484
- if (callbackInverse !== callbackExpect) {
1485
- matches.push(elems[i]);
1486
- }
1487
- }
1488
-
1489
- return matches;
1490
- },
1491
- // arg is for internal usage only
1492
- map: function map(elems, callback, arg) {
1493
- var length,
1494
- value,
1495
- i = 0,
1496
- ret = []; // Go through the array, translating each of the items to their new values
1497
-
1498
- if (isArrayLike(elems)) {
1499
- length = elems.length;
1500
-
1501
- for (; i < length; i++) {
1502
- value = callback(elems[i], i, arg);
1503
-
1504
- if (value != null) {
1505
- ret.push(value);
1506
- }
1507
- } // Go through every key on the object,
1508
-
1509
- } else {
1510
- for (i in elems) {
1511
- value = callback(elems[i], i, arg);
1512
-
1513
- if (value != null) {
1514
- ret.push(value);
1515
- }
1516
- }
1517
- } // Flatten any nested arrays
1518
-
1519
-
1520
- return flat(ret);
1521
- },
1522
- // A global GUID counter for objects
1523
- guid: 1,
1524
- // jQuery.support is not used in Core but other projects attach their
1525
- // properties to it so it needs to exist.
1526
- support: support
1527
- });
1528
-
1529
- if (typeof Symbol === "function") {
1530
- jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];
1531
- } // Populate the class2type map
1532
-
1533
-
1534
- jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (_i, name) {
1535
- class2type["[object " + name + "]"] = name.toLowerCase();
1536
- });
1537
-
1538
- function isArrayLike(obj) {
1539
- // Support: real iOS 8.2 only (not reproducible in simulator)
1540
- // `in` check used to prevent JIT error (gh-2145)
1541
- // hasOwn isn't used here due to false negatives
1542
- // regarding Nodelist length in IE
1543
- var length = !!obj && "length" in obj && obj.length,
1544
- type = toType(obj);
1545
-
1546
- if (isFunction(obj) || isWindow(obj)) {
1547
- return false;
1548
- }
1549
-
1550
- return type === "array" || length === 0 || typeof length === "number" && length > 0 && length - 1 in obj;
1551
- }
1552
-
1553
- var Sizzle =
1554
- /*!
1555
- * Sizzle CSS Selector Engine v2.3.5
1556
- * https://sizzlejs.com/
1557
- *
1558
- * Copyright JS Foundation and other contributors
1559
- * Released under the MIT license
1560
- * https://js.foundation/
1561
- *
1562
- * Date: 2020-03-14
1563
- */
1564
- function (window) {
1565
- var i,
1566
- support,
1567
- Expr,
1568
- getText,
1569
- isXML,
1570
- tokenize,
1571
- compile,
1572
- select,
1573
- outermostContext,
1574
- sortInput,
1575
- hasDuplicate,
1576
- // Local document vars
1577
- setDocument,
1578
- document,
1579
- docElem,
1580
- documentIsHTML,
1581
- rbuggyQSA,
1582
- rbuggyMatches,
1583
- matches,
1584
- contains,
1585
- // Instance-specific data
1586
- expando = "sizzle" + 1 * new Date(),
1587
- preferredDoc = window.document,
1588
- dirruns = 0,
1589
- done = 0,
1590
- classCache = createCache(),
1591
- tokenCache = createCache(),
1592
- compilerCache = createCache(),
1593
- nonnativeSelectorCache = createCache(),
1594
- sortOrder = function sortOrder(a, b) {
1595
- if (a === b) {
1596
- hasDuplicate = true;
1597
- }
1598
-
1599
- return 0;
1600
- },
1601
- // Instance methods
1602
- hasOwn = {}.hasOwnProperty,
1603
- arr = [],
1604
- pop = arr.pop,
1605
- pushNative = arr.push,
1606
- push = arr.push,
1607
- slice = arr.slice,
1608
- // Use a stripped-down indexOf as it's faster than native
1609
- // https://jsperf.com/thor-indexof-vs-for/5
1610
- indexOf = function indexOf(list, elem) {
1611
- var i = 0,
1612
- len = list.length;
1613
-
1614
- for (; i < len; i++) {
1615
- if (list[i] === elem) {
1616
- return i;
1617
- }
1618
- }
1619
-
1620
- return -1;
1621
- },
1622
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + "ismap|loop|multiple|open|readonly|required|scoped",
1623
- // Regular expressions
1624
- // http://www.w3.org/TR/css3-selectors/#whitespace
1625
- whitespace = "[\\x20\\t\\r\\n\\f]",
1626
- // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
1627
- identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
1628
- // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
1629
- attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2)
1630
- "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5]
1631
- // or strings [capture 3 or capture 4]"
1632
- "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]",
1633
- pseudos = ":(" + identifier + ")(?:\\((" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
1634
- // 1. quoted (capture 3; capture 4 or capture 5)
1635
- "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + // 2. simple (capture 6)
1636
- "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + // 3. anything else (capture 2)
1637
- ".*" + ")\\)|)",
1638
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
1639
- rwhitespace = new RegExp(whitespace + "+", "g"),
1640
- rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"),
1641
- rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"),
1642
- rcombinators = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"),
1643
- rdescend = new RegExp(whitespace + "|>"),
1644
- rpseudo = new RegExp(pseudos),
1645
- ridentifier = new RegExp("^" + identifier + "$"),
1646
- matchExpr = {
1647
- "ID": new RegExp("^#(" + identifier + ")"),
1648
- "CLASS": new RegExp("^\\.(" + identifier + ")"),
1649
- "TAG": new RegExp("^(" + identifier + "|[*])"),
1650
- "ATTR": new RegExp("^" + attributes),
1651
- "PSEUDO": new RegExp("^" + pseudos),
1652
- "CHILD": new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i"),
1653
- "bool": new RegExp("^(?:" + booleans + ")$", "i"),
1654
- // For use in libraries implementing .is()
1655
- // We use this for POS matching in `select`
1656
- "needsContext": new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i")
1657
- },
1658
- rhtml = /HTML$/i,
1659
- rinputs = /^(?:input|select|textarea|button)$/i,
1660
- rheader = /^h\d$/i,
1661
- rnative = /^[^{]+\{\s*\[native \w/,
1662
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
1663
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
1664
- rsibling = /[+~]/,
1665
- // CSS escapes
1666
- // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
1667
- runescape = new RegExp("\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g"),
1668
- funescape = function funescape(escape, nonHex) {
1669
- var high = "0x" + escape.slice(1) - 0x10000;
1670
- return nonHex ? // Strip the backslash prefix from a non-hex escape sequence
1671
- nonHex : // Replace a hexadecimal escape sequence with the encoded Unicode code point
1672
- // Support: IE <=11+
1673
- // For values outside the Basic Multilingual Plane (BMP), manually construct a
1674
- // surrogate pair
1675
- high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);
1676
- },
1677
- // CSS string/identifier serialization
1678
- // https://drafts.csswg.org/cssom/#common-serializing-idioms
1679
- rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
1680
- fcssescape = function fcssescape(ch, asCodePoint) {
1681
- if (asCodePoint) {
1682
- // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
1683
- if (ch === "\0") {
1684
- return "\uFFFD";
1685
- } // Control characters and (dependent upon position) numbers get escaped as code points
1686
-
1687
-
1688
- return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
1689
- } // Other potentially-special ASCII characters get backslash-escaped
1690
-
1691
-
1692
- return "\\" + ch;
1693
- },
1694
- // Used for iframes
1695
- // See setDocument()
1696
- // Removing the function wrapper causes a "Permission Denied"
1697
- // error in IE
1698
- unloadHandler = function unloadHandler() {
1699
- setDocument();
1700
- },
1701
- inDisabledFieldset = addCombinator(function (elem) {
1702
- return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
1703
- }, {
1704
- dir: "parentNode",
1705
- next: "legend"
1706
- }); // Optimize for push.apply( _, NodeList )
1707
-
1708
-
1709
- try {
1710
- push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes); // Support: Android<4.0
1711
- // Detect silently failing push.apply
1712
- // eslint-disable-next-line no-unused-expressions
1713
-
1714
- arr[preferredDoc.childNodes.length].nodeType;
1715
- } catch (e) {
1716
- push = {
1717
- apply: arr.length ? // Leverage slice if possible
1718
- function (target, els) {
1719
- pushNative.apply(target, slice.call(els));
1720
- } : // Support: IE<9
1721
- // Otherwise append directly
1722
- function (target, els) {
1723
- var j = target.length,
1724
- i = 0; // Can't trust NodeList.length
1725
-
1726
- while (target[j++] = els[i++]) {}
1727
-
1728
- target.length = j - 1;
1729
- }
1730
- };
1731
- }
1732
-
1733
- function Sizzle(selector, context, results, seed) {
1734
- var m,
1735
- i,
1736
- elem,
1737
- nid,
1738
- match,
1739
- groups,
1740
- newSelector,
1741
- newContext = context && context.ownerDocument,
1742
- // nodeType defaults to 9, since context defaults to document
1743
- nodeType = context ? context.nodeType : 9;
1744
- results = results || []; // Return early from calls with invalid selector or context
1745
-
1746
- if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {
1747
- return results;
1748
- } // Try to shortcut find operations (as opposed to filters) in HTML documents
1749
-
1750
-
1751
- if (!seed) {
1752
- setDocument(context);
1753
- context = context || document;
1754
-
1755
- if (documentIsHTML) {
1756
- // If the selector is sufficiently simple, try using a "get*By*" DOM method
1757
- // (excepting DocumentFragment context, where the methods don't exist)
1758
- if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {
1759
- // ID selector
1760
- if (m = match[1]) {
1761
- // Document context
1762
- if (nodeType === 9) {
1763
- if (elem = context.getElementById(m)) {
1764
- // Support: IE, Opera, Webkit
1765
- // TODO: identify versions
1766
- // getElementById can match elements by name instead of ID
1767
- if (elem.id === m) {
1768
- results.push(elem);
1769
- return results;
1770
- }
1771
- } else {
1772
- return results;
1773
- } // Element context
1774
-
1775
- } else {
1776
- // Support: IE, Opera, Webkit
1777
- // TODO: identify versions
1778
- // getElementById can match elements by name instead of ID
1779
- if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {
1780
- results.push(elem);
1781
- return results;
1782
- }
1783
- } // Type selector
1784
-
1785
- } else if (match[2]) {
1786
- push.apply(results, context.getElementsByTagName(selector));
1787
- return results; // Class selector
1788
- } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {
1789
- push.apply(results, context.getElementsByClassName(m));
1790
- return results;
1791
- }
1792
- } // Take advantage of querySelectorAll
1793
-
1794
-
1795
- if (support.qsa && !nonnativeSelectorCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && ( // Support: IE 8 only
1796
- // Exclude object elements
1797
- nodeType !== 1 || context.nodeName.toLowerCase() !== "object")) {
1798
- newSelector = selector;
1799
- newContext = context; // qSA considers elements outside a scoping root when evaluating child or
1800
- // descendant combinators, which is not what we want.
1801
- // In such cases, we work around the behavior by prefixing every selector in the
1802
- // list with an ID selector referencing the scope context.
1803
- // The technique has to be used as well when a leading combinator is used
1804
- // as such selectors are not recognized by querySelectorAll.
1805
- // Thanks to Andrew Dupont for this technique.
1806
-
1807
- if (nodeType === 1 && (rdescend.test(selector) || rcombinators.test(selector))) {
1808
- // Expand context for sibling selectors
1809
- newContext = rsibling.test(selector) && testContext(context.parentNode) || context; // We can use :scope instead of the ID hack if the browser
1810
- // supports it & if we're not changing the context.
1811
-
1812
- if (newContext !== context || !support.scope) {
1813
- // Capture the context ID, setting it first if necessary
1814
- if (nid = context.getAttribute("id")) {
1815
- nid = nid.replace(rcssescape, fcssescape);
1816
- } else {
1817
- context.setAttribute("id", nid = expando);
1818
- }
1819
- } // Prefix every selector in the list
1820
-
1821
-
1822
- groups = tokenize(selector);
1823
- i = groups.length;
1824
-
1825
- while (i--) {
1826
- groups[i] = (nid ? "#" + nid : ":scope") + " " + toSelector(groups[i]);
1827
- }
1828
-
1829
- newSelector = groups.join(",");
1830
- }
1831
-
1832
- try {
1833
- push.apply(results, newContext.querySelectorAll(newSelector));
1834
- return results;
1835
- } catch (qsaError) {
1836
- nonnativeSelectorCache(selector, true);
1837
- } finally {
1838
- if (nid === expando) {
1839
- context.removeAttribute("id");
1840
- }
1841
- }
1842
- }
1843
- }
1844
- } // All others
1845
-
1846
-
1847
- return select(selector.replace(rtrim, "$1"), context, results, seed);
1848
- }
1849
- /**
1850
- * Create key-value caches of limited size
1851
- * @returns {function(string, object)} Returns the Object data after storing it on itself with
1852
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
1853
- * deleting the oldest entry
1854
- */
1855
-
1856
-
1857
- function createCache() {
1858
- var keys = [];
1859
-
1860
- function cache(key, value) {
1861
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
1862
- if (keys.push(key + " ") > Expr.cacheLength) {
1863
- // Only keep the most recent entries
1864
- delete cache[keys.shift()];
1865
- }
1866
-
1867
- return cache[key + " "] = value;
1868
- }
1869
-
1870
- return cache;
1871
- }
1872
- /**
1873
- * Mark a function for special use by Sizzle
1874
- * @param {Function} fn The function to mark
1875
- */
1876
-
1877
-
1878
- function markFunction(fn) {
1879
- fn[expando] = true;
1880
- return fn;
1881
- }
1882
- /**
1883
- * Support testing using an element
1884
- * @param {Function} fn Passed the created element and returns a boolean result
1885
- */
1886
-
1887
-
1888
- function assert(fn) {
1889
- var el = document.createElement("fieldset");
1890
-
1891
- try {
1892
- return !!fn(el);
1893
- } catch (e) {
1894
- return false;
1895
- } finally {
1896
- // Remove from its parent by default
1897
- if (el.parentNode) {
1898
- el.parentNode.removeChild(el);
1899
- } // release memory in IE
1900
-
1901
-
1902
- el = null;
1903
- }
1904
- }
1905
- /**
1906
- * Adds the same handler for all of the specified attrs
1907
- * @param {String} attrs Pipe-separated list of attributes
1908
- * @param {Function} handler The method that will be applied
1909
- */
1910
-
1911
-
1912
- function addHandle(attrs, handler) {
1913
- var arr = attrs.split("|"),
1914
- i = arr.length;
1915
-
1916
- while (i--) {
1917
- Expr.attrHandle[arr[i]] = handler;
1918
- }
1919
- }
1920
- /**
1921
- * Checks document order of two siblings
1922
- * @param {Element} a
1923
- * @param {Element} b
1924
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
1925
- */
1926
-
1927
-
1928
- function siblingCheck(a, b) {
1929
- var cur = b && a,
1930
- diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex; // Use IE sourceIndex if available on both nodes
1931
-
1932
- if (diff) {
1933
- return diff;
1934
- } // Check if b follows a
1935
-
1936
-
1937
- if (cur) {
1938
- while (cur = cur.nextSibling) {
1939
- if (cur === b) {
1940
- return -1;
1941
- }
1942
- }
1943
- }
1944
-
1945
- return a ? 1 : -1;
1946
- }
1947
- /**
1948
- * Returns a function to use in pseudos for input types
1949
- * @param {String} type
1950
- */
1951
-
1952
-
1953
- function createInputPseudo(type) {
1954
- return function (elem) {
1955
- var name = elem.nodeName.toLowerCase();
1956
- return name === "input" && elem.type === type;
1957
- };
1958
- }
1959
- /**
1960
- * Returns a function to use in pseudos for buttons
1961
- * @param {String} type
1962
- */
1963
-
1964
-
1965
- function createButtonPseudo(type) {
1966
- return function (elem) {
1967
- var name = elem.nodeName.toLowerCase();
1968
- return (name === "input" || name === "button") && elem.type === type;
1969
- };
1970
- }
1971
- /**
1972
- * Returns a function to use in pseudos for :enabled/:disabled
1973
- * @param {Boolean} disabled true for :disabled; false for :enabled
1974
- */
1975
-
1976
-
1977
- function createDisabledPseudo(disabled) {
1978
- // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
1979
- return function (elem) {
1980
- // Only certain elements can match :enabled or :disabled
1981
- // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
1982
- // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
1983
- if ("form" in elem) {
1984
- // Check for inherited disabledness on relevant non-disabled elements:
1985
- // * listed form-associated elements in a disabled fieldset
1986
- // https://html.spec.whatwg.org/multipage/forms.html#category-listed
1987
- // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
1988
- // * option elements in a disabled optgroup
1989
- // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
1990
- // All such elements have a "form" property.
1991
- if (elem.parentNode && elem.disabled === false) {
1992
- // Option elements defer to a parent optgroup if present
1993
- if ("label" in elem) {
1994
- if ("label" in elem.parentNode) {
1995
- return elem.parentNode.disabled === disabled;
1996
- } else {
1997
- return elem.disabled === disabled;
1998
- }
1999
- } // Support: IE 6 - 11
2000
- // Use the isDisabled shortcut property to check for disabled fieldset ancestors
2001
-
2002
-
2003
- return elem.isDisabled === disabled || // Where there is no isDisabled, check manually
2004
-
2005
- /* jshint -W018 */
2006
- elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;
2007
- }
2008
-
2009
- return elem.disabled === disabled; // Try to winnow out elements that can't be disabled before trusting the disabled property.
2010
- // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
2011
- // even exist on them, let alone have a boolean value.
2012
- } else if ("label" in elem) {
2013
- return elem.disabled === disabled;
2014
- } // Remaining elements are neither :enabled nor :disabled
2015
-
2016
-
2017
- return false;
2018
- };
2019
- }
2020
- /**
2021
- * Returns a function to use in pseudos for positionals
2022
- * @param {Function} fn
2023
- */
2024
-
2025
-
2026
- function createPositionalPseudo(fn) {
2027
- return markFunction(function (argument) {
2028
- argument = +argument;
2029
- return markFunction(function (seed, matches) {
2030
- var j,
2031
- matchIndexes = fn([], seed.length, argument),
2032
- i = matchIndexes.length; // Match elements found at the specified indexes
2033
-
2034
- while (i--) {
2035
- if (seed[j = matchIndexes[i]]) {
2036
- seed[j] = !(matches[j] = seed[j]);
2037
- }
2038
- }
2039
- });
2040
- });
2041
- }
2042
- /**
2043
- * Checks a node for validity as a Sizzle context
2044
- * @param {Element|Object=} context
2045
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
2046
- */
2047
-
2048
-
2049
- function testContext(context) {
2050
- return context && typeof context.getElementsByTagName !== "undefined" && context;
2051
- } // Expose support vars for convenience
2052
-
2053
-
2054
- support = Sizzle.support = {};
2055
- /**
2056
- * Detects XML nodes
2057
- * @param {Element|Object} elem An element or a document
2058
- * @returns {Boolean} True iff elem is a non-HTML XML node
2059
- */
2060
-
2061
- isXML = Sizzle.isXML = function (elem) {
2062
- var namespace = elem.namespaceURI,
2063
- docElem = (elem.ownerDocument || elem).documentElement; // Support: IE <=8
2064
- // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
2065
- // https://bugs.jquery.com/ticket/4833
2066
-
2067
- return !rhtml.test(namespace || docElem && docElem.nodeName || "HTML");
2068
- };
2069
- /**
2070
- * Sets document-related variables once based on the current document
2071
- * @param {Element|Object} [doc] An element or document object to use to set the document
2072
- * @returns {Object} Returns the current document
2073
- */
2074
-
2075
-
2076
- setDocument = Sizzle.setDocument = function (node) {
2077
- var hasCompare,
2078
- subWindow,
2079
- doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected
2080
- // Support: IE 11+, Edge 17 - 18+
2081
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2082
- // two documents; shallow comparisons work.
2083
- // eslint-disable-next-line eqeqeq
2084
-
2085
- if (doc == document || doc.nodeType !== 9 || !doc.documentElement) {
2086
- return document;
2087
- } // Update global variables
2088
-
2089
-
2090
- document = doc;
2091
- docElem = document.documentElement;
2092
- documentIsHTML = !isXML(document); // Support: IE 9 - 11+, Edge 12 - 18+
2093
- // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
2094
- // Support: IE 11+, Edge 17 - 18+
2095
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2096
- // two documents; shallow comparisons work.
2097
- // eslint-disable-next-line eqeqeq
2098
-
2099
- if (preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {
2100
- // Support: IE 11, Edge
2101
- if (subWindow.addEventListener) {
2102
- subWindow.addEventListener("unload", unloadHandler, false); // Support: IE 9 - 10 only
2103
- } else if (subWindow.attachEvent) {
2104
- subWindow.attachEvent("onunload", unloadHandler);
2105
- }
2106
- } // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
2107
- // Safari 4 - 5 only, Opera <=11.6 - 12.x only
2108
- // IE/Edge & older browsers don't support the :scope pseudo-class.
2109
- // Support: Safari 6.0 only
2110
- // Safari 6.0 supports :scope but it's an alias of :root there.
2111
-
2112
-
2113
- support.scope = assert(function (el) {
2114
- docElem.appendChild(el).appendChild(document.createElement("div"));
2115
- return typeof el.querySelectorAll !== "undefined" && !el.querySelectorAll(":scope fieldset div").length;
2116
- });
2117
- /* Attributes
2118
- ---------------------------------------------------------------------- */
2119
- // Support: IE<8
2120
- // Verify that getAttribute really returns attributes and not properties
2121
- // (excepting IE8 booleans)
2122
-
2123
- support.attributes = assert(function (el) {
2124
- el.className = "i";
2125
- return !el.getAttribute("className");
2126
- });
2127
- /* getElement(s)By*
2128
- ---------------------------------------------------------------------- */
2129
- // Check if getElementsByTagName("*") returns only elements
2130
-
2131
- support.getElementsByTagName = assert(function (el) {
2132
- el.appendChild(document.createComment(""));
2133
- return !el.getElementsByTagName("*").length;
2134
- }); // Support: IE<9
2135
-
2136
- support.getElementsByClassName = rnative.test(document.getElementsByClassName); // Support: IE<10
2137
- // Check if getElementById returns elements by name
2138
- // The broken getElementById methods don't pick up programmatically-set names,
2139
- // so use a roundabout getElementsByName test
2140
-
2141
- support.getById = assert(function (el) {
2142
- docElem.appendChild(el).id = expando;
2143
- return !document.getElementsByName || !document.getElementsByName(expando).length;
2144
- }); // ID filter and find
2145
-
2146
- if (support.getById) {
2147
- Expr.filter["ID"] = function (id) {
2148
- var attrId = id.replace(runescape, funescape);
2149
- return function (elem) {
2150
- return elem.getAttribute("id") === attrId;
2151
- };
2152
- };
2153
-
2154
- Expr.find["ID"] = function (id, context) {
2155
- if (typeof context.getElementById !== "undefined" && documentIsHTML) {
2156
- var elem = context.getElementById(id);
2157
- return elem ? [elem] : [];
2158
- }
2159
- };
2160
- } else {
2161
- Expr.filter["ID"] = function (id) {
2162
- var attrId = id.replace(runescape, funescape);
2163
- return function (elem) {
2164
- var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
2165
- return node && node.value === attrId;
2166
- };
2167
- }; // Support: IE 6 - 7 only
2168
- // getElementById is not reliable as a find shortcut
2169
-
2170
-
2171
- Expr.find["ID"] = function (id, context) {
2172
- if (typeof context.getElementById !== "undefined" && documentIsHTML) {
2173
- var node,
2174
- i,
2175
- elems,
2176
- elem = context.getElementById(id);
2177
-
2178
- if (elem) {
2179
- // Verify the id attribute
2180
- node = elem.getAttributeNode("id");
2181
-
2182
- if (node && node.value === id) {
2183
- return [elem];
2184
- } // Fall back on getElementsByName
2185
-
2186
-
2187
- elems = context.getElementsByName(id);
2188
- i = 0;
2189
-
2190
- while (elem = elems[i++]) {
2191
- node = elem.getAttributeNode("id");
2192
-
2193
- if (node && node.value === id) {
2194
- return [elem];
2195
- }
2196
- }
2197
- }
2198
-
2199
- return [];
2200
- }
2201
- };
2202
- } // Tag
2203
-
2204
-
2205
- Expr.find["TAG"] = support.getElementsByTagName ? function (tag, context) {
2206
- if (typeof context.getElementsByTagName !== "undefined") {
2207
- return context.getElementsByTagName(tag); // DocumentFragment nodes don't have gEBTN
2208
- } else if (support.qsa) {
2209
- return context.querySelectorAll(tag);
2210
- }
2211
- } : function (tag, context) {
2212
- var elem,
2213
- tmp = [],
2214
- i = 0,
2215
- // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
2216
- results = context.getElementsByTagName(tag); // Filter out possible comments
2217
-
2218
- if (tag === "*") {
2219
- while (elem = results[i++]) {
2220
- if (elem.nodeType === 1) {
2221
- tmp.push(elem);
2222
- }
2223
- }
2224
-
2225
- return tmp;
2226
- }
2227
-
2228
- return results;
2229
- }; // Class
2230
-
2231
- Expr.find["CLASS"] = support.getElementsByClassName && function (className, context) {
2232
- if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) {
2233
- return context.getElementsByClassName(className);
2234
- }
2235
- };
2236
- /* QSA/matchesSelector
2237
- ---------------------------------------------------------------------- */
2238
- // QSA and matchesSelector support
2239
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
2240
-
2241
-
2242
- rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21)
2243
- // We allow this because of a bug in IE8/9 that throws an error
2244
- // whenever `document.activeElement` is accessed on an iframe
2245
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
2246
- // See https://bugs.jquery.com/ticket/13378
2247
-
2248
- rbuggyQSA = [];
2249
-
2250
- if (support.qsa = rnative.test(document.querySelectorAll)) {
2251
- // Build QSA regex
2252
- // Regex strategy adopted from Diego Perini
2253
- assert(function (el) {
2254
- var input; // Select is set to empty string on purpose
2255
- // This is to test IE's treatment of not explicitly
2256
- // setting a boolean content attribute,
2257
- // since its presence should be enough
2258
- // https://bugs.jquery.com/ticket/12359
2259
-
2260
- docElem.appendChild(el).innerHTML = "<a id='" + expando + "'></a>" + "<select id='" + expando + "-\r\\' msallowcapture=''>" + "<option selected=''></option></select>"; // Support: IE8, Opera 11-12.16
2261
- // Nothing should be selected when empty strings follow ^= or $= or *=
2262
- // The test attribute must be unknown in Opera but "safe" for WinRT
2263
- // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
2264
-
2265
- if (el.querySelectorAll("[msallowcapture^='']").length) {
2266
- rbuggyQSA.push("[*^$]=" + whitespace + "*(?:''|\"\")");
2267
- } // Support: IE8
2268
- // Boolean attributes and "value" are not treated correctly
2269
-
2270
-
2271
- if (!el.querySelectorAll("[selected]").length) {
2272
- rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")");
2273
- } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
2274
-
2275
-
2276
- if (!el.querySelectorAll("[id~=" + expando + "-]").length) {
2277
- rbuggyQSA.push("~=");
2278
- } // Support: IE 11+, Edge 15 - 18+
2279
- // IE 11/Edge don't find elements on a `[name='']` query in some cases.
2280
- // Adding a temporary attribute to the document before the selection works
2281
- // around the issue.
2282
- // Interestingly, IE 10 & older don't seem to have the issue.
2283
-
2284
-
2285
- input = document.createElement("input");
2286
- input.setAttribute("name", "");
2287
- el.appendChild(input);
2288
-
2289
- if (!el.querySelectorAll("[name='']").length) {
2290
- rbuggyQSA.push("\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + "*(?:''|\"\")");
2291
- } // Webkit/Opera - :checked should return selected option elements
2292
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
2293
- // IE8 throws error here and will not see later tests
2294
-
2295
-
2296
- if (!el.querySelectorAll(":checked").length) {
2297
- rbuggyQSA.push(":checked");
2298
- } // Support: Safari 8+, iOS 8+
2299
- // https://bugs.webkit.org/show_bug.cgi?id=136851
2300
- // In-page `selector#id sibling-combinator selector` fails
2301
-
2302
-
2303
- if (!el.querySelectorAll("a#" + expando + "+*").length) {
2304
- rbuggyQSA.push(".#.+[+~]");
2305
- } // Support: Firefox <=3.6 - 5 only
2306
- // Old Firefox doesn't throw on a badly-escaped identifier.
2307
-
2308
-
2309
- el.querySelectorAll("\\\f");
2310
- rbuggyQSA.push("[\\r\\n\\f]");
2311
- });
2312
- assert(function (el) {
2313
- el.innerHTML = "<a href='' disabled='disabled'></a>" + "<select disabled='disabled'><option/></select>"; // Support: Windows 8 Native Apps
2314
- // The type and name attributes are restricted during .innerHTML assignment
2315
-
2316
- var input = document.createElement("input");
2317
- input.setAttribute("type", "hidden");
2318
- el.appendChild(input).setAttribute("name", "D"); // Support: IE8
2319
- // Enforce case-sensitivity of name attribute
2320
-
2321
- if (el.querySelectorAll("[name=d]").length) {
2322
- rbuggyQSA.push("name" + whitespace + "*[*^$|!~]?=");
2323
- } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
2324
- // IE8 throws error here and will not see later tests
2325
-
2326
-
2327
- if (el.querySelectorAll(":enabled").length !== 2) {
2328
- rbuggyQSA.push(":enabled", ":disabled");
2329
- } // Support: IE9-11+
2330
- // IE's :disabled selector does not pick up the children of disabled fieldsets
2331
-
2332
-
2333
- docElem.appendChild(el).disabled = true;
2334
-
2335
- if (el.querySelectorAll(":disabled").length !== 2) {
2336
- rbuggyQSA.push(":enabled", ":disabled");
2337
- } // Support: Opera 10 - 11 only
2338
- // Opera 10-11 does not throw on post-comma invalid pseudos
2339
-
2340
-
2341
- el.querySelectorAll("*,:x");
2342
- rbuggyQSA.push(",.*:");
2343
- });
2344
- }
2345
-
2346
- if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {
2347
- assert(function (el) {
2348
- // Check to see if it's possible to do matchesSelector
2349
- // on a disconnected node (IE 9)
2350
- support.disconnectedMatch = matches.call(el, "*"); // This should fail with an exception
2351
- // Gecko does not error, returns false instead
2352
-
2353
- matches.call(el, "[s!='']:x");
2354
- rbuggyMatches.push("!=", pseudos);
2355
- });
2356
- }
2357
-
2358
- rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
2359
- rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join("|"));
2360
- /* Contains
2361
- ---------------------------------------------------------------------- */
2362
-
2363
- hasCompare = rnative.test(docElem.compareDocumentPosition); // Element contains another
2364
- // Purposefully self-exclusive
2365
- // As in, an element does not contain itself
2366
-
2367
- contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {
2368
- var adown = a.nodeType === 9 ? a.documentElement : a,
2369
- bup = b && b.parentNode;
2370
- return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));
2371
- } : function (a, b) {
2372
- if (b) {
2373
- while (b = b.parentNode) {
2374
- if (b === a) {
2375
- return true;
2376
- }
2377
- }
2378
- }
2379
-
2380
- return false;
2381
- };
2382
- /* Sorting
2383
- ---------------------------------------------------------------------- */
2384
- // Document order sorting
2385
-
2386
- sortOrder = hasCompare ? function (a, b) {
2387
- // Flag for duplicate removal
2388
- if (a === b) {
2389
- hasDuplicate = true;
2390
- return 0;
2391
- } // Sort on method existence if only one input has compareDocumentPosition
2392
-
2393
-
2394
- var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
2395
-
2396
- if (compare) {
2397
- return compare;
2398
- } // Calculate position if both inputs belong to the same document
2399
- // Support: IE 11+, Edge 17 - 18+
2400
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2401
- // two documents; shallow comparisons work.
2402
- // eslint-disable-next-line eqeqeq
2403
-
2404
-
2405
- compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : // Otherwise we know they are disconnected
2406
- 1; // Disconnected nodes
2407
-
2408
- if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {
2409
- // Choose the first element that is related to our preferred document
2410
- // Support: IE 11+, Edge 17 - 18+
2411
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2412
- // two documents; shallow comparisons work.
2413
- // eslint-disable-next-line eqeqeq
2414
- if (a == document || a.ownerDocument == preferredDoc && contains(preferredDoc, a)) {
2415
- return -1;
2416
- } // Support: IE 11+, Edge 17 - 18+
2417
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2418
- // two documents; shallow comparisons work.
2419
- // eslint-disable-next-line eqeqeq
2420
-
2421
-
2422
- if (b == document || b.ownerDocument == preferredDoc && contains(preferredDoc, b)) {
2423
- return 1;
2424
- } // Maintain original order
2425
-
2426
-
2427
- return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;
2428
- }
2429
-
2430
- return compare & 4 ? -1 : 1;
2431
- } : function (a, b) {
2432
- // Exit early if the nodes are identical
2433
- if (a === b) {
2434
- hasDuplicate = true;
2435
- return 0;
2436
- }
2437
-
2438
- var cur,
2439
- i = 0,
2440
- aup = a.parentNode,
2441
- bup = b.parentNode,
2442
- ap = [a],
2443
- bp = [b]; // Parentless nodes are either documents or disconnected
2444
-
2445
- if (!aup || !bup) {
2446
- // Support: IE 11+, Edge 17 - 18+
2447
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2448
- // two documents; shallow comparisons work.
2449
-
2450
- /* eslint-disable eqeqeq */
2451
- return a == document ? -1 : b == document ? 1 :
2452
- /* eslint-enable eqeqeq */
2453
- aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0; // If the nodes are siblings, we can do a quick check
2454
- } else if (aup === bup) {
2455
- return siblingCheck(a, b);
2456
- } // Otherwise we need full lists of their ancestors for comparison
2457
-
2458
-
2459
- cur = a;
2460
-
2461
- while (cur = cur.parentNode) {
2462
- ap.unshift(cur);
2463
- }
2464
-
2465
- cur = b;
2466
-
2467
- while (cur = cur.parentNode) {
2468
- bp.unshift(cur);
2469
- } // Walk down the tree looking for a discrepancy
2470
-
2471
-
2472
- while (ap[i] === bp[i]) {
2473
- i++;
2474
- }
2475
-
2476
- return i ? // Do a sibling check if the nodes have a common ancestor
2477
- siblingCheck(ap[i], bp[i]) : // Otherwise nodes in our document sort first
2478
- // Support: IE 11+, Edge 17 - 18+
2479
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2480
- // two documents; shallow comparisons work.
2481
-
2482
- /* eslint-disable eqeqeq */
2483
- ap[i] == preferredDoc ? -1 : bp[i] == preferredDoc ? 1 :
2484
- /* eslint-enable eqeqeq */
2485
- 0;
2486
- };
2487
- return document;
2488
- };
2489
-
2490
- Sizzle.matches = function (expr, elements) {
2491
- return Sizzle(expr, null, null, elements);
2492
- };
2493
-
2494
- Sizzle.matchesSelector = function (elem, expr) {
2495
- setDocument(elem);
2496
-
2497
- if (support.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + " "] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {
2498
- try {
2499
- var ret = matches.call(elem, expr); // IE 9's matchesSelector returns false on disconnected nodes
2500
-
2501
- if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document
2502
- // fragment in IE 9
2503
- elem.document && elem.document.nodeType !== 11) {
2504
- return ret;
2505
- }
2506
- } catch (e) {
2507
- nonnativeSelectorCache(expr, true);
2508
- }
2509
- }
2510
-
2511
- return Sizzle(expr, document, null, [elem]).length > 0;
2512
- };
2513
-
2514
- Sizzle.contains = function (context, elem) {
2515
- // Set document vars if needed
2516
- // Support: IE 11+, Edge 17 - 18+
2517
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2518
- // two documents; shallow comparisons work.
2519
- // eslint-disable-next-line eqeqeq
2520
- if ((context.ownerDocument || context) != document) {
2521
- setDocument(context);
2522
- }
2523
-
2524
- return contains(context, elem);
2525
- };
2526
-
2527
- Sizzle.attr = function (elem, name) {
2528
- // Set document vars if needed
2529
- // Support: IE 11+, Edge 17 - 18+
2530
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
2531
- // two documents; shallow comparisons work.
2532
- // eslint-disable-next-line eqeqeq
2533
- if ((elem.ownerDocument || elem) != document) {
2534
- setDocument(elem);
2535
- }
2536
-
2537
- var fn = Expr.attrHandle[name.toLowerCase()],
2538
- // Don't get fooled by Object.prototype properties (jQuery #13807)
2539
- val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;
2540
- return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;
2541
- };
2542
-
2543
- Sizzle.escape = function (sel) {
2544
- return (sel + "").replace(rcssescape, fcssescape);
2545
- };
2546
-
2547
- Sizzle.error = function (msg) {
2548
- throw new Error("Syntax error, unrecognized expression: " + msg);
2549
- };
2550
- /**
2551
- * Document sorting and removing duplicates
2552
- * @param {ArrayLike} results
2553
- */
2554
-
2555
-
2556
- Sizzle.uniqueSort = function (results) {
2557
- var elem,
2558
- duplicates = [],
2559
- j = 0,
2560
- i = 0; // Unless we *know* we can detect duplicates, assume their presence
2561
-
2562
- hasDuplicate = !support.detectDuplicates;
2563
- sortInput = !support.sortStable && results.slice(0);
2564
- results.sort(sortOrder);
2565
-
2566
- if (hasDuplicate) {
2567
- while (elem = results[i++]) {
2568
- if (elem === results[i]) {
2569
- j = duplicates.push(i);
2570
- }
2571
- }
2572
-
2573
- while (j--) {
2574
- results.splice(duplicates[j], 1);
2575
- }
2576
- } // Clear input after sorting to release objects
2577
- // See https://github.com/jquery/sizzle/pull/225
2578
-
2579
-
2580
- sortInput = null;
2581
- return results;
2582
- };
2583
- /**
2584
- * Utility function for retrieving the text value of an array of DOM nodes
2585
- * @param {Array|Element} elem
2586
- */
2587
-
2588
-
2589
- getText = Sizzle.getText = function (elem) {
2590
- var node,
2591
- ret = "",
2592
- i = 0,
2593
- nodeType = elem.nodeType;
2594
-
2595
- if (!nodeType) {
2596
- // If no nodeType, this is expected to be an array
2597
- while (node = elem[i++]) {
2598
- // Do not traverse comment nodes
2599
- ret += getText(node);
2600
- }
2601
- } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
2602
- // Use textContent for elements
2603
- // innerText usage removed for consistency of new lines (jQuery #11153)
2604
- if (typeof elem.textContent === "string") {
2605
- return elem.textContent;
2606
- } else {
2607
- // Traverse its children
2608
- for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
2609
- ret += getText(elem);
2610
- }
2611
- }
2612
- } else if (nodeType === 3 || nodeType === 4) {
2613
- return elem.nodeValue;
2614
- } // Do not include comment or processing instruction nodes
2615
-
2616
-
2617
- return ret;
2618
- };
2619
-
2620
- Expr = Sizzle.selectors = {
2621
- // Can be adjusted by the user
2622
- cacheLength: 50,
2623
- createPseudo: markFunction,
2624
- match: matchExpr,
2625
- attrHandle: {},
2626
- find: {},
2627
- relative: {
2628
- ">": {
2629
- dir: "parentNode",
2630
- first: true
2631
- },
2632
- " ": {
2633
- dir: "parentNode"
2634
- },
2635
- "+": {
2636
- dir: "previousSibling",
2637
- first: true
2638
- },
2639
- "~": {
2640
- dir: "previousSibling"
2641
- }
2642
- },
2643
- preFilter: {
2644
- "ATTR": function ATTR(match) {
2645
- match[1] = match[1].replace(runescape, funescape); // Move the given value to match[3] whether quoted or unquoted
2646
-
2647
- match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape);
2648
-
2649
- if (match[2] === "~=") {
2650
- match[3] = " " + match[3] + " ";
2651
- }
2652
-
2653
- return match.slice(0, 4);
2654
- },
2655
- "CHILD": function CHILD(match) {
2656
- /* matches from matchExpr["CHILD"]
2657
- 1 type (only|nth|...)
2658
- 2 what (child|of-type)
2659
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
2660
- 4 xn-component of xn+y argument ([+-]?\d*n|)
2661
- 5 sign of xn-component
2662
- 6 x of xn-component
2663
- 7 sign of y-component
2664
- 8 y of y-component
2665
- */
2666
- match[1] = match[1].toLowerCase();
2667
-
2668
- if (match[1].slice(0, 3) === "nth") {
2669
- // nth-* requires argument
2670
- if (!match[3]) {
2671
- Sizzle.error(match[0]);
2672
- } // numeric x and y parameters for Expr.filter.CHILD
2673
- // remember that false/true cast respectively to 0/1
2674
-
2675
-
2676
- match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd"));
2677
- match[5] = +(match[7] + match[8] || match[3] === "odd"); // other types prohibit arguments
2678
- } else if (match[3]) {
2679
- Sizzle.error(match[0]);
2680
- }
2681
-
2682
- return match;
2683
- },
2684
- "PSEUDO": function PSEUDO(match) {
2685
- var excess,
2686
- unquoted = !match[6] && match[2];
2687
-
2688
- if (matchExpr["CHILD"].test(match[0])) {
2689
- return null;
2690
- } // Accept quoted arguments as-is
2691
-
2692
-
2693
- if (match[3]) {
2694
- match[2] = match[4] || match[5] || ""; // Strip excess characters from unquoted arguments
2695
- } else if (unquoted && rpseudo.test(unquoted) && ( // Get excess from tokenize (recursively)
2696
- excess = tokenize(unquoted, true)) && ( // advance to the next closing parenthesis
2697
- excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
2698
- // excess is a negative index
2699
- match[0] = match[0].slice(0, excess);
2700
- match[2] = unquoted.slice(0, excess);
2701
- } // Return only captures needed by the pseudo filter method (type and argument)
2702
-
2703
-
2704
- return match.slice(0, 3);
2705
- }
2706
- },
2707
- filter: {
2708
- "TAG": function TAG(nodeNameSelector) {
2709
- var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();
2710
- return nodeNameSelector === "*" ? function () {
2711
- return true;
2712
- } : function (elem) {
2713
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
2714
- };
2715
- },
2716
- "CLASS": function CLASS(className) {
2717
- var pattern = classCache[className + " "];
2718
- return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(className, function (elem) {
2719
- return pattern.test(typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "");
2720
- });
2721
- },
2722
- "ATTR": function ATTR(name, operator, check) {
2723
- return function (elem) {
2724
- var result = Sizzle.attr(elem, name);
2725
-
2726
- if (result == null) {
2727
- return operator === "!=";
2728
- }
2729
-
2730
- if (!operator) {
2731
- return true;
2732
- }
2733
-
2734
- result += "";
2735
- /* eslint-disable max-len */
2736
-
2737
- return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf(check) === 0 : operator === "*=" ? check && result.indexOf(check) > -1 : operator === "$=" ? check && result.slice(-check.length) === check : operator === "~=" ? (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1 : operator === "|=" ? result === check || result.slice(0, check.length + 1) === check + "-" : false;
2738
- /* eslint-enable max-len */
2739
- };
2740
- },
2741
- "CHILD": function CHILD(type, what, _argument, first, last) {
2742
- var simple = type.slice(0, 3) !== "nth",
2743
- forward = type.slice(-4) !== "last",
2744
- ofType = what === "of-type";
2745
- return first === 1 && last === 0 ? // Shortcut for :nth-*(n)
2746
- function (elem) {
2747
- return !!elem.parentNode;
2748
- } : function (elem, _context, xml) {
2749
- var cache,
2750
- uniqueCache,
2751
- outerCache,
2752
- node,
2753
- nodeIndex,
2754
- start,
2755
- dir = simple !== forward ? "nextSibling" : "previousSibling",
2756
- parent = elem.parentNode,
2757
- name = ofType && elem.nodeName.toLowerCase(),
2758
- useCache = !xml && !ofType,
2759
- diff = false;
2760
-
2761
- if (parent) {
2762
- // :(first|last|only)-(child|of-type)
2763
- if (simple) {
2764
- while (dir) {
2765
- node = elem;
2766
-
2767
- while (node = node[dir]) {
2768
- if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {
2769
- return false;
2770
- }
2771
- } // Reverse direction for :only-* (if we haven't yet done so)
2772
-
2773
-
2774
- start = dir = type === "only" && !start && "nextSibling";
2775
- }
2776
-
2777
- return true;
2778
- }
2779
-
2780
- start = [forward ? parent.firstChild : parent.lastChild]; // non-xml :nth-child(...) stores cache data on `parent`
2781
-
2782
- if (forward && useCache) {
2783
- // Seek `elem` from a previously-cached index
2784
- // ...in a gzip-friendly way
2785
- node = parent;
2786
- outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only
2787
- // Defend against cloned attroperties (jQuery gh-1709)
2788
-
2789
- uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
2790
- cache = uniqueCache[type] || [];
2791
- nodeIndex = cache[0] === dirruns && cache[1];
2792
- diff = nodeIndex && cache[2];
2793
- node = nodeIndex && parent.childNodes[nodeIndex];
2794
-
2795
- while (node = ++nodeIndex && node && node[dir] || ( // Fallback to seeking `elem` from the start
2796
- diff = nodeIndex = 0) || start.pop()) {
2797
- // When found, cache indexes on `parent` and break
2798
- if (node.nodeType === 1 && ++diff && node === elem) {
2799
- uniqueCache[type] = [dirruns, nodeIndex, diff];
2800
- break;
2801
- }
2802
- }
2803
- } else {
2804
- // Use previously-cached element index if available
2805
- if (useCache) {
2806
- // ...in a gzip-friendly way
2807
- node = elem;
2808
- outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only
2809
- // Defend against cloned attroperties (jQuery gh-1709)
2810
-
2811
- uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
2812
- cache = uniqueCache[type] || [];
2813
- nodeIndex = cache[0] === dirruns && cache[1];
2814
- diff = nodeIndex;
2815
- } // xml :nth-child(...)
2816
- // or :nth-last-child(...) or :nth(-last)?-of-type(...)
2817
-
2818
-
2819
- if (diff === false) {
2820
- // Use the same loop as above to seek `elem` from the start
2821
- while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {
2822
- if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {
2823
- // Cache the index of each encountered element
2824
- if (useCache) {
2825
- outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only
2826
- // Defend against cloned attroperties (jQuery gh-1709)
2827
-
2828
- uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
2829
- uniqueCache[type] = [dirruns, diff];
2830
- }
2831
-
2832
- if (node === elem) {
2833
- break;
2834
- }
2835
- }
2836
- }
2837
- }
2838
- } // Incorporate the offset, then check against cycle size
2839
-
2840
-
2841
- diff -= last;
2842
- return diff === first || diff % first === 0 && diff / first >= 0;
2843
- }
2844
- };
2845
- },
2846
- "PSEUDO": function PSEUDO(pseudo, argument) {
2847
- // pseudo-class names are case-insensitive
2848
- // http://www.w3.org/TR/selectors/#pseudo-classes
2849
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
2850
- // Remember that setFilters inherits from pseudos
2851
- var args,
2852
- fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error("unsupported pseudo: " + pseudo); // The user may use createPseudo to indicate that
2853
- // arguments are needed to create the filter function
2854
- // just as Sizzle does
2855
-
2856
- if (fn[expando]) {
2857
- return fn(argument);
2858
- } // But maintain support for old signatures
2859
-
2860
-
2861
- if (fn.length > 1) {
2862
- args = [pseudo, pseudo, "", argument];
2863
- return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {
2864
- var idx,
2865
- matched = fn(seed, argument),
2866
- i = matched.length;
2867
-
2868
- while (i--) {
2869
- idx = indexOf(seed, matched[i]);
2870
- seed[idx] = !(matches[idx] = matched[i]);
2871
- }
2872
- }) : function (elem) {
2873
- return fn(elem, 0, args);
2874
- };
2875
- }
2876
-
2877
- return fn;
2878
- }
2879
- },
2880
- pseudos: {
2881
- // Potentially complex pseudos
2882
- "not": markFunction(function (selector) {
2883
- // Trim the selector passed to compile
2884
- // to avoid treating leading and trailing
2885
- // spaces as combinators
2886
- var input = [],
2887
- results = [],
2888
- matcher = compile(selector.replace(rtrim, "$1"));
2889
- return matcher[expando] ? markFunction(function (seed, matches, _context, xml) {
2890
- var elem,
2891
- unmatched = matcher(seed, null, xml, []),
2892
- i = seed.length; // Match elements unmatched by `matcher`
2893
-
2894
- while (i--) {
2895
- if (elem = unmatched[i]) {
2896
- seed[i] = !(matches[i] = elem);
2897
- }
2898
- }
2899
- }) : function (elem, _context, xml) {
2900
- input[0] = elem;
2901
- matcher(input, null, xml, results); // Don't keep the element (issue #299)
2902
-
2903
- input[0] = null;
2904
- return !results.pop();
2905
- };
2906
- }),
2907
- "has": markFunction(function (selector) {
2908
- return function (elem) {
2909
- return Sizzle(selector, elem).length > 0;
2910
- };
2911
- }),
2912
- "contains": markFunction(function (text) {
2913
- text = text.replace(runescape, funescape);
2914
- return function (elem) {
2915
- return (elem.textContent || getText(elem)).indexOf(text) > -1;
2916
- };
2917
- }),
2918
- // "Whether an element is represented by a :lang() selector
2919
- // is based solely on the element's language value
2920
- // being equal to the identifier C,
2921
- // or beginning with the identifier C immediately followed by "-".
2922
- // The matching of C against the element's language value is performed case-insensitively.
2923
- // The identifier C does not have to be a valid language name."
2924
- // http://www.w3.org/TR/selectors/#lang-pseudo
2925
- "lang": markFunction(function (lang) {
2926
- // lang value must be a valid identifier
2927
- if (!ridentifier.test(lang || "")) {
2928
- Sizzle.error("unsupported lang: " + lang);
2929
- }
2930
-
2931
- lang = lang.replace(runescape, funescape).toLowerCase();
2932
- return function (elem) {
2933
- var elemLang;
2934
-
2935
- do {
2936
- if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) {
2937
- elemLang = elemLang.toLowerCase();
2938
- return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
2939
- }
2940
- } while ((elem = elem.parentNode) && elem.nodeType === 1);
2941
-
2942
- return false;
2943
- };
2944
- }),
2945
- // Miscellaneous
2946
- "target": function target(elem) {
2947
- var hash = window.location && window.location.hash;
2948
- return hash && hash.slice(1) === elem.id;
2949
- },
2950
- "root": function root(elem) {
2951
- return elem === docElem;
2952
- },
2953
- "focus": function focus(elem) {
2954
- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
2955
- },
2956
- // Boolean properties
2957
- "enabled": createDisabledPseudo(false),
2958
- "disabled": createDisabledPseudo(true),
2959
- "checked": function checked(elem) {
2960
- // In CSS3, :checked should return both checked and selected elements
2961
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
2962
- var nodeName = elem.nodeName.toLowerCase();
2963
- return nodeName === "input" && !!elem.checked || nodeName === "option" && !!elem.selected;
2964
- },
2965
- "selected": function selected(elem) {
2966
- // Accessing this property makes selected-by-default
2967
- // options in Safari work properly
2968
- if (elem.parentNode) {
2969
- // eslint-disable-next-line no-unused-expressions
2970
- elem.parentNode.selectedIndex;
2971
- }
2972
-
2973
- return elem.selected === true;
2974
- },
2975
- // Contents
2976
- "empty": function empty(elem) {
2977
- // http://www.w3.org/TR/selectors/#empty-pseudo
2978
- // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
2979
- // but not by others (comment: 8; processing instruction: 7; etc.)
2980
- // nodeType < 6 works because attributes (2) do not appear as children
2981
- for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
2982
- if (elem.nodeType < 6) {
2983
- return false;
2984
- }
2985
- }
2986
-
2987
- return true;
2988
- },
2989
- "parent": function parent(elem) {
2990
- return !Expr.pseudos["empty"](elem);
2991
- },
2992
- // Element/input types
2993
- "header": function header(elem) {
2994
- return rheader.test(elem.nodeName);
2995
- },
2996
- "input": function input(elem) {
2997
- return rinputs.test(elem.nodeName);
2998
- },
2999
- "button": function button(elem) {
3000
- var name = elem.nodeName.toLowerCase();
3001
- return name === "input" && elem.type === "button" || name === "button";
3002
- },
3003
- "text": function text(elem) {
3004
- var attr;
3005
- return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && ( // Support: IE<8
3006
- // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
3007
- (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text");
3008
- },
3009
- // Position-in-collection
3010
- "first": createPositionalPseudo(function () {
3011
- return [0];
3012
- }),
3013
- "last": createPositionalPseudo(function (_matchIndexes, length) {
3014
- return [length - 1];
3015
- }),
3016
- "eq": createPositionalPseudo(function (_matchIndexes, length, argument) {
3017
- return [argument < 0 ? argument + length : argument];
3018
- }),
3019
- "even": createPositionalPseudo(function (matchIndexes, length) {
3020
- var i = 0;
3021
-
3022
- for (; i < length; i += 2) {
3023
- matchIndexes.push(i);
3024
- }
3025
-
3026
- return matchIndexes;
3027
- }),
3028
- "odd": createPositionalPseudo(function (matchIndexes, length) {
3029
- var i = 1;
3030
-
3031
- for (; i < length; i += 2) {
3032
- matchIndexes.push(i);
3033
- }
3034
-
3035
- return matchIndexes;
3036
- }),
3037
- "lt": createPositionalPseudo(function (matchIndexes, length, argument) {
3038
- var i = argument < 0 ? argument + length : argument > length ? length : argument;
3039
-
3040
- for (; --i >= 0;) {
3041
- matchIndexes.push(i);
3042
- }
3043
-
3044
- return matchIndexes;
3045
- }),
3046
- "gt": createPositionalPseudo(function (matchIndexes, length, argument) {
3047
- var i = argument < 0 ? argument + length : argument;
3048
-
3049
- for (; ++i < length;) {
3050
- matchIndexes.push(i);
3051
- }
3052
-
3053
- return matchIndexes;
3054
- })
3055
- }
3056
- };
3057
- Expr.pseudos["nth"] = Expr.pseudos["eq"]; // Add button/input type pseudos
3058
-
3059
- for (i in {
3060
- radio: true,
3061
- checkbox: true,
3062
- file: true,
3063
- password: true,
3064
- image: true
3065
- }) {
3066
- Expr.pseudos[i] = createInputPseudo(i);
3067
- }
3068
-
3069
- for (i in {
3070
- submit: true,
3071
- reset: true
3072
- }) {
3073
- Expr.pseudos[i] = createButtonPseudo(i);
3074
- } // Easy API for creating new setFilters
3075
-
3076
-
3077
- function setFilters() {}
3078
-
3079
- setFilters.prototype = Expr.filters = Expr.pseudos;
3080
- Expr.setFilters = new setFilters();
3081
-
3082
- tokenize = Sizzle.tokenize = function (selector, parseOnly) {
3083
- var matched,
3084
- match,
3085
- tokens,
3086
- type,
3087
- soFar,
3088
- groups,
3089
- preFilters,
3090
- cached = tokenCache[selector + " "];
3091
-
3092
- if (cached) {
3093
- return parseOnly ? 0 : cached.slice(0);
3094
- }
3095
-
3096
- soFar = selector;
3097
- groups = [];
3098
- preFilters = Expr.preFilter;
3099
-
3100
- while (soFar) {
3101
- // Comma and first run
3102
- if (!matched || (match = rcomma.exec(soFar))) {
3103
- if (match) {
3104
- // Don't consume trailing commas as valid
3105
- soFar = soFar.slice(match[0].length) || soFar;
3106
- }
3107
-
3108
- groups.push(tokens = []);
3109
- }
3110
-
3111
- matched = false; // Combinators
3112
-
3113
- if (match = rcombinators.exec(soFar)) {
3114
- matched = match.shift();
3115
- tokens.push({
3116
- value: matched,
3117
- // Cast descendant combinators to space
3118
- type: match[0].replace(rtrim, " ")
3119
- });
3120
- soFar = soFar.slice(matched.length);
3121
- } // Filters
3122
-
3123
-
3124
- for (type in Expr.filter) {
3125
- if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {
3126
- matched = match.shift();
3127
- tokens.push({
3128
- value: matched,
3129
- type: type,
3130
- matches: match
3131
- });
3132
- soFar = soFar.slice(matched.length);
3133
- }
3134
- }
3135
-
3136
- if (!matched) {
3137
- break;
3138
- }
3139
- } // Return the length of the invalid excess
3140
- // if we're just parsing
3141
- // Otherwise, throw an error or return tokens
3142
-
3143
-
3144
- return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : // Cache the tokens
3145
- tokenCache(selector, groups).slice(0);
3146
- };
3147
-
3148
- function toSelector(tokens) {
3149
- var i = 0,
3150
- len = tokens.length,
3151
- selector = "";
3152
-
3153
- for (; i < len; i++) {
3154
- selector += tokens[i].value;
3155
- }
3156
-
3157
- return selector;
3158
- }
3159
-
3160
- function addCombinator(matcher, combinator, base) {
3161
- var dir = combinator.dir,
3162
- skip = combinator.next,
3163
- key = skip || dir,
3164
- checkNonElements = base && key === "parentNode",
3165
- doneName = done++;
3166
- return combinator.first ? // Check against closest ancestor/preceding element
3167
- function (elem, context, xml) {
3168
- while (elem = elem[dir]) {
3169
- if (elem.nodeType === 1 || checkNonElements) {
3170
- return matcher(elem, context, xml);
3171
- }
3172
- }
3173
-
3174
- return false;
3175
- } : // Check against all ancestor/preceding elements
3176
- function (elem, context, xml) {
3177
- var oldCache,
3178
- uniqueCache,
3179
- outerCache,
3180
- newCache = [dirruns, doneName]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
3181
-
3182
- if (xml) {
3183
- while (elem = elem[dir]) {
3184
- if (elem.nodeType === 1 || checkNonElements) {
3185
- if (matcher(elem, context, xml)) {
3186
- return true;
3187
- }
3188
- }
3189
- }
3190
- } else {
3191
- while (elem = elem[dir]) {
3192
- if (elem.nodeType === 1 || checkNonElements) {
3193
- outerCache = elem[expando] || (elem[expando] = {}); // Support: IE <9 only
3194
- // Defend against cloned attroperties (jQuery gh-1709)
3195
-
3196
- uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});
3197
-
3198
- if (skip && skip === elem.nodeName.toLowerCase()) {
3199
- elem = elem[dir] || elem;
3200
- } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {
3201
- // Assign to newCache so results back-propagate to previous elements
3202
- return newCache[2] = oldCache[2];
3203
- } else {
3204
- // Reuse newcache so results back-propagate to previous elements
3205
- uniqueCache[key] = newCache; // A match means we're done; a fail means we have to keep checking
3206
-
3207
- if (newCache[2] = matcher(elem, context, xml)) {
3208
- return true;
3209
- }
3210
- }
3211
- }
3212
- }
3213
- }
3214
-
3215
- return false;
3216
- };
3217
- }
3218
-
3219
- function elementMatcher(matchers) {
3220
- return matchers.length > 1 ? function (elem, context, xml) {
3221
- var i = matchers.length;
3222
-
3223
- while (i--) {
3224
- if (!matchers[i](elem, context, xml)) {
3225
- return false;
3226
- }
3227
- }
3228
-
3229
- return true;
3230
- } : matchers[0];
3231
- }
3232
-
3233
- function multipleContexts(selector, contexts, results) {
3234
- var i = 0,
3235
- len = contexts.length;
3236
-
3237
- for (; i < len; i++) {
3238
- Sizzle(selector, contexts[i], results);
3239
- }
3240
-
3241
- return results;
3242
- }
3243
-
3244
- function condense(unmatched, map, filter, context, xml) {
3245
- var elem,
3246
- newUnmatched = [],
3247
- i = 0,
3248
- len = unmatched.length,
3249
- mapped = map != null;
3250
-
3251
- for (; i < len; i++) {
3252
- if (elem = unmatched[i]) {
3253
- if (!filter || filter(elem, context, xml)) {
3254
- newUnmatched.push(elem);
3255
-
3256
- if (mapped) {
3257
- map.push(i);
3258
- }
3259
- }
3260
- }
3261
- }
3262
-
3263
- return newUnmatched;
3264
- }
3265
-
3266
- function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
3267
- if (postFilter && !postFilter[expando]) {
3268
- postFilter = setMatcher(postFilter);
3269
- }
3270
-
3271
- if (postFinder && !postFinder[expando]) {
3272
- postFinder = setMatcher(postFinder, postSelector);
3273
- }
3274
-
3275
- return markFunction(function (seed, results, context, xml) {
3276
- var temp,
3277
- i,
3278
- elem,
3279
- preMap = [],
3280
- postMap = [],
3281
- preexisting = results.length,
3282
- // Get initial elements from seed or context
3283
- elems = seed || multipleContexts(selector || "*", context.nodeType ? [context] : context, []),
3284
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
3285
- matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems,
3286
- matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
3287
- postFinder || (seed ? preFilter : preexisting || postFilter) ? // ...intermediate processing is necessary
3288
- [] : // ...otherwise use results directly
3289
- results : matcherIn; // Find primary matches
3290
-
3291
- if (matcher) {
3292
- matcher(matcherIn, matcherOut, context, xml);
3293
- } // Apply postFilter
3294
-
3295
-
3296
- if (postFilter) {
3297
- temp = condense(matcherOut, postMap);
3298
- postFilter(temp, [], context, xml); // Un-match failing elements by moving them back to matcherIn
3299
-
3300
- i = temp.length;
3301
-
3302
- while (i--) {
3303
- if (elem = temp[i]) {
3304
- matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);
3305
- }
3306
- }
3307
- }
3308
-
3309
- if (seed) {
3310
- if (postFinder || preFilter) {
3311
- if (postFinder) {
3312
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
3313
- temp = [];
3314
- i = matcherOut.length;
3315
-
3316
- while (i--) {
3317
- if (elem = matcherOut[i]) {
3318
- // Restore matcherIn since elem is not yet a final match
3319
- temp.push(matcherIn[i] = elem);
3320
- }
3321
- }
3322
-
3323
- postFinder(null, matcherOut = [], temp, xml);
3324
- } // Move matched elements from seed to results to keep them synchronized
3325
-
3326
-
3327
- i = matcherOut.length;
3328
-
3329
- while (i--) {
3330
- if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {
3331
- seed[temp] = !(results[temp] = elem);
3332
- }
3333
- }
3334
- } // Add elements to results, through postFinder if defined
3335
-
3336
- } else {
3337
- matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);
3338
-
3339
- if (postFinder) {
3340
- postFinder(null, results, matcherOut, xml);
3341
- } else {
3342
- push.apply(results, matcherOut);
3343
- }
3344
- }
3345
- });
3346
- }
3347
-
3348
- function matcherFromTokens(tokens) {
3349
- var checkContext,
3350
- matcher,
3351
- j,
3352
- len = tokens.length,
3353
- leadingRelative = Expr.relative[tokens[0].type],
3354
- implicitRelative = leadingRelative || Expr.relative[" "],
3355
- i = leadingRelative ? 1 : 0,
3356
- // The foundational matcher ensures that elements are reachable from top-level context(s)
3357
- matchContext = addCombinator(function (elem) {
3358
- return elem === checkContext;
3359
- }, implicitRelative, true),
3360
- matchAnyContext = addCombinator(function (elem) {
3361
- return indexOf(checkContext, elem) > -1;
3362
- }, implicitRelative, true),
3363
- matchers = [function (elem, context, xml) {
3364
- var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); // Avoid hanging onto element (issue #299)
3365
-
3366
- checkContext = null;
3367
- return ret;
3368
- }];
3369
-
3370
- for (; i < len; i++) {
3371
- if (matcher = Expr.relative[tokens[i].type]) {
3372
- matchers = [addCombinator(elementMatcher(matchers), matcher)];
3373
- } else {
3374
- matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); // Return special upon seeing a positional matcher
3375
-
3376
- if (matcher[expando]) {
3377
- // Find the next relative operator (if any) for proper handling
3378
- j = ++i;
3379
-
3380
- for (; j < len; j++) {
3381
- if (Expr.relative[tokens[j].type]) {
3382
- break;
3383
- }
3384
- }
3385
-
3386
- return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*`
3387
- tokens.slice(0, i - 1).concat({
3388
- value: tokens[i - 2].type === " " ? "*" : ""
3389
- })).replace(rtrim, "$1"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));
3390
- }
3391
-
3392
- matchers.push(matcher);
3393
- }
3394
- }
3395
-
3396
- return elementMatcher(matchers);
3397
- }
3398
-
3399
- function matcherFromGroupMatchers(elementMatchers, setMatchers) {
3400
- var bySet = setMatchers.length > 0,
3401
- byElement = elementMatchers.length > 0,
3402
- superMatcher = function superMatcher(seed, context, xml, results, outermost) {
3403
- var elem,
3404
- j,
3405
- matcher,
3406
- matchedCount = 0,
3407
- i = "0",
3408
- unmatched = seed && [],
3409
- setMatched = [],
3410
- contextBackup = outermostContext,
3411
- // We must always have either seed elements or outermost context
3412
- elems = seed || byElement && Expr.find["TAG"]("*", outermost),
3413
- // Use integer dirruns iff this is the outermost matcher
3414
- dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1,
3415
- len = elems.length;
3416
-
3417
- if (outermost) {
3418
- // Support: IE 11+, Edge 17 - 18+
3419
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3420
- // two documents; shallow comparisons work.
3421
- // eslint-disable-next-line eqeqeq
3422
- outermostContext = context == document || context || outermost;
3423
- } // Add elements passing elementMatchers directly to results
3424
- // Support: IE<9, Safari
3425
- // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
3426
-
3427
-
3428
- for (; i !== len && (elem = elems[i]) != null; i++) {
3429
- if (byElement && elem) {
3430
- j = 0; // Support: IE 11+, Edge 17 - 18+
3431
- // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
3432
- // two documents; shallow comparisons work.
3433
- // eslint-disable-next-line eqeqeq
3434
-
3435
- if (!context && elem.ownerDocument != document) {
3436
- setDocument(elem);
3437
- xml = !documentIsHTML;
3438
- }
3439
-
3440
- while (matcher = elementMatchers[j++]) {
3441
- if (matcher(elem, context || document, xml)) {
3442
- results.push(elem);
3443
- break;
3444
- }
3445
- }
3446
-
3447
- if (outermost) {
3448
- dirruns = dirrunsUnique;
3449
- }
3450
- } // Track unmatched elements for set filters
3451
-
3452
-
3453
- if (bySet) {
3454
- // They will have gone through all possible matchers
3455
- if (elem = !matcher && elem) {
3456
- matchedCount--;
3457
- } // Lengthen the array for every element, matched or not
3458
-
3459
-
3460
- if (seed) {
3461
- unmatched.push(elem);
3462
- }
3463
- }
3464
- } // `i` is now the count of elements visited above, and adding it to `matchedCount`
3465
- // makes the latter nonnegative.
3466
-
3467
-
3468
- matchedCount += i; // Apply set filters to unmatched elements
3469
- // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
3470
- // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
3471
- // no element matchers and no seed.
3472
- // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
3473
- // case, which will result in a "00" `matchedCount` that differs from `i` but is also
3474
- // numerically zero.
3475
-
3476
- if (bySet && i !== matchedCount) {
3477
- j = 0;
3478
-
3479
- while (matcher = setMatchers[j++]) {
3480
- matcher(unmatched, setMatched, context, xml);
3481
- }
3482
-
3483
- if (seed) {
3484
- // Reintegrate element matches to eliminate the need for sorting
3485
- if (matchedCount > 0) {
3486
- while (i--) {
3487
- if (!(unmatched[i] || setMatched[i])) {
3488
- setMatched[i] = pop.call(results);
3489
- }
3490
- }
3491
- } // Discard index placeholder values to get only actual matches
3492
-
3493
-
3494
- setMatched = condense(setMatched);
3495
- } // Add matches to results
3496
-
3497
-
3498
- push.apply(results, setMatched); // Seedless set matches succeeding multiple successful matchers stipulate sorting
3499
-
3500
- if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {
3501
- Sizzle.uniqueSort(results);
3502
- }
3503
- } // Override manipulation of globals by nested matchers
3504
-
3505
-
3506
- if (outermost) {
3507
- dirruns = dirrunsUnique;
3508
- outermostContext = contextBackup;
3509
- }
3510
-
3511
- return unmatched;
3512
- };
3513
-
3514
- return bySet ? markFunction(superMatcher) : superMatcher;
3515
- }
3516
-
3517
- compile = Sizzle.compile = function (selector, match
3518
- /* Internal Use Only */
3519
- ) {
3520
- var i,
3521
- setMatchers = [],
3522
- elementMatchers = [],
3523
- cached = compilerCache[selector + " "];
3524
-
3525
- if (!cached) {
3526
- // Generate a function of recursive functions that can be used to check each element
3527
- if (!match) {
3528
- match = tokenize(selector);
3529
- }
3530
-
3531
- i = match.length;
3532
-
3533
- while (i--) {
3534
- cached = matcherFromTokens(match[i]);
3535
-
3536
- if (cached[expando]) {
3537
- setMatchers.push(cached);
3538
- } else {
3539
- elementMatchers.push(cached);
3540
- }
3541
- } // Cache the compiled function
3542
-
3543
-
3544
- cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); // Save selector and tokenization
3545
-
3546
- cached.selector = selector;
3547
- }
3548
-
3549
- return cached;
3550
- };
3551
- /**
3552
- * A low-level selection function that works with Sizzle's compiled
3553
- * selector functions
3554
- * @param {String|Function} selector A selector or a pre-compiled
3555
- * selector function built with Sizzle.compile
3556
- * @param {Element} context
3557
- * @param {Array} [results]
3558
- * @param {Array} [seed] A set of elements to match against
3559
- */
3560
-
3561
-
3562
- select = Sizzle.select = function (selector, context, results, seed) {
3563
- var i,
3564
- tokens,
3565
- token,
3566
- type,
3567
- find,
3568
- compiled = typeof selector === "function" && selector,
3569
- match = !seed && tokenize(selector = compiled.selector || selector);
3570
- results = results || []; // Try to minimize operations if there is only one selector in the list and no seed
3571
- // (the latter of which guarantees us context)
3572
-
3573
- if (match.length === 1) {
3574
- // Reduce context if the leading compound selector is an ID
3575
- tokens = match[0] = match[0].slice(0);
3576
-
3577
- if (tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {
3578
- context = (Expr.find["ID"](token.matches[0].replace(runescape, funescape), context) || [])[0];
3579
-
3580
- if (!context) {
3581
- return results; // Precompiled matchers will still verify ancestry, so step up a level
3582
- } else if (compiled) {
3583
- context = context.parentNode;
3584
- }
3585
-
3586
- selector = selector.slice(tokens.shift().value.length);
3587
- } // Fetch a seed set for right-to-left matching
3588
-
3589
-
3590
- i = matchExpr["needsContext"].test(selector) ? 0 : tokens.length;
3591
-
3592
- while (i--) {
3593
- token = tokens[i]; // Abort if we hit a combinator
3594
-
3595
- if (Expr.relative[type = token.type]) {
3596
- break;
3597
- }
3598
-
3599
- if (find = Expr.find[type]) {
3600
- // Search, expanding context for leading sibling combinators
3601
- if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {
3602
- // If seed is empty or no tokens remain, we can return early
3603
- tokens.splice(i, 1);
3604
- selector = seed.length && toSelector(tokens);
3605
-
3606
- if (!selector) {
3607
- push.apply(results, seed);
3608
- return results;
3609
- }
3610
-
3611
- break;
3612
- }
3613
- }
3614
- }
3615
- } // Compile and execute a filtering function if one is not provided
3616
- // Provide `match` to avoid retokenization if we modified the selector above
3617
-
3618
-
3619
- (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);
3620
- return results;
3621
- }; // One-time assignments
3622
- // Sort stability
3623
-
3624
-
3625
- support.sortStable = expando.split("").sort(sortOrder).join("") === expando; // Support: Chrome 14-35+
3626
- // Always assume duplicates if they aren't passed to the comparison function
3627
-
3628
- support.detectDuplicates = !!hasDuplicate; // Initialize against the default document
3629
-
3630
- setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
3631
- // Detached nodes confoundingly follow *each other*
3632
-
3633
- support.sortDetached = assert(function (el) {
3634
- // Should return 1, but returns 4 (following)
3635
- return el.compareDocumentPosition(document.createElement("fieldset")) & 1;
3636
- }); // Support: IE<8
3637
- // Prevent attribute/property "interpolation"
3638
- // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
3639
-
3640
- if (!assert(function (el) {
3641
- el.innerHTML = "<a href='#'></a>";
3642
- return el.firstChild.getAttribute("href") === "#";
3643
- })) {
3644
- addHandle("type|href|height|width", function (elem, name, isXML) {
3645
- if (!isXML) {
3646
- return elem.getAttribute(name, name.toLowerCase() === "type" ? 1 : 2);
3647
- }
3648
- });
3649
- } // Support: IE<9
3650
- // Use defaultValue in place of getAttribute("value")
3651
-
3652
-
3653
- if (!support.attributes || !assert(function (el) {
3654
- el.innerHTML = "<input/>";
3655
- el.firstChild.setAttribute("value", "");
3656
- return el.firstChild.getAttribute("value") === "";
3657
- })) {
3658
- addHandle("value", function (elem, _name, isXML) {
3659
- if (!isXML && elem.nodeName.toLowerCase() === "input") {
3660
- return elem.defaultValue;
3661
- }
3662
- });
3663
- } // Support: IE<9
3664
- // Use getAttributeNode to fetch booleans when getAttribute lies
3665
-
3666
-
3667
- if (!assert(function (el) {
3668
- return el.getAttribute("disabled") == null;
3669
- })) {
3670
- addHandle(booleans, function (elem, name, isXML) {
3671
- var val;
3672
-
3673
- if (!isXML) {
3674
- return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;
3675
- }
3676
- });
3677
- }
3678
-
3679
- return Sizzle;
3680
- }(window);
3681
-
3682
- jQuery.find = Sizzle;
3683
- jQuery.expr = Sizzle.selectors; // Deprecated
3684
-
3685
- jQuery.expr[":"] = jQuery.expr.pseudos;
3686
- jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
3687
- jQuery.text = Sizzle.getText;
3688
- jQuery.isXMLDoc = Sizzle.isXML;
3689
- jQuery.contains = Sizzle.contains;
3690
- jQuery.escapeSelector = Sizzle.escape;
3691
-
3692
- var dir = function dir(elem, _dir, until) {
3693
- var matched = [],
3694
- truncate = until !== undefined;
3695
-
3696
- while ((elem = elem[_dir]) && elem.nodeType !== 9) {
3697
- if (elem.nodeType === 1) {
3698
- if (truncate && jQuery(elem).is(until)) {
3699
- break;
3700
- }
3701
-
3702
- matched.push(elem);
3703
- }
3704
- }
3705
-
3706
- return matched;
3707
- };
3708
-
3709
- var _siblings = function siblings(n, elem) {
3710
- var matched = [];
3711
-
3712
- for (; n; n = n.nextSibling) {
3713
- if (n.nodeType === 1 && n !== elem) {
3714
- matched.push(n);
3715
- }
3716
- }
3717
-
3718
- return matched;
3719
- };
3720
-
3721
- var rneedsContext = jQuery.expr.match.needsContext;
3722
-
3723
- function nodeName(elem, name) {
3724
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
3725
- }
3726
-
3727
- ;
3728
- var rsingleTag = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i; // Implement the identical functionality for filter and not
3729
-
3730
- function winnow(elements, qualifier, not) {
3731
- if (isFunction(qualifier)) {
3732
- return jQuery.grep(elements, function (elem, i) {
3733
- return !!qualifier.call(elem, i, elem) !== not;
3734
- });
3735
- } // Single element
3736
-
3737
-
3738
- if (qualifier.nodeType) {
3739
- return jQuery.grep(elements, function (elem) {
3740
- return elem === qualifier !== not;
3741
- });
3742
- } // Arraylike of elements (jQuery, arguments, Array)
3743
-
3744
-
3745
- if (typeof qualifier !== "string") {
3746
- return jQuery.grep(elements, function (elem) {
3747
- return indexOf.call(qualifier, elem) > -1 !== not;
3748
- });
3749
- } // Filtered directly for both simple and complex selectors
3750
-
3751
-
3752
- return jQuery.filter(qualifier, elements, not);
3753
- }
3754
-
3755
- jQuery.filter = function (expr, elems, not) {
3756
- var elem = elems[0];
3757
-
3758
- if (not) {
3759
- expr = ":not(" + expr + ")";
3760
- }
3761
-
3762
- if (elems.length === 1 && elem.nodeType === 1) {
3763
- return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];
3764
- }
3765
-
3766
- return jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {
3767
- return elem.nodeType === 1;
3768
- }));
3769
- };
3770
-
3771
- jQuery.fn.extend({
3772
- find: function find(selector) {
3773
- var i,
3774
- ret,
3775
- len = this.length,
3776
- self = this;
3777
-
3778
- if (typeof selector !== "string") {
3779
- return this.pushStack(jQuery(selector).filter(function () {
3780
- for (i = 0; i < len; i++) {
3781
- if (jQuery.contains(self[i], this)) {
3782
- return true;
3783
- }
3784
- }
3785
- }));
3786
- }
3787
-
3788
- ret = this.pushStack([]);
3789
-
3790
- for (i = 0; i < len; i++) {
3791
- jQuery.find(selector, self[i], ret);
3792
- }
3793
-
3794
- return len > 1 ? jQuery.uniqueSort(ret) : ret;
3795
- },
3796
- filter: function filter(selector) {
3797
- return this.pushStack(winnow(this, selector || [], false));
3798
- },
3799
- not: function not(selector) {
3800
- return this.pushStack(winnow(this, selector || [], true));
3801
- },
3802
- is: function is(selector) {
3803
- return !!winnow(this, // If this is a positional/relative selector, check membership in the returned set
3804
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
3805
- typeof selector === "string" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;
3806
- }
3807
- }); // Initialize a jQuery object
3808
- // A central reference to the root jQuery(document)
3809
-
3810
- var rootjQuery,
3811
- // A simple way to check for HTML strings
3812
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
3813
- // Strict HTML recognition (#11290: must start with <)
3814
- // Shortcut simple #id case for speed
3815
- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
3816
- init = jQuery.fn.init = function (selector, context, root) {
3817
- var match, elem; // HANDLE: $(""), $(null), $(undefined), $(false)
3818
-
3819
- if (!selector) {
3820
- return this;
3821
- } // Method init() accepts an alternate rootjQuery
3822
- // so migrate can support jQuery.sub (gh-2101)
3823
-
3824
-
3825
- root = root || rootjQuery; // Handle HTML strings
3826
-
3827
- if (typeof selector === "string") {
3828
- if (selector[0] === "<" && selector[selector.length - 1] === ">" && selector.length >= 3) {
3829
- // Assume that strings that start and end with <> are HTML and skip the regex check
3830
- match = [null, selector, null];
3831
- } else {
3832
- match = rquickExpr.exec(selector);
3833
- } // Match html or make sure no context is specified for #id
3834
-
3835
-
3836
- if (match && (match[1] || !context)) {
3837
- // HANDLE: $(html) -> $(array)
3838
- if (match[1]) {
3839
- context = context instanceof jQuery ? context[0] : context; // Option to run scripts is true for back-compat
3840
- // Intentionally let the error be thrown if parseHTML is not present
3841
-
3842
- jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true)); // HANDLE: $(html, props)
3843
-
3844
- if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {
3845
- for (match in context) {
3846
- // Properties of context are called as methods if possible
3847
- if (isFunction(this[match])) {
3848
- this[match](context[match]); // ...and otherwise set as attributes
3849
- } else {
3850
- this.attr(match, context[match]);
3851
- }
3852
- }
3853
- }
3854
-
3855
- return this; // HANDLE: $(#id)
3856
- } else {
3857
- elem = document.getElementById(match[2]);
3858
-
3859
- if (elem) {
3860
- // Inject the element directly into the jQuery object
3861
- this[0] = elem;
3862
- this.length = 1;
3863
- }
3864
-
3865
- return this;
3866
- } // HANDLE: $(expr, $(...))
3867
-
3868
- } else if (!context || context.jquery) {
3869
- return (context || root).find(selector); // HANDLE: $(expr, context)
3870
- // (which is just equivalent to: $(context).find(expr)
3871
- } else {
3872
- return this.constructor(context).find(selector);
3873
- } // HANDLE: $(DOMElement)
3874
-
3875
- } else if (selector.nodeType) {
3876
- this[0] = selector;
3877
- this.length = 1;
3878
- return this; // HANDLE: $(function)
3879
- // Shortcut for document ready
3880
- } else if (isFunction(selector)) {
3881
- return root.ready !== undefined ? root.ready(selector) : // Execute immediately if ready is not present
3882
- selector(jQuery);
3883
- }
3884
-
3885
- return jQuery.makeArray(selector, this);
3886
- }; // Give the init function the jQuery prototype for later instantiation
3887
-
3888
-
3889
- init.prototype = jQuery.fn; // Initialize central reference
3890
-
3891
- rootjQuery = jQuery(document);
3892
- var rparentsprev = /^(?:parents|prev(?:Until|All))/,
3893
- // Methods guaranteed to produce a unique set when starting from a unique set
3894
- guaranteedUnique = {
3895
- children: true,
3896
- contents: true,
3897
- next: true,
3898
- prev: true
3899
- };
3900
- jQuery.fn.extend({
3901
- has: function has(target) {
3902
- var targets = jQuery(target, this),
3903
- l = targets.length;
3904
- return this.filter(function () {
3905
- var i = 0;
3906
-
3907
- for (; i < l; i++) {
3908
- if (jQuery.contains(this, targets[i])) {
3909
- return true;
3910
- }
3911
- }
3912
- });
3913
- },
3914
- closest: function closest(selectors, context) {
3915
- var cur,
3916
- i = 0,
3917
- l = this.length,
3918
- matched = [],
3919
- targets = typeof selectors !== "string" && jQuery(selectors); // Positional selectors never match, since there's no _selection_ context
3920
-
3921
- if (!rneedsContext.test(selectors)) {
3922
- for (; i < l; i++) {
3923
- for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {
3924
- // Always skip document fragments
3925
- if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : // Don't pass non-elements to Sizzle
3926
- cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {
3927
- matched.push(cur);
3928
- break;
3929
- }
3930
- }
3931
- }
3932
- }
3933
-
3934
- return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);
3935
- },
3936
- // Determine the position of an element within the set
3937
- index: function index(elem) {
3938
- // No argument, return index in parent
3939
- if (!elem) {
3940
- return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;
3941
- } // Index in selector
3942
-
3943
-
3944
- if (typeof elem === "string") {
3945
- return indexOf.call(jQuery(elem), this[0]);
3946
- } // Locate the position of the desired element
3947
-
3948
-
3949
- return indexOf.call(this, // If it receives a jQuery object, the first element is used
3950
- elem.jquery ? elem[0] : elem);
3951
- },
3952
- add: function add(selector, context) {
3953
- return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));
3954
- },
3955
- addBack: function addBack(selector) {
3956
- return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));
3957
- }
3958
- });
3959
-
3960
- function sibling(cur, dir) {
3961
- while ((cur = cur[dir]) && cur.nodeType !== 1) {}
3962
-
3963
- return cur;
3964
- }
3965
-
3966
- jQuery.each({
3967
- parent: function parent(elem) {
3968
- var parent = elem.parentNode;
3969
- return parent && parent.nodeType !== 11 ? parent : null;
3970
- },
3971
- parents: function parents(elem) {
3972
- return dir(elem, "parentNode");
3973
- },
3974
- parentsUntil: function parentsUntil(elem, _i, until) {
3975
- return dir(elem, "parentNode", until);
3976
- },
3977
- next: function next(elem) {
3978
- return sibling(elem, "nextSibling");
3979
- },
3980
- prev: function prev(elem) {
3981
- return sibling(elem, "previousSibling");
3982
- },
3983
- nextAll: function nextAll(elem) {
3984
- return dir(elem, "nextSibling");
3985
- },
3986
- prevAll: function prevAll(elem) {
3987
- return dir(elem, "previousSibling");
3988
- },
3989
- nextUntil: function nextUntil(elem, _i, until) {
3990
- return dir(elem, "nextSibling", until);
3991
- },
3992
- prevUntil: function prevUntil(elem, _i, until) {
3993
- return dir(elem, "previousSibling", until);
3994
- },
3995
- siblings: function siblings(elem) {
3996
- return _siblings((elem.parentNode || {}).firstChild, elem);
3997
- },
3998
- children: function children(elem) {
3999
- return _siblings(elem.firstChild);
4000
- },
4001
- contents: function contents(elem) {
4002
- if (elem.contentDocument != null && // Support: IE 11+
4003
- // <object> elements with no `data` attribute has an object
4004
- // `contentDocument` with a `null` prototype.
4005
- getProto(elem.contentDocument)) {
4006
- return elem.contentDocument;
4007
- } // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
4008
- // Treat the template element as a regular one in browsers that
4009
- // don't support it.
4010
-
4011
-
4012
- if (nodeName(elem, "template")) {
4013
- elem = elem.content || elem;
4014
- }
4015
-
4016
- return jQuery.merge([], elem.childNodes);
4017
- }
4018
- }, function (name, fn) {
4019
- jQuery.fn[name] = function (until, selector) {
4020
- var matched = jQuery.map(this, fn, until);
4021
-
4022
- if (name.slice(-5) !== "Until") {
4023
- selector = until;
4024
- }
4025
-
4026
- if (selector && typeof selector === "string") {
4027
- matched = jQuery.filter(selector, matched);
4028
- }
4029
-
4030
- if (this.length > 1) {
4031
- // Remove duplicates
4032
- if (!guaranteedUnique[name]) {
4033
- jQuery.uniqueSort(matched);
4034
- } // Reverse order for parents* and prev-derivatives
4035
-
4036
-
4037
- if (rparentsprev.test(name)) {
4038
- matched.reverse();
4039
- }
4040
- }
4041
-
4042
- return this.pushStack(matched);
4043
- };
4044
- });
4045
- var rnothtmlwhite = /[^\x20\t\r\n\f]+/g; // Convert String-formatted options into Object-formatted ones
4046
-
4047
- function createOptions(options) {
4048
- var object = {};
4049
- jQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {
4050
- object[flag] = true;
4051
- });
4052
- return object;
4053
- }
4054
- /*
4055
- * Create a callback list using the following parameters:
4056
- *
4057
- * options: an optional list of space-separated options that will change how
4058
- * the callback list behaves or a more traditional option object
4059
- *
4060
- * By default a callback list will act like an event callback list and can be
4061
- * "fired" multiple times.
4062
- *
4063
- * Possible options:
4064
- *
4065
- * once: will ensure the callback list can only be fired once (like a Deferred)
4066
- *
4067
- * memory: will keep track of previous values and will call any callback added
4068
- * after the list has been fired right away with the latest "memorized"
4069
- * values (like a Deferred)
4070
- *
4071
- * unique: will ensure a callback can only be added once (no duplicate in the list)
4072
- *
4073
- * stopOnFalse: interrupt callings when a callback returns false
4074
- *
4075
- */
4076
-
4077
-
4078
- jQuery.Callbacks = function (options) {
4079
- // Convert options from String-formatted to Object-formatted if needed
4080
- // (we check in cache first)
4081
- options = typeof options === "string" ? createOptions(options) : jQuery.extend({}, options);
4082
-
4083
- var // Flag to know if list is currently firing
4084
- firing,
4085
- // Last fire value for non-forgettable lists
4086
- memory,
4087
- // Flag to know if list was already fired
4088
- _fired,
4089
- // Flag to prevent firing
4090
- _locked,
4091
- // Actual callback list
4092
- list = [],
4093
- // Queue of execution data for repeatable lists
4094
- queue = [],
4095
- // Index of currently firing callback (modified by add/remove as needed)
4096
- firingIndex = -1,
4097
- // Fire callbacks
4098
- fire = function fire() {
4099
- // Enforce single-firing
4100
- _locked = _locked || options.once; // Execute callbacks for all pending executions,
4101
- // respecting firingIndex overrides and runtime changes
4102
-
4103
- _fired = firing = true;
4104
-
4105
- for (; queue.length; firingIndex = -1) {
4106
- memory = queue.shift();
4107
-
4108
- while (++firingIndex < list.length) {
4109
- // Run callback and check for early termination
4110
- if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {
4111
- // Jump to end and forget the data so .add doesn't re-fire
4112
- firingIndex = list.length;
4113
- memory = false;
4114
- }
4115
- }
4116
- } // Forget the data if we're done with it
4117
-
4118
-
4119
- if (!options.memory) {
4120
- memory = false;
4121
- }
4122
-
4123
- firing = false; // Clean up if we're done firing for good
4124
-
4125
- if (_locked) {
4126
- // Keep an empty list if we have data for future add calls
4127
- if (memory) {
4128
- list = []; // Otherwise, this object is spent
4129
- } else {
4130
- list = "";
4131
- }
4132
- }
4133
- },
4134
- // Actual Callbacks object
4135
- self = {
4136
- // Add a callback or a collection of callbacks to the list
4137
- add: function add() {
4138
- if (list) {
4139
- // If we have memory from a past run, we should fire after adding
4140
- if (memory && !firing) {
4141
- firingIndex = list.length - 1;
4142
- queue.push(memory);
4143
- }
4144
-
4145
- (function add(args) {
4146
- jQuery.each(args, function (_, arg) {
4147
- if (isFunction(arg)) {
4148
- if (!options.unique || !self.has(arg)) {
4149
- list.push(arg);
4150
- }
4151
- } else if (arg && arg.length && toType(arg) !== "string") {
4152
- // Inspect recursively
4153
- add(arg);
4154
- }
4155
- });
4156
- })(arguments);
4157
-
4158
- if (memory && !firing) {
4159
- fire();
4160
- }
4161
- }
4162
-
4163
- return this;
4164
- },
4165
- // Remove a callback from the list
4166
- remove: function remove() {
4167
- jQuery.each(arguments, function (_, arg) {
4168
- var index;
4169
-
4170
- while ((index = jQuery.inArray(arg, list, index)) > -1) {
4171
- list.splice(index, 1); // Handle firing indexes
4172
-
4173
- if (index <= firingIndex) {
4174
- firingIndex--;
4175
- }
4176
- }
4177
- });
4178
- return this;
4179
- },
4180
- // Check if a given callback is in the list.
4181
- // If no argument is given, return whether or not list has callbacks attached.
4182
- has: function has(fn) {
4183
- return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;
4184
- },
4185
- // Remove all callbacks from the list
4186
- empty: function empty() {
4187
- if (list) {
4188
- list = [];
4189
- }
4190
-
4191
- return this;
4192
- },
4193
- // Disable .fire and .add
4194
- // Abort any current/pending executions
4195
- // Clear all callbacks and values
4196
- disable: function disable() {
4197
- _locked = queue = [];
4198
- list = memory = "";
4199
- return this;
4200
- },
4201
- disabled: function disabled() {
4202
- return !list;
4203
- },
4204
- // Disable .fire
4205
- // Also disable .add unless we have memory (since it would have no effect)
4206
- // Abort any pending executions
4207
- lock: function lock() {
4208
- _locked = queue = [];
4209
-
4210
- if (!memory && !firing) {
4211
- list = memory = "";
4212
- }
4213
-
4214
- return this;
4215
- },
4216
- locked: function locked() {
4217
- return !!_locked;
4218
- },
4219
- // Call all callbacks with the given context and arguments
4220
- fireWith: function fireWith(context, args) {
4221
- if (!_locked) {
4222
- args = args || [];
4223
- args = [context, args.slice ? args.slice() : args];
4224
- queue.push(args);
4225
-
4226
- if (!firing) {
4227
- fire();
4228
- }
4229
- }
4230
-
4231
- return this;
4232
- },
4233
- // Call all the callbacks with the given arguments
4234
- fire: function fire() {
4235
- self.fireWith(this, arguments);
4236
- return this;
4237
- },
4238
- // To know if the callbacks have already been called at least once
4239
- fired: function fired() {
4240
- return !!_fired;
4241
- }
4242
- };
4243
-
4244
- return self;
4245
- };
4246
-
4247
- function Identity(v) {
4248
- return v;
4249
- }
4250
-
4251
- function Thrower(ex) {
4252
- throw ex;
4253
- }
4254
-
4255
- function adoptValue(value, resolve, reject, noValue) {
4256
- var method;
4257
-
4258
- try {
4259
- // Check for promise aspect first to privilege synchronous behavior
4260
- if (value && isFunction(method = value.promise)) {
4261
- method.call(value).done(resolve).fail(reject); // Other thenables
4262
- } else if (value && isFunction(method = value.then)) {
4263
- method.call(value, resolve, reject); // Other non-thenables
4264
- } else {
4265
- // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
4266
- // * false: [ value ].slice( 0 ) => resolve( value )
4267
- // * true: [ value ].slice( 1 ) => resolve()
4268
- resolve.apply(undefined, [value].slice(noValue));
4269
- } // For Promises/A+, convert exceptions into rejections
4270
- // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
4271
- // Deferred#then to conditionally suppress rejection.
4272
-
4273
- } catch (value) {
4274
- // Support: Android 4.0 only
4275
- // Strict mode functions invoked without .call/.apply get global-object context
4276
- reject.apply(undefined, [value]);
4277
- }
4278
- }
4279
-
4280
- jQuery.extend({
4281
- Deferred: function Deferred(func) {
4282
- var tuples = [// action, add listener, callbacks,
4283
- // ... .then handlers, argument index, [final state]
4284
- ["notify", "progress", jQuery.Callbacks("memory"), jQuery.Callbacks("memory"), 2], ["resolve", "done", jQuery.Callbacks("once memory"), jQuery.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", jQuery.Callbacks("once memory"), jQuery.Callbacks("once memory"), 1, "rejected"]],
4285
- _state = "pending",
4286
- _promise = {
4287
- state: function state() {
4288
- return _state;
4289
- },
4290
- always: function always() {
4291
- deferred.done(arguments).fail(arguments);
4292
- return this;
4293
- },
4294
- "catch": function _catch(fn) {
4295
- return _promise.then(null, fn);
4296
- },
4297
- // Keep pipe for back-compat
4298
- pipe: function pipe()
4299
- /* fnDone, fnFail, fnProgress */
4300
- {
4301
- var fns = arguments;
4302
- return jQuery.Deferred(function (newDefer) {
4303
- jQuery.each(tuples, function (_i, tuple) {
4304
- // Map tuples (progress, done, fail) to arguments (done, fail, progress)
4305
- var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]]; // deferred.progress(function() { bind to newDefer or newDefer.notify })
4306
- // deferred.done(function() { bind to newDefer or newDefer.resolve })
4307
- // deferred.fail(function() { bind to newDefer or newDefer.reject })
4308
-
4309
- deferred[tuple[1]](function () {
4310
- var returned = fn && fn.apply(this, arguments);
4311
-
4312
- if (returned && isFunction(returned.promise)) {
4313
- returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);
4314
- } else {
4315
- newDefer[tuple[0] + "With"](this, fn ? [returned] : arguments);
4316
- }
4317
- });
4318
- });
4319
- fns = null;
4320
- }).promise();
4321
- },
4322
- then: function then(onFulfilled, onRejected, onProgress) {
4323
- var maxDepth = 0;
4324
-
4325
- function resolve(depth, deferred, handler, special) {
4326
- return function () {
4327
- var that = this,
4328
- args = arguments,
4329
- mightThrow = function mightThrow() {
4330
- var returned, then; // Support: Promises/A+ section 2.3.3.3.3
4331
- // https://promisesaplus.com/#point-59
4332
- // Ignore double-resolution attempts
4333
-
4334
- if (depth < maxDepth) {
4335
- return;
4336
- }
4337
-
4338
- returned = handler.apply(that, args); // Support: Promises/A+ section 2.3.1
4339
- // https://promisesaplus.com/#point-48
4340
-
4341
- if (returned === deferred.promise()) {
4342
- throw new TypeError("Thenable self-resolution");
4343
- } // Support: Promises/A+ sections 2.3.3.1, 3.5
4344
- // https://promisesaplus.com/#point-54
4345
- // https://promisesaplus.com/#point-75
4346
- // Retrieve `then` only once
4347
-
4348
-
4349
- then = returned && ( // Support: Promises/A+ section 2.3.4
4350
- // https://promisesaplus.com/#point-64
4351
- // Only check objects and functions for thenability
4352
- _typeof(returned) === "object" || typeof returned === "function") && returned.then; // Handle a returned thenable
4353
-
4354
- if (isFunction(then)) {
4355
- // Special processors (notify) just wait for resolution
4356
- if (special) {
4357
- then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special)); // Normal processors (resolve) also hook into progress
4358
- } else {
4359
- // ...and disregard older resolution values
4360
- maxDepth++;
4361
- then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));
4362
- } // Handle all other returned values
4363
-
4364
- } else {
4365
- // Only substitute handlers pass on context
4366
- // and multiple values (non-spec behavior)
4367
- if (handler !== Identity) {
4368
- that = undefined;
4369
- args = [returned];
4370
- } // Process the value(s)
4371
- // Default process is resolve
4372
-
4373
-
4374
- (special || deferred.resolveWith)(that, args);
4375
- }
4376
- },
4377
- // Only normal processors (resolve) catch and reject exceptions
4378
- process = special ? mightThrow : function () {
4379
- try {
4380
- mightThrow();
4381
- } catch (e) {
4382
- if (jQuery.Deferred.exceptionHook) {
4383
- jQuery.Deferred.exceptionHook(e, process.stackTrace);
4384
- } // Support: Promises/A+ section 2.3.3.3.4.1
4385
- // https://promisesaplus.com/#point-61
4386
- // Ignore post-resolution exceptions
4387
-
4388
-
4389
- if (depth + 1 >= maxDepth) {
4390
- // Only substitute handlers pass on context
4391
- // and multiple values (non-spec behavior)
4392
- if (handler !== Thrower) {
4393
- that = undefined;
4394
- args = [e];
4395
- }
4396
-
4397
- deferred.rejectWith(that, args);
4398
- }
4399
- }
4400
- }; // Support: Promises/A+ section 2.3.3.3.1
4401
- // https://promisesaplus.com/#point-57
4402
- // Re-resolve promises immediately to dodge false rejection from
4403
- // subsequent errors
4404
-
4405
-
4406
- if (depth) {
4407
- process();
4408
- } else {
4409
- // Call an optional hook to record the stack, in case of exception
4410
- // since it's otherwise lost when execution goes async
4411
- if (jQuery.Deferred.getStackHook) {
4412
- process.stackTrace = jQuery.Deferred.getStackHook();
4413
- }
4414
-
4415
- window.setTimeout(process);
4416
- }
4417
- };
4418
- }
4419
-
4420
- return jQuery.Deferred(function (newDefer) {
4421
- // progress_handlers.add( ... )
4422
- tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith)); // fulfilled_handlers.add( ... )
4423
-
4424
- tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity)); // rejected_handlers.add( ... )
4425
-
4426
- tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));
4427
- }).promise();
4428
- },
4429
- // Get a promise for this deferred
4430
- // If obj is provided, the promise aspect is added to the object
4431
- promise: function promise(obj) {
4432
- return obj != null ? jQuery.extend(obj, _promise) : _promise;
4433
- }
4434
- },
4435
- deferred = {}; // Add list-specific methods
4436
-
4437
- jQuery.each(tuples, function (i, tuple) {
4438
- var list = tuple[2],
4439
- stateString = tuple[5]; // promise.progress = list.add
4440
- // promise.done = list.add
4441
- // promise.fail = list.add
4442
-
4443
- _promise[tuple[1]] = list.add; // Handle state
4444
-
4445
- if (stateString) {
4446
- list.add(function () {
4447
- // state = "resolved" (i.e., fulfilled)
4448
- // state = "rejected"
4449
- _state = stateString;
4450
- }, // rejected_callbacks.disable
4451
- // fulfilled_callbacks.disable
4452
- tuples[3 - i][2].disable, // rejected_handlers.disable
4453
- // fulfilled_handlers.disable
4454
- tuples[3 - i][3].disable, // progress_callbacks.lock
4455
- tuples[0][2].lock, // progress_handlers.lock
4456
- tuples[0][3].lock);
4457
- } // progress_handlers.fire
4458
- // fulfilled_handlers.fire
4459
- // rejected_handlers.fire
4460
-
4461
-
4462
- list.add(tuple[3].fire); // deferred.notify = function() { deferred.notifyWith(...) }
4463
- // deferred.resolve = function() { deferred.resolveWith(...) }
4464
- // deferred.reject = function() { deferred.rejectWith(...) }
4465
-
4466
- deferred[tuple[0]] = function () {
4467
- deferred[tuple[0] + "With"](this === deferred ? undefined : this, arguments);
4468
- return this;
4469
- }; // deferred.notifyWith = list.fireWith
4470
- // deferred.resolveWith = list.fireWith
4471
- // deferred.rejectWith = list.fireWith
4472
-
4473
-
4474
- deferred[tuple[0] + "With"] = list.fireWith;
4475
- }); // Make the deferred a promise
4476
-
4477
- _promise.promise(deferred); // Call given func if any
4478
-
4479
-
4480
- if (func) {
4481
- func.call(deferred, deferred);
4482
- } // All done!
4483
-
4484
-
4485
- return deferred;
4486
- },
4487
- // Deferred helper
4488
- when: function when(singleValue) {
4489
- var // count of uncompleted subordinates
4490
- remaining = arguments.length,
4491
- // count of unprocessed arguments
4492
- i = remaining,
4493
- // subordinate fulfillment data
4494
- resolveContexts = Array(i),
4495
- resolveValues = _slice.call(arguments),
4496
- // the master Deferred
4497
- master = jQuery.Deferred(),
4498
- // subordinate callback factory
4499
- updateFunc = function updateFunc(i) {
4500
- return function (value) {
4501
- resolveContexts[i] = this;
4502
- resolveValues[i] = arguments.length > 1 ? _slice.call(arguments) : value;
4503
-
4504
- if (! --remaining) {
4505
- master.resolveWith(resolveContexts, resolveValues);
4506
- }
4507
- };
4508
- }; // Single- and empty arguments are adopted like Promise.resolve
4509
-
4510
-
4511
- if (remaining <= 1) {
4512
- adoptValue(singleValue, master.done(updateFunc(i)).resolve, master.reject, !remaining); // Use .then() to unwrap secondary thenables (cf. gh-3000)
4513
-
4514
- if (master.state() === "pending" || isFunction(resolveValues[i] && resolveValues[i].then)) {
4515
- return master.then();
4516
- }
4517
- } // Multiple arguments are aggregated like Promise.all array elements
4518
-
4519
-
4520
- while (i--) {
4521
- adoptValue(resolveValues[i], updateFunc(i), master.reject);
4522
- }
4523
-
4524
- return master.promise();
4525
- }
4526
- }); // These usually indicate a programmer mistake during development,
4527
- // warn about them ASAP rather than swallowing them by default.
4528
-
4529
- var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
4530
-
4531
- jQuery.Deferred.exceptionHook = function (error, stack) {
4532
- // Support: IE 8 - 9 only
4533
- // Console exists when dev tools are open, which can happen at any time
4534
- if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {
4535
- window.console.warn("jQuery.Deferred exception: " + error.message, error.stack, stack);
4536
- }
4537
- };
4538
-
4539
- jQuery.readyException = function (error) {
4540
- window.setTimeout(function () {
4541
- throw error;
4542
- });
4543
- }; // The deferred used on DOM ready
4544
-
4545
-
4546
- var readyList = jQuery.Deferred();
4547
-
4548
- jQuery.fn.ready = function (fn) {
4549
- readyList.then(fn) // Wrap jQuery.readyException in a function so that the lookup
4550
- // happens at the time of error handling instead of callback
4551
- // registration.
4552
- ["catch"](function (error) {
4553
- jQuery.readyException(error);
4554
- });
4555
- return this;
4556
- };
4557
-
4558
- jQuery.extend({
4559
- // Is the DOM ready to be used? Set to true once it occurs.
4560
- isReady: false,
4561
- // A counter to track how many items to wait for before
4562
- // the ready event fires. See #6781
4563
- readyWait: 1,
4564
- // Handle when the DOM is ready
4565
- ready: function ready(wait) {
4566
- // Abort if there are pending holds or we're already ready
4567
- if (wait === true ? --jQuery.readyWait : jQuery.isReady) {
4568
- return;
4569
- } // Remember that the DOM is ready
4570
-
4571
-
4572
- jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be
4573
-
4574
- if (wait !== true && --jQuery.readyWait > 0) {
4575
- return;
4576
- } // If there are functions bound, to execute
4577
-
4578
-
4579
- readyList.resolveWith(document, [jQuery]);
4580
- }
4581
- });
4582
- jQuery.ready.then = readyList.then; // The ready event handler and self cleanup method
4583
-
4584
- function completed() {
4585
- document.removeEventListener("DOMContentLoaded", completed);
4586
- window.removeEventListener("load", completed);
4587
- jQuery.ready();
4588
- } // Catch cases where $(document).ready() is called
4589
- // after the browser event has already occurred.
4590
- // Support: IE <=9 - 10 only
4591
- // Older IE sometimes signals "interactive" too soon
4592
-
4593
-
4594
- if (document.readyState === "complete" || document.readyState !== "loading" && !document.documentElement.doScroll) {
4595
- // Handle it asynchronously to allow scripts the opportunity to delay ready
4596
- window.setTimeout(jQuery.ready);
4597
- } else {
4598
- // Use the handy event callback
4599
- document.addEventListener("DOMContentLoaded", completed); // A fallback to window.onload, that will always work
4600
-
4601
- window.addEventListener("load", completed);
4602
- } // Multifunctional method to get and set values of a collection
4603
- // The value/s can optionally be executed if it's a function
4604
-
4605
-
4606
- var access = function access(elems, fn, key, value, chainable, emptyGet, raw) {
4607
- var i = 0,
4608
- len = elems.length,
4609
- bulk = key == null; // Sets many values
4610
-
4611
- if (toType(key) === "object") {
4612
- chainable = true;
4613
-
4614
- for (i in key) {
4615
- access(elems, fn, i, key[i], true, emptyGet, raw);
4616
- } // Sets one value
4617
-
4618
- } else if (value !== undefined) {
4619
- chainable = true;
4620
-
4621
- if (!isFunction(value)) {
4622
- raw = true;
4623
- }
4624
-
4625
- if (bulk) {
4626
- // Bulk operations run against the entire set
4627
- if (raw) {
4628
- fn.call(elems, value);
4629
- fn = null; // ...except when executing function values
4630
- } else {
4631
- bulk = fn;
4632
-
4633
- fn = function fn(elem, _key, value) {
4634
- return bulk.call(jQuery(elem), value);
4635
- };
4636
- }
4637
- }
4638
-
4639
- if (fn) {
4640
- for (; i < len; i++) {
4641
- fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));
4642
- }
4643
- }
4644
- }
4645
-
4646
- if (chainable) {
4647
- return elems;
4648
- } // Gets
4649
-
4650
-
4651
- if (bulk) {
4652
- return fn.call(elems);
4653
- }
4654
-
4655
- return len ? fn(elems[0], key) : emptyGet;
4656
- }; // Matches dashed string for camelizing
4657
-
4658
-
4659
- var rmsPrefix = /^-ms-/,
4660
- rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace()
4661
-
4662
- function fcamelCase(_all, letter) {
4663
- return letter.toUpperCase();
4664
- } // Convert dashed to camelCase; used by the css and data modules
4665
- // Support: IE <=9 - 11, Edge 12 - 15
4666
- // Microsoft forgot to hump their vendor prefix (#9572)
4667
-
4668
-
4669
- function camelCase(string) {
4670
- return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase);
4671
- }
4672
-
4673
- var acceptData = function acceptData(owner) {
4674
- // Accepts only:
4675
- // - Node
4676
- // - Node.ELEMENT_NODE
4677
- // - Node.DOCUMENT_NODE
4678
- // - Object
4679
- // - Any
4680
- return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;
4681
- };
4682
-
4683
- function Data() {
4684
- this.expando = jQuery.expando + Data.uid++;
4685
- }
4686
-
4687
- Data.uid = 1;
4688
- Data.prototype = {
4689
- cache: function cache(owner) {
4690
- // Check if the owner object already has a cache
4691
- var value = owner[this.expando]; // If not, create one
4692
-
4693
- if (!value) {
4694
- value = Object.create(null); // We can accept data for non-element nodes in modern browsers,
4695
- // but we should not, see #8335.
4696
- // Always return an empty object.
4697
-
4698
- if (acceptData(owner)) {
4699
- // If it is a node unlikely to be stringify-ed or looped over
4700
- // use plain assignment
4701
- if (owner.nodeType) {
4702
- owner[this.expando] = value; // Otherwise secure it in a non-enumerable property
4703
- // configurable must be true to allow the property to be
4704
- // deleted when data is removed
4705
- } else {
4706
- Object.defineProperty(owner, this.expando, {
4707
- value: value,
4708
- configurable: true
4709
- });
4710
- }
4711
- }
4712
- }
4713
-
4714
- return value;
4715
- },
4716
- set: function set(owner, data, value) {
4717
- var prop,
4718
- cache = this.cache(owner); // Handle: [ owner, key, value ] args
4719
- // Always use camelCase key (gh-2257)
4720
-
4721
- if (typeof data === "string") {
4722
- cache[camelCase(data)] = value; // Handle: [ owner, { properties } ] args
4723
- } else {
4724
- // Copy the properties one-by-one to the cache object
4725
- for (prop in data) {
4726
- cache[camelCase(prop)] = data[prop];
4727
- }
4728
- }
4729
-
4730
- return cache;
4731
- },
4732
- get: function get(owner, key) {
4733
- return key === undefined ? this.cache(owner) : // Always use camelCase key (gh-2257)
4734
- owner[this.expando] && owner[this.expando][camelCase(key)];
4735
- },
4736
- access: function access(owner, key, value) {
4737
- // In cases where either:
4738
- //
4739
- // 1. No key was specified
4740
- // 2. A string key was specified, but no value provided
4741
- //
4742
- // Take the "read" path and allow the get method to determine
4743
- // which value to return, respectively either:
4744
- //
4745
- // 1. The entire cache object
4746
- // 2. The data stored at the key
4747
- //
4748
- if (key === undefined || key && typeof key === "string" && value === undefined) {
4749
- return this.get(owner, key);
4750
- } // When the key is not a string, or both a key and value
4751
- // are specified, set or extend (existing objects) with either:
4752
- //
4753
- // 1. An object of properties
4754
- // 2. A key and value
4755
- //
4756
-
4757
-
4758
- this.set(owner, key, value); // Since the "set" path can have two possible entry points
4759
- // return the expected data based on which path was taken[*]
4760
-
4761
- return value !== undefined ? value : key;
4762
- },
4763
- remove: function remove(owner, key) {
4764
- var i,
4765
- cache = owner[this.expando];
4766
-
4767
- if (cache === undefined) {
4768
- return;
4769
- }
4770
-
4771
- if (key !== undefined) {
4772
- // Support array or space separated string of keys
4773
- if (Array.isArray(key)) {
4774
- // If key is an array of keys...
4775
- // We always set camelCase keys, so remove that.
4776
- key = key.map(camelCase);
4777
- } else {
4778
- key = camelCase(key); // If a key with the spaces exists, use it.
4779
- // Otherwise, create an array by matching non-whitespace
4780
-
4781
- key = key in cache ? [key] : key.match(rnothtmlwhite) || [];
4782
- }
4783
-
4784
- i = key.length;
4785
-
4786
- while (i--) {
4787
- delete cache[key[i]];
4788
- }
4789
- } // Remove the expando if there's no more data
4790
-
4791
-
4792
- if (key === undefined || jQuery.isEmptyObject(cache)) {
4793
- // Support: Chrome <=35 - 45
4794
- // Webkit & Blink performance suffers when deleting properties
4795
- // from DOM nodes, so set to undefined instead
4796
- // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
4797
- if (owner.nodeType) {
4798
- owner[this.expando] = undefined;
4799
- } else {
4800
- delete owner[this.expando];
4801
- }
4802
- }
4803
- },
4804
- hasData: function hasData(owner) {
4805
- var cache = owner[this.expando];
4806
- return cache !== undefined && !jQuery.isEmptyObject(cache);
4807
- }
4808
- };
4809
- var dataPriv = new Data();
4810
- var dataUser = new Data(); // Implementation Summary
4811
- //
4812
- // 1. Enforce API surface and semantic compatibility with 1.9.x branch
4813
- // 2. Improve the module's maintainability by reducing the storage
4814
- // paths to a single mechanism.
4815
- // 3. Use the same single mechanism to support "private" and "user" data.
4816
- // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
4817
- // 5. Avoid exposing implementation details on user objects (eg. expando properties)
4818
- // 6. Provide a clear path for implementation upgrade to WeakMap in 2014
4819
-
4820
- var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
4821
- rmultiDash = /[A-Z]/g;
4822
-
4823
- function getData(data) {
4824
- if (data === "true") {
4825
- return true;
4826
- }
4827
-
4828
- if (data === "false") {
4829
- return false;
4830
- }
4831
-
4832
- if (data === "null") {
4833
- return null;
4834
- } // Only convert to a number if it doesn't change the string
4835
-
4836
-
4837
- if (data === +data + "") {
4838
- return +data;
4839
- }
4840
-
4841
- if (rbrace.test(data)) {
4842
- return JSON.parse(data);
4843
- }
4844
-
4845
- return data;
4846
- }
4847
-
4848
- function dataAttr(elem, key, data) {
4849
- var name; // If nothing was found internally, try to fetch any
4850
- // data from the HTML5 data-* attribute
4851
-
4852
- if (data === undefined && elem.nodeType === 1) {
4853
- name = "data-" + key.replace(rmultiDash, "-$&").toLowerCase();
4854
- data = elem.getAttribute(name);
4855
-
4856
- if (typeof data === "string") {
4857
- try {
4858
- data = getData(data);
4859
- } catch (e) {} // Make sure we set the data so it isn't changed later
4860
-
4861
-
4862
- dataUser.set(elem, key, data);
4863
- } else {
4864
- data = undefined;
4865
- }
4866
- }
4867
-
4868
- return data;
4869
- }
4870
-
4871
- jQuery.extend({
4872
- hasData: function hasData(elem) {
4873
- return dataUser.hasData(elem) || dataPriv.hasData(elem);
4874
- },
4875
- data: function data(elem, name, _data) {
4876
- return dataUser.access(elem, name, _data);
4877
- },
4878
- removeData: function removeData(elem, name) {
4879
- dataUser.remove(elem, name);
4880
- },
4881
- // TODO: Now that all calls to _data and _removeData have been replaced
4882
- // with direct calls to dataPriv methods, these can be deprecated.
4883
- _data: function _data(elem, name, data) {
4884
- return dataPriv.access(elem, name, data);
4885
- },
4886
- _removeData: function _removeData(elem, name) {
4887
- dataPriv.remove(elem, name);
4888
- }
4889
- });
4890
- jQuery.fn.extend({
4891
- data: function data(key, value) {
4892
- var i,
4893
- name,
4894
- data,
4895
- elem = this[0],
4896
- attrs = elem && elem.attributes; // Gets all values
4897
-
4898
- if (key === undefined) {
4899
- if (this.length) {
4900
- data = dataUser.get(elem);
4901
-
4902
- if (elem.nodeType === 1 && !dataPriv.get(elem, "hasDataAttrs")) {
4903
- i = attrs.length;
4904
-
4905
- while (i--) {
4906
- // Support: IE 11 only
4907
- // The attrs elements can be null (#14894)
4908
- if (attrs[i]) {
4909
- name = attrs[i].name;
4910
-
4911
- if (name.indexOf("data-") === 0) {
4912
- name = camelCase(name.slice(5));
4913
- dataAttr(elem, name, data[name]);
4914
- }
4915
- }
4916
- }
4917
-
4918
- dataPriv.set(elem, "hasDataAttrs", true);
4919
- }
4920
- }
4921
-
4922
- return data;
4923
- } // Sets multiple values
4924
-
4925
-
4926
- if (_typeof(key) === "object") {
4927
- return this.each(function () {
4928
- dataUser.set(this, key);
4929
- });
4930
- }
4931
-
4932
- return access(this, function (value) {
4933
- var data; // The calling jQuery object (element matches) is not empty
4934
- // (and therefore has an element appears at this[ 0 ]) and the
4935
- // `value` parameter was not undefined. An empty jQuery object
4936
- // will result in `undefined` for elem = this[ 0 ] which will
4937
- // throw an exception if an attempt to read a data cache is made.
4938
-
4939
- if (elem && value === undefined) {
4940
- // Attempt to get data from the cache
4941
- // The key will always be camelCased in Data
4942
- data = dataUser.get(elem, key);
4943
-
4944
- if (data !== undefined) {
4945
- return data;
4946
- } // Attempt to "discover" the data in
4947
- // HTML5 custom data-* attrs
4948
-
4949
-
4950
- data = dataAttr(elem, key);
4951
-
4952
- if (data !== undefined) {
4953
- return data;
4954
- } // We tried really hard, but the data doesn't exist.
4955
-
4956
-
4957
- return;
4958
- } // Set the data...
4959
-
4960
-
4961
- this.each(function () {
4962
- // We always store the camelCased key
4963
- dataUser.set(this, key, value);
4964
- });
4965
- }, null, value, arguments.length > 1, null, true);
4966
- },
4967
- removeData: function removeData(key) {
4968
- return this.each(function () {
4969
- dataUser.remove(this, key);
4970
- });
4971
- }
4972
- });
4973
- jQuery.extend({
4974
- queue: function queue(elem, type, data) {
4975
- var queue;
4976
-
4977
- if (elem) {
4978
- type = (type || "fx") + "queue";
4979
- queue = dataPriv.get(elem, type); // Speed up dequeue by getting out quickly if this is just a lookup
4980
-
4981
- if (data) {
4982
- if (!queue || Array.isArray(data)) {
4983
- queue = dataPriv.access(elem, type, jQuery.makeArray(data));
4984
- } else {
4985
- queue.push(data);
4986
- }
4987
- }
4988
-
4989
- return queue || [];
4990
- }
4991
- },
4992
- dequeue: function dequeue(elem, type) {
4993
- type = type || "fx";
4994
-
4995
- var queue = jQuery.queue(elem, type),
4996
- startLength = queue.length,
4997
- fn = queue.shift(),
4998
- hooks = jQuery._queueHooks(elem, type),
4999
- next = function next() {
5000
- jQuery.dequeue(elem, type);
5001
- }; // If the fx queue is dequeued, always remove the progress sentinel
5002
-
5003
-
5004
- if (fn === "inprogress") {
5005
- fn = queue.shift();
5006
- startLength--;
5007
- }
5008
-
5009
- if (fn) {
5010
- // Add a progress sentinel to prevent the fx queue from being
5011
- // automatically dequeued
5012
- if (type === "fx") {
5013
- queue.unshift("inprogress");
5014
- } // Clear up the last queue stop function
5015
-
5016
-
5017
- delete hooks.stop;
5018
- fn.call(elem, next, hooks);
5019
- }
5020
-
5021
- if (!startLength && hooks) {
5022
- hooks.empty.fire();
5023
- }
5024
- },
5025
- // Not public - generate a queueHooks object, or return the current one
5026
- _queueHooks: function _queueHooks(elem, type) {
5027
- var key = type + "queueHooks";
5028
- return dataPriv.get(elem, key) || dataPriv.access(elem, key, {
5029
- empty: jQuery.Callbacks("once memory").add(function () {
5030
- dataPriv.remove(elem, [type + "queue", key]);
5031
- })
5032
- });
5033
- }
5034
- });
5035
- jQuery.fn.extend({
5036
- queue: function queue(type, data) {
5037
- var setter = 2;
5038
-
5039
- if (typeof type !== "string") {
5040
- data = type;
5041
- type = "fx";
5042
- setter--;
5043
- }
5044
-
5045
- if (arguments.length < setter) {
5046
- return jQuery.queue(this[0], type);
5047
- }
5048
-
5049
- return data === undefined ? this : this.each(function () {
5050
- var queue = jQuery.queue(this, type, data); // Ensure a hooks for this queue
5051
-
5052
- jQuery._queueHooks(this, type);
5053
-
5054
- if (type === "fx" && queue[0] !== "inprogress") {
5055
- jQuery.dequeue(this, type);
5056
- }
5057
- });
5058
- },
5059
- dequeue: function dequeue(type) {
5060
- return this.each(function () {
5061
- jQuery.dequeue(this, type);
5062
- });
5063
- },
5064
- clearQueue: function clearQueue(type) {
5065
- return this.queue(type || "fx", []);
5066
- },
5067
- // Get a promise resolved when queues of a certain type
5068
- // are emptied (fx is the type by default)
5069
- promise: function promise(type, obj) {
5070
- var tmp,
5071
- count = 1,
5072
- defer = jQuery.Deferred(),
5073
- elements = this,
5074
- i = this.length,
5075
- resolve = function resolve() {
5076
- if (! --count) {
5077
- defer.resolveWith(elements, [elements]);
5078
- }
5079
- };
5080
-
5081
- if (typeof type !== "string") {
5082
- obj = type;
5083
- type = undefined;
5084
- }
5085
-
5086
- type = type || "fx";
5087
-
5088
- while (i--) {
5089
- tmp = dataPriv.get(elements[i], type + "queueHooks");
5090
-
5091
- if (tmp && tmp.empty) {
5092
- count++;
5093
- tmp.empty.add(resolve);
5094
- }
5095
- }
5096
-
5097
- resolve();
5098
- return defer.promise(obj);
5099
- }
5100
- });
5101
- var pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;
5102
- var rcssNum = new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i");
5103
- var cssExpand = ["Top", "Right", "Bottom", "Left"];
5104
- var documentElement = document.documentElement;
5105
-
5106
- var isAttached = function isAttached(elem) {
5107
- return jQuery.contains(elem.ownerDocument, elem);
5108
- },
5109
- composed = {
5110
- composed: true
5111
- }; // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
5112
- // Check attachment across shadow DOM boundaries when possible (gh-3504)
5113
- // Support: iOS 10.0-10.2 only
5114
- // Early iOS 10 versions support `attachShadow` but not `getRootNode`,
5115
- // leading to errors. We need to check for `getRootNode`.
5116
-
5117
-
5118
- if (documentElement.getRootNode) {
5119
- isAttached = function isAttached(elem) {
5120
- return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;
5121
- };
5122
- }
5123
-
5124
- var isHiddenWithinTree = function isHiddenWithinTree(elem, el) {
5125
- // isHiddenWithinTree might be called from jQuery#filter function;
5126
- // in that case, element will be second argument
5127
- elem = el || elem; // Inline style trumps all
5128
-
5129
- return elem.style.display === "none" || elem.style.display === "" && // Otherwise, check computed style
5130
- // Support: Firefox <=43 - 45
5131
- // Disconnected elements can have computed display: none, so first confirm that elem is
5132
- // in the document.
5133
- isAttached(elem) && jQuery.css(elem, "display") === "none";
5134
- };
5135
-
5136
- function adjustCSS(elem, prop, valueParts, tween) {
5137
- var adjusted,
5138
- scale,
5139
- maxIterations = 20,
5140
- currentValue = tween ? function () {
5141
- return tween.cur();
5142
- } : function () {
5143
- return jQuery.css(elem, prop, "");
5144
- },
5145
- initial = currentValue(),
5146
- unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? "" : "px"),
5147
- // Starting value computation is required for potential unit mismatches
5148
- initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== "px" && +initial) && rcssNum.exec(jQuery.css(elem, prop));
5149
-
5150
- if (initialInUnit && initialInUnit[3] !== unit) {
5151
- // Support: Firefox <=54
5152
- // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
5153
- initial = initial / 2; // Trust units reported by jQuery.css
5154
-
5155
- unit = unit || initialInUnit[3]; // Iteratively approximate from a nonzero starting point
5156
-
5157
- initialInUnit = +initial || 1;
5158
-
5159
- while (maxIterations--) {
5160
- // Evaluate and update our best guess (doubling guesses that zero out).
5161
- // Finish if the scale equals or crosses 1 (making the old*new product non-positive).
5162
- jQuery.style(elem, prop, initialInUnit + unit);
5163
-
5164
- if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {
5165
- maxIterations = 0;
5166
- }
5167
-
5168
- initialInUnit = initialInUnit / scale;
5169
- }
5170
-
5171
- initialInUnit = initialInUnit * 2;
5172
- jQuery.style(elem, prop, initialInUnit + unit); // Make sure we update the tween properties later on
5173
-
5174
- valueParts = valueParts || [];
5175
- }
5176
-
5177
- if (valueParts) {
5178
- initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified
5179
-
5180
- adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];
5181
-
5182
- if (tween) {
5183
- tween.unit = unit;
5184
- tween.start = initialInUnit;
5185
- tween.end = adjusted;
5186
- }
5187
- }
5188
-
5189
- return adjusted;
5190
- }
5191
-
5192
- var defaultDisplayMap = {};
5193
-
5194
- function getDefaultDisplay(elem) {
5195
- var temp,
5196
- doc = elem.ownerDocument,
5197
- nodeName = elem.nodeName,
5198
- display = defaultDisplayMap[nodeName];
5199
-
5200
- if (display) {
5201
- return display;
5202
- }
5203
-
5204
- temp = doc.body.appendChild(doc.createElement(nodeName));
5205
- display = jQuery.css(temp, "display");
5206
- temp.parentNode.removeChild(temp);
5207
-
5208
- if (display === "none") {
5209
- display = "block";
5210
- }
5211
-
5212
- defaultDisplayMap[nodeName] = display;
5213
- return display;
5214
- }
5215
-
5216
- function showHide(elements, show) {
5217
- var display,
5218
- elem,
5219
- values = [],
5220
- index = 0,
5221
- length = elements.length; // Determine new display value for elements that need to change
5222
-
5223
- for (; index < length; index++) {
5224
- elem = elements[index];
5225
-
5226
- if (!elem.style) {
5227
- continue;
5228
- }
5229
-
5230
- display = elem.style.display;
5231
-
5232
- if (show) {
5233
- // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
5234
- // check is required in this first loop unless we have a nonempty display value (either
5235
- // inline or about-to-be-restored)
5236
- if (display === "none") {
5237
- values[index] = dataPriv.get(elem, "display") || null;
5238
-
5239
- if (!values[index]) {
5240
- elem.style.display = "";
5241
- }
5242
- }
5243
-
5244
- if (elem.style.display === "" && isHiddenWithinTree(elem)) {
5245
- values[index] = getDefaultDisplay(elem);
5246
- }
5247
- } else {
5248
- if (display !== "none") {
5249
- values[index] = "none"; // Remember what we're overwriting
5250
-
5251
- dataPriv.set(elem, "display", display);
5252
- }
5253
- }
5254
- } // Set the display of the elements in a second loop to avoid constant reflow
5255
-
5256
-
5257
- for (index = 0; index < length; index++) {
5258
- if (values[index] != null) {
5259
- elements[index].style.display = values[index];
5260
- }
5261
- }
5262
-
5263
- return elements;
5264
- }
5265
-
5266
- jQuery.fn.extend({
5267
- show: function show() {
5268
- return showHide(this, true);
5269
- },
5270
- hide: function hide() {
5271
- return showHide(this);
5272
- },
5273
- toggle: function toggle(state) {
5274
- if (typeof state === "boolean") {
5275
- return state ? this.show() : this.hide();
5276
- }
5277
-
5278
- return this.each(function () {
5279
- if (isHiddenWithinTree(this)) {
5280
- jQuery(this).show();
5281
- } else {
5282
- jQuery(this).hide();
5283
- }
5284
- });
5285
- }
5286
- });
5287
- var rcheckableType = /^(?:checkbox|radio)$/i;
5288
- var rtagName = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i;
5289
- var rscriptType = /^$|^module$|\/(?:java|ecma)script/i;
5290
-
5291
- (function () {
5292
- var fragment = document.createDocumentFragment(),
5293
- div = fragment.appendChild(document.createElement("div")),
5294
- input = document.createElement("input"); // Support: Android 4.0 - 4.3 only
5295
- // Check state lost if the name is set (#11217)
5296
- // Support: Windows Web Apps (WWA)
5297
- // `name` and `type` must use .setAttribute for WWA (#14901)
5298
-
5299
- input.setAttribute("type", "radio");
5300
- input.setAttribute("checked", "checked");
5301
- input.setAttribute("name", "t");
5302
- div.appendChild(input); // Support: Android <=4.1 only
5303
- // Older WebKit doesn't clone checked state correctly in fragments
5304
-
5305
- support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; // Support: IE <=11 only
5306
- // Make sure textarea (and checkbox) defaultValue is properly cloned
5307
-
5308
- div.innerHTML = "<textarea>x</textarea>";
5309
- support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue; // Support: IE <=9 only
5310
- // IE <=9 replaces <option> tags with their contents when inserted outside of
5311
- // the select element.
5312
-
5313
- div.innerHTML = "<option></option>";
5314
- support.option = !!div.lastChild;
5315
- })(); // We have to close these tags to support XHTML (#13200)
5316
-
5317
-
5318
- var wrapMap = {
5319
- // XHTML parsers do not magically insert elements in the
5320
- // same way that tag soup parsers do. So we cannot shorten
5321
- // this by omitting <tbody> or other required elements.
5322
- thead: [1, "<table>", "</table>"],
5323
- col: [2, "<table><colgroup>", "</colgroup></table>"],
5324
- tr: [2, "<table><tbody>", "</tbody></table>"],
5325
- td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
5326
- _default: [0, "", ""]
5327
- };
5328
- wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
5329
- wrapMap.th = wrapMap.td; // Support: IE <=9 only
5330
-
5331
- if (!support.option) {
5332
- wrapMap.optgroup = wrapMap.option = [1, "<select multiple='multiple'>", "</select>"];
5333
- }
5334
-
5335
- function getAll(context, tag) {
5336
- // Support: IE <=9 - 11 only
5337
- // Use typeof to avoid zero-argument method invocation on host objects (#15151)
5338
- var ret;
5339
-
5340
- if (typeof context.getElementsByTagName !== "undefined") {
5341
- ret = context.getElementsByTagName(tag || "*");
5342
- } else if (typeof context.querySelectorAll !== "undefined") {
5343
- ret = context.querySelectorAll(tag || "*");
5344
- } else {
5345
- ret = [];
5346
- }
5347
-
5348
- if (tag === undefined || tag && nodeName(context, tag)) {
5349
- return jQuery.merge([context], ret);
5350
- }
5351
-
5352
- return ret;
5353
- } // Mark scripts as having already been evaluated
5354
-
5355
-
5356
- function setGlobalEval(elems, refElements) {
5357
- var i = 0,
5358
- l = elems.length;
5359
-
5360
- for (; i < l; i++) {
5361
- dataPriv.set(elems[i], "globalEval", !refElements || dataPriv.get(refElements[i], "globalEval"));
5362
- }
5363
- }
5364
-
5365
- var rhtml = /<|&#?\w+;/;
5366
-
5367
- function buildFragment(elems, context, scripts, selection, ignored) {
5368
- var elem,
5369
- tmp,
5370
- tag,
5371
- wrap,
5372
- attached,
5373
- j,
5374
- fragment = context.createDocumentFragment(),
5375
- nodes = [],
5376
- i = 0,
5377
- l = elems.length;
5378
-
5379
- for (; i < l; i++) {
5380
- elem = elems[i];
5381
-
5382
- if (elem || elem === 0) {
5383
- // Add nodes directly
5384
- if (toType(elem) === "object") {
5385
- // Support: Android <=4.0 only, PhantomJS 1 only
5386
- // push.apply(_, arraylike) throws on ancient WebKit
5387
- jQuery.merge(nodes, elem.nodeType ? [elem] : elem); // Convert non-html into a text node
5388
- } else if (!rhtml.test(elem)) {
5389
- nodes.push(context.createTextNode(elem)); // Convert html into DOM nodes
5390
- } else {
5391
- tmp = tmp || fragment.appendChild(context.createElement("div")); // Deserialize a standard representation
5392
-
5393
- tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase();
5394
- wrap = wrapMap[tag] || wrapMap._default;
5395
- tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2]; // Descend through wrappers to the right content
5396
-
5397
- j = wrap[0];
5398
-
5399
- while (j--) {
5400
- tmp = tmp.lastChild;
5401
- } // Support: Android <=4.0 only, PhantomJS 1 only
5402
- // push.apply(_, arraylike) throws on ancient WebKit
5403
-
5404
-
5405
- jQuery.merge(nodes, tmp.childNodes); // Remember the top-level container
5406
-
5407
- tmp = fragment.firstChild; // Ensure the created nodes are orphaned (#12392)
5408
-
5409
- tmp.textContent = "";
5410
- }
5411
- }
5412
- } // Remove wrapper from fragment
5413
-
5414
-
5415
- fragment.textContent = "";
5416
- i = 0;
5417
-
5418
- while (elem = nodes[i++]) {
5419
- // Skip elements already in the context collection (trac-4087)
5420
- if (selection && jQuery.inArray(elem, selection) > -1) {
5421
- if (ignored) {
5422
- ignored.push(elem);
5423
- }
5424
-
5425
- continue;
5426
- }
5427
-
5428
- attached = isAttached(elem); // Append to fragment
5429
-
5430
- tmp = getAll(fragment.appendChild(elem), "script"); // Preserve script evaluation history
5431
-
5432
- if (attached) {
5433
- setGlobalEval(tmp);
5434
- } // Capture executables
5435
-
5436
-
5437
- if (scripts) {
5438
- j = 0;
5439
-
5440
- while (elem = tmp[j++]) {
5441
- if (rscriptType.test(elem.type || "")) {
5442
- scripts.push(elem);
5443
- }
5444
- }
5445
- }
5446
- }
5447
-
5448
- return fragment;
5449
- }
5450
-
5451
- var rkeyEvent = /^key/,
5452
- rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
5453
- rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
5454
-
5455
- function returnTrue() {
5456
- return true;
5457
- }
5458
-
5459
- function returnFalse() {
5460
- return false;
5461
- } // Support: IE <=9 - 11+
5462
- // focus() and blur() are asynchronous, except when they are no-op.
5463
- // So expect focus to be synchronous when the element is already active,
5464
- // and blur to be synchronous when the element is not already active.
5465
- // (focus and blur are always synchronous in other supported browsers,
5466
- // this just defines when we can count on it).
5467
-
5468
-
5469
- function expectSync(elem, type) {
5470
- return elem === safeActiveElement() === (type === "focus");
5471
- } // Support: IE <=9 only
5472
- // Accessing document.activeElement can throw unexpectedly
5473
- // https://bugs.jquery.com/ticket/13393
5474
-
5475
-
5476
- function safeActiveElement() {
5477
- try {
5478
- return document.activeElement;
5479
- } catch (err) {}
5480
- }
5481
-
5482
- function _on(elem, types, selector, data, fn, one) {
5483
- var origFn, type; // Types can be a map of types/handlers
5484
-
5485
- if (_typeof(types) === "object") {
5486
- // ( types-Object, selector, data )
5487
- if (typeof selector !== "string") {
5488
- // ( types-Object, data )
5489
- data = data || selector;
5490
- selector = undefined;
5491
- }
5492
-
5493
- for (type in types) {
5494
- _on(elem, type, selector, data, types[type], one);
5495
- }
5496
-
5497
- return elem;
5498
- }
5499
-
5500
- if (data == null && fn == null) {
5501
- // ( types, fn )
5502
- fn = selector;
5503
- data = selector = undefined;
5504
- } else if (fn == null) {
5505
- if (typeof selector === "string") {
5506
- // ( types, selector, fn )
5507
- fn = data;
5508
- data = undefined;
5509
- } else {
5510
- // ( types, data, fn )
5511
- fn = data;
5512
- data = selector;
5513
- selector = undefined;
5514
- }
5515
- }
5516
-
5517
- if (fn === false) {
5518
- fn = returnFalse;
5519
- } else if (!fn) {
5520
- return elem;
5521
- }
5522
-
5523
- if (one === 1) {
5524
- origFn = fn;
5525
-
5526
- fn = function fn(event) {
5527
- // Can use an empty set, since event contains the info
5528
- jQuery().off(event);
5529
- return origFn.apply(this, arguments);
5530
- }; // Use same guid so caller can remove using origFn
5531
-
5532
-
5533
- fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);
5534
- }
5535
-
5536
- return elem.each(function () {
5537
- jQuery.event.add(this, types, fn, data, selector);
5538
- });
5539
- }
5540
- /*
5541
- * Helper functions for managing events -- not part of the public interface.
5542
- * Props to Dean Edwards' addEvent library for many of the ideas.
5543
- */
5544
-
5545
-
5546
- jQuery.event = {
5547
- global: {},
5548
- add: function add(elem, types, handler, data, selector) {
5549
- var handleObjIn,
5550
- eventHandle,
5551
- tmp,
5552
- events,
5553
- t,
5554
- handleObj,
5555
- special,
5556
- handlers,
5557
- type,
5558
- namespaces,
5559
- origType,
5560
- elemData = dataPriv.get(elem); // Only attach events to objects that accept data
5561
-
5562
- if (!acceptData(elem)) {
5563
- return;
5564
- } // Caller can pass in an object of custom data in lieu of the handler
5565
-
5566
-
5567
- if (handler.handler) {
5568
- handleObjIn = handler;
5569
- handler = handleObjIn.handler;
5570
- selector = handleObjIn.selector;
5571
- } // Ensure that invalid selectors throw exceptions at attach time
5572
- // Evaluate against documentElement in case elem is a non-element node (e.g., document)
5573
-
5574
-
5575
- if (selector) {
5576
- jQuery.find.matchesSelector(documentElement, selector);
5577
- } // Make sure that the handler has a unique ID, used to find/remove it later
5578
-
5579
-
5580
- if (!handler.guid) {
5581
- handler.guid = jQuery.guid++;
5582
- } // Init the element's event structure and main handler, if this is the first
5583
-
5584
-
5585
- if (!(events = elemData.events)) {
5586
- events = elemData.events = Object.create(null);
5587
- }
5588
-
5589
- if (!(eventHandle = elemData.handle)) {
5590
- eventHandle = elemData.handle = function (e) {
5591
- // Discard the second event of a jQuery.event.trigger() and
5592
- // when an event is called after a page has unloaded
5593
- return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;
5594
- };
5595
- } // Handle multiple events separated by a space
5596
-
5597
-
5598
- types = (types || "").match(rnothtmlwhite) || [""];
5599
- t = types.length;
5600
-
5601
- while (t--) {
5602
- tmp = rtypenamespace.exec(types[t]) || [];
5603
- type = origType = tmp[1];
5604
- namespaces = (tmp[2] || "").split(".").sort(); // There *must* be a type, no attaching namespace-only handlers
5605
-
5606
- if (!type) {
5607
- continue;
5608
- } // If event changes its type, use the special event handlers for the changed type
5609
-
5610
-
5611
- special = jQuery.event.special[type] || {}; // If selector defined, determine special event api type, otherwise given type
5612
-
5613
- type = (selector ? special.delegateType : special.bindType) || type; // Update special based on newly reset type
5614
-
5615
- special = jQuery.event.special[type] || {}; // handleObj is passed to all event handlers
5616
-
5617
- handleObj = jQuery.extend({
5618
- type: type,
5619
- origType: origType,
5620
- data: data,
5621
- handler: handler,
5622
- guid: handler.guid,
5623
- selector: selector,
5624
- needsContext: selector && jQuery.expr.match.needsContext.test(selector),
5625
- namespace: namespaces.join(".")
5626
- }, handleObjIn); // Init the event handler queue if we're the first
5627
-
5628
- if (!(handlers = events[type])) {
5629
- handlers = events[type] = [];
5630
- handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false
5631
-
5632
- if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {
5633
- if (elem.addEventListener) {
5634
- elem.addEventListener(type, eventHandle);
5635
- }
5636
- }
5637
- }
5638
-
5639
- if (special.add) {
5640
- special.add.call(elem, handleObj);
5641
-
5642
- if (!handleObj.handler.guid) {
5643
- handleObj.handler.guid = handler.guid;
5644
- }
5645
- } // Add to the element's handler list, delegates in front
5646
-
5647
-
5648
- if (selector) {
5649
- handlers.splice(handlers.delegateCount++, 0, handleObj);
5650
- } else {
5651
- handlers.push(handleObj);
5652
- } // Keep track of which events have ever been used, for event optimization
5653
-
5654
-
5655
- jQuery.event.global[type] = true;
5656
- }
5657
- },
5658
- // Detach an event or set of events from an element
5659
- remove: function remove(elem, types, handler, selector, mappedTypes) {
5660
- var j,
5661
- origCount,
5662
- tmp,
5663
- events,
5664
- t,
5665
- handleObj,
5666
- special,
5667
- handlers,
5668
- type,
5669
- namespaces,
5670
- origType,
5671
- elemData = dataPriv.hasData(elem) && dataPriv.get(elem);
5672
-
5673
- if (!elemData || !(events = elemData.events)) {
5674
- return;
5675
- } // Once for each type.namespace in types; type may be omitted
5676
-
5677
-
5678
- types = (types || "").match(rnothtmlwhite) || [""];
5679
- t = types.length;
5680
-
5681
- while (t--) {
5682
- tmp = rtypenamespace.exec(types[t]) || [];
5683
- type = origType = tmp[1];
5684
- namespaces = (tmp[2] || "").split(".").sort(); // Unbind all events (on this namespace, if provided) for the element
5685
-
5686
- if (!type) {
5687
- for (type in events) {
5688
- jQuery.event.remove(elem, type + types[t], handler, selector, true);
5689
- }
5690
-
5691
- continue;
5692
- }
5693
-
5694
- special = jQuery.event.special[type] || {};
5695
- type = (selector ? special.delegateType : special.bindType) || type;
5696
- handlers = events[type] || [];
5697
- tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)"); // Remove matching events
5698
-
5699
- origCount = j = handlers.length;
5700
-
5701
- while (j--) {
5702
- handleObj = handlers[j];
5703
-
5704
- if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === "**" && handleObj.selector)) {
5705
- handlers.splice(j, 1);
5706
-
5707
- if (handleObj.selector) {
5708
- handlers.delegateCount--;
5709
- }
5710
-
5711
- if (special.remove) {
5712
- special.remove.call(elem, handleObj);
5713
- }
5714
- }
5715
- } // Remove generic event handler if we removed something and no more handlers exist
5716
- // (avoids potential for endless recursion during removal of special event handlers)
5717
-
5718
-
5719
- if (origCount && !handlers.length) {
5720
- if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {
5721
- jQuery.removeEvent(elem, type, elemData.handle);
5722
- }
5723
-
5724
- delete events[type];
5725
- }
5726
- } // Remove data and the expando if it's no longer used
5727
-
5728
-
5729
- if (jQuery.isEmptyObject(events)) {
5730
- dataPriv.remove(elem, "handle events");
5731
- }
5732
- },
5733
- dispatch: function dispatch(nativeEvent) {
5734
- var i,
5735
- j,
5736
- ret,
5737
- matched,
5738
- handleObj,
5739
- handlerQueue,
5740
- args = new Array(arguments.length),
5741
- // Make a writable jQuery.Event from the native event object
5742
- event = jQuery.event.fix(nativeEvent),
5743
- handlers = (dataPriv.get(this, "events") || Object.create(null))[event.type] || [],
5744
- special = jQuery.event.special[event.type] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event
5745
-
5746
- args[0] = event;
5747
-
5748
- for (i = 1; i < arguments.length; i++) {
5749
- args[i] = arguments[i];
5750
- }
5751
-
5752
- event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired
5753
-
5754
- if (special.preDispatch && special.preDispatch.call(this, event) === false) {
5755
- return;
5756
- } // Determine handlers
5757
-
5758
-
5759
- handlerQueue = jQuery.event.handlers.call(this, event, handlers); // Run delegates first; they may want to stop propagation beneath us
5760
-
5761
- i = 0;
5762
-
5763
- while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {
5764
- event.currentTarget = matched.elem;
5765
- j = 0;
5766
-
5767
- while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {
5768
- // If the event is namespaced, then each handler is only invoked if it is
5769
- // specially universal or its namespaces are a superset of the event's.
5770
- if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {
5771
- event.handleObj = handleObj;
5772
- event.data = handleObj.data;
5773
- ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);
5774
-
5775
- if (ret !== undefined) {
5776
- if ((event.result = ret) === false) {
5777
- event.preventDefault();
5778
- event.stopPropagation();
5779
- }
5780
- }
5781
- }
5782
- }
5783
- } // Call the postDispatch hook for the mapped type
5784
-
5785
-
5786
- if (special.postDispatch) {
5787
- special.postDispatch.call(this, event);
5788
- }
5789
-
5790
- return event.result;
5791
- },
5792
- handlers: function handlers(event, _handlers) {
5793
- var i,
5794
- handleObj,
5795
- sel,
5796
- matchedHandlers,
5797
- matchedSelectors,
5798
- handlerQueue = [],
5799
- delegateCount = _handlers.delegateCount,
5800
- cur = event.target; // Find delegate handlers
5801
-
5802
- if (delegateCount && // Support: IE <=9
5803
- // Black-hole SVG <use> instance trees (trac-13180)
5804
- cur.nodeType && // Support: Firefox <=42
5805
- // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
5806
- // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
5807
- // Support: IE 11 only
5808
- // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
5809
- !(event.type === "click" && event.button >= 1)) {
5810
- for (; cur !== this; cur = cur.parentNode || this) {
5811
- // Don't check non-elements (#13208)
5812
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
5813
- if (cur.nodeType === 1 && !(event.type === "click" && cur.disabled === true)) {
5814
- matchedHandlers = [];
5815
- matchedSelectors = {};
5816
-
5817
- for (i = 0; i < delegateCount; i++) {
5818
- handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (#13203)
5819
-
5820
- sel = handleObj.selector + " ";
5821
-
5822
- if (matchedSelectors[sel] === undefined) {
5823
- matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;
5824
- }
5825
-
5826
- if (matchedSelectors[sel]) {
5827
- matchedHandlers.push(handleObj);
5828
- }
5829
- }
5830
-
5831
- if (matchedHandlers.length) {
5832
- handlerQueue.push({
5833
- elem: cur,
5834
- handlers: matchedHandlers
5835
- });
5836
- }
5837
- }
5838
- }
5839
- } // Add the remaining (directly-bound) handlers
5840
-
5841
-
5842
- cur = this;
5843
-
5844
- if (delegateCount < _handlers.length) {
5845
- handlerQueue.push({
5846
- elem: cur,
5847
- handlers: _handlers.slice(delegateCount)
5848
- });
5849
- }
5850
-
5851
- return handlerQueue;
5852
- },
5853
- addProp: function addProp(name, hook) {
5854
- Object.defineProperty(jQuery.Event.prototype, name, {
5855
- enumerable: true,
5856
- configurable: true,
5857
- get: isFunction(hook) ? function () {
5858
- if (this.originalEvent) {
5859
- return hook(this.originalEvent);
5860
- }
5861
- } : function () {
5862
- if (this.originalEvent) {
5863
- return this.originalEvent[name];
5864
- }
5865
- },
5866
- set: function set(value) {
5867
- Object.defineProperty(this, name, {
5868
- enumerable: true,
5869
- configurable: true,
5870
- writable: true,
5871
- value: value
5872
- });
5873
- }
5874
- });
5875
- },
5876
- fix: function fix(originalEvent) {
5877
- return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);
5878
- },
5879
- special: {
5880
- load: {
5881
- // Prevent triggered image.load events from bubbling to window.load
5882
- noBubble: true
5883
- },
5884
- click: {
5885
- // Utilize native event to ensure correct state for checkable inputs
5886
- setup: function setup(data) {
5887
- // For mutual compressibility with _default, replace `this` access with a local var.
5888
- // `|| data` is dead code meant only to preserve the variable through minification.
5889
- var el = this || data; // Claim the first handler
5890
-
5891
- if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
5892
- // dataPriv.set( el, "click", ... )
5893
- leverageNative(el, "click", returnTrue);
5894
- } // Return false to allow normal processing in the caller
5895
-
5896
-
5897
- return false;
5898
- },
5899
- trigger: function trigger(data) {
5900
- // For mutual compressibility with _default, replace `this` access with a local var.
5901
- // `|| data` is dead code meant only to preserve the variable through minification.
5902
- var el = this || data; // Force setup before triggering a click
5903
-
5904
- if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
5905
- leverageNative(el, "click");
5906
- } // Return non-false to allow normal event-path propagation
5907
-
5908
-
5909
- return true;
5910
- },
5911
- // For cross-browser consistency, suppress native .click() on links
5912
- // Also prevent it if we're currently inside a leveraged native-event stack
5913
- _default: function _default(event) {
5914
- var target = event.target;
5915
- return rcheckableType.test(target.type) && target.click && nodeName(target, "input") && dataPriv.get(target, "click") || nodeName(target, "a");
5916
- }
5917
- },
5918
- beforeunload: {
5919
- postDispatch: function postDispatch(event) {
5920
- // Support: Firefox 20+
5921
- // Firefox doesn't alert if the returnValue field is not set.
5922
- if (event.result !== undefined && event.originalEvent) {
5923
- event.originalEvent.returnValue = event.result;
5924
- }
5925
- }
5926
- }
5927
- }
5928
- }; // Ensure the presence of an event listener that handles manually-triggered
5929
- // synthetic events by interrupting progress until reinvoked in response to
5930
- // *native* events that it fires directly, ensuring that state changes have
5931
- // already occurred before other listeners are invoked.
5932
-
5933
- function leverageNative(el, type, expectSync) {
5934
- // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
5935
- if (!expectSync) {
5936
- if (dataPriv.get(el, type) === undefined) {
5937
- jQuery.event.add(el, type, returnTrue);
5938
- }
5939
-
5940
- return;
5941
- } // Register the controller as a special universal handler for all event namespaces
5942
-
5943
-
5944
- dataPriv.set(el, type, false);
5945
- jQuery.event.add(el, type, {
5946
- namespace: false,
5947
- handler: function handler(event) {
5948
- var notAsync,
5949
- result,
5950
- saved = dataPriv.get(this, type);
5951
-
5952
- if (event.isTrigger & 1 && this[type]) {
5953
- // Interrupt processing of the outer synthetic .trigger()ed event
5954
- // Saved data should be false in such cases, but might be a leftover capture object
5955
- // from an async native handler (gh-4350)
5956
- if (!saved.length) {
5957
- // Store arguments for use when handling the inner native event
5958
- // There will always be at least one argument (an event object), so this array
5959
- // will not be confused with a leftover capture object.
5960
- saved = _slice.call(arguments);
5961
- dataPriv.set(this, type, saved); // Trigger the native event and capture its result
5962
- // Support: IE <=9 - 11+
5963
- // focus() and blur() are asynchronous
5964
-
5965
- notAsync = expectSync(this, type);
5966
- this[type]();
5967
- result = dataPriv.get(this, type);
5968
-
5969
- if (saved !== result || notAsync) {
5970
- dataPriv.set(this, type, false);
5971
- } else {
5972
- result = {};
5973
- }
5974
-
5975
- if (saved !== result) {
5976
- // Cancel the outer synthetic event
5977
- event.stopImmediatePropagation();
5978
- event.preventDefault();
5979
- return result.value;
5980
- } // If this is an inner synthetic event for an event with a bubbling surrogate
5981
- // (focus or blur), assume that the surrogate already propagated from triggering the
5982
- // native event and prevent that from happening again here.
5983
- // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
5984
- // bubbling surrogate propagates *after* the non-bubbling base), but that seems
5985
- // less bad than duplication.
5986
-
5987
- } else if ((jQuery.event.special[type] || {}).delegateType) {
5988
- event.stopPropagation();
5989
- } // If this is a native event triggered above, everything is now in order
5990
- // Fire an inner synthetic event with the original arguments
5991
-
5992
- } else if (saved.length) {
5993
- // ...and capture the result
5994
- dataPriv.set(this, type, {
5995
- value: jQuery.event.trigger( // Support: IE <=9 - 11+
5996
- // Extend with the prototype to reset the above stopImmediatePropagation()
5997
- jQuery.extend(saved[0], jQuery.Event.prototype), saved.slice(1), this)
5998
- }); // Abort handling of the native event
5999
-
6000
- event.stopImmediatePropagation();
6001
- }
6002
- }
6003
- });
6004
- }
6005
-
6006
- jQuery.removeEvent = function (elem, type, handle) {
6007
- // This "if" is needed for plain objects
6008
- if (elem.removeEventListener) {
6009
- elem.removeEventListener(type, handle);
6010
- }
6011
- };
6012
-
6013
- jQuery.Event = function (src, props) {
6014
- // Allow instantiation without the 'new' keyword
6015
- if (!(this instanceof jQuery.Event)) {
6016
- return new jQuery.Event(src, props);
6017
- } // Event object
6018
-
6019
-
6020
- if (src && src.type) {
6021
- this.originalEvent = src;
6022
- this.type = src.type; // Events bubbling up the document may have been marked as prevented
6023
- // by a handler lower down the tree; reflect the correct value.
6024
-
6025
- this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android <=2.3 only
6026
- src.returnValue === false ? returnTrue : returnFalse; // Create target properties
6027
- // Support: Safari <=6 - 7 only
6028
- // Target should not be a text node (#504, #13143)
6029
-
6030
- this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;
6031
- this.currentTarget = src.currentTarget;
6032
- this.relatedTarget = src.relatedTarget; // Event type
6033
- } else {
6034
- this.type = src;
6035
- } // Put explicitly provided properties onto the event object
6036
-
6037
-
6038
- if (props) {
6039
- jQuery.extend(this, props);
6040
- } // Create a timestamp if incoming event doesn't have one
6041
-
6042
-
6043
- this.timeStamp = src && src.timeStamp || Date.now(); // Mark it as fixed
6044
-
6045
- this[jQuery.expando] = true;
6046
- }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
6047
- // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
6048
-
6049
-
6050
- jQuery.Event.prototype = {
6051
- constructor: jQuery.Event,
6052
- isDefaultPrevented: returnFalse,
6053
- isPropagationStopped: returnFalse,
6054
- isImmediatePropagationStopped: returnFalse,
6055
- isSimulated: false,
6056
- preventDefault: function preventDefault() {
6057
- var e = this.originalEvent;
6058
- this.isDefaultPrevented = returnTrue;
6059
-
6060
- if (e && !this.isSimulated) {
6061
- e.preventDefault();
6062
- }
6063
- },
6064
- stopPropagation: function stopPropagation() {
6065
- var e = this.originalEvent;
6066
- this.isPropagationStopped = returnTrue;
6067
-
6068
- if (e && !this.isSimulated) {
6069
- e.stopPropagation();
6070
- }
6071
- },
6072
- stopImmediatePropagation: function stopImmediatePropagation() {
6073
- var e = this.originalEvent;
6074
- this.isImmediatePropagationStopped = returnTrue;
6075
-
6076
- if (e && !this.isSimulated) {
6077
- e.stopImmediatePropagation();
6078
- }
6079
-
6080
- this.stopPropagation();
6081
- }
6082
- }; // Includes all common event props including KeyEvent and MouseEvent specific props
6083
-
6084
- jQuery.each({
6085
- altKey: true,
6086
- bubbles: true,
6087
- cancelable: true,
6088
- changedTouches: true,
6089
- ctrlKey: true,
6090
- detail: true,
6091
- eventPhase: true,
6092
- metaKey: true,
6093
- pageX: true,
6094
- pageY: true,
6095
- shiftKey: true,
6096
- view: true,
6097
- "char": true,
6098
- code: true,
6099
- charCode: true,
6100
- key: true,
6101
- keyCode: true,
6102
- button: true,
6103
- buttons: true,
6104
- clientX: true,
6105
- clientY: true,
6106
- offsetX: true,
6107
- offsetY: true,
6108
- pointerId: true,
6109
- pointerType: true,
6110
- screenX: true,
6111
- screenY: true,
6112
- targetTouches: true,
6113
- toElement: true,
6114
- touches: true,
6115
- which: function which(event) {
6116
- var button = event.button; // Add which for key events
6117
-
6118
- if (event.which == null && rkeyEvent.test(event.type)) {
6119
- return event.charCode != null ? event.charCode : event.keyCode;
6120
- } // Add which for click: 1 === left; 2 === middle; 3 === right
6121
-
6122
-
6123
- if (!event.which && button !== undefined && rmouseEvent.test(event.type)) {
6124
- if (button & 1) {
6125
- return 1;
6126
- }
6127
-
6128
- if (button & 2) {
6129
- return 3;
6130
- }
6131
-
6132
- if (button & 4) {
6133
- return 2;
6134
- }
6135
-
6136
- return 0;
6137
- }
6138
-
6139
- return event.which;
6140
- }
6141
- }, jQuery.event.addProp);
6142
- jQuery.each({
6143
- focus: "focusin",
6144
- blur: "focusout"
6145
- }, function (type, delegateType) {
6146
- jQuery.event.special[type] = {
6147
- // Utilize native event if possible so blur/focus sequence is correct
6148
- setup: function setup() {
6149
- // Claim the first handler
6150
- // dataPriv.set( this, "focus", ... )
6151
- // dataPriv.set( this, "blur", ... )
6152
- leverageNative(this, type, expectSync); // Return false to allow normal processing in the caller
6153
-
6154
- return false;
6155
- },
6156
- trigger: function trigger() {
6157
- // Force setup before trigger
6158
- leverageNative(this, type); // Return non-false to allow normal event-path propagation
6159
-
6160
- return true;
6161
- },
6162
- delegateType: delegateType
6163
- };
6164
- }); // Create mouseenter/leave events using mouseover/out and event-time checks
6165
- // so that event delegation works in jQuery.
6166
- // Do the same for pointerenter/pointerleave and pointerover/pointerout
6167
- //
6168
- // Support: Safari 7 only
6169
- // Safari sends mouseenter too often; see:
6170
- // https://bugs.chromium.org/p/chromium/issues/detail?id=470258
6171
- // for the description of the bug (it existed in older Chrome versions as well).
6172
-
6173
- jQuery.each({
6174
- mouseenter: "mouseover",
6175
- mouseleave: "mouseout",
6176
- pointerenter: "pointerover",
6177
- pointerleave: "pointerout"
6178
- }, function (orig, fix) {
6179
- jQuery.event.special[orig] = {
6180
- delegateType: fix,
6181
- bindType: fix,
6182
- handle: function handle(event) {
6183
- var ret,
6184
- target = this,
6185
- related = event.relatedTarget,
6186
- handleObj = event.handleObj; // For mouseenter/leave call the handler if related is outside the target.
6187
- // NB: No relatedTarget if the mouse left/entered the browser window
6188
-
6189
- if (!related || related !== target && !jQuery.contains(target, related)) {
6190
- event.type = handleObj.origType;
6191
- ret = handleObj.handler.apply(this, arguments);
6192
- event.type = fix;
6193
- }
6194
-
6195
- return ret;
6196
- }
6197
- };
6198
- });
6199
- jQuery.fn.extend({
6200
- on: function on(types, selector, data, fn) {
6201
- return _on(this, types, selector, data, fn);
6202
- },
6203
- one: function one(types, selector, data, fn) {
6204
- return _on(this, types, selector, data, fn, 1);
6205
- },
6206
- off: function off(types, selector, fn) {
6207
- var handleObj, type;
6208
-
6209
- if (types && types.preventDefault && types.handleObj) {
6210
- // ( event ) dispatched jQuery.Event
6211
- handleObj = types.handleObj;
6212
- jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);
6213
- return this;
6214
- }
6215
-
6216
- if (_typeof(types) === "object") {
6217
- // ( types-object [, selector] )
6218
- for (type in types) {
6219
- this.off(type, selector, types[type]);
6220
- }
6221
-
6222
- return this;
6223
- }
6224
-
6225
- if (selector === false || typeof selector === "function") {
6226
- // ( types [, fn] )
6227
- fn = selector;
6228
- selector = undefined;
6229
- }
6230
-
6231
- if (fn === false) {
6232
- fn = returnFalse;
6233
- }
6234
-
6235
- return this.each(function () {
6236
- jQuery.event.remove(this, types, fn, selector);
6237
- });
6238
- }
6239
- });
6240
- var // Support: IE <=10 - 11, Edge 12 - 13 only
6241
- // In IE/Edge using regex groups here causes severe slowdowns.
6242
- // See https://connect.microsoft.com/IE/feedback/details/1736512/
6243
- rnoInnerhtml = /<script|<style|<link/i,
6244
- // checked="checked" or checked
6245
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
6246
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; // Prefer a tbody over its parent table for containing new rows
6247
-
6248
- function manipulationTarget(elem, content) {
6249
- if (nodeName(elem, "table") && nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr")) {
6250
- return jQuery(elem).children("tbody")[0] || elem;
6251
- }
6252
-
6253
- return elem;
6254
- } // Replace/restore the type attribute of script elements for safe DOM manipulation
6255
-
6256
-
6257
- function disableScript(elem) {
6258
- elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
6259
- return elem;
6260
- }
6261
-
6262
- function restoreScript(elem) {
6263
- if ((elem.type || "").slice(0, 5) === "true/") {
6264
- elem.type = elem.type.slice(5);
6265
- } else {
6266
- elem.removeAttribute("type");
6267
- }
6268
-
6269
- return elem;
6270
- }
6271
-
6272
- function cloneCopyEvent(src, dest) {
6273
- var i, l, type, pdataOld, udataOld, udataCur, events;
6274
-
6275
- if (dest.nodeType !== 1) {
6276
- return;
6277
- } // 1. Copy private data: events, handlers, etc.
6278
-
6279
-
6280
- if (dataPriv.hasData(src)) {
6281
- pdataOld = dataPriv.get(src);
6282
- events = pdataOld.events;
6283
-
6284
- if (events) {
6285
- dataPriv.remove(dest, "handle events");
6286
-
6287
- for (type in events) {
6288
- for (i = 0, l = events[type].length; i < l; i++) {
6289
- jQuery.event.add(dest, type, events[type][i]);
6290
- }
6291
- }
6292
- }
6293
- } // 2. Copy user data
6294
-
6295
-
6296
- if (dataUser.hasData(src)) {
6297
- udataOld = dataUser.access(src);
6298
- udataCur = jQuery.extend({}, udataOld);
6299
- dataUser.set(dest, udataCur);
6300
- }
6301
- } // Fix IE bugs, see support tests
6302
-
6303
-
6304
- function fixInput(src, dest) {
6305
- var nodeName = dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button.
6306
-
6307
- if (nodeName === "input" && rcheckableType.test(src.type)) {
6308
- dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options
6309
- } else if (nodeName === "input" || nodeName === "textarea") {
6310
- dest.defaultValue = src.defaultValue;
6311
- }
6312
- }
6313
-
6314
- function domManip(collection, args, callback, ignored) {
6315
- // Flatten any nested arrays
6316
- args = flat(args);
6317
- var fragment,
6318
- first,
6319
- scripts,
6320
- hasScripts,
6321
- node,
6322
- doc,
6323
- i = 0,
6324
- l = collection.length,
6325
- iNoClone = l - 1,
6326
- value = args[0],
6327
- valueIsFunction = isFunction(value); // We can't cloneNode fragments that contain checked, in WebKit
6328
-
6329
- if (valueIsFunction || l > 1 && typeof value === "string" && !support.checkClone && rchecked.test(value)) {
6330
- return collection.each(function (index) {
6331
- var self = collection.eq(index);
6332
-
6333
- if (valueIsFunction) {
6334
- args[0] = value.call(this, index, self.html());
6335
- }
6336
-
6337
- domManip(self, args, callback, ignored);
6338
- });
6339
- }
6340
-
6341
- if (l) {
6342
- fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);
6343
- first = fragment.firstChild;
6344
-
6345
- if (fragment.childNodes.length === 1) {
6346
- fragment = first;
6347
- } // Require either new content or an interest in ignored elements to invoke the callback
6348
-
6349
-
6350
- if (first || ignored) {
6351
- scripts = jQuery.map(getAll(fragment, "script"), disableScript);
6352
- hasScripts = scripts.length; // Use the original fragment for the last item
6353
- // instead of the first because it can end up
6354
- // being emptied incorrectly in certain situations (#8070).
6355
-
6356
- for (; i < l; i++) {
6357
- node = fragment;
6358
-
6359
- if (i !== iNoClone) {
6360
- node = jQuery.clone(node, true, true); // Keep references to cloned scripts for later restoration
6361
-
6362
- if (hasScripts) {
6363
- // Support: Android <=4.0 only, PhantomJS 1 only
6364
- // push.apply(_, arraylike) throws on ancient WebKit
6365
- jQuery.merge(scripts, getAll(node, "script"));
6366
- }
6367
- }
6368
-
6369
- callback.call(collection[i], node, i);
6370
- }
6371
-
6372
- if (hasScripts) {
6373
- doc = scripts[scripts.length - 1].ownerDocument; // Reenable scripts
6374
-
6375
- jQuery.map(scripts, restoreScript); // Evaluate executable scripts on first document insertion
6376
-
6377
- for (i = 0; i < hasScripts; i++) {
6378
- node = scripts[i];
6379
-
6380
- if (rscriptType.test(node.type || "") && !dataPriv.access(node, "globalEval") && jQuery.contains(doc, node)) {
6381
- if (node.src && (node.type || "").toLowerCase() !== "module") {
6382
- // Optional AJAX dependency, but won't run scripts if not present
6383
- if (jQuery._evalUrl && !node.noModule) {
6384
- jQuery._evalUrl(node.src, {
6385
- nonce: node.nonce || node.getAttribute("nonce")
6386
- }, doc);
6387
- }
6388
- } else {
6389
- DOMEval(node.textContent.replace(rcleanScript, ""), node, doc);
6390
- }
6391
- }
6392
- }
6393
- }
6394
- }
6395
- }
6396
-
6397
- return collection;
6398
- }
6399
-
6400
- function _remove(elem, selector, keepData) {
6401
- var node,
6402
- nodes = selector ? jQuery.filter(selector, elem) : elem,
6403
- i = 0;
6404
-
6405
- for (; (node = nodes[i]) != null; i++) {
6406
- if (!keepData && node.nodeType === 1) {
6407
- jQuery.cleanData(getAll(node));
6408
- }
6409
-
6410
- if (node.parentNode) {
6411
- if (keepData && isAttached(node)) {
6412
- setGlobalEval(getAll(node, "script"));
6413
- }
6414
-
6415
- node.parentNode.removeChild(node);
6416
- }
6417
- }
6418
-
6419
- return elem;
6420
- }
6421
-
6422
- jQuery.extend({
6423
- htmlPrefilter: function htmlPrefilter(html) {
6424
- return html;
6425
- },
6426
- clone: function clone(elem, dataAndEvents, deepDataAndEvents) {
6427
- var i,
6428
- l,
6429
- srcElements,
6430
- destElements,
6431
- clone = elem.cloneNode(true),
6432
- inPage = isAttached(elem); // Fix IE cloning issues
6433
-
6434
- if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {
6435
- // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
6436
- destElements = getAll(clone);
6437
- srcElements = getAll(elem);
6438
-
6439
- for (i = 0, l = srcElements.length; i < l; i++) {
6440
- fixInput(srcElements[i], destElements[i]);
6441
- }
6442
- } // Copy the events from the original to the clone
6443
-
6444
-
6445
- if (dataAndEvents) {
6446
- if (deepDataAndEvents) {
6447
- srcElements = srcElements || getAll(elem);
6448
- destElements = destElements || getAll(clone);
6449
-
6450
- for (i = 0, l = srcElements.length; i < l; i++) {
6451
- cloneCopyEvent(srcElements[i], destElements[i]);
6452
- }
6453
- } else {
6454
- cloneCopyEvent(elem, clone);
6455
- }
6456
- } // Preserve script evaluation history
6457
-
6458
-
6459
- destElements = getAll(clone, "script");
6460
-
6461
- if (destElements.length > 0) {
6462
- setGlobalEval(destElements, !inPage && getAll(elem, "script"));
6463
- } // Return the cloned set
6464
-
6465
-
6466
- return clone;
6467
- },
6468
- cleanData: function cleanData(elems) {
6469
- var data,
6470
- elem,
6471
- type,
6472
- special = jQuery.event.special,
6473
- i = 0;
6474
-
6475
- for (; (elem = elems[i]) !== undefined; i++) {
6476
- if (acceptData(elem)) {
6477
- if (data = elem[dataPriv.expando]) {
6478
- if (data.events) {
6479
- for (type in data.events) {
6480
- if (special[type]) {
6481
- jQuery.event.remove(elem, type); // This is a shortcut to avoid jQuery.event.remove's overhead
6482
- } else {
6483
- jQuery.removeEvent(elem, type, data.handle);
6484
- }
6485
- }
6486
- } // Support: Chrome <=35 - 45+
6487
- // Assign undefined instead of using delete, see Data#remove
6488
-
6489
-
6490
- elem[dataPriv.expando] = undefined;
6491
- }
6492
-
6493
- if (elem[dataUser.expando]) {
6494
- // Support: Chrome <=35 - 45+
6495
- // Assign undefined instead of using delete, see Data#remove
6496
- elem[dataUser.expando] = undefined;
6497
- }
6498
- }
6499
- }
6500
- }
6501
- });
6502
- jQuery.fn.extend({
6503
- detach: function detach(selector) {
6504
- return _remove(this, selector, true);
6505
- },
6506
- remove: function remove(selector) {
6507
- return _remove(this, selector);
6508
- },
6509
- text: function text(value) {
6510
- return access(this, function (value) {
6511
- return value === undefined ? jQuery.text(this) : this.empty().each(function () {
6512
- if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
6513
- this.textContent = value;
6514
- }
6515
- });
6516
- }, null, value, arguments.length);
6517
- },
6518
- append: function append() {
6519
- return domManip(this, arguments, function (elem) {
6520
- if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
6521
- var target = manipulationTarget(this, elem);
6522
- target.appendChild(elem);
6523
- }
6524
- });
6525
- },
6526
- prepend: function prepend() {
6527
- return domManip(this, arguments, function (elem) {
6528
- if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
6529
- var target = manipulationTarget(this, elem);
6530
- target.insertBefore(elem, target.firstChild);
6531
- }
6532
- });
6533
- },
6534
- before: function before() {
6535
- return domManip(this, arguments, function (elem) {
6536
- if (this.parentNode) {
6537
- this.parentNode.insertBefore(elem, this);
6538
- }
6539
- });
6540
- },
6541
- after: function after() {
6542
- return domManip(this, arguments, function (elem) {
6543
- if (this.parentNode) {
6544
- this.parentNode.insertBefore(elem, this.nextSibling);
6545
- }
6546
- });
6547
- },
6548
- empty: function empty() {
6549
- var elem,
6550
- i = 0;
6551
-
6552
- for (; (elem = this[i]) != null; i++) {
6553
- if (elem.nodeType === 1) {
6554
- // Prevent memory leaks
6555
- jQuery.cleanData(getAll(elem, false)); // Remove any remaining nodes
6556
-
6557
- elem.textContent = "";
6558
- }
6559
- }
6560
-
6561
- return this;
6562
- },
6563
- clone: function clone(dataAndEvents, deepDataAndEvents) {
6564
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
6565
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
6566
- return this.map(function () {
6567
- return jQuery.clone(this, dataAndEvents, deepDataAndEvents);
6568
- });
6569
- },
6570
- html: function html(value) {
6571
- return access(this, function (value) {
6572
- var elem = this[0] || {},
6573
- i = 0,
6574
- l = this.length;
6575
-
6576
- if (value === undefined && elem.nodeType === 1) {
6577
- return elem.innerHTML;
6578
- } // See if we can take a shortcut and just use innerHTML
6579
-
6580
-
6581
- if (typeof value === "string" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) {
6582
- value = jQuery.htmlPrefilter(value);
6583
-
6584
- try {
6585
- for (; i < l; i++) {
6586
- elem = this[i] || {}; // Remove element nodes and prevent memory leaks
6587
-
6588
- if (elem.nodeType === 1) {
6589
- jQuery.cleanData(getAll(elem, false));
6590
- elem.innerHTML = value;
6591
- }
6592
- }
6593
-
6594
- elem = 0; // If using innerHTML throws an exception, use the fallback method
6595
- } catch (e) {}
6596
- }
6597
-
6598
- if (elem) {
6599
- this.empty().append(value);
6600
- }
6601
- }, null, value, arguments.length);
6602
- },
6603
- replaceWith: function replaceWith() {
6604
- var ignored = []; // Make the changes, replacing each non-ignored context element with the new content
6605
-
6606
- return domManip(this, arguments, function (elem) {
6607
- var parent = this.parentNode;
6608
-
6609
- if (jQuery.inArray(this, ignored) < 0) {
6610
- jQuery.cleanData(getAll(this));
6611
-
6612
- if (parent) {
6613
- parent.replaceChild(elem, this);
6614
- }
6615
- } // Force callback invocation
6616
-
6617
- }, ignored);
6618
- }
6619
- });
6620
- jQuery.each({
6621
- appendTo: "append",
6622
- prependTo: "prepend",
6623
- insertBefore: "before",
6624
- insertAfter: "after",
6625
- replaceAll: "replaceWith"
6626
- }, function (name, original) {
6627
- jQuery.fn[name] = function (selector) {
6628
- var elems,
6629
- ret = [],
6630
- insert = jQuery(selector),
6631
- last = insert.length - 1,
6632
- i = 0;
6633
-
6634
- for (; i <= last; i++) {
6635
- elems = i === last ? this : this.clone(true);
6636
- jQuery(insert[i])[original](elems); // Support: Android <=4.0 only, PhantomJS 1 only
6637
- // .get() because push.apply(_, arraylike) throws on ancient WebKit
6638
-
6639
- push.apply(ret, elems.get());
6640
- }
6641
-
6642
- return this.pushStack(ret);
6643
- };
6644
- });
6645
- var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i");
6646
-
6647
- var getStyles = function getStyles(elem) {
6648
- // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
6649
- // IE throws on elements created in popups
6650
- // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
6651
- var view = elem.ownerDocument.defaultView;
6652
-
6653
- if (!view || !view.opener) {
6654
- view = window;
6655
- }
6656
-
6657
- return view.getComputedStyle(elem);
6658
- };
6659
-
6660
- var swap = function swap(elem, options, callback) {
6661
- var ret,
6662
- name,
6663
- old = {}; // Remember the old values, and insert the new ones
6664
-
6665
- for (name in options) {
6666
- old[name] = elem.style[name];
6667
- elem.style[name] = options[name];
6668
- }
6669
-
6670
- ret = callback.call(elem); // Revert the old values
6671
-
6672
- for (name in options) {
6673
- elem.style[name] = old[name];
6674
- }
6675
-
6676
- return ret;
6677
- };
6678
-
6679
- var rboxStyle = new RegExp(cssExpand.join("|"), "i");
6680
-
6681
- (function () {
6682
- // Executing both pixelPosition & boxSizingReliable tests require only one layout
6683
- // so they're executed at the same time to save the second computation.
6684
- function computeStyleTests() {
6685
- // This is a singleton, we need to execute it only once
6686
- if (!div) {
6687
- return;
6688
- }
6689
-
6690
- container.style.cssText = "position:absolute;left:-11111px;width:60px;" + "margin-top:1px;padding:0;border:0";
6691
- div.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + "margin:auto;border:1px;padding:1px;" + "width:60%;top:1%";
6692
- documentElement.appendChild(container).appendChild(div);
6693
- var divStyle = window.getComputedStyle(div);
6694
- pixelPositionVal = divStyle.top !== "1%"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
6695
-
6696
- reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12; // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
6697
- // Some styles come back with percentage values, even though they shouldn't
6698
-
6699
- div.style.right = "60%";
6700
- pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36; // Support: IE 9 - 11 only
6701
- // Detect misreporting of content dimensions for box-sizing:border-box elements
6702
-
6703
- boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36; // Support: IE 9 only
6704
- // Detect overflow:scroll screwiness (gh-3699)
6705
- // Support: Chrome <=64
6706
- // Don't get tricked when zoom affects offsetWidth (gh-4029)
6707
-
6708
- div.style.position = "absolute";
6709
- scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;
6710
- documentElement.removeChild(container); // Nullify the div so it wouldn't be stored in the memory and
6711
- // it will also be a sign that checks already performed
6712
-
6713
- div = null;
6714
- }
6715
-
6716
- function roundPixelMeasures(measure) {
6717
- return Math.round(parseFloat(measure));
6718
- }
6719
-
6720
- var pixelPositionVal,
6721
- boxSizingReliableVal,
6722
- scrollboxSizeVal,
6723
- pixelBoxStylesVal,
6724
- reliableTrDimensionsVal,
6725
- reliableMarginLeftVal,
6726
- container = document.createElement("div"),
6727
- div = document.createElement("div"); // Finish early in limited (non-browser) environments
6728
-
6729
- if (!div.style) {
6730
- return;
6731
- } // Support: IE <=9 - 11 only
6732
- // Style of cloned element affects source element cloned (#8908)
6733
-
6734
-
6735
- div.style.backgroundClip = "content-box";
6736
- div.cloneNode(true).style.backgroundClip = "";
6737
- support.clearCloneStyle = div.style.backgroundClip === "content-box";
6738
- jQuery.extend(support, {
6739
- boxSizingReliable: function boxSizingReliable() {
6740
- computeStyleTests();
6741
- return boxSizingReliableVal;
6742
- },
6743
- pixelBoxStyles: function pixelBoxStyles() {
6744
- computeStyleTests();
6745
- return pixelBoxStylesVal;
6746
- },
6747
- pixelPosition: function pixelPosition() {
6748
- computeStyleTests();
6749
- return pixelPositionVal;
6750
- },
6751
- reliableMarginLeft: function reliableMarginLeft() {
6752
- computeStyleTests();
6753
- return reliableMarginLeftVal;
6754
- },
6755
- scrollboxSize: function scrollboxSize() {
6756
- computeStyleTests();
6757
- return scrollboxSizeVal;
6758
- },
6759
- // Support: IE 9 - 11+, Edge 15 - 18+
6760
- // IE/Edge misreport `getComputedStyle` of table rows with width/height
6761
- // set in CSS while `offset*` properties report correct values.
6762
- // Behavior in IE 9 is more subtle than in newer versions & it passes
6763
- // some versions of this test; make sure not to make it pass there!
6764
- reliableTrDimensions: function reliableTrDimensions() {
6765
- var table, tr, trChild, trStyle;
6766
-
6767
- if (reliableTrDimensionsVal == null) {
6768
- table = document.createElement("table");
6769
- tr = document.createElement("tr");
6770
- trChild = document.createElement("div");
6771
- table.style.cssText = "position:absolute;left:-11111px";
6772
- tr.style.height = "1px";
6773
- trChild.style.height = "9px";
6774
- documentElement.appendChild(table).appendChild(tr).appendChild(trChild);
6775
- trStyle = window.getComputedStyle(tr);
6776
- reliableTrDimensionsVal = parseInt(trStyle.height) > 3;
6777
- documentElement.removeChild(table);
6778
- }
6779
-
6780
- return reliableTrDimensionsVal;
6781
- }
6782
- });
6783
- })();
6784
-
6785
- function curCSS(elem, name, computed) {
6786
- var width,
6787
- minWidth,
6788
- maxWidth,
6789
- ret,
6790
- // Support: Firefox 51+
6791
- // Retrieving style before computed somehow
6792
- // fixes an issue with getting wrong values
6793
- // on detached elements
6794
- style = elem.style;
6795
- computed = computed || getStyles(elem); // getPropertyValue is needed for:
6796
- // .css('filter') (IE 9 only, #12537)
6797
- // .css('--customProperty) (#3144)
6798
-
6799
- if (computed) {
6800
- ret = computed.getPropertyValue(name) || computed[name];
6801
-
6802
- if (ret === "" && !isAttached(elem)) {
6803
- ret = jQuery.style(elem, name);
6804
- } // A tribute to the "awesome hack by Dean Edwards"
6805
- // Android Browser returns percentage for some values,
6806
- // but width seems to be reliably pixels.
6807
- // This is against the CSSOM draft spec:
6808
- // https://drafts.csswg.org/cssom/#resolved-values
6809
-
6810
-
6811
- if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {
6812
- // Remember the original values
6813
- width = style.width;
6814
- minWidth = style.minWidth;
6815
- maxWidth = style.maxWidth; // Put in the new values to get a computed value out
6816
-
6817
- style.minWidth = style.maxWidth = style.width = ret;
6818
- ret = computed.width; // Revert the changed values
6819
-
6820
- style.width = width;
6821
- style.minWidth = minWidth;
6822
- style.maxWidth = maxWidth;
6823
- }
6824
- }
6825
-
6826
- return ret !== undefined ? // Support: IE <=9 - 11 only
6827
- // IE returns zIndex value as an integer.
6828
- ret + "" : ret;
6829
- }
6830
-
6831
- function addGetHookIf(conditionFn, hookFn) {
6832
- // Define the hook, we'll check on the first run if it's really needed.
6833
- return {
6834
- get: function get() {
6835
- if (conditionFn()) {
6836
- // Hook not needed (or it's not possible to use it due
6837
- // to missing dependency), remove it.
6838
- delete this.get;
6839
- return;
6840
- } // Hook needed; redefine it so that the support test is not executed again.
6841
-
6842
-
6843
- return (this.get = hookFn).apply(this, arguments);
6844
- }
6845
- };
6846
- }
6847
-
6848
- var cssPrefixes = ["Webkit", "Moz", "ms"],
6849
- emptyStyle = document.createElement("div").style,
6850
- vendorProps = {}; // Return a vendor-prefixed property or undefined
6851
-
6852
- function vendorPropName(name) {
6853
- // Check for vendor prefixed names
6854
- var capName = name[0].toUpperCase() + name.slice(1),
6855
- i = cssPrefixes.length;
6856
-
6857
- while (i--) {
6858
- name = cssPrefixes[i] + capName;
6859
-
6860
- if (name in emptyStyle) {
6861
- return name;
6862
- }
6863
- }
6864
- } // Return a potentially-mapped jQuery.cssProps or vendor prefixed property
6865
-
6866
-
6867
- function finalPropName(name) {
6868
- var _final = jQuery.cssProps[name] || vendorProps[name];
6869
-
6870
- if (_final) {
6871
- return _final;
6872
- }
6873
-
6874
- if (name in emptyStyle) {
6875
- return name;
6876
- }
6877
-
6878
- return vendorProps[name] = vendorPropName(name) || name;
6879
- }
6880
-
6881
- var // Swappable if display is none or starts with table
6882
- // except "table", "table-cell", or "table-caption"
6883
- // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
6884
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
6885
- rcustomProp = /^--/,
6886
- cssShow = {
6887
- position: "absolute",
6888
- visibility: "hidden",
6889
- display: "block"
6890
- },
6891
- cssNormalTransform = {
6892
- letterSpacing: "0",
6893
- fontWeight: "400"
6894
- };
6895
-
6896
- function setPositiveNumber(_elem, value, subtract) {
6897
- // Any relative (+/-) values have already been
6898
- // normalized at this point
6899
- var matches = rcssNum.exec(value);
6900
- return matches ? // Guard against undefined "subtract", e.g., when used as in cssHooks
6901
- Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || "px") : value;
6902
- }
6903
-
6904
- function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {
6905
- var i = dimension === "width" ? 1 : 0,
6906
- extra = 0,
6907
- delta = 0; // Adjustment may not be necessary
6908
-
6909
- if (box === (isBorderBox ? "border" : "content")) {
6910
- return 0;
6911
- }
6912
-
6913
- for (; i < 4; i += 2) {
6914
- // Both box models exclude margin
6915
- if (box === "margin") {
6916
- delta += jQuery.css(elem, box + cssExpand[i], true, styles);
6917
- } // If we get here with a content-box, we're seeking "padding" or "border" or "margin"
6918
-
6919
-
6920
- if (!isBorderBox) {
6921
- // Add padding
6922
- delta += jQuery.css(elem, "padding" + cssExpand[i], true, styles); // For "border" or "margin", add border
6923
-
6924
- if (box !== "padding") {
6925
- delta += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles); // But still keep track of it otherwise
6926
- } else {
6927
- extra += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
6928
- } // If we get here with a border-box (content + padding + border), we're seeking "content" or
6929
- // "padding" or "margin"
6930
-
6931
- } else {
6932
- // For "content", subtract padding
6933
- if (box === "content") {
6934
- delta -= jQuery.css(elem, "padding" + cssExpand[i], true, styles);
6935
- } // For "content" or "padding", subtract border
6936
-
6937
-
6938
- if (box !== "margin") {
6939
- delta -= jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
6940
- }
6941
- }
6942
- } // Account for positive content-box scroll gutter when requested by providing computedVal
6943
-
6944
-
6945
- if (!isBorderBox && computedVal >= 0) {
6946
- // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
6947
- // Assuming integer scroll gutter, subtract the rest and round down
6948
- delta += Math.max(0, Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
6949
- // Use an explicit zero to avoid NaN (gh-3964)
6950
- )) || 0;
6951
- }
6952
-
6953
- return delta;
6954
- }
6955
-
6956
- function getWidthOrHeight(elem, dimension, extra) {
6957
- // Start with computed style
6958
- var styles = getStyles(elem),
6959
- // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
6960
- // Fake content-box until we know it's needed to know the true value.
6961
- boxSizingNeeded = !support.boxSizingReliable() || extra,
6962
- isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box",
6963
- valueIsBorderBox = isBorderBox,
6964
- val = curCSS(elem, dimension, styles),
6965
- offsetProp = "offset" + dimension[0].toUpperCase() + dimension.slice(1); // Support: Firefox <=54
6966
- // Return a confounding non-pixel value or feign ignorance, as appropriate.
6967
-
6968
- if (rnumnonpx.test(val)) {
6969
- if (!extra) {
6970
- return val;
6971
- }
6972
-
6973
- val = "auto";
6974
- } // Support: IE 9 - 11 only
6975
- // Use offsetWidth/offsetHeight for when box sizing is unreliable.
6976
- // In those cases, the computed value can be trusted to be border-box.
6977
-
6978
-
6979
- if ((!support.boxSizingReliable() && isBorderBox || // Support: IE 10 - 11+, Edge 15 - 18+
6980
- // IE/Edge misreport `getComputedStyle` of table rows with width/height
6981
- // set in CSS while `offset*` properties report correct values.
6982
- // Interestingly, in some cases IE 9 doesn't suffer from this issue.
6983
- !support.reliableTrDimensions() && nodeName(elem, "tr") || // Fall back to offsetWidth/offsetHeight when value is "auto"
6984
- // This happens for inline elements with no explicit setting (gh-3571)
6985
- val === "auto" || // Support: Android <=4.1 - 4.3 only
6986
- // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
6987
- !parseFloat(val) && jQuery.css(elem, "display", false, styles) === "inline") && // Make sure the element is visible & connected
6988
- elem.getClientRects().length) {
6989
- isBorderBox = jQuery.css(elem, "boxSizing", false, styles) === "border-box"; // Where available, offsetWidth/offsetHeight approximate border box dimensions.
6990
- // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
6991
- // retrieved value as a content box dimension.
6992
-
6993
- valueIsBorderBox = offsetProp in elem;
6994
-
6995
- if (valueIsBorderBox) {
6996
- val = elem[offsetProp];
6997
- }
6998
- } // Normalize "" and auto
6999
-
7000
-
7001
- val = parseFloat(val) || 0; // Adjust for the element's box model
7002
-
7003
- return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? "border" : "content"), valueIsBorderBox, styles, // Provide the current computed size to request scroll gutter calculation (gh-3589)
7004
- val) + "px";
7005
- }
7006
-
7007
- jQuery.extend({
7008
- // Add in style property hooks for overriding the default
7009
- // behavior of getting and setting a style property
7010
- cssHooks: {
7011
- opacity: {
7012
- get: function get(elem, computed) {
7013
- if (computed) {
7014
- // We should always get a number back from opacity
7015
- var ret = curCSS(elem, "opacity");
7016
- return ret === "" ? "1" : ret;
7017
- }
7018
- }
7019
- }
7020
- },
7021
- // Don't automatically add "px" to these possibly-unitless properties
7022
- cssNumber: {
7023
- "animationIterationCount": true,
7024
- "columnCount": true,
7025
- "fillOpacity": true,
7026
- "flexGrow": true,
7027
- "flexShrink": true,
7028
- "fontWeight": true,
7029
- "gridArea": true,
7030
- "gridColumn": true,
7031
- "gridColumnEnd": true,
7032
- "gridColumnStart": true,
7033
- "gridRow": true,
7034
- "gridRowEnd": true,
7035
- "gridRowStart": true,
7036
- "lineHeight": true,
7037
- "opacity": true,
7038
- "order": true,
7039
- "orphans": true,
7040
- "widows": true,
7041
- "zIndex": true,
7042
- "zoom": true
7043
- },
7044
- // Add in properties whose names you wish to fix before
7045
- // setting or getting the value
7046
- cssProps: {},
7047
- // Get and set the style property on a DOM Node
7048
- style: function style(elem, name, value, extra) {
7049
- // Don't set styles on text and comment nodes
7050
- if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {
7051
- return;
7052
- } // Make sure that we're working with the right name
7053
-
7054
-
7055
- var ret,
7056
- type,
7057
- hooks,
7058
- origName = camelCase(name),
7059
- isCustomProp = rcustomProp.test(name),
7060
- style = elem.style; // Make sure that we're working with the right name. We don't
7061
- // want to query the value if it is a CSS custom property
7062
- // since they are user-defined.
7063
-
7064
- if (!isCustomProp) {
7065
- name = finalPropName(origName);
7066
- } // Gets hook for the prefixed version, then unprefixed version
7067
-
7068
-
7069
- hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // Check if we're setting a value
7070
-
7071
- if (value !== undefined) {
7072
- type = _typeof(value); // Convert "+=" or "-=" to relative numbers (#7345)
7073
-
7074
- if (type === "string" && (ret = rcssNum.exec(value)) && ret[1]) {
7075
- value = adjustCSS(elem, name, ret); // Fixes bug #9237
7076
-
7077
- type = "number";
7078
- } // Make sure that null and NaN values aren't set (#7116)
7079
-
7080
-
7081
- if (value == null || value !== value) {
7082
- return;
7083
- } // If a number was passed in, add the unit (except for certain CSS properties)
7084
- // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
7085
- // "px" to a few hardcoded values.
7086
-
7087
-
7088
- if (type === "number" && !isCustomProp) {
7089
- value += ret && ret[3] || (jQuery.cssNumber[origName] ? "" : "px");
7090
- } // background-* props affect original clone's values
7091
-
7092
-
7093
- if (!support.clearCloneStyle && value === "" && name.indexOf("background") === 0) {
7094
- style[name] = "inherit";
7095
- } // If a hook was provided, use that value, otherwise just set the specified value
7096
-
7097
-
7098
- if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {
7099
- if (isCustomProp) {
7100
- style.setProperty(name, value);
7101
- } else {
7102
- style[name] = value;
7103
- }
7104
- }
7105
- } else {
7106
- // If a hook was provided get the non-computed value from there
7107
- if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {
7108
- return ret;
7109
- } // Otherwise just get the value from the style object
7110
-
7111
-
7112
- return style[name];
7113
- }
7114
- },
7115
- css: function css(elem, name, extra, styles) {
7116
- var val,
7117
- num,
7118
- hooks,
7119
- origName = camelCase(name),
7120
- isCustomProp = rcustomProp.test(name); // Make sure that we're working with the right name. We don't
7121
- // want to modify the value if it is a CSS custom property
7122
- // since they are user-defined.
7123
-
7124
- if (!isCustomProp) {
7125
- name = finalPropName(origName);
7126
- } // Try prefixed name followed by the unprefixed name
7127
-
7128
-
7129
- hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // If a hook was provided get the computed value from there
7130
-
7131
- if (hooks && "get" in hooks) {
7132
- val = hooks.get(elem, true, extra);
7133
- } // Otherwise, if a way to get the computed value exists, use that
7134
-
7135
-
7136
- if (val === undefined) {
7137
- val = curCSS(elem, name, styles);
7138
- } // Convert "normal" to computed value
7139
-
7140
-
7141
- if (val === "normal" && name in cssNormalTransform) {
7142
- val = cssNormalTransform[name];
7143
- } // Make numeric if forced or a qualifier was provided and val looks numeric
7144
-
7145
-
7146
- if (extra === "" || extra) {
7147
- num = parseFloat(val);
7148
- return extra === true || isFinite(num) ? num || 0 : val;
7149
- }
7150
-
7151
- return val;
7152
- }
7153
- });
7154
- jQuery.each(["height", "width"], function (_i, dimension) {
7155
- jQuery.cssHooks[dimension] = {
7156
- get: function get(elem, computed, extra) {
7157
- if (computed) {
7158
- // Certain elements can have dimension info if we invisibly show them
7159
- // but it must have a current display style that would benefit
7160
- return rdisplayswap.test(jQuery.css(elem, "display")) && ( // Support: Safari 8+
7161
- // Table columns in Safari have non-zero offsetWidth & zero
7162
- // getBoundingClientRect().width unless display is changed.
7163
- // Support: IE <=11 only
7164
- // Running getBoundingClientRect on a disconnected node
7165
- // in IE throws an error.
7166
- !elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function () {
7167
- return getWidthOrHeight(elem, dimension, extra);
7168
- }) : getWidthOrHeight(elem, dimension, extra);
7169
- }
7170
- },
7171
- set: function set(elem, value, extra) {
7172
- var matches,
7173
- styles = getStyles(elem),
7174
- // Only read styles.position if the test has a chance to fail
7175
- // to avoid forcing a reflow.
7176
- scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === "absolute",
7177
- // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
7178
- boxSizingNeeded = scrollboxSizeBuggy || extra,
7179
- isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box",
7180
- subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0; // Account for unreliable border-box dimensions by comparing offset* to computed and
7181
- // faking a content-box to get border and padding (gh-3699)
7182
-
7183
- if (isBorderBox && scrollboxSizeBuggy) {
7184
- subtract -= Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, "border", false, styles) - 0.5);
7185
- } // Convert to pixels if value adjustment is needed
7186
-
7187
-
7188
- if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || "px") !== "px") {
7189
- elem.style[dimension] = value;
7190
- value = jQuery.css(elem, dimension);
7191
- }
7192
-
7193
- return setPositiveNumber(elem, value, subtract);
7194
- }
7195
- };
7196
- });
7197
- jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {
7198
- if (computed) {
7199
- return (parseFloat(curCSS(elem, "marginLeft")) || elem.getBoundingClientRect().left - swap(elem, {
7200
- marginLeft: 0
7201
- }, function () {
7202
- return elem.getBoundingClientRect().left;
7203
- })) + "px";
7204
- }
7205
- }); // These hooks are used by animate to expand properties
7206
-
7207
- jQuery.each({
7208
- margin: "",
7209
- padding: "",
7210
- border: "Width"
7211
- }, function (prefix, suffix) {
7212
- jQuery.cssHooks[prefix + suffix] = {
7213
- expand: function expand(value) {
7214
- var i = 0,
7215
- expanded = {},
7216
- // Assumes a single number if not a string
7217
- parts = typeof value === "string" ? value.split(" ") : [value];
7218
-
7219
- for (; i < 4; i++) {
7220
- expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];
7221
- }
7222
-
7223
- return expanded;
7224
- }
7225
- };
7226
-
7227
- if (prefix !== "margin") {
7228
- jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;
7229
- }
7230
- });
7231
- jQuery.fn.extend({
7232
- css: function css(name, value) {
7233
- return access(this, function (elem, name, value) {
7234
- var styles,
7235
- len,
7236
- map = {},
7237
- i = 0;
7238
-
7239
- if (Array.isArray(name)) {
7240
- styles = getStyles(elem);
7241
- len = name.length;
7242
-
7243
- for (; i < len; i++) {
7244
- map[name[i]] = jQuery.css(elem, name[i], false, styles);
7245
- }
7246
-
7247
- return map;
7248
- }
7249
-
7250
- return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);
7251
- }, name, value, arguments.length > 1);
7252
- }
7253
- });
7254
-
7255
- function Tween(elem, options, prop, end, easing) {
7256
- return new Tween.prototype.init(elem, options, prop, end, easing);
7257
- }
7258
-
7259
- jQuery.Tween = Tween;
7260
- Tween.prototype = {
7261
- constructor: Tween,
7262
- init: function init(elem, options, prop, end, easing, unit) {
7263
- this.elem = elem;
7264
- this.prop = prop;
7265
- this.easing = easing || jQuery.easing._default;
7266
- this.options = options;
7267
- this.start = this.now = this.cur();
7268
- this.end = end;
7269
- this.unit = unit || (jQuery.cssNumber[prop] ? "" : "px");
7270
- },
7271
- cur: function cur() {
7272
- var hooks = Tween.propHooks[this.prop];
7273
- return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);
7274
- },
7275
- run: function run(percent) {
7276
- var eased,
7277
- hooks = Tween.propHooks[this.prop];
7278
-
7279
- if (this.options.duration) {
7280
- this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);
7281
- } else {
7282
- this.pos = eased = percent;
7283
- }
7284
-
7285
- this.now = (this.end - this.start) * eased + this.start;
7286
-
7287
- if (this.options.step) {
7288
- this.options.step.call(this.elem, this.now, this);
7289
- }
7290
-
7291
- if (hooks && hooks.set) {
7292
- hooks.set(this);
7293
- } else {
7294
- Tween.propHooks._default.set(this);
7295
- }
7296
-
7297
- return this;
7298
- }
7299
- };
7300
- Tween.prototype.init.prototype = Tween.prototype;
7301
- Tween.propHooks = {
7302
- _default: {
7303
- get: function get(tween) {
7304
- var result; // Use a property on the element directly when it is not a DOM element,
7305
- // or when there is no matching style property that exists.
7306
-
7307
- if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {
7308
- return tween.elem[tween.prop];
7309
- } // Passing an empty string as a 3rd parameter to .css will automatically
7310
- // attempt a parseFloat and fallback to a string if the parse fails.
7311
- // Simple values such as "10px" are parsed to Float;
7312
- // complex values such as "rotate(1rad)" are returned as-is.
7313
-
7314
-
7315
- result = jQuery.css(tween.elem, tween.prop, ""); // Empty strings, null, undefined and "auto" are converted to 0.
7316
-
7317
- return !result || result === "auto" ? 0 : result;
7318
- },
7319
- set: function set(tween) {
7320
- // Use step hook for back compat.
7321
- // Use cssHook if its there.
7322
- // Use .style if available and use plain properties where available.
7323
- if (jQuery.fx.step[tween.prop]) {
7324
- jQuery.fx.step[tween.prop](tween);
7325
- } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {
7326
- jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);
7327
- } else {
7328
- tween.elem[tween.prop] = tween.now;
7329
- }
7330
- }
7331
- }
7332
- }; // Support: IE <=9 only
7333
- // Panic based approach to setting things on disconnected nodes
7334
-
7335
- Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
7336
- set: function set(tween) {
7337
- if (tween.elem.nodeType && tween.elem.parentNode) {
7338
- tween.elem[tween.prop] = tween.now;
7339
- }
7340
- }
7341
- };
7342
- jQuery.easing = {
7343
- linear: function linear(p) {
7344
- return p;
7345
- },
7346
- swing: function swing(p) {
7347
- return 0.5 - Math.cos(p * Math.PI) / 2;
7348
- },
7349
- _default: "swing"
7350
- };
7351
- jQuery.fx = Tween.prototype.init; // Back compat <1.8 extension point
7352
-
7353
- jQuery.fx.step = {};
7354
- var fxNow,
7355
- inProgress,
7356
- rfxtypes = /^(?:toggle|show|hide)$/,
7357
- rrun = /queueHooks$/;
7358
-
7359
- function schedule() {
7360
- if (inProgress) {
7361
- if (document.hidden === false && window.requestAnimationFrame) {
7362
- window.requestAnimationFrame(schedule);
7363
- } else {
7364
- window.setTimeout(schedule, jQuery.fx.interval);
7365
- }
7366
-
7367
- jQuery.fx.tick();
7368
- }
7369
- } // Animations created synchronously will run synchronously
7370
-
7371
-
7372
- function createFxNow() {
7373
- window.setTimeout(function () {
7374
- fxNow = undefined;
7375
- });
7376
- return fxNow = Date.now();
7377
- } // Generate parameters to create a standard animation
7378
-
7379
-
7380
- function genFx(type, includeWidth) {
7381
- var which,
7382
- i = 0,
7383
- attrs = {
7384
- height: type
7385
- }; // If we include width, step value is 1 to do all cssExpand values,
7386
- // otherwise step value is 2 to skip over Left and Right
7387
-
7388
- includeWidth = includeWidth ? 1 : 0;
7389
-
7390
- for (; i < 4; i += 2 - includeWidth) {
7391
- which = cssExpand[i];
7392
- attrs["margin" + which] = attrs["padding" + which] = type;
7393
- }
7394
-
7395
- if (includeWidth) {
7396
- attrs.opacity = attrs.width = type;
7397
- }
7398
-
7399
- return attrs;
7400
- }
7401
-
7402
- function createTween(value, prop, animation) {
7403
- var tween,
7404
- collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners["*"]),
7405
- index = 0,
7406
- length = collection.length;
7407
-
7408
- for (; index < length; index++) {
7409
- if (tween = collection[index].call(animation, prop, value)) {
7410
- // We're done with this property
7411
- return tween;
7412
- }
7413
- }
7414
- }
7415
-
7416
- function defaultPrefilter(elem, props, opts) {
7417
- var prop,
7418
- value,
7419
- toggle,
7420
- hooks,
7421
- oldfire,
7422
- propTween,
7423
- restoreDisplay,
7424
- display,
7425
- isBox = "width" in props || "height" in props,
7426
- anim = this,
7427
- orig = {},
7428
- style = elem.style,
7429
- hidden = elem.nodeType && isHiddenWithinTree(elem),
7430
- dataShow = dataPriv.get(elem, "fxshow"); // Queue-skipping animations hijack the fx hooks
7431
-
7432
- if (!opts.queue) {
7433
- hooks = jQuery._queueHooks(elem, "fx");
7434
-
7435
- if (hooks.unqueued == null) {
7436
- hooks.unqueued = 0;
7437
- oldfire = hooks.empty.fire;
7438
-
7439
- hooks.empty.fire = function () {
7440
- if (!hooks.unqueued) {
7441
- oldfire();
7442
- }
7443
- };
7444
- }
7445
-
7446
- hooks.unqueued++;
7447
- anim.always(function () {
7448
- // Ensure the complete handler is called before this completes
7449
- anim.always(function () {
7450
- hooks.unqueued--;
7451
-
7452
- if (!jQuery.queue(elem, "fx").length) {
7453
- hooks.empty.fire();
7454
- }
7455
- });
7456
- });
7457
- } // Detect show/hide animations
7458
-
7459
-
7460
- for (prop in props) {
7461
- value = props[prop];
7462
-
7463
- if (rfxtypes.test(value)) {
7464
- delete props[prop];
7465
- toggle = toggle || value === "toggle";
7466
-
7467
- if (value === (hidden ? "hide" : "show")) {
7468
- // Pretend to be hidden if this is a "show" and
7469
- // there is still data from a stopped show/hide
7470
- if (value === "show" && dataShow && dataShow[prop] !== undefined) {
7471
- hidden = true; // Ignore all other no-op show/hide data
7472
- } else {
7473
- continue;
7474
- }
7475
- }
7476
-
7477
- orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);
7478
- }
7479
- } // Bail out if this is a no-op like .hide().hide()
7480
-
7481
-
7482
- propTween = !jQuery.isEmptyObject(props);
7483
-
7484
- if (!propTween && jQuery.isEmptyObject(orig)) {
7485
- return;
7486
- } // Restrict "overflow" and "display" styles during box animations
7487
-
7488
-
7489
- if (isBox && elem.nodeType === 1) {
7490
- // Support: IE <=9 - 11, Edge 12 - 15
7491
- // Record all 3 overflow attributes because IE does not infer the shorthand
7492
- // from identically-valued overflowX and overflowY and Edge just mirrors
7493
- // the overflowX value there.
7494
- opts.overflow = [style.overflow, style.overflowX, style.overflowY]; // Identify a display type, preferring old show/hide data over the CSS cascade
7495
-
7496
- restoreDisplay = dataShow && dataShow.display;
7497
-
7498
- if (restoreDisplay == null) {
7499
- restoreDisplay = dataPriv.get(elem, "display");
7500
- }
7501
-
7502
- display = jQuery.css(elem, "display");
7503
-
7504
- if (display === "none") {
7505
- if (restoreDisplay) {
7506
- display = restoreDisplay;
7507
- } else {
7508
- // Get nonempty value(s) by temporarily forcing visibility
7509
- showHide([elem], true);
7510
- restoreDisplay = elem.style.display || restoreDisplay;
7511
- display = jQuery.css(elem, "display");
7512
- showHide([elem]);
7513
- }
7514
- } // Animate inline elements as inline-block
7515
-
7516
-
7517
- if (display === "inline" || display === "inline-block" && restoreDisplay != null) {
7518
- if (jQuery.css(elem, "float") === "none") {
7519
- // Restore the original display value at the end of pure show/hide animations
7520
- if (!propTween) {
7521
- anim.done(function () {
7522
- style.display = restoreDisplay;
7523
- });
7524
-
7525
- if (restoreDisplay == null) {
7526
- display = style.display;
7527
- restoreDisplay = display === "none" ? "" : display;
7528
- }
7529
- }
7530
-
7531
- style.display = "inline-block";
7532
- }
7533
- }
7534
- }
7535
-
7536
- if (opts.overflow) {
7537
- style.overflow = "hidden";
7538
- anim.always(function () {
7539
- style.overflow = opts.overflow[0];
7540
- style.overflowX = opts.overflow[1];
7541
- style.overflowY = opts.overflow[2];
7542
- });
7543
- } // Implement show/hide animations
7544
-
7545
-
7546
- propTween = false;
7547
-
7548
- for (prop in orig) {
7549
- // General show/hide setup for this element animation
7550
- if (!propTween) {
7551
- if (dataShow) {
7552
- if ("hidden" in dataShow) {
7553
- hidden = dataShow.hidden;
7554
- }
7555
- } else {
7556
- dataShow = dataPriv.access(elem, "fxshow", {
7557
- display: restoreDisplay
7558
- });
7559
- } // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
7560
-
7561
-
7562
- if (toggle) {
7563
- dataShow.hidden = !hidden;
7564
- } // Show elements before animating them
7565
-
7566
-
7567
- if (hidden) {
7568
- showHide([elem], true);
7569
- }
7570
- /* eslint-disable no-loop-func */
7571
-
7572
-
7573
- anim.done(function () {
7574
- /* eslint-enable no-loop-func */
7575
- // The final step of a "hide" animation is actually hiding the element
7576
- if (!hidden) {
7577
- showHide([elem]);
7578
- }
7579
-
7580
- dataPriv.remove(elem, "fxshow");
7581
-
7582
- for (prop in orig) {
7583
- jQuery.style(elem, prop, orig[prop]);
7584
- }
7585
- });
7586
- } // Per-property setup
7587
-
7588
-
7589
- propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);
7590
-
7591
- if (!(prop in dataShow)) {
7592
- dataShow[prop] = propTween.start;
7593
-
7594
- if (hidden) {
7595
- propTween.end = propTween.start;
7596
- propTween.start = 0;
7597
- }
7598
- }
7599
- }
7600
- }
7601
-
7602
- function propFilter(props, specialEasing) {
7603
- var index, name, easing, value, hooks; // camelCase, specialEasing and expand cssHook pass
7604
-
7605
- for (index in props) {
7606
- name = camelCase(index);
7607
- easing = specialEasing[name];
7608
- value = props[index];
7609
-
7610
- if (Array.isArray(value)) {
7611
- easing = value[1];
7612
- value = props[index] = value[0];
7613
- }
7614
-
7615
- if (index !== name) {
7616
- props[name] = value;
7617
- delete props[index];
7618
- }
7619
-
7620
- hooks = jQuery.cssHooks[name];
7621
-
7622
- if (hooks && "expand" in hooks) {
7623
- value = hooks.expand(value);
7624
- delete props[name]; // Not quite $.extend, this won't overwrite existing keys.
7625
- // Reusing 'index' because we have the correct "name"
7626
-
7627
- for (index in value) {
7628
- if (!(index in props)) {
7629
- props[index] = value[index];
7630
- specialEasing[index] = easing;
7631
- }
7632
- }
7633
- } else {
7634
- specialEasing[name] = easing;
7635
- }
7636
- }
7637
- }
7638
-
7639
- function Animation(elem, properties, options) {
7640
- var result,
7641
- stopped,
7642
- index = 0,
7643
- length = Animation.prefilters.length,
7644
- deferred = jQuery.Deferred().always(function () {
7645
- // Don't match elem in the :animated selector
7646
- delete tick.elem;
7647
- }),
7648
- tick = function tick() {
7649
- if (stopped) {
7650
- return false;
7651
- }
7652
-
7653
- var currentTime = fxNow || createFxNow(),
7654
- remaining = Math.max(0, animation.startTime + animation.duration - currentTime),
7655
- // Support: Android 2.3 only
7656
- // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
7657
- temp = remaining / animation.duration || 0,
7658
- percent = 1 - temp,
7659
- index = 0,
7660
- length = animation.tweens.length;
7661
-
7662
- for (; index < length; index++) {
7663
- animation.tweens[index].run(percent);
7664
- }
7665
-
7666
- deferred.notifyWith(elem, [animation, percent, remaining]); // If there's more to do, yield
7667
-
7668
- if (percent < 1 && length) {
7669
- return remaining;
7670
- } // If this was an empty animation, synthesize a final progress notification
7671
-
7672
-
7673
- if (!length) {
7674
- deferred.notifyWith(elem, [animation, 1, 0]);
7675
- } // Resolve the animation and report its conclusion
7676
-
7677
-
7678
- deferred.resolveWith(elem, [animation]);
7679
- return false;
7680
- },
7681
- animation = deferred.promise({
7682
- elem: elem,
7683
- props: jQuery.extend({}, properties),
7684
- opts: jQuery.extend(true, {
7685
- specialEasing: {},
7686
- easing: jQuery.easing._default
7687
- }, options),
7688
- originalProperties: properties,
7689
- originalOptions: options,
7690
- startTime: fxNow || createFxNow(),
7691
- duration: options.duration,
7692
- tweens: [],
7693
- createTween: function createTween(prop, end) {
7694
- var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);
7695
- animation.tweens.push(tween);
7696
- return tween;
7697
- },
7698
- stop: function stop(gotoEnd) {
7699
- var index = 0,
7700
- // If we are going to the end, we want to run all the tweens
7701
- // otherwise we skip this part
7702
- length = gotoEnd ? animation.tweens.length : 0;
7703
-
7704
- if (stopped) {
7705
- return this;
7706
- }
7707
-
7708
- stopped = true;
7709
-
7710
- for (; index < length; index++) {
7711
- animation.tweens[index].run(1);
7712
- } // Resolve when we played the last frame; otherwise, reject
7713
-
7714
-
7715
- if (gotoEnd) {
7716
- deferred.notifyWith(elem, [animation, 1, 0]);
7717
- deferred.resolveWith(elem, [animation, gotoEnd]);
7718
- } else {
7719
- deferred.rejectWith(elem, [animation, gotoEnd]);
7720
- }
7721
-
7722
- return this;
7723
- }
7724
- }),
7725
- props = animation.props;
7726
-
7727
- propFilter(props, animation.opts.specialEasing);
7728
-
7729
- for (; index < length; index++) {
7730
- result = Animation.prefilters[index].call(animation, elem, props, animation.opts);
7731
-
7732
- if (result) {
7733
- if (isFunction(result.stop)) {
7734
- jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);
7735
- }
7736
-
7737
- return result;
7738
- }
7739
- }
7740
-
7741
- jQuery.map(props, createTween, animation);
7742
-
7743
- if (isFunction(animation.opts.start)) {
7744
- animation.opts.start.call(elem, animation);
7745
- } // Attach callbacks from options
7746
-
7747
-
7748
- animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);
7749
- jQuery.fx.timer(jQuery.extend(tick, {
7750
- elem: elem,
7751
- anim: animation,
7752
- queue: animation.opts.queue
7753
- }));
7754
- return animation;
7755
- }
7756
-
7757
- jQuery.Animation = jQuery.extend(Animation, {
7758
- tweeners: {
7759
- "*": [function (prop, value) {
7760
- var tween = this.createTween(prop, value);
7761
- adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);
7762
- return tween;
7763
- }]
7764
- },
7765
- tweener: function tweener(props, callback) {
7766
- if (isFunction(props)) {
7767
- callback = props;
7768
- props = ["*"];
7769
- } else {
7770
- props = props.match(rnothtmlwhite);
7771
- }
7772
-
7773
- var prop,
7774
- index = 0,
7775
- length = props.length;
7776
-
7777
- for (; index < length; index++) {
7778
- prop = props[index];
7779
- Animation.tweeners[prop] = Animation.tweeners[prop] || [];
7780
- Animation.tweeners[prop].unshift(callback);
7781
- }
7782
- },
7783
- prefilters: [defaultPrefilter],
7784
- prefilter: function prefilter(callback, prepend) {
7785
- if (prepend) {
7786
- Animation.prefilters.unshift(callback);
7787
- } else {
7788
- Animation.prefilters.push(callback);
7789
- }
7790
- }
7791
- });
7792
-
7793
- jQuery.speed = function (speed, easing, fn) {
7794
- var opt = speed && _typeof(speed) === "object" ? jQuery.extend({}, speed) : {
7795
- complete: fn || !fn && easing || isFunction(speed) && speed,
7796
- duration: speed,
7797
- easing: fn && easing || easing && !isFunction(easing) && easing
7798
- }; // Go to the end state if fx are off
7799
-
7800
- if (jQuery.fx.off) {
7801
- opt.duration = 0;
7802
- } else {
7803
- if (typeof opt.duration !== "number") {
7804
- if (opt.duration in jQuery.fx.speeds) {
7805
- opt.duration = jQuery.fx.speeds[opt.duration];
7806
- } else {
7807
- opt.duration = jQuery.fx.speeds._default;
7808
- }
7809
- }
7810
- } // Normalize opt.queue - true/undefined/null -> "fx"
7811
-
7812
-
7813
- if (opt.queue == null || opt.queue === true) {
7814
- opt.queue = "fx";
7815
- } // Queueing
7816
-
7817
-
7818
- opt.old = opt.complete;
7819
-
7820
- opt.complete = function () {
7821
- if (isFunction(opt.old)) {
7822
- opt.old.call(this);
7823
- }
7824
-
7825
- if (opt.queue) {
7826
- jQuery.dequeue(this, opt.queue);
7827
- }
7828
- };
7829
-
7830
- return opt;
7831
- };
7832
-
7833
- jQuery.fn.extend({
7834
- fadeTo: function fadeTo(speed, to, easing, callback) {
7835
- // Show any hidden elements after setting opacity to 0
7836
- return this.filter(isHiddenWithinTree).css("opacity", 0).show() // Animate to the value specified
7837
- .end().animate({
7838
- opacity: to
7839
- }, speed, easing, callback);
7840
- },
7841
- animate: function animate(prop, speed, easing, callback) {
7842
- var empty = jQuery.isEmptyObject(prop),
7843
- optall = jQuery.speed(speed, easing, callback),
7844
- doAnimation = function doAnimation() {
7845
- // Operate on a copy of prop so per-property easing won't be lost
7846
- var anim = Animation(this, jQuery.extend({}, prop), optall); // Empty animations, or finishing resolves immediately
7847
-
7848
- if (empty || dataPriv.get(this, "finish")) {
7849
- anim.stop(true);
7850
- }
7851
- };
7852
-
7853
- doAnimation.finish = doAnimation;
7854
- return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);
7855
- },
7856
- stop: function stop(type, clearQueue, gotoEnd) {
7857
- var stopQueue = function stopQueue(hooks) {
7858
- var stop = hooks.stop;
7859
- delete hooks.stop;
7860
- stop(gotoEnd);
7861
- };
7862
-
7863
- if (typeof type !== "string") {
7864
- gotoEnd = clearQueue;
7865
- clearQueue = type;
7866
- type = undefined;
7867
- }
7868
-
7869
- if (clearQueue) {
7870
- this.queue(type || "fx", []);
7871
- }
7872
-
7873
- return this.each(function () {
7874
- var dequeue = true,
7875
- index = type != null && type + "queueHooks",
7876
- timers = jQuery.timers,
7877
- data = dataPriv.get(this);
7878
-
7879
- if (index) {
7880
- if (data[index] && data[index].stop) {
7881
- stopQueue(data[index]);
7882
- }
7883
- } else {
7884
- for (index in data) {
7885
- if (data[index] && data[index].stop && rrun.test(index)) {
7886
- stopQueue(data[index]);
7887
- }
7888
- }
7889
- }
7890
-
7891
- for (index = timers.length; index--;) {
7892
- if (timers[index].elem === this && (type == null || timers[index].queue === type)) {
7893
- timers[index].anim.stop(gotoEnd);
7894
- dequeue = false;
7895
- timers.splice(index, 1);
7896
- }
7897
- } // Start the next in the queue if the last step wasn't forced.
7898
- // Timers currently will call their complete callbacks, which
7899
- // will dequeue but only if they were gotoEnd.
7900
-
7901
-
7902
- if (dequeue || !gotoEnd) {
7903
- jQuery.dequeue(this, type);
7904
- }
7905
- });
7906
- },
7907
- finish: function finish(type) {
7908
- if (type !== false) {
7909
- type = type || "fx";
7910
- }
7911
-
7912
- return this.each(function () {
7913
- var index,
7914
- data = dataPriv.get(this),
7915
- queue = data[type + "queue"],
7916
- hooks = data[type + "queueHooks"],
7917
- timers = jQuery.timers,
7918
- length = queue ? queue.length : 0; // Enable finishing flag on private data
7919
-
7920
- data.finish = true; // Empty the queue first
7921
-
7922
- jQuery.queue(this, type, []);
7923
-
7924
- if (hooks && hooks.stop) {
7925
- hooks.stop.call(this, true);
7926
- } // Look for any active animations, and finish them
7927
-
7928
-
7929
- for (index = timers.length; index--;) {
7930
- if (timers[index].elem === this && timers[index].queue === type) {
7931
- timers[index].anim.stop(true);
7932
- timers.splice(index, 1);
7933
- }
7934
- } // Look for any animations in the old queue and finish them
7935
-
7936
-
7937
- for (index = 0; index < length; index++) {
7938
- if (queue[index] && queue[index].finish) {
7939
- queue[index].finish.call(this);
7940
- }
7941
- } // Turn off finishing flag
7942
-
7943
-
7944
- delete data.finish;
7945
- });
7946
- }
7947
- });
7948
- jQuery.each(["toggle", "show", "hide"], function (_i, name) {
7949
- var cssFn = jQuery.fn[name];
7950
-
7951
- jQuery.fn[name] = function (speed, easing, callback) {
7952
- return speed == null || typeof speed === "boolean" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);
7953
- };
7954
- }); // Generate shortcuts for custom animations
7955
-
7956
- jQuery.each({
7957
- slideDown: genFx("show"),
7958
- slideUp: genFx("hide"),
7959
- slideToggle: genFx("toggle"),
7960
- fadeIn: {
7961
- opacity: "show"
7962
- },
7963
- fadeOut: {
7964
- opacity: "hide"
7965
- },
7966
- fadeToggle: {
7967
- opacity: "toggle"
7968
- }
7969
- }, function (name, props) {
7970
- jQuery.fn[name] = function (speed, easing, callback) {
7971
- return this.animate(props, speed, easing, callback);
7972
- };
7973
- });
7974
- jQuery.timers = [];
7975
-
7976
- jQuery.fx.tick = function () {
7977
- var timer,
7978
- i = 0,
7979
- timers = jQuery.timers;
7980
- fxNow = Date.now();
7981
-
7982
- for (; i < timers.length; i++) {
7983
- timer = timers[i]; // Run the timer and safely remove it when done (allowing for external removal)
7984
-
7985
- if (!timer() && timers[i] === timer) {
7986
- timers.splice(i--, 1);
7987
- }
7988
- }
7989
-
7990
- if (!timers.length) {
7991
- jQuery.fx.stop();
7992
- }
7993
-
7994
- fxNow = undefined;
7995
- };
7996
-
7997
- jQuery.fx.timer = function (timer) {
7998
- jQuery.timers.push(timer);
7999
- jQuery.fx.start();
8000
- };
8001
-
8002
- jQuery.fx.interval = 13;
8003
-
8004
- jQuery.fx.start = function () {
8005
- if (inProgress) {
8006
- return;
8007
- }
8008
-
8009
- inProgress = true;
8010
- schedule();
8011
- };
8012
-
8013
- jQuery.fx.stop = function () {
8014
- inProgress = null;
8015
- };
8016
-
8017
- jQuery.fx.speeds = {
8018
- slow: 600,
8019
- fast: 200,
8020
- // Default speed
8021
- _default: 400
8022
- }; // Based off of the plugin by Clint Helfers, with permission.
8023
- // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
8024
-
8025
- jQuery.fn.delay = function (time, type) {
8026
- time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
8027
- type = type || "fx";
8028
- return this.queue(type, function (next, hooks) {
8029
- var timeout = window.setTimeout(next, time);
8030
-
8031
- hooks.stop = function () {
8032
- window.clearTimeout(timeout);
8033
- };
8034
- });
8035
- };
8036
-
8037
- (function () {
8038
- var input = document.createElement("input"),
8039
- select = document.createElement("select"),
8040
- opt = select.appendChild(document.createElement("option"));
8041
- input.type = "checkbox"; // Support: Android <=4.3 only
8042
- // Default value for a checkbox should be "on"
8043
-
8044
- support.checkOn = input.value !== ""; // Support: IE <=11 only
8045
- // Must access selectedIndex to make default options select
8046
-
8047
- support.optSelected = opt.selected; // Support: IE <=11 only
8048
- // An input loses its value after becoming a radio
8049
-
8050
- input = document.createElement("input");
8051
- input.value = "t";
8052
- input.type = "radio";
8053
- support.radioValue = input.value === "t";
8054
- })();
8055
-
8056
- var boolHook,
8057
- attrHandle = jQuery.expr.attrHandle;
8058
- jQuery.fn.extend({
8059
- attr: function attr(name, value) {
8060
- return access(this, jQuery.attr, name, value, arguments.length > 1);
8061
- },
8062
- removeAttr: function removeAttr(name) {
8063
- return this.each(function () {
8064
- jQuery.removeAttr(this, name);
8065
- });
8066
- }
8067
- });
8068
- jQuery.extend({
8069
- attr: function attr(elem, name, value) {
8070
- var ret,
8071
- hooks,
8072
- nType = elem.nodeType; // Don't get/set attributes on text, comment and attribute nodes
8073
-
8074
- if (nType === 3 || nType === 8 || nType === 2) {
8075
- return;
8076
- } // Fallback to prop when attributes are not supported
8077
-
8078
-
8079
- if (typeof elem.getAttribute === "undefined") {
8080
- return jQuery.prop(elem, name, value);
8081
- } // Attribute hooks are determined by the lowercase version
8082
- // Grab necessary hook if one is defined
8083
-
8084
-
8085
- if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
8086
- hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);
8087
- }
8088
-
8089
- if (value !== undefined) {
8090
- if (value === null) {
8091
- jQuery.removeAttr(elem, name);
8092
- return;
8093
- }
8094
-
8095
- if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
8096
- return ret;
8097
- }
8098
-
8099
- elem.setAttribute(name, value + "");
8100
- return value;
8101
- }
8102
-
8103
- if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
8104
- return ret;
8105
- }
8106
-
8107
- ret = jQuery.find.attr(elem, name); // Non-existent attributes return null, we normalize to undefined
8108
-
8109
- return ret == null ? undefined : ret;
8110
- },
8111
- attrHooks: {
8112
- type: {
8113
- set: function set(elem, value) {
8114
- if (!support.radioValue && value === "radio" && nodeName(elem, "input")) {
8115
- var val = elem.value;
8116
- elem.setAttribute("type", value);
8117
-
8118
- if (val) {
8119
- elem.value = val;
8120
- }
8121
-
8122
- return value;
8123
- }
8124
- }
8125
- }
8126
- },
8127
- removeAttr: function removeAttr(elem, value) {
8128
- var name,
8129
- i = 0,
8130
- // Attribute names can contain non-HTML whitespace characters
8131
- // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
8132
- attrNames = value && value.match(rnothtmlwhite);
8133
-
8134
- if (attrNames && elem.nodeType === 1) {
8135
- while (name = attrNames[i++]) {
8136
- elem.removeAttribute(name);
8137
- }
8138
- }
8139
- }
8140
- }); // Hooks for boolean attributes
8141
-
8142
- boolHook = {
8143
- set: function set(elem, value, name) {
8144
- if (value === false) {
8145
- // Remove boolean attributes when set to false
8146
- jQuery.removeAttr(elem, name);
8147
- } else {
8148
- elem.setAttribute(name, name);
8149
- }
8150
-
8151
- return name;
8152
- }
8153
- };
8154
- jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function (_i, name) {
8155
- var getter = attrHandle[name] || jQuery.find.attr;
8156
-
8157
- attrHandle[name] = function (elem, name, isXML) {
8158
- var ret,
8159
- handle,
8160
- lowercaseName = name.toLowerCase();
8161
-
8162
- if (!isXML) {
8163
- // Avoid an infinite loop by temporarily removing this function from the getter
8164
- handle = attrHandle[lowercaseName];
8165
- attrHandle[lowercaseName] = ret;
8166
- ret = getter(elem, name, isXML) != null ? lowercaseName : null;
8167
- attrHandle[lowercaseName] = handle;
8168
- }
8169
-
8170
- return ret;
8171
- };
8172
- });
8173
- var rfocusable = /^(?:input|select|textarea|button)$/i,
8174
- rclickable = /^(?:a|area)$/i;
8175
- jQuery.fn.extend({
8176
- prop: function prop(name, value) {
8177
- return access(this, jQuery.prop, name, value, arguments.length > 1);
8178
- },
8179
- removeProp: function removeProp(name) {
8180
- return this.each(function () {
8181
- delete this[jQuery.propFix[name] || name];
8182
- });
8183
- }
8184
- });
8185
- jQuery.extend({
8186
- prop: function prop(elem, name, value) {
8187
- var ret,
8188
- hooks,
8189
- nType = elem.nodeType; // Don't get/set properties on text, comment and attribute nodes
8190
-
8191
- if (nType === 3 || nType === 8 || nType === 2) {
8192
- return;
8193
- }
8194
-
8195
- if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
8196
- // Fix name and attach hooks
8197
- name = jQuery.propFix[name] || name;
8198
- hooks = jQuery.propHooks[name];
8199
- }
8200
-
8201
- if (value !== undefined) {
8202
- if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
8203
- return ret;
8204
- }
8205
-
8206
- return elem[name] = value;
8207
- }
8208
-
8209
- if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
8210
- return ret;
8211
- }
8212
-
8213
- return elem[name];
8214
- },
8215
- propHooks: {
8216
- tabIndex: {
8217
- get: function get(elem) {
8218
- // Support: IE <=9 - 11 only
8219
- // elem.tabIndex doesn't always return the
8220
- // correct value when it hasn't been explicitly set
8221
- // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
8222
- // Use proper attribute retrieval(#12072)
8223
- var tabindex = jQuery.find.attr(elem, "tabindex");
8224
-
8225
- if (tabindex) {
8226
- return parseInt(tabindex, 10);
8227
- }
8228
-
8229
- if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {
8230
- return 0;
8231
- }
8232
-
8233
- return -1;
8234
- }
8235
- }
8236
- },
8237
- propFix: {
8238
- "for": "htmlFor",
8239
- "class": "className"
8240
- }
8241
- }); // Support: IE <=11 only
8242
- // Accessing the selectedIndex property
8243
- // forces the browser to respect setting selected
8244
- // on the option
8245
- // The getter ensures a default option is selected
8246
- // when in an optgroup
8247
- // eslint rule "no-unused-expressions" is disabled for this code
8248
- // since it considers such accessions noop
8249
-
8250
- if (!support.optSelected) {
8251
- jQuery.propHooks.selected = {
8252
- get: function get(elem) {
8253
- /* eslint no-unused-expressions: "off" */
8254
- var parent = elem.parentNode;
8255
-
8256
- if (parent && parent.parentNode) {
8257
- parent.parentNode.selectedIndex;
8258
- }
8259
-
8260
- return null;
8261
- },
8262
- set: function set(elem) {
8263
- /* eslint no-unused-expressions: "off" */
8264
- var parent = elem.parentNode;
8265
-
8266
- if (parent) {
8267
- parent.selectedIndex;
8268
-
8269
- if (parent.parentNode) {
8270
- parent.parentNode.selectedIndex;
8271
- }
8272
- }
8273
- }
8274
- };
8275
- }
8276
-
8277
- jQuery.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
8278
- jQuery.propFix[this.toLowerCase()] = this;
8279
- }); // Strip and collapse whitespace according to HTML spec
8280
- // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
8281
-
8282
- function stripAndCollapse(value) {
8283
- var tokens = value.match(rnothtmlwhite) || [];
8284
- return tokens.join(" ");
8285
- }
8286
-
8287
- function getClass(elem) {
8288
- return elem.getAttribute && elem.getAttribute("class") || "";
8289
- }
8290
-
8291
- function classesToArray(value) {
8292
- if (Array.isArray(value)) {
8293
- return value;
8294
- }
8295
-
8296
- if (typeof value === "string") {
8297
- return value.match(rnothtmlwhite) || [];
8298
- }
8299
-
8300
- return [];
8301
- }
8302
-
8303
- jQuery.fn.extend({
8304
- addClass: function addClass(value) {
8305
- var classes,
8306
- elem,
8307
- cur,
8308
- curValue,
8309
- clazz,
8310
- j,
8311
- finalValue,
8312
- i = 0;
8313
-
8314
- if (isFunction(value)) {
8315
- return this.each(function (j) {
8316
- jQuery(this).addClass(value.call(this, j, getClass(this)));
8317
- });
8318
- }
8319
-
8320
- classes = classesToArray(value);
8321
-
8322
- if (classes.length) {
8323
- while (elem = this[i++]) {
8324
- curValue = getClass(elem);
8325
- cur = elem.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
8326
-
8327
- if (cur) {
8328
- j = 0;
8329
-
8330
- while (clazz = classes[j++]) {
8331
- if (cur.indexOf(" " + clazz + " ") < 0) {
8332
- cur += clazz + " ";
8333
- }
8334
- } // Only assign if different to avoid unneeded rendering.
8335
-
8336
-
8337
- finalValue = stripAndCollapse(cur);
8338
-
8339
- if (curValue !== finalValue) {
8340
- elem.setAttribute("class", finalValue);
8341
- }
8342
- }
8343
- }
8344
- }
8345
-
8346
- return this;
8347
- },
8348
- removeClass: function removeClass(value) {
8349
- var classes,
8350
- elem,
8351
- cur,
8352
- curValue,
8353
- clazz,
8354
- j,
8355
- finalValue,
8356
- i = 0;
8357
-
8358
- if (isFunction(value)) {
8359
- return this.each(function (j) {
8360
- jQuery(this).removeClass(value.call(this, j, getClass(this)));
8361
- });
8362
- }
8363
-
8364
- if (!arguments.length) {
8365
- return this.attr("class", "");
8366
- }
8367
-
8368
- classes = classesToArray(value);
8369
-
8370
- if (classes.length) {
8371
- while (elem = this[i++]) {
8372
- curValue = getClass(elem); // This expression is here for better compressibility (see addClass)
8373
-
8374
- cur = elem.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
8375
-
8376
- if (cur) {
8377
- j = 0;
8378
-
8379
- while (clazz = classes[j++]) {
8380
- // Remove *all* instances
8381
- while (cur.indexOf(" " + clazz + " ") > -1) {
8382
- cur = cur.replace(" " + clazz + " ", " ");
8383
- }
8384
- } // Only assign if different to avoid unneeded rendering.
8385
-
8386
-
8387
- finalValue = stripAndCollapse(cur);
8388
-
8389
- if (curValue !== finalValue) {
8390
- elem.setAttribute("class", finalValue);
8391
- }
8392
- }
8393
- }
8394
- }
8395
-
8396
- return this;
8397
- },
8398
- toggleClass: function toggleClass(value, stateVal) {
8399
- var type = _typeof(value),
8400
- isValidValue = type === "string" || Array.isArray(value);
8401
-
8402
- if (typeof stateVal === "boolean" && isValidValue) {
8403
- return stateVal ? this.addClass(value) : this.removeClass(value);
8404
- }
8405
-
8406
- if (isFunction(value)) {
8407
- return this.each(function (i) {
8408
- jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);
8409
- });
8410
- }
8411
-
8412
- return this.each(function () {
8413
- var className, i, self, classNames;
8414
-
8415
- if (isValidValue) {
8416
- // Toggle individual class names
8417
- i = 0;
8418
- self = jQuery(this);
8419
- classNames = classesToArray(value);
8420
-
8421
- while (className = classNames[i++]) {
8422
- // Check each className given, space separated list
8423
- if (self.hasClass(className)) {
8424
- self.removeClass(className);
8425
- } else {
8426
- self.addClass(className);
8427
- }
8428
- } // Toggle whole class name
8429
-
8430
- } else if (value === undefined || type === "boolean") {
8431
- className = getClass(this);
8432
-
8433
- if (className) {
8434
- // Store className if set
8435
- dataPriv.set(this, "__className__", className);
8436
- } // If the element has a class name or if we're passed `false`,
8437
- // then remove the whole classname (if there was one, the above saved it).
8438
- // Otherwise bring back whatever was previously saved (if anything),
8439
- // falling back to the empty string if nothing was stored.
8440
-
8441
-
8442
- if (this.setAttribute) {
8443
- this.setAttribute("class", className || value === false ? "" : dataPriv.get(this, "__className__") || "");
8444
- }
8445
- }
8446
- });
8447
- },
8448
- hasClass: function hasClass(selector) {
8449
- var className,
8450
- elem,
8451
- i = 0;
8452
- className = " " + selector + " ";
8453
-
8454
- while (elem = this[i++]) {
8455
- if (elem.nodeType === 1 && (" " + stripAndCollapse(getClass(elem)) + " ").indexOf(className) > -1) {
8456
- return true;
8457
- }
8458
- }
8459
-
8460
- return false;
8461
- }
8462
- });
8463
- var rreturn = /\r/g;
8464
- jQuery.fn.extend({
8465
- val: function val(value) {
8466
- var hooks,
8467
- ret,
8468
- valueIsFunction,
8469
- elem = this[0];
8470
-
8471
- if (!arguments.length) {
8472
- if (elem) {
8473
- hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];
8474
-
8475
- if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) {
8476
- return ret;
8477
- }
8478
-
8479
- ret = elem.value; // Handle most common string cases
8480
-
8481
- if (typeof ret === "string") {
8482
- return ret.replace(rreturn, "");
8483
- } // Handle cases where value is null/undef or number
8484
-
8485
-
8486
- return ret == null ? "" : ret;
8487
- }
8488
-
8489
- return;
8490
- }
8491
-
8492
- valueIsFunction = isFunction(value);
8493
- return this.each(function (i) {
8494
- var val;
8495
-
8496
- if (this.nodeType !== 1) {
8497
- return;
8498
- }
8499
-
8500
- if (valueIsFunction) {
8501
- val = value.call(this, i, jQuery(this).val());
8502
- } else {
8503
- val = value;
8504
- } // Treat null/undefined as ""; convert numbers to string
8505
-
8506
-
8507
- if (val == null) {
8508
- val = "";
8509
- } else if (typeof val === "number") {
8510
- val += "";
8511
- } else if (Array.isArray(val)) {
8512
- val = jQuery.map(val, function (value) {
8513
- return value == null ? "" : value + "";
8514
- });
8515
- }
8516
-
8517
- hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; // If set returns undefined, fall back to normal setting
8518
-
8519
- if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) {
8520
- this.value = val;
8521
- }
8522
- });
8523
- }
8524
- });
8525
- jQuery.extend({
8526
- valHooks: {
8527
- option: {
8528
- get: function get(elem) {
8529
- var val = jQuery.find.attr(elem, "value");
8530
- return val != null ? val : // Support: IE <=10 - 11 only
8531
- // option.text throws exceptions (#14686, #14858)
8532
- // Strip and collapse whitespace
8533
- // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
8534
- stripAndCollapse(jQuery.text(elem));
8535
- }
8536
- },
8537
- select: {
8538
- get: function get(elem) {
8539
- var value,
8540
- option,
8541
- i,
8542
- options = elem.options,
8543
- index = elem.selectedIndex,
8544
- one = elem.type === "select-one",
8545
- values = one ? null : [],
8546
- max = one ? index + 1 : options.length;
8547
-
8548
- if (index < 0) {
8549
- i = max;
8550
- } else {
8551
- i = one ? index : 0;
8552
- } // Loop through all the selected options
8553
-
8554
-
8555
- for (; i < max; i++) {
8556
- option = options[i]; // Support: IE <=9 only
8557
- // IE8-9 doesn't update selected after form reset (#2551)
8558
-
8559
- if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup
8560
- !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, "optgroup"))) {
8561
- // Get the specific value for the option
8562
- value = jQuery(option).val(); // We don't need an array for one selects
8563
-
8564
- if (one) {
8565
- return value;
8566
- } // Multi-Selects return an array
8567
-
8568
-
8569
- values.push(value);
8570
- }
8571
- }
8572
-
8573
- return values;
8574
- },
8575
- set: function set(elem, value) {
8576
- var optionSet,
8577
- option,
8578
- options = elem.options,
8579
- values = jQuery.makeArray(value),
8580
- i = options.length;
8581
-
8582
- while (i--) {
8583
- option = options[i];
8584
- /* eslint-disable no-cond-assign */
8585
-
8586
- if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {
8587
- optionSet = true;
8588
- }
8589
- /* eslint-enable no-cond-assign */
8590
-
8591
- } // Force browsers to behave consistently when non-matching value is set
8592
-
8593
-
8594
- if (!optionSet) {
8595
- elem.selectedIndex = -1;
8596
- }
8597
-
8598
- return values;
8599
- }
8600
- }
8601
- }
8602
- }); // Radios and checkboxes getter/setter
8603
-
8604
- jQuery.each(["radio", "checkbox"], function () {
8605
- jQuery.valHooks[this] = {
8606
- set: function set(elem, value) {
8607
- if (Array.isArray(value)) {
8608
- return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;
8609
- }
8610
- }
8611
- };
8612
-
8613
- if (!support.checkOn) {
8614
- jQuery.valHooks[this].get = function (elem) {
8615
- return elem.getAttribute("value") === null ? "on" : elem.value;
8616
- };
8617
- }
8618
- }); // Return jQuery for attributes-only inclusion
8619
-
8620
- support.focusin = "onfocusin" in window;
8621
-
8622
- var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
8623
- stopPropagationCallback = function stopPropagationCallback(e) {
8624
- e.stopPropagation();
8625
- };
8626
-
8627
- jQuery.extend(jQuery.event, {
8628
- trigger: function trigger(event, data, elem, onlyHandlers) {
8629
- var i,
8630
- cur,
8631
- tmp,
8632
- bubbleType,
8633
- ontype,
8634
- handle,
8635
- special,
8636
- lastElement,
8637
- eventPath = [elem || document],
8638
- type = hasOwn.call(event, "type") ? event.type : event,
8639
- namespaces = hasOwn.call(event, "namespace") ? event.namespace.split(".") : [];
8640
- cur = lastElement = tmp = elem = elem || document; // Don't do events on text and comment nodes
8641
-
8642
- if (elem.nodeType === 3 || elem.nodeType === 8) {
8643
- return;
8644
- } // focus/blur morphs to focusin/out; ensure we're not firing them right now
8645
-
8646
-
8647
- if (rfocusMorph.test(type + jQuery.event.triggered)) {
8648
- return;
8649
- }
8650
-
8651
- if (type.indexOf(".") > -1) {
8652
- // Namespaced trigger; create a regexp to match event type in handle()
8653
- namespaces = type.split(".");
8654
- type = namespaces.shift();
8655
- namespaces.sort();
8656
- }
8657
-
8658
- ontype = type.indexOf(":") < 0 && "on" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string
8659
-
8660
- event = event[jQuery.expando] ? event : new jQuery.Event(type, _typeof(event) === "object" && event); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
8661
-
8662
- event.isTrigger = onlyHandlers ? 2 : 3;
8663
- event.namespace = namespaces.join(".");
8664
- event.rnamespace = event.namespace ? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; // Clean up the event in case it is being reused
8665
-
8666
- event.result = undefined;
8667
-
8668
- if (!event.target) {
8669
- event.target = elem;
8670
- } // Clone any incoming data and prepend the event, creating the handler arg list
8671
-
8672
-
8673
- data = data == null ? [event] : jQuery.makeArray(data, [event]); // Allow special events to draw outside the lines
8674
-
8675
- special = jQuery.event.special[type] || {};
8676
-
8677
- if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {
8678
- return;
8679
- } // Determine event propagation path in advance, per W3C events spec (#9951)
8680
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
8681
-
8682
-
8683
- if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {
8684
- bubbleType = special.delegateType || type;
8685
-
8686
- if (!rfocusMorph.test(bubbleType + type)) {
8687
- cur = cur.parentNode;
8688
- }
8689
-
8690
- for (; cur; cur = cur.parentNode) {
8691
- eventPath.push(cur);
8692
- tmp = cur;
8693
- } // Only add window if we got to document (e.g., not plain obj or detached DOM)
8694
-
8695
-
8696
- if (tmp === (elem.ownerDocument || document)) {
8697
- eventPath.push(tmp.defaultView || tmp.parentWindow || window);
8698
- }
8699
- } // Fire handlers on the event path
8700
-
8701
-
8702
- i = 0;
8703
-
8704
- while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {
8705
- lastElement = cur;
8706
- event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler
8707
-
8708
- handle = (dataPriv.get(cur, "events") || Object.create(null))[event.type] && dataPriv.get(cur, "handle");
8709
-
8710
- if (handle) {
8711
- handle.apply(cur, data);
8712
- } // Native handler
8713
-
8714
-
8715
- handle = ontype && cur[ontype];
8716
-
8717
- if (handle && handle.apply && acceptData(cur)) {
8718
- event.result = handle.apply(cur, data);
8719
-
8720
- if (event.result === false) {
8721
- event.preventDefault();
8722
- }
8723
- }
8724
- }
8725
-
8726
- event.type = type; // If nobody prevented the default action, do it now
8727
-
8728
- if (!onlyHandlers && !event.isDefaultPrevented()) {
8729
- if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {
8730
- // Call a native DOM method on the target with the same name as the event.
8731
- // Don't do default actions on window, that's where global variables be (#6170)
8732
- if (ontype && isFunction(elem[type]) && !isWindow(elem)) {
8733
- // Don't re-trigger an onFOO event when we call its FOO() method
8734
- tmp = elem[ontype];
8735
-
8736
- if (tmp) {
8737
- elem[ontype] = null;
8738
- } // Prevent re-triggering of the same event, since we already bubbled it above
8739
-
8740
-
8741
- jQuery.event.triggered = type;
8742
-
8743
- if (event.isPropagationStopped()) {
8744
- lastElement.addEventListener(type, stopPropagationCallback);
8745
- }
8746
-
8747
- elem[type]();
8748
-
8749
- if (event.isPropagationStopped()) {
8750
- lastElement.removeEventListener(type, stopPropagationCallback);
8751
- }
8752
-
8753
- jQuery.event.triggered = undefined;
8754
-
8755
- if (tmp) {
8756
- elem[ontype] = tmp;
8757
- }
8758
- }
8759
- }
8760
- }
8761
-
8762
- return event.result;
8763
- },
8764
- // Piggyback on a donor event to simulate a different one
8765
- // Used only for `focus(in | out)` events
8766
- simulate: function simulate(type, elem, event) {
8767
- var e = jQuery.extend(new jQuery.Event(), event, {
8768
- type: type,
8769
- isSimulated: true
8770
- });
8771
- jQuery.event.trigger(e, null, elem);
8772
- }
8773
- });
8774
- jQuery.fn.extend({
8775
- trigger: function trigger(type, data) {
8776
- return this.each(function () {
8777
- jQuery.event.trigger(type, data, this);
8778
- });
8779
- },
8780
- triggerHandler: function triggerHandler(type, data) {
8781
- var elem = this[0];
8782
-
8783
- if (elem) {
8784
- return jQuery.event.trigger(type, data, elem, true);
8785
- }
8786
- }
8787
- }); // Support: Firefox <=44
8788
- // Firefox doesn't have focus(in | out) events
8789
- // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
8790
- //
8791
- // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
8792
- // focus(in | out) events fire after focus & blur events,
8793
- // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
8794
- // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
8795
-
8796
- if (!support.focusin) {
8797
- jQuery.each({
8798
- focus: "focusin",
8799
- blur: "focusout"
8800
- }, function (orig, fix) {
8801
- // Attach a single capturing handler on the document while someone wants focusin/focusout
8802
- var handler = function handler(event) {
8803
- jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));
8804
- };
8805
-
8806
- jQuery.event.special[fix] = {
8807
- setup: function setup() {
8808
- // Handle: regular nodes (via `this.ownerDocument`), window
8809
- // (via `this.document`) & document (via `this`).
8810
- var doc = this.ownerDocument || this.document || this,
8811
- attaches = dataPriv.access(doc, fix);
8812
-
8813
- if (!attaches) {
8814
- doc.addEventListener(orig, handler, true);
8815
- }
8816
-
8817
- dataPriv.access(doc, fix, (attaches || 0) + 1);
8818
- },
8819
- teardown: function teardown() {
8820
- var doc = this.ownerDocument || this.document || this,
8821
- attaches = dataPriv.access(doc, fix) - 1;
8822
-
8823
- if (!attaches) {
8824
- doc.removeEventListener(orig, handler, true);
8825
- dataPriv.remove(doc, fix);
8826
- } else {
8827
- dataPriv.access(doc, fix, attaches);
8828
- }
8829
- }
8830
- };
8831
- });
8832
- }
8833
-
8834
- var location = window.location;
8835
- var nonce = {
8836
- guid: Date.now()
8837
- };
8838
- var rquery = /\?/; // Cross-browser xml parsing
8839
-
8840
- jQuery.parseXML = function (data) {
8841
- var xml;
8842
-
8843
- if (!data || typeof data !== "string") {
8844
- return null;
8845
- } // Support: IE 9 - 11 only
8846
- // IE throws on parseFromString with invalid input.
8847
-
8848
-
8849
- try {
8850
- xml = new window.DOMParser().parseFromString(data, "text/xml");
8851
- } catch (e) {
8852
- xml = undefined;
8853
- }
8854
-
8855
- if (!xml || xml.getElementsByTagName("parsererror").length) {
8856
- jQuery.error("Invalid XML: " + data);
8857
- }
8858
-
8859
- return xml;
8860
- };
8861
-
8862
- var rbracket = /\[\]$/,
8863
- rCRLF = /\r?\n/g,
8864
- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
8865
- rsubmittable = /^(?:input|select|textarea|keygen)/i;
8866
-
8867
- function buildParams(prefix, obj, traditional, add) {
8868
- var name;
8869
-
8870
- if (Array.isArray(obj)) {
8871
- // Serialize array item.
8872
- jQuery.each(obj, function (i, v) {
8873
- if (traditional || rbracket.test(prefix)) {
8874
- // Treat each array item as a scalar.
8875
- add(prefix, v);
8876
- } else {
8877
- // Item is non-scalar (array or object), encode its numeric index.
8878
- buildParams(prefix + "[" + (_typeof(v) === "object" && v != null ? i : "") + "]", v, traditional, add);
8879
- }
8880
- });
8881
- } else if (!traditional && toType(obj) === "object") {
8882
- // Serialize object item.
8883
- for (name in obj) {
8884
- buildParams(prefix + "[" + name + "]", obj[name], traditional, add);
8885
- }
8886
- } else {
8887
- // Serialize scalar item.
8888
- add(prefix, obj);
8889
- }
8890
- } // Serialize an array of form elements or a set of
8891
- // key/values into a query string
8892
-
8893
-
8894
- jQuery.param = function (a, traditional) {
8895
- var prefix,
8896
- s = [],
8897
- add = function add(key, valueOrFunction) {
8898
- // If value is a function, invoke it and use its return value
8899
- var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;
8900
- s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value == null ? "" : value);
8901
- };
8902
-
8903
- if (a == null) {
8904
- return "";
8905
- } // If an array was passed in, assume that it is an array of form elements.
8906
-
8907
-
8908
- if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {
8909
- // Serialize the form elements
8910
- jQuery.each(a, function () {
8911
- add(this.name, this.value);
8912
- });
8913
- } else {
8914
- // If traditional, encode the "old" way (the way 1.3.2 or older
8915
- // did it), otherwise encode params recursively.
8916
- for (prefix in a) {
8917
- buildParams(prefix, a[prefix], traditional, add);
8918
- }
8919
- } // Return the resulting serialization
8920
-
8921
-
8922
- return s.join("&");
8923
- };
8924
-
8925
- jQuery.fn.extend({
8926
- serialize: function serialize() {
8927
- return jQuery.param(this.serializeArray());
8928
- },
8929
- serializeArray: function serializeArray() {
8930
- return this.map(function () {
8931
- // Can add propHook for "elements" to filter or add form elements
8932
- var elements = jQuery.prop(this, "elements");
8933
- return elements ? jQuery.makeArray(elements) : this;
8934
- }).filter(function () {
8935
- var type = this.type; // Use .is( ":disabled" ) so that fieldset[disabled] works
8936
-
8937
- return this.name && !jQuery(this).is(":disabled") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));
8938
- }).map(function (_i, elem) {
8939
- var val = jQuery(this).val();
8940
-
8941
- if (val == null) {
8942
- return null;
8943
- }
8944
-
8945
- if (Array.isArray(val)) {
8946
- return jQuery.map(val, function (val) {
8947
- return {
8948
- name: elem.name,
8949
- value: val.replace(rCRLF, "\r\n")
8950
- };
8951
- });
8952
- }
8953
-
8954
- return {
8955
- name: elem.name,
8956
- value: val.replace(rCRLF, "\r\n")
8957
- };
8958
- }).get();
8959
- }
8960
- });
8961
- var r20 = /%20/g,
8962
- rhash = /#.*$/,
8963
- rantiCache = /([?&])_=[^&]*/,
8964
- rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
8965
- // #7653, #8125, #8152: local protocol detection
8966
- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
8967
- rnoContent = /^(?:GET|HEAD)$/,
8968
- rprotocol = /^\/\//,
8969
-
8970
- /* Prefilters
8971
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
8972
- * 2) These are called:
8973
- * - BEFORE asking for a transport
8974
- * - AFTER param serialization (s.data is a string if s.processData is true)
8975
- * 3) key is the dataType
8976
- * 4) the catchall symbol "*" can be used
8977
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
8978
- */
8979
- prefilters = {},
8980
-
8981
- /* Transports bindings
8982
- * 1) key is the dataType
8983
- * 2) the catchall symbol "*" can be used
8984
- * 3) selection will start with transport dataType and THEN go to "*" if needed
8985
- */
8986
- transports = {},
8987
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
8988
- allTypes = "*/".concat("*"),
8989
- // Anchor tag for parsing the document origin
8990
- originAnchor = document.createElement("a");
8991
- originAnchor.href = location.href; // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
8992
-
8993
- function addToPrefiltersOrTransports(structure) {
8994
- // dataTypeExpression is optional and defaults to "*"
8995
- return function (dataTypeExpression, func) {
8996
- if (typeof dataTypeExpression !== "string") {
8997
- func = dataTypeExpression;
8998
- dataTypeExpression = "*";
8999
- }
9000
-
9001
- var dataType,
9002
- i = 0,
9003
- dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];
9004
-
9005
- if (isFunction(func)) {
9006
- // For each dataType in the dataTypeExpression
9007
- while (dataType = dataTypes[i++]) {
9008
- // Prepend if requested
9009
- if (dataType[0] === "+") {
9010
- dataType = dataType.slice(1) || "*";
9011
- (structure[dataType] = structure[dataType] || []).unshift(func); // Otherwise append
9012
- } else {
9013
- (structure[dataType] = structure[dataType] || []).push(func);
9014
- }
9015
- }
9016
- }
9017
- };
9018
- } // Base inspection function for prefilters and transports
9019
-
9020
-
9021
- function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {
9022
- var inspected = {},
9023
- seekingTransport = structure === transports;
9024
-
9025
- function inspect(dataType) {
9026
- var selected;
9027
- inspected[dataType] = true;
9028
- jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {
9029
- var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);
9030
-
9031
- if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) {
9032
- options.dataTypes.unshift(dataTypeOrTransport);
9033
- inspect(dataTypeOrTransport);
9034
- return false;
9035
- } else if (seekingTransport) {
9036
- return !(selected = dataTypeOrTransport);
9037
- }
9038
- });
9039
- return selected;
9040
- }
9041
-
9042
- return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*");
9043
- } // A special extend for ajax options
9044
- // that takes "flat" options (not to be deep extended)
9045
- // Fixes #9887
9046
-
9047
-
9048
- function ajaxExtend(target, src) {
9049
- var key,
9050
- deep,
9051
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
9052
-
9053
- for (key in src) {
9054
- if (src[key] !== undefined) {
9055
- (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];
9056
- }
9057
- }
9058
-
9059
- if (deep) {
9060
- jQuery.extend(true, target, deep);
9061
- }
9062
-
9063
- return target;
9064
- }
9065
- /* Handles responses to an ajax request:
9066
- * - finds the right dataType (mediates between content-type and expected dataType)
9067
- * - returns the corresponding response
9068
- */
9069
-
9070
-
9071
- function ajaxHandleResponses(s, jqXHR, responses) {
9072
- var ct,
9073
- type,
9074
- finalDataType,
9075
- firstDataType,
9076
- contents = s.contents,
9077
- dataTypes = s.dataTypes; // Remove auto dataType and get content-type in the process
9078
-
9079
- while (dataTypes[0] === "*") {
9080
- dataTypes.shift();
9081
-
9082
- if (ct === undefined) {
9083
- ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
9084
- }
9085
- } // Check if we're dealing with a known content-type
9086
-
9087
-
9088
- if (ct) {
9089
- for (type in contents) {
9090
- if (contents[type] && contents[type].test(ct)) {
9091
- dataTypes.unshift(type);
9092
- break;
9093
- }
9094
- }
9095
- } // Check to see if we have a response for the expected dataType
9096
-
9097
-
9098
- if (dataTypes[0] in responses) {
9099
- finalDataType = dataTypes[0];
9100
- } else {
9101
- // Try convertible dataTypes
9102
- for (type in responses) {
9103
- if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) {
9104
- finalDataType = type;
9105
- break;
9106
- }
9107
-
9108
- if (!firstDataType) {
9109
- firstDataType = type;
9110
- }
9111
- } // Or just use first one
9112
-
9113
-
9114
- finalDataType = finalDataType || firstDataType;
9115
- } // If we found a dataType
9116
- // We add the dataType to the list if needed
9117
- // and return the corresponding response
9118
-
9119
-
9120
- if (finalDataType) {
9121
- if (finalDataType !== dataTypes[0]) {
9122
- dataTypes.unshift(finalDataType);
9123
- }
9124
-
9125
- return responses[finalDataType];
9126
- }
9127
- }
9128
- /* Chain conversions given the request and the original response
9129
- * Also sets the responseXXX fields on the jqXHR instance
9130
- */
9131
-
9132
-
9133
- function ajaxConvert(s, response, jqXHR, isSuccess) {
9134
- var conv2,
9135
- current,
9136
- conv,
9137
- tmp,
9138
- prev,
9139
- converters = {},
9140
- // Work with a copy of dataTypes in case we need to modify it for conversion
9141
- dataTypes = s.dataTypes.slice(); // Create converters map with lowercased keys
9142
-
9143
- if (dataTypes[1]) {
9144
- for (conv in s.converters) {
9145
- converters[conv.toLowerCase()] = s.converters[conv];
9146
- }
9147
- }
9148
-
9149
- current = dataTypes.shift(); // Convert to each sequential dataType
9150
-
9151
- while (current) {
9152
- if (s.responseFields[current]) {
9153
- jqXHR[s.responseFields[current]] = response;
9154
- } // Apply the dataFilter if provided
9155
-
9156
-
9157
- if (!prev && isSuccess && s.dataFilter) {
9158
- response = s.dataFilter(response, s.dataType);
9159
- }
9160
-
9161
- prev = current;
9162
- current = dataTypes.shift();
9163
-
9164
- if (current) {
9165
- // There's only work to do if current dataType is non-auto
9166
- if (current === "*") {
9167
- current = prev; // Convert response if prev dataType is non-auto and differs from current
9168
- } else if (prev !== "*" && prev !== current) {
9169
- // Seek a direct converter
9170
- conv = converters[prev + " " + current] || converters["* " + current]; // If none found, seek a pair
9171
-
9172
- if (!conv) {
9173
- for (conv2 in converters) {
9174
- // If conv2 outputs current
9175
- tmp = conv2.split(" ");
9176
-
9177
- if (tmp[1] === current) {
9178
- // If prev can be converted to accepted input
9179
- conv = converters[prev + " " + tmp[0]] || converters["* " + tmp[0]];
9180
-
9181
- if (conv) {
9182
- // Condense equivalence converters
9183
- if (conv === true) {
9184
- conv = converters[conv2]; // Otherwise, insert the intermediate dataType
9185
- } else if (converters[conv2] !== true) {
9186
- current = tmp[0];
9187
- dataTypes.unshift(tmp[1]);
9188
- }
9189
-
9190
- break;
9191
- }
9192
- }
9193
- }
9194
- } // Apply converter (if not an equivalence)
9195
-
9196
-
9197
- if (conv !== true) {
9198
- // Unless errors are allowed to bubble, catch and return them
9199
- if (conv && s["throws"]) {
9200
- response = conv(response);
9201
- } else {
9202
- try {
9203
- response = conv(response);
9204
- } catch (e) {
9205
- return {
9206
- state: "parsererror",
9207
- error: conv ? e : "No conversion from " + prev + " to " + current
9208
- };
9209
- }
9210
- }
9211
- }
9212
- }
9213
- }
9214
- }
9215
-
9216
- return {
9217
- state: "success",
9218
- data: response
9219
- };
9220
- }
9221
-
9222
- jQuery.extend({
9223
- // Counter for holding the number of active queries
9224
- active: 0,
9225
- // Last-Modified header cache for next request
9226
- lastModified: {},
9227
- etag: {},
9228
- ajaxSettings: {
9229
- url: location.href,
9230
- type: "GET",
9231
- isLocal: rlocalProtocol.test(location.protocol),
9232
- global: true,
9233
- processData: true,
9234
- async: true,
9235
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
9236
-
9237
- /*
9238
- timeout: 0,
9239
- data: null,
9240
- dataType: null,
9241
- username: null,
9242
- password: null,
9243
- cache: null,
9244
- throws: false,
9245
- traditional: false,
9246
- headers: {},
9247
- */
9248
- accepts: {
9249
- "*": allTypes,
9250
- text: "text/plain",
9251
- html: "text/html",
9252
- xml: "application/xml, text/xml",
9253
- json: "application/json, text/javascript"
9254
- },
9255
- contents: {
9256
- xml: /\bxml\b/,
9257
- html: /\bhtml/,
9258
- json: /\bjson\b/
9259
- },
9260
- responseFields: {
9261
- xml: "responseXML",
9262
- text: "responseText",
9263
- json: "responseJSON"
9264
- },
9265
- // Data converters
9266
- // Keys separate source (or catchall "*") and destination types with a single space
9267
- converters: {
9268
- // Convert anything to text
9269
- "* text": String,
9270
- // Text to html (true = no transformation)
9271
- "text html": true,
9272
- // Evaluate text as a json expression
9273
- "text json": JSON.parse,
9274
- // Parse text as xml
9275
- "text xml": jQuery.parseXML
9276
- },
9277
- // For options that shouldn't be deep extended:
9278
- // you can add your own custom options here if
9279
- // and when you create one that shouldn't be
9280
- // deep extended (see ajaxExtend)
9281
- flatOptions: {
9282
- url: true,
9283
- context: true
9284
- }
9285
- },
9286
- // Creates a full fledged settings object into target
9287
- // with both ajaxSettings and settings fields.
9288
- // If target is omitted, writes into ajaxSettings.
9289
- ajaxSetup: function ajaxSetup(target, settings) {
9290
- return settings ? // Building a settings object
9291
- ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : // Extending ajaxSettings
9292
- ajaxExtend(jQuery.ajaxSettings, target);
9293
- },
9294
- ajaxPrefilter: addToPrefiltersOrTransports(prefilters),
9295
- ajaxTransport: addToPrefiltersOrTransports(transports),
9296
- // Main method
9297
- ajax: function ajax(url, options) {
9298
- // If url is an object, simulate pre-1.5 signature
9299
- if (_typeof(url) === "object") {
9300
- options = url;
9301
- url = undefined;
9302
- } // Force options to be an object
9303
-
9304
-
9305
- options = options || {};
9306
-
9307
- var transport,
9308
- // URL without anti-cache param
9309
- cacheURL,
9310
- // Response headers
9311
- responseHeadersString,
9312
- responseHeaders,
9313
- // timeout handle
9314
- timeoutTimer,
9315
- // Url cleanup var
9316
- urlAnchor,
9317
- // Request state (becomes false upon send and true upon completion)
9318
- completed,
9319
- // To know if global events are to be dispatched
9320
- fireGlobals,
9321
- // Loop variable
9322
- i,
9323
- // uncached part of the url
9324
- uncached,
9325
- // Create the final options object
9326
- s = jQuery.ajaxSetup({}, options),
9327
- // Callbacks context
9328
- callbackContext = s.context || s,
9329
- // Context for global events is callbackContext if it is a DOM node or jQuery collection
9330
- globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event,
9331
- // Deferreds
9332
- deferred = jQuery.Deferred(),
9333
- completeDeferred = jQuery.Callbacks("once memory"),
9334
- // Status-dependent callbacks
9335
- _statusCode = s.statusCode || {},
9336
- // Headers (they are sent all at once)
9337
- requestHeaders = {},
9338
- requestHeadersNames = {},
9339
- // Default abort message
9340
- strAbort = "canceled",
9341
- // Fake xhr
9342
- jqXHR = {
9343
- readyState: 0,
9344
- // Builds headers hashtable if needed
9345
- getResponseHeader: function getResponseHeader(key) {
9346
- var match;
9347
-
9348
- if (completed) {
9349
- if (!responseHeaders) {
9350
- responseHeaders = {};
9351
-
9352
- while (match = rheaders.exec(responseHeadersString)) {
9353
- responseHeaders[match[1].toLowerCase() + " "] = (responseHeaders[match[1].toLowerCase() + " "] || []).concat(match[2]);
9354
- }
9355
- }
9356
-
9357
- match = responseHeaders[key.toLowerCase() + " "];
9358
- }
9359
-
9360
- return match == null ? null : match.join(", ");
9361
- },
9362
- // Raw string
9363
- getAllResponseHeaders: function getAllResponseHeaders() {
9364
- return completed ? responseHeadersString : null;
9365
- },
9366
- // Caches the header
9367
- setRequestHeader: function setRequestHeader(name, value) {
9368
- if (completed == null) {
9369
- name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;
9370
- requestHeaders[name] = value;
9371
- }
9372
-
9373
- return this;
9374
- },
9375
- // Overrides response content-type header
9376
- overrideMimeType: function overrideMimeType(type) {
9377
- if (completed == null) {
9378
- s.mimeType = type;
9379
- }
9380
-
9381
- return this;
9382
- },
9383
- // Status-dependent callbacks
9384
- statusCode: function statusCode(map) {
9385
- var code;
9386
-
9387
- if (map) {
9388
- if (completed) {
9389
- // Execute the appropriate callbacks
9390
- jqXHR.always(map[jqXHR.status]);
9391
- } else {
9392
- // Lazy-add the new callbacks in a way that preserves old ones
9393
- for (code in map) {
9394
- _statusCode[code] = [_statusCode[code], map[code]];
9395
- }
9396
- }
9397
- }
9398
-
9399
- return this;
9400
- },
9401
- // Cancel the request
9402
- abort: function abort(statusText) {
9403
- var finalText = statusText || strAbort;
9404
-
9405
- if (transport) {
9406
- transport.abort(finalText);
9407
- }
9408
-
9409
- done(0, finalText);
9410
- return this;
9411
- }
9412
- }; // Attach deferreds
9413
-
9414
-
9415
- deferred.promise(jqXHR); // Add protocol if not provided (prefilters might expect it)
9416
- // Handle falsy url in the settings object (#10093: consistency with old signature)
9417
- // We also use the url parameter if available
9418
-
9419
- s.url = ((url || s.url || location.href) + "").replace(rprotocol, location.protocol + "//"); // Alias method option to type as per ticket #12004
9420
-
9421
- s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list
9422
-
9423
- s.dataTypes = (s.dataType || "*").toLowerCase().match(rnothtmlwhite) || [""]; // A cross-domain request is in order when the origin doesn't match the current origin.
9424
-
9425
- if (s.crossDomain == null) {
9426
- urlAnchor = document.createElement("a"); // Support: IE <=8 - 11, Edge 12 - 15
9427
- // IE throws exception on accessing the href property if url is malformed,
9428
- // e.g. http://example.com:80x/
9429
-
9430
- try {
9431
- urlAnchor.href = s.url; // Support: IE <=8 - 11 only
9432
- // Anchor's host property isn't correctly set when s.url is relative
9433
-
9434
- urlAnchor.href = urlAnchor.href;
9435
- s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== urlAnchor.protocol + "//" + urlAnchor.host;
9436
- } catch (e) {
9437
- // If there is an error parsing the URL, assume it is crossDomain,
9438
- // it can be rejected by the transport if it is invalid
9439
- s.crossDomain = true;
9440
- }
9441
- } // Convert data if not already a string
9442
-
9443
-
9444
- if (s.data && s.processData && typeof s.data !== "string") {
9445
- s.data = jQuery.param(s.data, s.traditional);
9446
- } // Apply prefilters
9447
-
9448
-
9449
- inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); // If request was aborted inside a prefilter, stop there
9450
-
9451
- if (completed) {
9452
- return jqXHR;
9453
- } // We can fire global events as of now if asked to
9454
- // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
9455
-
9456
-
9457
- fireGlobals = jQuery.event && s.global; // Watch for a new set of requests
9458
-
9459
- if (fireGlobals && jQuery.active++ === 0) {
9460
- jQuery.event.trigger("ajaxStart");
9461
- } // Uppercase the type
9462
-
9463
-
9464
- s.type = s.type.toUpperCase(); // Determine if request has content
9465
-
9466
- s.hasContent = !rnoContent.test(s.type); // Save the URL in case we're toying with the If-Modified-Since
9467
- // and/or If-None-Match header later on
9468
- // Remove hash to simplify url manipulation
9469
-
9470
- cacheURL = s.url.replace(rhash, ""); // More options handling for requests with no content
9471
-
9472
- if (!s.hasContent) {
9473
- // Remember the hash so we can put it back
9474
- uncached = s.url.slice(cacheURL.length); // If data is available and should be processed, append data to url
9475
-
9476
- if (s.data && (s.processData || typeof s.data === "string")) {
9477
- cacheURL += (rquery.test(cacheURL) ? "&" : "?") + s.data; // #9682: remove data so that it's not used in an eventual retry
9478
-
9479
- delete s.data;
9480
- } // Add or update anti-cache param if needed
9481
-
9482
-
9483
- if (s.cache === false) {
9484
- cacheURL = cacheURL.replace(rantiCache, "$1");
9485
- uncached = (rquery.test(cacheURL) ? "&" : "?") + "_=" + nonce.guid++ + uncached;
9486
- } // Put hash and anti-cache on the URL that will be requested (gh-1732)
9487
-
9488
-
9489
- s.url = cacheURL + uncached; // Change '%20' to '+' if this is encoded form body content (gh-2658)
9490
- } else if (s.data && s.processData && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0) {
9491
- s.data = s.data.replace(r20, "+");
9492
- } // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
9493
-
9494
-
9495
- if (s.ifModified) {
9496
- if (jQuery.lastModified[cacheURL]) {
9497
- jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[cacheURL]);
9498
- }
9499
-
9500
- if (jQuery.etag[cacheURL]) {
9501
- jqXHR.setRequestHeader("If-None-Match", jQuery.etag[cacheURL]);
9502
- }
9503
- } // Set the correct header, if data is being sent
9504
-
9505
-
9506
- if (s.data && s.hasContent && s.contentType !== false || options.contentType) {
9507
- jqXHR.setRequestHeader("Content-Type", s.contentType);
9508
- } // Set the Accepts header for the server, depending on the dataType
9509
-
9510
-
9511
- jqXHR.setRequestHeader("Accept", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "") : s.accepts["*"]); // Check for headers option
9512
-
9513
- for (i in s.headers) {
9514
- jqXHR.setRequestHeader(i, s.headers[i]);
9515
- } // Allow custom headers/mimetypes and early abort
9516
-
9517
-
9518
- if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {
9519
- // Abort if not done already and return
9520
- return jqXHR.abort();
9521
- } // Aborting is no longer a cancellation
9522
-
9523
-
9524
- strAbort = "abort"; // Install callbacks on deferreds
9525
-
9526
- completeDeferred.add(s.complete);
9527
- jqXHR.done(s.success);
9528
- jqXHR.fail(s.error); // Get transport
9529
-
9530
- transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); // If no transport, we auto-abort
9531
-
9532
- if (!transport) {
9533
- done(-1, "No Transport");
9534
- } else {
9535
- jqXHR.readyState = 1; // Send global event
9536
-
9537
- if (fireGlobals) {
9538
- globalEventContext.trigger("ajaxSend", [jqXHR, s]);
9539
- } // If request was aborted inside ajaxSend, stop there
9540
-
9541
-
9542
- if (completed) {
9543
- return jqXHR;
9544
- } // Timeout
9545
-
9546
-
9547
- if (s.async && s.timeout > 0) {
9548
- timeoutTimer = window.setTimeout(function () {
9549
- jqXHR.abort("timeout");
9550
- }, s.timeout);
9551
- }
9552
-
9553
- try {
9554
- completed = false;
9555
- transport.send(requestHeaders, done);
9556
- } catch (e) {
9557
- // Rethrow post-completion exceptions
9558
- if (completed) {
9559
- throw e;
9560
- } // Propagate others as results
9561
-
9562
-
9563
- done(-1, e);
9564
- }
9565
- } // Callback for when everything is done
9566
-
9567
-
9568
- function done(status, nativeStatusText, responses, headers) {
9569
- var isSuccess,
9570
- success,
9571
- error,
9572
- response,
9573
- modified,
9574
- statusText = nativeStatusText; // Ignore repeat invocations
9575
-
9576
- if (completed) {
9577
- return;
9578
- }
9579
-
9580
- completed = true; // Clear timeout if it exists
9581
-
9582
- if (timeoutTimer) {
9583
- window.clearTimeout(timeoutTimer);
9584
- } // Dereference transport for early garbage collection
9585
- // (no matter how long the jqXHR object will be used)
9586
-
9587
-
9588
- transport = undefined; // Cache response headers
9589
-
9590
- responseHeadersString = headers || ""; // Set readyState
9591
-
9592
- jqXHR.readyState = status > 0 ? 4 : 0; // Determine if successful
9593
-
9594
- isSuccess = status >= 200 && status < 300 || status === 304; // Get response data
9595
-
9596
- if (responses) {
9597
- response = ajaxHandleResponses(s, jqXHR, responses);
9598
- } // Use a noop converter for missing script
9599
-
9600
-
9601
- if (!isSuccess && jQuery.inArray("script", s.dataTypes) > -1) {
9602
- s.converters["text script"] = function () {};
9603
- } // Convert no matter what (that way responseXXX fields are always set)
9604
-
9605
-
9606
- response = ajaxConvert(s, response, jqXHR, isSuccess); // If successful, handle type chaining
9607
-
9608
- if (isSuccess) {
9609
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
9610
- if (s.ifModified) {
9611
- modified = jqXHR.getResponseHeader("Last-Modified");
9612
-
9613
- if (modified) {
9614
- jQuery.lastModified[cacheURL] = modified;
9615
- }
9616
-
9617
- modified = jqXHR.getResponseHeader("etag");
9618
-
9619
- if (modified) {
9620
- jQuery.etag[cacheURL] = modified;
9621
- }
9622
- } // if no content
9623
-
9624
-
9625
- if (status === 204 || s.type === "HEAD") {
9626
- statusText = "nocontent"; // if not modified
9627
- } else if (status === 304) {
9628
- statusText = "notmodified"; // If we have data, let's convert it
9629
- } else {
9630
- statusText = response.state;
9631
- success = response.data;
9632
- error = response.error;
9633
- isSuccess = !error;
9634
- }
9635
- } else {
9636
- // Extract error from statusText and normalize for non-aborts
9637
- error = statusText;
9638
-
9639
- if (status || !statusText) {
9640
- statusText = "error";
9641
-
9642
- if (status < 0) {
9643
- status = 0;
9644
- }
9645
- }
9646
- } // Set data for the fake xhr object
9647
-
9648
-
9649
- jqXHR.status = status;
9650
- jqXHR.statusText = (nativeStatusText || statusText) + ""; // Success/Error
9651
-
9652
- if (isSuccess) {
9653
- deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);
9654
- } else {
9655
- deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);
9656
- } // Status-dependent callbacks
9657
-
9658
-
9659
- jqXHR.statusCode(_statusCode);
9660
- _statusCode = undefined;
9661
-
9662
- if (fireGlobals) {
9663
- globalEventContext.trigger(isSuccess ? "ajaxSuccess" : "ajaxError", [jqXHR, s, isSuccess ? success : error]);
9664
- } // Complete
9665
-
9666
-
9667
- completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);
9668
-
9669
- if (fireGlobals) {
9670
- globalEventContext.trigger("ajaxComplete", [jqXHR, s]); // Handle the global AJAX counter
9671
-
9672
- if (! --jQuery.active) {
9673
- jQuery.event.trigger("ajaxStop");
9674
- }
9675
- }
9676
- }
9677
-
9678
- return jqXHR;
9679
- },
9680
- getJSON: function getJSON(url, data, callback) {
9681
- return jQuery.get(url, data, callback, "json");
9682
- },
9683
- getScript: function getScript(url, callback) {
9684
- return jQuery.get(url, undefined, callback, "script");
9685
- }
9686
- });
9687
- jQuery.each(["get", "post"], function (_i, method) {
9688
- jQuery[method] = function (url, data, callback, type) {
9689
- // Shift arguments if data argument was omitted
9690
- if (isFunction(data)) {
9691
- type = type || callback;
9692
- callback = data;
9693
- data = undefined;
9694
- } // The url can be an options object (which then must have .url)
9695
-
9696
-
9697
- return jQuery.ajax(jQuery.extend({
9698
- url: url,
9699
- type: method,
9700
- dataType: type,
9701
- data: data,
9702
- success: callback
9703
- }, jQuery.isPlainObject(url) && url));
9704
- };
9705
- });
9706
- jQuery.ajaxPrefilter(function (s) {
9707
- var i;
9708
-
9709
- for (i in s.headers) {
9710
- if (i.toLowerCase() === "content-type") {
9711
- s.contentType = s.headers[i] || "";
9712
- }
9713
- }
9714
- });
9715
-
9716
- jQuery._evalUrl = function (url, options, doc) {
9717
- return jQuery.ajax({
9718
- url: url,
9719
- // Make this explicit, since user can override this through ajaxSetup (#11264)
9720
- type: "GET",
9721
- dataType: "script",
9722
- cache: true,
9723
- async: false,
9724
- global: false,
9725
- // Only evaluate the response if it is successful (gh-4126)
9726
- // dataFilter is not invoked for failure responses, so using it instead
9727
- // of the default converter is kludgy but it works.
9728
- converters: {
9729
- "text script": function textScript() {}
9730
- },
9731
- dataFilter: function dataFilter(response) {
9732
- jQuery.globalEval(response, options, doc);
9733
- }
9734
- });
9735
- };
9736
-
9737
- jQuery.fn.extend({
9738
- wrapAll: function wrapAll(html) {
9739
- var wrap;
9740
-
9741
- if (this[0]) {
9742
- if (isFunction(html)) {
9743
- html = html.call(this[0]);
9744
- } // The elements to wrap the target around
9745
-
9746
-
9747
- wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);
9748
-
9749
- if (this[0].parentNode) {
9750
- wrap.insertBefore(this[0]);
9751
- }
9752
-
9753
- wrap.map(function () {
9754
- var elem = this;
9755
-
9756
- while (elem.firstElementChild) {
9757
- elem = elem.firstElementChild;
9758
- }
9759
-
9760
- return elem;
9761
- }).append(this);
9762
- }
9763
-
9764
- return this;
9765
- },
9766
- wrapInner: function wrapInner(html) {
9767
- if (isFunction(html)) {
9768
- return this.each(function (i) {
9769
- jQuery(this).wrapInner(html.call(this, i));
9770
- });
9771
- }
9772
-
9773
- return this.each(function () {
9774
- var self = jQuery(this),
9775
- contents = self.contents();
9776
-
9777
- if (contents.length) {
9778
- contents.wrapAll(html);
9779
- } else {
9780
- self.append(html);
9781
- }
9782
- });
9783
- },
9784
- wrap: function wrap(html) {
9785
- var htmlIsFunction = isFunction(html);
9786
- return this.each(function (i) {
9787
- jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);
9788
- });
9789
- },
9790
- unwrap: function unwrap(selector) {
9791
- this.parent(selector).not("body").each(function () {
9792
- jQuery(this).replaceWith(this.childNodes);
9793
- });
9794
- return this;
9795
- }
9796
- });
9797
-
9798
- jQuery.expr.pseudos.hidden = function (elem) {
9799
- return !jQuery.expr.pseudos.visible(elem);
9800
- };
9801
-
9802
- jQuery.expr.pseudos.visible = function (elem) {
9803
- return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
9804
- };
9805
-
9806
- jQuery.ajaxSettings.xhr = function () {
9807
- try {
9808
- return new window.XMLHttpRequest();
9809
- } catch (e) {}
9810
- };
9811
-
9812
- var xhrSuccessStatus = {
9813
- // File protocol always yields status code 0, assume 200
9814
- 0: 200,
9815
- // Support: IE <=9 only
9816
- // #1450: sometimes IE returns 1223 when it should be 204
9817
- 1223: 204
9818
- },
9819
- xhrSupported = jQuery.ajaxSettings.xhr();
9820
- support.cors = !!xhrSupported && "withCredentials" in xhrSupported;
9821
- support.ajax = xhrSupported = !!xhrSupported;
9822
- jQuery.ajaxTransport(function (options) {
9823
- var _callback, errorCallback; // Cross domain only allowed if supported through XMLHttpRequest
9824
-
9825
-
9826
- if (support.cors || xhrSupported && !options.crossDomain) {
9827
- return {
9828
- send: function send(headers, complete) {
9829
- var i,
9830
- xhr = options.xhr();
9831
- xhr.open(options.type, options.url, options.async, options.username, options.password); // Apply custom fields if provided
9832
-
9833
- if (options.xhrFields) {
9834
- for (i in options.xhrFields) {
9835
- xhr[i] = options.xhrFields[i];
9836
- }
9837
- } // Override mime type if needed
9838
-
9839
-
9840
- if (options.mimeType && xhr.overrideMimeType) {
9841
- xhr.overrideMimeType(options.mimeType);
9842
- } // X-Requested-With header
9843
- // For cross-domain requests, seeing as conditions for a preflight are
9844
- // akin to a jigsaw puzzle, we simply never set it to be sure.
9845
- // (it can always be set on a per-request basis or even using ajaxSetup)
9846
- // For same-domain requests, won't change header if already provided.
9847
-
9848
-
9849
- if (!options.crossDomain && !headers["X-Requested-With"]) {
9850
- headers["X-Requested-With"] = "XMLHttpRequest";
9851
- } // Set headers
9852
-
9853
-
9854
- for (i in headers) {
9855
- xhr.setRequestHeader(i, headers[i]);
9856
- } // Callback
9857
-
9858
-
9859
- _callback = function callback(type) {
9860
- return function () {
9861
- if (_callback) {
9862
- _callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;
9863
-
9864
- if (type === "abort") {
9865
- xhr.abort();
9866
- } else if (type === "error") {
9867
- // Support: IE <=9 only
9868
- // On a manual native abort, IE9 throws
9869
- // errors on any property access that is not readyState
9870
- if (typeof xhr.status !== "number") {
9871
- complete(0, "error");
9872
- } else {
9873
- complete( // File: protocol always yields status 0; see #8605, #14207
9874
- xhr.status, xhr.statusText);
9875
- }
9876
- } else {
9877
- complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, // Support: IE <=9 only
9878
- // IE9 has no XHR2 but throws on binary (trac-11426)
9879
- // For XHR2 non-text, let the caller handle it (gh-2498)
9880
- (xhr.responseType || "text") !== "text" || typeof xhr.responseText !== "string" ? {
9881
- binary: xhr.response
9882
- } : {
9883
- text: xhr.responseText
9884
- }, xhr.getAllResponseHeaders());
9885
- }
9886
- }
9887
- };
9888
- }; // Listen to events
9889
-
9890
-
9891
- xhr.onload = _callback();
9892
- errorCallback = xhr.onerror = xhr.ontimeout = _callback("error"); // Support: IE 9 only
9893
- // Use onreadystatechange to replace onabort
9894
- // to handle uncaught aborts
9895
-
9896
- if (xhr.onabort !== undefined) {
9897
- xhr.onabort = errorCallback;
9898
- } else {
9899
- xhr.onreadystatechange = function () {
9900
- // Check readyState before timeout as it changes
9901
- if (xhr.readyState === 4) {
9902
- // Allow onerror to be called first,
9903
- // but that will not handle a native abort
9904
- // Also, save errorCallback to a variable
9905
- // as xhr.onerror cannot be accessed
9906
- window.setTimeout(function () {
9907
- if (_callback) {
9908
- errorCallback();
9909
- }
9910
- });
9911
- }
9912
- };
9913
- } // Create the abort callback
9914
-
9915
-
9916
- _callback = _callback("abort");
9917
-
9918
- try {
9919
- // Do send the request (this may raise an exception)
9920
- xhr.send(options.hasContent && options.data || null);
9921
- } catch (e) {
9922
- // #14683: Only rethrow if this hasn't been notified as an error yet
9923
- if (_callback) {
9924
- throw e;
9925
- }
9926
- }
9927
- },
9928
- abort: function abort() {
9929
- if (_callback) {
9930
- _callback();
9931
- }
9932
- }
9933
- };
9934
- }
9935
- }); // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
9936
-
9937
- jQuery.ajaxPrefilter(function (s) {
9938
- if (s.crossDomain) {
9939
- s.contents.script = false;
9940
- }
9941
- }); // Install script dataType
9942
-
9943
- jQuery.ajaxSetup({
9944
- accepts: {
9945
- script: "text/javascript, application/javascript, " + "application/ecmascript, application/x-ecmascript"
9946
- },
9947
- contents: {
9948
- script: /\b(?:java|ecma)script\b/
9949
- },
9950
- converters: {
9951
- "text script": function textScript(text) {
9952
- jQuery.globalEval(text);
9953
- return text;
9954
- }
9955
- }
9956
- }); // Handle cache's special case and crossDomain
9957
-
9958
- jQuery.ajaxPrefilter("script", function (s) {
9959
- if (s.cache === undefined) {
9960
- s.cache = false;
9961
- }
9962
-
9963
- if (s.crossDomain) {
9964
- s.type = "GET";
9965
- }
9966
- }); // Bind script tag hack transport
9967
-
9968
- jQuery.ajaxTransport("script", function (s) {
9969
- // This transport only deals with cross domain or forced-by-attrs requests
9970
- if (s.crossDomain || s.scriptAttrs) {
9971
- var script, _callback2;
9972
-
9973
- return {
9974
- send: function send(_, complete) {
9975
- script = jQuery("<script>").attr(s.scriptAttrs || {}).prop({
9976
- charset: s.scriptCharset,
9977
- src: s.url
9978
- }).on("load error", _callback2 = function callback(evt) {
9979
- script.remove();
9980
- _callback2 = null;
9981
-
9982
- if (evt) {
9983
- complete(evt.type === "error" ? 404 : 200, evt.type);
9984
- }
9985
- }); // Use native DOM manipulation to avoid our domManip AJAX trickery
9986
-
9987
- document.head.appendChild(script[0]);
9988
- },
9989
- abort: function abort() {
9990
- if (_callback2) {
9991
- _callback2();
9992
- }
9993
- }
9994
- };
9995
- }
9996
- });
9997
- var oldCallbacks = [],
9998
- rjsonp = /(=)\?(?=&|$)|\?\?/; // Default jsonp settings
9999
-
10000
- jQuery.ajaxSetup({
10001
- jsonp: "callback",
10002
- jsonpCallback: function jsonpCallback() {
10003
- var callback = oldCallbacks.pop() || jQuery.expando + "_" + nonce.guid++;
10004
- this[callback] = true;
10005
- return callback;
10006
- }
10007
- }); // Detect, normalize options and install callbacks for jsonp requests
10008
-
10009
- jQuery.ajaxPrefilter("json jsonp", function (s, originalSettings, jqXHR) {
10010
- var callbackName,
10011
- overwritten,
10012
- responseContainer,
10013
- jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? "url" : typeof s.data === "string" && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0 && rjsonp.test(s.data) && "data"); // Handle iff the expected data type is "jsonp" or we have a parameter to set
10014
-
10015
- if (jsonProp || s.dataTypes[0] === "jsonp") {
10016
- // Get callback name, remembering preexisting value associated with it
10017
- callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback; // Insert callback into url or form data
10018
-
10019
- if (jsonProp) {
10020
- s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName);
10021
- } else if (s.jsonp !== false) {
10022
- s.url += (rquery.test(s.url) ? "&" : "?") + s.jsonp + "=" + callbackName;
10023
- } // Use data converter to retrieve json after script execution
10024
-
10025
-
10026
- s.converters["script json"] = function () {
10027
- if (!responseContainer) {
10028
- jQuery.error(callbackName + " was not called");
10029
- }
10030
-
10031
- return responseContainer[0];
10032
- }; // Force json dataType
10033
-
10034
-
10035
- s.dataTypes[0] = "json"; // Install callback
10036
-
10037
- overwritten = window[callbackName];
10038
-
10039
- window[callbackName] = function () {
10040
- responseContainer = arguments;
10041
- }; // Clean-up function (fires after converters)
10042
-
10043
-
10044
- jqXHR.always(function () {
10045
- // If previous value didn't exist - remove it
10046
- if (overwritten === undefined) {
10047
- jQuery(window).removeProp(callbackName); // Otherwise restore preexisting value
10048
- } else {
10049
- window[callbackName] = overwritten;
10050
- } // Save back as free
10051
-
10052
-
10053
- if (s[callbackName]) {
10054
- // Make sure that re-using the options doesn't screw things around
10055
- s.jsonpCallback = originalSettings.jsonpCallback; // Save the callback name for future use
10056
-
10057
- oldCallbacks.push(callbackName);
10058
- } // Call if it was a function and we have a response
10059
-
10060
-
10061
- if (responseContainer && isFunction(overwritten)) {
10062
- overwritten(responseContainer[0]);
10063
- }
10064
-
10065
- responseContainer = overwritten = undefined;
10066
- }); // Delegate to script
10067
-
10068
- return "script";
10069
- }
10070
- }); // Support: Safari 8 only
10071
- // In Safari 8 documents created via document.implementation.createHTMLDocument
10072
- // collapse sibling forms: the second one becomes a child of the first one.
10073
- // Because of that, this security measure has to be disabled in Safari 8.
10074
- // https://bugs.webkit.org/show_bug.cgi?id=137337
10075
-
10076
- support.createHTMLDocument = function () {
10077
- var body = document.implementation.createHTMLDocument("").body;
10078
- body.innerHTML = "<form></form><form></form>";
10079
- return body.childNodes.length === 2;
10080
- }(); // Argument "data" should be string of html
10081
- // context (optional): If specified, the fragment will be created in this context,
10082
- // defaults to document
10083
- // keepScripts (optional): If true, will include scripts passed in the html string
10084
-
10085
-
10086
- jQuery.parseHTML = function (data, context, keepScripts) {
10087
- if (typeof data !== "string") {
10088
- return [];
10089
- }
10090
-
10091
- if (typeof context === "boolean") {
10092
- keepScripts = context;
10093
- context = false;
10094
- }
10095
-
10096
- var base, parsed, scripts;
10097
-
10098
- if (!context) {
10099
- // Stop scripts or inline event handlers from being executed immediately
10100
- // by using document.implementation
10101
- if (support.createHTMLDocument) {
10102
- context = document.implementation.createHTMLDocument(""); // Set the base href for the created document
10103
- // so any parsed elements with URLs
10104
- // are based on the document's URL (gh-2965)
10105
-
10106
- base = context.createElement("base");
10107
- base.href = document.location.href;
10108
- context.head.appendChild(base);
10109
- } else {
10110
- context = document;
10111
- }
10112
- }
10113
-
10114
- parsed = rsingleTag.exec(data);
10115
- scripts = !keepScripts && []; // Single tag
10116
-
10117
- if (parsed) {
10118
- return [context.createElement(parsed[1])];
10119
- }
10120
-
10121
- parsed = buildFragment([data], context, scripts);
10122
-
10123
- if (scripts && scripts.length) {
10124
- jQuery(scripts).remove();
10125
- }
10126
-
10127
- return jQuery.merge([], parsed.childNodes);
10128
- };
10129
- /**
10130
- * Load a url into a page
10131
- */
10132
-
10133
-
10134
- jQuery.fn.load = function (url, params, callback) {
10135
- var selector,
10136
- type,
10137
- response,
10138
- self = this,
10139
- off = url.indexOf(" ");
10140
-
10141
- if (off > -1) {
10142
- selector = stripAndCollapse(url.slice(off));
10143
- url = url.slice(0, off);
10144
- } // If it's a function
10145
-
10146
-
10147
- if (isFunction(params)) {
10148
- // We assume that it's the callback
10149
- callback = params;
10150
- params = undefined; // Otherwise, build a param string
10151
- } else if (params && _typeof(params) === "object") {
10152
- type = "POST";
10153
- } // If we have elements to modify, make the request
10154
-
10155
-
10156
- if (self.length > 0) {
10157
- jQuery.ajax({
10158
- url: url,
10159
- // If "type" variable is undefined, then "GET" method will be used.
10160
- // Make value of this field explicit since
10161
- // user can override it through ajaxSetup method
10162
- type: type || "GET",
10163
- dataType: "html",
10164
- data: params
10165
- }).done(function (responseText) {
10166
- // Save response for use in complete callback
10167
- response = arguments;
10168
- self.html(selector ? // If a selector was specified, locate the right elements in a dummy div
10169
- // Exclude scripts to avoid IE 'Permission Denied' errors
10170
- jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) : // Otherwise use the full result
10171
- responseText); // If the request succeeds, this function gets "data", "status", "jqXHR"
10172
- // but they are ignored because response was set above.
10173
- // If it fails, this function gets "jqXHR", "status", "error"
10174
- }).always(callback && function (jqXHR, status) {
10175
- self.each(function () {
10176
- callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);
10177
- });
10178
- });
10179
- }
10180
-
10181
- return this;
10182
- };
10183
-
10184
- jQuery.expr.pseudos.animated = function (elem) {
10185
- return jQuery.grep(jQuery.timers, function (fn) {
10186
- return elem === fn.elem;
10187
- }).length;
10188
- };
10189
-
10190
- jQuery.offset = {
10191
- setOffset: function setOffset(elem, options, i) {
10192
- var curPosition,
10193
- curLeft,
10194
- curCSSTop,
10195
- curTop,
10196
- curOffset,
10197
- curCSSLeft,
10198
- calculatePosition,
10199
- position = jQuery.css(elem, "position"),
10200
- curElem = jQuery(elem),
10201
- props = {}; // Set position first, in-case top/left are set even on static elem
10202
-
10203
- if (position === "static") {
10204
- elem.style.position = "relative";
10205
- }
10206
-
10207
- curOffset = curElem.offset();
10208
- curCSSTop = jQuery.css(elem, "top");
10209
- curCSSLeft = jQuery.css(elem, "left");
10210
- calculatePosition = (position === "absolute" || position === "fixed") && (curCSSTop + curCSSLeft).indexOf("auto") > -1; // Need to be able to calculate position if either
10211
- // top or left is auto and position is either absolute or fixed
10212
-
10213
- if (calculatePosition) {
10214
- curPosition = curElem.position();
10215
- curTop = curPosition.top;
10216
- curLeft = curPosition.left;
10217
- } else {
10218
- curTop = parseFloat(curCSSTop) || 0;
10219
- curLeft = parseFloat(curCSSLeft) || 0;
10220
- }
10221
-
10222
- if (isFunction(options)) {
10223
- // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
10224
- options = options.call(elem, i, jQuery.extend({}, curOffset));
10225
- }
10226
-
10227
- if (options.top != null) {
10228
- props.top = options.top - curOffset.top + curTop;
10229
- }
10230
-
10231
- if (options.left != null) {
10232
- props.left = options.left - curOffset.left + curLeft;
10233
- }
10234
-
10235
- if ("using" in options) {
10236
- options.using.call(elem, props);
10237
- } else {
10238
- if (typeof props.top === "number") {
10239
- props.top += "px";
10240
- }
10241
-
10242
- if (typeof props.left === "number") {
10243
- props.left += "px";
10244
- }
10245
-
10246
- curElem.css(props);
10247
- }
10248
- }
10249
- };
10250
- jQuery.fn.extend({
10251
- // offset() relates an element's border box to the document origin
10252
- offset: function offset(options) {
10253
- // Preserve chaining for setter
10254
- if (arguments.length) {
10255
- return options === undefined ? this : this.each(function (i) {
10256
- jQuery.offset.setOffset(this, options, i);
10257
- });
10258
- }
10259
-
10260
- var rect,
10261
- win,
10262
- elem = this[0];
10263
-
10264
- if (!elem) {
10265
- return;
10266
- } // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
10267
- // Support: IE <=11 only
10268
- // Running getBoundingClientRect on a
10269
- // disconnected node in IE throws an error
10270
-
10271
-
10272
- if (!elem.getClientRects().length) {
10273
- return {
10274
- top: 0,
10275
- left: 0
10276
- };
10277
- } // Get document-relative position by adding viewport scroll to viewport-relative gBCR
10278
-
10279
-
10280
- rect = elem.getBoundingClientRect();
10281
- win = elem.ownerDocument.defaultView;
10282
- return {
10283
- top: rect.top + win.pageYOffset,
10284
- left: rect.left + win.pageXOffset
10285
- };
10286
- },
10287
- // position() relates an element's margin box to its offset parent's padding box
10288
- // This corresponds to the behavior of CSS absolute positioning
10289
- position: function position() {
10290
- if (!this[0]) {
10291
- return;
10292
- }
10293
-
10294
- var offsetParent,
10295
- offset,
10296
- doc,
10297
- elem = this[0],
10298
- parentOffset = {
10299
- top: 0,
10300
- left: 0
10301
- }; // position:fixed elements are offset from the viewport, which itself always has zero offset
10302
-
10303
- if (jQuery.css(elem, "position") === "fixed") {
10304
- // Assume position:fixed implies availability of getBoundingClientRect
10305
- offset = elem.getBoundingClientRect();
10306
- } else {
10307
- offset = this.offset(); // Account for the *real* offset parent, which can be the document or its root element
10308
- // when a statically positioned element is identified
10309
-
10310
- doc = elem.ownerDocument;
10311
- offsetParent = elem.offsetParent || doc.documentElement;
10312
-
10313
- while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, "position") === "static") {
10314
- offsetParent = offsetParent.parentNode;
10315
- }
10316
-
10317
- if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {
10318
- // Incorporate borders into its offset, since they are outside its content origin
10319
- parentOffset = jQuery(offsetParent).offset();
10320
- parentOffset.top += jQuery.css(offsetParent, "borderTopWidth", true);
10321
- parentOffset.left += jQuery.css(offsetParent, "borderLeftWidth", true);
10322
- }
10323
- } // Subtract parent offsets and element margins
10324
-
10325
-
10326
- return {
10327
- top: offset.top - parentOffset.top - jQuery.css(elem, "marginTop", true),
10328
- left: offset.left - parentOffset.left - jQuery.css(elem, "marginLeft", true)
10329
- };
10330
- },
10331
- // This method will return documentElement in the following cases:
10332
- // 1) For the element inside the iframe without offsetParent, this method will return
10333
- // documentElement of the parent window
10334
- // 2) For the hidden or detached element
10335
- // 3) For body or html element, i.e. in case of the html node - it will return itself
10336
- //
10337
- // but those exceptions were never presented as a real life use-cases
10338
- // and might be considered as more preferable results.
10339
- //
10340
- // This logic, however, is not guaranteed and can change at any point in the future
10341
- offsetParent: function offsetParent() {
10342
- return this.map(function () {
10343
- var offsetParent = this.offsetParent;
10344
-
10345
- while (offsetParent && jQuery.css(offsetParent, "position") === "static") {
10346
- offsetParent = offsetParent.offsetParent;
10347
- }
10348
-
10349
- return offsetParent || documentElement;
10350
- });
10351
- }
10352
- }); // Create scrollLeft and scrollTop methods
10353
-
10354
- jQuery.each({
10355
- scrollLeft: "pageXOffset",
10356
- scrollTop: "pageYOffset"
10357
- }, function (method, prop) {
10358
- var top = "pageYOffset" === prop;
10359
-
10360
- jQuery.fn[method] = function (val) {
10361
- return access(this, function (elem, method, val) {
10362
- // Coalesce documents and windows
10363
- var win;
10364
-
10365
- if (isWindow(elem)) {
10366
- win = elem;
10367
- } else if (elem.nodeType === 9) {
10368
- win = elem.defaultView;
10369
- }
10370
-
10371
- if (val === undefined) {
10372
- return win ? win[prop] : elem[method];
10373
- }
10374
-
10375
- if (win) {
10376
- win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);
10377
- } else {
10378
- elem[method] = val;
10379
- }
10380
- }, method, val, arguments.length);
10381
- };
10382
- }); // Support: Safari <=7 - 9.1, Chrome <=37 - 49
10383
- // Add the top/left cssHooks using jQuery.fn.position
10384
- // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
10385
- // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
10386
- // getComputedStyle returns percent when specified for top/left/bottom/right;
10387
- // rather than make the css module depend on the offset module, just check for it here
10388
-
10389
- jQuery.each(["top", "left"], function (_i, prop) {
10390
- jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function (elem, computed) {
10391
- if (computed) {
10392
- computed = curCSS(elem, prop); // If curCSS returns percentage, fallback to offset
10393
-
10394
- return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + "px" : computed;
10395
- }
10396
- });
10397
- }); // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
10398
-
10399
- jQuery.each({
10400
- Height: "height",
10401
- Width: "width"
10402
- }, function (name, type) {
10403
- jQuery.each({
10404
- padding: "inner" + name,
10405
- content: type,
10406
- "": "outer" + name
10407
- }, function (defaultExtra, funcName) {
10408
- // Margin is only for outerHeight, outerWidth
10409
- jQuery.fn[funcName] = function (margin, value) {
10410
- var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"),
10411
- extra = defaultExtra || (margin === true || value === true ? "margin" : "border");
10412
- return access(this, function (elem, type, value) {
10413
- var doc;
10414
-
10415
- if (isWindow(elem)) {
10416
- // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
10417
- return funcName.indexOf("outer") === 0 ? elem["inner" + name] : elem.document.documentElement["client" + name];
10418
- } // Get document width or height
10419
-
10420
-
10421
- if (elem.nodeType === 9) {
10422
- doc = elem.documentElement; // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
10423
- // whichever is greatest
10424
-
10425
- return Math.max(elem.body["scroll" + name], doc["scroll" + name], elem.body["offset" + name], doc["offset" + name], doc["client" + name]);
10426
- }
10427
-
10428
- return value === undefined ? // Get width or height on the element, requesting but not forcing parseFloat
10429
- jQuery.css(elem, type, extra) : // Set width or height on the element
10430
- jQuery.style(elem, type, value, extra);
10431
- }, type, chainable ? margin : undefined, chainable);
10432
- };
10433
- });
10434
- });
10435
- jQuery.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (_i, type) {
10436
- jQuery.fn[type] = function (fn) {
10437
- return this.on(type, fn);
10438
- };
10439
- });
10440
- jQuery.fn.extend({
10441
- bind: function bind(types, data, fn) {
10442
- return this.on(types, null, data, fn);
10443
- },
10444
- unbind: function unbind(types, fn) {
10445
- return this.off(types, null, fn);
10446
- },
10447
- delegate: function delegate(selector, types, data, fn) {
10448
- return this.on(types, selector, data, fn);
10449
- },
10450
- undelegate: function undelegate(selector, types, fn) {
10451
- // ( namespace ) or ( selector, types [, fn] )
10452
- return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn);
10453
- },
10454
- hover: function hover(fnOver, fnOut) {
10455
- return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);
10456
- }
10457
- });
10458
- jQuery.each(("blur focus focusin focusout resize scroll click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup contextmenu").split(" "), function (_i, name) {
10459
- // Handle event binding
10460
- jQuery.fn[name] = function (data, fn) {
10461
- return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);
10462
- };
10463
- }); // Support: Android <=4.0 only
10464
- // Make sure we trim BOM and NBSP
10465
-
10466
- var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; // Bind a function to a context, optionally partially applying any
10467
- // arguments.
10468
- // jQuery.proxy is deprecated to promote standards (specifically Function#bind)
10469
- // However, it is not slated for removal any time soon
10470
-
10471
- jQuery.proxy = function (fn, context) {
10472
- var tmp, args, proxy;
10473
-
10474
- if (typeof context === "string") {
10475
- tmp = fn[context];
10476
- context = fn;
10477
- fn = tmp;
10478
- } // Quick check to determine if target is callable, in the spec
10479
- // this throws a TypeError, but we will just return undefined.
10480
-
10481
-
10482
- if (!isFunction(fn)) {
10483
- return undefined;
10484
- } // Simulated bind
10485
-
10486
-
10487
- args = _slice.call(arguments, 2);
10488
-
10489
- proxy = function proxy() {
10490
- return fn.apply(context || this, args.concat(_slice.call(arguments)));
10491
- }; // Set the guid of unique handler to the same of original handler, so it can be removed
10492
-
10493
-
10494
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
10495
- return proxy;
10496
- };
10497
-
10498
- jQuery.holdReady = function (hold) {
10499
- if (hold) {
10500
- jQuery.readyWait++;
10501
- } else {
10502
- jQuery.ready(true);
10503
- }
10504
- };
10505
-
10506
- jQuery.isArray = Array.isArray;
10507
- jQuery.parseJSON = JSON.parse;
10508
- jQuery.nodeName = nodeName;
10509
- jQuery.isFunction = isFunction;
10510
- jQuery.isWindow = isWindow;
10511
- jQuery.camelCase = camelCase;
10512
- jQuery.type = toType;
10513
- jQuery.now = Date.now;
10514
-
10515
- jQuery.isNumeric = function (obj) {
10516
- // As of jQuery 3.0, isNumeric is limited to
10517
- // strings and numbers (primitives or objects)
10518
- // that can be coerced to finite numbers (gh-2662)
10519
- var type = jQuery.type(obj);
10520
- return (type === "number" || type === "string") && // parseFloat NaNs numeric-cast false positives ("")
10521
- // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
10522
- // subtraction forces infinities to NaN
10523
- !isNaN(obj - parseFloat(obj));
10524
- };
10525
-
10526
- jQuery.trim = function (text) {
10527
- return text == null ? "" : (text + "").replace(rtrim, "");
10528
- }; // Register as a named AMD module, since jQuery can be concatenated with other
10529
- // files that may use define, but not via a proper concatenation script that
10530
- // understands anonymous AMD modules. A named AMD is safest and most robust
10531
- // way to register. Lowercase jquery is used because AMD module names are
10532
- // derived from file names, and jQuery is normally delivered in a lowercase
10533
- // file name. Do this after creating the global so that if an AMD module wants
10534
- // to call noConflict to hide this version of jQuery, it will work.
10535
- // Note that for maximum portability, libraries that are not jQuery should
10536
- // declare themselves as anonymous modules, and avoid setting a global if an
10537
- // AMD loader is present. jQuery is a special case. For more information, see
10538
- // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
10539
-
10540
-
10541
- if (true) {
10542
- !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
10543
- return jQuery;
10544
- }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
10545
- __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
10546
- }
10547
-
10548
- var // Map over jQuery in case of overwrite
10549
- _jQuery = window.jQuery,
10550
- // Map over the $ in case of overwrite
10551
- _$ = window.$;
10552
-
10553
- jQuery.noConflict = function (deep) {
10554
- if (window.$ === jQuery) {
10555
- window.$ = _$;
10556
- }
10557
-
10558
- if (deep && window.jQuery === jQuery) {
10559
- window.jQuery = _jQuery;
10560
- }
10561
-
10562
- return jQuery;
10563
- }; // Expose jQuery and $ identifiers, even in AMD
10564
- // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
10565
- // and CommonJS for browser emulators (#13566)
10566
-
10567
-
10568
- if (typeof noGlobal === "undefined") {
10569
- window.jQuery = window.$ = jQuery;
10570
- }
10571
-
10572
- return jQuery;
10573
- });
10574
- /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module)))
10575
-
10576
- /***/ }),
10577
-
10578
  /***/ "./node_modules/regenerator-runtime/runtime.js":
10579
  /*!*****************************************************!*\
10580
  !*** ./node_modules/regenerator-runtime/runtime.js ***!
99
  /* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);
100
  /* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js");
101
  /* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);
 
 
 
102
 
103
 
104
 
107
 
108
  var wpcf7cf_timeout;
109
  var wpcf7cf_change_time_ms = window.wpcf7cf_running_tests ? 0 : 100;
 
110
  var wpcf7cf_show_animation = {
111
  "height": "show",
112
  "marginTop": "show",
173
 
174
  form.initial_conditions = form.conditions;
175
  form.settings = form_options['settings'];
176
+ form.$groups = jQuery(); // empty jQuery set
177
 
178
  form.repeaters = [];
179
  form.multistep = null;
202
  }, 200);
203
  }); // PRO ONLY
204
 
205
+ jQuery('.wpcf7cf_repeater:not(.wpcf7cf_repeater .wpcf7cf_repeater)', $form).each(function () {
206
+ form.repeaters.push(new Wpcf7cfRepeater(jQuery(this), form));
207
  });
208
  form.$input_repeaters.val(JSON.stringify(form.repeaters.map(function (item) {
209
  return item.params.$repeater.id;
210
  })));
211
+ var $multistep = jQuery('.wpcf7cf_multistep', $form);
212
 
213
  if ($multistep.length) {
214
  form.multistep = new Wpcf7cfMultistep($multistep, form); // window.wpcf7cf.updateMultistepState(form.multistep);
238
  if (cf7signature_resized === 0 && typeof signatures !== 'undefined' && signatures.constructor === Array && signatures.length > 0) {
239
  for (var i = 0; i < signatures.length; i++) {
240
  if (signatures[i].canvas.width === 0) {
241
+ var $sig_canvas = jQuery(".wpcf7-form-control-signature-body>canvas");
242
+ var $sig_wrap = jQuery(".wpcf7-form-control-signature-wrap");
243
  $sig_canvas.eq(i).attr('width', $sig_wrap.width());
244
  $sig_canvas.eq(i).attr('height', $sig_wrap.height());
245
  cf7signature_resized = 1;
254
  var show_group = window.wpcf7cf.should_group_be_shown(condition, form.$form);
255
 
256
  if (show_group) {
257
+ jQuery('[data-id="' + condition.then_field + '"]', form.$form).eq(0).removeClass('wpcf7cf-hidden');
258
  }
259
  }
260
 
261
  var animation_intime = wpcf7cf_settings.animation_intime;
262
  var animation_outtime = wpcf7cf_settings.animation_outtime;
263
  form.$groups.each(function (index) {
264
+ var $group = jQuery(this);
265
  if ($group.is(':animated')) $group.finish(); // stop any current animations on the group
266
 
267
  if ($group.css('display') === 'none' && !$group.hasClass('wpcf7cf-hidden')) {
272
  }
273
  } else if ($group.css('display') !== 'none' && $group.hasClass('wpcf7cf-hidden')) {
274
  if ($group.attr('data-clear_on_hide') !== undefined) {
275
+ var $inputs = jQuery(':input', $group).not(':button, :submit, :reset, :hidden');
276
  $inputs.each(function () {
277
+ var $this = jQuery(this);
278
  $this.val(this.defaultValue);
279
  $this.prop('checked', this.defaultChecked);
280
  });
281
+ jQuery('option', $group).each(function () {
282
  this.selected = this.defaultSelected;
283
  });
284
+ jQuery('select', $group).each(function () {
285
+ var $select = jQuery(this);
286
 
287
  if ($select.val() === null) {
288
+ $select.val(jQuery("option:first", $select).val());
289
  }
290
  });
291
  $inputs.change(); //display_fields();
303
  };
304
 
305
  Wpcf7cfForm.prototype.updateSummaryFields = function () {
306
+ var $summary = jQuery('.wpcf7cf-summary', this.$form);
307
  if ($summary.length == 0 || !$summary.is(':visible')) return;
308
  var fd = new FormData();
309
  var formdata = this.$form.serializeArray();
310
+ jQuery.each(formdata, function (key, input) {
311
  fd.append(input.name, input.value);
312
  });
313
+ jQuery.ajax({
314
  url: wpcf7cf_global_settings.ajaxurl + '?action=wpcf7cf_get_summary',
315
  type: 'POST',
316
  data: fd,
329
  var hidden_groups = [];
330
  var visible_groups = [];
331
  form.$groups.each(function () {
332
+ var $this = jQuery(this);
333
 
334
  if ($this.hasClass('wpcf7cf-hidden')) {
335
  hidden_groups.push($this.data('id'));
336
  $this.find('input,select,textarea').each(function () {
337
+ hidden_fields.push(jQuery(this).attr('name'));
338
  });
339
  } else {
340
  visible_groups.push($this.data('id'));
358
  Wpcf7cfForm.prototype.updateEventListeners = function () {
359
  var form = this; // monitor input changes, and call display_fields() if something has changed
360
 
361
+ jQuery('input, select, textarea, button', form.$form).not('.wpcf7cf_add, .wpcf7cf_remove').off(wpcf7cf_change_events).on(wpcf7cf_change_events, form, function (e) {
362
  var form = e.data;
363
  clearTimeout(wpcf7cf_timeout);
364
  wpcf7cf_timeout = setTimeout(function () {
366
  }, wpcf7cf_change_time_ms);
367
  }); // PRO ONLY
368
 
369
+ jQuery('.wpcf7cf-togglebutton', form.$form).off('click.toggle_wpcf7cf').on('click.toggle_wpcf7cf', function () {
370
+ var $this = jQuery(this);
371
 
372
  if ($this.text() === $this.data('val-1')) {
373
  $this.text($this.data('val-2'));
381
 
382
 
383
  function Wpcf7cfRepeater($repeater, form) {
384
+ var $ = jQuery;
385
  var repeater = this;
386
  var wpcf7cf_settings = form.settings;
387
  repeater.form = form;
396
  var $repeater_controls = $repeater.children('.wpcf7cf_repeater_controls').eq(0);
397
  var $repeater_sub_clone = $repeater_sub.clone();
398
  $repeater_sub_clone.find('.wpcf7cf_repeater_sub').addBack('.wpcf7cf_repeater_sub').each(function () {
399
+ var $this = jQuery(this);
400
  var prev_suffix = $this.attr('data-repeater_sub_suffix');
401
  var new_suffix = prev_suffix + '__{{repeater_sub_suffix}}';
402
  $this.attr('data-repeater_sub_suffix', new_suffix);
403
  });
404
  $repeater_sub_clone.find('[name]').each(function () {
405
+ var $this = jQuery(this);
406
  var prev_name = $this.attr('name');
407
  var orig_name = $this.attr('data-orig_name') != null ? $this.attr('data-orig_name') : prev_name;
408
  var new_name = prev_name + '__{{repeater_sub_suffix}}';
416
  $this.closest('.wpcf7-form-control-wrap').addClass(new_name);
417
  });
418
  $repeater_sub_clone.find('.wpcf7cf_repeater,[data-class="wpcf7cf_group"]').each(function () {
419
+ var $this = jQuery(this);
420
  var prev_data_id = $this.attr('data-id');
421
  var orig_data_id = $this.attr('data-orig_data_id') != null ? $this.attr('data-orig_data_id') : prev_data_id;
422
  var new_data_id = prev_data_id + '__{{repeater_sub_suffix}}';
430
  $this.closest('.wpcf7-form-control-wrap').addClass(new_data_id);
431
  });
432
  $repeater_sub_clone.find('[id]').each(function () {
433
+ var $this = jQuery(this);
434
  var prev_id = $this.attr('id');
435
  var orig_id = $this.attr('data-orig_id') != null ? $this.attr('data-orig_id') : prev_id;
436
  var new_id = prev_id + '__{{repeater_sub_suffix}}';
439
  $this.closest('.wpcf7-form-control-wrap').addClass(new_id);
440
  });
441
  $repeater_sub_clone.find('[for]').each(function () {
442
+ var $this = jQuery(this);
443
  var prev_for = $this.attr('for');
444
  var orig_for = $this.attr('data-orig_for') != null ? $this.attr('data-orig_for') : prev_for;
445
  var new_for = prev_for + '__{{repeater_sub_suffix}}';
469
  var repeater = e.data;
470
  repeater.updateSubs(params.$repeater.num_subs - 1);
471
  });
472
+ jQuery('> .wpcf7cf_repeater_sub', params.$repeater).eq(0).remove(); // remove the first sub, it's just a template.
473
 
474
  repeater.updateSubs($repeater.initial_subs);
475
  }
512
  };
513
 
514
  Wpcf7cfRepeater.prototype.addSubs = function (subs_to_add) {
515
+ var $ = jQuery;
516
  var params = this.params;
517
  var repeater = this;
518
  var form = repeater.form;
526
  html_str += params.repeater_sub_html.replace(/\{\{repeater_sub_suffix\}\}/g, sub_suffix).replace(new RegExp('\{\{' + $repeater.orig_id + '_index\}\}', 'g'), sub_suffix);
527
  }
528
 
529
+ var $html = jQuery(html_str); // Add the newly created fields to the form
530
 
531
  $html.hide().insertBefore($repeater_controls).animate(wpcf7cf_show_animation, params.wpcf7cf_settings.animation_intime).trigger('wpcf7cf_repeater_added');
532
+ jQuery('.wpcf7cf_repeater', $html).each(function () {
533
+ form.repeaters.push(new Wpcf7cfRepeater(jQuery(this), form));
534
  });
535
  form.$input_repeaters.val(JSON.stringify(form.repeaters.map(function (item) {
536
  return item.params.$repeater.id;
554
  };
555
 
556
  Wpcf7cfRepeater.prototype.removeSubs = function (num_subs) {
557
+ var $ = jQuery;
558
  var params = this.params;
559
  var form = this.form;
560
  params.$repeater.num_subs -= num_subs;
561
+ jQuery('> .wpcf7cf_repeater_sub', params.$repeater).slice(-num_subs).animate(wpcf7cf_hide_animation, {
562
  duration: params.wpcf7cf_settings.animation_intime,
563
  done: function done() {
564
+ var $this = jQuery(this); //remove the actual fields from the form
565
 
566
  $this.remove();
567
  params.$repeater.trigger('wpcf7cf_repeater_removed');
628
  multistep.moveToStep(1);
629
  }
630
 
631
+ jQuery(document).ajaxComplete(function (e, xhr, settings) {
632
  if (xhr.hasOwnProperty('responseJSON') && xhr.responseJSON != null && xhr.responseJSON.hasOwnProperty('status') && xhr.responseJSON.hasOwnProperty('into') && xhr.responseJSON.status === "mail_success") {
633
+ jQuery(xhr.responseJSON.into).trigger('reset.wpcf7cf');
634
  }
635
  });
636
 
642
  return new Promise(function (resolve) {
643
  var fd = new FormData(); // Make sure to add file fields to FormData
644
 
645
+ jQuery.each($form.find('[data-id="step-' + step_index + '"] input[type="file"]'), function (index, el) {
646
  if (!el.files.length) return false;
647
  var file = el.files[0];
648
  var fieldName = el.name;
649
  fd.append(fieldName, file);
650
  });
651
  var formdata = $form.serializeArray();
652
+ jQuery.each(formdata, function (key, input) {
653
  fd.append(input.name, input.value);
654
  });
655
+ jQuery.ajax({
656
  url: wpcf7cf_global_settings.ajaxurl + '?action=wpcf7cf_validate_step',
657
  type: 'POST',
658
  data: fd,
677
 
678
  if (!json.success) {
679
  var checkError = 0;
680
+ jQuery.each(json.invalid_fields, function (index, el) {
681
  if ($multistep.find('input[name="' + index + '"]').length || $multistep.find('input[name="' + index + '[]"]').length || $multistep.find('select[name="' + index + '"]').length || $multistep.find('select[name="' + index + '[]"]').length || $multistep.find('textarea[name="' + index + '"]').length || $multistep.find('textarea[name="' + index + '[]"]').length) {
682
  checkError = checkError + 1;
683
+ var controlWrap = jQuery('.wpcf7-form-control-wrap.' + index, $form); //controlWrap.addClass('cf7mls-invalid');
684
 
685
  controlWrap.find('input').addClass('wpcf7-not-valid');
686
  controlWrap.find('span.wpcf7-not-valid-tip').remove();
689
  });
690
  resolve('failed'); //$multistep.append('<div class="wpcf7-response-output wpcf7-display-none wpcf7-validation-errors" style="display: block;" role="alert">' + json.message + '</div>');
691
 
 
692
  $multistep.parent().find('.wpcf7-response-output').removeClass('wpcf7-display-none').html(json.message);
693
  } else if (json.success) {
694
  resolve('success');
891
  }
892
  },
893
  should_group_be_shown: function should_group_be_shown(condition, $current_form) {
894
+ var $ = jQuery;
895
  var show_group = true;
896
 
897
  for (var and_rule_i = 0; and_rule_i < condition.and_rules.length; and_rule_i++) {
898
  var condition_ok = false;
899
  var condition_and_rule = condition.and_rules[and_rule_i];
900
+ var $field = jQuery('[name="' + condition_and_rule.if_field + '"], [name="' + condition_and_rule.if_field + '[]"], [data-original-name="' + condition_and_rule.if_field + '"], [data-original-name="' + condition_and_rule.if_field + '[]"]', $current_form);
901
  var if_val = condition_and_rule.if_value;
902
  var if_val_as_number = isFinite(parseFloat(if_val)) ? parseFloat(if_val) : 0;
903
  var operator = condition_and_rule.operator;
921
  var all_values = [];
922
  var checked_values = [];
923
  $field.each(function () {
924
+ all_values.push(jQuery(this).val());
925
 
926
+ if (jQuery(this).is(':checked')) {
927
+ checked_values.push(jQuery(this).val());
928
  }
929
  });
930
  condition_ok = this.isConditionTrue(checked_values, operator, if_val, $field);
939
  },
940
  isConditionTrue: function isConditionTrue(values, operator) {
941
  var testValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
942
+ var $field = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : jQuery();
943
 
944
  if (!Array.isArray(values)) {
945
  values = [values];
1009
  return condition_ok;
1010
  }
1011
  };
1012
+ jQuery('.wpcf7-form').each(function () {
1013
+ wpcf7cf_forms.push(new Wpcf7cfForm(jQuery(this)));
1014
  }); // Call displayFields again on all forms
1015
  // Necessary in case some theme or plugin changed a form value by the time the entire page is fully loaded.
1016
 
1017
+ jQuery('document').ready(function () {
1018
  wpcf7cf_forms.forEach(function (f) {
1019
  f.displayFields();
1020
  });
1021
  }); // fix for exclusive checkboxes in IE (this will call the change-event again after all other checkboxes are unchecked, triggering the display_fields() function)
1022
 
1023
+ var old_wpcf7ExclusiveCheckbox = jQuery.fn.wpcf7ExclusiveCheckbox;
1024
 
1025
+ jQuery.fn.wpcf7ExclusiveCheckbox = function () {
1026
  return this.find('input:checkbox').click(function () {
1027
+ var name = jQuery(this).attr('name');
1028
+ jQuery(this).closest('form').find('input:checkbox[name="' + name + '"]').not(this).prop('checked', false).eq(0).change();
1029
  });
1030
  };
1031
 
1089
 
1090
  /***/ }),
1091
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1092
  /***/ "./node_modules/regenerator-runtime/runtime.js":
1093
  /*!*****************************************************!*\
1094
  !*** ./node_modules/regenerator-runtime/runtime.js ***!
js/scripts.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./js/scripts_es6.js","webpack:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///(webpack)/buildin/module.js"],"names":["cf7signature_resized","wpcf7cf_timeout","wpcf7cf_change_time_ms","window","wpcf7cf_running_tests","console","log","wpcf7cf_show_animation","wpcf7cf_hide_animation","wpcf7cf_show_step_animation","wpcf7cf_hide_step_animation","wpcf7cf_change_events","wpcf7cf_forms","String","prototype","endsWith","search","this_len","undefined","length","substring","Wpcf7cfForm","$form","options_element","find","eq","val","form","form_options","JSON","parse","$input_hidden_group_fields","$input_hidden_groups","$input_visible_groups","$input_repeaters","$input_steps","unit_tag","closest","attr","conditions","i","condition","and_rules","if_field","if_value","operator","initial_conditions","settings","$groups","jQuery","repeaters","multistep","fields","animation_intime","parseInt","animation_outtime","animation","updateGroups","updateEventListeners","displayFields","on","e","data","setTimeout","resetRepeaters","moveToStep","each","push","Wpcf7cfRepeater","stringify","map","item","params","$repeater","id","$multistep","Wpcf7cfMultistep","forEach","repeater","updateSubs","initial_subs","wpcf7cf","get_simplified_dom_model","wpcf7cf_conditions","wpcf7cf_settings","signatures","constructor","Array","canvas","width","$sig_canvas","$sig_wrap","height","addClass","show_group","should_group_be_shown","then_field","removeClass","index","$group","is","finish","css","hasClass","prop","show","trigger","animate","$inputs","not","$this","defaultValue","defaultChecked","selected","defaultSelected","$select","change","hide","updateHiddenFields","updateSummaryFields","$summary","fd","FormData","formdata","serializeArray","key","input","append","name","value","ajax","url","wpcf7cf_global_settings","ajaxurl","type","processData","contentType","dataType","success","json","html","summaryHtml","hidden_fields","hidden_groups","visible_groups","get_nested_conditions","off","clearTimeout","text","$","num_subs","orig_id","min","max","$repeater_sub","children","$repeater_controls","$repeater_sub_clone","clone","addBack","prev_suffix","new_suffix","prev_name","orig_name","new_name","replace","prev_data_id","orig_data_id","new_data_id","prev_id","new_id","prev_for","orig_for","new_for","repeater_sub_html","outerHTML","$repeater_count_field","$button_add","$button_remove","click","remove","subs_to_show","subs_to_add","removeSubs","addSubs","showButtonRemove","showButtonAdd","html_str","sub_suffix","RegExp","$html","insertBefore","updateMultistepState","cf7mdInit","slice","duration","done","$steps","$btn_next","$btn_prev","$dots","currentStep","numSteps","validateStep","result","stopImmediatePropagation","document","ajaxComplete","xhr","hasOwnProperty","responseJSON","status","into","step_index","Promise","resolve","el","files","file","fieldName","checkError","invalid_fields","controlWrap","reason","parent","message","fail","always","previousStep","formEl","topOffset","getBoundingClientRect","top","scrollIntoView","behavior","getFieldsInStep","simpleDom","inStep","filter","step","initForm","$current_form","simplified_dom","groups","sub_conditions","g","relevant_conditions","original_name","and_rule","suffix","concat","currentNode","ni","createNodeIterator","NodeFilter","SHOW_ELEMENT","nextNode","classList","contains","dataset","className","hasAttribute","getAttribute","original_name_length","stepsData","fieldsInCurrentStep","$submit_button","$ajax_loader","detach","appendTo","and_rule_i","condition_ok","condition_and_rule","$field","if_val","if_val_as_number","isFinite","parseFloat","regex_patt","isValidRegex","all_values","checked_values","isConditionTrue","values","testValue","isArray","every","v","testValueNumber","NaN","valueNumber","valsAreNumbers","isNaN","test","ready","f","old_wpcf7ExclusiveCheckbox","fn","wpcf7ExclusiveCheckbox","asyncGeneratorStep","gen","reject","_next","_throw","arg","info","error","then","_asyncToGenerator","self","args","arguments","apply","err","module","exports","require","global","factory","w","Error","noGlobal","arr","getProto","Object","getPrototypeOf","flat","array","call","indexOf","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","isWindow","preservedScriptAttributes","src","nonce","noModule","DOMEval","code","node","doc","script","createElement","setAttribute","head","appendChild","parentNode","removeChild","toType","version","selector","context","init","jquery","toArray","get","num","pushStack","elems","ret","merge","prevObject","callback","elem","first","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","copy","copyIsArray","target","deep","isPlainObject","expando","Math","random","isReady","msg","noop","proto","Ctor","isEmptyObject","globalEval","isArrayLike","makeArray","results","inArray","second","invert","callbackInverse","matches","callbackExpect","guid","Symbol","iterator","split","_i","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","Date","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","childNodes","els","seed","m","nid","match","newSelector","newContext","ownerDocument","exec","getElementById","getElementsByTagName","getElementsByClassName","qsa","testContext","scope","toSelector","join","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","addEventListener","attachEvent","createComment","getById","getElementsByName","attrId","getAttributeNode","tag","tmp","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","check","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matched","matcher","unmatched","lang","elemLang","hash","location","activeElement","hasFocus","href","tabIndex","checked","selectedIndex","_matchIndexes","radio","checkbox","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","_name","unique","isXMLDoc","escapeSelector","until","truncate","siblings","n","rneedsContext","needsContext","rsingleTag","winnow","qualifier","rootjQuery","root","parseHTML","rparentsprev","guaranteedUnique","contents","prev","has","targets","l","prevAll","add","sibling","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","createOptions","object","_","flag","Callbacks","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","empty","disable","lock","fireWith","Identity","Thrower","ex","adoptValue","noValue","method","promise","Deferred","func","tuples","state","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","warn","readyException","readyList","readyWait","wait","completed","removeEventListener","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","create","defineProperty","configurable","set","hasData","dataPriv","dataUser","rbrace","rmultiDash","getData","dataAttr","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","toggle","rcheckableType","rtagName","rscriptType","fragment","createDocumentFragment","div","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","tbody","tfoot","colgroup","caption","th","optgroup","getAll","setGlobalEval","refElements","buildFragment","scripts","selection","ignored","wrap","attached","nodes","createTextNode","htmlPrefilter","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","safeActiveElement","types","one","origFn","event","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","preventDefault","stopPropagation","postDispatch","matchedHandlers","matchedSelectors","button","addProp","hook","Event","enumerable","originalEvent","writable","load","noBubble","leverageNative","beforeunload","returnValue","notAsync","saved","isTrigger","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","prepend","before","after","replaceWith","replaceChild","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","swap","old","rboxStyle","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelBoxStyles","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","curCSS","computed","minWidth","maxWidth","getPropertyValue","addGetHookIf","conditionFn","hookFn","cssPrefixes","emptyStyle","vendorProps","vendorPropName","capName","finalPropName","final","cssProps","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","boxSizingNeeded","valueIsBorderBox","offsetProp","getClientRects","cssHooks","opacity","origName","isCustomProp","setProperty","scrollboxSizeBuggy","left","margin","padding","border","prefix","expand","expanded","parts","Tween","easing","propHooks","run","percent","eased","pos","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","Animation","tweeners","defaultPrefilter","opts","oldfire","propTween","restoreDisplay","isBox","anim","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","properties","stopped","prefilters","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","bind","complete","timer","tweener","prefilter","speed","opt","speeds","fadeTo","to","optall","doAnimation","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","getter","lowercaseName","rfocusable","rclickable","removeProp","propFix","tabindex","stripAndCollapse","getClass","classesToArray","classes","curValue","clazz","finalValue","toggleClass","stateVal","isValidValue","classNames","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","r20","rhash","rantiCache","rheaders","rlocalProtocol","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","responses","ct","finalDataType","firstDataType","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","responseFields","dataFilter","active","lastModified","etag","isLocal","protocol","async","accepts","ajaxSetup","ajaxPrefilter","ajaxTransport","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","overrideMimeType","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","modified","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","trim","define","_jQuery","_$","noConflict","runtime","Op","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","makeInvokeMethod","tryCatch","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","NativeIteratorPrototype","Gp","displayName","defineIteratorMethods","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","__await","AsyncIterator","PromiseImpl","invoke","record","unwrapped","previousPromise","enqueue","callInvokeWithMethodAndArg","iter","doneResult","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","skipTempReset","charAt","rootEntry","rootRecord","rval","exception","loc","caught","hasCatch","hasFinally","finallyEntry","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","Function","webpackPolyfill","deprecate","paths"],"mappings":"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","file":"scripts.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./js/scripts_es6.js\");\n","\"use strict\";\n\nimport jQuery from 'jquery';\n\n\nvar cf7signature_resized = 0; // for compatibility with contact-form-7-signature-addon\n\nvar wpcf7cf_timeout;\nvar wpcf7cf_change_time_ms = window.wpcf7cf_running_tests ? 0 : 100;\n\nconsole.log(wpcf7cf_change_time_ms);\n\nvar wpcf7cf_show_animation = { \"height\": \"show\", \"marginTop\": \"show\", \"marginBottom\": \"show\", \"paddingTop\": \"show\", \"paddingBottom\": \"show\" };\nvar wpcf7cf_hide_animation = { \"height\": \"hide\", \"marginTop\": \"hide\", \"marginBottom\": \"hide\", \"paddingTop\": \"hide\", \"paddingBottom\": \"hide\" };\n\nvar wpcf7cf_show_step_animation = { \"opacity\": \"show\" };\nvar wpcf7cf_hide_step_animation = { \"opacity\": \"hide\" };\n\nvar wpcf7cf_change_events = 'input.wpcf7cf paste.wpcf7cf change.wpcf7cf click.wpcf7cf propertychange.wpcf7cf';\n\nvar wpcf7cf_forms = [];\n\n// endswith polyfill\nif (!String.prototype.endsWith) {\n\tString.prototype.endsWith = function(search, this_len) {\n\t\tif (this_len === undefined || this_len > this.length) {\n\t\t\tthis_len = this.length;\n\t\t}\n\t\treturn this.substring(this_len - search.length, this_len) === search;\n\t};\n}\n\nvar Wpcf7cfForm = function($form) {\n\n var options_element = $form.find('input[name=\"_wpcf7cf_options\"]').eq(0);\n if (!options_element.length || !options_element.val()) {\n // doesn't look like a CF7 form created with conditional fields plugin enabled.\n return false;\n }\n\n var form = this;\n\n var form_options = JSON.parse(options_element.val());\n\n form.$form = $form;\n form.$input_hidden_group_fields = $form.find('[name=\"_wpcf7cf_hidden_group_fields\"]');\n form.$input_hidden_groups = $form.find('[name=\"_wpcf7cf_hidden_groups\"]');\n form.$input_visible_groups = $form.find('[name=\"_wpcf7cf_visible_groups\"]');\n form.$input_repeaters = $form.find('[name=\"_wpcf7cf_repeaters\"]');\n form.$input_steps = $form.find('[name=\"_wpcf7cf_steps\"]');\n\n form.unit_tag = $form.closest('.wpcf7').attr('id');\n form.conditions = form_options['conditions'];\n\n // compatibility with conditional forms created with older versions of the plugin ( < 1.4 )\n for (var i=0; i < form.conditions.length; i++) {\n var condition = form.conditions[i];\n if (!('and_rules' in condition)) {\n condition.and_rules = [{'if_field':condition.if_field,'if_value':condition.if_value,'operator':condition.operator}];\n }\n }\n\n form.initial_conditions = form.conditions;\n form.settings = form_options['settings'];\n\n form.$groups = jQuery(); // empty jQuery set\n form.repeaters = [];\n form.multistep = null;\n form.fields = [];\n\n form.settings.animation_intime = parseInt(form.settings.animation_intime);\n form.settings.animation_outtime = parseInt(form.settings.animation_outtime);\n\n if (form.settings.animation === 'no') {\n form.settings.animation_intime = 0;\n form.settings.animation_outtime = 0;\n }\n\n form.updateGroups();\n form.updateEventListeners();\n form.displayFields();\n\n // bring form in initial state if the reset event is fired on it.\n form.$form.on('reset.wpcf7cf', form, function(e) {\n var form = e.data;\n setTimeout(function(){\n form.displayFields();\n form.resetRepeaters();\n if (form.multistep != null) {\n form.multistep.moveToStep(1); \n }\n },200);\n });\n\n // PRO ONLY\n\n jQuery('.wpcf7cf_repeater:not(.wpcf7cf_repeater .wpcf7cf_repeater)', $form).each(function(){\n form.repeaters.push(new Wpcf7cfRepeater(jQuery(this),form));\n });\n\n form.$input_repeaters.val(JSON.stringify(form.repeaters.map((item)=>item.params.$repeater.id)));\n\n var $multistep = jQuery('.wpcf7cf_multistep', $form);\n\n if ($multistep.length) {\n form.multistep = new Wpcf7cfMultistep($multistep, form);\n // window.wpcf7cf.updateMultistepState(form.multistep);\n }\n\n // END PRO ONLY\n\n}\n\n/**\n * reset initial number of subs for each repeater.\n * (does not clear values)\n */\nWpcf7cfForm.prototype.resetRepeaters = function() {\n var form = this;\n form.repeaters.forEach(repeater => {\n repeater.updateSubs( repeater.params.$repeater.initial_subs );\n });\n}\n\nWpcf7cfForm.prototype.displayFields = function() {\n\n var form = this;\n\n window.wpcf7cf.get_simplified_dom_model(form.$form);\n\n var unit_tag = this.unit_tag;\n var wpcf7cf_conditions = this.conditions;\n var wpcf7cf_settings = this.settings;\n\n //for compatibility with contact-form-7-signature-addon\n if (cf7signature_resized === 0 && typeof signatures !== 'undefined' && signatures.constructor === Array && signatures.length > 0 ) {\n for (var i = 0; i < signatures.length; i++) {\n if (signatures[i].canvas.width === 0) {\n\n var $sig_canvas = jQuery(\".wpcf7-form-control-signature-body>canvas\");\n var $sig_wrap = jQuery(\".wpcf7-form-control-signature-wrap\");\n $sig_canvas.eq(i).attr('width', $sig_wrap.width());\n $sig_canvas.eq(i).attr('height', $sig_wrap.height());\n\n cf7signature_resized = 1;\n }\n }\n }\n\n form.$groups.addClass('wpcf7cf-hidden');\n\n for (var i=0; i < wpcf7cf_conditions.length; i++) {\n\n var condition = wpcf7cf_conditions[i];\n\n var show_group = window.wpcf7cf.should_group_be_shown(condition, form.$form);\n\n if (show_group) {\n jQuery('[data-id=\"'+condition.then_field+'\"]',form.$form).eq(0).removeClass('wpcf7cf-hidden');\n }\n }\n\n var animation_intime = wpcf7cf_settings.animation_intime;\n var animation_outtime = wpcf7cf_settings.animation_outtime;\n\n form.$groups.each(function (index) {\n var $group = jQuery(this);\n if ($group.is(':animated')) $group.finish(); // stop any current animations on the group\n if ($group.css('display') === 'none' && !$group.hasClass('wpcf7cf-hidden')) {\n if ($group.prop('tagName') === 'SPAN') {\n $group.show().trigger('wpcf7cf_show_group');\n } else {\n $group.animate(wpcf7cf_show_animation, animation_intime).trigger('wpcf7cf_show_group'); // show\n }\n } else if ($group.css('display') !== 'none' && $group.hasClass('wpcf7cf-hidden')) {\n\n if ($group.attr('data-clear_on_hide') !== undefined) {\n var $inputs = jQuery(':input', $group).not(':button, :submit, :reset, :hidden');\n\n $inputs.each(function(){\n var $this = jQuery(this);\n $this.val(this.defaultValue);\n $this.prop('checked', this.defaultChecked);\n });\n\n jQuery('option', $group).each(function() {\n this.selected = this.defaultSelected;\n });\n\n jQuery('select', $group).each(function() {\n const $select = jQuery(this);\n if ($select.val() === null) {\n $select.val(jQuery(\"option:first\",$select).val());\n }\n });\n\n $inputs.change();\n //display_fields();\n }\n\n if ($group.prop('tagName') === 'SPAN') {\n $group.hide().trigger('wpcf7cf_hide_group');\n } else {\n $group.animate(wpcf7cf_hide_animation, animation_outtime).trigger('wpcf7cf_hide_group'); // hide\n }\n\n }\n });\n\n form.updateHiddenFields();\n form.updateSummaryFields();\n};\n\nWpcf7cfForm.prototype.updateSummaryFields = function() {\n var $summary = jQuery('.wpcf7cf-summary', this.$form);\n\n if ($summary.length == 0 || !$summary.is(':visible')) return;\n\n var fd = new FormData();\n\n var formdata = this.$form.serializeArray();\n jQuery.each(formdata,function(key, input){\n fd.append(input.name, input.value);\n });\n\n jQuery.ajax({\n url: wpcf7cf_global_settings.ajaxurl + '?action=wpcf7cf_get_summary',\n type: 'POST',\n data: fd,\n processData: false,\n contentType: false,\n dataType: 'json',\n success: function(json) {\n $summary.html(json.summaryHtml);\n }\n });\n};\n\nWpcf7cfForm.prototype.updateHiddenFields = function() {\n\n var form = this;\n\n var hidden_fields = [];\n var hidden_groups = [];\n var visible_groups = [];\n\n form.$groups.each(function () {\n var $this = jQuery(this);\n if ($this.hasClass('wpcf7cf-hidden')) {\n hidden_groups.push($this.data('id'));\n $this.find('input,select,textarea').each(function () {\n hidden_fields.push(jQuery(this).attr('name'));\n });\n } else {\n visible_groups.push($this.data('id'));\n }\n });\n\n form.hidden_fields = hidden_fields;\n form.hidden_groups = hidden_groups;\n form.visible_groups = visible_groups;\n\n form.$input_hidden_group_fields.val(JSON.stringify(hidden_fields));\n form.$input_hidden_groups.val(JSON.stringify(hidden_groups));\n form.$input_visible_groups.val(JSON.stringify(visible_groups));\n\n return true;\n};\nWpcf7cfForm.prototype.updateGroups = function() {\n var form = this;\n form.$groups = form.$form.find('[data-class=\"wpcf7cf_group\"]');\n\n form.conditions = window.wpcf7cf.get_nested_conditions(form.initial_conditions, form.$form);\n\n};\nWpcf7cfForm.prototype.updateEventListeners = function() {\n\n var form = this;\n\n // monitor input changes, and call display_fields() if something has changed\n jQuery('input, select, textarea, button',form.$form).not('.wpcf7cf_add, .wpcf7cf_remove').off(wpcf7cf_change_events).on(wpcf7cf_change_events,form, function(e) {\n var form = e.data;\n clearTimeout(wpcf7cf_timeout);\n wpcf7cf_timeout = setTimeout(function() {\n form.displayFields();\n }, wpcf7cf_change_time_ms);\n });\n\n // PRO ONLY\n jQuery('.wpcf7cf-togglebutton', form.$form).off('click.toggle_wpcf7cf').on('click.toggle_wpcf7cf',function() {\n var $this = jQuery(this);\n if ($this.text() === $this.data('val-1')) {\n $this.text($this.data('val-2'));\n $this.val($this.data('val-2'));\n } else {\n $this.text($this.data('val-1'));\n $this.val($this.data('val-1'));\n }\n });\n // END PRO ONLY\n};\n\n// PRO ONLY\nfunction Wpcf7cfRepeater($repeater, form) {\n var $ = jQuery;\n\n var repeater = this;\n\n var wpcf7cf_settings = form.settings;\n\n repeater.form = form;\n\n $repeater.num_subs = 0;\n $repeater.id = $repeater.data('id');\n $repeater.orig_id = $repeater.data('orig_data_id');\n $repeater.min = typeof( $repeater.data('min')) !== 'undefined' ? parseInt($repeater.data('min')) : 1;\n $repeater.max = typeof( $repeater.data('max')) !== 'undefined' ? parseInt($repeater.data('max')) : 200;\n $repeater.initial_subs = typeof( $repeater.data('initial')) !== 'undefined' ? parseInt($repeater.data('initial')) : $repeater.min;\n if ($repeater.initial_subs > $repeater.max) $repeater.initial_subs = $repeater.max;\n var $repeater_sub = $repeater.children('.wpcf7cf_repeater_sub').eq(0);\n var $repeater_controls = $repeater.children('.wpcf7cf_repeater_controls').eq(0);\n\n var $repeater_sub_clone = $repeater_sub.clone();\n\n $repeater_sub_clone.find('.wpcf7cf_repeater_sub').addBack('.wpcf7cf_repeater_sub').each(function() {\n var $this = jQuery(this);\n var prev_suffix = $this.attr('data-repeater_sub_suffix');\n var new_suffix = prev_suffix+'__{{repeater_sub_suffix}}';\n $this.attr('data-repeater_sub_suffix', new_suffix);\n });\n\n $repeater_sub_clone.find('[name]').each(function() {\n var $this = jQuery(this);\n var prev_name = $this.attr('name');\n var orig_name = $this.attr('data-orig_name') != null ? $this.attr('data-orig_name') : prev_name;\n var new_name = prev_name+'__{{repeater_sub_suffix}}';\n\n if(prev_name.endsWith('_count')) {\n new_name = prev_name.replace('_count','__{{repeater_sub_suffix}}_count');\n }\n\n $this.attr('name', new_name);\n $this.attr('data-orig_name', orig_name);\n $this.closest('.wpcf7-form-control-wrap').addClass(new_name);\n });\n\n $repeater_sub_clone.find('.wpcf7cf_repeater,[data-class=\"wpcf7cf_group\"]').each(function() {\n var $this = jQuery(this);\n var prev_data_id = $this.attr('data-id');\n var orig_data_id = $this.attr('data-orig_data_id') != null ? $this.attr('data-orig_data_id') : prev_data_id;\n var new_data_id = prev_data_id+'__{{repeater_sub_suffix}}';\n\n if(prev_data_id.endsWith('_count')) {\n new_data_id = prev_data_id.replace('_count','__{{repeater_sub_suffix}}_count');\n }\n\n $this.attr('data-id', new_data_id);\n $this.attr('data-orig_data_id', orig_data_id);\n $this.closest('.wpcf7-form-control-wrap').addClass(new_data_id);\n });\n\n $repeater_sub_clone.find('[id]').each(function() {\n var $this = jQuery(this);\n var prev_id = $this.attr('id');\n var orig_id = $this.attr('data-orig_id') != null ? $this.attr('data-orig_id') : prev_id;\n var new_id = prev_id+'__{{repeater_sub_suffix}}';\n\n $this.attr('id', new_id);\n $this.attr('data-orig_id', orig_id);\n $this.closest('.wpcf7-form-control-wrap').addClass(new_id);\n });\n\n $repeater_sub_clone.find('[for]').each(function() {\n var $this = jQuery(this);\n var prev_for = $this.attr('for');\n var orig_for = $this.attr('data-orig_for') != null ? $this.attr('data-orig_for') : prev_for;\n var new_for = prev_for+'__{{repeater_sub_suffix}}';\n\n $this.attr('for', new_for);\n $this.attr('data-orig_for', orig_for);\n $this.closest('.wpcf7-form-control-wrap').addClass(new_for);\n });\n\n var repeater_sub_html = $repeater_sub_clone[0].outerHTML;\n\n var $repeater_count_field = $repeater.find('[name='+$repeater.id+'_count]').eq(0);\n var $button_add = $repeater_controls.find('.wpcf7cf_add').eq(0);\n var $button_remove = $repeater_controls.find('.wpcf7cf_remove').eq(0);\n\n var params = {\n $repeater: $repeater,\n $repeater_count_field: $repeater_count_field,\n repeater_sub_html: repeater_sub_html,\n $repeater_controls: $repeater_controls,\n $button_add: $button_add,\n $button_remove: $button_remove,\n wpcf7cf_settings: wpcf7cf_settings\n };\n \n this.params = params;\n\n $button_add.click( repeater, function(e) {\n var repeater = e.data;\n repeater.updateSubs(params.$repeater.num_subs+1);\n });\n\n $button_remove.click( repeater,function(e) {\n var repeater = e.data;\n repeater.updateSubs(params.$repeater.num_subs-1);\n });\n\n jQuery('> .wpcf7cf_repeater_sub',params.$repeater).eq(0).remove(); // remove the first sub, it's just a template.\n\n repeater.updateSubs($repeater.initial_subs); \n\n}\n\n\n\nWpcf7cfRepeater.prototype.updateSubs = function(subs_to_show) {\n var repeater = this;\n var params = repeater.params;\n var subs_to_add = subs_to_show - params.$repeater.num_subs;\n\n if (subs_to_add < 0) {\n repeater.removeSubs(-subs_to_add);\n } else if (subs_to_add > 0) {\n repeater.addSubs(subs_to_add);\n }\n\n var showButtonRemove = false;\n var showButtonAdd = false;\n\n if (params.$repeater.num_subs < params.$repeater.max) {\n showButtonAdd = true;\n }\n if (params.$repeater.num_subs > params.$repeater.min) {\n showButtonRemove = true;\n }\n\n if (showButtonAdd) {\n params.$button_add.show();\n } else {\n params.$button_add.hide();\n\n }\n\n if (showButtonRemove) {\n params.$button_remove.show();\n } else {\n params.$button_remove.hide();\n }\n\n params.$repeater_count_field.val(subs_to_show);\n\n};\nWpcf7cfRepeater.prototype.addSubs = function(subs_to_add) {\n var $ = jQuery;\n var params = this.params;\n var repeater = this;\n var form = repeater.form;\n\n\n var $repeater = params.$repeater; \n var $repeater_controls = params.$repeater_controls;\n\n //jQuery(params.repeater_sub_html.replace(/name=\"(.*?)\"/g,'name=\"wpcf7cf_repeater['+$repeater.id+']['+$repeater.num_subs+'][$1]\" data-original-name=\"$1\"')).hide().insertBefore($repeater_controls).animate(wpcf7cf_show_animation, params.wpcf7cf_settings.animation_intime);\n\n var html_str = '';\n\n for(var i=1; i<=subs_to_add; i++) {\n var sub_suffix = $repeater.num_subs+i;\n html_str += params.repeater_sub_html.replace(/\\{\\{repeater_sub_suffix\\}\\}/g,sub_suffix)\n .replace(new RegExp('\\{\\{'+$repeater.orig_id+'_index\\}\\}','g'),sub_suffix);\n }\n\n\n var $html = jQuery(html_str);\n\n // Add the newly created fields to the form\n $html.hide().insertBefore($repeater_controls).animate(wpcf7cf_show_animation, params.wpcf7cf_settings.animation_intime).trigger('wpcf7cf_repeater_added');\n\n jQuery('.wpcf7cf_repeater', $html).each(function(){\n form.repeaters.push(new Wpcf7cfRepeater(jQuery(this),form));\n });\n form.$input_repeaters.val(JSON.stringify(form.repeaters.map((item)=>item.params.$repeater.id)));\n\n $repeater.num_subs+= subs_to_add;\n\n window.wpcf7cf.updateMultistepState(form.multistep);\n form.updateGroups();\n form.updateEventListeners();\n form.displayFields();\n\n // Exclusive Checkbox\n $html.on( 'click', '.wpcf7-exclusive-checkbox input:checkbox', function() {\n var name = $( this ).attr( 'name' );\n $html.find( 'input:checkbox[name=\"' + name + '\"]' ).not( this ).prop( 'checked', false );\n } );\n\n //basic compatibility with material-design-for-contact-form-7\n if (typeof window.cf7mdInit === \"function\") {\n window.cf7mdInit();\n }\n\n return false;\n};\nWpcf7cfRepeater.prototype.removeSubs = function(num_subs) {\n var $ = jQuery;\n var params = this.params;\n var form = this.form;\n\n params.$repeater.num_subs-= num_subs;\n\n jQuery('> .wpcf7cf_repeater_sub',params.$repeater).slice(-num_subs).animate(wpcf7cf_hide_animation, {duration:params.wpcf7cf_settings.animation_intime, done:function() {\n var $this = jQuery(this);\n //remove the actual fields from the form\n $this.remove();\n params.$repeater.trigger('wpcf7cf_repeater_removed');\n window.wpcf7cf.updateMultistepState(form.multistep);\n form.updateGroups();\n form.updateEventListeners();\n form.displayFields();\n }});\n\n return false;\n};\n\nfunction Wpcf7cfMultistep($multistep, form) {\n var multistep = this;\n multistep.$multistep = $multistep;\n multistep.form = form;\n multistep.$steps = $multistep.find('.wpcf7cf_step');\n multistep.$btn_next = $multistep.find('.wpcf7cf_next');\n multistep.$btn_prev = $multistep.find('.wpcf7cf_prev');\n multistep.$dots = $multistep.find('.wpcf7cf_steps-dots');\n multistep.currentStep = 0;\n multistep.numSteps = multistep.$steps.length;\n\n\n multistep.$dots.html('');\n for (var i = 1; i <= multistep.numSteps; i++) {\n multistep.$dots.append(`\n <div class=\"dot\" data-step=\"${i}\">\n <div class=\"step-index\">${i}</div>\n <div class=\"step-title\">${multistep.$steps.eq(i-1).data('title')}</div>\n </div>\n `);\n }\n\n multistep.$btn_next.on('click.wpcf7cf_step', async function() {\n \n var result = await multistep.validateStep(multistep.currentStep);\n if (result === 'success') {\n multistep.moveToStep(multistep.currentStep+1); \n }\n\n });\n\n // If form is submitted (by pressing retrun for example), and if we are not on the last step,\n // then trigger click event on the $next button instead.\n multistep.form.$form.on('submit.wpcf7cf_step', function(e) {\n\n if (multistep.currentStep !== multistep.numSteps) {\n multistep.$btn_next.trigger('click.wpcf7cf_step');\n\n e.stopImmediatePropagation();\n return false;\n }\n });\n\n multistep.$btn_prev.click(function() {\n multistep.moveToStep(multistep.currentStep-1);\n });\n\n multistep.moveToStep(1);\n}\n\njQuery(document).ajaxComplete(function(e, xhr, settings){\n if (\n xhr.hasOwnProperty('responseJSON') &&\n xhr.responseJSON != null &&\n xhr.responseJSON.hasOwnProperty('status') &&\n xhr.responseJSON.hasOwnProperty('into') &&\n xhr.responseJSON.status === \"mail_success\"\n ) {\n jQuery( xhr.responseJSON.into ).trigger('reset.wpcf7cf');\n }\n});\n\nWpcf7cfMultistep.prototype.validateStep = function(step_index) {\n\n var multistep = this;\n var $multistep = multistep.$multistep;\n var $form = multistep.form.$form;\n\n $form.find('.wpcf7-response-output').addClass('wpcf7-display-none');\n\n return new Promise(resolve => {\n\n var fd = new FormData();\n\n // Make sure to add file fields to FormData\n jQuery.each($form.find('[data-id=\"step-'+step_index+'\"] input[type=\"file\"]'), function(index, el) {\n if (! el.files.length) return false;\n const file = el.files[0];\n const fieldName = el.name;\n fd.append(fieldName, file);\n });\n\n var formdata = $form.serializeArray();\n jQuery.each(formdata,function(key, input){\n fd.append(input.name, input.value);\n });\n\n jQuery.ajax({\n url: wpcf7cf_global_settings.ajaxurl + '?action=wpcf7cf_validate_step',\n type: 'POST',\n data: fd,\n processData: false,\n contentType: false,\n dataType: 'json',\n }).done(function(json) {\n\n /*\n * Insert _form_data_id if 'json variable' has\n */\n // if (typeof json._cf7mls_db_form_data_id != 'undefined') {\n // if (!form.find('input[name=\"_cf7mls_db_form_data_id\"]').length) {\n // form.append('<input type=\"hidden\" name=\"_cf7mls_db_form_data_id\" value=\"'+json._cf7mls_db_form_data_id+'\" />');\n // }\n // }\n\n //reset error messages\n //$multistep.find('.wpcf7-form-control-wrap').removeClass('cf7mls-invalid');\n $multistep.find('.wpcf7-form-control-wrap .wpcf7-not-valid-tip').remove();\n $multistep.find('.wpcf7-not-valid').removeClass('wpcf7-not-valid');\n $multistep.find('.wpcf7-response-output').remove();\n $multistep.find('.wpcf7-response-output.wpcf7-validation-errors').removeClass('wpcf7-validation-errors');\n\n if (!json.success) {\n var checkError = 0;\n\n jQuery.each(json.invalid_fields, function(index, el) {\n if ($multistep.find('input[name=\"'+index+'\"]').length ||\n $multistep.find('input[name=\"'+index+'[]\"]').length ||\n $multistep.find('select[name=\"'+index+'\"]').length ||\n $multistep.find('select[name=\"'+index+'[]\"]').length ||\n $multistep.find('textarea[name=\"'+index+'\"]').length ||\n $multistep.find('textarea[name=\"'+index+'[]\"]').length\n ) {\n checkError = checkError + 1;\n\n var controlWrap = jQuery('.wpcf7-form-control-wrap.' + index, $form);\n //controlWrap.addClass('cf7mls-invalid');\n controlWrap.find('input').addClass('wpcf7-not-valid');\n controlWrap.find('span.wpcf7-not-valid-tip').remove();\n controlWrap.append('<span role=\"alert\" class=\"wpcf7-not-valid-tip\">' + el.reason + '</span>');\n\n //return false;\n }\n });\n\n resolve('failed');\n //$multistep.append('<div class=\"wpcf7-response-output wpcf7-display-none wpcf7-validation-errors\" style=\"display: block;\" role=\"alert\">' + json.message + '</div>');\n\n console.log($multistep.parent().find('.wpcf7-response-output'));\n $multistep.parent().find('.wpcf7-response-output').removeClass('wpcf7-display-none').html(json.message);\n\n } else if (json.success) {\n resolve('success');\n return false;\n }\n\n }).fail(function() {\n resolve('error');\n }).always(function() {\n // do nothing\n });\n });\n\n};\nWpcf7cfMultistep.prototype.moveToStep = function(step_index) {\n var multistep = this;\n var previousStep = multistep.currentStep;\n\n multistep.currentStep = step_index > multistep.numSteps ? multistep.numSteps\n : step_index < 1 ? 1\n : step_index;\n\n // ANIMATION DISABLED FOR NOW cause it's ugly\n // multistep.$steps.animate(wpcf7cf_hide_step_animation, multistep.form.settings.animation_outtime);\n // multistep.$steps.eq(multistep.currentStep-1).animate(wpcf7cf_show_step_animation, multistep.form.settings.animation_intime);\n\n multistep.$multistep.attr('data-current_step', multistep.currentStep);\n multistep.$steps.hide();\n multistep.$steps\n .eq(multistep.currentStep-1)\n .show()\n .trigger('wpcf7cf_change_step', [previousStep, multistep.currentStep]);\n\n const formEl = multistep.form.$form[0];\n const topOffset = formEl.getBoundingClientRect().top;\n if (topOffset < 0 && previousStep > 0) {\n formEl.scrollIntoView({behavior: \"smooth\"});\n }\n\n multistep.form.updateSummaryFields();\n\n window.wpcf7cf.updateMultistepState(multistep);\n};\n\nWpcf7cfMultistep.prototype.getFieldsInStep = function(step_index) {\n var simpleDom = window.wpcf7cf.get_simplified_dom_model(this.form.$form);\n var inStep = false;\n return simpleDom.filter(function(item, i) {\n if(item.type == 'step') {\n inStep = item.step == step_index+'';\n }\n return inStep && item.type == 'input';\n }).map(function(item) {\n return item.name;\n });\n};\n\n// END PRO ONLY\n\nwindow.wpcf7cf = {\n\n // keep this for backwards compatibility\n initForm : function($form) {\n wpcf7cf_forms.push(new Wpcf7cfForm($form));\n },\n\n get_nested_conditions : function(conditions, $current_form) {\n //loop trough conditions. Then loop trough the dom, and each repeater we pass we should update all sub_values we encounter with __index\n var simplified_dom = window.wpcf7cf.get_simplified_dom_model($current_form);\n var groups = simplified_dom.filter(function(item, i) {\n return item.type==='group';\n });\n\n var sub_conditions = [];\n\n for(var i = 0; i < groups.length; i++) {\n var g = groups[i];\n var relevant_conditions = conditions.filter(function(condition, i) {\n return condition.then_field === g.original_name;\n });\n \n var relevant_conditions = relevant_conditions.map(function(item,i) {\n return {\n then_field : g.name,\n and_rules : item.and_rules.map(function(and_rule, i) {\n return {\n if_field : and_rule.if_field+g.suffix,\n if_value : and_rule.if_value,\n operator : and_rule.operator\n };\n })\n }\n });\n\n sub_conditions = sub_conditions.concat(relevant_conditions);\n }\n return conditions.concat(sub_conditions);\n },\n\n get_simplified_dom_model : function($current_form) {\n // if the dom is something like:\n // <form>\n // <repeater ra>\n // <group ga__1>\n // <repeater rb__1>\n // <input txta__1__1 />\n // <input txta__1__2 />\n // </repeater>\n // <group gb__1>\n // <input txtb__1 />\n // </group>\n // </group>\n // <group ga__2>\n // <repeater rb__2>\n // <input txta__2__1 />\n // </repeater>\n // <group gb__2>\n // <input txtb__2 />\n // </group>\n // </group>\n // </repeater>\n // </form>\n // \n // return something like:\n // [{type:repeater, name:'ra', suffix: '__1'}, {type: group, name:'ga', suffix: '__1'}, ...]\n\n var currentNode;\n var ni = document.createNodeIterator($current_form[0], NodeFilter.SHOW_ELEMENT, null, false); //, NodeFilter.SHOW_ELEMENT, function(){ return NodeFilter.FILTER_ACCEPT; }\n\n var simplified_dom = [];\n\n while(currentNode = ni.nextNode()) {\n if (currentNode.classList.contains('wpcf7cf_repeater')) {\n simplified_dom.push({type:'repeater', name:currentNode.dataset.id, original_name:currentNode.dataset.orig_data_id})\n } else if (currentNode.dataset.class == 'wpcf7cf_group') {\n simplified_dom.push({type:'group', name:currentNode.dataset.id, original_name:currentNode.dataset.orig_data_id})\n } else if (currentNode.className == 'wpcf7cf_step') {\n simplified_dom.push({type:'step', name:currentNode.dataset.id, original_name:currentNode.dataset.id, step: currentNode.dataset.id.substring(5)})\n } else if (currentNode.hasAttribute('name')) {\n simplified_dom.push({type:'input', name:currentNode.getAttribute('name'), original_name:currentNode.getAttribute('data-orig_name')})\n }\n }\n\n simplified_dom = simplified_dom.map(function(item, i){\n var original_name_length = item.original_name == null ? item.name.length : item.original_name.length;\n item.suffix = item.name.substring(original_name_length);\n return item;\n });\n\n //console.table(simplified_dom);\n return simplified_dom;\n\n },\n\n updateMultistepState: function (multistep) {\n if (multistep == null) return;\n\n // update hidden input field\n\n var stepsData = {\n currentStep : multistep.currentStep,\n numSteps : multistep.numSteps,\n fieldsInCurrentStep : multistep.getFieldsInStep(multistep.currentStep)\n };\n multistep.form.$input_steps.val(JSON.stringify(stepsData));\n\n // update Buttons\n multistep.$btn_prev.removeClass('disabled');\n multistep.$btn_next.removeClass('disabled');\n if (multistep.currentStep == multistep.numSteps) {\n multistep.$btn_next.addClass('disabled');\n }\n if (multistep.currentStep == 1) {\n multistep.$btn_prev.addClass('disabled');\n }\n\n // replace next button with submit button on last step.\n // TODO: make this depend on a setting\n var $submit_button = multistep.form.$form.find('input[type=\"submit\"]').eq(0);\n var $ajax_loader = multistep.form.$form.find('.ajax-loader').eq(0);\n if (multistep.currentStep == multistep.numSteps) {\n multistep.$btn_next.hide();\n $ajax_loader.detach().appendTo(multistep.$btn_next.parent());\n $submit_button.detach().appendTo(multistep.$btn_next.parent());\n $submit_button.show();\n } else {\n $submit_button.hide();\n multistep.$btn_next.show();\n }\n\n // update dots\n var $dots = multistep.$dots.find('.dot');\n $dots.removeClass('active').removeClass('completed');\n for(var step = 1; step <= multistep.numSteps; step++) {\n if (step < multistep.currentStep) {\n $dots.eq(step-1).addClass('completed');\n } else if (step == multistep.currentStep) {\n $dots.eq(step-1).addClass('active');\n }\n }\n\n },\n\n should_group_be_shown : function(condition, $current_form) {\n\n var $ = jQuery;\n\n var show_group = true;\n\n for (var and_rule_i = 0; and_rule_i < condition.and_rules.length; and_rule_i++) {\n\n var condition_ok = false;\n\n var condition_and_rule = condition.and_rules[and_rule_i];\n\n var $field = jQuery('[name=\"' + condition_and_rule.if_field + '\"], [name=\"' + condition_and_rule.if_field + '[]\"], [data-original-name=\"' + condition_and_rule.if_field + '\"], [data-original-name=\"' + condition_and_rule.if_field + '[]\"]',$current_form);\n\n var if_val = condition_and_rule.if_value;\n var if_val_as_number = isFinite(parseFloat(if_val)) ? parseFloat(if_val):0;\n var operator = condition_and_rule.operator;\n \n var regex_patt = /.*/i; // fallback regex pattern\n var isValidRegex = true;\n try {\n regex_patt = new RegExp(if_val, 'i');\n } catch(e) {\n isValidRegex = false;\n }\n\n\n //backwards compat\n operator = operator === '≤' ? 'less than or equals' : operator;\n operator = operator === '≥' ? 'greater than or equals' : operator;\n operator = operator === '>' ? 'greater than' : operator;\n operator = operator === '<' ? 'less than' : operator;\n\n\n if ( $field.is(':checkbox') || $field.is(':radio') ) {\n\n var all_values = [];\n var checked_values = [];\n $field.each(function () {\n all_values.push(jQuery(this).val());\n if (jQuery(this).is(':checked')) {\n checked_values.push(jQuery(this).val());\n }\n });\n\n condition_ok = this.isConditionTrue(checked_values,operator,if_val,$field);\n \n } else {\n \n condition_ok = this.isConditionTrue($field.val(),operator,if_val,$field);\n }\n\n show_group = show_group && condition_ok;\n }\n\n return show_group;\n\n },\n isConditionTrue(values, operator, testValue='', $field=jQuery()) {\n\n if (!Array.isArray(values)) {\n values = [values];\n }\n\n let condition_ok = false; // start by assuming that the condition is not met\n\n if (!values || values.length == 0 || values.every((v) => !v||0)) { // no values or only empty values passed (0 is not considered empty)\n if (operator === 'is empty') {\n condition_ok = true;\n }\n if (operator === 'not empty') {\n condition_ok = false;\n }\n } else {\n if (operator === 'is empty') {\n condition_ok = false;\n }\n if (operator === 'not empty') {\n condition_ok = true;\n }\n }\n\n const testValueNumber = isFinite(parseFloat(testValue)) ? parseFloat(testValue) : NaN;\n\n\n if (operator === 'not equals' || operator === 'not equals (regex)') {\n // start by assuming that the condition is met\n condition_ok = true;\n }\n\n if (\n operator === 'function'\n && typeof window[testValue] == 'function'\n && window[testValue]($field) // here we call the actual user defined function\n ) {\n condition_ok = true;\n }\n\n let regex_patt = /.*/i; // fallback regex pattern\n let isValidRegex = true;\n if (operator === 'equals (regex)' || operator === 'not equals (regex)') {\n try {\n regex_patt = new RegExp(testValue, 'i');\n } catch(e) {\n isValidRegex = false;\n }\n }\n\n\n for(let i = 0; i < values.length; i++) {\n\n const value = values[i];\n\n const valueNumber = isFinite(parseFloat(value)) ? parseFloat(value) : NaN;\n const valsAreNumbers = !isNaN(valueNumber) && !isNaN(testValueNumber);\n\n if (\n\n operator === 'equals' && value === testValue ||\n operator === 'equals (regex)' && regex_patt.test(value) ||\n operator === 'greater than' && valsAreNumbers && valueNumber > testValueNumber ||\n operator === 'less than' && valsAreNumbers && valueNumber < testValueNumber ||\n operator === 'greater than or equals' && valsAreNumbers && valueNumber >= testValueNumber ||\n operator === 'less than or equals' && valsAreNumbers && valueNumber <= testValueNumber\n \n ) {\n\n condition_ok = true;\n break;\n\n } else if (\n\n operator === 'not equals' && value === testValue ||\n operator === 'not equals (regex)' && regex_patt.test(value)\n\n ) {\n\n condition_ok = false;\n break;\n\n }\n }\n\n return condition_ok;\n\n }\n\n};\n\n\n\n\njQuery('.wpcf7-form').each(function(){\n wpcf7cf_forms.push(new Wpcf7cfForm(jQuery(this)));\n});\n\n// Call displayFields again on all forms\n// Necessary in case some theme or plugin changed a form value by the time the entire page is fully loaded.\njQuery('document').ready(function() {\n wpcf7cf_forms.forEach(function(f){\n f.displayFields();\n });\n});\n\n// fix for exclusive checkboxes in IE (this will call the change-event again after all other checkboxes are unchecked, triggering the display_fields() function)\nvar old_wpcf7ExclusiveCheckbox = jQuery.fn.wpcf7ExclusiveCheckbox;\njQuery.fn.wpcf7ExclusiveCheckbox = function() {\n return this.find('input:checkbox').click(function() {\n var name = jQuery(this).attr('name');\n jQuery(this).closest('form').find('input:checkbox[name=\"' + name + '\"]').not(this).prop('checked', false).eq(0).change();\n });\n};\n\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;","module.exports = require(\"regenerator-runtime\");\n","/*!\n * jQuery JavaScript Library v3.5.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2020-04-10T15:07Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML <object> elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.5.0\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( _i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.5\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2020-03-14\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px\";\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = parseInt( trStyle.height ) > 3;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = (\n\t\t\t\t\tdataPriv.get( cur, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script\n\t\t\tif ( !isSuccess && jQuery.inArray( \"script\", s.dataTypes ) > -1 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tif ( typeof props.top === \"number\" ) {\n\t\t\t\tprops.top += \"px\";\n\t\t\t}\n\t\t\tif ( typeof props.left === \"number\" ) {\n\t\t\t\tprops.left += \"px\";\n\t\t\t}\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t} );\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTry