{"version":3,"file":"/app.js","mappings":"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","sources":["webpack:///webpack/runtime/chunk loaded","webpack:///./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js","webpack:///./src/js/more-toggles.js","webpack:///./src/js/voting.js","webpack:///./src/js/more-photos.js","webpack:///./src/js/photo-submit.js","webpack:///./src/js/app.js","webpack:///./src/js/share-popups.js","webpack:///./node_modules/croppr/dist/croppr.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/jsonp chunk loading","webpack:///webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// ==================================================\n// fancyBox v3.5.7\n//\n// Licensed GPLv3 for open source use\n// or fancyBox Commercial License for commercial use\n//\n// http://fancyapps.com/fancybox/\n// Copyright 2019 fancyApps\n//\n// ==================================================\n(function (window, document, $, undefined) {\r\n \"use strict\";\r\n\r\n window.console = window.console || {\r\n info: function (stuff) {}\r\n };\r\n\r\n // If there's no jQuery, fancyBox can't work\r\n // =========================================\r\n\r\n if (!$) {\r\n return;\r\n }\r\n\r\n // Check if fancyBox is already initialized\r\n // ========================================\r\n\r\n if ($.fn.fancybox) {\r\n console.info(\"fancyBox already initialized\");\r\n\r\n return;\r\n }\r\n\r\n // Private default settings\r\n // ========================\r\n\r\n var defaults = {\r\n // Close existing modals\r\n // Set this to false if you do not need to stack multiple instances\r\n closeExisting: false,\r\n\r\n // Enable infinite gallery navigation\r\n loop: false,\r\n\r\n // Horizontal space between slides\r\n gutter: 50,\r\n\r\n // Enable keyboard navigation\r\n keyboard: true,\r\n\r\n // Should allow caption to overlap the content\r\n preventCaptionOverlap: true,\r\n\r\n // Should display navigation arrows at the screen edges\r\n arrows: true,\r\n\r\n // Should display counter at the top left corner\r\n infobar: true,\r\n\r\n // Should display close button (using `btnTpl.smallBtn` template) over the content\r\n // Can be true, false, \"auto\"\r\n // If \"auto\" - will be automatically enabled for \"html\", \"inline\" or \"ajax\" items\r\n smallBtn: \"auto\",\r\n\r\n // Should display toolbar (buttons at the top)\r\n // Can be true, false, \"auto\"\r\n // If \"auto\" - will be automatically hidden if \"smallBtn\" is enabled\r\n toolbar: \"auto\",\r\n\r\n // What buttons should appear in the top right corner.\r\n // Buttons will be created using templates from `btnTpl` option\r\n // and they will be placed into toolbar (class=\"fancybox-toolbar\"` element)\r\n buttons: [\r\n \"zoom\",\r\n //\"share\",\r\n \"slideShow\",\r\n //\"fullScreen\",\r\n //\"download\",\r\n \"thumbs\",\r\n \"close\"\r\n ],\r\n\r\n // Detect \"idle\" time in seconds\r\n idleTime: 3,\r\n\r\n // Disable right-click and use simple image protection for images\r\n protect: false,\r\n\r\n // Shortcut to make content \"modal\" - disable keyboard navigtion, hide buttons, etc\r\n modal: false,\r\n\r\n image: {\r\n // Wait for images to load before displaying\r\n // true - wait for image to load and then display;\r\n // false - display thumbnail and load the full-sized image over top,\r\n // requires predefined image dimensions (`data-width` and `data-height` attributes)\r\n preload: false\r\n },\r\n\r\n ajax: {\r\n // Object containing settings for ajax request\r\n settings: {\r\n // This helps to indicate that request comes from the modal\r\n // Feel free to change naming\r\n data: {\r\n fancybox: true\r\n }\r\n }\r\n },\r\n\r\n iframe: {\r\n // Iframe template\r\n tpl: '',\r\n\r\n // Preload iframe before displaying it\r\n // This allows to calculate iframe content width and height\r\n // (note: Due to \"Same Origin Policy\", you can't get cross domain data).\r\n preload: true,\r\n\r\n // Custom CSS styling for iframe wrapping element\r\n // You can use this to set custom iframe dimensions\r\n css: {},\r\n\r\n // Iframe tag attributes\r\n attr: {\r\n scrolling: \"auto\"\r\n }\r\n },\r\n\r\n // For HTML5 video only\r\n video: {\r\n tpl: '\",\r\n format: \"\", // custom video format\r\n autoStart: true\r\n },\r\n\r\n // Default content type if cannot be detected automatically\r\n defaultType: \"image\",\r\n\r\n // Open/close animation type\r\n // Possible values:\r\n // false - disable\r\n // \"zoom\" - zoom images from/to thumbnail\r\n // \"fade\"\r\n // \"zoom-in-out\"\r\n //\r\n animationEffect: \"zoom\",\r\n\r\n // Duration in ms for open/close animation\r\n animationDuration: 366,\r\n\r\n // Should image change opacity while zooming\r\n // If opacity is \"auto\", then opacity will be changed if image and thumbnail have different aspect ratios\r\n zoomOpacity: \"auto\",\r\n\r\n // Transition effect between slides\r\n //\r\n // Possible values:\r\n // false - disable\r\n // \"fade'\r\n // \"slide'\r\n // \"circular'\r\n // \"tube'\r\n // \"zoom-in-out'\r\n // \"rotate'\r\n //\r\n transitionEffect: \"fade\",\r\n\r\n // Duration in ms for transition animation\r\n transitionDuration: 366,\r\n\r\n // Custom CSS class for slide element\r\n slideClass: \"\",\r\n\r\n // Custom CSS class for layout\r\n baseClass: \"\",\r\n\r\n // Base template for layout\r\n baseTpl: '
' +\r\n '
' +\r\n '
' +\r\n '
 / 
' +\r\n '
{{buttons}}
' +\r\n '
{{arrows}}
' +\r\n '
' +\r\n '
' +\r\n \"
\" +\r\n \"
\",\r\n\r\n // Loading indicator template\r\n spinnerTpl: '
',\r\n\r\n // Error message template\r\n errorTpl: '

{{ERROR}}

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

Hi!

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

{{SHARE}}

\" +\r\n \"

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

\" +\r\n '

' +\r\n \"
\"\r\n }\r\n });\r\n\r\n function escapeHtml(string) {\r\n var entityMap = {\r\n \"&\": \"&\",\r\n \"<\": \"<\",\r\n \">\": \">\",\r\n '\"': \""\",\r\n \"'\": \"'\",\r\n \"/\": \"/\",\r\n \"`\": \"`\",\r\n \"=\": \"=\"\r\n };\r\n\r\n return String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n return entityMap[s];\r\n });\r\n }\r\n\r\n $(document).on(\"click\", \"[data-fancybox-share]\", function () {\r\n var instance = $.fancybox.getInstance(),\r\n current = instance.current || null,\r\n url,\r\n tpl;\r\n\r\n if (!current) {\r\n return;\r\n }\r\n\r\n if ($.type(current.opts.share.url) === \"function\") {\r\n url = current.opts.share.url.apply(current, [instance, current]);\r\n }\r\n\r\n tpl = current.opts.share.tpl\r\n .replace(/\\{\\{media\\}\\}/g, current.type === \"image\" ? encodeURIComponent(current.src) : \"\")\r\n .replace(/\\{\\{url\\}\\}/g, encodeURIComponent(url))\r\n .replace(/\\{\\{url_raw\\}\\}/g, escapeHtml(url))\r\n .replace(/\\{\\{descr\\}\\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : \"\");\r\n\r\n $.fancybox.open({\r\n src: instance.translate(instance, tpl),\r\n type: \"html\",\r\n opts: {\r\n touch: false,\r\n animationEffect: false,\r\n afterLoad: function (shareInstance, shareCurrent) {\r\n // Close self if parent instance is closing\r\n instance.$refs.container.one(\"beforeClose.fb\", function () {\r\n shareInstance.close(null, 0);\r\n });\r\n\r\n // Opening links in a popup window\r\n shareCurrent.$content.find(\".fancybox-share__button\").click(function () {\r\n window.open(this.href, \"Share\", \"width=550, height=450\");\r\n return false;\r\n });\r\n },\r\n mobile: {\r\n autoFocus: false\r\n }\r\n }\r\n });\r\n });\r\n})(document, jQuery);\n// ==========================================================================\r\n//\r\n// Hash\r\n// Enables linking to each modal\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n \"use strict\";\r\n\r\n // Simple $.escapeSelector polyfill (for jQuery prior v3)\r\n if (!$.escapeSelector) {\r\n $.escapeSelector = function (sel) {\r\n var rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\r\n var fcssescape = function (ch, asCodePoint) {\r\n if (asCodePoint) {\r\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\r\n if (ch === \"\\0\") {\r\n return \"\\uFFFD\";\r\n }\r\n\r\n // Control characters and (dependent upon position) numbers get escaped as code points\r\n return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\r\n }\r\n\r\n // Other potentially-special ASCII characters get backslash-escaped\r\n return \"\\\\\" + ch;\r\n };\r\n\r\n return (sel + \"\").replace(rcssescape, fcssescape);\r\n };\r\n }\r\n\r\n // Get info about gallery name and current index from url\r\n function parseUrl() {\r\n var hash = window.location.hash.substr(1),\r\n rez = hash.split(\"-\"),\r\n index = rez.length > 1 && /^\\+?\\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1,\r\n gallery = rez.join(\"-\");\r\n\r\n return {\r\n hash: hash,\r\n /* Index is starting from 1 */\r\n index: index < 1 ? 1 : index,\r\n gallery: gallery\r\n };\r\n }\r\n\r\n // Trigger click evnt on links to open new fancyBox instance\r\n function triggerFromUrl(url) {\r\n if (url.gallery !== \"\") {\r\n // If we can find element matching 'data-fancybox' atribute,\r\n // then triggering click event should start fancyBox\r\n $(\"[data-fancybox='\" + $.escapeSelector(url.gallery) + \"']\")\r\n .eq(url.index - 1)\r\n .focus()\r\n .trigger(\"click.fb-start\");\r\n }\r\n }\r\n\r\n // Get gallery name from current instance\r\n function getGalleryID(instance) {\r\n var opts, ret;\r\n\r\n if (!instance) {\r\n return false;\r\n }\r\n\r\n opts = instance.current ? instance.current.opts : instance.opts;\r\n ret = opts.hash || (opts.$orig ? opts.$orig.data(\"fancybox\") || opts.$orig.data(\"fancybox-trigger\") : \"\");\r\n\r\n return ret === \"\" ? false : ret;\r\n }\r\n\r\n // Start when DOM becomes ready\r\n $(function () {\r\n // Check if user has disabled this module\r\n if ($.fancybox.defaults.hash === false) {\r\n return;\r\n }\r\n\r\n // Update hash when opening/closing fancyBox\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var url, gallery;\r\n\r\n if (instance.group[instance.currIndex].opts.hash === false) {\r\n return;\r\n }\r\n\r\n url = parseUrl();\r\n gallery = getGalleryID(instance);\r\n\r\n // Make sure gallery start index matches index from hash\r\n if (gallery && url.gallery && gallery == url.gallery) {\r\n instance.currIndex = url.index - 1;\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n var gallery;\r\n\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n // Check if need to update window hash\r\n gallery = getGalleryID(instance);\r\n\r\n if (!gallery) {\r\n return;\r\n }\r\n\r\n // Variable containing last hash value set by fancyBox\r\n // It will be used to determine if fancyBox needs to close after hash change is detected\r\n instance.currentHash = gallery + (instance.group.length > 1 ? \"-\" + (current.index + 1) : \"\");\r\n\r\n // If current hash is the same (this instance most likely is opened by hashchange), then do nothing\r\n if (window.location.hash === \"#\" + instance.currentHash) {\r\n return;\r\n }\r\n\r\n if (firstRun && !instance.origHash) {\r\n instance.origHash = window.location.hash;\r\n }\r\n\r\n if (instance.hashTimer) {\r\n clearTimeout(instance.hashTimer);\r\n }\r\n\r\n // Update hash\r\n instance.hashTimer = setTimeout(function () {\r\n if (\"replaceState\" in window.history) {\r\n window.history[firstRun ? \"pushState\" : \"replaceState\"]({},\r\n document.title,\r\n window.location.pathname + window.location.search + \"#\" + instance.currentHash\r\n );\r\n\r\n if (firstRun) {\r\n instance.hasCreatedHistory = true;\r\n }\r\n } else {\r\n window.location.hash = instance.currentHash;\r\n }\r\n\r\n instance.hashTimer = null;\r\n }, 300);\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance, current) {\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n clearTimeout(instance.hashTimer);\r\n\r\n // Goto previous history entry\r\n if (instance.currentHash && instance.hasCreatedHistory) {\r\n window.history.back();\r\n } else if (instance.currentHash) {\r\n if (\"replaceState\" in window.history) {\r\n window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || \"\"));\r\n } else {\r\n window.location.hash = instance.origHash;\r\n }\r\n }\r\n\r\n instance.currentHash = null;\r\n }\r\n });\r\n\r\n // Check if need to start/close after url has changed\r\n $(window).on(\"hashchange.fb\", function () {\r\n var url = parseUrl(),\r\n fb = null;\r\n\r\n // Find last fancyBox instance that has \"hash\"\r\n $.each(\r\n $(\".fancybox-container\")\r\n .get()\r\n .reverse(),\r\n function (index, value) {\r\n var tmp = $(value).data(\"FancyBox\");\r\n\r\n if (tmp && tmp.currentHash) {\r\n fb = tmp;\r\n return false;\r\n }\r\n }\r\n );\r\n\r\n if (fb) {\r\n // Now, compare hash values\r\n if (fb.currentHash !== url.gallery + \"-\" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) {\r\n fb.currentHash = null;\r\n\r\n fb.close();\r\n }\r\n } else if (url.gallery !== \"\") {\r\n triggerFromUrl(url);\r\n }\r\n });\r\n\r\n // Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n setTimeout(function () {\r\n if (!$.fancybox.getInstance()) {\r\n triggerFromUrl(parseUrl());\r\n }\r\n }, 50);\r\n });\r\n})(window, document, jQuery);\n// ==========================================================================\r\n//\r\n// Wheel\r\n// Basic mouse weheel support for gallery navigation\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n var prevTime = new Date().getTime();\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance, current) {\r\n instance.$refs.stage.on(\"mousewheel DOMMouseScroll wheel MozMousePixelScroll\", function (e) {\r\n var current = instance.current,\r\n currTime = new Date().getTime();\r\n\r\n if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === \"auto\" && current.type !== \"image\")) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (current.$slide.hasClass(\"fancybox-animated\")) {\r\n return;\r\n }\r\n\r\n e = e.originalEvent || e;\r\n\r\n if (currTime - prevTime < 250) {\r\n return;\r\n }\r\n\r\n prevTime = currTime;\r\n\r\n instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? \"next\" : \"previous\"]();\r\n });\r\n }\r\n });\r\n})(document, jQuery);","\nclass MoreToggle {\n\n constructor( el ) {\n this.trigger = el\n this.target = document.querySelector(`[more-target=\"${el.dataset.target}\"]`)\n this.textEl = el.querySelector('[text]')\n \n // this.target.style.transition = `height ${this.target.scrollHeight * 0.002}s ease-in-out`;\n \n this.toggle = this.toggle.bind(this)\n this.trigger.addEventListener('click', this.toggle)\n\n this.active = false\n }\n\n toggle() {\n this.active = ! this.active\n this.target.style.height = this.active ? `${this.target.scrollHeight}px` : '0'\n this.textEl.innerText = this.active ? 'lees minder' : 'lees meer'\n this.trigger.classList[this.active ? 'add' : 'remove']('is-active')\n }\n}\n\nexport function init() {\n \n let toggles = [...document.querySelectorAll('[more-toggle]')]\n\n toggles = toggles.map( el => {\n if ( el.dataset.target ) {\n return new MoreToggle( el )\n } else {\n console.warn('No data-target set')\n }\n })\n}\n","\nclass VoteForm {\n\n constructor( el ) {\n this.form = el\n\n this.sloganInput = el.querySelector('#slogan-slug')\n \n this.thankyYouContainer = el.querySelector('[thank-you-container]')\n this.thankyYouContainer.innerHTML = this.thankyYouContainer.dataset.thankYou\n\n this.done = false\n this.reset = this.reset.bind(this)\n\n this.handleSubmit = this.handleSubmit.bind(this)\n this.form.addEventListener('submit', this.handleSubmit)\n \n this.form.addEventListener('click', (e) => {\n if ( e.target.hasAttribute('close-modal-trigger') ) jQuery.fancybox.close()\n })\n }\n\n reset () {\n this.done = false\n this.form.classList.remove('is-done')\n }\n\n handleSubmit(e) {\n e.preventDefault()\n\n let formData = new FormData(this.form)\n\n fetch( '/register-vote', {\n method: 'POST',\n body: formData,\n })\n .then(res => {\n if (!res.ok) throw new Error('Network response was not OK')\n return res.json()\n })\n .then(res => {\n this.done = true\n this.form.classList.add('is-done')\n if( res.status === 'not OK') {\n this.form.classList.add('vote-limit-exceeded')\n }\n })\n .catch(error => {\n console.error('There has been a problem with your fetch operation:', error)\n });\n }\n}\n\nexport function init() {\n \n let voteTriggers = [...document.querySelectorAll('[vote-modal-trigger]')]\n const voteModal = document.getElementById('vote-modal')\n\n if (! voteModal ) return\n \n const sloganHeading = voteModal.querySelector('[heading]')\n const sloganProtest = voteModal.querySelector('[protest]')\n const form = new VoteForm(voteModal.querySelector('[vote-form]'))\n\n voteTriggers.forEach(el => {\n \n const DATA = JSON.parse(el.dataset.slogan)\n\n el.addEventListener('click', () => {\n \n voteModal.setAttribute('gradient', DATA.gradient)\n sloganHeading.innerText = DATA.heading\n sloganProtest.innerText = `#${DATA.protest}`\n\n form.sloganInput.value = DATA.slug\n\n jQuery.fancybox.open({\n src : '#vote-modal',\n type : 'inline',\n opts : {\n afterClose: function () {\n form.reset()\n }\n }\n \n })\n \n })\n });\n}\n","\nexport function init() {\n \n let loadMoreButton = document.querySelector('[more-photos-btn]')\n let photoContainer = document.querySelector('[photo-container]')\n\n if ( ! loadMoreButton || ! photoContainer) return\n\n loadMoreButton.addEventListener('click',(e)=>{\n e.preventDefault()\n console.log(e.currentTarget.href)\n fetch( e.currentTarget.href, {method: 'GET',})\n .then(res => res.text())\n .then(html => {\n let parser = new DOMParser()\n\t let doc = parser.parseFromString(html, 'text/html')\n let newPhotoContainer = doc.querySelector('[photo-container]')\n\n if ( newPhotoContainer ) {\n \n photoContainer.insertAdjacentHTML('beforeend',newPhotoContainer.innerHTML)\n\n let nextPage = newPhotoContainer.dataset.nextPage\n\n if( nextPage ) {\n loadMoreButton.href = nextPage\n } else {\n loadMoreButton.parentElement.remove()\n }\n }\n\n })\n .catch(error => {\n console.error('There has been a problem with your fetch operation:', error)\n });\n })\n\n}\n","import Croppr from 'croppr';\n\nlet croppr\nclass PhotoForm {\n\n constructor( el ) {\n this.form = el\n \n this.thankyYouContainer = el.querySelector('[thank-you-container]')\n this.thankyYouContainer.innerHTML = this.thankyYouContainer.dataset.thankYou\n\n this.done = false\n this.reset = this.reset.bind(this)\n\n this.imgInput = el.querySelector('[upload-input]')\n this.cropInput = el.querySelector('[crop-input]')\n this.imgPreview = el.querySelector('[image-preview]')\n\n this.hiddenSegment = el.querySelector('[reveal-on-upload]')\n\n this.handleSubmit = this.handleSubmit.bind(this)\n this.form.addEventListener('submit', this.handleSubmit)\n\n this.cropCanvas = document.querySelector('[crop-canvas]')\n this.croppr = null\n this.cropImage = this.cropImage.bind(this)\n\n this.imgInput.addEventListener('change', (e) => {\n\n if(e.target.files.length > 0){\n let src = URL.createObjectURL(e.target.files[0]);\n this.hiddenSegment.style.display = 'block'\n this.imgPreview.src = src\n\n setTimeout(() => {\n if( this.croppr ) {\n this.croppr.setImage(src)\n } else {\n this.croppr = new Croppr( this.imgPreview, {\n aspectRatio: 1,\n returnMode: 'ratio',\n onCropEnd: (data) => {\n this.cropInput.value = JSON.stringify(data)\n }\n });\n }\n }, 30);\n }\n })\n \n this.form.addEventListener('click', (e) => {\n if ( e.target.hasAttribute('close-modal-trigger') ) jQuery.fancybox.close()\n })\n }\n\n reset () {\n if (!this.done) return\n this.done = false\n this.hiddenSegment.style.display = 'none'\n this.form.classList.remove('is-done')\n }\n\n cropImage (callback) {\n\n let image = new Image();\n image.src = this.imgPreview.src; \n\n let cropValue = this.croppr.getValue('ratio')\n let convertedCropValues = {\n width: image.width * cropValue.width,\n height: image.height * cropValue.height,\n x: image.width * cropValue.x,\n y: image.height * cropValue.y,\n }\n \n this.cropCanvas.width = convertedCropValues.width\n this.cropCanvas.height = convertedCropValues.height\n\n const ctx = this.cropCanvas.getContext('2d')\n\n image.onload = function(){\n ctx.drawImage( \n image, \n convertedCropValues.x, \n convertedCropValues.y, \n image.width, \n image.height, \n 0,0, \n image.width, \n image.height\n );\n \n callback()\n }\n }\n\n handleSubmit (e) {\n \n e.preventDefault()\n \n let formData = new FormData(this.form)\n\n this.cropImage(() => {\n\n let dataURL = this.cropCanvas.toDataURL('image/jpeg');\n let blob = dataURItoBlob(dataURL);\n let file = new File( [blob], 'upload.jpg', { type: 'image/jpeg' } )\n formData.append('image', file )\n \n this.done = true\n this.form.classList.add('is-done')\n\n fetch('/upload',{\n method: 'POST',\n body: formData,\n })\n .then(res => {\n if (!res.ok) throw new Error('Network response was not OK')\n return res.json()\n })\n .then(res => {\n this.done = true\n this.form.classList.add('is-done')\n })\n .catch(error => {\n console.error('There has been a problem with your fetch operation:', error)\n });\n })\n \n }\n}\n\nexport function init() {\n\n let form = document.querySelector('[upload-photo-form]')\n let modalToggle = document.querySelector('[open-photo-upload-modal]')\n \n if ( ! form || !modalToggle ) return\n \n form = new PhotoForm(form)\n\n modalToggle.addEventListener('click', ()=>{\n jQuery.fancybox.open({\n src : '#upload-photo-modal',\n type : 'inline',\n opts : {\n afterClose: function () {\n form.reset()\n }\n }\n })\n })\n \n}\n\nfunction dataURItoBlob(dataURI) {\n var binary = atob(dataURI.split(',')[1]);\n var array = [];\n for(var i = 0; i < binary.length; i++) {\n array.push(binary.charCodeAt(i));\n }\n return new Blob([new Uint8Array(array)], {type: 'image/jpeg'});\n}","// import SmoothScroll from 'smooth-scroll';\nimport '@fancyapps/fancybox';\n\nimport * as moreToggles from './more-toggles';\nimport * as morePhotos from './more-photos';\nimport * as voting from './voting';\nimport * as photoSubmit from './photo-submit';\nimport * as sharePopups from './share-popups';\n\nmoreToggles.init()\nmorePhotos.init()\nvoting.init()\nphotoSubmit.init()\nsharePopups.init()\n\n// const smoothAnchor = new SmoothScroll('a[href*=\"#\"]', {\n// topOnEmptyHash: true,\n// clip: true,\n// easing: 'easeInOutCubic',\n// });\n\n","\nexport function init() {\n \n let shareLinks = document.querySelectorAll('[share-popup]')\n\n shareLinks.forEach( link => {\n link.addEventListener('click', (e) => {\n e.preventDefault()\n \n let href = link.href\n let title = link.dataset.platform || 'Share'\n let w = 460\n let h = 600\n let left = (screen.width/2)-(w/2)\n let top = (screen.height/2)-(h/2)\n\n window.open(href, title, 'toolbar=no, directories=no, status=no, menubar=no, resizable=1, copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left);\n })\n });\n}\n","/**\n * Croppr.js\n * https://github.com/jamesssooi/Croppr.js\n * \n * A JavaScript image cropper that's lightweight, awesome, and has\n * zero dependencies.\n * \n * (C) 2017 James Ooi. Released under the MIT License.\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.Croppr = factory());\n}(this, (function () { 'use strict';\n\n(function () {\n var lastTime = 0;\n var vendors = ['ms', 'moz', 'webkit', 'o'];\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n }\n if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback, element) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = window.setTimeout(function () {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {\n clearTimeout(id);\n };\n})();\n(function () {\n if (typeof window.CustomEvent === \"function\") return false;\n function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n }\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent;\n})();\n(function (window) {\n try {\n new CustomEvent('test');\n return false;\n } catch (e) {}\n function MouseEvent(eventType, params) {\n params = params || { bubbles: false, cancelable: false };\n var mouseEvent = document.createEvent('MouseEvent');\n mouseEvent.initMouseEvent(eventType, params.bubbles, params.cancelable, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n return mouseEvent;\n }\n MouseEvent.prototype = Event.prototype;\n window.MouseEvent = MouseEvent;\n})(window);\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n\n\n\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\nvar Handle =\n/**\n * Creates a new Handle instance.\n * @constructor\n * @param {Array} position The x and y ratio position of the handle\n * within the crop region. Accepts a value between 0 to 1 in the order\n * of [X, Y].\n * @param {Array} constraints Define the side of the crop region that\n * is to be affected by this handle. Accepts a value of 0 or 1 in the\n * order of [TOP, RIGHT, BOTTOM, LEFT].\n * @param {String} cursor The CSS cursor of this handle.\n * @param {Element} eventBus The element to dispatch events to.\n */\nfunction Handle(position, constraints, cursor, eventBus) {\n classCallCheck(this, Handle);\n var self = this;\n this.position = position;\n this.constraints = constraints;\n this.cursor = cursor;\n this.eventBus = eventBus;\n this.el = document.createElement('div');\n this.el.className = 'croppr-handle';\n this.el.style.cursor = cursor;\n this.el.addEventListener('mousedown', onMouseDown);\n function onMouseDown(e) {\n e.stopPropagation();\n document.addEventListener('mouseup', onMouseUp);\n document.addEventListener('mousemove', onMouseMove);\n self.eventBus.dispatchEvent(new CustomEvent('handlestart', {\n detail: { handle: self }\n }));\n }\n function onMouseUp(e) {\n e.stopPropagation();\n document.removeEventListener('mouseup', onMouseUp);\n document.removeEventListener('mousemove', onMouseMove);\n self.eventBus.dispatchEvent(new CustomEvent('handleend', {\n detail: { handle: self }\n }));\n }\n function onMouseMove(e) {\n e.stopPropagation();\n self.eventBus.dispatchEvent(new CustomEvent('handlemove', {\n detail: { mouseX: e.clientX, mouseY: e.clientY }\n }));\n }\n};\n\nvar Box = function () {\n /**\n * Creates a new Box instance.\n * @constructor\n * @param {Number} x1\n * @param {Number} y1\n * @param {Number} x2\n * @param {Number} y2\n */\n function Box(x1, y1, x2, y2) {\n classCallCheck(this, Box);\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n }\n /**\n * Sets the new dimensions of the box.\n * @param {Number} x1\n * @param {Number} y1\n * @param {Number} x2\n * @param {Number} y2\n */\n createClass(Box, [{\n key: 'set',\n value: function set$$1() {\n var x1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var y1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var x2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var y2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n this.x1 = x1 == null ? this.x1 : x1;\n this.y1 = y1 == null ? this.y1 : y1;\n this.x2 = x2 == null ? this.x2 : x2;\n this.y2 = y2 == null ? this.y2 : y2;\n return this;\n }\n /**\n * Calculates the width of the box.\n * @returns {Number}\n */\n }, {\n key: 'width',\n value: function width() {\n return Math.abs(this.x2 - this.x1);\n }\n /**\n * Calculates the height of the box.\n * @returns {Number}\n */\n }, {\n key: 'height',\n value: function height() {\n return Math.abs(this.y2 - this.y1);\n }\n /**\n * Resizes the box to a new size.\n * @param {Number} newWidth\n * @param {Number} newHeight\n * @param {Array} [origin] The origin point to resize from.\n * Defaults to [0, 0] (top left).\n */\n }, {\n key: 'resize',\n value: function resize(newWidth, newHeight) {\n var origin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0];\n var fromX = this.x1 + this.width() * origin[0];\n var fromY = this.y1 + this.height() * origin[1];\n this.x1 = fromX - newWidth * origin[0];\n this.y1 = fromY - newHeight * origin[1];\n this.x2 = this.x1 + newWidth;\n this.y2 = this.y1 + newHeight;\n return this;\n }\n /**\n * Scale the box by a factor.\n * @param {Number} factor\n * @param {Array} [origin] The origin point to resize from.\n * Defaults to [0, 0] (top left).\n */\n }, {\n key: 'scale',\n value: function scale(factor) {\n var origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0];\n var newWidth = this.width() * factor;\n var newHeight = this.height() * factor;\n this.resize(newWidth, newHeight, origin);\n return this;\n }\n }, {\n key: 'move',\n value: function move() {\n var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var width = this.width();\n var height = this.height();\n x = x === null ? this.x1 : x;\n y = y === null ? this.y1 : y;\n this.x1 = x;\n this.y1 = y;\n this.x2 = x + width;\n this.y2 = y + height;\n return this;\n }\n /**\n * Get relative x and y coordinates of a given point within the box.\n * @param {Array} point The x and y ratio position within the box.\n * @returns {Array} The x and y coordinates [x, y].\n */\n }, {\n key: 'getRelativePoint',\n value: function getRelativePoint() {\n var point = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [0, 0];\n var x = this.width() * point[0];\n var y = this.height() * point[1];\n return [x, y];\n }\n /**\n * Get absolute x and y coordinates of a given point within the box.\n * @param {Array} point The x and y ratio position within the box.\n * @returns {Array} The x and y coordinates [x, y].\n */\n }, {\n key: 'getAbsolutePoint',\n value: function getAbsolutePoint() {\n var point = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [0, 0];\n var x = this.x1 + this.width() * point[0];\n var y = this.y1 + this.height() * point[1];\n return [x, y];\n }\n /**\n * Constrain the box to a fixed ratio.\n * @param {Number} ratio\n * @param {Array} [origin] The origin point to resize from.\n * Defaults to [0, 0] (top left).\n * @param {String} [grow] The axis to grow to maintain the ratio.\n * Defaults to 'height'.\n */\n }, {\n key: 'constrainToRatio',\n value: function constrainToRatio(ratio) {\n var origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0];\n var grow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'height';\n if (ratio === null) {\n return;\n }\n var width = this.width();\n var height = this.height();\n switch (grow) {\n case 'height':\n this.resize(this.width(), this.width() * ratio, origin);\n break;\n case 'width':\n this.resize(this.height() * 1 / ratio, this.height(), origin);\n break;\n default:\n this.resize(this.width(), this.width() * ratio, origin);\n }\n return this;\n }\n /**\n * Constrain the box within a boundary.\n * @param {Number} boundaryWidth\n * @param {Number} boundaryHeight\n * @param {Array} [origin] The origin point to resize from.\n * Defaults to [0, 0] (top left).\n */\n }, {\n key: 'constrainToBoundary',\n value: function constrainToBoundary(boundaryWidth, boundaryHeight) {\n var origin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0];\n var _getAbsolutePoint = this.getAbsolutePoint(origin),\n _getAbsolutePoint2 = slicedToArray(_getAbsolutePoint, 2),\n originX = _getAbsolutePoint2[0],\n originY = _getAbsolutePoint2[1];\n var maxIfLeft = originX;\n var maxIfTop = originY;\n var maxIfRight = boundaryWidth - originX;\n var maxIfBottom = boundaryHeight - originY;\n var directionX = -2 * origin[0] + 1;\n var directionY = -2 * origin[1] + 1;\n var maxWidth = null,\n maxHeight = null;\n switch (directionX) {\n case -1:\n maxWidth = maxIfLeft;break;\n case 0:\n maxWidth = Math.min(maxIfLeft, maxIfRight) * 2;break;\n case +1:\n maxWidth = maxIfRight;break;\n }\n switch (directionY) {\n case -1:\n maxHeight = maxIfTop;break;\n case 0:\n maxHeight = Math.min(maxIfTop, maxIfBottom) * 2;break;\n case +1:\n maxHeight = maxIfBottom;break;\n }\n if (this.width() > maxWidth) {\n var factor = maxWidth / this.width();\n this.scale(factor, origin);\n }\n if (this.height() > maxHeight) {\n var _factor = maxHeight / this.height();\n this.scale(_factor, origin);\n }\n return this;\n }\n /**\n * Constrain the box to a maximum/minimum size.\n * @param {Number} [maxWidth]\n * @param {Number} [maxHeight]\n * @param {Number} [minWidth]\n * @param {Number} [minHeight]\n * @param {Array} [origin] The origin point to resize from.\n * Defaults to [0, 0] (top left).\n * @param {Number} [ratio] Ratio to maintain.\n */\n }, {\n key: 'constrainToSize',\n value: function constrainToSize() {\n var maxWidth = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var maxHeight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var minWidth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var minHeight = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var origin = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [0, 0];\n var ratio = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;\n if (ratio) {\n if (ratio > 1) {\n maxWidth = maxHeight * 1 / ratio;\n minHeight = minHeight * ratio;\n } else if (ratio < 1) {\n maxHeight = maxWidth * ratio;\n minWidth = minHeight * 1 / ratio;\n }\n }\n if (maxWidth && this.width() > maxWidth) {\n var newWidth = maxWidth,\n newHeight = ratio === null ? this.height() : maxHeight;\n this.resize(newWidth, newHeight, origin);\n }\n if (maxHeight && this.height() > maxHeight) {\n var _newWidth = ratio === null ? this.width() : maxWidth,\n _newHeight = maxHeight;\n this.resize(_newWidth, _newHeight, origin);\n }\n if (minWidth && this.width() < minWidth) {\n var _newWidth2 = minWidth,\n _newHeight2 = ratio === null ? this.height() : minHeight;\n this.resize(_newWidth2, _newHeight2, origin);\n }\n if (minHeight && this.height() < minHeight) {\n var _newWidth3 = ratio === null ? this.width() : minWidth,\n _newHeight3 = minHeight;\n this.resize(_newWidth3, _newHeight3, origin);\n }\n return this;\n }\n }]);\n return Box;\n}();\n\n/**\n * Binds an element's touch events to be simulated as mouse events.\n * @param {Element} element\n */\nfunction enableTouch(element) {\n element.addEventListener('touchstart', simulateMouseEvent);\n element.addEventListener('touchend', simulateMouseEvent);\n element.addEventListener('touchmove', simulateMouseEvent);\n}\n/**\n * Translates a touch event to a mouse event.\n * @param {Event} e\n */\nfunction simulateMouseEvent(e) {\n e.preventDefault();\n var touch = e.changedTouches[0];\n var eventMap = {\n 'touchstart': 'mousedown',\n 'touchmove': 'mousemove',\n 'touchend': 'mouseup'\n };\n touch.target.dispatchEvent(new MouseEvent(eventMap[e.type], {\n bubbles: true,\n cancelable: true,\n view: window,\n clientX: touch.clientX,\n clientY: touch.clientY,\n screenX: touch.screenX,\n screenY: touch.screenY\n }));\n}\n\n/**\n * Define a list of handles to create.\n *\n * @property {Array} position - The x and y ratio position of the handle within\n * the crop region. Accepts a value between 0 to 1 in the order of [X, Y].\n * @property {Array} constraints - Define the side of the crop region that is to\n * be affected by this handle. Accepts a value of 0 or 1 in the order of\n * [TOP, RIGHT, BOTTOM, LEFT].\n * @property {String} cursor - The CSS cursor of this handle.\n */\nvar HANDLES = [{ position: [0.0, 0.0], constraints: [1, 0, 0, 1], cursor: 'nw-resize' }, { position: [0.5, 0.0], constraints: [1, 0, 0, 0], cursor: 'n-resize' }, { position: [1.0, 0.0], constraints: [1, 1, 0, 0], cursor: 'ne-resize' }, { position: [1.0, 0.5], constraints: [0, 1, 0, 0], cursor: 'e-resize' }, { position: [1.0, 1.0], constraints: [0, 1, 1, 0], cursor: 'se-resize' }, { position: [0.5, 1.0], constraints: [0, 0, 1, 0], cursor: 's-resize' }, { position: [0.0, 1.0], constraints: [0, 0, 1, 1], cursor: 'sw-resize' }, { position: [0.0, 0.5], constraints: [0, 0, 0, 1], cursor: 'w-resize' }];\nvar CropprCore = function () {\n function CropprCore(element, options) {\n var _this = this;\n var deferred = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n classCallCheck(this, CropprCore);\n this.options = CropprCore.parseOptions(options || {});\n if (!element.nodeName) {\n element = document.querySelector(element);\n if (element == null) {\n throw 'Unable to find element.';\n }\n }\n if (!element.getAttribute('src')) {\n throw 'Image src not provided.';\n }\n this._initialized = false;\n this._restore = {\n parent: element.parentNode,\n element: element\n };\n if (!deferred) {\n if (element.width === 0 || element.height === 0) {\n element.onload = function () {\n _this.initialize(element);\n };\n } else {\n this.initialize(element);\n }\n }\n }\n createClass(CropprCore, [{\n key: 'initialize',\n value: function initialize(element) {\n this.createDOM(element);\n this.options.convertToPixels(this.cropperEl);\n this.attachHandlerEvents();\n this.attachRegionEvents();\n this.attachOverlayEvents();\n this.box = this.initializeBox(this.options);\n this.redraw();\n this._initialized = true;\n if (this.options.onInitialize !== null) {\n this.options.onInitialize(this);\n }\n }\n }, {\n key: 'createDOM',\n value: function createDOM(targetEl) {\n this.containerEl = document.createElement('div');\n this.containerEl.className = 'croppr-container';\n this.eventBus = this.containerEl;\n enableTouch(this.containerEl);\n this.cropperEl = document.createElement('div');\n this.cropperEl.className = 'croppr';\n this.imageEl = document.createElement('img');\n this.imageEl.setAttribute('src', targetEl.getAttribute('src'));\n this.imageEl.setAttribute('alt', targetEl.getAttribute('alt'));\n this.imageEl.className = 'croppr-image';\n this.imageClippedEl = this.imageEl.cloneNode();\n this.imageClippedEl.className = 'croppr-imageClipped';\n this.regionEl = document.createElement('div');\n this.regionEl.className = 'croppr-region';\n this.overlayEl = document.createElement('div');\n this.overlayEl.className = 'croppr-overlay';\n var handleContainerEl = document.createElement('div');\n handleContainerEl.className = 'croppr-handleContainer';\n this.handles = [];\n for (var i = 0; i < HANDLES.length; i++) {\n var handle = new Handle(HANDLES[i].position, HANDLES[i].constraints, HANDLES[i].cursor, this.eventBus);\n this.handles.push(handle);\n handleContainerEl.appendChild(handle.el);\n }\n this.cropperEl.appendChild(this.imageEl);\n this.cropperEl.appendChild(this.imageClippedEl);\n this.cropperEl.appendChild(this.regionEl);\n this.cropperEl.appendChild(this.overlayEl);\n this.cropperEl.appendChild(handleContainerEl);\n this.containerEl.appendChild(this.cropperEl);\n targetEl.parentElement.replaceChild(this.containerEl, targetEl);\n }\n /**\n * Changes the image src.\n * @param {String} src\n */\n }, {\n key: 'setImage',\n value: function setImage(src) {\n var _this2 = this;\n this.imageEl.onload = function () {\n _this2.box = _this2.initializeBox(_this2.options);\n _this2.redraw();\n };\n this.imageEl.src = src;\n this.imageClippedEl.src = src;\n return this;\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this._restore.parent.replaceChild(this._restore.element, this.containerEl);\n }\n /**\n * Create a new box region with a set of options.\n * @param {Object} opts The options.\n * @returns {Box}\n */\n }, {\n key: 'initializeBox',\n value: function initializeBox(opts) {\n var width = opts.startSize.width;\n var height = opts.startSize.height;\n var box = new Box(0, 0, width, height);\n box.constrainToRatio(opts.aspectRatio, [0.5, 0.5]);\n var min = opts.minSize;\n var max = opts.maxSize;\n box.constrainToSize(max.width, max.height, min.width, min.height, [0.5, 0.5], opts.aspectRatio);\n var parentWidth = this.cropperEl.offsetWidth;\n var parentHeight = this.cropperEl.offsetHeight;\n box.constrainToBoundary(parentWidth, parentHeight, [0.5, 0.5]);\n var x = this.cropperEl.offsetWidth / 2 - box.width() / 2;\n var y = this.cropperEl.offsetHeight / 2 - box.height() / 2;\n box.move(x, y);\n return box;\n }\n }, {\n key: 'redraw',\n value: function redraw() {\n var _this3 = this;\n var width = Math.round(this.box.width()),\n height = Math.round(this.box.height()),\n x1 = Math.round(this.box.x1),\n y1 = Math.round(this.box.y1),\n x2 = Math.round(this.box.x2),\n y2 = Math.round(this.box.y2);\n window.requestAnimationFrame(function () {\n _this3.regionEl.style.transform = 'translate(' + x1 + 'px, ' + y1 + 'px)';\n _this3.regionEl.style.width = width + 'px';\n _this3.regionEl.style.height = height + 'px';\n _this3.imageClippedEl.style.clip = 'rect(' + y1 + 'px, ' + x2 + 'px, ' + y2 + 'px, ' + x1 + 'px)';\n var center = _this3.box.getAbsolutePoint([.5, .5]);\n var xSign = center[0] - _this3.cropperEl.offsetWidth / 2 >> 31;\n var ySign = center[1] - _this3.cropperEl.offsetHeight / 2 >> 31;\n var quadrant = (xSign ^ ySign) + ySign + ySign + 4;\n var foregroundHandleIndex = -2 * quadrant + 8;\n for (var i = 0; i < _this3.handles.length; i++) {\n var handle = _this3.handles[i];\n var handleWidth = handle.el.offsetWidth;\n var handleHeight = handle.el.offsetHeight;\n var left = x1 + width * handle.position[0] - handleWidth / 2;\n var top = y1 + height * handle.position[1] - handleHeight / 2;\n handle.el.style.transform = 'translate(' + Math.round(left) + 'px, ' + Math.round(top) + 'px)';\n handle.el.style.zIndex = foregroundHandleIndex == i ? 5 : 4;\n }\n });\n }\n }, {\n key: 'attachHandlerEvents',\n value: function attachHandlerEvents() {\n var eventBus = this.eventBus;\n eventBus.addEventListener('handlestart', this.onHandleMoveStart.bind(this));\n eventBus.addEventListener('handlemove', this.onHandleMoveMoving.bind(this));\n eventBus.addEventListener('handleend', this.onHandleMoveEnd.bind(this));\n }\n }, {\n key: 'attachRegionEvents',\n value: function attachRegionEvents() {\n var eventBus = this.eventBus;\n var self = this;\n this.regionEl.addEventListener('mousedown', onMouseDown);\n eventBus.addEventListener('regionstart', this.onRegionMoveStart.bind(this));\n eventBus.addEventListener('regionmove', this.onRegionMoveMoving.bind(this));\n eventBus.addEventListener('regionend', this.onRegionMoveEnd.bind(this));\n function onMouseDown(e) {\n e.stopPropagation();\n document.addEventListener('mouseup', onMouseUp);\n document.addEventListener('mousemove', onMouseMove);\n eventBus.dispatchEvent(new CustomEvent('regionstart', {\n detail: { mouseX: e.clientX, mouseY: e.clientY }\n }));\n }\n function onMouseMove(e) {\n e.stopPropagation();\n eventBus.dispatchEvent(new CustomEvent('regionmove', {\n detail: { mouseX: e.clientX, mouseY: e.clientY }\n }));\n }\n function onMouseUp(e) {\n e.stopPropagation();\n document.removeEventListener('mouseup', onMouseUp);\n document.removeEventListener('mousemove', onMouseMove);\n eventBus.dispatchEvent(new CustomEvent('regionend', {\n detail: { mouseX: e.clientX, mouseY: e.clientY }\n }));\n }\n }\n }, {\n key: 'attachOverlayEvents',\n value: function attachOverlayEvents() {\n var SOUTHEAST_HANDLE_IDX = 4;\n var self = this;\n var tmpBox = null;\n this.overlayEl.addEventListener('mousedown', onMouseDown);\n function onMouseDown(e) {\n e.stopPropagation();\n document.addEventListener('mouseup', onMouseUp);\n document.addEventListener('mousemove', onMouseMove);\n var container = self.cropperEl.getBoundingClientRect();\n var mouseX = e.clientX - container.left;\n var mouseY = e.clientY - container.top;\n tmpBox = self.box;\n self.box = new Box(mouseX, mouseY, mouseX + 1, mouseY + 1);\n self.eventBus.dispatchEvent(new CustomEvent('handlestart', {\n detail: { handle: self.handles[SOUTHEAST_HANDLE_IDX] }\n }));\n }\n function onMouseMove(e) {\n e.stopPropagation();\n self.eventBus.dispatchEvent(new CustomEvent('handlemove', {\n detail: { mouseX: e.clientX, mouseY: e.clientY }\n }));\n }\n function onMouseUp(e) {\n e.stopPropagation();\n document.removeEventListener('mouseup', onMouseUp);\n document.removeEventListener('mousemove', onMouseMove);\n if (self.box.width() === 1 && self.box.height() === 1) {\n self.box = tmpBox;\n return;\n }\n self.eventBus.dispatchEvent(new CustomEvent('handleend', {\n detail: { mouseX: e.clientX, mouseY: e.clientY }\n }));\n }\n }\n }, {\n key: 'onHandleMoveStart',\n value: function onHandleMoveStart(e) {\n var handle = e.detail.handle;\n var originPoint = [1 - handle.position[0], 1 - handle.position[1]];\n var _box$getAbsolutePoint = this.box.getAbsolutePoint(originPoint),\n _box$getAbsolutePoint2 = slicedToArray(_box$getAbsolutePoint, 2),\n originX = _box$getAbsolutePoint2[0],\n originY = _box$getAbsolutePoint2[1];\n this.activeHandle = { handle: handle, originPoint: originPoint, originX: originX, originY: originY };\n if (this.options.onCropStart !== null) {\n this.options.onCropStart(this.getValue());\n }\n }\n }, {\n key: 'onHandleMoveMoving',\n value: function onHandleMoveMoving(e) {\n var _e$detail = e.detail,\n mouseX = _e$detail.mouseX,\n mouseY = _e$detail.mouseY;\n var container = this.cropperEl.getBoundingClientRect();\n mouseX = mouseX - container.left;\n mouseY = mouseY - container.top;\n if (mouseX < 0) {\n mouseX = 0;\n } else if (mouseX > container.width) {\n mouseX = container.width;\n }\n if (mouseY < 0) {\n mouseY = 0;\n } else if (mouseY > container.height) {\n mouseY = container.height;\n }\n var origin = this.activeHandle.originPoint.slice();\n var originX = this.activeHandle.originX;\n var originY = this.activeHandle.originY;\n var handle = this.activeHandle.handle;\n var TOP_MOVABLE = handle.constraints[0] === 1;\n var RIGHT_MOVABLE = handle.constraints[1] === 1;\n var BOTTOM_MOVABLE = handle.constraints[2] === 1;\n var LEFT_MOVABLE = handle.constraints[3] === 1;\n var MULTI_AXIS = (LEFT_MOVABLE || RIGHT_MOVABLE) && (TOP_MOVABLE || BOTTOM_MOVABLE);\n var x1 = LEFT_MOVABLE || RIGHT_MOVABLE ? originX : this.box.x1;\n var x2 = LEFT_MOVABLE || RIGHT_MOVABLE ? originX : this.box.x2;\n var y1 = TOP_MOVABLE || BOTTOM_MOVABLE ? originY : this.box.y1;\n var y2 = TOP_MOVABLE || BOTTOM_MOVABLE ? originY : this.box.y2;\n x1 = LEFT_MOVABLE ? mouseX : x1;\n x2 = RIGHT_MOVABLE ? mouseX : x2;\n y1 = TOP_MOVABLE ? mouseY : y1;\n y2 = BOTTOM_MOVABLE ? mouseY : y2;\n var isFlippedX = false,\n isFlippedY = false;\n if (LEFT_MOVABLE || RIGHT_MOVABLE) {\n isFlippedX = LEFT_MOVABLE ? mouseX > originX : mouseX < originX;\n }\n if (TOP_MOVABLE || BOTTOM_MOVABLE) {\n isFlippedY = TOP_MOVABLE ? mouseY > originY : mouseY < originY;\n }\n if (isFlippedX) {\n var tmp = x1;x1 = x2;x2 = tmp;\n origin[0] = 1 - origin[0];\n }\n if (isFlippedY) {\n var _tmp = y1;y1 = y2;y2 = _tmp;\n origin[1] = 1 - origin[1];\n }\n var box = new Box(x1, y1, x2, y2);\n if (this.options.aspectRatio) {\n var ratio = this.options.aspectRatio;\n var isVerticalMovement = false;\n if (MULTI_AXIS) {\n isVerticalMovement = mouseY > box.y1 + ratio * box.width() || mouseY < box.y2 - ratio * box.width();\n } else if (TOP_MOVABLE || BOTTOM_MOVABLE) {\n isVerticalMovement = true;\n }\n var ratioMode = isVerticalMovement ? 'width' : 'height';\n box.constrainToRatio(ratio, origin, ratioMode);\n }\n var min = this.options.minSize;\n var max = this.options.maxSize;\n box.constrainToSize(max.width, max.height, min.width, min.height, origin, this.options.aspectRatio);\n var parentWidth = this.cropperEl.offsetWidth;\n var parentHeight = this.cropperEl.offsetHeight;\n box.constrainToBoundary(parentWidth, parentHeight, origin);\n this.box = box;\n this.redraw();\n if (this.options.onCropMove !== null) {\n this.options.onCropMove(this.getValue());\n }\n }\n }, {\n key: 'onHandleMoveEnd',\n value: function onHandleMoveEnd(e) {\n if (this.options.onCropEnd !== null) {\n this.options.onCropEnd(this.getValue());\n }\n }\n }, {\n key: 'onRegionMoveStart',\n value: function onRegionMoveStart(e) {\n var _e$detail2 = e.detail,\n mouseX = _e$detail2.mouseX,\n mouseY = _e$detail2.mouseY;\n var container = this.cropperEl.getBoundingClientRect();\n mouseX = mouseX - container.left;\n mouseY = mouseY - container.top;\n this.currentMove = {\n offsetX: mouseX - this.box.x1,\n offsetY: mouseY - this.box.y1\n };\n if (this.options.onCropStart !== null) {\n this.options.onCropStart(this.getValue());\n }\n }\n }, {\n key: 'onRegionMoveMoving',\n value: function onRegionMoveMoving(e) {\n var _e$detail3 = e.detail,\n mouseX = _e$detail3.mouseX,\n mouseY = _e$detail3.mouseY;\n var _currentMove = this.currentMove,\n offsetX = _currentMove.offsetX,\n offsetY = _currentMove.offsetY;\n var container = this.cropperEl.getBoundingClientRect();\n mouseX = mouseX - container.left;\n mouseY = mouseY - container.top;\n this.box.move(mouseX - offsetX, mouseY - offsetY);\n if (this.box.x1 < 0) {\n this.box.move(0, null);\n }\n if (this.box.x2 > container.width) {\n this.box.move(container.width - this.box.width(), null);\n }\n if (this.box.y1 < 0) {\n this.box.move(null, 0);\n }\n if (this.box.y2 > container.height) {\n this.box.move(null, container.height - this.box.height());\n }\n this.redraw();\n if (this.options.onCropMove !== null) {\n this.options.onCropMove(this.getValue());\n }\n }\n }, {\n key: 'onRegionMoveEnd',\n value: function onRegionMoveEnd(e) {\n if (this.options.onCropEnd !== null) {\n this.options.onCropEnd(this.getValue());\n }\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n if (mode === null) {\n mode = this.options.returnMode;\n }\n if (mode == 'real') {\n var actualWidth = this.imageEl.naturalWidth;\n var actualHeight = this.imageEl.naturalHeight;\n var _imageEl$getBoundingC = this.imageEl.getBoundingClientRect(),\n elementWidth = _imageEl$getBoundingC.width,\n elementHeight = _imageEl$getBoundingC.height;\n var factorX = actualWidth / elementWidth;\n var factorY = actualHeight / elementHeight;\n return {\n x: Math.round(this.box.x1 * factorX),\n y: Math.round(this.box.y1 * factorY),\n width: Math.round(this.box.width() * factorX),\n height: Math.round(this.box.height() * factorY)\n };\n } else if (mode == 'ratio') {\n var _imageEl$getBoundingC2 = this.imageEl.getBoundingClientRect(),\n _elementWidth = _imageEl$getBoundingC2.width,\n _elementHeight = _imageEl$getBoundingC2.height;\n return {\n x: round(this.box.x1 / _elementWidth, 3),\n y: round(this.box.y1 / _elementHeight, 3),\n width: round(this.box.width() / _elementWidth, 3),\n height: round(this.box.height() / _elementHeight, 3)\n };\n } else if (mode == 'raw') {\n return {\n x: Math.round(this.box.x1),\n y: Math.round(this.box.y1),\n width: Math.round(this.box.width()),\n height: Math.round(this.box.height())\n };\n }\n }\n }], [{\n key: 'parseOptions',\n value: function parseOptions(opts) {\n var defaults$$1 = {\n aspectRatio: null,\n maxSize: { width: null, height: null },\n minSize: { width: null, height: null },\n startSize: { width: 100, height: 100, unit: '%' },\n returnMode: 'real',\n onInitialize: null,\n onCropStart: null,\n onCropMove: null,\n onCropEnd: null\n };\n var aspectRatio = null;\n if (opts.aspectRatio !== undefined) {\n if (typeof opts.aspectRatio === 'number') {\n aspectRatio = opts.aspectRatio;\n } else if (opts.aspectRatio instanceof Array) {\n aspectRatio = opts.aspectRatio[1] / opts.aspectRatio[0];\n }\n }\n var maxSize = null;\n if (opts.maxSize !== undefined && opts.maxSize !== null) {\n maxSize = {\n width: opts.maxSize[0] || null,\n height: opts.maxSize[1] || null,\n unit: opts.maxSize[2] || 'px'\n };\n }\n var minSize = null;\n if (opts.minSize !== undefined && opts.minSize !== null) {\n minSize = {\n width: opts.minSize[0] || null,\n height: opts.minSize[1] || null,\n unit: opts.minSize[2] || 'px'\n };\n }\n var startSize = null;\n if (opts.startSize !== undefined && opts.startSize !== null) {\n startSize = {\n width: opts.startSize[0] || null,\n height: opts.startSize[1] || null,\n unit: opts.startSize[2] || '%'\n };\n }\n var onInitialize = null;\n if (typeof opts.onInitialize === 'function') {\n onInitialize = opts.onInitialize;\n }\n var onCropStart = null;\n if (typeof opts.onCropStart === 'function') {\n onCropStart = opts.onCropStart;\n }\n var onCropEnd = null;\n if (typeof opts.onCropEnd === 'function') {\n onCropEnd = opts.onCropEnd;\n }\n var onCropMove = null;\n if (typeof opts.onUpdate === 'function') {\n console.warn('Croppr.js: `onUpdate` is deprecated and will be removed in the next major release. Please use `onCropMove` or `onCropEnd` instead.');\n onCropMove = opts.onUpdate;\n }\n if (typeof opts.onCropMove === 'function') {\n onCropMove = opts.onCropMove;\n }\n var returnMode = null;\n if (opts.returnMode !== undefined) {\n var s = opts.returnMode.toLowerCase();\n if (['real', 'ratio', 'raw'].indexOf(s) === -1) {\n throw \"Invalid return mode.\";\n }\n returnMode = s;\n }\n var convertToPixels = function convertToPixels(container) {\n var width = container.offsetWidth;\n var height = container.offsetHeight;\n var sizeKeys = ['maxSize', 'minSize', 'startSize'];\n for (var i = 0; i < sizeKeys.length; i++) {\n var key = sizeKeys[i];\n if (this[key] !== null) {\n if (this[key].unit == '%') {\n if (this[key].width !== null) {\n this[key].width = this[key].width / 100 * width;\n }\n if (this[key].height !== null) {\n this[key].height = this[key].height / 100 * height;\n }\n }\n delete this[key].unit;\n }\n }\n };\n var defaultValue = function defaultValue(v, d) {\n return v !== null ? v : d;\n };\n return {\n aspectRatio: defaultValue(aspectRatio, defaults$$1.aspectRatio),\n maxSize: defaultValue(maxSize, defaults$$1.maxSize),\n minSize: defaultValue(minSize, defaults$$1.minSize),\n startSize: defaultValue(startSize, defaults$$1.startSize),\n returnMode: defaultValue(returnMode, defaults$$1.returnMode),\n onInitialize: defaultValue(onInitialize, defaults$$1.onInitialize),\n onCropStart: defaultValue(onCropStart, defaults$$1.onCropStart),\n onCropMove: defaultValue(onCropMove, defaults$$1.onCropMove),\n onCropEnd: defaultValue(onCropEnd, defaults$$1.onCropEnd),\n convertToPixels: convertToPixels\n };\n }\n }]);\n return CropprCore;\n}();\nfunction round(value, decimals) {\n return Number(Math.round(value + 'e' + decimals) + 'e-' + decimals);\n}\n\nvar Croppr$1 = function (_CropprCore) {\n inherits(Croppr, _CropprCore);\n /**\n * @constructor\n * Calls the CropprCore's constructor.\n */\n function Croppr(element, options) {\n var _deferred = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n classCallCheck(this, Croppr);\n return possibleConstructorReturn(this, (Croppr.__proto__ || Object.getPrototypeOf(Croppr)).call(this, element, options, _deferred));\n }\n /**\n * Gets the value of the crop region.\n * @param {String} [mode] Which mode of calculation to use: 'real', 'ratio' or\n * 'raw'.\n */\n createClass(Croppr, [{\n key: 'getValue',\n value: function getValue(mode) {\n return get(Croppr.prototype.__proto__ || Object.getPrototypeOf(Croppr.prototype), 'getValue', this).call(this, mode);\n }\n /**\n * Changes the image src.\n * @param {String} src\n */\n }, {\n key: 'setImage',\n value: function setImage(src) {\n return get(Croppr.prototype.__proto__ || Object.getPrototypeOf(Croppr.prototype), 'setImage', this).call(this, src);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n return get(Croppr.prototype.__proto__ || Object.getPrototypeOf(Croppr.prototype), 'destroy', this).call(this);\n }\n /**\n * Moves the crop region to a specified coordinate.\n * @param {Number} x\n * @param {Number} y\n */\n }, {\n key: 'moveTo',\n value: function moveTo(x, y) {\n this.box.move(x, y);\n this.redraw();\n if (this.options.onCropEnd !== null) {\n this.options.onCropEnd(this.getValue());\n }\n return this;\n }\n /**\n * Resizes the crop region to a specified width and height.\n * @param {Number} width\n * @param {Number} height\n * @param {Array} origin The origin point to resize from.\n * Defaults to [0.5, 0.5] (center).\n */\n }, {\n key: 'resizeTo',\n value: function resizeTo(width, height) {\n var origin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [.5, .5];\n this.box.resize(width, height, origin);\n this.redraw();\n if (this.options.onCropEnd !== null) {\n this.options.onCropEnd(this.getValue());\n }\n return this;\n }\n /**\n * Scale the crop region by a factor.\n * @param {Number} factor\n * @param {Array} origin The origin point to resize from.\n * Defaults to [0.5, 0.5] (center).\n */\n }, {\n key: 'scaleBy',\n value: function scaleBy(factor) {\n var origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [.5, .5];\n this.box.scale(factor, origin);\n this.redraw();\n if (this.options.onCropEnd !== null) {\n this.options.onCropEnd(this.getValue());\n }\n return this;\n }\n }, {\n key: 'reset',\n value: function reset() {\n this.box = this.initializeBox(this.options);\n this.redraw();\n if (this.options.onCropEnd !== null) {\n this.options.onCropEnd(this.getValue());\n }\n return this;\n }\n }]);\n return Croppr;\n}(CropprCore);\n\nreturn Croppr$1;\n\n})));\n","/*!\n * jQuery JavaScript Library v3.6.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-03-02T17:08Z\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\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\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.6.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\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( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\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.6\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: 2021-02-16\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 && elem.namespaceURI,\n\t\tdocElem = elem && ( 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 = \"\" +\n\t\t\t\t\"\";\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 = \"\" +\n\t\t\t\t\"\";\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: ) 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 = \"\";\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 = \"\";\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\treturn 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 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// 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 primary Deferred\n\t\t\tprimary = 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\tprimary.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, primary.done( updateFunc( i ) ).resolve, primary.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 ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.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 ), primary.reject );\n\t\t}\n\n\t\treturn primary.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\t\tvalue :\n\t\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 = {};\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 = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces \";\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 or other required elements.\n\tthead: [ 1, \"\", \"
\" ],\n\tcol: [ 2, \"\", \"
\" ],\n\ttr: [ 2, \"\", \"
\" ],\n\ttd: [ 3, \"\", \"
\" ],\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, \"\" ];\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 rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\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\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\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 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\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\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\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && 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\twhich: true\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\t// Suppress native focus or blur as it's already being fired\n\t\t// in leverageNative.\n\t\t_default: function() {\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 = /\\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\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\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;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\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, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\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\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\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) + \"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\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\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\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\n\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\t\"\" :\n\t\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\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 = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ 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, parserErrorElem;\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\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\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} ).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} ).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\noriginAnchor.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\tjQuery( callbackContext ) :\n\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 but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\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( \"