{
  "version": 3,
  "sources": ["../../../../ui/node_modules/jquery/dist/jquery.js", "../../../../ui/node_modules/bootstrap/js/transition.js", "../../../../ui/node_modules/bootstrap/js/alert.js", "../../../../ui/node_modules/bootstrap/js/button.js", "../../../../ui/node_modules/bootstrap/js/carousel.js", "../../../../ui/node_modules/bootstrap/js/collapse.js", "../../../../ui/node_modules/bootstrap/js/dropdown.js", "../../../../ui/node_modules/bootstrap/js/modal.js", "../../../../ui/node_modules/bootstrap/js/tooltip.js", "../../../../ui/node_modules/bootstrap/js/popover.js", "../../../../ui/node_modules/bootstrap/js/scrollspy.js", "../../../../ui/node_modules/bootstrap/js/tab.js", "../../../../ui/node_modules/bootstrap/js/affix.js", "../../../../ui/src/events.ts", "../../../../ui/src/utils.ts", "../../../../ui/src/django.ts", "../../../../ui/src/navigation.ts", "../../../../ui/node_modules/itertools/src/utils.ts", "../../../../ui/node_modules/itertools/src/more-itertools.ts", "../../../../ui/node_modules/itertools/src/itertools.ts", "../../../../ui/node_modules/itertools/src/builtins.ts", "../../../../ui/node_modules/itertools/src/custom.ts", "../../../../ui/node_modules/lit-html/src/lit-html.ts", "../../../../ui/node_modules/lit-html/src/directive.ts", "../../../../ui/node_modules/lit-html/src/directives/unsafe-html.ts", "../../../../ui/src/components/SubscribeButton.ts", "../../../../ui/node_modules/axios/lib/helpers/bind.js", "../../../../ui/node_modules/axios/lib/utils.js", "../../../../ui/node_modules/axios/lib/helpers/parseHeaders.js", "../../../../ui/node_modules/axios/lib/helpers/sanitizeHeaderValue.js", "../../../../ui/node_modules/axios/lib/core/AxiosHeaders.js", "../../../../ui/node_modules/axios/lib/core/AxiosError.js", "../../../../ui/node_modules/axios/lib/helpers/null.js", "../../../../ui/node_modules/axios/lib/helpers/toFormData.js", "../../../../ui/node_modules/axios/lib/helpers/AxiosURLSearchParams.js", "../../../../ui/node_modules/axios/lib/helpers/buildURL.js", "../../../../ui/node_modules/axios/lib/core/InterceptorManager.js", "../../../../ui/node_modules/axios/lib/defaults/transitional.js", "../../../../ui/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js", "../../../../ui/node_modules/axios/lib/platform/browser/classes/FormData.js", "../../../../ui/node_modules/axios/lib/platform/browser/classes/Blob.js", "../../../../ui/node_modules/axios/lib/platform/browser/index.js", "../../../../ui/node_modules/axios/lib/platform/common/utils.js", "../../../../ui/node_modules/axios/lib/platform/index.js", "../../../../ui/node_modules/axios/lib/helpers/toURLEncodedForm.js", "../../../../ui/node_modules/axios/lib/helpers/formDataToJSON.js", "../../../../ui/node_modules/axios/lib/core/methodList.js", "../../../../ui/node_modules/axios/lib/defaults/index.js", "../../../../ui/node_modules/axios/lib/core/transformData.js", "../../../../ui/node_modules/axios/lib/cancel/isCancel.js", "../../../../ui/node_modules/axios/lib/cancel/CanceledError.js", "../../../../ui/node_modules/axios/lib/core/settle.js", "../../../../ui/node_modules/axios/lib/helpers/normalizeURLForProtocolCheck.js", "../../../../ui/node_modules/axios/lib/helpers/parseProtocol.js", "../../../../ui/node_modules/axios/lib/helpers/speedometer.js", "../../../../ui/node_modules/axios/lib/helpers/throttle.js", "../../../../ui/node_modules/axios/lib/helpers/progressEventReducer.js", "../../../../ui/node_modules/axios/lib/helpers/isURLSameOrigin.js", "../../../../ui/node_modules/axios/lib/helpers/cookies.js", "../../../../ui/node_modules/axios/lib/helpers/isAbsoluteURL.js", "../../../../ui/node_modules/axios/lib/helpers/combineURLs.js", "../../../../ui/node_modules/axios/lib/core/buildFullPath.js", "../../../../ui/node_modules/axios/lib/core/mergeConfig.js", "../../../../ui/node_modules/axios/lib/core/setFormDataHeaders.js", "../../../../ui/node_modules/axios/lib/helpers/resolveConfig.js", "../../../../ui/node_modules/axios/lib/adapters/xhr.js", "../../../../ui/node_modules/axios/lib/helpers/composeSignals.js", "../../../../ui/node_modules/axios/lib/helpers/trackStream.js", "../../../../ui/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js", "../../../../ui/node_modules/axios/lib/env/data.js", "../../../../ui/node_modules/axios/lib/adapters/fetch.js", "../../../../ui/node_modules/axios/lib/adapters/adapters.js", "../../../../ui/node_modules/axios/lib/core/dispatchRequest.js", "../../../../ui/node_modules/axios/lib/helpers/validator.js", "../../../../ui/node_modules/axios/lib/core/Axios.js", "../../../../ui/node_modules/axios/lib/cancel/CancelToken.js", "../../../../ui/node_modules/axios/lib/helpers/spread.js", "../../../../ui/node_modules/axios/lib/helpers/isAxiosError.js", "../../../../ui/node_modules/axios/lib/helpers/HttpStatusCode.js", "../../../../ui/node_modules/axios/lib/axios.js", "../../../../ui/node_modules/axios/index.js", "../../../../ui/src/api.ts", "../../../../ui/src/environment.ts", "../../../../ui/src/socket/Socket.ts", "../../../../ui/src/socket/types.ts", "../../../../ui/src/socket/index.ts", "../../../../ui/src/notifications.ts", "../../../../ui/src/Popup.ts", "../../../../ui/src/ServiceWorker.ts", "../../../../ui/src/User.ts", "../../../../ui/src/components/ApiDelete.ts", "../../../../ui/src/formErrors.ts", "../../../../ui/src/components/utils.ts", "../../../../ui/src/components/ApiPost.ts", "../../../../ui/src/components/ContentFilterButton.ts", "../../../../ui/src/components/ContextMenu.ts", "../../../../ui/src/imageCrop.ts", "../../../../ui/src/components/CropImage.ts", "../../../../ui/node_modules/lit-html/src/directive-helpers.ts", "../../../../ui/node_modules/lit-html/src/directives/repeat.ts", "../../../../ui/src/components/FeedList.ts", "../../../../ui/src/components/DiscussionList.ts", "../../../../ui/src/components/DiscussPostAs.ts", "../../../../ui/src/components/FormSubmitOnce.ts", "../../../../ui/src/components/DynamicChoices.ts", "../../../../ui/src/components/DynamicForm.ts", "../../../../ui/src/components/JsonForm.ts", "../../../../ui/src/components/Menu.ts", "../../../../ui/src/components/NewsList.ts", "../../../../ui/src/components/PopupLink.ts", "../../../../ui/src/components/RadioButtons.ts", "../../../../ui/src/components/ReadMarker.ts", "../../../../ui/src/components/ResponsiveEmbed.ts", "../../../../ui/src/components/SiteSearch.ts", "../../../../ui/src/components/Tabs.ts", "../../../../ui/src/components/ToggleButton.ts", "../../../../ui/src/components/Toggler.ts", "../../../../ui/src/components/index.ts", "../../../../ui/src/globals.ts", "../../../../ui/src/socket/defineChannel.ts", "../../../../ui/node_modules/bootstrap/dist/js/npm.js", "../../../../ui/src/index.ts"],
  "sourcesContent": ["/*!\n * jQuery JavaScript Library v3.5.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2020-05-04T22:49Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.5.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( _i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.5\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2020-03-14\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px\";\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = parseInt( trStyle.height ) > 3;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = (\n\t\t\t\t\tdataPriv.get( cur, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script\n\t\t\tif ( !isSuccess && jQuery.inArray( \"script\", s.dataTypes ) > -1 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tif ( typeof props.top === \"number\" ) {\n\t\t\t\tprops.top += \"px\";\n\t\t\t}\n\t\t\tif ( typeof props.left === \"number\" ) {\n\t\t\t\tprops.left += \"px\";\n\t\t\t}\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t} );\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n", "/* ========================================================================\n * Bootstrap: transition.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // https://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: alert.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.4.1'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    selector    = selector === '#' ? [] : selector\n    var $parent = $(document).find(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: button.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.4.1'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: carousel.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.4.1'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      if (typeof $next === 'object' && $next.length) {\n        $next[0].offsetWidth // force reflow\n      }\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    if (href) {\n      href = href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n    }\n\n    var target  = $this.attr('data-target') || href\n    var $target = $(document).find(target)\n\n    if (!$target.hasClass('carousel')) return\n\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: collapse.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.4.1'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(document).find(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(document).find(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: dropdown.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.4.1'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector !== '#' ? $(document).find(selector) : null\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: modal.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#modals\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options = options\n    this.$body = $(document.body)\n    this.$element = $(element)\n    this.$dialog = this.$element.find('.modal-dialog')\n    this.$backdrop = null\n    this.isShown = null\n    this.originalBodyPad = null\n    this.scrollbarWidth = 0\n    this.ignoreBackdropClick = false\n    this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION = '3.4.1'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n          this.$element[0] !== e.target &&\n          !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    var scrollbarWidth = this.scrollbarWidth\n    if (this.bodyIsOverflowing) {\n      this.$body.css('padding-right', bodyPad + scrollbarWidth)\n      $(this.fixedContent).each(function (index, element) {\n        var actualPadding = element.style.paddingRight\n        var calculatedPadding = $(element).css('padding-right')\n        $(element)\n          .data('padding-right', actualPadding)\n          .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')\n      })\n    }\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n    $(this.fixedContent).each(function (index, element) {\n      var padding = $(element).data('padding-right')\n      $(element).removeData('padding-right')\n      element.style.paddingRight = padding ? padding : ''\n    })\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this = $(this)\n      var data = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this = $(this)\n    var href = $this.attr('href')\n    var target = $this.attr('data-target') ||\n      (href && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n\n    var $target = $(document).find(target)\n    var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: tooltip.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n+function ($) {\n  'use strict';\n\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\n  var uriAttrs = [\n    'background',\n    'cite',\n    'href',\n    'itemtype',\n    'longdesc',\n    'poster',\n    'src',\n    'xlink:href'\n  ]\n\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  }\n\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase()\n\n    if ($.inArray(attrName, allowedAttributeList) !== -1) {\n      if ($.inArray(attrName, uriAttrs) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n      }\n\n      return true\n    }\n\n    var regExp = $(allowedAttributeList).filter(function (index, value) {\n      return value instanceof RegExp\n    })\n\n    // Check if a regular expression validates the attribute.\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml)\n    }\n\n    // IE 8 and below don't support createHTMLDocument\n    if (!document.implementation || !document.implementation.createHTMLDocument) {\n      return unsafeHtml\n    }\n\n    var createdDocument = document.implementation.createHTMLDocument('sanitization')\n    createdDocument.body.innerHTML = unsafeHtml\n\n    var whitelistKeys = $.map(whiteList, function (el, i) { return i })\n    var elements = $(createdDocument.body).find('*')\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var el = elements[i]\n      var elName = el.nodeName.toLowerCase()\n\n      if ($.inArray(elName, whitelistKeys) === -1) {\n        el.parentNode.removeChild(el)\n\n        continue\n      }\n\n      var attributeList = $.map(el.attributes, function (el) { return el })\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n      for (var j = 0, len2 = attributeList.length; j < len2; j++) {\n        if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {\n          el.removeAttribute(attributeList[j].nodeName)\n        }\n      }\n    }\n\n    return createdDocument.body.innerHTML\n  }\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.4.1'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    },\n    sanitize : true,\n    sanitizeFn : null,\n    whiteList : DefaultWhitelist\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    var dataAttributes = this.$element.data()\n\n    for (var dataAttr in dataAttributes) {\n      if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n        delete dataAttributes[dataAttr]\n      }\n    }\n\n    options = $.extend({}, this.getDefaults(), dataAttributes, options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    if (options.sanitize) {\n      options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    if (this.options.html) {\n      if (this.options.sanitize) {\n        title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)\n      }\n\n      $tip.find('.tooltip-inner').html(title)\n    } else {\n      $tip.find('.tooltip-inner').text(title)\n    }\n\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n  Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {\n    return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)\n  }\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: popover.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.4.1'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    if (this.options.html) {\n      var typeContent = typeof content\n\n      if (this.options.sanitize) {\n        title = this.sanitizeHtml(title)\n\n        if (typeContent === 'string') {\n          content = this.sanitizeHtml(content)\n        }\n      }\n\n      $tip.find('.popover-title').html(title)\n      $tip.find('.popover-content').children().detach().end()[\n        typeContent === 'string' ? 'html' : 'append'\n      ](content)\n    } else {\n      $tip.find('.popover-title').text(title)\n      $tip.find('.popover-content').children().detach().end().text(content)\n    }\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n        o.content.call($e[0]) :\n        o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: scrollspy.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.4.1'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: tab.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.4.1'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(document).find(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n        .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n          .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n", "/* ========================================================================\n * Bootstrap: affix.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#affix\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)\n\n    this.$target = target\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.4.1'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n", "type EventListener<T> = (eventData: T) => void\n\nfunction EventBus<T = void>() {\n  const listeners = new Set<EventListener<T>>()\n\n  return {\n    on(listener: EventListener<T>) {\n      listeners.add(listener)\n      return {\n        unregister() {\n          listeners.delete(listener)\n        }\n      }\n    },\n    emit(value: T) {\n      for (const listener of listeners) listener(value)\n    }\n  }\n}\n\nexport type EventBus<T = void> = ReturnType<typeof EventBus<T>>\n\nexport const contentInsertedEvent = EventBus<HTMLElement>()\n/** A content filter changed: the selector of the list it filters. */\nexport const contentFilterChangedEvent = EventBus<string>()\nexport const intervalUpdateEvent = EventBus()\nexport const namespaceEvent = EventBus<string>()\nexport const pageUpdateEvent = EventBus()\nexport const popupCloseEvent = EventBus()\nexport const goToPageEvent = EventBus<{\n  href: string\n  currentTarget: HTMLElement\n}>()\nexport const userLoadedEvent = EventBus()\n", "export function getCookie(name: string) {\n  let cookieValue = null\n  if (document.cookie && document.cookie !== '') {\n    const cookies = document.cookie.split(';')\n    for (let i = 0; i < cookies.length; i++) {\n      const cookie = cookies[i].trim()\n      // Does this cookie string begin with the name we want?\n      if (cookie.substring(0, name.length + 1) === name + '=') {\n        cookieValue = decodeURIComponent(cookie.substring(name.length + 1))\n        break\n      }\n    }\n  }\n  return cookieValue\n}\n\nexport const isMobile = {\n  Android() {\n    return navigator.userAgent.match(/Android/i)\n  },\n  BlackBerry() {\n    return navigator.userAgent.match(/BlackBerry/i)\n  },\n  iOS() {\n    return navigator.userAgent.match(/iPhone|iPad|iPod/i)\n  },\n  Opera() {\n    return navigator.userAgent.match(/Opera Mini/i)\n  },\n  Windows() {\n    return navigator.userAgent.match(/IEMobile/i)\n  },\n  any() {\n    return (\n      isMobile.Android() ||\n      isMobile.BlackBerry() ||\n      isMobile.iOS() ||\n      isMobile.Opera() ||\n      isMobile.Windows()\n    )\n  }\n}\n\nexport function getNamespace(source: HTMLHtmlElement | Document) {\n  const elem = source.querySelector('meta[name=\"namespace\"]')\n  return elem?.getAttribute('content') ?? ''\n}\n\n/**\n * Build the body for an API write from a server-rendered Django form.\n *\n * FormData rather than a plain object, because file inputs do not survive JSON,\n * duplicate keys - multi-selects, many-to-many - must not be flattened to the\n * last one, and DRF only applies its Django-like \"\" -> null and\n * missing-checkbox -> false coercion to bodies that came in as HTML form input.\n *\n * The CSRF token is dropped: axios sends it as the X-CSRFTOKEN header instead,\n * which is what SessionAuthentication checks.\n *\n * Everything else goes over untouched, ClearableFileInput's \"<field>-clear\"\n * checkbox included - engagera.mp.rest_api.fields.ClearableFileField reads it\n * server side, so the form and the API agree without a translation step here.\n */\nexport function getFormData(form: HTMLFormElement) {\n  const data = new FormData(form)\n  data.delete('csrfmiddlewaretoken')\n  for (const [key, value] of Array.from(data.entries())) {\n    // An untouched <input type=\"file\"> posts an empty File. Django drops it, so\n    // do the same rather than send a zero byte upload.\n    if (value instanceof File && !value.name) data.delete(key)\n  }\n  return data\n}\n\n/**\n * Get DOM tree from html snippet\n */\nexport function htmlStringToDom(html: string) {\n  const dom = document.createElement('html')\n  dom.innerHTML = html\n  return dom\n}\n\nexport function isInternalLink(href: string) {\n  return href[0] === '/' || href.startsWith(location.origin)\n}\n\nexport function getDocTitle(dom: HTMLHtmlElement | Document) {\n  return dom.querySelector('title')?.text ?? ''\n}\n\nexport function isHTMLElement(\n  elem: Element | EventTarget\n): elem is HTMLElement {\n  return 'dataset' in elem\n}\n", "import { contentInsertedEvent } from './events'\nimport { getCookie } from './utils'\nimport $ from 'jquery'\n\n// Django setup, needed to enable $.post() stuffz\nconst csrftoken = getCookie('csrftoken')\nfunction csrfSafeMethod(method: string) {\n  // these HTTP methods do not require CSRF protection\n  return /^(GET|HEAD|OPTIONS|TRACE)$/.test(method)\n}\n\nfunction sameOrigin(url: string) {\n  // test that a given url is a same-origin URL\n  // url could be relative or scheme relative or absolute\n  const host = location.host // host + port\n  const protocol = document.location.protocol\n  const srOrigin = '//' + host\n  const origin = protocol + srOrigin\n  // Allow absolute or scheme relative URLs to same origin\n  return (\n    url === origin ||\n    url.slice(0, origin.length + 1) === origin + '/' ||\n    url === srOrigin ||\n    url.slice(0, srOrigin.length + 1) === srOrigin + '/' ||\n    // or any other URL that isn't scheme relative or absolute i.e relative.\n    !/^(\\/\\/|http:|https:).*/.test(url)\n  )\n}\n\n$.ajaxSetup({\n  beforeSend(xhr, settings) {\n    if (!csrftoken || !settings.type || !settings.url) return\n    if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {\n      // Send the token to same-origin, relative URLs only.\n      // Send the token only if the method warrants CSRF protection\n      // Using the CSRFToken value acquired earlier\n      xhr.setRequestHeader('X-CSRFToken', csrftoken)\n    }\n  }\n})\n\n// CkEditor5 dynamic loading of content relies on this being here.\nwindow.django = { jQuery: $ }\ncontentInsertedEvent.on((elem) => {\n  if (!elem.querySelector('.django_ckeditor_5')) return\n  // Form added\n  document.dispatchEvent(new Event('formset:added'))\n})\n// End of Django setup\n\n// START ckeditor strip style attributes hack\nconst STRIP_EDITOR_IDS = ['id_full_text', 'id_text_body', 'id_presentation']\n\n// CKEditor stuff, excempt from type checking\nfunction stripStyle(element: any) {\n  if (typeof element._styles === 'object') {\n    element._styles._styles = {}\n  }\n  if ('_children' in element) {\n    element._children.map(stripStyle)\n  }\n}\n\n// CKEditor stuff, excempt from type checking\nfunction editorCallback(editor: any) {\n  editor.plugins\n    .get('ClipboardPipeline')\n    .on('inputTransformation', (e: any, data: any) => {\n      stripStyle(data.content)\n    })\n}\n\naddEventListener('load', () => {\n  for (const id of STRIP_EDITOR_IDS) {\n    if (id in window.editors) editorCallback(window.editors[id])\n    window.ckeditorRegisterCallback(id, editorCallback)\n  }\n})\n// END ckeditor strip style attributes hack\n", "import $ from 'jquery'\nimport notifications from './notifications'\nimport {\n  getDocTitle,\n  getNamespace,\n  htmlStringToDom,\n  isHTMLElement,\n  isInternalLink\n} from './utils'\nimport { api } from './api'\nimport {\n  contentInsertedEvent,\n  goToPageEvent,\n  namespaceEvent,\n  pageUpdateEvent\n} from './events'\n\nconst DEFAULT_TARGET = '#main-content'\nconst HASH_RE = /^#[-\\w_+!*()]+$/\nconst BEFORE_NAVIGATE_TIMEOUT = 2000\n\nconst beforeNavigateHooks = new Set<() => unknown>()\n\n/**\n * Run hook once, before the next ajax navigation fetches its page. Returned\n * promises are awaited (up to a timeout), so requests that affect the next\n * page can finish first. Registering the same function again is a no-op.\n */\nexport function beforeNextNavigate(hook: () => unknown) {\n  beforeNavigateHooks.add(hook)\n}\n\nasync function runBeforeNavigate() {\n  const hooks = [...beforeNavigateHooks]\n  beforeNavigateHooks.clear()\n  if (!hooks.length) return\n  // Navigation must always proceed, whether hooks fail or hang.\n  await Promise.race([\n    Promise.all(\n      hooks.map(async (hook) => {\n        try {\n          await hook()\n        } catch {\n          // Ignored\n        }\n      })\n    ),\n    new Promise((resolve) => setTimeout(resolve, BEFORE_NAVIGATE_TIMEOUT))\n  ])\n}\n\ncontentInsertedEvent.on((element) => {\n  const hash = window.location.hash\n  if (!hash || !HASH_RE.test(hash)) return\n  const el = (element || document).querySelector(hash)\n  el?.scrollIntoView()\n})\n\nfunction displayNamespace(source: HTMLHtmlElement | Document) {\n  const namespace = getNamespace(source)\n  document.querySelectorAll<HTMLElement>('[data-namespace]').forEach((elem) => {\n    if (elem.dataset.namespace === namespace) elem.classList.add('active')\n    else elem.classList.remove('active')\n  })\n  namespaceEvent.emit(namespace)\n}\n\nasync function handlePopState(event: PopStateEvent) {\n  if (!event.state) return\n  const partial = 'main-content'\n  await runBeforeNavigate()\n  try {\n    const { data } = await api.get(event.state.href, {\n      headers: { 'X-Partial': partial }\n    })\n    updateContentFromData(data, '#' + partial)\n    pageUpdateEvent.emit()\n    displayNamespace(htmlStringToDom(data))\n  } catch (e) {\n    location.assign(event.state.href)\n  }\n}\n\n/**\n * Copy inner HTML from source to target, and make sure any script tags are executed.\n */\nfunction insertWithScriptTags(source: HTMLElement, target: HTMLElement) {\n  target.innerHTML = source.innerHTML\n  contentInsertedEvent.emit(target)\n  for (const scriptEl of source.querySelectorAll('script')) {\n    const newScript = document.createElement('script')\n    newScript.type = scriptEl.type\n    if (scriptEl.src) newScript.src = scriptEl.src\n    else if (scriptEl.textContent) newScript.textContent = scriptEl.textContent\n    document.body.appendChild(newScript)\n  }\n}\n\nfunction updateFromResponse(targetId: string, html: string) {\n  const content = htmlStringToDom(html).querySelector<HTMLElement>(targetId)\n  if (!content) throw new Error(`${targetId} not found in html data`)\n  const target = document.querySelector<HTMLElement>(targetId)\n  if (!target) throw new Error(`${targetId} not found in document`)\n  insertWithScriptTags(content, target)\n  pageUpdateEvent.emit()\n}\n\nexport async function updateTarget(targetId: string) {\n  if (!targetId) return\n  const target = document.querySelector<HTMLElement>(targetId)\n  if (!target) return\n  const endpoint = target.dataset.updateApi\n  if (!endpoint) return\n  const { data } = await api.get(endpoint, {\n    headers: { 'X-Partial': 1 }\n  })\n  updateFromResponse(targetId, data)\n}\n\nfunction getContentBySelector(html: HTMLHtmlElement, ...selectors: string[]) {\n  for (const selector of selectors) {\n    // Depending on browser, use filter or find\n    const contentEl = html.querySelector<HTMLElement>(selector)\n    if (contentEl) return contentEl\n  }\n}\n\n/**\n * Update dom content from data\n */\nfunction updateContentFromData(\n  html: HTMLHtmlElement,\n  targetId = DEFAULT_TARGET,\n  setTitle = true\n) {\n  const targetEl = document.querySelector<HTMLElement>(targetId)\n  if (!targetEl) throw new Error(`${targetEl} not found in document`)\n  // get content from either targetId selector or default #content\n  const content = getContentBySelector(html, targetId, '#content')\n  if (content) {\n    insertWithScriptTags(content, targetEl)\n  } else if (setTitle && targetId !== DEFAULT_TARGET) {\n    // Fall back to default targetId\n    updateContentFromData(html)\n  }\n  if (!setTitle) return\n  notifications.setTitle(getDocTitle(html))\n}\n\nfunction openInTab(href: string) {\n  window.open(href, '_blank')\n  window.focus()\n}\n\nfunction openInMenu(menu: HTMLUListElement, menuItem: HTMLLIElement) {\n  menu.querySelectorAll('li:has(ul)').forEach((subMenu) => {\n    if (subMenu.contains(menuItem)) {\n      subMenu.classList.add('open')\n    } else subMenu.classList.remove('open')\n  })\n}\n\n/**\n * Check if link should unfold a menu\n */\nfunction unfoldInMenu(targetId: string | undefined, href: string) {\n  if (!targetId) return\n  const menu = document.querySelector<HTMLUListElement>(targetId)\n  if (!menu) throw new Error(`${targetId} not found in document`)\n  openInMenu(menu, menu.querySelector(`li:has(a[href=\"${href}\"])`)!)\n}\n\nfunction knowledgeNavHandler(currentTarget: Element) {\n  openInMenu(\n    document.querySelector('#knowledge-navigation')!,\n    currentTarget.closest('li')!\n  )\n}\n\n/**\n * Do not handle links with these (parent) classes with ajax calls.\n */\nconst NON_AJAX = {\n  classes: ['load-full', 'popup-link', 'pagination'],\n  containerSelectors: ['.cke-reset', '.cke-reset-all']\n} as const\n\n/**\n * Handle and insert partial response into DOM\n */\nfunction insertContent(currentTarget: HTMLElement, html: string, href: string) {\n  const dom = htmlStringToDom(html)\n  const container = currentTarget.closest<HTMLElement>('[data-ajax-target]')\n  const { ajaxTarget, loadExtraTarget } = container?.dataset ?? {\n    ajaxTarget: DEFAULT_TARGET\n  }\n  window.scrollTo(0, 0) // Reset scroll\n  history.pushState(\n    {\n      target_id: ajaxTarget,\n      href\n    },\n    getDocTitle(dom),\n    href\n  )\n  updateContentFromData(dom, ajaxTarget)\n  if (loadExtraTarget) updateContentFromData(dom, loadExtraTarget, false)\n  container?.classList.add('open') // Mark menus, etc, as open\n  document\n    .querySelectorAll<HTMLElement>('.menu-toggler.active')\n    .forEach((menu) => menu.click())\n  pageUpdateEvent.emit()\n  displayNamespace(dom)\n}\n\n/**\n * Go to this URL, using ajax get\n */\nasync function goToPage(href: string, currentTarget: HTMLElement) {\n  const ajaxTarget =\n    currentTarget.closest<HTMLElement>('[data-ajax-target]')?.dataset\n      .ajaxTarget ?? DEFAULT_TARGET\n  const target = document.querySelector(ajaxTarget)\n  if (!target) throw new Error(`${ajaxTarget} not found in document`)\n  target.classList.add('ajax-loading')\n\n  const partial = ajaxTarget.slice(1)\n  await runBeforeNavigate()\n  try {\n    const { data } = await api.get(href, {\n      headers: { 'X-Partial': partial }\n    })\n    insertContent(currentTarget, data, href)\n  } catch (e) {\n    location.assign(href)\n  }\n\n  target.classList.remove('ajax-loading')\n}\ngoToPageEvent.on(({ href, currentTarget }) => {\n  goToPage(href, currentTarget)\n})\n\n/**\n * Handle internal links\n */\nasync function internalClickHandler(\n  currentTarget: Element,\n  event: PointerEvent\n) {\n  const href = currentTarget.getAttribute('href')\n  if (!isHTMLElement(currentTarget))\n    throw new Error('target is not an HTMLElement')\n  if (!href) throw new Error('No href found in target')\n  // Default browser link handling in these cases\n  if (\n    !window.history ||\n    href.startsWith('#') ||\n    NON_AJAX.classes.some((cls) => currentTarget.classList.contains(cls)) ||\n    !!currentTarget.dataset.apiToggle ||\n    NON_AJAX.containerSelectors.some(\n      (selector) => !!currentTarget.closest(selector)\n    )\n  )\n    return\n  // If we get here, link will be handled internally\n  event.preventDefault()\n  if (!isInternalLink(href)) return openInTab(href)\n  unfoldInMenu(currentTarget.dataset.unfoldInMenu, href)\n\n  goToPage(href, currentTarget)\n}\n\nfunction closeClickHandler(currentTarget: Element, event: PointerEvent) {\n  event.preventDefault()\n  if (!isHTMLElement(currentTarget))\n    throw new Error('target is not an HTMLElement')\n  const target = document.querySelector(currentTarget.dataset.closeElement!)\n  target?.classList.remove('open')\n}\n\nfunction addClickEvent(\n  selector: string,\n  callback: (target: Element, event: PointerEvent) => void\n) {\n  document.addEventListener('click', (event) => {\n    const currentTarget = (event.target as HTMLElement)?.closest(selector)\n    currentTarget && callback(currentTarget, event)\n  })\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  addClickEvent('a[href]', internalClickHandler)\n  addClickEvent('a[data-close-element]', closeClickHandler)\n  addClickEvent('#knowledge-nav a', knowledgeNavHandler)\n  displayNamespace(document)\n  if (window.history) {\n    window.onpopstate = handlePopState\n    history.replaceState(\n      {\n        target_id: 'main-content',\n        href: window.location.pathname\n      },\n      getDocTitle(document)\n    )\n  }\n  // Prevent dropdown from being closed on collapse click\n  // @ts-ignore\n  $('.dropdown').on('click', '[data-toggle=\"collapse\"]', (evt) => {\n    evt.preventDefault()\n    evt.stopPropagation()\n    // @ts-ignore\n    $(evt.currentTarget).trigger('blur')\n    // @ts-ignore\n    $($(evt.currentTarget).data('target')).collapse('toggle')\n  })\n})\n", "import type { Primitive } from \"./types\";\n\ntype CmpFn<T> = (a: T, b: T) => number;\n\nexport function keyToCmp<T>(keyFn: (item: T) => Primitive): CmpFn<T> {\n  return (a: T, b: T) => {\n    const ka = keyFn(a);\n    const kb = keyFn(b);\n    // istanbul ignore else -- @preserve\n    if (typeof ka === \"boolean\" && typeof kb === \"boolean\") {\n      return ka === kb ? 0 : !ka && kb ? -1 : 1;\n    } else if (typeof ka === \"number\" && typeof kb === \"number\") {\n      return ka - kb;\n    } else if (typeof ka === \"string\" && typeof kb === \"string\") {\n      return ka === kb ? 0 : ka < kb ? -1 : 1;\n    } else {\n      return -1;\n    }\n  };\n}\n\nexport function identityPredicate(x: unknown): boolean {\n  return !!x;\n}\n\nexport function numberIdentity(x: unknown): number {\n  // istanbul ignore if -- @preserve\n  if (typeof x !== \"number\") {\n    throw new Error(\"Inputs must be numbers\");\n  }\n  return x;\n}\n\nexport function primitiveIdentity<P extends Primitive>(x: P): P;\nexport function primitiveIdentity(x: unknown): Primitive;\nexport function primitiveIdentity(x: unknown): Primitive {\n  // istanbul ignore if -- @preserve\n  if (typeof x !== \"string\" && typeof x !== \"number\" && typeof x !== \"boolean\") {\n    throw new Error(\"Please provide a key function that can establish object identity\");\n  }\n  return x;\n}\n", "import { iter, map } from \"./builtins\";\nimport { izip, repeat } from \"./itertools\";\nimport type { Predicate, Primitive } from \"./types\";\nimport { primitiveIdentity } from \"./utils\";\n\n/**\n * Break iterable into lists of length `size`:\n *\n *     [...chunked([1, 2, 3, 4, 5, 6], 3)]\n *     // [[1, 2, 3], [4, 5, 6]]\n *\n * If the length of iterable is not evenly divisible by `size`, the last returned\n * list will be shorter:\n *\n *     [...chunked([1, 2, 3, 4, 5, 6, 7, 8], 3)]\n *     // [[1, 2, 3], [4, 5, 6], [7, 8]]\n */\nexport function* chunked<T>(iterable: Iterable<T>, size: number): IterableIterator<T[]> {\n  if (size < 1) {\n    throw new Error(`Invalid chunk size: ${size}`);\n  }\n\n  const it = iter(iterable);\n  for (;;) {\n    const chunk = take(size, it);\n    if (chunk.length > 0) {\n      yield chunk;\n    }\n    if (chunk.length < size) {\n      return;\n    }\n  }\n}\n\n/**\n * Return an iterator flattening one level of nesting in a list of lists:\n *\n *     [...flatten([[0, 1], [2, 3]])]\n *     // [0, 1, 2, 3]\n *\n */\nexport function* flatten<T>(iterableOfIterables: Iterable<Iterable<T>>): IterableIterator<T> {\n  for (const iterable of iterableOfIterables) {\n    for (const item of iterable) {\n      yield item;\n    }\n  }\n}\n\n/**\n * Intersperse filler element `value` among the items in `iterable`.\n *\n *     >>> [...intersperse(-1, range(1, 5))]\n *     [1, -1, 2, -1, 3, -1, 4]\n *\n */\nexport function intersperse<T, V>(value: V, iterable: Iterable<T>): IterableIterator<T | V> {\n  const stream = flatten<T | V>(izip(repeat(value), iterable));\n  stream.next(); // eat away and discard the first value from the output\n  return stream;\n}\n\n/**\n * Returns an iterable containing only the first `n` elements of the given\n * iterable.\n */\nexport function* itake<T>(n: number, iterable: Iterable<T>): IterableIterator<T> {\n  const it = iter(iterable);\n  let count = n;\n  while (count-- > 0) {\n    const s = it.next();\n    if (!s.done) {\n      yield s.value;\n    } else {\n      // Iterable exhausted, quit early\n      return;\n    }\n  }\n}\n\n/**\n * Returns an iterator of paired items, overlapping, from the original.  When\n * the input iterable has a finite number of items `n`, the outputted iterable\n * will have `n - 1` items.\n *\n *     >>> pairwise([8, 2, 0, 7])\n *     [(8, 2), (2, 0), (0, 7)]\n *\n */\nexport function* pairwise<T>(iterable: Iterable<T>): IterableIterator<[T, T]> {\n  const it = iter(iterable);\n  const first = it.next();\n  if (first.done) {\n    return;\n  }\n\n  let r1: T = first.value;\n  for (const r2 of it) {\n    yield [r1, r2];\n    r1 = r2;\n  }\n}\n\n/**\n * Returns a 2-tuple of arrays.  Splits the elements in the input iterable into\n * either of the two arrays.  Will fully exhaust the input iterable.  The first\n * array contains all items that match the predicate, the second the rest:\n *\n *     >>> const isOdd = x => x % 2 !== 0;\n *     >>> const iterable = range(10);\n *     >>> const [odds, evens] = partition(iterable, isOdd);\n *     >>> odds\n *     [1, 3, 5, 7, 9]\n *     >>> evens\n *     [0, 2, 4, 6, 8]\n *\n */\nexport function partition<T, N extends T>(\n  iterable: Iterable<T>,\n  predicate: (item: T, index: number) => item is N,\n): [N[], Exclude<T, N>[]];\nexport function partition<T>(iterable: Iterable<T>, predicate: Predicate<T>): [T[], T[]];\nexport function partition<T>(iterable: Iterable<T>, predicate: Predicate<T>): [T[], T[]] {\n  const good = [];\n  const bad = [];\n\n  let index = 0;\n  for (const item of iterable) {\n    if (predicate(item, index++)) {\n      good.push(item);\n    } else {\n      bad.push(item);\n    }\n  }\n\n  return [good, bad];\n}\n\n/**\n * Yields the next item from each iterable in turn, alternating between them.\n * Continues until all items are exhausted.\n *\n *     >>> [...roundrobin([1, 2, 3], [4], [5, 6, 7, 8])]\n *     [1, 4, 5, 2, 6, 3, 7, 8]\n */\nexport function* roundrobin<T>(...iters: Iterable<T>[]): IterableIterator<T> {\n  // We'll only keep lazy versions of the input iterables in here that we'll\n  // slowly going to exhaust.  Once an iterable is exhausted, it will be\n  // removed from this list.  Once the entire list is empty, this algorithm\n  // ends.\n  const iterables: Iterator<T>[] = map(iters, iter);\n\n  while (iterables.length > 0) {\n    let index = 0;\n    while (index < iterables.length) {\n      const it = iterables[index];\n      const result = it.next();\n\n      if (!result.done) {\n        yield result.value;\n        index++;\n      } else {\n        // This iterable is exhausted, make sure to remove it from the\n        // list of iterables.  We'll splice the array from under our\n        // feet, and NOT advancing the index counter.\n        iterables.splice(index, 1); // intentional side-effect!\n      }\n    }\n  }\n}\n\n/**\n * Yields the heads of all of the given iterables.  This is almost like\n * `roundrobin()`, except that the yielded outputs are grouped in to the\n * \"rounds\":\n *\n *     >>> [...heads([1, 2, 3], [4], [5, 6, 7, 8])]\n *     [[1, 4, 5], [2, 6], [3, 7], [8]]\n *\n * This is also different from `zipLongest()`, since the number of items in\n * each round can decrease over time, rather than being filled with a filler.\n */\nexport function* heads<T>(...iters: Iterable<T>[]): IterableIterator<T[]> {\n  // We'll only keep lazy versions of the input iterables in here that we'll\n  // slowly going to exhaust.  Once an iterable is exhausted, it will be\n  // removed from this list.  Once the entire list is empty, this algorithm\n  // ends.\n  const iterables: Iterator<T>[] = map(iters, iter);\n\n  while (iterables.length > 0) {\n    let index = 0;\n    const round = [];\n    while (index < iterables.length) {\n      const it = iterables[index];\n      const result = it.next();\n\n      if (!result.done) {\n        round.push(result.value);\n        index++;\n      } else {\n        // This iterable is exhausted, make sure to remove it from the\n        // list of iterables.  We'll splice the array from under our\n        // feet, and NOT advancing the index counter.\n        iterables.splice(index, 1); // intentional side-effect!\n      }\n    }\n    if (round.length > 0) {\n      yield round;\n    }\n  }\n}\n\n/**\n * Non-lazy version of itake().\n */\nexport function take<T>(n: number, iterable: Iterable<T>): T[] {\n  return Array.from(itake(n, iterable));\n}\n\n/**\n * Yield unique elements, preserving order.\n *\n *     >>> [...uniqueEverseen('AAAABBBCCDAABBB')]\n *     ['A', 'B', 'C', 'D']\n *     >>> [...uniqueEverseen('AbBCcAB', s => s.toLowerCase())]\n *     ['A', 'b', 'C']\n *\n */\nexport function* uniqueEverseen<T>(\n  iterable: Iterable<T>,\n  keyFn: (item: T) => Primitive = primitiveIdentity,\n): IterableIterator<T> {\n  const seen = new Set();\n  for (const item of iterable) {\n    const key = keyFn(item);\n    if (!seen.has(key)) {\n      seen.add(key);\n      yield item;\n    }\n  }\n}\n\n/**\n * Yield only elements from the input that occur more than once. Needs to\n * consume the entire input before being able to produce the first result.\n *\n *     >>> [...dupes('AAAABCDEEEFABG')]\n *     [['A', 'A', 'A', 'A', 'A'], ['E', 'E', 'E'], ['B', 'B']]\n *     >>> [...dupes('AbBCcAB', s => s.toLowerCase())]\n *     [['b', 'B', 'B'], ['C', 'c'], ['A', 'A']]\n *\n */\nexport function dupes<T>(\n  iterable: Iterable<T>,\n  keyFn: (item: T) => Primitive = primitiveIdentity,\n): IterableIterator<T[]> {\n  const multiples = new Map<Primitive, T[]>();\n\n  {\n    const singles = new Map<Primitive, T>();\n    for (const item of iterable) {\n      const key = keyFn(item);\n      if (multiples.has(key)) {\n        multiples.get(key)!.push(item);\n      } else if (singles.has(key)) {\n        multiples.set(key, [singles.get(key)!, item]);\n        singles.delete(key);\n      } else {\n        singles.set(key, item);\n      }\n    }\n  }\n\n  return multiples.values();\n}\n\n/**\n * Yields elements in order, ignoring serial duplicates.\n *\n *     >>> [...uniqueJustseen('AAAABBBCCDAABBB')]\n *     ['A', 'B', 'C', 'D', 'A', 'B']\n *     >>> [...uniqueJustseen('AbBCcAB', s => s.toLowerCase())]\n *     ['A', 'b', 'C', 'A', 'B']\n *\n */\nexport function* uniqueJustseen<T>(\n  iterable: Iterable<T>,\n  keyFn: (item: T) => Primitive = primitiveIdentity,\n): IterableIterator<T> {\n  let last = undefined;\n  for (const item of iterable) {\n    const key = keyFn(item);\n    if (key !== last) {\n      yield item;\n      last = key;\n    }\n  }\n}\n", "import { every, iter, range } from \"./builtins\";\nimport { flatten } from \"./more-itertools\";\nimport type { Predicate, Primitive } from \"./types\";\nimport { primitiveIdentity } from \"./utils\";\n\nconst SENTINEL = Symbol();\n\n/**\n * Returns an iterator that returns elements from the first iterable until it\n * is exhausted, then proceeds to the next iterable, until all of the iterables\n * are exhausted.  Used for treating consecutive sequences as a single\n * sequence.\n */\nexport function chain<T>(...iterables: Iterable<T>[]): IterableIterator<T> {\n  return flatten(iterables);\n}\n\n/**\n * Returns an iterator that counts up values starting with number `start`\n * (default 0), incrementing by `step`.  To decrement, use a negative step\n * number.\n */\nexport function* count(start = 0, step = 1): IterableIterator<number> {\n  let n = start;\n  for (;;) {\n    yield n;\n    n += step;\n  }\n}\n\n/**\n * Non-lazy version of icompress().\n */\nexport function compress<T>(data: Iterable<T>, selectors: Iterable<boolean>): T[] {\n  return Array.from(icompress(data, selectors));\n}\n\n/**\n * Returns an iterator producing elements from the iterable and saving a copy\n * of each.  When the iterable is exhausted, return elements from the saved\n * copy.  Repeats indefinitely.\n */\nexport function* cycle<T>(iterable: Iterable<T>): IterableIterator<T> {\n  const saved = [];\n  for (const element of iterable) {\n    yield element;\n    saved.push(element);\n  }\n\n  while (saved.length > 0) {\n    for (const element of saved) {\n      yield element;\n    }\n  }\n}\n\n/**\n * Returns an iterator that drops elements from the iterable as long as the\n * predicate is true; afterwards, returns every remaining element.  Note, the\n * iterator does not produce any output until the predicate first becomes\n * false.\n */\nexport function* dropwhile<T>(iterable: Iterable<T>, predicate: Predicate<T>): IterableIterator<T> {\n  let index = 0;\n  const it = iter(iterable);\n  let res: IteratorResult<T>;\n  while (!(res = it.next()).done) {\n    const value = res.value;\n    if (!predicate(value, index++)) {\n      yield value;\n      break; // we break, so we cannot use a for..of loop!\n    }\n  }\n\n  for (const value of it) {\n    yield value;\n  }\n}\n\n/** @deprecated Please rename to `igroupby`, or use the new eager version `groupBy`. */\nexport const groupby = igroupby;\n\nexport function* igroupby<T, K extends Primitive>(\n  iterable: Iterable<T>,\n  keyFn: (item: T) => K = primitiveIdentity,\n): Generator<[K, Generator<T, undefined>], undefined> {\n  const it = iter(iterable);\n\n  let currentValue: T;\n  let currentKey: K = SENTINEL as unknown as K;\n  //                           ^^^^^^^^^^^^^^^ Hack!\n  let targetKey: K = currentKey;\n\n  const grouper = function* grouper(tgtKey: K): Generator<T, undefined> {\n    while (currentKey === tgtKey) {\n      yield currentValue;\n\n      const nextVal = it.next();\n      if (nextVal.done) return;\n      currentValue = nextVal.value;\n      currentKey = keyFn(currentValue);\n    }\n  };\n\n  for (;;) {\n    while (currentKey === targetKey) {\n      const nextVal = it.next();\n      if (nextVal.done) {\n        currentKey = SENTINEL as unknown as K;\n        //                    ^^^^^^^^^^^^^^^ Hack!\n        return;\n      }\n      currentValue = nextVal.value;\n      currentKey = keyFn(currentValue);\n    }\n\n    targetKey = currentKey;\n    yield [currentKey, grouper(targetKey)];\n  }\n}\n\nexport function groupBy<T, K extends string | number>(iterable: Iterable<T>, keyFn: (item: T) => K): Record<K, T[]> {\n  const result = {} as Record<K, T[]>;\n  for (const item of iterable) {\n    const key = keyFn(item);\n    if (!Object.hasOwn(result, key)) {\n      result[key] = [];\n    }\n    result[key].push(item);\n  }\n  return result;\n}\n\nexport function indexBy<T, K extends string | number>(iterable: Iterable<T>, keyFn: (item: T) => K): Record<K, T> {\n  const result = {} as Record<K, T>;\n  for (const item of iterable) {\n    const key = keyFn(item);\n    result[key] = item;\n  }\n  return result;\n}\n\n/**\n * Returns an iterator that filters elements from data returning only those\n * that have a corresponding element in selectors that evaluates to `true`.\n * Stops when either the data or selectors iterables has been exhausted.\n */\nexport function* icompress<T>(data: Iterable<T>, selectors: Iterable<boolean>): IterableIterator<T> {\n  for (const [d, s] of izip(data, selectors)) {\n    if (s) {\n      yield d;\n    }\n  }\n}\n\n/**\n * Returns an iterator that filters elements from iterable returning only those\n * for which the predicate is true.\n */\nexport function ifilter<T, N extends T>(iterable: Iterable<T>, predicate: (item: T) => item is N): IterableIterator<N>;\nexport function ifilter<T>(iterable: Iterable<T>, predicate: Predicate<T>): IterableIterator<T>;\nexport function* ifilter<T>(iterable: Iterable<T>, predicate: Predicate<T>): IterableIterator<T> {\n  let index = 0;\n  for (const value of iterable) {\n    if (predicate(value, index++)) {\n      yield value;\n    }\n  }\n}\n\n/**\n * Returns an iterator that computes the given mapper function using arguments\n * from each of the iterables.\n */\nexport function* imap<T, V>(iterable: Iterable<T>, mapper: (item: T) => V): IterableIterator<V> {\n  for (const value of iterable) {\n    yield mapper(value);\n  }\n}\n\n/**\n * Returns an iterator that returns selected elements from the iterable.  If\n * `start` is non-zero, then elements from the iterable are skipped until start\n * is reached.  Then, elements are returned by making steps of `step` (defaults\n * to 1).  If set to higher than 1, items will be skipped.  If `stop` is\n * provided, then iteration continues until the iterator reached that index,\n * otherwise, the iterable will be fully exhausted.  `islice()` does not\n * support negative values for `start`, `stop`, or `step`.\n */\nexport function islice<T>(iterable: Iterable<T>, stop: number): IterableIterator<T>;\nexport function islice<T>(\n  iterable: Iterable<T>,\n  start: number,\n  stop?: number | null,\n  step?: number,\n): IterableIterator<T>;\nexport function* islice<T>(\n  iterable: Iterable<T>,\n  stopOrStart: number,\n  possiblyStop?: number | null,\n  step = 1,\n): IterableIterator<T> {\n  let start, stop;\n  if (possiblyStop !== undefined) {\n    // islice(iterable, start, stop[, step])\n    start = stopOrStart;\n    stop = possiblyStop;\n  } else {\n    // islice(iterable, stop)\n    start = 0;\n    stop = stopOrStart;\n  }\n\n  if (start < 0) throw new Error(\"start cannot be negative\");\n  if (stop !== null && stop < 0) throw new Error(\"stop cannot be negative\");\n  if (step <= 0) throw new Error(\"step cannot be negative\");\n\n  let i = -1;\n  const it = iter(iterable);\n  let res: IteratorResult<T>;\n  while (true) {\n    i++;\n    if (stop !== null && i >= stop) return; // early returns, so we cannot use a for..of loop!\n\n    res = it.next();\n    if (res.done) return;\n\n    if (i < start) continue;\n    if ((i - start) % step === 0) {\n      yield res.value;\n    }\n  }\n}\n\n/**\n * Returns an iterator that aggregates elements from each of the iterables.\n * Used for lock-step iteration over several iterables at a time.  When\n * iterating over two iterables, use `izip2`.  When iterating over three\n * iterables, use `izip3`, etc.  `izip` is an alias for `izip2`.\n */\nexport function* izip<T1, T2>(xs: Iterable<T1>, ys: Iterable<T2>): IterableIterator<[T1, T2]> {\n  const ixs = iter(xs);\n  const iys = iter(ys);\n  for (;;) {\n    const x = ixs.next();\n    const y = iys.next();\n    if (!x.done && !y.done) {\n      yield [x.value, y.value];\n    } else {\n      // One of the iterables exhausted\n      return;\n    }\n  }\n}\n\n/**\n * Like izip2, but for three input iterables.\n */\nexport function* izip3<T1, T2, T3>(\n  xs: Iterable<T1>,\n  ys: Iterable<T2>,\n  zs: Iterable<T3>,\n): IterableIterator<[T1, T2, T3]> {\n  const ixs = iter(xs);\n  const iys = iter(ys);\n  const izs = iter(zs);\n  for (;;) {\n    const x = ixs.next();\n    const y = iys.next();\n    const z = izs.next();\n    if (!x.done && !y.done && !z.done) {\n      yield [x.value, y.value, z.value];\n    } else {\n      // One of the iterables exhausted\n      return;\n    }\n  }\n}\n\nexport const izip2 = izip;\n\n/**\n * Returns an iterator that aggregates elements from each of the iterables.  If\n * the iterables are of uneven length, missing values are filled-in with\n * fillvalue.  Iteration continues until the longest iterable is exhausted.\n */\nexport function* izipLongest2<T1, T2, D>(\n  xs: Iterable<T1>,\n  ys: Iterable<T2>,\n  filler?: D,\n): IterableIterator<[T1 | D, T2 | D]> {\n  const filler_ = filler as D;\n  const ixs = iter(xs);\n  const iys = iter(ys);\n  for (;;) {\n    const x = ixs.next();\n    const y = iys.next();\n    if (x.done && y.done) {\n      // All iterables exhausted\n      return;\n    } else {\n      yield [!x.done ? x.value : filler_, !y.done ? y.value : filler_];\n    }\n  }\n}\n\n/**\n * See izipLongest2, but for three.\n */\nexport function* izipLongest3<T1, T2, T3, D = undefined>(\n  xs: Iterable<T1>,\n  ys: Iterable<T2>,\n  zs: Iterable<T3>,\n  filler?: D,\n): IterableIterator<[T1 | D, T2 | D, T3 | D]> {\n  const filler_ = filler as D;\n  const ixs = iter(xs);\n  const iys = iter(ys);\n  const izs = iter(zs);\n  for (;;) {\n    const x = ixs.next();\n    const y = iys.next();\n    const z = izs.next();\n    if (x.done && y.done && z.done) {\n      // All iterables exhausted\n      return;\n    } else {\n      yield [!x.done ? x.value : filler_, !y.done ? y.value : filler_, !z.done ? z.value : filler_];\n    }\n  }\n}\n\n/**\n * Like the other izips (`izip`, `izip3`, etc), but generalized to take an\n * unlimited amount of input iterables.  Think `izip(*iterables)` in Python.\n *\n * **Note:** Due to Flow type system limitations, you can only \"generially\" zip\n * iterables with homogeneous types, so you cannot mix types like <A, B> like\n * you can with izip2().\n */\nexport function* izipMany<T>(...iters: Iterable<T>[]): IterableIterator<T[]> {\n  // Make them all iterables\n  const iterables = iters.map(iter);\n\n  for (;;) {\n    const heads: IteratorResult<T, undefined>[] = iterables.map((xs) => xs.next());\n    if (every(heads, (h) => !h.done)) {\n      yield heads.map((h) => h.value as T);\n    } else {\n      // One of the iterables exhausted\n      return;\n    }\n  }\n}\n\n/**\n * Return successive `r`-length permutations of elements in the iterable.\n *\n * If `r` is not specified, then `r` defaults to the length of the iterable and\n * all possible full-length permutations are generated.\n *\n * Permutations are emitted in lexicographic sort order.  So, if the input\n * iterable is sorted, the permutation tuples will be produced in sorted order.\n *\n * Elements are treated as unique based on their position, not on their value.\n * So if the input elements are unique, there will be no repeat values in each\n * permutation.\n */\nexport function* permutations<T>(iterable: Iterable<T>, r?: number): IterableIterator<T[]> {\n  const pool = Array.from(iterable);\n  const n = pool.length;\n  const x = r ?? n;\n\n  if (x > n) {\n    return;\n  }\n\n  let indices: number[] = Array.from(range(n));\n  const cycles: number[] = Array.from(range(n, n - x, -1));\n  const poolgetter = (i: number) => pool[i];\n\n  yield indices.slice(0, x).map(poolgetter);\n\n  while (n > 0) {\n    let cleanExit = true;\n    for (const i of range(x - 1, -1, -1)) {\n      cycles[i] -= 1;\n      if (cycles[i] === 0) {\n        indices = indices\n          .slice(0, i)\n          .concat(indices.slice(i + 1))\n          .concat(indices.slice(i, i + 1));\n        cycles[i] = n - i;\n      } else {\n        const j: number = cycles[i];\n\n        const [p, q] = [indices[indices.length - j], indices[i]];\n        indices[i] = p;\n        indices[indices.length - j] = q;\n        yield indices.slice(0, x).map(poolgetter);\n        cleanExit = false;\n        break;\n      }\n    }\n\n    if (cleanExit) {\n      return;\n    }\n  }\n}\n\n/**\n * Returns an iterator that produces values over and over again.  Runs\n * indefinitely unless the times argument is specified.\n */\nexport function* repeat<T>(thing: T, times?: number): IterableIterator<T> {\n  if (times === undefined) {\n    for (;;) {\n      yield thing;\n    }\n  } else {\n    for (const _ of range(times)) {\n      yield thing;\n    }\n  }\n}\n\n/**\n * Returns an iterator that produces elements from the iterable as long as the\n * predicate is true.\n */\nexport function* takewhile<T>(iterable: Iterable<T>, predicate: Predicate<T>): IterableIterator<T> {\n  let index = 0;\n  const it = iter(iterable);\n  let res: IteratorResult<T>;\n  while (!(res = it.next()).done) {\n    const value = res.value;\n    if (!predicate(value, index++)) return; // early return, so we cannot use for..of loop!\n    yield value;\n  }\n}\n\nexport function zipLongest2<T1, T2, D>(xs: Iterable<T1>, ys: Iterable<T2>, filler?: D): [T1 | D, T2 | D][] {\n  return Array.from(izipLongest2(xs, ys, filler));\n}\n\nexport function zipLongest3<T1, T2, T3, D>(\n  xs: Iterable<T1>,\n  ys: Iterable<T2>,\n  zs: Iterable<T3>,\n  filler?: D,\n): [T1 | D, T2 | D, T3 | D][] {\n  return Array.from(izipLongest3(xs, ys, zs, filler));\n}\n\nexport const izipLongest = izipLongest2;\nexport const zipLongest = zipLongest2;\n\nexport function zipMany<T>(...iters: Iterable<T>[]): T[][] {\n  return Array.from(izipMany(...iters));\n}\n", "import { count, ifilter, imap, izip, izip3, takewhile } from \"./itertools\";\nimport type { Predicate, Primitive } from \"./types\";\nimport { identityPredicate, keyToCmp, numberIdentity, primitiveIdentity } from \"./utils\";\n\n/**\n * Returns the first item in the iterable for which the predicate holds, if\n * any. If no predicate is given, it will return the first value returned by\n * the iterable.\n */\nexport function find<T>(iterable: Iterable<T>, predicate?: Predicate<T>): T | undefined {\n  const it = iter(iterable);\n  if (predicate === undefined) {\n    const value = it.next();\n    return value.done ? undefined : value.value;\n  } else {\n    let res: IteratorResult<T>;\n    let i = 0;\n    while (!(res = it.next()).done) {\n      const value = res.value;\n      if (predicate(value, i++)) {\n        return value;\n      }\n    }\n    return undefined;\n  }\n}\n\n/**\n * Returns true when all of the items in iterable are truthy.  An optional key\n * function can be used to define what truthiness means for this specific\n * collection.\n *\n * Examples:\n *\n *     all([])                           // => true\n *     all([0])                          // => false\n *     all([0, 1, 2])                    // => false\n *     all([1, 2, 3])                    // => true\n *\n * Examples with using a key function:\n *\n *     all([2, 4, 6], n => n % 2 === 0)  // => true\n *     all([2, 4, 5], n => n % 2 === 0)  // => false\n *\n */\nexport function every<T>(iterable: Iterable<T>, predicate: Predicate<T> = identityPredicate): boolean {\n  let index = 0;\n  for (const item of iterable) {\n    if (!predicate(item, index++)) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Returns true when some of the items in iterable are truthy.  An optional key\n * function can be used to define what truthiness means for this specific\n * collection.\n *\n * Examples:\n *\n *     some([])                           // => false\n *     some([0])                          // => false\n *     some([0, 1, null, undefined])      // => true\n *\n * Examples with using a key function:\n *\n *     some([1, 4, 5], n => n % 2 === 0)  // => true\n *     some([{name: 'Bob'}, {name: 'Alice'}], person => person.name.startsWith('C'))  // => false\n *\n */\nexport function some<T>(iterable: Iterable<T>, predicate: Predicate<T> = identityPredicate): boolean {\n  let index = 0;\n  for (const item of iterable) {\n    if (predicate(item, index++)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Alias of `every()`.\n */\nexport const all = every;\n\n/**\n * Alias of `some()`.\n */\nexport const any = some;\n\n/**\n * Returns true when any of the items in the iterable are equal to the target object.\n *\n * Examples:\n *\n *     contains([], 'whatever')         // => false\n *     contains([3], 42)                // => false\n *     contains([3], 3)                 // => true\n *     contains([0, 1, 2], 2)           // => true\n *\n */\nexport function contains<T>(haystack: Iterable<T>, needle: T): boolean {\n  return some(haystack, (x) => x === needle);\n}\n\n/**\n * Returns an iterable of enumeration pairs.  Iterable must be a sequence, an\n * iterator, or some other object which supports iteration.  The elements\n * produced by returns a tuple containing a counter value (starting from 0 by\n * default) and the values obtained from iterating over given iterable.\n *\n * Example:\n *\n *     import { enumerate } from 'itertools';\n *\n *     console.log([...enumerate(['hello', 'world'])]);\n *     // [0, 'hello'], [1, 'world']]\n */\nexport function* enumerate<T>(iterable: Iterable<T>, start = 0): IterableIterator<[number, T]> {\n  let index: number = start;\n  for (const value of iterable) {\n    yield [index++, value];\n  }\n}\n\n/**\n * Non-lazy version of ifilter().\n */\nexport function filter<T, N extends T>(iterable: Iterable<T>, predicate: (item: T, index: number) => item is N): N[];\nexport function filter<T>(iterable: Iterable<T>, predicate: Predicate<T>): T[];\nexport function filter<T>(iterable: Iterable<T>, predicate: Predicate<T>): T[] {\n  return Array.from(ifilter(iterable, predicate));\n}\n\n/**\n * Returns an iterator object for the given iterable.  This can be used to\n * manually get an iterator for any iterable datastructure.  The purpose and\n * main use case of this function is to get a single iterator (a thing with\n * state, think of it as a \"cursor\") which can only be consumed once.\n */\nexport function iter<T>(iterable: Iterable<T>): IterableIterator<T> {\n  return iterable[Symbol.iterator]() as IterableIterator<T>;\n  //                                 ^^^^^^^^^^^^^^^^^^^^^^ Not safe!\n}\n\n/**\n * Non-lazy version of imap().\n */\nexport function map<T, V>(iterable: Iterable<T>, mapper: (item: T) => V): V[] {\n  return Array.from(imap(iterable, mapper));\n}\n\n/**\n * Return the largest item in an iterable.  Only works for numbers, as ordering\n * is pretty poorly defined on any other data type in JS.  The optional `keyFn`\n * argument specifies a one-argument ordering function like that used for\n * sorted().\n *\n * If the iterable is empty, `undefined` is returned.\n *\n * If multiple items are maximal, the function returns either one of them, but\n * which one is not defined.\n */\nexport function max<T>(iterable: Iterable<T>, keyFn: (item: T) => number = numberIdentity): T | undefined {\n  return reduce2(iterable, (x, y) => (keyFn(x) > keyFn(y) ? x : y));\n}\n\n/**\n * Return the smallest item in an iterable.  Only works for numbers, as\n * ordering is pretty poorly defined on any other data type in JS.  The\n * optional `keyFn` argument specifies a one-argument ordering function like\n * that used for sorted().\n *\n * If the iterable is empty, `undefined` is returned.\n *\n * If multiple items are minimal, the function returns either one of them, but\n * which one is not defined.\n */\nexport function min<T>(iterable: Iterable<T>, keyFn: (item: T) => number = numberIdentity): T | undefined {\n  return reduce2(iterable, (x, y) => (keyFn(x) < keyFn(y) ? x : y));\n}\n\n/**\n * Internal helper for the range function\n */\nfunction range_(start: number, stop: number, step: number): IterableIterator<number> {\n  const counter = count(start, step);\n  const pred = step >= 0 ? (n: number) => n < stop : (n: number) => n > stop;\n  return takewhile(counter, pred);\n}\n\n/**\n * Returns an iterator producing all the numbers in the given range one by one,\n * starting from `start` (default 0), as long as `i < stop`, in increments of\n * `step` (default 1).\n *\n * `range(a)` is a convenient shorthand for `range(0, a)`.\n *\n * Various valid invocations:\n *\n *     range(5)           // [0, 1, 2, 3, 4]\n *     range(2, 5)        // [2, 3, 4]\n *     range(0, 5, 2)     // [0, 2, 4]\n *     range(5, 0, -1)    // [5, 4, 3, 2, 1]\n *     range(-3)          // []\n *\n * For a positive `step`, the iterator will keep producing values `n` as long\n * as the stop condition `n < stop` is satisfied.\n *\n * For a negative `step`, the iterator will keep producing values `n` as long\n * as the stop condition `n > stop` is satisfied.\n *\n * The produced range will be empty if the first value to produce already does\n * not meet the value constraint.\n */\nexport function range(stop: number): IterableIterator<number>;\nexport function range(start: number, stop: number, step?: number): IterableIterator<number>;\nexport function range(startOrStop: number, definitelyStop?: number, step = 1): IterableIterator<number> {\n  if (definitelyStop !== undefined) {\n    return range_(startOrStop /* as start */, definitelyStop, step);\n  } else {\n    return range_(0, startOrStop /* as stop */, step);\n  }\n}\n\nexport function xrange(stop: number): number[];\nexport function xrange(start: number, stop: number, step?: number): number[];\nexport function xrange(startOrStop: number, definitelyStop?: number, step = 1): number[] {\n  if (definitelyStop !== undefined) {\n    return Array.from(range_(startOrStop /* as start */, definitelyStop, step));\n  } else {\n    return Array.from(range_(0, startOrStop /* as stop */, step));\n  }\n}\n\n/**\n * Apply function of two arguments cumulatively to the items of sequence, from\n * left to right, so as to reduce the sequence to a single value.  For example:\n *\n *     reduce([1, 2, 3, 4, 5], (x, y) => x + y, 0)\n *\n * calculates\n *\n *     (((((0+1)+2)+3)+4)+5)\n *\n * The left argument, `x`, is the accumulated value and the right argument,\n * `y`, is the update value from the sequence.\n *\n * **Difference between `reduce()` and `reduce\\_()`**:  `reduce()` requires an\n * explicit initializer, whereas `reduce_()` will automatically use the first\n * item in the given iterable as the initializer.  When using `reduce()`, the\n * initializer value is placed before the items of the sequence in the\n * calculation, and serves as a default when the sequence is empty.  When using\n * `reduce_()`, and the given iterable is empty, then no default value can be\n * derived and `undefined` will be returned.\n */\nexport function reduce<T>(iterable: Iterable<T>, reducer: (agg: T, item: T, index: number) => T): T | undefined;\nexport function reduce<T, O>(iterable: Iterable<T>, reducer: (agg: O, item: T, index: number) => O, start: O): O;\nexport function reduce<T, O>(\n  iterable: Iterable<T>,\n  reducer: ((agg: T, item: T, index: number) => T) | ((agg: O, item: T, index: number) => O),\n  start?: O,\n): O | (T | undefined) {\n  if (start === undefined) {\n    return reduce2(iterable, reducer as (agg: T, item: T, index: number) => T);\n  } else {\n    return reduce3(iterable, reducer as (agg: O, item: T, index: number) => O, start);\n  }\n}\n\nfunction reduce3<T, O>(iterable: Iterable<T>, reducer: (agg: O, item: T, index: number) => O, start: O): O {\n  let output = start;\n  let index = 0;\n  for (const item of iterable) {\n    output = reducer(output, item, index++);\n  }\n  return output;\n}\n\nfunction reduce2<T>(iterable: Iterable<T>, reducer: (agg: T, item: T, index: number) => T): T | undefined {\n  const it = iter(iterable);\n  const start = find(it);\n  if (start === undefined) {\n    return undefined;\n  } else {\n    return reduce3(it, reducer, start);\n  }\n}\n\n/**\n * Return a new sorted list from the items in iterable.\n *\n * Has two optional arguments:\n *\n * * `keyFn` specifies a function of one argument providing a primitive\n *   identity for each element in the iterable.  that will be used to compare.\n *   The default value is to use a default identity function that is only\n *   defined for primitive types.\n *\n * * `reverse` is a boolean value.  If `true`, then the list elements are\n *   sorted as if each comparison were reversed.\n */\nexport function sorted<T>(\n  iterable: Iterable<T>,\n  keyFn: (item: T) => Primitive = primitiveIdentity,\n  reverse = false,\n): T[] {\n  const result = Array.from(iterable);\n  result.sort(keyToCmp(keyFn)); // sort in-place\n\n  if (reverse) {\n    result.reverse(); // reverse in-place\n  }\n\n  return result;\n}\n\n/**\n * Sums the items of an iterable from left to right and returns the total.  The\n * sum will defaults to 0 if the iterable is empty.\n */\nexport function sum(iterable: Iterable<number>): number {\n  return reduce(iterable, (x, y) => x + y, 0);\n}\n\n/**\n * See izip.\n */\nexport function zip<T1, T2>(xs: Iterable<T1>, ys: Iterable<T2>): [T1, T2][] {\n  return Array.from(izip(xs, ys));\n}\n\n/**\n * See izip3.\n */\nexport function zip3<T1, T2, T3>(xs: Iterable<T1>, ys: Iterable<T2>, zs: Iterable<T3>): [T1, T2, T3][] {\n  return Array.from(izip3(xs, ys, zs));\n}\n", "import { find } from \"./builtins\";\nimport { ifilter, imap } from \"./itertools\";\nimport { flatten } from \"./more-itertools\";\nimport type { Predicate } from \"./types\";\n\nfunction isNullish<T>(x: T): x is NonNullable<T> {\n  return x != null;\n}\n\nfunction isDefined(x: unknown): boolean {\n  return x !== undefined;\n}\n\n/**\n * Returns an iterable, filtering out any \"nullish\" values from the iterable.\n *\n *     >>> compact([1, 2, undefined, 3, null])\n *     [1, 2, 3]\n *\n * For an eager version, @see compact().\n */\nexport function icompact<T>(iterable: Iterable<T | null | undefined>): IterableIterator<T> {\n  return ifilter(iterable, isNullish);\n}\n\n/**\n * Returns an array, filtering out any \"nullish\" values from the iterable.\n *\n *     >>> compact([1, 2, undefined, 3, null])\n *     [1, 2, 3]\n *\n * For a lazy version, @see icompact().\n */\nexport function compact<T>(iterable: Iterable<T | null | undefined>): T[] {\n  return Array.from(icompact(iterable));\n}\n\n/**\n * Removes all \"nullish\" values from the given object. Returns a new object.\n *\n *     >>> compactObject({ a: 1, b: undefined, c: 0, d: null })\n *     { a: 1, c: 0 }\n *\n */\nexport function compactObject<K extends string, V>(obj: Record<K, V | null | undefined>): Record<K, V> {\n  const result = {} as Record<K, V>;\n  for (const [key, value_] of Object.entries(obj)) {\n    const value = value_ as V | null | undefined;\n    if (value != null) {\n      result[key as K] = value;\n    }\n  }\n  return result;\n}\n\n/**\n * Almost an alias of find(). There only is a difference if no key fn is\n * provided. In that case, `find()` will return the first item in the iterable,\n * whereas `first()` will return the first non-`undefined` value in the\n * iterable.\n */\nexport function first<T>(iterable: Iterable<T>, keyFn?: Predicate<T>): T | undefined {\n  return find(iterable, keyFn ?? isDefined);\n}\n\n/**\n * Returns 0 or more values for every value in the given iterable.\n * Technically, it's just calling map(), followed by flatten(), but it's a very\n * useful operation if you want to map over a structure, but not have a 1:1\n * input-output mapping.  Instead, if you want to potentially return 0 or more\n * values per input element, use flatmap():\n *\n * For example, to return all numbers `n` in the input iterable `n` times:\n *\n *     >>> const repeatN = n => repeat(n, n);\n *     >>> [...flatmap([0, 1, 2, 3, 4], repeatN)]\n *     [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]  // note: no 0\n *\n */\nexport function flatmap<T, S>(iterable: Iterable<T>, mapper: (item: T) => Iterable<S>): IterableIterator<S> {\n  return flatten(imap(iterable, mapper));\n}\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n// IMPORTANT: these imports must be type-only\nimport type {Directive, DirectiveResult, PartInfo} from './directive.js';\nimport type {TrustedHTML, TrustedTypesWindow} from 'trusted-types/lib/index.js';\n\nconst DEV_MODE = true;\nconst ENABLE_EXTRA_SECURITY_HOOKS = true;\nconst ENABLE_SHADYDOM_NOPATCH = true;\nconst NODE_MODE = false;\n\n// Allows minifiers to rename references to globalThis\nconst global = globalThis;\n\n/**\n * Contains types that are part of the unstable debug API.\n *\n * Everything in this API is not stable and may change or be removed in the future,\n * even on patch releases.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace LitUnstable {\n  /**\n   * When Lit is running in dev mode and `window.emitLitDebugLogEvents` is true,\n   * we will emit 'lit-debug' events to window, with live details about the update and render\n   * lifecycle. These can be useful for writing debug tooling and visualizations.\n   *\n   * Please be aware that running with window.emitLitDebugLogEvents has performance overhead,\n   * making certain operations that are normally very cheap (like a no-op render) much slower,\n   * because we must copy data and dispatch events.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-namespace\n  export namespace DebugLog {\n    export type Entry =\n      | TemplatePrep\n      | TemplateInstantiated\n      | TemplateInstantiatedAndUpdated\n      | TemplateUpdating\n      | BeginRender\n      | EndRender\n      | CommitPartEntry\n      | SetPartValue;\n    export interface TemplatePrep {\n      kind: 'template prep';\n      template: Template;\n      strings: TemplateStringsArray;\n      clonableTemplate: HTMLTemplateElement;\n      parts: TemplatePart[];\n    }\n    export interface BeginRender {\n      kind: 'begin render';\n      id: number;\n      value: unknown;\n      container: RenderRootNode;\n      options: RenderOptions | undefined;\n      part: ChildPart | undefined;\n    }\n    export interface EndRender {\n      kind: 'end render';\n      id: number;\n      value: unknown;\n      container: RenderRootNode;\n      options: RenderOptions | undefined;\n      part: ChildPart;\n    }\n    export interface TemplateInstantiated {\n      kind: 'template instantiated';\n      template: Template | CompiledTemplate;\n      instance: TemplateInstance;\n      options: RenderOptions | undefined;\n      fragment: Node;\n      parts: Array<Part | undefined>;\n      values: unknown[];\n    }\n    export interface TemplateInstantiatedAndUpdated {\n      kind: 'template instantiated and updated';\n      template: Template | CompiledTemplate;\n      instance: TemplateInstance;\n      options: RenderOptions | undefined;\n      fragment: Node;\n      parts: Array<Part | undefined>;\n      values: unknown[];\n    }\n    export interface TemplateUpdating {\n      kind: 'template updating';\n      template: Template | CompiledTemplate;\n      instance: TemplateInstance;\n      options: RenderOptions | undefined;\n      parts: Array<Part | undefined>;\n      values: unknown[];\n    }\n    export interface SetPartValue {\n      kind: 'set part';\n      part: Part;\n      value: unknown;\n      valueIndex: number;\n      values: unknown[];\n      templateInstance: TemplateInstance;\n    }\n\n    export type CommitPartEntry =\n      | CommitNothingToChildEntry\n      | CommitText\n      | CommitNode\n      | CommitAttribute\n      | CommitProperty\n      | CommitBooleanAttribute\n      | CommitEventListener\n      | CommitToElementBinding;\n\n    export interface CommitNothingToChildEntry {\n      kind: 'commit nothing to child';\n      start: ChildNode;\n      end: ChildNode | null;\n      parent: Disconnectable | undefined;\n      options: RenderOptions | undefined;\n    }\n\n    export interface CommitText {\n      kind: 'commit text';\n      node: Text;\n      value: unknown;\n      options: RenderOptions | undefined;\n    }\n\n    export interface CommitNode {\n      kind: 'commit node';\n      start: Node;\n      parent: Disconnectable | undefined;\n      value: Node;\n      options: RenderOptions | undefined;\n    }\n\n    export interface CommitAttribute {\n      kind: 'commit attribute';\n      element: Element;\n      name: string;\n      value: unknown;\n      options: RenderOptions | undefined;\n    }\n\n    export interface CommitProperty {\n      kind: 'commit property';\n      element: Element;\n      name: string;\n      value: unknown;\n      options: RenderOptions | undefined;\n    }\n\n    export interface CommitBooleanAttribute {\n      kind: 'commit boolean attribute';\n      element: Element;\n      name: string;\n      value: boolean;\n      options: RenderOptions | undefined;\n    }\n\n    export interface CommitEventListener {\n      kind: 'commit event listener';\n      element: Element;\n      name: string;\n      value: unknown;\n      oldListener: unknown;\n      options: RenderOptions | undefined;\n      // True if we're removing the old event listener (e.g. because settings changed, or value is nothing)\n      removeListener: boolean;\n      // True if we're adding a new event listener (e.g. because first render, or settings changed)\n      addListener: boolean;\n    }\n\n    export interface CommitToElementBinding {\n      kind: 'commit to element binding';\n      element: Element;\n      value: unknown;\n      options: RenderOptions | undefined;\n    }\n  }\n}\n\ninterface DebugLoggingWindow {\n  // Even in dev mode, we generally don't want to emit these events, as that's\n  // another level of cost, so only emit them when DEV_MODE is true _and_ when\n  // window.emitLitDebugEvents is true.\n  emitLitDebugLogEvents?: boolean;\n}\n\n/**\n * Useful for visualizing and logging insights into what the Lit template system is doing.\n *\n * Compiled out of prod mode builds.\n */\nconst debugLogEvent = DEV_MODE\n  ? (event: LitUnstable.DebugLog.Entry) => {\n      const shouldEmit = (global as unknown as DebugLoggingWindow)\n        .emitLitDebugLogEvents;\n      if (!shouldEmit) {\n        return;\n      }\n      global.dispatchEvent(\n        new CustomEvent<LitUnstable.DebugLog.Entry>('lit-debug', {\n          detail: event,\n        })\n      );\n    }\n  : undefined;\n// Used for connecting beginRender and endRender events when there are nested\n// renders when errors are thrown preventing an endRender event from being\n// called.\nlet debugLogRenderId = 0;\n\nlet issueWarning: (code: string, warning: string) => void;\n\nif (DEV_MODE) {\n  global.litIssuedWarnings ??= new Set();\n\n  /**\n   * Issue a warning if we haven't already, based either on `code` or `warning`.\n   * Warnings are disabled automatically only by `warning`; disabling via `code`\n   * can be done by users.\n   */\n  issueWarning = (code: string, warning: string) => {\n    warning += code\n      ? ` See https://lit.dev/msg/${code} for more information.`\n      : '';\n    if (\n      !global.litIssuedWarnings!.has(warning) &&\n      !global.litIssuedWarnings!.has(code)\n    ) {\n      console.warn(warning);\n      global.litIssuedWarnings!.add(warning);\n    }\n  };\n\n  queueMicrotask(() => {\n    issueWarning(\n      'dev-mode',\n      `Lit is in dev mode. Not recommended for production!`\n    );\n  });\n}\n\nconst wrap =\n  ENABLE_SHADYDOM_NOPATCH &&\n  global.ShadyDOM?.inUse &&\n  global.ShadyDOM?.noPatch === true\n    ? (global.ShadyDOM!.wrap as <T extends Node>(node: T) => T)\n    : <T extends Node>(node: T) => node;\n\nconst trustedTypes = (global as unknown as TrustedTypesWindow).trustedTypes;\n\n/**\n * Our TrustedTypePolicy for HTML which is declared using the html template\n * tag function.\n *\n * That HTML is a developer-authored constant, and is parsed with innerHTML\n * before any untrusted expressions have been mixed in. Therefor it is\n * considered safe by construction.\n */\nconst policy = trustedTypes\n  ? trustedTypes.createPolicy('lit-html', {\n      createHTML: (s) => s,\n    })\n  : undefined;\n\n/**\n * Used to sanitize any value before it is written into the DOM. This can be\n * used to implement a security policy of allowed and disallowed values in\n * order to prevent XSS attacks.\n *\n * One way of using this callback would be to check attributes and properties\n * against a list of high risk fields, and require that values written to such\n * fields be instances of a class which is safe by construction. Closure's Safe\n * HTML Types is one implementation of this technique (\n * https://github.com/google/safe-html-types/blob/master/doc/safehtml-types.md).\n * The TrustedTypes polyfill in API-only mode could also be used as a basis\n * for this technique (https://github.com/WICG/trusted-types).\n *\n * @param node The HTML node (usually either a #text node or an Element) that\n *     is being written to. Note that this is just an exemplar node, the write\n *     may take place against another instance of the same class of node.\n * @param name The name of an attribute or property (for example, 'href').\n * @param type Indicates whether the write that's about to be performed will\n *     be to a property or a node.\n * @return A function that will sanitize this class of writes.\n */\nexport type SanitizerFactory = (\n  node: Node,\n  name: string,\n  type: 'property' | 'attribute'\n) => ValueSanitizer;\n\n/**\n * A function which can sanitize values that will be written to a specific kind\n * of DOM sink.\n *\n * See SanitizerFactory.\n *\n * @param value The value to sanitize. Will be the actual value passed into\n *     the lit-html template literal, so this could be of any type.\n * @return The value to write to the DOM. Usually the same as the input value,\n *     unless sanitization is needed.\n */\nexport type ValueSanitizer = (value: unknown) => unknown;\n\nconst identityFunction: ValueSanitizer = (value: unknown) => value;\nconst noopSanitizer: SanitizerFactory = (\n  _node: Node,\n  _name: string,\n  _type: 'property' | 'attribute'\n) => identityFunction;\n\n/** Sets the global sanitizer factory. */\nconst setSanitizer = (newSanitizer: SanitizerFactory) => {\n  if (!ENABLE_EXTRA_SECURITY_HOOKS) {\n    return;\n  }\n  if (sanitizerFactoryInternal !== noopSanitizer) {\n    throw new Error(\n      `Attempted to overwrite existing lit-html security policy.` +\n        ` setSanitizeDOMValueFactory should be called at most once.`\n    );\n  }\n  sanitizerFactoryInternal = newSanitizer;\n};\n\n/**\n * Only used in internal tests, not a part of the public API.\n */\nconst _testOnlyClearSanitizerFactoryDoNotCallOrElse = () => {\n  sanitizerFactoryInternal = noopSanitizer;\n};\n\nconst createSanitizer: SanitizerFactory = (node, name, type) => {\n  return sanitizerFactoryInternal(node, name, type);\n};\n\n// Added to an attribute name to mark the attribute as bound so we can find\n// it easily.\nconst boundAttributeSuffix = '$lit$';\n\n// This marker is used in many syntactic positions in HTML, so it must be\n// a valid element name and attribute name. We don't support dynamic names (yet)\n// but this at least ensures that the parse tree is closer to the template\n// intention.\nconst marker = `lit$${Math.random().toFixed(9).slice(2)}$`;\n\n// String used to tell if a comment is a marker comment\nconst markerMatch = '?' + marker;\n\n// Text used to insert a comment marker node. We use processing instruction\n// syntax because it's slightly smaller, but parses as a comment node.\nconst nodeMarker = `<${markerMatch}>`;\n\nconst d =\n  NODE_MODE && global.document === undefined\n    ? ({\n        createTreeWalker() {\n          return {};\n        },\n      } as unknown as Document)\n    : document;\n\n// Creates a dynamic marker. We never have to search for these in the DOM.\nconst createMarker = () => d.createComment('');\n\n// https://tc39.github.io/ecma262/#sec-typeof-operator\ntype Primitive = null | undefined | boolean | number | string | symbol | bigint;\nconst isPrimitive = (value: unknown): value is Primitive =>\n  value === null || (typeof value != 'object' && typeof value != 'function');\nconst isArray = Array.isArray;\nconst isIterable = (value: unknown): value is Iterable<unknown> =>\n  isArray(value) ||\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  typeof (value as any)?.[Symbol.iterator] === 'function';\n\nconst SPACE_CHAR = `[ \\t\\n\\f\\r]`;\nconst ATTR_VALUE_CHAR = `[^ \\t\\n\\f\\r\"'\\`<>=]`;\nconst NAME_CHAR = `[^\\\\s\"'>=/]`;\n\n// These regexes represent the five parsing states that we care about in the\n// Template's HTML scanner. They match the *end* of the state they're named\n// after.\n// Depending on the match, we transition to a new state. If there's no match,\n// we stay in the same state.\n// Note that the regexes are stateful. We utilize lastIndex and sync it\n// across the multiple regexes used. In addition to the five regexes below\n// we also dynamically create a regex to find the matching end tags for raw\n// text elements.\n\n/**\n * End of text is: `<` followed by:\n *   (comment start) or (tag) or (dynamic tag binding)\n */\nconst textEndRegex = /<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g;\nconst COMMENT_START = 1;\nconst TAG_NAME = 2;\nconst DYNAMIC_TAG_NAME = 3;\n\nconst commentEndRegex = /-->/g;\n/**\n * Comments not started with <!--, like </{, can be ended by a single `>`\n */\nconst comment2EndRegex = />/g;\n\n/**\n * The tagEnd regex matches the end of the \"inside an opening\" tag syntax\n * position. It either matches a `>`, an attribute-like sequence, or the end\n * of the string after a space (attribute-name position ending).\n *\n * See attributes in the HTML spec:\n * https://www.w3.org/TR/html5/syntax.html#elements-attributes\n *\n * \" \\t\\n\\f\\r\" are HTML space characters:\n * https://infra.spec.whatwg.org/#ascii-whitespace\n *\n * So an attribute is:\n *  * The name: any character except a whitespace character, (\"), ('), \">\",\n *    \"=\", or \"/\". Note: this is different from the HTML spec which also excludes control characters.\n *  * Followed by zero or more space characters\n *  * Followed by \"=\"\n *  * Followed by zero or more space characters\n *  * Followed by:\n *    * Any character except space, ('), (\"), \"<\", \">\", \"=\", (`), or\n *    * (\") then any non-(\"), or\n *    * (') then any non-(')\n */\nconst tagEndRegex = new RegExp(\n  `>|${SPACE_CHAR}(?:(${NAME_CHAR}+)(${SPACE_CHAR}*=${SPACE_CHAR}*(?:${ATTR_VALUE_CHAR}|(\"|')|))|$)`,\n  'g'\n);\nconst ENTIRE_MATCH = 0;\nconst ATTRIBUTE_NAME = 1;\nconst SPACES_AND_EQUALS = 2;\nconst QUOTE_CHAR = 3;\n\nconst singleQuoteAttrEndRegex = /'/g;\nconst doubleQuoteAttrEndRegex = /\"/g;\n/**\n * Matches the raw text elements.\n *\n * Comments are not parsed within raw text elements, so we need to search their\n * text content for marker strings.\n */\nconst rawTextElement = /^(?:script|style|textarea|title)$/i;\n\n/** TemplateResult types */\nconst HTML_RESULT = 1;\nconst SVG_RESULT = 2;\nconst MATHML_RESULT = 3;\n\ntype ResultType = typeof HTML_RESULT | typeof SVG_RESULT | typeof MATHML_RESULT;\n\n// TemplatePart types\n// IMPORTANT: these must match the values in PartType\nconst ATTRIBUTE_PART = 1;\nconst CHILD_PART = 2;\nconst PROPERTY_PART = 3;\nconst BOOLEAN_ATTRIBUTE_PART = 4;\nconst EVENT_PART = 5;\nconst ELEMENT_PART = 6;\nconst COMMENT_PART = 7;\n\n/**\n * The return type of the template tag functions, {@linkcode html} and\n * {@linkcode svg} when it hasn't been compiled by @lit-labs/compiler.\n *\n * A `TemplateResult` object holds all the information about a template\n * expression required to render it: the template strings, expression values,\n * and type of template (html or svg).\n *\n * `TemplateResult` objects do not create any DOM on their own. To create or\n * update DOM you need to render the `TemplateResult`. See\n * [Rendering](https://lit.dev/docs/components/rendering) for more information.\n *\n */\nexport type UncompiledTemplateResult<T extends ResultType = ResultType> = {\n  // This property needs to remain unminified.\n  ['_$litType$']: T;\n  strings: TemplateStringsArray;\n  values: unknown[];\n};\n\n/**\n * This is a template result that may be either uncompiled or compiled.\n *\n * In the future, TemplateResult will be this type. If you want to explicitly\n * note that a template result is potentially compiled, you can reference this\n * type and it will continue to behave the same through the next major version\n * of Lit. This can be useful for code that wants to prepare for the next\n * major version of Lit.\n */\nexport type MaybeCompiledTemplateResult<T extends ResultType = ResultType> =\n  | UncompiledTemplateResult<T>\n  | CompiledTemplateResult;\n\n/**\n * The return type of the template tag functions, {@linkcode html} and\n * {@linkcode svg}.\n *\n * A `TemplateResult` object holds all the information about a template\n * expression required to render it: the template strings, expression values,\n * and type of template (html or svg).\n *\n * `TemplateResult` objects do not create any DOM on their own. To create or\n * update DOM you need to render the `TemplateResult`. See\n * [Rendering](https://lit.dev/docs/components/rendering) for more information.\n *\n * In Lit 4, this type will be an alias of\n * MaybeCompiledTemplateResult, so that code will get type errors if it assumes\n * that Lit templates are not compiled. When deliberately working with only\n * one, use either {@linkcode CompiledTemplateResult} or\n * {@linkcode UncompiledTemplateResult} explicitly.\n */\nexport type TemplateResult<T extends ResultType = ResultType> =\n  UncompiledTemplateResult<T>;\n\nexport type HTMLTemplateResult = TemplateResult<typeof HTML_RESULT>;\n\nexport type SVGTemplateResult = TemplateResult<typeof SVG_RESULT>;\n\nexport type MathMLTemplateResult = TemplateResult<typeof MATHML_RESULT>;\n\n/**\n * A TemplateResult that has been compiled by @lit-labs/compiler, skipping the\n * prepare step.\n */\nexport interface CompiledTemplateResult {\n  // This is a factory in order to make template initialization lazy\n  // and allow ShadyRenderOptions scope to be passed in.\n  // This property needs to remain unminified.\n  ['_$litType$']: CompiledTemplate;\n  values: unknown[];\n}\n\nexport interface CompiledTemplate extends Omit<Template, 'el'> {\n  // el is overridden to be optional. We initialize it on first render\n  el?: HTMLTemplateElement;\n\n  // The prepared HTML string to create a template element from.\n  // The type is a TemplateStringsArray to guarantee that the value came from\n  // source code, preventing a JSON injection attack.\n  h: TemplateStringsArray;\n}\n\n/**\n * Generates a template literal tag function that returns a TemplateResult with\n * the given result type.\n */\nconst tag =\n  <T extends ResultType>(type: T) =>\n  (strings: TemplateStringsArray, ...values: unknown[]): TemplateResult<T> => {\n    // Warn against templates octal escape sequences\n    // We do this here rather than in render so that the warning is closer to the\n    // template definition.\n    if (DEV_MODE && strings.some((s) => s === undefined)) {\n      console.warn(\n        'Some template strings are undefined.\\n' +\n          'This is probably caused by illegal octal escape sequences.'\n      );\n    }\n    if (DEV_MODE) {\n      // Import static-html.js results in a circular dependency which g3 doesn't\n      // handle. Instead we know that static values must have the field\n      // `_$litStatic$`.\n      if (\n        values.some((val) => (val as {_$litStatic$: unknown})?.['_$litStatic$'])\n      ) {\n        issueWarning(\n          '',\n          `Static values 'literal' or 'unsafeStatic' cannot be used as values to non-static templates.\\n` +\n            `Please use the static 'html' tag function. See https://lit.dev/docs/templates/expressions/#static-expressions`\n        );\n      }\n    }\n    return {\n      // This property needs to remain unminified.\n      ['_$litType$']: type,\n      strings,\n      values,\n    };\n  };\n\n/**\n * Interprets a template literal as an HTML template that can efficiently\n * render to and update a container.\n *\n * ```ts\n * const header = (title: string) => html`<h1>${title}</h1>`;\n * ```\n *\n * The `html` tag returns a description of the DOM to render as a value. It is\n * lazy, meaning no work is done until the template is rendered. When rendering,\n * if a template comes from the same expression as a previously rendered result,\n * it's efficiently updated instead of replaced.\n */\nexport const html = tag(HTML_RESULT);\n\n/**\n * Interprets a template literal as an SVG fragment that can efficiently render\n * to and update a container.\n *\n * ```ts\n * const rect = svg`<rect width=\"10\" height=\"10\"></rect>`;\n *\n * const myImage = html`\n *   <svg viewBox=\"0 0 10 10\" xmlns=\"http://www.w3.org/2000/svg\">\n *     ${rect}\n *   </svg>`;\n * ```\n *\n * The `svg` *tag function* should only be used for SVG fragments, or elements\n * that would be contained **inside** an `<svg>` HTML element. A common error is\n * placing an `<svg>` *element* in a template tagged with the `svg` tag\n * function. The `<svg>` element is an HTML element and should be used within a\n * template tagged with the {@linkcode html} tag function.\n *\n * In LitElement usage, it's invalid to return an SVG fragment from the\n * `render()` method, as the SVG fragment will be contained within the element's\n * shadow root and thus not be properly contained within an `<svg>` HTML\n * element.\n */\nexport const svg = tag(SVG_RESULT);\n\n/**\n * Interprets a template literal as MathML fragment that can efficiently render\n * to and update a container.\n *\n * ```ts\n * const num = mathml`<mn>1</mn>`;\n *\n * const eq = html`\n *   <math>\n *     ${num}\n *   </math>`;\n * ```\n *\n * The `mathml` *tag function* should only be used for MathML fragments, or\n * elements that would be contained **inside** a `<math>` HTML element. A common\n * error is placing a `<math>` *element* in a template tagged with the `mathml`\n * tag function. The `<math>` element is an HTML element and should be used\n * within a template tagged with the {@linkcode html} tag function.\n *\n * In LitElement usage, it's invalid to return an MathML fragment from the\n * `render()` method, as the MathML fragment will be contained within the\n * element's shadow root and thus not be properly contained within a `<math>`\n * HTML element.\n */\nexport const mathml = tag(MATHML_RESULT);\n\n/**\n * A sentinel value that signals that a value was handled by a directive and\n * should not be written to the DOM.\n */\nexport const noChange = Symbol.for('lit-noChange');\n\n/**\n * A sentinel value that signals a ChildPart to fully clear its content.\n *\n * ```ts\n * const button = html`${\n *  user.isAdmin\n *    ? html`<button>DELETE</button>`\n *    : nothing\n * }`;\n * ```\n *\n * Prefer using `nothing` over other falsy values as it provides a consistent\n * behavior between various expression binding contexts.\n *\n * In child expressions, `undefined`, `null`, `''`, and `nothing` all behave the\n * same and render no nodes. In attribute expressions, `nothing` _removes_ the\n * attribute, while `undefined` and `null` will render an empty string. In\n * property expressions `nothing` becomes `undefined`.\n */\nexport const nothing = Symbol.for('lit-nothing');\n\n/**\n * The cache of prepared templates, keyed by the tagged TemplateStringsArray\n * and _not_ accounting for the specific template tag used. This means that\n * template tags cannot be dynamic - they must statically be one of html, svg,\n * or attr. This restriction simplifies the cache lookup, which is on the hot\n * path for rendering.\n */\nconst templateCache = new WeakMap<TemplateStringsArray, Template>();\n\n/**\n * Object specifying options for controlling lit-html rendering. Note that\n * while `render` may be called multiple times on the same `container` (and\n * `renderBefore` reference node) to efficiently update the rendered content,\n * only the options passed in during the first render are respected during\n * the lifetime of renders to that unique `container` + `renderBefore`\n * combination.\n */\nexport interface RenderOptions {\n  /**\n   * An object to use as the `this` value for event listeners. It's often\n   * useful to set this to the host component rendering a template.\n   */\n  host?: object;\n  /**\n   * A DOM node before which to render content in the container.\n   */\n  renderBefore?: ChildNode | null;\n  /**\n   * Node used for cloning the template (`importNode` will be called on this\n   * node). This controls the `ownerDocument` of the rendered DOM, along with\n   * any inherited context. Defaults to the global `document`.\n   */\n  creationScope?: {importNode(node: Node, deep?: boolean): Node};\n  /**\n   * The initial connected state for the top-level part being rendered. If no\n   * `isConnected` option is set, `AsyncDirective`s will be connected by\n   * default. Set to `false` if the initial render occurs in a disconnected tree\n   * and `AsyncDirective`s should see `isConnected === false` for their initial\n   * render. The `part.setConnected()` method must be used subsequent to initial\n   * render to change the connected state of the part.\n   */\n  isConnected?: boolean;\n}\n\n/**\n * The root DOM node for rendering.\n */\nexport type RenderRootNode = HTMLElement | SVGElement | DocumentFragment;\n\nconst walker = d.createTreeWalker(\n  d,\n  129 /* NodeFilter.SHOW_{ELEMENT|COMMENT} */\n);\n\nlet sanitizerFactoryInternal: SanitizerFactory = noopSanitizer;\n\n//\n// Classes only below here, const variable declarations only above here...\n//\n// Keeping variable declarations and classes together improves minification.\n// Interfaces and type aliases can be interleaved freely.\n//\n\n// Type for classes that have a `_directive` or `_directives[]` field, used by\n// `resolveDirective`\nexport interface DirectiveParent {\n  _$parent?: DirectiveParent;\n  _$isConnected: boolean;\n  __directive?: Directive;\n  __directives?: Array<Directive | undefined>;\n}\n\nfunction trustFromTemplateString(\n  tsa: TemplateStringsArray,\n  stringFromTSA: string\n): TrustedHTML {\n  // A security check to prevent spoofing of Lit template results.\n  // In the future, we may be able to replace this with Array.isTemplateObject,\n  // though we might need to make that check inside of the html and svg\n  // functions, because precompiled templates don't come in as\n  // TemplateStringArray objects.\n  if (!isArray(tsa) || !tsa.hasOwnProperty('raw')) {\n    let message = 'invalid template strings array';\n    if (DEV_MODE) {\n      message = `\n          Internal Error: expected template strings to be an array\n          with a 'raw' field. Faking a template strings array by\n          calling html or svg like an ordinary function is effectively\n          the same as calling unsafeHtml and can lead to major security\n          issues, e.g. opening your code up to XSS attacks.\n          If you're using the html or svg tagged template functions normally\n          and still seeing this error, please file a bug at\n          https://github.com/lit/lit/issues/new?template=bug_report.md\n          and include information about your build tooling, if any.\n        `\n        .trim()\n        .replace(/\\n */g, '\\n');\n    }\n    throw new Error(message);\n  }\n  return policy !== undefined\n    ? policy.createHTML(stringFromTSA)\n    : (stringFromTSA as unknown as TrustedHTML);\n}\n\n/**\n * Returns an HTML string for the given TemplateStringsArray and result type\n * (HTML or SVG), along with the case-sensitive bound attribute names in\n * template order. The HTML contains comment markers denoting the `ChildPart`s\n * and suffixes on bound attributes denoting the `AttributeParts`.\n *\n * @param strings template strings array\n * @param type HTML or SVG\n * @return Array containing `[html, attrNames]` (array returned for terseness,\n *     to avoid object fields since this code is shared with non-minified SSR\n *     code)\n */\nconst getTemplateHtml = (\n  strings: TemplateStringsArray,\n  type: ResultType\n): [TrustedHTML, Array<string>] => {\n  // Insert makers into the template HTML to represent the position of\n  // bindings. The following code scans the template strings to determine the\n  // syntactic position of the bindings. They can be in text position, where\n  // we insert an HTML comment, attribute value position, where we insert a\n  // sentinel string and re-write the attribute name, or inside a tag where\n  // we insert the sentinel string.\n  const l = strings.length - 1;\n  // Stores the case-sensitive bound attribute names in the order of their\n  // parts. ElementParts are also reflected in this array as undefined\n  // rather than a string, to disambiguate from attribute bindings.\n  const attrNames: Array<string> = [];\n  let html =\n    type === SVG_RESULT ? '<svg>' : type === MATHML_RESULT ? '<math>' : '';\n\n  // When we're inside a raw text tag (not it's text content), the regex\n  // will still be tagRegex so we can find attributes, but will switch to\n  // this regex when the tag ends.\n  let rawTextEndRegex: RegExp | undefined;\n\n  // The current parsing state, represented as a reference to one of the\n  // regexes\n  let regex = textEndRegex;\n\n  for (let i = 0; i < l; i++) {\n    const s = strings[i];\n    // The index of the end of the last attribute name. When this is\n    // positive at end of a string, it means we're in an attribute value\n    // position and need to rewrite the attribute name.\n    // We also use a special value of -2 to indicate that we encountered\n    // the end of a string in attribute name position.\n    let attrNameEndIndex = -1;\n    let attrName: string | undefined;\n    let lastIndex = 0;\n    let match!: RegExpExecArray | null;\n\n    // The conditions in this loop handle the current parse state, and the\n    // assignments to the `regex` variable are the state transitions.\n    while (lastIndex < s.length) {\n      // Make sure we start searching from where we previously left off\n      regex.lastIndex = lastIndex;\n      match = regex.exec(s);\n      if (match === null) {\n        break;\n      }\n      lastIndex = regex.lastIndex;\n      if (regex === textEndRegex) {\n        if (match[COMMENT_START] === '!--') {\n          regex = commentEndRegex;\n        } else if (match[COMMENT_START] !== undefined) {\n          // We started a weird comment, like </{\n          regex = comment2EndRegex;\n        } else if (match[TAG_NAME] !== undefined) {\n          if (rawTextElement.test(match[TAG_NAME])) {\n            // Record if we encounter a raw-text element. We'll switch to\n            // this regex at the end of the tag.\n            rawTextEndRegex = new RegExp(`</${match[TAG_NAME]}`, 'g');\n          }\n          regex = tagEndRegex;\n        } else if (match[DYNAMIC_TAG_NAME] !== undefined) {\n          if (DEV_MODE) {\n            throw new Error(\n              'Bindings in tag names are not supported. Please use static templates instead. ' +\n                'See https://lit.dev/docs/templates/expressions/#static-expressions'\n            );\n          }\n          regex = tagEndRegex;\n        }\n      } else if (regex === tagEndRegex) {\n        if (match[ENTIRE_MATCH] === '>') {\n          // End of a tag. If we had started a raw-text element, use that\n          // regex\n          regex = rawTextEndRegex ?? textEndRegex;\n          // We may be ending an unquoted attribute value, so make sure we\n          // clear any pending attrNameEndIndex\n          attrNameEndIndex = -1;\n        } else if (match[ATTRIBUTE_NAME] === undefined) {\n          // Attribute name position\n          attrNameEndIndex = -2;\n        } else {\n          attrNameEndIndex = regex.lastIndex - match[SPACES_AND_EQUALS].length;\n          attrName = match[ATTRIBUTE_NAME];\n          regex =\n            match[QUOTE_CHAR] === undefined\n              ? tagEndRegex\n              : match[QUOTE_CHAR] === '\"'\n                ? doubleQuoteAttrEndRegex\n                : singleQuoteAttrEndRegex;\n        }\n      } else if (\n        regex === doubleQuoteAttrEndRegex ||\n        regex === singleQuoteAttrEndRegex\n      ) {\n        regex = tagEndRegex;\n      } else if (regex === commentEndRegex || regex === comment2EndRegex) {\n        regex = textEndRegex;\n      } else {\n        // Not one of the five state regexes, so it must be the dynamically\n        // created raw text regex and we're at the close of that element.\n        regex = tagEndRegex;\n        rawTextEndRegex = undefined;\n      }\n    }\n\n    if (DEV_MODE) {\n      // If we have a attrNameEndIndex, which indicates that we should\n      // rewrite the attribute name, assert that we're in a valid attribute\n      // position - either in a tag, or a quoted attribute value.\n      console.assert(\n        attrNameEndIndex === -1 ||\n          regex === tagEndRegex ||\n          regex === singleQuoteAttrEndRegex ||\n          regex === doubleQuoteAttrEndRegex,\n        'unexpected parse state B'\n      );\n    }\n\n    // We have four cases:\n    //  1. We're in text position, and not in a raw text element\n    //     (regex === textEndRegex): insert a comment marker.\n    //  2. We have a non-negative attrNameEndIndex which means we need to\n    //     rewrite the attribute name to add a bound attribute suffix.\n    //  3. We're at the non-first binding in a multi-binding attribute, use a\n    //     plain marker.\n    //  4. We're somewhere else inside the tag. If we're in attribute name\n    //     position (attrNameEndIndex === -2), add a sequential suffix to\n    //     generate a unique attribute name.\n\n    // Detect a binding next to self-closing tag end and insert a space to\n    // separate the marker from the tag end:\n    const end =\n      regex === tagEndRegex && strings[i + 1].startsWith('/>') ? ' ' : '';\n    html +=\n      regex === textEndRegex\n        ? s + nodeMarker\n        : attrNameEndIndex >= 0\n          ? (attrNames.push(attrName!),\n            s.slice(0, attrNameEndIndex) +\n              boundAttributeSuffix +\n              s.slice(attrNameEndIndex)) +\n            marker +\n            end\n          : s + marker + (attrNameEndIndex === -2 ? i : end);\n  }\n\n  const htmlResult: string | TrustedHTML =\n    html +\n    (strings[l] || '<?>') +\n    (type === SVG_RESULT ? '</svg>' : type === MATHML_RESULT ? '</math>' : '');\n\n  // Returned as an array for terseness\n  return [trustFromTemplateString(strings, htmlResult), attrNames];\n};\n\n/** @internal */\nexport type {Template};\nclass Template {\n  /** @internal */\n  el!: HTMLTemplateElement;\n\n  parts: Array<TemplatePart> = [];\n\n  constructor(\n    // This property needs to remain unminified.\n    {strings, ['_$litType$']: type}: UncompiledTemplateResult,\n    options?: RenderOptions\n  ) {\n    let node: Node | null;\n    let nodeIndex = 0;\n    let attrNameIndex = 0;\n    const partCount = strings.length - 1;\n    const parts = this.parts;\n\n    // Create template element\n    const [html, attrNames] = getTemplateHtml(strings, type);\n    this.el = Template.createElement(html, options);\n    walker.currentNode = this.el.content;\n\n    // Re-parent SVG or MathML nodes into template root\n    if (type === SVG_RESULT || type === MATHML_RESULT) {\n      const wrapper = this.el.content.firstChild!;\n      wrapper.replaceWith(...wrapper.childNodes);\n    }\n\n    // Walk the template to find binding markers and create TemplateParts\n    while ((node = walker.nextNode()) !== null && parts.length < partCount) {\n      if (node.nodeType === 1) {\n        if (DEV_MODE) {\n          const tag = (node as Element).localName;\n          // Warn if `textarea` includes an expression and throw if `template`\n          // does since these are not supported. We do this by checking\n          // innerHTML for anything that looks like a marker. This catches\n          // cases like bindings in textarea there markers turn into text nodes.\n          if (\n            /^(?:textarea|template)$/i!.test(tag) &&\n            (node as Element).innerHTML.includes(marker)\n          ) {\n            const m =\n              `Expressions are not supported inside \\`${tag}\\` ` +\n              `elements. See https://lit.dev/msg/expression-in-${tag} for more ` +\n              `information.`;\n            if (tag === 'template') {\n              throw new Error(m);\n            } else issueWarning('', m);\n          }\n        }\n        // TODO (justinfagnani): for attempted dynamic tag names, we don't\n        // increment the bindingIndex, and it'll be off by 1 in the element\n        // and off by two after it.\n        if ((node as Element).hasAttributes()) {\n          for (const name of (node as Element).getAttributeNames()) {\n            if (name.endsWith(boundAttributeSuffix)) {\n              const realName = attrNames[attrNameIndex++];\n              const value = (node as Element).getAttribute(name)!;\n              const statics = value.split(marker);\n              const m = /([.?@])?(.*)/.exec(realName)!;\n              parts.push({\n                type: ATTRIBUTE_PART,\n                index: nodeIndex,\n                name: m[2],\n                strings: statics,\n                ctor:\n                  m[1] === '.'\n                    ? PropertyPart\n                    : m[1] === '?'\n                      ? BooleanAttributePart\n                      : m[1] === '@'\n                        ? EventPart\n                        : AttributePart,\n              });\n              (node as Element).removeAttribute(name);\n            } else if (name.startsWith(marker)) {\n              parts.push({\n                type: ELEMENT_PART,\n                index: nodeIndex,\n              });\n              (node as Element).removeAttribute(name);\n            }\n          }\n        }\n        // TODO (justinfagnani): benchmark the regex against testing for each\n        // of the 3 raw text element names.\n        if (rawTextElement.test((node as Element).tagName)) {\n          // For raw text elements we need to split the text content on\n          // markers, create a Text node for each segment, and create\n          // a TemplatePart for each marker.\n          const strings = (node as Element).textContent!.split(marker);\n          const lastIndex = strings.length - 1;\n          if (lastIndex > 0) {\n            (node as Element).textContent = trustedTypes\n              ? (trustedTypes.emptyScript as unknown as '')\n              : '';\n            // Generate a new text node for each literal section\n            // These nodes are also used as the markers for child parts\n            for (let i = 0; i < lastIndex; i++) {\n              (node as Element).append(strings[i], createMarker());\n              // Walk past the marker node we just added\n              walker.nextNode();\n              parts.push({type: CHILD_PART, index: ++nodeIndex});\n            }\n            // Note because this marker is added after the walker's current\n            // node, it will be walked to in the outer loop (and ignored), so\n            // we don't need to adjust nodeIndex here\n            (node as Element).append(strings[lastIndex], createMarker());\n          }\n        }\n      } else if (node.nodeType === 8) {\n        const data = (node as Comment).data;\n        if (data === markerMatch) {\n          parts.push({type: CHILD_PART, index: nodeIndex});\n        } else {\n          let i = -1;\n          while ((i = (node as Comment).data.indexOf(marker, i + 1)) !== -1) {\n            // Comment node has a binding marker inside, make an inactive part\n            // The binding won't work, but subsequent bindings will\n            parts.push({type: COMMENT_PART, index: nodeIndex});\n            // Move to the end of the match\n            i += marker.length - 1;\n          }\n        }\n      }\n      nodeIndex++;\n    }\n\n    if (DEV_MODE) {\n      // If there was a duplicate attribute on a tag, then when the tag is\n      // parsed into an element the attribute gets de-duplicated. We can detect\n      // this mismatch if we haven't precisely consumed every attribute name\n      // when preparing the template. This works because `attrNames` is built\n      // from the template string and `attrNameIndex` comes from processing the\n      // resulting DOM.\n      if (attrNames.length !== attrNameIndex) {\n        throw new Error(\n          `Detected duplicate attribute bindings. This occurs if your template ` +\n            `has duplicate attributes on an element tag. For example ` +\n            `\"<input ?disabled=\\${true} ?disabled=\\${false}>\" contains a ` +\n            `duplicate \"disabled\" attribute. The error was detected in ` +\n            `the following template: \\n` +\n            '`' +\n            strings.join('${...}') +\n            '`'\n        );\n      }\n    }\n\n    // We could set walker.currentNode to another node here to prevent a memory\n    // leak, but every time we prepare a template, we immediately render it\n    // and re-use the walker in new TemplateInstance._clone().\n    debugLogEvent &&\n      debugLogEvent({\n        kind: 'template prep',\n        template: this,\n        clonableTemplate: this.el,\n        parts: this.parts,\n        strings,\n      });\n  }\n\n  // Overridden via `litHtmlPolyfillSupport` to provide platform support.\n  /** @nocollapse */\n  static createElement(html: TrustedHTML, _options?: RenderOptions) {\n    const el = d.createElement('template');\n    el.innerHTML = html as unknown as string;\n    return el;\n  }\n}\n\nexport interface Disconnectable {\n  _$parent?: Disconnectable;\n  _$disconnectableChildren?: Set<Disconnectable>;\n  // Rather than hold connection state on instances, Disconnectables recursively\n  // fetch the connection state from the RootPart they are connected in via\n  // getters up the Disconnectable tree via _$parent references. This pushes the\n  // cost of tracking the isConnected state to `AsyncDirectives`, and avoids\n  // needing to pass all Disconnectables (parts, template instances, and\n  // directives) their connection state each time it changes, which would be\n  // costly for trees that have no AsyncDirectives.\n  _$isConnected: boolean;\n}\n\nfunction resolveDirective(\n  part: ChildPart | AttributePart | ElementPart,\n  value: unknown,\n  parent: DirectiveParent = part,\n  attributeIndex?: number\n): unknown {\n  // Bail early if the value is explicitly noChange. Note, this means any\n  // nested directive is still attached and is not run.\n  if (value === noChange) {\n    return value;\n  }\n  let currentDirective =\n    attributeIndex !== undefined\n      ? (parent as AttributePart).__directives?.[attributeIndex]\n      : (parent as ChildPart | ElementPart | Directive).__directive;\n  const nextDirectiveConstructor = isPrimitive(value)\n    ? undefined\n    : // This property needs to remain unminified.\n      (value as DirectiveResult)['_$litDirective$'];\n  if (currentDirective?.constructor !== nextDirectiveConstructor) {\n    // This property needs to remain unminified.\n    currentDirective?.['_$notifyDirectiveConnectionChanged']?.(false);\n    if (nextDirectiveConstructor === undefined) {\n      currentDirective = undefined;\n    } else {\n      currentDirective = new nextDirectiveConstructor(part as PartInfo);\n      currentDirective._$initialize(part, parent, attributeIndex);\n    }\n    if (attributeIndex !== undefined) {\n      ((parent as AttributePart).__directives ??= [])[attributeIndex] =\n        currentDirective;\n    } else {\n      (parent as ChildPart | Directive).__directive = currentDirective;\n    }\n  }\n  if (currentDirective !== undefined) {\n    value = resolveDirective(\n      part,\n      currentDirective._$resolve(part, (value as DirectiveResult).values),\n      currentDirective,\n      attributeIndex\n    );\n  }\n  return value;\n}\n\nexport type {TemplateInstance};\n/**\n * An updateable instance of a Template. Holds references to the Parts used to\n * update the template instance.\n */\nclass TemplateInstance implements Disconnectable {\n  _$template: Template;\n  _$parts: Array<Part | undefined> = [];\n\n  /** @internal */\n  _$parent: ChildPart;\n  /** @internal */\n  _$disconnectableChildren?: Set<Disconnectable> = undefined;\n\n  constructor(template: Template, parent: ChildPart) {\n    this._$template = template;\n    this._$parent = parent;\n  }\n\n  // Called by ChildPart parentNode getter\n  get parentNode() {\n    return this._$parent.parentNode;\n  }\n\n  // See comment in Disconnectable interface for why this is a getter\n  get _$isConnected() {\n    return this._$parent._$isConnected;\n  }\n\n  // This method is separate from the constructor because we need to return a\n  // DocumentFragment and we don't want to hold onto it with an instance field.\n  _clone(options: RenderOptions | undefined) {\n    const {\n      el: {content},\n      parts: parts,\n    } = this._$template;\n    const fragment = (options?.creationScope ?? d).importNode(content, true);\n    walker.currentNode = fragment;\n\n    let node = walker.nextNode()!;\n    let nodeIndex = 0;\n    let partIndex = 0;\n    let templatePart = parts[0];\n\n    while (templatePart !== undefined) {\n      if (nodeIndex === templatePart.index) {\n        let part: Part | undefined;\n        if (templatePart.type === CHILD_PART) {\n          part = new ChildPart(\n            node as HTMLElement,\n            node.nextSibling,\n            this,\n            options\n          );\n        } else if (templatePart.type === ATTRIBUTE_PART) {\n          part = new templatePart.ctor(\n            node as HTMLElement,\n            templatePart.name,\n            templatePart.strings,\n            this,\n            options\n          );\n        } else if (templatePart.type === ELEMENT_PART) {\n          part = new ElementPart(node as HTMLElement, this, options);\n        }\n        this._$parts.push(part);\n        templatePart = parts[++partIndex];\n      }\n      if (nodeIndex !== templatePart?.index) {\n        node = walker.nextNode()!;\n        nodeIndex++;\n      }\n    }\n    // We need to set the currentNode away from the cloned tree so that we\n    // don't hold onto the tree even if the tree is detached and should be\n    // freed.\n    walker.currentNode = d;\n    return fragment;\n  }\n\n  _update(values: Array<unknown>) {\n    let i = 0;\n    for (const part of this._$parts) {\n      if (part !== undefined) {\n        debugLogEvent &&\n          debugLogEvent({\n            kind: 'set part',\n            part,\n            value: values[i],\n            valueIndex: i,\n            values,\n            templateInstance: this,\n          });\n        if ((part as AttributePart).strings !== undefined) {\n          (part as AttributePart)._$setValue(values, part as AttributePart, i);\n          // The number of values the part consumes is part.strings.length - 1\n          // since values are in between template spans. We increment i by 1\n          // later in the loop, so increment it by part.strings.length - 2 here\n          i += (part as AttributePart).strings!.length - 2;\n        } else {\n          part._$setValue(values[i]);\n        }\n      }\n      i++;\n    }\n  }\n}\n\n/*\n * Parts\n */\ntype AttributeTemplatePart = {\n  readonly type: typeof ATTRIBUTE_PART;\n  readonly index: number;\n  readonly name: string;\n  readonly ctor: typeof AttributePart;\n  readonly strings: ReadonlyArray<string>;\n};\ntype ChildTemplatePart = {\n  readonly type: typeof CHILD_PART;\n  readonly index: number;\n};\ntype ElementTemplatePart = {\n  readonly type: typeof ELEMENT_PART;\n  readonly index: number;\n};\ntype CommentTemplatePart = {\n  readonly type: typeof COMMENT_PART;\n  readonly index: number;\n};\n\n/**\n * A TemplatePart represents a dynamic part in a template, before the template\n * is instantiated. When a template is instantiated Parts are created from\n * TemplateParts.\n */\ntype TemplatePart =\n  | ChildTemplatePart\n  | AttributeTemplatePart\n  | ElementTemplatePart\n  | CommentTemplatePart;\n\nexport type Part =\n  | ChildPart\n  | AttributePart\n  | PropertyPart\n  | BooleanAttributePart\n  | ElementPart\n  | EventPart;\n\nexport type {ChildPart};\nclass ChildPart implements Disconnectable {\n  readonly type = CHILD_PART;\n  readonly options: RenderOptions | undefined;\n  _$committedValue: unknown = nothing;\n  /** @internal */\n  __directive?: Directive;\n  /** @internal */\n  _$startNode: ChildNode;\n  /** @internal */\n  _$endNode: ChildNode | null;\n  private _textSanitizer: ValueSanitizer | undefined;\n  /** @internal */\n  _$parent: Disconnectable | undefined;\n  /**\n   * Connection state for RootParts only (i.e. ChildPart without _$parent\n   * returned from top-level `render`). This field is unused otherwise. The\n   * intention would be clearer if we made `RootPart` a subclass of `ChildPart`\n   * with this field (and a different _$isConnected getter), but the subclass\n   * caused a perf regression, possibly due to making call sites polymorphic.\n   * @internal\n   */\n  __isConnected: boolean;\n\n  // See comment in Disconnectable interface for why this is a getter\n  get _$isConnected() {\n    // ChildParts that are not at the root should always be created with a\n    // parent; only RootChildNode's won't, so they return the local isConnected\n    // state\n    return this._$parent?._$isConnected ?? this.__isConnected;\n  }\n\n  // The following fields will be patched onto ChildParts when required by\n  // AsyncDirective\n  /** @internal */\n  _$disconnectableChildren?: Set<Disconnectable> = undefined;\n  /** @internal */\n  _$notifyConnectionChanged?(\n    isConnected: boolean,\n    removeFromParent?: boolean,\n    from?: number\n  ): void;\n  /** @internal */\n  _$reparentDisconnectables?(parent: Disconnectable): void;\n\n  constructor(\n    startNode: ChildNode,\n    endNode: ChildNode | null,\n    parent: TemplateInstance | ChildPart | undefined,\n    options: RenderOptions | undefined\n  ) {\n    this._$startNode = startNode;\n    this._$endNode = endNode;\n    this._$parent = parent;\n    this.options = options;\n    // Note __isConnected is only ever accessed on RootParts (i.e. when there is\n    // no _$parent); the value on a non-root-part is \"don't care\", but checking\n    // for parent would be more code\n    this.__isConnected = options?.isConnected ?? true;\n    if (ENABLE_EXTRA_SECURITY_HOOKS) {\n      // Explicitly initialize for consistent class shape.\n      this._textSanitizer = undefined;\n    }\n  }\n\n  /**\n   * The parent node into which the part renders its content.\n   *\n   * A ChildPart's content consists of a range of adjacent child nodes of\n   * `.parentNode`, possibly bordered by 'marker nodes' (`.startNode` and\n   * `.endNode`).\n   *\n   * - If both `.startNode` and `.endNode` are non-null, then the part's content\n   * consists of all siblings between `.startNode` and `.endNode`, exclusively.\n   *\n   * - If `.startNode` is non-null but `.endNode` is null, then the part's\n   * content consists of all siblings following `.startNode`, up to and\n   * including the last child of `.parentNode`. If `.endNode` is non-null, then\n   * `.startNode` will always be non-null.\n   *\n   * - If both `.endNode` and `.startNode` are null, then the part's content\n   * consists of all child nodes of `.parentNode`.\n   */\n  get parentNode(): Node {\n    let parentNode: Node = wrap(this._$startNode).parentNode!;\n    const parent = this._$parent;\n    if (\n      parent !== undefined &&\n      parentNode?.nodeType === 11 /* Node.DOCUMENT_FRAGMENT */\n    ) {\n      // If the parentNode is a DocumentFragment, it may be because the DOM is\n      // still in the cloned fragment during initial render; if so, get the real\n      // parentNode the part will be committed into by asking the parent.\n      parentNode = (parent as ChildPart | TemplateInstance).parentNode;\n    }\n    return parentNode;\n  }\n\n  /**\n   * The part's leading marker node, if any. See `.parentNode` for more\n   * information.\n   */\n  get startNode(): Node | null {\n    return this._$startNode;\n  }\n\n  /**\n   * The part's trailing marker node, if any. See `.parentNode` for more\n   * information.\n   */\n  get endNode(): Node | null {\n    return this._$endNode;\n  }\n\n  _$setValue(value: unknown, directiveParent: DirectiveParent = this): void {\n    if (DEV_MODE && this.parentNode === null) {\n      throw new Error(\n        `This \\`ChildPart\\` has no \\`parentNode\\` and therefore cannot accept a value. This likely means the element containing the part was manipulated in an unsupported way outside of Lit's control such that the part's marker nodes were ejected from DOM. For example, setting the element's \\`innerHTML\\` or \\`textContent\\` can do this.`\n      );\n    }\n    value = resolveDirective(this, value, directiveParent);\n    if (isPrimitive(value)) {\n      // Non-rendering child values. It's important that these do not render\n      // empty text nodes to avoid issues with preventing default <slot>\n      // fallback content.\n      if (value === nothing || value == null || value === '') {\n        if (this._$committedValue !== nothing) {\n          debugLogEvent &&\n            debugLogEvent({\n              kind: 'commit nothing to child',\n              start: this._$startNode,\n              end: this._$endNode,\n              parent: this._$parent,\n              options: this.options,\n            });\n          this._$clear();\n        }\n        this._$committedValue = nothing;\n      } else if (value !== this._$committedValue && value !== noChange) {\n        this._commitText(value);\n      }\n      // This property needs to remain unminified.\n    } else if ((value as TemplateResult)['_$litType$'] !== undefined) {\n      this._commitTemplateResult(value as TemplateResult);\n    } else if ((value as Node).nodeType !== undefined) {\n      if (DEV_MODE && this.options?.host === value) {\n        this._commitText(\n          `[probable mistake: rendered a template's host in itself ` +\n            `(commonly caused by writing \\${this} in a template]`\n        );\n        console.warn(\n          `Attempted to render the template host`,\n          value,\n          `inside itself. This is almost always a mistake, and in dev mode `,\n          `we render some warning text. In production however, we'll `,\n          `render it, which will usually result in an error, and sometimes `,\n          `in the element disappearing from the DOM.`\n        );\n        return;\n      }\n      this._commitNode(value as Node);\n    } else if (isIterable(value)) {\n      this._commitIterable(value);\n    } else {\n      // Fallback, will render the string representation\n      this._commitText(value);\n    }\n  }\n\n  private _insert<T extends Node>(node: T) {\n    return wrap(wrap(this._$startNode).parentNode!).insertBefore(\n      node,\n      this._$endNode\n    );\n  }\n\n  private _commitNode(value: Node): void {\n    if (this._$committedValue !== value) {\n      this._$clear();\n      if (\n        ENABLE_EXTRA_SECURITY_HOOKS &&\n        sanitizerFactoryInternal !== noopSanitizer\n      ) {\n        const parentNodeName = this._$startNode.parentNode?.nodeName;\n        if (parentNodeName === 'STYLE' || parentNodeName === 'SCRIPT') {\n          let message = 'Forbidden';\n          if (DEV_MODE) {\n            if (parentNodeName === 'STYLE') {\n              message =\n                `Lit does not support binding inside style nodes. ` +\n                `This is a security risk, as style injection attacks can ` +\n                `exfiltrate data and spoof UIs. ` +\n                `Consider instead using css\\`...\\` literals ` +\n                `to compose styles, and do dynamic styling with ` +\n                `css custom properties, ::parts, <slot>s, ` +\n                `and by mutating the DOM rather than stylesheets.`;\n            } else {\n              message =\n                `Lit does not support binding inside script nodes. ` +\n                `This is a security risk, as it could allow arbitrary ` +\n                `code execution.`;\n            }\n          }\n          throw new Error(message);\n        }\n      }\n      debugLogEvent &&\n        debugLogEvent({\n          kind: 'commit node',\n          start: this._$startNode,\n          parent: this._$parent,\n          value: value,\n          options: this.options,\n        });\n      this._$committedValue = this._insert(value);\n    }\n  }\n\n  private _commitText(value: unknown): void {\n    // If the committed value is a primitive it means we called _commitText on\n    // the previous render, and we know that this._$startNode.nextSibling is a\n    // Text node. We can now just replace the text content (.data) of the node.\n    if (\n      this._$committedValue !== nothing &&\n      isPrimitive(this._$committedValue)\n    ) {\n      const node = wrap(this._$startNode).nextSibling as Text;\n      if (ENABLE_EXTRA_SECURITY_HOOKS) {\n        if (this._textSanitizer === undefined) {\n          this._textSanitizer = createSanitizer(node, 'data', 'property');\n        }\n        value = this._textSanitizer(value);\n      }\n      debugLogEvent &&\n        debugLogEvent({\n          kind: 'commit text',\n          node,\n          value,\n          options: this.options,\n        });\n      (node as Text).data = value as string;\n    } else {\n      if (ENABLE_EXTRA_SECURITY_HOOKS) {\n        const textNode = d.createTextNode('');\n        this._commitNode(textNode);\n        // When setting text content, for security purposes it matters a lot\n        // what the parent is. For example, <style> and <script> need to be\n        // handled with care, while <span> does not. So first we need to put a\n        // text node into the document, then we can sanitize its content.\n        if (this._textSanitizer === undefined) {\n          this._textSanitizer = createSanitizer(textNode, 'data', 'property');\n        }\n        value = this._textSanitizer(value);\n        debugLogEvent &&\n          debugLogEvent({\n            kind: 'commit text',\n            node: textNode,\n            value,\n            options: this.options,\n          });\n        textNode.data = value as string;\n      } else {\n        this._commitNode(d.createTextNode(value as string));\n        debugLogEvent &&\n          debugLogEvent({\n            kind: 'commit text',\n            node: wrap(this._$startNode).nextSibling as Text,\n            value,\n            options: this.options,\n          });\n      }\n    }\n    this._$committedValue = value;\n  }\n\n  private _commitTemplateResult(\n    result: TemplateResult | CompiledTemplateResult\n  ): void {\n    // This property needs to remain unminified.\n    const {values, ['_$litType$']: type} = result;\n    // If $litType$ is a number, result is a plain TemplateResult and we get\n    // the template from the template cache. If not, result is a\n    // CompiledTemplateResult and _$litType$ is a CompiledTemplate and we need\n    // to create the <template> element the first time we see it.\n    const template: Template | CompiledTemplate =\n      typeof type === 'number'\n        ? this._$getTemplate(result as UncompiledTemplateResult)\n        : (type.el === undefined &&\n            (type.el = Template.createElement(\n              trustFromTemplateString(type.h, type.h[0]),\n              this.options\n            )),\n          type);\n\n    if ((this._$committedValue as TemplateInstance)?._$template === template) {\n      debugLogEvent &&\n        debugLogEvent({\n          kind: 'template updating',\n          template,\n          instance: this._$committedValue as TemplateInstance,\n          parts: (this._$committedValue as TemplateInstance)._$parts,\n          options: this.options,\n          values,\n        });\n      (this._$committedValue as TemplateInstance)._update(values);\n    } else {\n      const instance = new TemplateInstance(template as Template, this);\n      const fragment = instance._clone(this.options);\n      debugLogEvent &&\n        debugLogEvent({\n          kind: 'template instantiated',\n          template,\n          instance,\n          parts: instance._$parts,\n          options: this.options,\n          fragment,\n          values,\n        });\n      instance._update(values);\n      debugLogEvent &&\n        debugLogEvent({\n          kind: 'template instantiated and updated',\n          template,\n          instance,\n          parts: instance._$parts,\n          options: this.options,\n          fragment,\n          values,\n        });\n      this._commitNode(fragment);\n      this._$committedValue = instance;\n    }\n  }\n\n  // Overridden via `litHtmlPolyfillSupport` to provide platform support.\n  /** @internal */\n  _$getTemplate(result: UncompiledTemplateResult) {\n    let template = templateCache.get(result.strings);\n    if (template === undefined) {\n      templateCache.set(result.strings, (template = new Template(result)));\n    }\n    return template;\n  }\n\n  private _commitIterable(value: Iterable<unknown>): void {\n    // For an Iterable, we create a new InstancePart per item, then set its\n    // value to the item. This is a little bit of overhead for every item in\n    // an Iterable, but it lets us recurse easily and efficiently update Arrays\n    // of TemplateResults that will be commonly returned from expressions like:\n    // array.map((i) => html`${i}`), by reusing existing TemplateInstances.\n\n    // If value is an array, then the previous render was of an\n    // iterable and value will contain the ChildParts from the previous\n    // render. If value is not an array, clear this part and make a new\n    // array for ChildParts.\n    if (!isArray(this._$committedValue)) {\n      this._$committedValue = [];\n      this._$clear();\n    }\n\n    // Lets us keep track of how many items we stamped so we can clear leftover\n    // items from a previous render\n    const itemParts = this._$committedValue as ChildPart[];\n    let partIndex = 0;\n    let itemPart: ChildPart | undefined;\n\n    for (const item of value) {\n      if (partIndex === itemParts.length) {\n        // If no existing part, create a new one\n        // TODO (justinfagnani): test perf impact of always creating two parts\n        // instead of sharing parts between nodes\n        // https://github.com/lit/lit/issues/1266\n        itemParts.push(\n          (itemPart = new ChildPart(\n            this._insert(createMarker()),\n            this._insert(createMarker()),\n            this,\n            this.options\n          ))\n        );\n      } else {\n        // Reuse an existing part\n        itemPart = itemParts[partIndex];\n      }\n      itemPart._$setValue(item);\n      partIndex++;\n    }\n\n    if (partIndex < itemParts.length) {\n      // itemParts always have end nodes\n      this._$clear(\n        itemPart && wrap(itemPart._$endNode!).nextSibling,\n        partIndex\n      );\n      // Truncate the parts array so _value reflects the current state\n      itemParts.length = partIndex;\n    }\n  }\n\n  /**\n   * Removes the nodes contained within this Part from the DOM.\n   *\n   * @param start Start node to clear from, for clearing a subset of the part's\n   *     DOM (used when truncating iterables)\n   * @param from  When `start` is specified, the index within the iterable from\n   *     which ChildParts are being removed, used for disconnecting directives\n   *     in those Parts.\n   *\n   * @internal\n   */\n  _$clear(\n    start: ChildNode | null = wrap(this._$startNode).nextSibling,\n    from?: number\n  ) {\n    this._$notifyConnectionChanged?.(false, true, from);\n    while (start !== this._$endNode) {\n      // The non-null assertion is safe because if _$startNode.nextSibling is\n      // null, then _$endNode is also null, and we would not have entered this\n      // loop.\n      const n = wrap(start!).nextSibling;\n      wrap(start!).remove();\n      start = n;\n    }\n  }\n\n  /**\n   * Implementation of RootPart's `isConnected`. Note that this method\n   * should only be called on `RootPart`s (the `ChildPart` returned from a\n   * top-level `render()` call). It has no effect on non-root ChildParts.\n   * @param isConnected Whether to set\n   * @internal\n   */\n  setConnected(isConnected: boolean) {\n    if (this._$parent === undefined) {\n      this.__isConnected = isConnected;\n      this._$notifyConnectionChanged?.(isConnected);\n    } else if (DEV_MODE) {\n      throw new Error(\n        'part.setConnected() may only be called on a ' +\n          'RootPart returned from render().'\n      );\n    }\n  }\n}\n\n/**\n * A top-level `ChildPart` returned from `render` that manages the connected\n * state of `AsyncDirective`s created throughout the tree below it.\n */\nexport interface RootPart extends ChildPart {\n  /**\n   * Sets the connection state for `AsyncDirective`s contained within this root\n   * ChildPart.\n   *\n   * lit-html does not automatically monitor the connectedness of DOM rendered;\n   * as such, it is the responsibility of the caller to `render` to ensure that\n   * `part.setConnected(false)` is called before the part object is potentially\n   * discarded, to ensure that `AsyncDirective`s have a chance to dispose of\n   * any resources being held. If a `RootPart` that was previously\n   * disconnected is subsequently re-connected (and its `AsyncDirective`s should\n   * re-connect), `setConnected(true)` should be called.\n   *\n   * @param isConnected Whether directives within this tree should be connected\n   * or not\n   */\n  setConnected(isConnected: boolean): void;\n}\n\nexport type {AttributePart};\nclass AttributePart implements Disconnectable {\n  readonly type:\n    | typeof ATTRIBUTE_PART\n    | typeof PROPERTY_PART\n    | typeof BOOLEAN_ATTRIBUTE_PART\n    | typeof EVENT_PART = ATTRIBUTE_PART;\n  readonly element: HTMLElement;\n  readonly name: string;\n  readonly options: RenderOptions | undefined;\n\n  /**\n   * If this attribute part represents an interpolation, this contains the\n   * static strings of the interpolation. For single-value, complete bindings,\n   * this is undefined.\n   */\n  readonly strings?: ReadonlyArray<string>;\n  /** @internal */\n  _$committedValue: unknown | Array<unknown> = nothing;\n  /** @internal */\n  __directives?: Array<Directive | undefined>;\n  /** @internal */\n  _$parent: Disconnectable;\n  /** @internal */\n  _$disconnectableChildren?: Set<Disconnectable> = undefined;\n\n  protected _sanitizer: ValueSanitizer | undefined;\n\n  get tagName() {\n    return this.element.tagName;\n  }\n\n  // See comment in Disconnectable interface for why this is a getter\n  get _$isConnected() {\n    return this._$parent._$isConnected;\n  }\n\n  constructor(\n    element: HTMLElement,\n    name: string,\n    strings: ReadonlyArray<string>,\n    parent: Disconnectable,\n    options: RenderOptions | undefined\n  ) {\n    this.element = element;\n    this.name = name;\n    this._$parent = parent;\n    this.options = options;\n    if (strings.length > 2 || strings[0] !== '' || strings[1] !== '') {\n      this._$committedValue = new Array(strings.length - 1).fill(new String());\n      this.strings = strings;\n    } else {\n      this._$committedValue = nothing;\n    }\n    if (ENABLE_EXTRA_SECURITY_HOOKS) {\n      this._sanitizer = undefined;\n    }\n  }\n\n  /**\n   * Sets the value of this part by resolving the value from possibly multiple\n   * values and static strings and committing it to the DOM.\n   * If this part is single-valued, `this._strings` will be undefined, and the\n   * method will be called with a single value argument. If this part is\n   * multi-value, `this._strings` will be defined, and the method is called\n   * with the value array of the part's owning TemplateInstance, and an offset\n   * into the value array from which the values should be read.\n   * This method is overloaded this way to eliminate short-lived array slices\n   * of the template instance values, and allow a fast-path for single-valued\n   * parts.\n   *\n   * @param value The part value, or an array of values for multi-valued parts\n   * @param valueIndex the index to start reading values from. `undefined` for\n   *   single-valued parts\n   * @param noCommit causes the part to not commit its value to the DOM. Used\n   *   in hydration to prime attribute parts with their first-rendered value,\n   *   but not set the attribute, and in SSR to no-op the DOM operation and\n   *   capture the value for serialization.\n   *\n   * @internal\n   */\n  _$setValue(\n    value: unknown | Array<unknown>,\n    directiveParent: DirectiveParent = this,\n    valueIndex?: number,\n    noCommit?: boolean\n  ) {\n    const strings = this.strings;\n\n    // Whether any of the values has changed, for dirty-checking\n    let change = false;\n\n    if (strings === undefined) {\n      // Single-value binding case\n      value = resolveDirective(this, value, directiveParent, 0);\n      change =\n        !isPrimitive(value) ||\n        (value !== this._$committedValue && value !== noChange);\n      if (change) {\n        this._$committedValue = value;\n      }\n    } else {\n      // Interpolation case\n      const values = value as Array<unknown>;\n      value = strings[0];\n\n      let i, v;\n      for (i = 0; i < strings.length - 1; i++) {\n        v = resolveDirective(this, values[valueIndex! + i], directiveParent, i);\n\n        if (v === noChange) {\n          // If the user-provided value is `noChange`, use the previous value\n          v = (this._$committedValue as Array<unknown>)[i];\n        }\n        change ||=\n          !isPrimitive(v) || v !== (this._$committedValue as Array<unknown>)[i];\n        if (v === nothing) {\n          value = nothing;\n        } else if (value !== nothing) {\n          value += (v ?? '') + strings[i + 1];\n        }\n        // We always record each value, even if one is `nothing`, for future\n        // change detection.\n        (this._$committedValue as Array<unknown>)[i] = v;\n      }\n    }\n    if (change && !noCommit) {\n      this._commitValue(value);\n    }\n  }\n\n  /** @internal */\n  _commitValue(value: unknown) {\n    if (value === nothing) {\n      (wrap(this.element) as Element).removeAttribute(this.name);\n    } else {\n      if (ENABLE_EXTRA_SECURITY_HOOKS) {\n        if (this._sanitizer === undefined) {\n          this._sanitizer = sanitizerFactoryInternal(\n            this.element,\n            this.name,\n            'attribute'\n          );\n        }\n        value = this._sanitizer(value ?? '');\n      }\n      debugLogEvent &&\n        debugLogEvent({\n          kind: 'commit attribute',\n          element: this.element,\n          name: this.name,\n          value,\n          options: this.options,\n        });\n      (wrap(this.element) as Element).setAttribute(\n        this.name,\n        (value ?? '') as string\n      );\n    }\n  }\n}\n\nexport type {PropertyPart};\nclass PropertyPart extends AttributePart {\n  override readonly type = PROPERTY_PART;\n\n  /** @internal */\n  override _commitValue(value: unknown) {\n    if (ENABLE_EXTRA_SECURITY_HOOKS) {\n      if (this._sanitizer === undefined) {\n        this._sanitizer = sanitizerFactoryInternal(\n          this.element,\n          this.name,\n          'property'\n        );\n      }\n      value = this._sanitizer(value);\n    }\n    debugLogEvent &&\n      debugLogEvent({\n        kind: 'commit property',\n        element: this.element,\n        name: this.name,\n        value,\n        options: this.options,\n      });\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    (this.element as any)[this.name] = value === nothing ? undefined : value;\n  }\n}\n\nexport type {BooleanAttributePart};\nclass BooleanAttributePart extends AttributePart {\n  override readonly type = BOOLEAN_ATTRIBUTE_PART;\n\n  /** @internal */\n  override _commitValue(value: unknown) {\n    debugLogEvent &&\n      debugLogEvent({\n        kind: 'commit boolean attribute',\n        element: this.element,\n        name: this.name,\n        value: !!(value && value !== nothing),\n        options: this.options,\n      });\n    (wrap(this.element) as Element).toggleAttribute(\n      this.name,\n      !!value && value !== nothing\n    );\n  }\n}\n\ntype EventListenerWithOptions = EventListenerOrEventListenerObject &\n  Partial<AddEventListenerOptions>;\n\n/**\n * An AttributePart that manages an event listener via add/removeEventListener.\n *\n * This part works by adding itself as the event listener on an element, then\n * delegating to the value passed to it. This reduces the number of calls to\n * add/removeEventListener if the listener changes frequently, such as when an\n * inline function is used as a listener.\n *\n * Because event options are passed when adding listeners, we must take case\n * to add and remove the part as a listener when the event options change.\n */\nexport type {EventPart};\nclass EventPart extends AttributePart {\n  override readonly type = EVENT_PART;\n\n  constructor(\n    element: HTMLElement,\n    name: string,\n    strings: ReadonlyArray<string>,\n    parent: Disconnectable,\n    options: RenderOptions | undefined\n  ) {\n    super(element, name, strings, parent, options);\n\n    if (DEV_MODE && this.strings !== undefined) {\n      throw new Error(\n        `A \\`<${element.localName}>\\` has a \\`@${name}=...\\` listener with ` +\n          'invalid content. Event listeners in templates must have exactly ' +\n          'one expression and no surrounding text.'\n      );\n    }\n  }\n\n  // EventPart does not use the base _$setValue/_resolveValue implementation\n  // since the dirty checking is more complex\n  /** @internal */\n  override _$setValue(\n    newListener: unknown,\n    directiveParent: DirectiveParent = this\n  ) {\n    newListener =\n      resolveDirective(this, newListener, directiveParent, 0) ?? nothing;\n    if (newListener === noChange) {\n      return;\n    }\n    const oldListener = this._$committedValue;\n\n    // If the new value is nothing or any options change we have to remove the\n    // part as a listener.\n    const shouldRemoveListener =\n      (newListener === nothing && oldListener !== nothing) ||\n      (newListener as EventListenerWithOptions).capture !==\n        (oldListener as EventListenerWithOptions).capture ||\n      (newListener as EventListenerWithOptions).once !==\n        (oldListener as EventListenerWithOptions).once ||\n      (newListener as EventListenerWithOptions).passive !==\n        (oldListener as EventListenerWithOptions).passive;\n\n    // If the new value is not nothing and we removed the listener, we have\n    // to add the part as a listener.\n    const shouldAddListener =\n      newListener !== nothing &&\n      (oldListener === nothing || shouldRemoveListener);\n\n    debugLogEvent &&\n      debugLogEvent({\n        kind: 'commit event listener',\n        element: this.element,\n        name: this.name,\n        value: newListener,\n        options: this.options,\n        removeListener: shouldRemoveListener,\n        addListener: shouldAddListener,\n        oldListener,\n      });\n    if (shouldRemoveListener) {\n      this.element.removeEventListener(\n        this.name,\n        this,\n        oldListener as EventListenerWithOptions\n      );\n    }\n    if (shouldAddListener) {\n      this.element.addEventListener(\n        this.name,\n        this,\n        newListener as EventListenerWithOptions\n      );\n    }\n    this._$committedValue = newListener;\n  }\n\n  handleEvent(event: Event) {\n    if (typeof this._$committedValue === 'function') {\n      this._$committedValue.call(this.options?.host ?? this.element, event);\n    } else {\n      (this._$committedValue as EventListenerObject).handleEvent(event);\n    }\n  }\n}\n\nexport type {ElementPart};\nclass ElementPart implements Disconnectable {\n  readonly type = ELEMENT_PART;\n\n  /** @internal */\n  __directive?: Directive;\n\n  // This is to ensure that every Part has a _$committedValue\n  _$committedValue: undefined;\n\n  /** @internal */\n  _$parent!: Disconnectable;\n\n  /** @internal */\n  _$disconnectableChildren?: Set<Disconnectable> = undefined;\n\n  options: RenderOptions | undefined;\n\n  constructor(\n    public element: Element,\n    parent: Disconnectable,\n    options: RenderOptions | undefined\n  ) {\n    this._$parent = parent;\n    this.options = options;\n  }\n\n  // See comment in Disconnectable interface for why this is a getter\n  get _$isConnected() {\n    return this._$parent._$isConnected;\n  }\n\n  _$setValue(value: unknown): void {\n    debugLogEvent &&\n      debugLogEvent({\n        kind: 'commit to element binding',\n        element: this.element,\n        value,\n        options: this.options,\n      });\n    resolveDirective(this, value);\n  }\n}\n\n/**\n * END USERS SHOULD NOT RELY ON THIS OBJECT.\n *\n * Private exports for use by other Lit packages, not intended for use by\n * external users.\n *\n * We currently do not make a mangled rollup build of the lit-ssr code. In order\n * to keep a number of (otherwise private) top-level exports mangled in the\n * client side code, we export a _$LH object containing those members (or\n * helper methods for accessing private fields of those members), and then\n * re-export them for use in lit-ssr. This keeps lit-ssr agnostic to whether the\n * client-side code is being used in `dev` mode or `prod` mode.\n *\n * This has a unique name, to disambiguate it from private exports in\n * lit-element, which re-exports all of lit-html.\n *\n * @private\n */\nexport const _$LH = {\n  // Used in lit-ssr\n  _boundAttributeSuffix: boundAttributeSuffix,\n  _marker: marker,\n  _markerMatch: markerMatch,\n  _HTML_RESULT: HTML_RESULT,\n  _getTemplateHtml: getTemplateHtml,\n  // Used in tests and private-ssr-support\n  _TemplateInstance: TemplateInstance,\n  _isIterable: isIterable,\n  _resolveDirective: resolveDirective,\n  _ChildPart: ChildPart,\n  _AttributePart: AttributePart,\n  _BooleanAttributePart: BooleanAttributePart,\n  _EventPart: EventPart,\n  _PropertyPart: PropertyPart,\n  _ElementPart: ElementPart,\n};\n\n// Apply polyfills if available\nconst polyfillSupport = DEV_MODE\n  ? global.litHtmlPolyfillSupportDevMode\n  : global.litHtmlPolyfillSupport;\npolyfillSupport?.(Template, ChildPart);\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n(global.litHtmlVersions ??= []).push('3.3.3');\nif (DEV_MODE && global.litHtmlVersions.length > 1) {\n  queueMicrotask(() => {\n    issueWarning!(\n      'multiple-versions',\n      `Multiple versions of Lit loaded. ` +\n        `Loading multiple versions is not recommended.`\n    );\n  });\n}\n\n/**\n * Renders a value, usually a lit-html TemplateResult, to the container.\n *\n * This example renders the text \"Hello, Zoe!\" inside a paragraph tag, appending\n * it to the container `document.body`.\n *\n * ```js\n * import {html, render} from 'lit';\n *\n * const name = \"Zoe\";\n * render(html`<p>Hello, ${name}!</p>`, document.body);\n * ```\n *\n * @param value Any [renderable\n *   value](https://lit.dev/docs/templates/expressions/#child-expressions),\n *   typically a {@linkcode TemplateResult} created by evaluating a template tag\n *   like {@linkcode html} or {@linkcode svg}.\n * @param container A DOM container to render to. The first render will append\n *   the rendered value to the container, and subsequent renders will\n *   efficiently update the rendered value if the same result type was\n *   previously rendered there.\n * @param options See {@linkcode RenderOptions} for options documentation.\n * @see\n * {@link https://lit.dev/docs/libraries/standalone-templates/#rendering-lit-html-templates| Rendering Lit HTML Templates}\n */\nexport const render = (\n  value: unknown,\n  container: RenderRootNode,\n  options?: RenderOptions\n): RootPart => {\n  if (DEV_MODE && container == null) {\n    // Give a clearer error message than\n    //     Uncaught TypeError: Cannot read properties of null (reading\n    //     '_$litPart$')\n    // which reads like an internal Lit error.\n    throw new TypeError(`The container to render into may not be ${container}`);\n  }\n  const renderId = DEV_MODE ? debugLogRenderId++ : 0;\n  const partOwnerNode = options?.renderBefore ?? container;\n  // This property needs to remain unminified.\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  let part: ChildPart = (partOwnerNode as any)['_$litPart$'];\n  debugLogEvent &&\n    debugLogEvent({\n      kind: 'begin render',\n      id: renderId,\n      value,\n      container,\n      options,\n      part,\n    });\n  if (part === undefined) {\n    const endNode = options?.renderBefore ?? null;\n    // This property needs to remain unminified.\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    (partOwnerNode as any)['_$litPart$'] = part = new ChildPart(\n      container.insertBefore(createMarker(), endNode),\n      endNode,\n      undefined,\n      options ?? {}\n    );\n  }\n  part._$setValue(value);\n  debugLogEvent &&\n    debugLogEvent({\n      kind: 'end render',\n      id: renderId,\n      value,\n      container,\n      options,\n      part,\n    });\n  return part as RootPart;\n};\n\nif (ENABLE_EXTRA_SECURITY_HOOKS) {\n  render.setSanitizer = setSanitizer;\n  render.createSanitizer = createSanitizer;\n  if (DEV_MODE) {\n    render._testOnlyClearSanitizerFactoryDoNotCallOrElse =\n      _testOnlyClearSanitizerFactoryDoNotCallOrElse;\n  }\n}\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport {Disconnectable, Part} from './lit-html.js';\n\nexport {\n  AttributePart,\n  BooleanAttributePart,\n  ChildPart,\n  ElementPart,\n  EventPart,\n  Part,\n  PropertyPart,\n} from './lit-html.js';\n\nexport interface DirectiveClass {\n  new (part: PartInfo): Directive;\n}\n\n/**\n * This utility type extracts the signature of a directive class's render()\n * method so we can use it for the type of the generated directive function.\n */\nexport type DirectiveParameters<C extends Directive> = Parameters<C['render']>;\n\n/**\n * A generated directive function doesn't evaluate the directive, but just\n * returns a DirectiveResult object that captures the arguments.\n */\nexport interface DirectiveResult<C extends DirectiveClass = DirectiveClass> {\n  /**\n   * This property needs to remain unminified.\n   * @internal\n   */\n  ['_$litDirective$']: C;\n  /** @internal */\n  values: DirectiveParameters<InstanceType<C>>;\n}\n\nexport const PartType = {\n  ATTRIBUTE: 1,\n  CHILD: 2,\n  PROPERTY: 3,\n  BOOLEAN_ATTRIBUTE: 4,\n  EVENT: 5,\n  ELEMENT: 6,\n} as const;\n\nexport type PartType = (typeof PartType)[keyof typeof PartType];\n\nexport interface ChildPartInfo {\n  readonly type: typeof PartType.CHILD;\n}\n\nexport interface AttributePartInfo {\n  readonly type:\n    | typeof PartType.ATTRIBUTE\n    | typeof PartType.PROPERTY\n    | typeof PartType.BOOLEAN_ATTRIBUTE\n    | typeof PartType.EVENT;\n  readonly strings?: ReadonlyArray<string>;\n  readonly name: string;\n  readonly tagName: string;\n}\n\nexport interface ElementPartInfo {\n  readonly type: typeof PartType.ELEMENT;\n}\n\n/**\n * Information about the part a directive is bound to.\n *\n * This is useful for checking that a directive is attached to a valid part,\n * such as with directive that can only be used on attribute bindings.\n */\nexport type PartInfo = ChildPartInfo | AttributePartInfo | ElementPartInfo;\n\n/**\n * Creates a user-facing directive function from a Directive class. This\n * function has the same parameters as the directive's render() method.\n */\nexport const directive =\n  <C extends DirectiveClass>(c: C) =>\n  (...values: DirectiveParameters<InstanceType<C>>): DirectiveResult<C> => ({\n    // This property needs to remain unminified.\n    ['_$litDirective$']: c,\n    values,\n  });\n\n/**\n * Base class for creating custom directives. Users should extend this class,\n * implement `render` and/or `update`, and then pass their subclass to\n * `directive`.\n */\nexport abstract class Directive implements Disconnectable {\n  //@internal\n  __part!: Part;\n  //@internal\n  __attributeIndex: number | undefined;\n  //@internal\n  __directive?: Directive;\n\n  //@internal\n  _$parent!: Disconnectable;\n\n  // These will only exist on the AsyncDirective subclass\n  //@internal\n  _$disconnectableChildren?: Set<Disconnectable>;\n  // This property needs to remain unminified.\n  //@internal\n  ['_$notifyDirectiveConnectionChanged']?(isConnected: boolean): void;\n\n  constructor(_partInfo: PartInfo) {}\n\n  // See comment in Disconnectable interface for why this is a getter\n  get _$isConnected() {\n    return this._$parent._$isConnected;\n  }\n\n  /** @internal */\n  _$initialize(\n    part: Part,\n    parent: Disconnectable,\n    attributeIndex: number | undefined\n  ) {\n    this.__part = part;\n    this._$parent = parent;\n    this.__attributeIndex = attributeIndex;\n  }\n  /** @internal */\n  _$resolve(part: Part, props: Array<unknown>): unknown {\n    return this.update(part, props);\n  }\n\n  abstract render(...props: Array<unknown>): unknown;\n\n  update(_part: Part, props: Array<unknown>): unknown {\n    return this.render(...props);\n  }\n}\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport {nothing, TemplateResult, noChange} from '../lit-html.js';\nimport {directive, Directive, PartInfo, PartType} from '../directive.js';\n\nconst HTML_RESULT = 1;\n\nexport class UnsafeHTMLDirective extends Directive {\n  static directiveName = 'unsafeHTML';\n  static resultType = HTML_RESULT;\n\n  private _value: unknown = nothing;\n  private _templateResult?: TemplateResult;\n\n  constructor(partInfo: PartInfo) {\n    super(partInfo);\n    if (partInfo.type !== PartType.CHILD) {\n      throw new Error(\n        `${\n          (this.constructor as typeof UnsafeHTMLDirective).directiveName\n        }() can only be used in child bindings`\n      );\n    }\n  }\n\n  render(value: string | typeof nothing | typeof noChange | undefined | null) {\n    if (value === nothing || value == null) {\n      this._templateResult = undefined;\n      return (this._value = value);\n    }\n    if (value === noChange) {\n      return value;\n    }\n    if (typeof value != 'string') {\n      throw new Error(\n        `${\n          (this.constructor as typeof UnsafeHTMLDirective).directiveName\n        }() called with a non-string value`\n      );\n    }\n    if (value === this._value) {\n      return this._templateResult;\n    }\n    this._value = value;\n    const strings = [value] as unknown as TemplateStringsArray;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    (strings as any).raw = strings;\n    // WARNING: impersonating a TemplateResult like this is extremely\n    // dangerous. Third-party directives should not do this.\n    return (this._templateResult = {\n      // Cast to a known set of integers that satisfy ResultType so that we\n      // don't have to export ResultType and possibly encourage this pattern.\n      // This property needs to remain unminified.\n      ['_$litType$']: (this.constructor as typeof UnsafeHTMLDirective)\n        .resultType as 1 | 2,\n      strings,\n      values: [],\n    });\n  }\n}\n\n/**\n * Renders the result as HTML, rather than text.\n *\n * The values `undefined`, `null`, and `nothing`, will all result in no content\n * (empty string) being rendered.\n *\n * Note, this is unsafe to use with any user-provided input that hasn't been\n * sanitized or escaped, as it may lead to cross-site-scripting\n * vulnerabilities.\n */\nexport const unsafeHTML = directive(UnsafeHTMLDirective);\n", "import notifications from '../notifications'\n\nexport default class SubscribeButton {\n  button: HTMLButtonElement\n  static selector = 'button.subscribe'\n\n  constructor(elem: HTMLButtonElement) {\n    this.button = elem\n    this.button.addEventListener('click', () => {\n      if (notifications.isSubscribed) notifications.unsubscribe()\n      else notifications.subscribe()\n    })\n    this.setSubscribeState(notifications.isSubscribed)\n  }\n\n  setSubscribeState(active: boolean) {\n    if (!notifications.canSubscribe) return\n    this.button.removeAttribute('disabled')\n    if (active) {\n      this.button.querySelector('i')!.innerText = 'notifications_on'\n      this.button.querySelector('span')!.innerText = 'St\u00E4ng av notifieringar'\n      this.button.classList.add('active')\n    } else {\n      this.button.querySelector('i')!.innerText = 'notifications_off'\n      this.button.querySelector('span')!.innerText = 'Aktivera notifieringar'\n      this.button.classList.remove('active')\n    }\n  }\n}\n", "'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n  return function wrap() {\n    return fn.apply(thisArg, arguments);\n  };\n}\n", "'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst { toString } = Object.prototype;\nconst { getPrototypeOf } = Object;\nconst { iterator, toStringTag } = Symbol;\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (\n  ({ hasOwnProperty }) =>\n  (obj, prop) =>\n    hasOwnProperty.call(obj, prop)\n)(Object.prototype);\n\nconst isUnsafeObjectKey = (prop) =>\n  typeof prop === 'string' &&\n  (prop === '__proto__' || prop === 'constructor' || prop === 'prototype');\n\n/**\n * Determine whether an inherited object must be treated as a shared-prototype\n * boundary. Cross-realm Object.prototype objects cannot be distinguished\n * reliably from application-created null-prototype objects because their\n * properties are mutable, so all inherited terminal prototypes are excluded\n * as a fail-closed boundary. A null-prototype source still keeps its own\n * properties, as produced by mergeConfig and other safe materialization paths.\n *\n * @param {*} obj The object to inspect\n * @param {*} prototype The object's prototype\n * @param {boolean} source Whether obj is the original traversal source\n *\n * @returns {boolean} True when obj is a safe prototype traversal boundary\n */\nconst isPrototypeBoundary = (obj, prototype, source) =>\n  obj === Object.prototype || (!source && prototype === null);\n\n/**\n * Determine whether an object can retain its identity through code paths that\n * add, replace, and remove config properties without bypassing unsafe-key\n * filtering. Immutable objects, unsafe-key-bearing objects, and objects with\n * accessor or restricted data properties must be materialized instead.\n *\n * @param {*} obj The object to inspect\n *\n * @returns {boolean} True when every own property is safe and fully mutable\n */\nconst isSafeAndFullyMutable = (obj) => {\n  if (!Object.isExtensible(obj)) {\n    return false;\n  }\n\n  const props = Object.getOwnPropertyNames(obj);\n\n  if (Object.getOwnPropertySymbols) {\n    props.push(...Object.getOwnPropertySymbols(obj));\n  }\n\n  return props.every((prop) => {\n    if (isUnsafeObjectKey(prop)) {\n      return false;\n    }\n\n    const descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n\n    return !!descriptor && descriptor.configurable && descriptor.writable === true;\n  });\n};\n\n/**\n * Walk the prototype chain (excluding the source realm's Object.prototype)\n * looking for an own `prop`. This distinguishes genuine own/inherited members\n * \u2014 including class accessors and template prototypes \u2014 from members injected\n * via Object.prototype pollution (e.g. `Object.prototype.username = '...'`),\n * which live on Object.prototype itself and are therefore never matched.\n *\n * @param {*} thing The value whose chain to inspect\n * @param {string|symbol} prop The property key to look for\n *\n * @returns {boolean} True when `prop` is owned below Object.prototype\n */\nconst hasOwnInPrototypeChain = (thing, prop) => {\n  let obj = thing;\n  const seen = [];\n\n  while (obj != null) {\n    if (seen.indexOf(obj) !== -1) {\n      return false;\n    }\n    seen.push(obj);\n\n    const prototype = getPrototypeOf(obj);\n\n    if (isPrototypeBoundary(obj, prototype, obj === thing)) {\n      return false;\n    }\n\n    if (hasOwnProperty(obj, prop)) {\n      return true;\n    }\n    obj = prototype;\n  }\n  return false;\n};\n\n/**\n * Read `obj[prop]` only when it is safe from Object.prototype pollution. Own\n * properties and members inherited from a non-Object.prototype source (a class\n * instance or template object) are honored; a value reachable only through a\n * polluted Object.prototype is ignored and `undefined` is returned.\n *\n * @param {*} obj The source object\n * @param {string|symbol} prop The property key to read\n *\n * @returns {*} The resolved value, or undefined when unsafe/absent\n */\nconst getSafeProp = (obj, prop) =>\n  obj != null && hasOwnInPrototypeChain(obj, prop) ? obj[prop] : undefined;\n\n/**\n * Flatten an object and its application-defined prototype chain into a\n * null-prototype object. Members inherited only from the source realm's\n * Object.prototype are deliberately excluded, while class/template members\n * below that boundary are preserved.\n *\n * @param {*} thing The value to flatten\n *\n * @returns {*} A null-prototype copy, or the original value when it is already\n * structurally safe or is not an object\n */\nconst toSafeFlatObject = (thing) => {\n  if (thing == null || (typeof thing !== 'object' && typeof thing !== 'function')) {\n    return thing;\n  }\n\n  const sourcePrototype = getPrototypeOf(thing);\n\n  if (sourcePrototype === null && isSafeAndFullyMutable(thing)) {\n    return thing;\n  }\n\n  const result = Object.create(null);\n  const merged = Object.create(null);\n  const seen = [];\n  let current = thing;\n\n  while (current != null) {\n    if (seen.indexOf(current) !== -1) {\n      break;\n    }\n\n    seen.push(current);\n\n    const prototype = current === thing ? sourcePrototype : getPrototypeOf(current);\n\n    if (isPrototypeBoundary(current, prototype, current === thing)) {\n      break;\n    }\n\n    const props = Object.getOwnPropertyNames(current);\n\n    if (Object.getOwnPropertySymbols) {\n      props.push(...Object.getOwnPropertySymbols(current));\n    }\n\n    for (const prop of props) {\n      if (isUnsafeObjectKey(prop)) {\n        continue;\n      }\n\n      if (!hasOwnProperty(merged, prop)) {\n        result[prop] = thing[prop];\n        merged[prop] = true;\n      }\n    }\n\n    current = prototype;\n  }\n\n  return result;\n};\n\nconst kindOf = ((cache) => (thing) => {\n  const str = toString.call(thing);\n  return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n  type = type.toLowerCase();\n  return (thing) => kindOf(thing) === type;\n};\n\nconst typeOfTest = (type) => (thing) => typeof thing === type;\n\n/**\n * Determine if a value is a non-null object\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst { isArray } = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return (\n    val !== null &&\n    !isUndefined(val) &&\n    val.constructor !== null &&\n    !isUndefined(val.constructor) &&\n    isFunction(val.constructor.isBuffer) &&\n    val.constructor.isBuffer(val)\n  );\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  let result;\n  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = val && val.buffer && isArrayBuffer(val.buffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = (thing) => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n  if (!isObject(val)) {\n    return false;\n  }\n\n  const prototype = getPrototypeOf(val);\n  return (\n    (prototype === null || prototype === Object.prototype || getPrototypeOf(prototype) === null) &&\n    // Treat safe own/inherited Symbol.toStringTag or Symbol.iterator members as\n    // evidence the value is tagged/iterable, while ignoring members reachable\n    // only through shared or terminal prototype boundaries.\n    !hasOwnInPrototypeChain(val, toStringTag) &&\n    !hasOwnInPrototypeChain(val, iterator)\n  );\n};\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n  // Early return for non-objects or Buffers to prevent RangeError\n  if (!isObject(val) || isBuffer(val)) {\n    return false;\n  }\n\n  try {\n    return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n  } catch (e) {\n    // Fallback for any other objects that might cause RangeError with Object.keys()\n    return false;\n  }\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a React Native Blob\n * React Native \"blob\": an object with a `uri` attribute. Optionally, it can\n * also have a `name` and `type` attribute to specify filename and content type\n *\n * @see https://github.com/facebook/react-native/blob/26684cf3adf4094eb6c405d345a75bf8c7c0bf88/Libraries/Network/FormData.js#L68-L71\n *\n * @param {*} value The value to test\n *\n * @returns {boolean} True if value is a React Native Blob, otherwise false\n */\nconst isReactNativeBlob = (value) => {\n  return !!(value && typeof value.uri !== 'undefined');\n};\n\n/**\n * Determine if environment is React Native\n * ReactNative `FormData` has a non-standard `getParts()` method\n *\n * @param {*} formData The formData to test\n *\n * @returns {boolean} True if environment is React Native, otherwise false\n */\nconst isReactNative = (formData) => formData && typeof formData.getParts !== 'undefined';\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a FileList, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\nconst isSet = kindOfTest('Set');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction getGlobal() {\n  if (typeof globalThis !== 'undefined') return globalThis;\n  if (typeof self !== 'undefined') return self;\n  if (typeof window !== 'undefined') return window;\n  if (typeof global !== 'undefined') return global;\n  return {};\n}\n\nconst G = getGlobal();\nconst FormDataCtor = typeof G.FormData !== 'undefined' ? G.FormData : undefined;\n\nconst isFormData = (thing) => {\n  if (!thing) return false;\n  if (FormDataCtor && thing instanceof FormDataCtor) return true;\n  // Reject plain objects inheriting directly from Object.prototype so prototype-pollution gadgets can't spoof FormData.\n  const proto = getPrototypeOf(thing);\n  if (!proto || proto === Object.prototype) return false;\n  if (!isFunction(thing.append)) return false;\n  const kind = kindOf(thing);\n  return (\n    kind === 'formdata' ||\n    // detect form-data instance\n    (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n  );\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = [\n  'ReadableStream',\n  'Request',\n  'Response',\n  'Headers',\n].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => {\n  return str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n};\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array<unknown>} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, { allOwnKeys = false } = {}) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  let i;\n  let l;\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Buffer check\n    if (isBuffer(obj)) {\n      return;\n    }\n\n    // Iterate over object keys\n    const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n    const len = keys.length;\n    let key;\n\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      fn.call(null, obj[key], key, obj);\n    }\n  }\n}\n\n/**\n * Finds a key in an object, case-insensitive, returning the actual key name.\n * Returns null if the object is a Buffer or if no match is found.\n *\n * @param {Object} obj - The object to search.\n * @param {string} key - The key to find (case-insensitive).\n * @returns {?string} The actual key name if found, otherwise null.\n */\nfunction findKey(obj, key) {\n  if (isBuffer(obj)) {\n    return null;\n  }\n\n  key = key.toLowerCase();\n  const keys = Object.keys(obj);\n  let i = keys.length;\n  let _key;\n  while (i-- > 0) {\n    _key = keys[i];\n    if (key === _key.toLowerCase()) {\n      return _key;\n    }\n  }\n  return null;\n}\n\nconst _global = (() => {\n  /*eslint no-undef:0*/\n  if (typeof globalThis !== 'undefined') return globalThis;\n  return typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : global;\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * const result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(...objs) {\n  const { caseless, skipUndefined } = (isContextDefined(this) && this) || {};\n  const result = {};\n  const assignValue = (val, key) => {\n    // Skip dangerous property names to prevent prototype pollution\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return;\n    }\n\n    // findKey lowercases the key, so caseless lookup only applies to strings \u2014\n    // symbol keys are identity-matched.\n    const targetKey = (caseless && typeof key === 'string' && findKey(result, key)) || key;\n    // Read via own-prop only \u2014 a bare `result[targetKey]` walks the prototype\n    // chain, so a polluted Object.prototype value could surface here and get\n    // copied into the merged result.\n    const existing = hasOwnProperty(result, targetKey) ? result[targetKey] : undefined;\n    if (isPlainObject(existing) && isPlainObject(val)) {\n      result[targetKey] = merge(existing, val);\n    } else if (isPlainObject(val)) {\n      result[targetKey] = merge({}, val);\n    } else if (isArray(val)) {\n      result[targetKey] = val.slice();\n    } else if (!skipUndefined || !isUndefined(val)) {\n      result[targetKey] = val;\n    }\n  };\n\n  for (let i = 0, l = objs.length; i < l; i++) {\n    const source = objs[i];\n    if (!source || isBuffer(source)) {\n      continue;\n    }\n\n    forEach(source, assignValue);\n\n    if (typeof source !== 'object' || isArray(source)) {\n      continue;\n    }\n\n    const symbols = Object.getOwnPropertySymbols(source);\n    for (let j = 0; j < symbols.length; j++) {\n      const symbol = symbols[j];\n      if (propertyIsEnumerable.call(source, symbol)) {\n        assignValue(source[symbol], symbol);\n      }\n    }\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, { allOwnKeys } = {}) => {\n  forEach(\n    b,\n    (val, key) => {\n      if (thisArg && isFunction(val)) {\n        Object.defineProperty(a, key, {\n          // Null-proto descriptor so a polluted Object.prototype.get cannot\n          // hijack defineProperty's accessor-vs-data resolution.\n          __proto__: null,\n          value: bind(val, thisArg),\n          writable: true,\n          enumerable: true,\n          configurable: true,\n        });\n      } else {\n        Object.defineProperty(a, key, {\n          __proto__: null,\n          value: val,\n          writable: true,\n          enumerable: true,\n          configurable: true,\n        });\n      }\n    },\n    { allOwnKeys }\n  );\n  return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n  if (content.charCodeAt(0) === 0xfeff) {\n    content = content.slice(1);\n  }\n  return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  Object.defineProperty(constructor.prototype, 'constructor', {\n    __proto__: null,\n    value: constructor,\n    writable: true,\n    enumerable: false,\n    configurable: true,\n  });\n  Object.defineProperty(constructor, 'super', {\n    __proto__: null,\n    value: superConstructor.prototype,\n  });\n  props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n  let props;\n  let i;\n  let prop;\n  const merged = {};\n\n  destObj = destObj || {};\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  if (sourceObj == null) return destObj;\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = filter !== false && getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n  return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  const lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n  if (!thing) return null;\n  if (isArray(thing)) return thing;\n  let i = thing.length;\n  if (!isNumber(i)) return null;\n  const arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = ((TypedArray) => {\n  // eslint-disable-next-line func-names\n  return (thing) => {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n  const generator = obj && obj[iterator];\n\n  const _iterator = generator.call(obj);\n\n  let result;\n\n  while ((result = _iterator.next()) && !result.done) {\n    const pair = result.value;\n    fn.call(obj, pair[0], pair[1]);\n  }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n  let matches;\n  const arr = [];\n\n  while ((matches = regExp.exec(str)) !== null) {\n    arr.push(matches);\n  }\n\n  return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = (str) => {\n  return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n    return p1.toUpperCase() + p2;\n  });\n};\n\nconst { propertyIsEnumerable } = Object.prototype;\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n  const descriptors = Object.getOwnPropertyDescriptors(obj);\n  const reducedDescriptors = {};\n\n  forEach(descriptors, (descriptor, name) => {\n    let ret;\n    if ((ret = reducer(descriptor, name, obj)) !== false) {\n      reducedDescriptors[name] = ret || descriptor;\n    }\n  });\n\n  Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n  reduceDescriptors(obj, (descriptor, name) => {\n    // skip restricted props in strict mode\n    if (isFunction(obj) && ['arguments', 'caller', 'callee'].includes(name)) {\n      return false;\n    }\n\n    const value = obj[name];\n\n    if (!isFunction(value)) return;\n\n    descriptor.enumerable = false;\n\n    if ('writable' in descriptor) {\n      descriptor.writable = false;\n      return;\n    }\n\n    if (!descriptor.set) {\n      descriptor.set = () => {\n        throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n      };\n    }\n  });\n};\n\n/**\n * Converts an array or a delimited string into an object set with values as keys and true as values.\n * Useful for fast membership checks.\n *\n * @param {Array|string} arrayOrString - The array or string to convert.\n * @param {string} delimiter - The delimiter to use if input is a string.\n * @returns {Object} An object with keys from the array or string, values set to true.\n */\nconst toObjectSet = (arrayOrString, delimiter) => {\n  const obj = {};\n\n  const define = (arr) => {\n    arr.forEach((value) => {\n      obj[value] = true;\n    });\n  };\n\n  isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n  return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n  return value != null && Number.isFinite((value = +value)) ? value : defaultValue;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n  return !!(\n    thing &&\n    isFunction(thing.append) &&\n    thing[toStringTag] === 'FormData' &&\n    thing[iterator]\n  );\n}\n\n/**\n * Recursively converts an object to a JSON-compatible object, handling circular references and Buffers.\n *\n * @param {Object} obj - The object to convert.\n * @returns {Object} The JSON-compatible object.\n */\nconst toJSONObject = (obj) => {\n  const visited = new WeakSet();\n\n  const visit = (source) => {\n    if (isObject(source)) {\n      if (visited.has(source)) {\n        return;\n      }\n\n      //Buffer check\n      if (isBuffer(source)) {\n        return source;\n      }\n\n      if (!('toJSON' in source)) {\n        // add-on descent / delete-on-ascent: preserves path semantics, so DAG nodes serialise at every occurrence (see #7230).\n        visited.add(source);\n\n        let target;\n\n        if (isSet(source)) {\n          target = [];\n          for (const value of source) {\n            const reducedValue = visit(value);\n            !isUndefined(reducedValue) && target.push(reducedValue);\n          }\n        } else {\n          target = isArray(source) ? [] : {};\n\n          forEach(source, (value, key) => {\n            const reducedValue = visit(value);\n            !isUndefined(reducedValue) && (target[key] = reducedValue);\n          });\n        }\n\n        visited.delete(source);\n\n        return target;\n      }\n    }\n\n    return source;\n  };\n\n  return visit(obj);\n};\n\n/**\n * Determines if a value is an async function.\n *\n * @param {*} thing - The value to test.\n * @returns {boolean} True if value is an async function, otherwise false.\n */\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\n/**\n * Determines if a value is thenable (has then and catch methods).\n *\n * @param {*} thing - The value to test.\n * @returns {boolean} True if value is thenable, otherwise false.\n */\nconst isThenable = (thing) =>\n  thing &&\n  (isObject(thing) || isFunction(thing)) &&\n  isFunction(thing.then) &&\n  isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\n/**\n * Provides a cross-platform setImmediate implementation.\n * Uses native setImmediate if available, otherwise falls back to postMessage or setTimeout.\n *\n * @param {boolean} setImmediateSupported - Whether setImmediate is supported.\n * @param {boolean} postMessageSupported - Whether postMessage is supported.\n * @returns {Function} A function to schedule a callback asynchronously.\n */\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n  if (setImmediateSupported) {\n    return setImmediate;\n  }\n\n  return postMessageSupported\n    ? ((token, callbacks) => {\n        _global.addEventListener(\n          'message',\n          ({ source, data }) => {\n            if (source === _global && data === token) {\n              callbacks.length && callbacks.shift()();\n            }\n          },\n          false\n        );\n\n        return (cb) => {\n          callbacks.push(cb);\n          _global.postMessage(token, '*');\n        };\n      })(`axios@${Math.random()}`, [])\n    : (cb) => setTimeout(cb);\n})(typeof setImmediate === 'function', isFunction(_global.postMessage));\n\n/**\n * Schedules a microtask or asynchronous callback as soon as possible.\n * Uses queueMicrotask if available, otherwise falls back to process.nextTick or _setImmediate.\n *\n * @type {Function}\n */\nconst asap =\n  typeof queueMicrotask !== 'undefined'\n    ? queueMicrotask.bind(_global)\n    : (typeof process !== 'undefined' && process.nextTick) || _setImmediate;\n\n// *********************\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n/**\n * Determine if a value is iterable via an iterator that is NOT sourced solely\n * from a polluted Object.prototype. Use this instead of `isIterable` whenever\n * the iterable comes from untrusted input (e.g. user-supplied header sources),\n * so `Object.prototype[Symbol.iterator] = ...` cannot turn an ordinary object\n * into an attacker-controlled entries iterator.\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value has a non-polluted iterator\n */\nconst isSafeIterable = (thing) =>\n  thing != null && hasOwnInPrototypeChain(thing, iterator) && isIterable(thing);\n\nexport default {\n  isArray,\n  isArrayBuffer,\n  isBuffer,\n  isFormData,\n  isArrayBufferView,\n  isString,\n  isNumber,\n  isBoolean,\n  isObject,\n  isPlainObject,\n  isEmptyObject,\n  isReadableStream,\n  isRequest,\n  isResponse,\n  isHeaders,\n  isUndefined,\n  isDate,\n  isFile,\n  isReactNativeBlob,\n  isReactNative,\n  isBlob,\n  isRegExp,\n  isFunction,\n  isStream,\n  isURLSearchParams,\n  isTypedArray,\n  isFileList,\n  forEach,\n  merge,\n  extend,\n  trim,\n  stripBOM,\n  inherits,\n  toFlatObject,\n  kindOf,\n  kindOfTest,\n  endsWith,\n  toArray,\n  forEachEntry,\n  matchAll,\n  isHTMLForm,\n  hasOwnProperty,\n  hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n  hasOwnInPrototypeChain,\n  getSafeProp,\n  toSafeFlatObject,\n  reduceDescriptors,\n  freezeMethods,\n  toObjectSet,\n  toCamelCase,\n  noop,\n  toFiniteNumber,\n  findKey,\n  global: _global,\n  isContextDefined,\n  isSpecCompliantForm,\n  toJSONObject,\n  isAsyncFn,\n  isThenable,\n  setImmediate: _setImmediate,\n  asap,\n  isIterable,\n  isSafeIterable,\n};\n", "'use strict';\n\nimport utils from '../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n  'age',\n  'authorization',\n  'content-length',\n  'content-type',\n  'etag',\n  'expires',\n  'from',\n  'host',\n  'if-modified-since',\n  'if-unmodified-since',\n  'last-modified',\n  'location',\n  'max-forwards',\n  'proxy-authorization',\n  'referer',\n  'retry-after',\n  'user-agent',\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default (rawHeaders) => {\n  const parsed = {};\n  let key;\n  let val;\n  let i;\n\n  rawHeaders &&\n    rawHeaders.split('\\n').forEach(function parser(line) {\n      i = line.indexOf(':');\n      key = line.substring(0, i).trim().toLowerCase();\n      val = line.substring(i + 1).trim();\n\n      const hasKey = utils.hasOwnProp(parsed, key);\n\n      if (!key || (hasKey && utils.hasOwnProp(ignoreDuplicateOf, key))) {\n        return;\n      }\n\n      if (key === 'set-cookie') {\n        if (hasKey) {\n          parsed[key].push(val);\n        } else {\n          parsed[key] = [val];\n        }\n      } else {\n        parsed[key] = hasKey ? parsed[key] + ', ' + val : val;\n      }\n    });\n\n  return parsed;\n};\n", "'use strict';\n\nimport utils from '../utils.js';\n\nfunction trimSPorHTAB(str) {\n  let start = 0;\n  let end = str.length;\n\n  while (start < end) {\n    const code = str.charCodeAt(start);\n\n    if (code !== 0x09 && code !== 0x20) {\n      break;\n    }\n\n    start += 1;\n  }\n\n  while (end > start) {\n    const code = str.charCodeAt(end - 1);\n\n    if (code !== 0x09 && code !== 0x20) {\n      break;\n    }\n\n    end -= 1;\n  }\n\n  return start === 0 && end === str.length ? str : str.slice(start, end);\n}\n\n// The control-code ranges are intentional: header sanitization strips C0/DEL bytes.\n// eslint-disable-next-line no-control-regex\nconst INVALID_UNICODE_HEADER_VALUE_CHARS = new RegExp('[\\\\u0000-\\\\u0008\\\\u000a-\\\\u001f\\\\u007f]+', 'g');\n// eslint-disable-next-line no-control-regex\nconst INVALID_BYTE_STRING_HEADER_VALUE_CHARS = new RegExp('[^\\\\u0009\\\\u0020-\\\\u007e\\\\u0080-\\\\u00ff]+', 'g');\n\nfunction sanitizeValue(value, invalidChars) {\n  if (utils.isArray(value)) {\n    return value.map((item) => sanitizeValue(item, invalidChars));\n  }\n\n  return trimSPorHTAB(String(value).replace(invalidChars, ''));\n}\n\nexport const sanitizeHeaderValue = (value) =>\n  sanitizeValue(value, INVALID_UNICODE_HEADER_VALUE_CHARS);\n\nexport const sanitizeByteStringHeaderValue = (value) =>\n  sanitizeValue(value, INVALID_BYTE_STRING_HEADER_VALUE_CHARS);\n\nexport function toByteStringHeaderObject(headers) {\n  const byteStringHeaders = Object.create(null);\n\n  utils.forEach(headers.toJSON(), (value, header) => {\n    byteStringHeaders[header] = sanitizeByteStringHeaderValue(value);\n  });\n\n  return byteStringHeaders;\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\nimport { sanitizeHeaderValue } from '../helpers/sanitizeHeaderValue.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n  return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n  if (value === false || value == null) {\n    return value;\n  }\n\n  return utils.isArray(value) ? value.map(normalizeValue) : sanitizeHeaderValue(String(value));\n}\n\nfunction parseTokens(str) {\n  const tokens = Object.create(null);\n  const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n  let match;\n\n  while ((match = tokensRE.exec(str))) {\n    tokens[match[1]] = match[2];\n  }\n\n  return tokens;\n}\n\nconst parameterNameRE = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\nfunction trimOWS(value) {\n  let start = 0;\n  let end = value.length;\n\n  while (start < end) {\n    const code = value.charCodeAt(start);\n\n    if (code !== 0x09 && code !== 0x20) {\n      break;\n    }\n\n    start += 1;\n  }\n\n  while (end > start) {\n    const code = value.charCodeAt(end - 1);\n\n    if (code !== 0x09 && code !== 0x20) {\n      break;\n    }\n\n    end -= 1;\n  }\n\n  return start === 0 && end === value.length ? value : value.slice(start, end);\n}\n\nfunction decodeQuotedString(value) {\n  const last = value.length - 1;\n\n  if (last < 1 || value.charCodeAt(0) !== 0x22 || value.charCodeAt(last) !== 0x22) {\n    return value;\n  }\n\n  let decoded = '';\n\n  for (let i = 1; i < last; i++) {\n    const code = value.charCodeAt(i);\n\n    if (code === 0x22) {\n      return value;\n    }\n\n    if (code === 0x5c) {\n      i += 1;\n\n      if (i >= last) {\n        return value;\n      }\n    }\n\n    decoded += value[i];\n  }\n\n  return decoded;\n}\n\nfunction parseParameters(value) {\n  const parameters = Object.create(null);\n  const str = String(value);\n  let start = 0;\n  let quoted = false;\n  let escaped = false;\n\n  function parseParameter(end) {\n    const part = trimOWS(str.slice(start, end));\n    const equals = part.indexOf('=');\n\n    if (equals < 1) {\n      return;\n    }\n\n    const name = trimOWS(part.slice(0, equals));\n\n    if (!parameterNameRE.test(name)) {\n      return;\n    }\n\n    const normalizedName = name.toLowerCase();\n\n    if (\n      normalizedName === '__proto__' ||\n      normalizedName === 'constructor' ||\n      normalizedName === 'prototype'\n    ) {\n      return;\n    }\n\n    const parameterValue = trimOWS(part.slice(equals + 1));\n    parameters[normalizedName] = decodeQuotedString(parameterValue);\n  }\n\n  for (let i = 0; i < str.length; i++) {\n    const code = str.charCodeAt(i);\n\n    if (quoted) {\n      if (escaped) {\n        escaped = false;\n      } else if (code === 0x5c) {\n        escaped = true;\n      } else if (code === 0x22) {\n        quoted = false;\n      }\n    } else if (code === 0x22) {\n      quoted = true;\n    } else if (code === 0x2c || code === 0x3b) {\n      parseParameter(i);\n      start = i + 1;\n    }\n  }\n\n  parseParameter(str.length);\n\n  return parameters;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n  if (utils.isFunction(filter)) {\n    return filter.call(this, value, header);\n  }\n\n  if (isHeaderNameFilter) {\n    value = header;\n  }\n\n  if (!utils.isString(value)) return;\n\n  if (utils.isString(filter)) {\n    return value.indexOf(filter) !== -1;\n  }\n\n  if (utils.isRegExp(filter)) {\n    return filter.test(value);\n  }\n}\n\nfunction formatHeader(header) {\n  return header\n    .trim()\n    .toLowerCase()\n    .replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n      return char.toUpperCase() + str;\n    });\n}\n\nfunction buildAccessors(obj, header) {\n  const accessorName = utils.toCamelCase(' ' + header);\n\n  ['get', 'set', 'has'].forEach((methodName) => {\n    Object.defineProperty(obj, methodName + accessorName, {\n      // Null-proto descriptor so a polluted Object.prototype.get cannot turn\n      // this data descriptor into an accessor descriptor on the way in.\n      __proto__: null,\n      value: function (arg1, arg2, arg3) {\n        return this[methodName].call(this, header, arg1, arg2, arg3);\n      },\n      configurable: true,\n    });\n  });\n}\n\nclass AxiosHeaders {\n  constructor(headers) {\n    headers && this.set(headers);\n  }\n\n  set(header, valueOrRewrite, rewrite) {\n    const self = this;\n\n    function setHeader(_value, _header, _rewrite) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!lHeader) {\n        return;\n      }\n\n      const key = utils.findKey(self, lHeader);\n\n      if (\n        !key ||\n        self[key] === undefined ||\n        _rewrite === true ||\n        (_rewrite === undefined && self[key] !== false)\n      ) {\n        self[key || _header] = normalizeValue(_value);\n      }\n    }\n\n    const setHeaders = (headers, _rewrite) =>\n      utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n    if (utils.isPlainObject(header) || header instanceof this.constructor) {\n      setHeaders(header, valueOrRewrite);\n    } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n      setHeaders(parseHeaders(header), valueOrRewrite);\n    } else if (utils.isObject(header) && utils.isSafeIterable(header)) {\n      let obj = Object.create(null),\n        dest,\n        key;\n      for (const entry of header) {\n        if (!utils.isArray(entry)) {\n          throw new TypeError('Object iterator must return a key-value pair');\n        }\n\n        key = entry[0];\n\n        if (utils.hasOwnProp(obj, key)) {\n          dest = obj[key];\n          obj[key] = utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]];\n        } else {\n          obj[key] = entry[1];\n        }\n      }\n\n      setHeaders(obj, valueOrRewrite);\n    } else {\n      header != null && setHeader(valueOrRewrite, header, rewrite);\n    }\n\n    return this;\n  }\n\n  get(header, parser) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      if (key) {\n        const value = this[key];\n\n        if (!parser) {\n          return value;\n        }\n\n        if (parser === true) {\n          return parseTokens(value);\n        }\n\n        if (utils.isFunction(parser)) {\n          return parser.call(this, value, key);\n        }\n\n        if (utils.isRegExp(parser)) {\n          return parser.exec(value);\n        }\n\n        throw new TypeError('parser must be boolean|regexp|function');\n      }\n    }\n  }\n\n  has(header, matcher) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      return !!(\n        key &&\n        this[key] !== undefined &&\n        (!matcher || matchHeaderValue(this, this[key], key, matcher))\n      );\n    }\n\n    return false;\n  }\n\n  delete(header, matcher) {\n    const self = this;\n    let deleted = false;\n\n    function deleteHeader(_header) {\n      _header = normalizeHeader(_header);\n\n      if (_header) {\n        const key = utils.findKey(self, _header);\n\n        if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n          delete self[key];\n\n          deleted = true;\n        }\n      }\n    }\n\n    if (utils.isArray(header)) {\n      header.forEach(deleteHeader);\n    } else {\n      deleteHeader(header);\n    }\n\n    return deleted;\n  }\n\n  clear(matcher) {\n    const keys = Object.keys(this);\n    let i = keys.length;\n    let deleted = false;\n\n    while (i--) {\n      const key = keys[i];\n      if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n        delete this[key];\n        deleted = true;\n      }\n    }\n\n    return deleted;\n  }\n\n  normalize(format) {\n    const self = this;\n    const headers = {};\n\n    utils.forEach(this, (value, header) => {\n      const key = utils.findKey(headers, header);\n\n      if (key) {\n        self[key] = normalizeValue(value);\n        delete self[header];\n        return;\n      }\n\n      const normalized = format ? formatHeader(header) : String(header).trim();\n\n      if (normalized !== header) {\n        delete self[header];\n      }\n\n      self[normalized] = normalizeValue(value);\n\n      headers[normalized] = true;\n    });\n\n    return this;\n  }\n\n  concat(...targets) {\n    return this.constructor.concat(this, ...targets);\n  }\n\n  toJSON(asStrings) {\n    const obj = Object.create(null);\n\n    utils.forEach(this, (value, header) => {\n      value != null &&\n        value !== false &&\n        (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n    });\n\n    return obj;\n  }\n\n  [Symbol.iterator]() {\n    return Object.entries(this.toJSON())[Symbol.iterator]();\n  }\n\n  toString() {\n    return Object.entries(this.toJSON())\n      .map(([header, value]) => header + ': ' + value)\n      .join('\\n');\n  }\n\n  getSetCookie() {\n    const value = this.get('set-cookie');\n    return utils.isArray(value) ? value : value == null || value === false ? [] : [value];\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'AxiosHeaders';\n  }\n\n  static from(thing) {\n    return thing instanceof this ? thing : new this(thing);\n  }\n\n  static parseParameters(value) {\n    return parseParameters(value);\n  }\n\n  static concat(first, ...targets) {\n    const computed = new this(first);\n\n    targets.forEach((target) => computed.set(target));\n\n    return computed;\n  }\n\n  static accessor(header) {\n    const internals =\n      (this[$internals] =\n      this[$internals] =\n        {\n          accessors: {},\n        });\n\n    const accessors = internals.accessors;\n    const prototype = this.prototype;\n\n    function defineAccessor(_header) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!accessors[lHeader]) {\n        buildAccessors(prototype, _header);\n        accessors[lHeader] = true;\n      }\n    }\n\n    utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n    return this;\n  }\n}\n\nAxiosHeaders.accessor([\n  'Content-Type',\n  'Content-Length',\n  'Accept',\n  'Accept-Encoding',\n  'User-Agent',\n  'Authorization',\n]);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({ value }, key) => {\n  let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n  return {\n    get: () => value,\n    set(headerValue) {\n      this[mapped] = headerValue;\n    },\n  };\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nexport const REDACTED = '[REDACTED ****]';\n\nfunction hasOwnOrPrototypeToJSON(source) {\n  if (utils.hasOwnProp(source, 'toJSON')) {\n    return true;\n  }\n\n  let prototype = Object.getPrototypeOf(source);\n\n  while (prototype && prototype !== Object.prototype) {\n    if (utils.hasOwnProp(prototype, 'toJSON')) {\n      return true;\n    }\n\n    prototype = Object.getPrototypeOf(prototype);\n  }\n\n  return false;\n}\n\n// Build a plain-object snapshot of `config` and replace the value of any key\n// (case-insensitive) listed in `redactKeys` with REDACTED. Walks through arrays\n// and AxiosHeaders, and short-circuits on circular references.\nfunction redactConfig(config, redactKeys) {\n  const lowerKeys = new Set(redactKeys.map((k) => String(k).toLowerCase()));\n  const seen = [];\n\n  const visit = (source) => {\n    if (source === null || typeof source !== 'object') return source;\n    if (utils.isBuffer(source)) return source;\n    if (seen.indexOf(source) !== -1) return undefined;\n\n    if (source instanceof AxiosHeaders) {\n      source = source.toJSON();\n    }\n\n    seen.push(source);\n\n    let result;\n    if (utils.isArray(source)) {\n      result = [];\n      source.forEach((v, i) => {\n        const reducedValue = visit(v);\n        if (!utils.isUndefined(reducedValue)) {\n          result[i] = reducedValue;\n        }\n      });\n    } else {\n      if (!utils.isPlainObject(source) && hasOwnOrPrototypeToJSON(source)) {\n        seen.pop();\n        return source;\n      }\n\n      result = Object.create(null);\n      for (const [key, value] of Object.entries(source)) {\n        const reducedValue = lowerKeys.has(key.toLowerCase()) ? REDACTED : visit(value);\n        if (!utils.isUndefined(reducedValue)) {\n          result[key] = reducedValue;\n        }\n      }\n    }\n\n    seen.pop();\n    return result;\n  };\n\n  return visit(config);\n}\n\nfunction stringifySafely(value) {\n  try {\n    return String(value);\n  } catch (err) {\n    return '';\n  }\n}\n\nfunction aggregateErrorMessage(error) {\n  const message = error.errors\n    .map((entry) => {\n      try {\n        return entry && entry.message ? stringifySafely(entry.message) : stringifySafely(entry);\n      } catch (err) {\n        return '';\n      }\n    })\n    .filter(Boolean)\n    .join('; ');\n\n  return message || error.name || 'AggregateError';\n}\n\nclass AxiosError extends Error {\n  static from(error, code, config, request, response, customProps) {\n    // `AggregateError` (thrown by Node on dual-stack/Happy-Eyeballs connection\n    // failures) has an empty `message`; its detail lives in `errors[]`. Without\n    // this, the wrapped error surfaces with a blank message (see #6721).\n    let message = error.message;\n    if (!message && utils.isArray(error.errors) && error.errors.length) {\n      message = aggregateErrorMessage(error);\n    }\n\n    const axiosError = new AxiosError(message, code || error.code, config, request, response);\n    // Match native `Error` `cause` semantics: non-enumerable. The wrapped\n    // error often carries circular internals (sockets, requests, agents), so\n    // an enumerable `cause` makes structured loggers (pino/winston) and any\n    // own-property walk throw \"Converting circular structure to JSON\".\n    // Regression from #6982; see #7205. `__proto__: null` mirrors the\n    // `message` descriptor below (prototype-pollution-safe descriptor).\n    Object.defineProperty(axiosError, 'cause', {\n      __proto__: null,\n      value: error,\n      writable: true,\n      enumerable: false,\n      configurable: true,\n    });\n    axiosError.name = error.name;\n\n    // Preserve status from the original error if not already set from response\n    if (error.status != null && axiosError.status == null) {\n      axiosError.status = error.status;\n    }\n\n    customProps && Object.assign(axiosError, customProps);\n    return axiosError;\n  }\n\n  /**\n   * Create an Error with the specified message, config, error code, request and response.\n   *\n   * @param {string} message The error message.\n   * @param {string} [code] The error code (for example, 'ECONNABORTED').\n   * @param {Object} [config] The config.\n   * @param {Object} [request] The request.\n   * @param {Object} [response] The response.\n   *\n   * @returns {Error} The created error.\n   */\n  constructor(message, code, config, request, response) {\n    super(message);\n\n    // Make message enumerable to maintain backward compatibility\n    // The native Error constructor sets message as non-enumerable,\n    // but axios < v1.13.3 had it as enumerable\n    Object.defineProperty(this, 'message', {\n      // Null-proto descriptor so a polluted Object.prototype.get cannot turn\n      // this data descriptor into an accessor descriptor on the way in.\n      __proto__: null,\n      value: message,\n      enumerable: true,\n      writable: true,\n      configurable: true,\n    });\n\n    this.name = 'AxiosError';\n    this.isAxiosError = true;\n    code && (this.code = code);\n    config && (this.config = config);\n    request && (this.request = request);\n    if (response) {\n      this.response = response;\n      this.status = response.status;\n    }\n  }\n\n  toJSON() {\n    // Opt-in redaction: when the request config carries a `redact` array, the\n    // value of any matching key (case-insensitive, at any depth) is replaced\n    // with REDACTED in the serialized snapshot. Undefined or empty leaves the\n    // existing serialization behavior unchanged.\n    const config = this.config;\n    const redactKeys = config && utils.hasOwnProp(config, 'redact') ? config.redact : undefined;\n    const serializedConfig =\n      utils.isArray(redactKeys) && redactKeys.length > 0\n        ? redactConfig(config, redactKeys)\n        : utils.toJSONObject(config);\n\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: serializedConfig,\n      code: this.code,\n      status: this.status,\n    };\n  }\n}\n\n// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated.\nAxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE';\nAxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION';\nAxiosError.ECONNABORTED = 'ECONNABORTED';\nAxiosError.ETIMEDOUT = 'ETIMEDOUT';\nAxiosError.ECONNREFUSED = 'ECONNREFUSED';\nAxiosError.ERR_NETWORK = 'ERR_NETWORK';\nAxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS';\nAxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED';\nAxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE';\nAxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST';\nAxiosError.ERR_CANCELED = 'ERR_CANCELED';\nAxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';\nAxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';\nAxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED = 'ERR_FORM_DATA_DEPTH_EXCEEDED';\n\nexport default AxiosError;\n", "// eslint-disable-next-line strict\nexport default null;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\nimport PlatformBuffer from '../platform/node/classes/Buffer.js';\n\n// Default nesting limit shared with the inverse transform (formDataToJSON) so\n// the FormData <-> JSON round-trip stays symmetric.\nexport const DEFAULT_FORM_DATA_MAX_DEPTH = 100;\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n  return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n  return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n  if (!path) return key;\n  return path\n    .concat(key)\n    .map(function each(token, i) {\n      // eslint-disable-next-line no-param-reassign\n      token = removeBrackets(token);\n      return !dots && i ? '[' + token + ']' : token;\n    })\n    .join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n  return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n  return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('target must be an object');\n  }\n\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new (PlatformFormData || FormData)();\n\n  const option = (name, fallback) => {\n    const value = utils.getSafeProp(options, name);\n    return utils.isUndefined(value) ? fallback : value;\n  };\n\n  const metaTokens = option('metaTokens', true);\n  // eslint-disable-next-line no-use-before-define\n  const visitor = option('visitor') || defaultVisitor;\n  const dots = option('dots', false);\n  const indexes = option('indexes', false);\n  const _Blob = option('Blob') || (typeof Blob !== 'undefined' && Blob);\n  const maxDepth = option('maxDepth', DEFAULT_FORM_DATA_MAX_DEPTH);\n  const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n  const stack = [];\n\n  if (!utils.isFunction(visitor)) {\n    throw new TypeError('visitor must be a function');\n  }\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (utils.isBoolean(value)) {\n      return value.toString();\n    }\n\n    if (!useBlob && utils.isBlob(value)) {\n      throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      if (useBlob && typeof _Blob === 'function') {\n        return new _Blob([value]);\n      }\n      if (PlatformBuffer && PlatformBuffer.isBufferAvailable()) {\n        return PlatformBuffer.from(value);\n      }\n      throw new AxiosError(\n        'Blob is not supported. Use a Buffer instead.',\n        AxiosError.ERR_NOT_SUPPORT\n      );\n    }\n\n    return value;\n  }\n\n  function throwIfMaxDepthExceeded(depth) {\n    if (depth > maxDepth) {\n      throw new AxiosError(\n        'Object is too deeply nested (' + depth + ' levels). Max depth: ' + maxDepth,\n        AxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED\n      );\n    }\n  }\n\n  function stringifyWithDepthLimit(value, depth) {\n    if (maxDepth === Infinity) {\n      return JSON.stringify(value);\n    }\n\n    const ancestors = [];\n\n    return JSON.stringify(value, function limitDepth(_key, currentValue) {\n      if (!utils.isObject(currentValue)) {\n        return currentValue;\n      }\n\n      while (ancestors.length && ancestors[ancestors.length - 1] !== this) {\n        ancestors.pop();\n      }\n\n      ancestors.push(currentValue);\n      throwIfMaxDepthExceeded(depth + ancestors.length - 1);\n\n      return currentValue;\n    });\n  }\n\n  /**\n   * Default visitor.\n   *\n   * @param {*} value\n   * @param {String|Number} key\n   * @param {Array<String|Number>} path\n   * @this {FormData}\n   *\n   * @returns {boolean} return true to visit the each prop of the value recursively\n   */\n  function defaultVisitor(value, key, path) {\n    let arr = value;\n\n    if (utils.isReactNative(formData) && utils.isReactNativeBlob(value)) {\n      formData.append(renderKey(path, key, dots), convertValue(value));\n      return false;\n    }\n\n    if (value && !path && typeof value === 'object') {\n      if (utils.endsWith(key, '{}')) {\n        // eslint-disable-next-line no-param-reassign\n        key = metaTokens ? key : key.slice(0, -2);\n        // eslint-disable-next-line no-param-reassign\n        value = stringifyWithDepthLimit(value, 1);\n      } else if (\n        (utils.isArray(value) && isFlatArray(value)) ||\n        ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value)))\n      ) {\n        // eslint-disable-next-line no-param-reassign\n        key = removeBrackets(key);\n\n        arr.forEach(function each(el, index) {\n          !(utils.isUndefined(el) || el === null) &&\n            formData.append(\n              // eslint-disable-next-line no-nested-ternary\n              indexes === true\n                ? renderKey([key], index, dots)\n                : indexes === null\n                  ? key\n                  : key + '[]',\n              convertValue(el)\n            );\n        });\n        return false;\n      }\n    }\n\n    if (isVisitable(value)) {\n      return true;\n    }\n\n    formData.append(renderKey(path, key, dots), convertValue(value));\n\n    return false;\n  }\n\n  const exposedHelpers = Object.assign(predicates, {\n    defaultVisitor,\n    convertValue,\n    isVisitable,\n  });\n\n  function build(value, path, depth = 0) {\n    if (utils.isUndefined(value)) return;\n\n    throwIfMaxDepthExceeded(depth);\n\n    if (stack.indexOf(value) !== -1) {\n      throw new Error('Circular reference detected in ' + path.join('.'));\n    }\n\n    stack.push(value);\n\n    utils.forEach(value, function each(el, key) {\n      const result =\n        !(utils.isUndefined(el) || el === null) &&\n        visitor.call(formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers);\n\n      if (result === true) {\n        build(el, path ? path.concat(key) : [key], depth + 1);\n      }\n    });\n\n    stack.pop();\n  }\n\n  if (!utils.isObject(obj)) {\n    throw new TypeError('data must be an object');\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nexport default toFormData;\n", "'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n  const charMap = {\n    '!': '%21',\n    \"'\": '%27',\n    '(': '%28',\n    ')': '%29',\n    '~': '%7E',\n    '%20': '+',\n  };\n  return encodeURIComponent(str).replace(/[!'()~]|%20/g, function replacer(match) {\n    return charMap[match];\n  });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n  this._pairs = [];\n\n  params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n  this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n  const _encode = encoder\n    ? (value) => encoder.call(this, value, encode)\n    : encode;\n\n  return this._pairs\n    .map(function each(pair) {\n      return _encode(pair[0]) + '=' + _encode(pair[1]);\n    }, '')\n    .join('&');\n};\n\nexport default AxiosURLSearchParams;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from './AxiosURLSearchParams.js';\n\n/**\n * It replaces URL-encoded forms of `:`, `$`, `,`, and spaces with\n * their plain counterparts (`:`, `$`, `,`, `+`).\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nexport function encode(val) {\n  return encodeURIComponent(val)\n    .replace(/%3A/gi, ':')\n    .replace(/%24/g, '$')\n    .replace(/%2C/gi, ',')\n    .replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n  if (!params) {\n    return url;\n  }\n  url = url || '';\n\n  const _options = utils.isFunction(options)\n    ? {\n        serialize: options,\n      }\n    : options;\n\n  // Read serializer options pollution-safely: own properties and methods on a\n  // class/template prototype are honored, but values injected onto a polluted\n  // Object.prototype are ignored.\n  const _encode = utils.getSafeProp(_options, 'encode') || encode;\n  const serializeFn = utils.getSafeProp(_options, 'serialize');\n\n  let serializedParams;\n\n  if (serializeFn) {\n    serializedParams = serializeFn(params, _options);\n  } else {\n    serializedParams = utils.isURLSearchParams(params)\n      ? params.toString()\n      : new AxiosURLSearchParams(params, _options).toString(_encode);\n  }\n\n  if (serializedParams) {\n    const hashmarkIndex = url.indexOf('#');\n\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\nconst $internals = Symbol('internals');\n\n// `handlers` is public and may be replaced with a nullish value by user code;\n// `clear()` has always tolerated that. Treat it as an empty stack rather than\n// dereferencing it.\nfunction countHandlers(handlers) {\n  return handlers ? handlers.length : 0;\n}\n\nfunction trimHandlers(handlers) {\n  if (!handlers) {\n    return;\n  }\n\n  while (handlers.length && handlers[handlers.length - 1] === null) {\n    handlers.pop();\n  }\n}\n\nfunction syncHandlerEntries(manager, internals) {\n  const handlers = manager.handlers;\n  const length = countHandlers(handlers);\n\n  if (handlers !== internals.handlersRef) {\n    internals.handlersRef = handlers;\n    internals.handlerEntries.clear();\n  } else if (length !== internals.handlersLength) {\n    if (!length) {\n      internals.handlerEntries.clear();\n    } else {\n      internals.handlerEntries.forEach(function removeStaleEntry(entry, id) {\n        if (handlers[entry.index] !== entry.handler) {\n          internals.handlerEntries.delete(id);\n        }\n      });\n    }\n  }\n\n  internals.handlersLength = length;\n}\n\nclass InterceptorManager {\n  constructor() {\n    this.handlers = [];\n    this[$internals] = {\n      handlersRef: this.handlers,\n      handlersLength: this.handlers.length,\n      handlerEntries: new Map(),\n      iterationDepth: 0,\n      nextId: 0,\n    };\n  }\n\n  /**\n   * Add a new interceptor to the stack\n   *\n   * @param {Function} fulfilled The function to handle `then` for a `Promise`\n   * @param {Function} rejected The function to handle `reject` for a `Promise`\n   * @param {Object} options The options for the interceptor, synchronous and runWhen\n   *\n   * @return {Number} An ID used to remove interceptor later\n   */\n  use(fulfilled, rejected, options) {\n    const handler = {\n      fulfilled,\n      rejected,\n      synchronous: options ? options.synchronous : false,\n      runWhen: options ? options.runWhen : null,\n    };\n    const internals = this[$internals];\n\n    if (this.handlers == null) {\n      this.handlers = [];\n    }\n\n    syncHandlerEntries(this, internals);\n\n    const id = internals.nextId++;\n\n    this.handlers.push(handler);\n    internals.handlerEntries.set(id, {\n      handler,\n      index: this.handlers.length - 1,\n    });\n    internals.handlersLength = this.handlers.length;\n\n    return id;\n  }\n\n  /**\n   * Remove an interceptor from the stack\n   *\n   * @param {Number} id The ID that was returned by `use`\n   *\n   * @returns {void}\n   */\n  eject(id) {\n    const internals = this[$internals];\n\n    syncHandlerEntries(this, internals);\n\n    const entry = internals.handlerEntries.get(id);\n\n    if (entry) {\n      internals.handlerEntries.delete(id);\n\n      // Ignore IDs invalidated by clear or direct replacement of handlers.\n      if (this.handlers[entry.index] !== entry.handler) {\n        return;\n      }\n\n      this.handlers[entry.index] = null;\n\n      // Do not reuse an index while forEach is walking its length snapshot.\n      if (!internals.iterationDepth) {\n        trimHandlers(this.handlers);\n        internals.handlersLength = this.handlers.length;\n      }\n    }\n  }\n\n  /**\n   * Clear all interceptors from the stack\n   *\n   * @returns {void}\n   */\n  clear() {\n    if (this.handlers) {\n      this.handlers = [];\n      syncHandlerEntries(this, this[$internals]);\n    }\n  }\n\n  /**\n   * Iterate over all the registered interceptors\n   *\n   * This method is particularly useful for skipping over any\n   * interceptors that may have become `null` calling `eject`.\n   *\n   * @param {Function} fn The function to call for each interceptor\n   *\n   * @returns {void}\n   */\n  forEach(fn) {\n    const internals = this[$internals];\n\n    syncHandlerEntries(this, internals);\n\n    internals.iterationDepth++;\n\n    try {\n      utils.forEach(this.handlers, function forEachHandler(h) {\n        if (h !== null) {\n          fn(h);\n        }\n      });\n    } finally {\n      if (!--internals.iterationDepth) {\n        syncHandlerEntries(this, internals);\n        trimHandlers(this.handlers);\n        internals.handlersLength = countHandlers(this.handlers);\n      }\n    }\n  }\n}\n\nexport default InterceptorManager;\n", "'use strict';\n\nexport default {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false,\n  legacyInterceptorReqResOrdering: true,\n  advertiseZstdAcceptEncoding: false,\n  validateStatusUndefinedResolves: true,\n};\n", "'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n", "'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n", "'use strict';\n\nexport default typeof Blob !== 'undefined' ? Blob : null;\n", "import URLSearchParams from './classes/URLSearchParams.js';\nimport FormData from './classes/FormData.js';\nimport Blob from './classes/Blob.js';\n\nexport default {\n  isBrowser: true,\n  classes: {\n    URLSearchParams,\n    FormData,\n    Blob,\n  },\n  protocols: ['http', 'https', 'file', 'blob', 'url', 'data'],\n};\n", "const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = (typeof navigator === 'object' && navigator) || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv =\n  hasBrowserEnv &&\n  (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n  return (\n    typeof WorkerGlobalScope !== 'undefined' &&\n    // eslint-disable-next-line no-undef\n    self instanceof WorkerGlobalScope &&\n    typeof self.importScripts === 'function'\n  );\n})();\n\nconst origin = (hasBrowserEnv && window.location.href) || 'http://localhost';\n\nexport {\n  hasBrowserEnv,\n  hasStandardBrowserWebWorkerEnv,\n  hasStandardBrowserEnv,\n  _navigator as navigator,\n  origin,\n};\n", "import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n  ...utils,\n  ...platform,\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n  return toFormData(data, new platform.classes.URLSearchParams(), {\n    visitor: function (value, key, path, helpers) {\n      if (platform.isNode && utils.isBuffer(value)) {\n        this.append(key, value.toString('base64'));\n        return false;\n      }\n\n      return helpers.defaultVisitor.apply(this, arguments);\n    },\n    ...options,\n  });\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport { DEFAULT_FORM_DATA_MAX_DEPTH } from './toFormData.js';\n\nconst MAX_DEPTH = DEFAULT_FORM_DATA_MAX_DEPTH;\n\nfunction throwIfDepthExceeded(index) {\n  if (index > MAX_DEPTH) {\n    throw new AxiosError(\n      'FormData field is too deeply nested (' + index + ' levels). Max depth: ' + MAX_DEPTH,\n      AxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED\n    );\n  }\n}\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n  // foo[x][y][z] -> ['foo', 'x', 'y', 'z']\n  // foo.x.y.z    -> ['foo', 'x', 'y', 'z']\n  // A path is split on `.` and on `[...]` groups. A segment \u2014 whether written\n  // in dot notation or captured inside brackets \u2014 may contain any character\n  // except `.`, `[` and `]`, so a key like `user-name` or `user name` is kept\n  // literal instead of being split (#5402). `.`, `[` and `]` keep their existing\n  // meaning, e.g. `foo[bar.baz]` -> ['foo', 'bar', 'baz'] and `[]` is an array push.\n  // Excluding `[` from the bracket group also makes the match fail fast at the\n  // next `[`, so a malformed name cannot rescan to the end of the string from\n  // every unmatched `[` \u2014 parsing stays linear in the length of the name.\n  const path = [];\n  const pattern = /[^.[\\]]+|\\[([^.[\\]]*)]/g;\n  let match;\n\n  while ((match = pattern.exec(name)) !== null) {\n    throwIfDepthExceeded(path.length);\n    path.push(match[0] === '[]' ? '' : match[1] || match[0]);\n  }\n\n  return path;\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n  const obj = {};\n  const keys = Object.keys(arr);\n  let i;\n  const len = keys.length;\n  let key;\n  for (i = 0; i < len; i++) {\n    key = keys[i];\n    obj[key] = arr[key];\n  }\n  return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n  function buildPath(path, value, target, index) {\n    throwIfDepthExceeded(index);\n\n    let name = path[index++];\n\n    if (name === '__proto__') return true;\n\n    const isNumericKey = Number.isFinite(+name);\n    const isLast = index >= path.length;\n    name = !name && utils.isArray(target) ? target.length : name;\n\n    if (isLast) {\n      if (utils.hasOwnProp(target, name)) {\n        target[name] = utils.isArray(target[name])\n          ? target[name].concat(value)\n          : [target[name], value];\n      } else {\n        target[name] = value;\n      }\n\n      return !isNumericKey;\n    }\n\n    if (!utils.hasOwnProp(target, name) || !utils.isObject(target[name])) {\n      target[name] = [];\n    }\n\n    const result = buildPath(path, value, target[name], index);\n\n    if (result && utils.isArray(target[name])) {\n      target[name] = arrayToObject(target[name]);\n    }\n\n    return !isNumericKey;\n  }\n\n  if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n    const obj = {};\n\n    utils.forEachEntry(formData, (name, value) => {\n      buildPath(parsePropPath(name), value, obj, 0);\n    });\n\n    return obj;\n  }\n\n  return null;\n}\n\nexport default formDataToJSON;\n", "'use strict';\n\nconst methodList = Object.freeze([\n  'get',\n  'delete',\n  'head',\n  'options',\n  'post',\n  'put',\n  'patch',\n  'purge',\n  'link',\n  'unlink',\n  'query',\n]);\n\nexport default methodList;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\nimport methodList from '../core/methodList.js';\n\nconst own = (obj, key) => (obj != null && utils.hasOwnProp(obj, key) ? obj[key] : undefined);\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n  transitional: transitionalDefaults,\n\n  adapter: ['xhr', 'http', 'fetch'],\n\n  transformRequest: [\n    function transformRequest(data, headers) {\n      const contentType = headers.getContentType() || '';\n      const hasJSONContentType = contentType.indexOf('application/json') > -1;\n      const isObjectPayload = utils.isObject(data);\n\n      if (isObjectPayload && utils.isHTMLForm(data)) {\n        data = new FormData(data);\n      }\n\n      const isFormData = utils.isFormData(data);\n\n      if (isFormData) {\n        return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n      }\n\n      if (\n        utils.isArrayBuffer(data) ||\n        utils.isBuffer(data) ||\n        utils.isStream(data) ||\n        utils.isFile(data) ||\n        utils.isBlob(data) ||\n        utils.isReadableStream(data)\n      ) {\n        return data;\n      }\n      if (utils.isArrayBufferView(data)) {\n        return data.buffer;\n      }\n      if (utils.isURLSearchParams(data)) {\n        headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n        return data.toString();\n      }\n\n      let isFileList;\n\n      if (isObjectPayload) {\n        const formSerializer = own(this, 'formSerializer');\n        if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n          return toURLEncodedForm(data, formSerializer).toString();\n        }\n\n        if (\n          (isFileList = utils.isFileList(data)) ||\n          contentType.indexOf('multipart/form-data') > -1\n        ) {\n          const env = own(this, 'env');\n          const _FormData = env && env.FormData;\n\n          return toFormData(\n            isFileList ? { 'files[]': data } : data,\n            _FormData && new _FormData(),\n            formSerializer\n          );\n        }\n      }\n\n      if (isObjectPayload || hasJSONContentType) {\n        headers.setContentType('application/json', false);\n        return stringifySafely(data);\n      }\n\n      return data;\n    },\n  ],\n\n  transformResponse: [\n    function transformResponse(data) {\n      const transitional = own(this, 'transitional') || defaults.transitional;\n      const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n      const responseType = own(this, 'responseType');\n      const JSONRequested = responseType === 'json';\n\n      if (utils.isResponse(data) || utils.isReadableStream(data)) {\n        return data;\n      }\n\n      if (\n        data &&\n        utils.isString(data) &&\n        ((forcedJSONParsing && !responseType) || JSONRequested)\n      ) {\n        const silentJSONParsing = transitional && transitional.silentJSONParsing;\n        const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n        try {\n          return JSON.parse(data, own(this, 'parseReviver'));\n        } catch (e) {\n          if (strictJSONParsing) {\n            if (e.name === 'SyntaxError') {\n              throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, own(this, 'response'));\n            }\n            throw e;\n          }\n        }\n      }\n\n      return data;\n    },\n  ],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  env: {\n    FormData: platform.classes.FormData,\n    Blob: platform.classes.Blob,\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      Accept: 'application/json, text/plain, */*',\n      'Content-Type': undefined,\n    },\n  },\n};\n\nutils.forEach(methodList, (method) => {\n  defaults.headers[method] = {};\n});\n\nexport default defaults;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n  const config = this || defaults;\n  const context = response || config;\n  const headers = AxiosHeaders.from(context.headers);\n  let data = context.data;\n\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n  });\n\n  headers.normalize();\n\n  return data;\n}\n", "'use strict';\n\nexport default function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\n\nclass CanceledError extends AxiosError {\n  /**\n   * A `CanceledError` is an object that is thrown when an operation is canceled.\n   *\n   * @param {string=} message The message.\n   * @param {Object=} config The config.\n   * @param {Object=} request The request.\n   *\n   * @returns {CanceledError} The created error.\n   */\n  constructor(message, config, request) {\n    super(message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n    this.name = 'CanceledError';\n    this.__CANCEL__ = true;\n  }\n}\n\nexport default CanceledError;\n", "'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n  const validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(new AxiosError(\n      'Request failed with status code ' + response.status,\n      response.status >= 400 && response.status < 500 ? AxiosError.ERR_BAD_REQUEST : AxiosError.ERR_BAD_RESPONSE,\n      response.config,\n      response.request,\n      response\n    ));\n  }\n}\n", "'use strict';\n\nconst urlParserControlCharacters = /[\\t\\n\\r]/g;\n\n/**\n * Match WHATWG URL preprocessing before checking a URL's protocol.\n *\n * @param {string} url\n *\n * @returns {string}\n */\nexport default function normalizeURLForProtocolCheck(url) {\n  if (typeof url !== 'string') {\n    return url;\n  }\n\n  let start = 0;\n\n  while (start < url.length && url.charCodeAt(start) <= 0x20) {\n    start++;\n  }\n\n  return url.slice(start).replace(urlParserControlCharacters, '');\n}\n", "'use strict';\n\nexport default function parseProtocol(url) {\n  const match = /^([-+\\w]{1,25}):(?:\\/\\/)?/.exec(url);\n  return (match && match[1]) || '';\n}\n", "'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n  samplesCount = samplesCount || 10;\n  const bytes = new Array(samplesCount);\n  const timestamps = new Array(samplesCount);\n  let head = 0;\n  let tail = 0;\n  let firstSampleTS;\n\n  min = min !== undefined ? min : 1000;\n\n  return function push(chunkLength) {\n    const now = Date.now();\n\n    const startedAt = timestamps[tail];\n\n    if (!firstSampleTS) {\n      firstSampleTS = now;\n    }\n\n    bytes[head] = chunkLength;\n    timestamps[head] = now;\n\n    let i = tail;\n    let bytesCount = 0;\n\n    while (i !== head) {\n      bytesCount += bytes[i++];\n      i = i % samplesCount;\n    }\n\n    head = (head + 1) % samplesCount;\n\n    if (head === tail) {\n      tail = (tail + 1) % samplesCount;\n    }\n\n    if (now - firstSampleTS < min) {\n      return;\n    }\n\n    const passed = startedAt && now - startedAt;\n\n    return passed ? Math.round((bytesCount * 1000) / passed) : undefined;\n  };\n}\n\nexport default speedometer;\n", "/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Array<Function>}\n */\nfunction throttle(fn, freq) {\n  let timestamp = 0;\n  let threshold = 1000 / freq;\n  let lastArgs;\n  let timer;\n\n  const invoke = (args, now = Date.now()) => {\n    timestamp = now;\n    lastArgs = null;\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n    fn(...args);\n  };\n\n  const throttled = (...args) => {\n    const now = Date.now();\n    const passed = now - timestamp;\n    if (passed >= threshold) {\n      invoke(args, now);\n    } else {\n      lastArgs = args;\n      if (!timer) {\n        timer = setTimeout(() => {\n          timer = null;\n          invoke(lastArgs);\n        }, threshold - passed);\n      }\n    }\n  };\n\n  const flush = () => lastArgs && invoke(lastArgs);\n  const flushWith = (...args) => invoke(args);\n\n  return [throttled, flush, flushWith];\n}\n\nexport default throttle;\n", "import speedometer from './speedometer.js';\nimport throttle from './throttle.js';\nimport utils from '../utils.js';\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n  let bytesNotified = 0;\n  const _speedometer = speedometer(50, 250);\n\n  return throttle((e) => {\n    if (!e || !utils.isNumber(e.loaded)) {\n      return;\n    }\n    const rawLoaded = e.loaded;\n    const total = e.lengthComputable ? e.total : undefined;\n    const loaded = Math.max(0, total != null ? Math.min(rawLoaded, total) : rawLoaded);\n    const progressBytes = Math.max(0, loaded - bytesNotified);\n    const rate = _speedometer(progressBytes);\n\n    bytesNotified = Math.max(bytesNotified, loaded);\n\n    const data = {\n      loaded,\n      total,\n      progress: total ? loaded / total : undefined,\n      bytes: progressBytes,\n      rate: rate ? rate : undefined,\n      estimated: rate && total ? (total - loaded) / rate : undefined,\n      event: e,\n      lengthComputable: total != null,\n      [isDownloadStream ? 'download' : 'upload']: true,\n    };\n\n    listener(data);\n  }, freq);\n};\n\nexport const progressEventDecorator = (total, throttled) => {\n  const lengthComputable = total != null;\n\n  return [\n    (loaded) =>\n      throttled[0]({\n        lengthComputable,\n        total,\n        loaded,\n      }),\n    throttled[1],\n  ];\n};\n\nexport const asyncDecorator =\n  (fn, scheduler = utils.asap) =>\n  (...args) =>\n    scheduler(() => fn(...args));\n", "import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv\n  ? ((origin, isMSIE) => (url) => {\n      url = new URL(url, platform.origin);\n\n      return (\n        origin.protocol === url.protocol &&\n        origin.host === url.host &&\n        (isMSIE || origin.port === url.port)\n      );\n    })(\n      new URL(platform.origin),\n      platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n    )\n  : () => true;\n", "import utils from '../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv\n  ? // Standard browser envs support document.cookie\n    {\n      write(name, value, expires, path, domain, secure, sameSite) {\n        if (typeof document === 'undefined') return;\n\n        const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n        if (utils.isNumber(expires)) {\n          cookie.push(`expires=${new Date(expires).toUTCString()}`);\n        }\n        if (utils.isString(path)) {\n          cookie.push(`path=${path}`);\n        }\n        if (utils.isString(domain)) {\n          cookie.push(`domain=${domain}`);\n        }\n        if (secure === true) {\n          cookie.push('secure');\n        }\n        if (utils.isString(sameSite)) {\n          cookie.push(`SameSite=${sameSite}`);\n        }\n\n        document.cookie = cookie.join('; ');\n      },\n\n      read(name) {\n        if (typeof document === 'undefined') return null;\n        // Match name=value by splitting on the semicolon separator instead of building a\n        // RegExp from `name` \u2014 interpolating an unescaped string into a RegExp would let\n        // metacharacters (e.g. `.+?` in an attacker-influenced cookie name) cause ReDoS or\n        // match the wrong cookie. Browsers may serialize cookie pairs as either \";\" or\n        // \"; \", so ignore optional whitespace before each cookie name.\n        const cookies = document.cookie.split(';');\n        for (let i = 0; i < cookies.length; i++) {\n          const cookie = cookies[i].replace(/^\\s+/, '');\n          const eq = cookie.indexOf('=');\n          if (eq !== -1 && cookie.slice(0, eq) === name) {\n            try {\n              return decodeURIComponent(cookie.slice(eq + 1));\n            } catch (e) {\n              return cookie.slice(eq + 1);\n            }\n          }\n        }\n        return null;\n      },\n\n      remove(name) {\n        this.write(name, '', Date.now() - 86400000, '/');\n      },\n    }\n  : // Non-standard browser env (web workers, react-native) lack needed support.\n    {\n      write() {},\n      read() {\n        return null;\n      },\n      remove() {},\n    };\n", "'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  if (typeof url !== 'string') {\n    return false;\n  }\n\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n", "'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n  if (!relativeURL) {\n    return baseURL;\n  }\n\n  let end = baseURL.length;\n\n  while (end > 0 && baseURL.charCodeAt(end - 1) === 47) {\n    end--;\n  }\n\n  return baseURL.slice(0, end) + '/' + relativeURL.replace(/^\\/+/, '');\n}\n", "'use strict';\n\nimport AxiosError, { REDACTED } from './AxiosError.js';\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\nimport normalizeURLForProtocolCheck from '../helpers/normalizeURLForProtocolCheck.js';\n\nconst malformedHttpProtocol = /^https?:(?!\\/\\/)/i;\n\n// Redact the parts of a URL that can carry secrets before it is embedded in an\n// error message. AxiosError.toJSON() serializes `message` verbatim and errors\n// are commonly logged, while the opt-in `config.redact` model only cleans\n// config keys \u2014 it cannot reach the message. Redact only the genuinely\n// sensitive substrings \u2014 userinfo (credentials), query parameter values and\n// fragment contents \u2014 with the same REDACTED marker the config redaction uses,\n// while keeping the scheme, host, path and parameter names so the offending\n// request stays accurately identifiable.\nfunction redactFragment(fragment) {\n  if (!fragment) {\n    return fragment;\n  }\n\n  return fragment.replace(/(^|&)([^=&]*=)?[^&]+/g, (match, separator, parameterName = '') => {\n    return `${separator}${parameterName}${REDACTED}`;\n  });\n}\n\nfunction redactSensitiveURLParts(url) {\n  const redactedURL = url.replace(/^(https?:\\/{0,2})[^/?#]*@/i, `$1${REDACTED}@`);\n  const fragmentIndex = redactedURL.indexOf('#');\n  const urlWithoutFragment =\n    fragmentIndex === -1 ? redactedURL : redactedURL.slice(0, fragmentIndex);\n  const redactedURLWithoutFragment = urlWithoutFragment.replace(\n    /([?&][^=&#]*=)[^&#]*/g,\n    `$1${REDACTED}`\n  );\n\n  if (fragmentIndex === -1) {\n    return redactedURLWithoutFragment;\n  }\n\n  return `${redactedURLWithoutFragment}#${redactFragment(redactedURL.slice(fragmentIndex + 1))}`;\n}\n\nfunction assertValidHttpProtocolURL(url, config) {\n  if (typeof url === 'string') {\n    const normalizedURL = normalizeURLForProtocolCheck(url);\n    if (malformedHttpProtocol.test(normalizedURL)) {\n      throw new AxiosError(\n        `Invalid URL ${JSON.stringify(redactSensitiveURLParts(normalizedURL))}: missing \"//\" after protocol`,\n        AxiosError.ERR_INVALID_URL,\n        config\n      );\n    }\n  }\n}\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls, config) {\n  assertValidHttpProtocolURL(requestedURL, config);\n  let isRelativeUrl = !isAbsoluteURL(requestedURL);\n  if (baseURL && (isRelativeUrl || allowAbsoluteUrls === false)) {\n    assertValidHttpProtocolURL(baseURL, config);\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst headersToObject = (thing) => (thing instanceof AxiosHeaders ? { ...thing } : thing);\n\nconst ownEnumerableKeys = (thing) => {\n  if (Object.getOwnPropertySymbols && Object.getOwnPropertyDescriptor) {\n    return Object.keys(thing).concat(\n      Object.getOwnPropertySymbols(thing).filter(\n        (symbol) => Object.getOwnPropertyDescriptor(thing, symbol).enumerable\n      )\n    );\n  }\n  return Object.keys(thing);\n};\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config1 = config1 || {};\n  config2 = config2 || {};\n\n  // Use a null-prototype object so that downstream reads such as `config.auth`\n  // or `config.baseURL` cannot inherit polluted values from Object.prototype.\n  // `hasOwnProperty` is restored as a non-enumerable own slot to preserve\n  // ergonomics for user code that relies on it.\n  const config = Object.create(null);\n  Object.defineProperty(config, 'hasOwnProperty', {\n    // Null-proto descriptor so a polluted Object.prototype.get cannot turn\n    // this data descriptor into an accessor descriptor on the way in.\n    __proto__: null,\n    value: Object.prototype.hasOwnProperty,\n    enumerable: false,\n    writable: true,\n    configurable: true,\n  });\n\n  function getMergedValue(target, source, prop, caseless) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge.call({ caseless }, target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  function mergeDeepProperties(a, b, prop, caseless) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(a, b, prop, caseless);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a, prop, caseless);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  function getMergedTransitionalOption(prop) {\n    const transitional2 = utils.hasOwnProp(config2, 'transitional')\n      ? config2.transitional\n      : undefined;\n\n    if (!utils.isUndefined(transitional2)) {\n      if (utils.isPlainObject(transitional2)) {\n        if (utils.hasOwnProp(transitional2, prop)) {\n          return transitional2[prop];\n        }\n      } else {\n        return undefined;\n      }\n    }\n\n    const transitional1 = utils.hasOwnProp(config1, 'transitional')\n      ? config1.transitional\n      : undefined;\n\n    if (utils.isPlainObject(transitional1) && utils.hasOwnProp(transitional1, prop)) {\n      return transitional1[prop];\n    }\n\n    return undefined;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(a, b, prop) {\n    if (utils.hasOwnProp(config2, prop)) {\n      return getMergedValue(a, b);\n    } else if (utils.hasOwnProp(config1, prop)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  const mergeMap = {\n    url: valueFromConfig2,\n    method: valueFromConfig2,\n    data: valueFromConfig2,\n    baseURL: defaultToConfig2,\n    transformRequest: defaultToConfig2,\n    transformResponse: defaultToConfig2,\n    paramsSerializer: defaultToConfig2,\n    timeout: defaultToConfig2,\n    timeoutErrorMessage: defaultToConfig2,\n    withCredentials: defaultToConfig2,\n    withXSRFToken: defaultToConfig2,\n    adapter: defaultToConfig2,\n    responseType: defaultToConfig2,\n    xsrfCookieName: defaultToConfig2,\n    xsrfHeaderName: defaultToConfig2,\n    onUploadProgress: defaultToConfig2,\n    onDownloadProgress: defaultToConfig2,\n    decompress: defaultToConfig2,\n    maxContentLength: defaultToConfig2,\n    maxBodyLength: defaultToConfig2,\n    beforeRedirect: defaultToConfig2,\n    transport: defaultToConfig2,\n    httpAgent: defaultToConfig2,\n    httpsAgent: defaultToConfig2,\n    cancelToken: defaultToConfig2,\n    socketPath: defaultToConfig2,\n    allowedSocketPaths: defaultToConfig2,\n    responseEncoding: defaultToConfig2,\n    validateStatus: mergeDirectKeys,\n    headers: (a, b, prop) =>\n      mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true),\n  };\n\n  utils.forEach(ownEnumerableKeys({ ...config1, ...config2 }), function computeConfigValue(prop) {\n    if (prop === '__proto__' || prop === 'constructor' || prop === 'prototype') return;\n    const merge = utils.hasOwnProp(mergeMap, prop) ? mergeMap[prop] : mergeDeepProperties;\n    const a = utils.hasOwnProp(config1, prop) ? config1[prop] : undefined;\n    const b = utils.hasOwnProp(config2, prop) ? config2[prop] : undefined;\n    const configValue = merge(a, b, prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  if (\n    utils.hasOwnProp(config2, 'validateStatus') &&\n    utils.isUndefined(config2.validateStatus) &&\n    getMergedTransitionalOption('validateStatusUndefinedResolves') === false\n  ) {\n    if (utils.hasOwnProp(config1, 'validateStatus')) {\n      config.validateStatus = getMergedValue(undefined, config1.validateStatus);\n    } else {\n      delete config.validateStatus;\n    }\n  }\n\n  return config;\n}\n", "'use strict';\n\nconst FORM_DATA_CONTENT_HEADERS = ['content-type', 'content-length'];\n\n/**\n * Apply the headers generated by a FormData implementation to the request headers,\n * honoring the `formDataHeaderPolicy` option: with 'content-only', copy only the\n * content-* headers; otherwise merge all of them.\n *\n * @param {AxiosHeaders} headers - the request headers to mutate\n * @param {Object | null | undefined} formHeaders - headers produced by the FormData implementation\n * @param {String} [policy] - the resolved `formDataHeaderPolicy` config value\n *\n * @returns {void}\n */\nexport default function setFormDataHeaders(headers, formHeaders, policy) {\n  if (policy !== 'content-only') {\n    headers.set(formHeaders);\n    return;\n  }\n\n  Object.entries(formHeaders || {}).forEach(([key, val]) => {\n    if (FORM_DATA_CONTENT_HEADERS.includes(key.toLowerCase())) {\n      headers.set(key, val);\n    }\n  });\n}\n", "import platform from '../platform/index.js';\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport isURLSameOrigin from './isURLSameOrigin.js';\nimport cookies from './cookies.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport mergeConfig from '../core/mergeConfig.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport setFormDataHeaders from '../core/setFormDataHeaders.js';\nimport buildURL from './buildURL.js';\n\n/**\n * Encode a UTF-8 string to a Latin-1 byte string for use with btoa().\n * This is a modern replacement for the deprecated unescape(encodeURIComponent(str)) pattern.\n *\n * @param {string} str The string to encode\n *\n * @returns {string} UTF-8 bytes as a Latin-1 string\n */\nconst encodeUTF8 = (str) =>\n  encodeURIComponent(str).replace(/%([0-9A-F]{2})/gi, (_, hex) =>\n    String.fromCharCode(parseInt(hex, 16))\n  );\n\nfunction resolveConfig(config) {\n  const newConfig = mergeConfig({}, config);\n\n  // Read only own properties to prevent prototype pollution gadgets\n  // (e.g. Object.prototype.baseURL = 'https://evil.com').\n  const own = (key) => (utils.hasOwnProp(newConfig, key) ? newConfig[key] : undefined);\n\n  const data = own('data');\n  let withXSRFToken = own('withXSRFToken');\n  const xsrfHeaderName = own('xsrfHeaderName');\n  const xsrfCookieName = own('xsrfCookieName');\n  let headers = own('headers');\n  const auth = own('auth');\n  const baseURL = own('baseURL');\n  const allowAbsoluteUrls = own('allowAbsoluteUrls');\n  const url = own('url');\n\n  newConfig.headers = headers = AxiosHeaders.from(headers);\n\n  newConfig.url = buildURL(\n    buildFullPath(baseURL, url, allowAbsoluteUrls, newConfig),\n    own('params'),\n    own('paramsSerializer')\n  );\n\n  // HTTP basic authentication\n  if (auth) {\n    const username = utils.getSafeProp(auth, 'username') || '';\n    const password = utils.getSafeProp(auth, 'password') || '';\n\n    try {\n      headers.set(\n        'Authorization',\n        'Basic ' + btoa(username + ':' + (password ? encodeUTF8(password) : ''))\n      );\n    } catch (e) {\n      throw AxiosError.from(e, AxiosError.ERR_BAD_OPTION_VALUE, config);\n    }\n  }\n\n  if (utils.isFormData(data)) {\n    const getHeaders = utils.getSafeProp(data, 'getHeaders');\n\n    if (\n      platform.hasStandardBrowserEnv ||\n      platform.hasStandardBrowserWebWorkerEnv ||\n      utils.isReactNative(data)\n    ) {\n      headers.setContentType(undefined); // browser/web worker/RN handles it\n    } else if (utils.isFunction(getHeaders)) {\n      // Node.js FormData (like form-data package)\n      setFormDataHeaders(headers, getHeaders.call(data), own('formDataHeaderPolicy'));\n    }\n  }\n\n  // Add xsrf header\n  // This is only done if running in a standard browser environment.\n  // Specifically not if we're in a web worker, or react-native.\n\n  if (platform.hasStandardBrowserEnv) {\n    if (utils.isFunction(withXSRFToken)) {\n      withXSRFToken = withXSRFToken(newConfig);\n    }\n\n    // Strict boolean check \u2014 prevents proto-pollution gadgets (e.g. Object.prototype.withXSRFToken = 1)\n    // and misconfigurations (e.g. \"false\") from short-circuiting the same-origin check and leaking\n    // the XSRF token cross-origin.\n    const shouldSendXSRF =\n      withXSRFToken === true || (withXSRFToken == null && isURLSameOrigin(newConfig.url));\n\n    if (shouldSendXSRF) {\n      const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n      if (xsrfValue) {\n        headers.set(xsrfHeaderName, xsrfValue);\n      }\n    }\n  }\n\n  return newConfig;\n}\n\nexport default resolveConfig;\n", "import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport normalizeURLForProtocolCheck from '../helpers/normalizeURLForProtocolCheck.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport { progressEventReducer } from '../helpers/progressEventReducer.js';\nimport resolveConfig from '../helpers/resolveConfig.js';\nimport { toByteStringHeaderObject } from '../helpers/sanitizeHeaderValue.js';\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported &&\n  function (config) {\n    return new Promise(function dispatchXhrRequest(resolve, reject) {\n      const _config = resolveConfig(config);\n      let requestData = _config.data;\n      const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n      let { responseType, onUploadProgress, onDownloadProgress } = _config;\n      let onCanceled;\n      let uploadThrottled, downloadThrottled;\n      let flushUpload, flushDownload, flushDownloadWithEvent;\n\n      function done() {\n        flushUpload && flushUpload(); // flush events\n        flushDownload && flushDownload(); // flush events\n\n        _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n        _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n      }\n\n      let request = new XMLHttpRequest();\n\n      request.open(_config.method.toUpperCase(), _config.url, true);\n\n      // Set the request timeout in MS\n      request.timeout = _config.timeout;\n\n      function onloadend(event) {\n        if (!request) {\n          return;\n        }\n\n        // Status 0 means no response was received, which onerror and onabort normally\n        // reject before this runs. Firefox 152 fires only readystatechange and loadend for\n        // navigation-canceled requests (https://bugzilla.mozilla.org/show_bug.cgi?id=1505389),\n        // leaving settle() to resolve them as an empty success. ECONNABORTED is the error\n        // onabort raised on Firefox 151. Reads over file:, which some environments report as\n        // status 0 on success, are excluded by the request URL's scheme after browser-style\n        // preprocessing, by the page origin's scheme for relative URLs (which inherit it), or\n        // by responseURL where implemented.\n        if (\n          request.status === 0 &&\n          (parseProtocol(normalizeURLForProtocolCheck(_config.url)) ||\n            parseProtocol(platform.origin)) !== 'file' &&\n          !(request.responseURL && request.responseURL.startsWith('file:'))\n        ) {\n          reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n          done();\n\n          // Clean up request\n          request = null;\n          return;\n        }\n\n        // When loadend is still dispatching, flushing with it gives progress\n        // listeners a final delivery whose event has a live target. The legacy\n        // ready-state fallback has no event, so replay its pending progress.\n        // A throwing listener must not block settlement; rethrow asynchronously,\n        // matching how listener errors surface on the throttle timer path.\n        try {\n          if (event) {\n            flushDownloadWithEvent && flushDownloadWithEvent(event);\n          } else {\n            flushDownload && flushDownload();\n          }\n        } catch (err) {\n          setTimeout(() => {\n            throw err;\n          });\n        }\n\n        // A final progress callback can cancel the request synchronously.\n        if (!request) {\n          return;\n        }\n\n        // Prepare the response\n        const responseHeaders = AxiosHeaders.from(\n          'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n        );\n        const responseData =\n          !responseType || responseType === 'text' || responseType === 'json'\n            ? request.responseText\n            : request.response;\n        const response = {\n          data: responseData,\n          status: request.status,\n          statusText: request.statusText,\n          headers: responseHeaders,\n          config,\n          request,\n        };\n\n        settle(\n          function _resolve(value) {\n            resolve(value);\n            done();\n          },\n          function _reject(err) {\n            reject(err);\n            done();\n          },\n          response\n        );\n\n        // Clean up request\n        request = null;\n      }\n\n      if ('onloadend' in request) {\n        // Use onloadend if available\n        request.onloadend = onloadend;\n      } else {\n        // Listen for ready state to emulate onloadend\n        request.onreadystatechange = function handleLoad() {\n          if (!request || request.readyState !== 4) {\n            return;\n          }\n\n          // The request errored out and we didn't get a response, this will be\n          // handled by onerror instead\n          // With one exception: request that using file: protocol, most browsers\n          // will return status as 0 even though it's a successful request\n          if (\n            request.status === 0 &&\n            !(request.responseURL && request.responseURL.startsWith('file:'))\n          ) {\n            return;\n          }\n          // readystate handler is calling before onerror or ontimeout handlers,\n          // so we should call onloadend on the next 'tick'\n          setTimeout(onloadend);\n        };\n      }\n\n      // Handle browser request cancellation (as opposed to a manual cancellation)\n      request.onabort = function handleAbort() {\n        if (!request) {\n          return;\n        }\n\n        reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n        done();\n\n        // Clean up request\n        request = null;\n      };\n\n      // Handle low level network errors\n      request.onerror = function handleError(event) {\n        // Browsers deliver a ProgressEvent in XHR onerror\n        // (message may be empty; when present, surface it)\n        // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n        const msg = event && event.message ? event.message : 'Network Error';\n        const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n        // attach the underlying event for consumers who want details\n        err.event = event || null;\n        reject(err);\n        done();\n        request = null;\n      };\n\n      // Handle timeout\n      request.ontimeout = function handleTimeout() {\n        let timeoutErrorMessage = _config.timeout\n          ? 'timeout of ' + _config.timeout + 'ms exceeded'\n          : 'timeout exceeded';\n        const transitional = _config.transitional || transitionalDefaults;\n        if (_config.timeoutErrorMessage) {\n          timeoutErrorMessage = _config.timeoutErrorMessage;\n        }\n        reject(\n          new AxiosError(\n            timeoutErrorMessage,\n            transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n            config,\n            request\n          )\n        );\n        done();\n\n        // Clean up request\n        request = null;\n      };\n\n      // Remove Content-Type if data is undefined\n      requestData === undefined && requestHeaders.setContentType(null);\n\n      // Add headers to the request\n      if ('setRequestHeader' in request) {\n        utils.forEach(toByteStringHeaderObject(requestHeaders), function setRequestHeader(val, key) {\n          request.setRequestHeader(key, val);\n        });\n      }\n\n      // Add withCredentials to request if needed\n      if (!utils.isUndefined(_config.withCredentials)) {\n        request.withCredentials = !!_config.withCredentials;\n      }\n\n      // Add responseType to request if needed\n      if (responseType && responseType !== 'json') {\n        request.responseType = _config.responseType;\n      }\n\n      // Handle progress if needed\n      if (onDownloadProgress) {\n        [downloadThrottled, flushDownload, flushDownloadWithEvent] = progressEventReducer(\n          onDownloadProgress,\n          true\n        );\n        request.addEventListener('progress', downloadThrottled);\n      }\n\n      // Not all browsers support upload events\n      if (onUploadProgress && request.upload) {\n        [uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress);\n\n        request.upload.addEventListener('progress', uploadThrottled);\n\n        request.upload.addEventListener('loadend', flushUpload);\n      }\n\n      if (_config.cancelToken || _config.signal) {\n        // Handle cancellation\n        // eslint-disable-next-line func-names\n        onCanceled = (cancel) => {\n          if (!request) {\n            return;\n          }\n          reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n          request.abort();\n          done();\n          request = null;\n        };\n\n        _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n        if (_config.signal) {\n          _config.signal.aborted\n            ? onCanceled()\n            : _config.signal.addEventListener('abort', onCanceled);\n        }\n      }\n\n      const protocol = parseProtocol(_config.url);\n\n      if (protocol && !platform.protocols.includes(protocol)) {\n        reject(\n          new AxiosError(\n            'Unsupported protocol ' + protocol + ':',\n            AxiosError.ERR_BAD_REQUEST,\n            config\n          )\n        );\n        done();\n        return;\n      }\n\n      // Send the request\n      request.send(requestData || null);\n    });\n  };\n", "import CanceledError from '../cancel/CanceledError.js';\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n  signals = signals ? signals.filter(Boolean) : [];\n\n  if (!timeout && !signals.length) {\n    return;\n  }\n\n  const controller = new AbortController();\n\n  let aborted = false;\n\n  const onabort = function (reason) {\n    if (!aborted) {\n      aborted = true;\n      unsubscribe();\n      const err = reason instanceof Error ? reason : this.reason;\n      controller.abort(\n        err instanceof AxiosError\n          ? err\n          : new CanceledError(err instanceof Error ? err.message : err)\n      );\n    }\n  };\n\n  let timer =\n    timeout &&\n    setTimeout(() => {\n      timer = null;\n      onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT));\n    }, timeout);\n\n  const unsubscribe = () => {\n    if (!signals) { return; }\n    timer && clearTimeout(timer);\n    timer = null;\n    signals.forEach((signal) => {\n      signal.unsubscribe\n        ? signal.unsubscribe(onabort)\n        : signal.removeEventListener('abort', onabort);\n    });\n    signals = null;\n  };\n\n  signals.forEach((signal) => {\n    if (aborted) {\n      return;\n    }\n\n    if (signal.aborted) {\n      onabort.call(signal);\n      return;\n    }\n\n    signal.addEventListener('abort', onabort, { once: true });\n  });\n\n  const { signal } = controller;\n\n  signal.unsubscribe = () => utils.asap(unsubscribe);\n\n  return signal;\n};\n\nexport default composeSignals;\n", "export const streamChunk = function* (chunk, chunkSize) {\n  let len = chunk.byteLength;\n\n  if (!chunkSize || len < chunkSize) {\n    yield chunk;\n    return;\n  }\n\n  let pos = 0;\n  let end;\n\n  while (pos < len) {\n    end = pos + chunkSize;\n    yield chunk.slice(pos, end);\n    pos = end;\n  }\n};\n\nexport const readBytes = async function* (iterable, chunkSize) {\n  for await (const chunk of readStream(iterable)) {\n    yield* streamChunk(chunk, chunkSize);\n  }\n};\n\nconst readStream = async function* (stream) {\n  if (stream[Symbol.asyncIterator]) {\n    yield* stream;\n    return;\n  }\n\n  const reader = stream.getReader();\n  try {\n    for (;;) {\n      const { done, value } = await reader.read();\n      if (done) {\n        break;\n      }\n      yield value;\n    }\n  } finally {\n    await reader.cancel();\n  }\n};\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n  const iterator = readBytes(stream, chunkSize);\n\n  let bytes = 0;\n  let done;\n  let _onFinish = (e) => {\n    if (!done) {\n      done = true;\n      onFinish && onFinish(e);\n    }\n  };\n\n  return new ReadableStream(\n    {\n      async pull(controller) {\n        try {\n          const { done, value } = await iterator.next();\n\n          if (done) {\n            _onFinish();\n            controller.close();\n            return;\n          }\n\n          let len = value.byteLength;\n          if (onProgress) {\n            let loadedBytes = (bytes += len);\n            onProgress(loadedBytes);\n          }\n          controller.enqueue(new Uint8Array(value));\n        } catch (err) {\n          _onFinish(err);\n          throw err;\n        }\n      },\n      cancel(reason) {\n        _onFinish(reason);\n        return iterator.return();\n      },\n    },\n    {\n      highWaterMark: 2,\n    }\n  );\n};\n", "/**\n * Estimate data: URL byte lengths *without* allocating large buffers.\n * - Fetch percent-decodes a base64 body before decoding it.\n * - Node's Buffer.from(body, 'base64') sizes its backing allocation from the\n *   raw body, including ignored characters and content after padding.\n * - Non-base64 data is percent-decoded and then encoded as UTF-8.\n */\nconst isHexDigit = (charCode) =>\n  (charCode >= 48 && charCode <= 57) ||\n  (charCode >= 65 && charCode <= 70) ||\n  (charCode >= 97 && charCode <= 102);\n\nconst isPercentEncodedByte = (str, i, len) =>\n  i + 2 < len && isHexDigit(str.charCodeAt(i + 1)) && isHexDigit(str.charCodeAt(i + 2));\n\nconst hexValue = (charCode) => (charCode <= 57 ? charCode - 48 : (charCode & 0xdf) - 55);\n\nconst isBase64Char = (charCode) =>\n  (charCode >= 65 && charCode <= 90) || // A-Z\n  (charCode >= 97 && charCode <= 122) || // a-z\n  (charCode >= 48 && charCode <= 57) || // 0-9\n  charCode === 43 || // +\n  charCode === 47 || // /\n  charCode === 45 || // - (base64url)\n  charCode === 95; // _ (base64url)\n\nconst isBase64Whitespace = (charCode) =>\n  charCode === 9 || charCode === 10 || charCode === 12 || charCode === 13 || charCode === 32;\n\nconst base64Bytes = (significant) => {\n  const groups = Math.floor(significant / 4);\n  const remainder = significant % 4;\n  return groups * 3 + (remainder === 2 ? 1 : remainder === 3 ? 2 : 0);\n};\n\n// Buffer.byteLength(body, 'base64') uses the raw string length as an allocation\n// upper bound even when Buffer.from later ignores characters or stops at '='.\nconst estimateBase64BufferAllocation = (body) => {\n  const len = body.length;\n  let padding = 0;\n\n  if (len > 0 && body.charCodeAt(len - 1) === 61 /* '=' */) {\n    padding++;\n\n    if (len > 1 && body.charCodeAt(len - 2) === 61 /* '=' */) {\n      padding++;\n    }\n  }\n\n  return Math.floor(((len - padding) * 3) / 4);\n};\n\nconst estimatePercentDecodedBase64Bytes = (body) => {\n  const len = body.length;\n  let significant = 0;\n  let padding = 0;\n  let invalid = false;\n\n  for (let i = 0; i < len; i++) {\n    let code = body.charCodeAt(i);\n\n    if (code === 37 /* '%' */ && isPercentEncodedByte(body, i, len)) {\n      code = hexValue(body.charCodeAt(i + 1)) * 16 + hexValue(body.charCodeAt(i + 2));\n      i += 2;\n    }\n\n    if (isBase64Whitespace(code)) {\n      continue;\n    }\n\n    if (code === 61 /* '=' */) {\n      padding++;\n      continue;\n    }\n\n    if (!isBase64Char(code) || padding > 0) {\n      invalid = true;\n      continue;\n    }\n\n    significant++;\n  }\n\n  // Fetch rejects malformed forgiving-base64 input. Returning the raw-size\n  // allocation bound keeps that invalid input from becoming a pre-check bypass.\n  if (\n    invalid ||\n    padding > 2 ||\n    (padding > 0 && (significant + padding) % 4 !== 0) ||\n    significant % 4 === 1\n  ) {\n    return estimateBase64BufferAllocation(body);\n  }\n\n  return base64Bytes(significant);\n};\n\nconst estimateDataURLBytes = (url, estimateBase64) => {\n  if (!url || typeof url !== 'string') return 0;\n  if (!url.startsWith('data:')) return 0;\n\n  const comma = url.indexOf(',');\n  if (comma < 0) return 0;\n\n  const meta = url.slice(5, comma);\n  const body = url.slice(comma + 1);\n  const isBase64 = /;base64/i.test(meta);\n\n  if (isBase64) {\n    return estimateBase64(body);\n  }\n\n  // Compute UTF-8 byte length directly from UTF-16 code units without allocating\n  // a byte buffer (TextEncoder.encode would defeat the DoS guard on large bodies).\n  // Valid %XX triplets count as one decoded byte; this matches the bytes that\n  // decodeURIComponent(body) would produce before Buffer re-encodes the string.\n  let bytes = 0;\n  for (let i = 0, len = body.length; i < len; i++) {\n    const c = body.charCodeAt(i);\n    if (c === 37 /* '%' */ && isPercentEncodedByte(body, i, len)) {\n      bytes += 1;\n      i += 2;\n    } else if (c < 0x80) {\n      bytes += 1;\n    } else if (c < 0x800) {\n      bytes += 2;\n    } else if (c >= 0xd800 && c <= 0xdbff && i + 1 < len) {\n      const next = body.charCodeAt(i + 1);\n      if (next >= 0xdc00 && next <= 0xdfff) {\n        bytes += 4;\n        i++;\n      } else {\n        bytes += 3;\n      }\n    } else {\n      bytes += 3;\n    }\n  }\n  return bytes;\n};\n\n/**\n * Estimate the percent-decoded payload size used by Fetch data: URLs.\n *\n * @param {string} url\n * @returns {number}\n */\nexport default function estimateDataURLDecodedBytes(url) {\n  // Fetch removes URL fragments before processing a data: URL.\n  const fragmentIndex = typeof url === 'string' ? url.indexOf('#') : -1;\n\n  return estimateDataURLBytes(\n    fragmentIndex === -1 ? url : url.slice(0, fragmentIndex),\n    estimatePercentDecodedBase64Bytes\n  );\n}\n\n/**\n * Estimate the Buffer backing allocation used by Node's raw base64 decoder.\n *\n * @param {string} url\n * @returns {number}\n */\nexport function estimateDataURLBufferAllocation(url) {\n  return estimateDataURLBytes(url, estimateBase64BufferAllocation);\n}\n", "export const VERSION = \"1.20.0\";", "import platform from '../platform/index.js';\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport composeSignals from '../helpers/composeSignals.js';\nimport { trackStream } from '../helpers/trackStream.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {\n  progressEventReducer,\n  progressEventDecorator,\n  asyncDecorator,\n} from '../helpers/progressEventReducer.js';\nimport resolveConfig from '../helpers/resolveConfig.js';\nimport settle from '../core/settle.js';\nimport estimateDataURLDecodedBytes from '../helpers/estimateDataURLDecodedBytes.js';\nimport { VERSION } from '../env/data.js';\nimport { toByteStringHeaderObject } from '../helpers/sanitizeHeaderValue.js';\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst DEFAULT_REQUEST_OPTIONS = {\n  cache: 'default',\n  redirect: 'follow',\n  referrer: 'about:client',\n  referrerPolicy: '',\n  mode: 'cors',\n  integrity: '',\n  keepalive: false,\n  priority: 'auto',\n  window: null,\n};\n\nconst { isFunction } = utils;\n\n/**\n * Encode a UTF-8 string to a Latin-1 byte string for use with btoa().\n * This is a modern replacement for the deprecated unescape(encodeURIComponent(str)) pattern.\n *\n * @param {string} str The string to encode\n *\n * @returns {string} UTF-8 bytes as a Latin-1 string\n */\nconst encodeUTF8 = (str) =>\n  encodeURIComponent(str).replace(/%([0-9A-F]{2})/gi, (_, hex) =>\n    String.fromCharCode(parseInt(hex, 16))\n  );\n\n// Node's WHATWG URL parser returns `username` and `password` percent-encoded.\n// Decode before composing the `auth` option so credentials such as\n// `my%40email.com:pass` are sent as `my@email.com:pass`. Falls back to the\n// original value for malformed input so a bad encoding never throws.\nconst decodeURIComponentSafe = (value) => {\n  if (!utils.isString(value)) {\n    return value;\n  }\n\n  try {\n    return decodeURIComponent(value);\n  } catch (error) {\n    return value;\n  }\n};\n\nconst test = (fn, ...args) => {\n  try {\n    return !!fn(...args);\n  } catch (e) {\n    return false;\n  }\n};\n\nconst maybeWithAuthCredentials = (url) => {\n  const protocolIndex = url.indexOf('://');\n  let urlToCheck = url;\n  if (protocolIndex !== -1) {\n    urlToCheck = urlToCheck.slice(protocolIndex + 3);\n  }\n  return urlToCheck.includes('@') || urlToCheck.includes(':');\n};\n\nconst factory = (env) => {\n  const globalObject =\n    utils.global !== undefined && utils.global !== null ? utils.global : globalThis;\n  const { ReadableStream, TextEncoder } = globalObject;\n\n  env = utils.merge.call(\n    {\n      skipUndefined: true,\n    },\n    {\n      Request: globalObject.Request,\n      Response: globalObject.Response,\n    },\n    env\n  );\n\n  const { fetch: envFetch, Request, Response } = env;\n  const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n  const isRequestSupported = isFunction(Request);\n  const isResponseSupported = isFunction(Response);\n\n  if (!isFetchSupported) {\n    return false;\n  }\n\n  const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n  const encodeText =\n    isFetchSupported &&\n    (typeof TextEncoder === 'function'\n      ? (\n          (encoder) => (str) =>\n            encoder.encode(str)\n        )(new TextEncoder())\n      : async (str) => new Uint8Array(await new Request(str).arrayBuffer()));\n\n  const supportsRequestStream =\n    isRequestSupported &&\n    isReadableStreamSupported &&\n    test(() => {\n      let duplexAccessed = false;\n\n      const request = new Request(platform.origin, {\n        body: new ReadableStream(),\n        method: 'POST',\n        get duplex() {\n          duplexAccessed = true;\n          return 'half';\n        },\n      });\n\n      const hasContentType = request.headers.has('Content-Type');\n\n      if (request.body != null) {\n        request.body.cancel();\n      }\n\n      return duplexAccessed && !hasContentType;\n    });\n\n  const supportsResponseStream =\n    isResponseSupported &&\n    isReadableStreamSupported &&\n    test(() => utils.isReadableStream(new Response('').body));\n\n  const resolvers = {\n    stream: supportsResponseStream && ((res) => res.body),\n  };\n\n  isFetchSupported &&\n    (() => {\n      ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach((type) => {\n        !resolvers[type] &&\n          (resolvers[type] = (res, config) => {\n            let method = res && res[type];\n\n            if (method) {\n              return method.call(res);\n            }\n\n            throw new AxiosError(\n              `Response type '${type}' is not supported`,\n              AxiosError.ERR_NOT_SUPPORT,\n              config\n            );\n          });\n      });\n    })();\n\n  const getBodyLength = async (body) => {\n    if (body == null) {\n      return 0;\n    }\n\n    if (utils.isBlob(body)) {\n      return body.size;\n    }\n\n    if (utils.isSpecCompliantForm(body)) {\n      const _request = new Request(platform.origin, {\n        method: 'POST',\n        body,\n      });\n      return (await _request.arrayBuffer()).byteLength;\n    }\n\n    if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n      return body.byteLength;\n    }\n\n    if (utils.isURLSearchParams(body)) {\n      body = body + '';\n    }\n\n    if (utils.isString(body)) {\n      return (await encodeText(body)).byteLength;\n    }\n  };\n\n  const resolveBodyLength = async (headers, body) => {\n    const length = utils.toFiniteNumber(headers.getContentLength());\n\n    return length == null ? getBodyLength(body) : length;\n  };\n\n  return async (config) => {\n    let {\n      url,\n      method,\n      data,\n      signal,\n      cancelToken,\n      timeout,\n      onDownloadProgress,\n      onUploadProgress,\n      responseType,\n      headers,\n      withCredentials = 'same-origin',\n      fetchOptions,\n      maxContentLength,\n      maxBodyLength,\n      maxRedirects,\n    } = resolveConfig(config);\n\n    const hasMaxContentLength = utils.isNumber(maxContentLength) && maxContentLength > -1;\n    const hasMaxBodyLength = utils.isNumber(maxBodyLength) && maxBodyLength > -1;\n    const own = (key) => (utils.hasOwnProp(config, key) ? config[key] : undefined);\n\n    let _fetch = envFetch || fetch;\n\n    responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n    let composedSignal = composeSignals(\n      [signal, cancelToken && cancelToken.toAbortSignal()],\n      timeout\n    );\n\n    let request = null;\n\n    const unsubscribe =\n      composedSignal &&\n      composedSignal.unsubscribe &&\n      (() => {\n        composedSignal.unsubscribe();\n      });\n\n    let requestContentLength;\n\n    // AxiosError we raise while the request body is being streamed. Captured\n    // by identity so the catch block can surface it directly, regardless of\n    // how the runtime wraps the resulting fetch rejection (undici exposes it\n    // as `err.cause`; some browsers drop the original error entirely).\n    let pendingBodyError = null;\n\n    const maxBodyLengthError = () =>\n      new AxiosError(\n        'Request body larger than maxBodyLength limit',\n        AxiosError.ERR_BAD_REQUEST,\n        config,\n        request\n      );\n\n    try {\n      // HTTP basic authentication\n      let auth = undefined;\n      const configAuth = own('auth');\n\n      if (configAuth) {\n        const username = utils.getSafeProp(configAuth, 'username') || '';\n        const password = utils.getSafeProp(configAuth, 'password') || '';\n        auth = {\n          username,\n          password,\n        };\n      }\n\n      if (maybeWithAuthCredentials(url)) {\n        const parsedURL = new URL(url, platform.origin);\n\n        if (!auth && (parsedURL.username || parsedURL.password)) {\n          const urlUsername = decodeURIComponentSafe(parsedURL.username);\n          const urlPassword = decodeURIComponentSafe(parsedURL.password);\n          auth = {\n            username: urlUsername,\n            password: urlPassword,\n          };\n        }\n\n        if (parsedURL.username || parsedURL.password) {\n          parsedURL.username = '';\n          parsedURL.password = '';\n          url = parsedURL.href;\n        }\n      }\n\n      if (auth) {\n        headers.delete('authorization');\n        headers.set(\n          'Authorization',\n          'Basic ' + btoa(encodeUTF8((auth.username || '') + ':' + (auth.password || '')))\n        );\n      }\n\n      // Enforce maxContentLength for data: URLs up-front so we never materialize\n      // an oversized payload. The HTTP adapter applies the same check (see http.js\n      // \"if (protocol === 'data:')\" branch).\n      if (hasMaxContentLength && typeof url === 'string' && url.startsWith('data:')) {\n        const estimated = estimateDataURLDecodedBytes(url);\n        if (estimated > maxContentLength) {\n          throw new AxiosError(\n            'maxContentLength size of ' + maxContentLength + ' exceeded',\n            AxiosError.ERR_BAD_RESPONSE,\n            config,\n            request\n          );\n        }\n      }\n\n      // Enforce maxBodyLength against known-size bodies before dispatch using\n      // the body's *actual* size \u2014 never a caller-declared Content-Length,\n      // which could under-report to slip an oversized body past the check.\n      // Unknown-size streams return undefined here and are counted per-chunk\n      // below as fetch consumes them.\n      if (hasMaxBodyLength && method !== 'get' && method !== 'head') {\n        const outboundLength = await getBodyLength(data);\n        if (typeof outboundLength === 'number' && isFinite(outboundLength)) {\n          requestContentLength = outboundLength;\n          if (outboundLength > maxBodyLength) {\n            throw maxBodyLengthError();\n          }\n        }\n      }\n\n      // A streamed body under maxBodyLength must be counted as fetch consumes\n      // it; its size is never trusted from a caller-declared Content-Length.\n      const mustEnforceStreamBody =\n        hasMaxBodyLength && (utils.isReadableStream(data) || utils.isStream(data));\n\n      const trackRequestStream = (stream, onProgress, flush) =>\n        trackStream(\n          stream,\n          DEFAULT_CHUNK_SIZE,\n          (loadedBytes) => {\n            if (hasMaxBodyLength && loadedBytes > maxBodyLength) {\n              throw (pendingBodyError = maxBodyLengthError());\n            }\n            onProgress && onProgress(loadedBytes);\n          },\n          flush\n        );\n\n      if (\n        supportsRequestStream &&\n        method !== 'get' &&\n        method !== 'head' &&\n        (onUploadProgress || mustEnforceStreamBody)\n      ) {\n        requestContentLength =\n          requestContentLength == null\n            ? await resolveBodyLength(headers, data)\n            : requestContentLength;\n\n        // A declared length of 0 is only trusted to skip the wrap when we are\n        // not enforcing a stream limit (which must not rely on that header).\n        if (requestContentLength !== 0 || mustEnforceStreamBody) {\n          let _request = new Request(url, {\n            method: 'POST',\n            body: data,\n            duplex: 'half',\n          });\n\n          let contentTypeHeader;\n\n          if (\n            utils.isFormData(data) &&\n            (contentTypeHeader = _request.headers.get('content-type'))\n          ) {\n            headers.setContentType(contentTypeHeader);\n          }\n\n          if (_request.body) {\n            const [onProgress, flush] =\n              (onUploadProgress &&\n                progressEventDecorator(\n                  requestContentLength,\n                  progressEventReducer(asyncDecorator(onUploadProgress))\n                )) ||\n              [];\n\n            data = trackRequestStream(_request.body, onProgress, flush);\n          }\n        }\n      } else if (\n        mustEnforceStreamBody &&\n        !isRequestSupported &&\n        isReadableStreamSupported &&\n        method !== 'get' &&\n        method !== 'head'\n      ) {\n        data = trackRequestStream(data);\n      } else if (\n        mustEnforceStreamBody &&\n        isRequestSupported &&\n        !supportsRequestStream &&\n        method !== 'get' &&\n        method !== 'head'\n      ) {\n        throw new AxiosError(\n          'Stream request bodies are not supported by the current fetch implementation',\n          AxiosError.ERR_NOT_SUPPORT,\n          config,\n          request\n        );\n      }\n\n      if (!utils.isString(withCredentials)) {\n        withCredentials = withCredentials ? 'include' : 'omit';\n      }\n\n      // Cloudflare Workers throws when credentials are defined\n      // see https://github.com/cloudflare/workerd/issues/902\n      const isCredentialsSupported = isRequestSupported && 'credentials' in Request.prototype;\n\n      // If data is FormData and Content-Type is multipart/form-data without boundary,\n      // delete it so fetch can set it correctly with the boundary\n      if (utils.isFormData(data)) {\n        const contentType = headers.getContentType();\n        if (\n          contentType &&\n          /^multipart\\/form-data/i.test(contentType) &&\n          !/boundary=/i.test(contentType)\n        ) {\n          headers.delete('content-type');\n        }\n      }\n\n      // Set User-Agent header if not already set (fetch defaults to 'node' in Node.js)\n      headers.set('User-Agent', 'axios/' + VERSION, false);\n\n      const safeFetchOptions =\n        fetchOptions == null ? fetchOptions : Object.assign(Object.create(null), fetchOptions);\n\n      if (safeFetchOptions) {\n        // These options are owned by Axios and are already reflected in the\n        // resolved Request passed to fetch.\n        delete safeFetchOptions.body;\n        delete safeFetchOptions.headers;\n        delete safeFetchOptions.method;\n        delete safeFetchOptions.signal;\n        delete safeFetchOptions.duplex;\n        delete safeFetchOptions.credentials;\n      }\n\n      const resolvedOptions = Object.assign(Object.create(null), safeFetchOptions, {\n        signal: composedSignal,\n        method: method.toUpperCase(),\n        headers: toByteStringHeaderObject(headers.normalize()),\n        body: data,\n        duplex: 'half',\n        credentials: isCredentialsSupported ? withCredentials : undefined,\n      });\n\n      if (isRequestSupported) {\n        utils.forEach(DEFAULT_REQUEST_OPTIONS, (value, key) => {\n          if (resolvedOptions[key] === undefined) {\n            resolvedOptions[key] = value;\n          }\n        });\n\n        if (resolvedOptions.signal === undefined) {\n          resolvedOptions.signal = null;\n        }\n\n        if (resolvedOptions.body === undefined) {\n          resolvedOptions.body = null;\n        }\n      }\n\n      if (maxRedirects === 0) {\n        resolvedOptions.redirect = 'manual';\n\n        if (safeFetchOptions) {\n          safeFetchOptions.redirect = 'manual';\n        }\n      }\n\n      request = isRequestSupported && new Request(url, resolvedOptions);\n\n      let response = await (isRequestSupported\n        ? _fetch(request, safeFetchOptions)\n        : _fetch(url, resolvedOptions));\n\n      const responseHeaders = AxiosHeaders.from(response.headers);\n\n      // Cheap pre-check: if the server honestly declares a content-length that\n      // already exceeds the cap, reject before we start streaming.\n      if (hasMaxContentLength) {\n        const declaredLength = utils.toFiniteNumber(responseHeaders.getContentLength());\n        if (declaredLength != null && declaredLength > maxContentLength) {\n          throw new AxiosError(\n            'maxContentLength size of ' + maxContentLength + ' exceeded',\n            AxiosError.ERR_BAD_RESPONSE,\n            config,\n            request\n          );\n        }\n      }\n\n      const isStreamResponse =\n        supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n      if (\n        supportsResponseStream &&\n        response.body &&\n        (onDownloadProgress || hasMaxContentLength || (isStreamResponse && unsubscribe))\n      ) {\n        const options = {};\n\n        ['status', 'statusText', 'headers'].forEach((prop) => {\n          options[prop] = response[prop];\n        });\n\n        const responseContentLength = utils.toFiniteNumber(responseHeaders.getContentLength());\n\n        const [onProgress, flush] =\n          (onDownloadProgress &&\n            progressEventDecorator(\n              responseContentLength,\n              progressEventReducer(asyncDecorator(onDownloadProgress), true)\n            )) ||\n          [];\n\n        let bytesRead = 0;\n        const onChunkProgress = (loadedBytes) => {\n          if (hasMaxContentLength) {\n            bytesRead = loadedBytes;\n            if (bytesRead > maxContentLength) {\n              throw new AxiosError(\n                'maxContentLength size of ' + maxContentLength + ' exceeded',\n                AxiosError.ERR_BAD_RESPONSE,\n                config,\n                request\n              );\n            }\n          }\n          onProgress && onProgress(loadedBytes);\n        };\n\n        response = new Response(\n          trackStream(response.body, DEFAULT_CHUNK_SIZE, onChunkProgress, () => {\n            flush && flush();\n            unsubscribe && unsubscribe();\n          }),\n          options\n        );\n      }\n\n      responseType = responseType || 'text';\n\n      let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](\n        response,\n        config\n      );\n\n      // Fallback enforcement for environments without ReadableStream support\n      // (legacy runtimes). Detect materialized size from typed output; skip\n      // streams/Response passthrough since the user will read those themselves.\n      if (hasMaxContentLength && !supportsResponseStream && !isStreamResponse) {\n        let materializedSize;\n        if (responseData != null) {\n          if (typeof responseData.byteLength === 'number') {\n            materializedSize = responseData.byteLength;\n          } else if (typeof responseData.size === 'number') {\n            materializedSize = responseData.size;\n          } else if (typeof responseData === 'string') {\n            materializedSize =\n              typeof TextEncoder === 'function'\n                ? new TextEncoder().encode(responseData).byteLength\n                : responseData.length;\n          }\n        }\n        if (typeof materializedSize === 'number' && materializedSize > maxContentLength) {\n          throw new AxiosError(\n            'maxContentLength size of ' + maxContentLength + ' exceeded',\n            AxiosError.ERR_BAD_RESPONSE,\n            config,\n            request\n          );\n        }\n      }\n\n      !isStreamResponse && unsubscribe && unsubscribe();\n\n      return await new Promise((resolve, reject) => {\n        settle(resolve, reject, {\n          data: responseData,\n          headers: AxiosHeaders.from(response.headers),\n          status: response.status,\n          statusText: response.statusText,\n          config,\n          request,\n        });\n      });\n    } catch (err) {\n      unsubscribe && unsubscribe();\n\n      // Safari can surface fetch aborts as a DOMException-like object whose\n      // branded getters throw. Prefer our composed signal reason before reading\n      // the caught error, preserving timeout vs cancellation semantics.\n      if (composedSignal && composedSignal.aborted && composedSignal.reason instanceof AxiosError) {\n        const canceledError = composedSignal.reason;\n        canceledError.config = config;\n        request && (canceledError.request = request);\n        if (err !== canceledError) {\n          // Non-enumerable to match native Error `cause` semantics so loggers\n          // don't recurse into circular fetch internals (see #7205).\n          Object.defineProperty(canceledError, 'cause', {\n            __proto__: null,\n            value: err,\n            writable: true,\n            enumerable: false,\n            configurable: true,\n          });\n        }\n        throw canceledError;\n      }\n\n      // Surface a maxBodyLength violation we raised while the request body was\n      // being streamed. Matching by identity (rather than reading\n      // `err.cause.isAxiosError`) keeps the error deterministic across runtimes\n      // and avoids both prototype-pollution reads and mis-attributing a foreign\n      // AxiosError that merely happened to land in `err.cause`.\n      if (pendingBodyError) {\n        request && !pendingBodyError.request && (pendingBodyError.request = request);\n        throw pendingBodyError;\n      }\n\n      // Re-throw AxiosErrors we raised synchronously (data: URL / content-length\n      // pre-checks, response size enforcement) without re-wrapping them.\n      if (err instanceof AxiosError) {\n        request && !err.request && (err.request = request);\n        throw err;\n      }\n\n      if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n        const networkError = new AxiosError(\n          'Network Error',\n          AxiosError.ERR_NETWORK,\n          config,\n          request,\n          err && err.response\n        );\n        // Non-enumerable to match native Error `cause` semantics so loggers\n        // don't recurse into circular fetch internals (see #7205).\n        Object.defineProperty(networkError, 'cause', {\n          __proto__: null,\n          value: err.cause || err,\n          writable: true,\n          enumerable: false,\n          configurable: true,\n        });\n        throw networkError;\n      }\n\n      throw AxiosError.from(err, err && err.code, config, request, err && err.response);\n    }\n  };\n};\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n  let env = (config && config.env) || {};\n  const { fetch, Request, Response } = env;\n  const seeds = [Request, Response, fetch];\n\n  let len = seeds.length,\n    i = len,\n    seed,\n    target,\n    map = seedCache;\n\n  while (i--) {\n    seed = seeds[i];\n    target = map.get(seed);\n\n    target === undefined && map.set(seed, (target = i ? new Map() : factory(env)));\n\n    map = target;\n  }\n\n  return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n", "import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from '../core/AxiosError.js';\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n *\n * @type {Object<string, Function|Object>}\n */\nconst knownAdapters = {\n  http: httpAdapter,\n  xhr: xhrAdapter,\n  fetch: {\n    get: fetchAdapter.getFetch,\n  },\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n  if (fn) {\n    try {\n      // Null-proto descriptors so a polluted Object.prototype.get cannot turn\n      // these data descriptors into accessor descriptors on the way in.\n      Object.defineProperty(fn, 'name', { __proto__: null, value });\n    } catch (e) {\n      // eslint-disable-next-line no-empty\n    }\n    Object.defineProperty(fn, 'adapterName', { __proto__: null, value });\n  }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n *\n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n *\n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) =>\n  utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n *\n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n  adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n  const { length } = adapters;\n  let nameOrAdapter;\n  let adapter;\n\n  const rejectedReasons = {};\n\n  for (let i = 0; i < length; i++) {\n    nameOrAdapter = adapters[i];\n    let id;\n\n    adapter = nameOrAdapter;\n\n    if (!isResolvedHandle(nameOrAdapter)) {\n      adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n      if (adapter === undefined) {\n        throw new AxiosError(`Unknown adapter '${id}'`);\n      }\n    }\n\n    if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n      break;\n    }\n\n    rejectedReasons[id || '#' + i] = adapter;\n  }\n\n  if (!adapter) {\n    const reasons = Object.entries(rejectedReasons).map(\n      ([id, state]) =>\n        `adapter ${id} ` +\n        (state === false ? 'is not supported by the environment' : 'is not available in the build')\n    );\n\n    let s = length\n      ? reasons.length > 1\n        ? 'since :\\n' + reasons.map(renderReason).join('\\n')\n        : ' ' + renderReason(reasons[0])\n      : 'as no adapter specified';\n\n    throw new AxiosError(\n      `There is no suitable adapter to dispatch the request ` + s,\n      AxiosError.ERR_NOT_SUPPORT\n    );\n  }\n\n  return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n  /**\n   * Resolve an adapter from a list of adapter names or functions.\n   * @type {Function}\n   */\n  getAdapter,\n\n  /**\n   * Exposes all known adapters\n   * @type {Object<string, Function|Object>}\n   */\n  adapters: knownAdapters,\n};\n", "'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from '../adapters/adapters.js';\nimport utils from '../utils.js';\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError(null, config);\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(_config) {\n  // Interceptors may replace the merged config with an ordinary object. Flatten\n  // it at the dispatch boundary so shared prototype members cannot become\n  // request behavior, while preserving intentional template/class members.\n  const config = utils.toSafeFlatObject(_config);\n\n  throwIfCancellationRequested(config);\n\n  config.headers = AxiosHeaders.from(utils.getSafeProp(config, 'headers'));\n\n  // Transform request data\n  config.data = transformData.call(config, config.transformRequest);\n\n  if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n    config.headers.setContentType('application/x-www-form-urlencoded', false);\n  }\n\n  const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n  return adapter(config).then(\n    function onAdapterResolution(response) {\n      throwIfCancellationRequested(config);\n\n      // Expose the current response on config so that transformResponse can\n      // attach it to any AxiosError it throws (e.g. on JSON parse failure).\n      // We clean it up afterwards to avoid polluting the config object.\n      config.response = response;\n      try {\n        response.data = transformData.call(config, config.transformResponse, response);\n      } finally {\n        delete config.response;\n      }\n\n      response.headers = AxiosHeaders.from(response.headers);\n\n      return response;\n    },\n    function onAdapterRejection(reason) {\n      if (!isCancel(reason)) {\n        throwIfCancellationRequested(config);\n\n        // Transform response data\n        if (reason && reason.response) {\n          config.response = reason.response;\n          try {\n            reason.response.data = transformData.call(\n              config,\n              config.transformResponse,\n              reason.response\n            );\n          } finally {\n            delete config.response;\n          }\n          reason.response.headers = AxiosHeaders.from(reason.response.headers);\n        }\n      }\n\n      return Promise.reject(reason);\n    }\n  );\n}\n", "'use strict';\n\nimport { VERSION } from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return (\n      '[Axios v' +\n      VERSION +\n      \"] Transitional option '\" +\n      opt +\n      \"'\" +\n      desc +\n      (message ? '. ' + message : '')\n    );\n  }\n\n  // eslint-disable-next-line func-names\n  return (value, opt, opts) => {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n  return (value, opt) => {\n    // eslint-disable-next-line no-console\n    console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n    return true;\n  };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object' || options === null) {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  const keys = Object.keys(options);\n  let i = keys.length;\n  while (i-- > 0) {\n    const opt = keys[i];\n    // Use hasOwnProperty so a polluted Object.prototype.<opt> cannot supply\n    // a non-function validator and cause a TypeError.\n    const validator = Object.prototype.hasOwnProperty.call(schema, opt) ? schema[opt] : undefined;\n    if (validator) {\n      const value = options[opt];\n      const result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError(\n          'option ' + opt + ' must be ' + result,\n          AxiosError.ERR_BAD_OPTION_VALUE\n        );\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nexport default {\n  assertOptions,\n  validators,\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport methodList from './methodList.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\nimport transitionalDefaults from '../defaults/transitional.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n  constructor(instanceConfig) {\n    this.defaults = instanceConfig || {};\n    this.interceptors = {\n      request: new InterceptorManager(),\n      response: new InterceptorManager(),\n    };\n  }\n\n  /**\n   * Dispatch a request\n   *\n   * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n   * @param {?Object} config\n   *\n   * @returns {Promise} The Promise to be fulfilled\n   */\n  async request(configOrUrl, config) {\n    try {\n      return await this._request(configOrUrl, config);\n    } catch (err) {\n      if (err instanceof Error) {\n        try {\n          let dummy = {};\n\n          Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n          const dummyStack = dummy.stack;\n          let stack = '';\n\n          // slice off the Error: ... line\n          if (typeof dummyStack === 'string') {\n            const firstNewlineIndex = dummyStack.indexOf('\\n');\n\n            stack = firstNewlineIndex === -1 ? '' : dummyStack.slice(firstNewlineIndex + 1);\n          }\n\n          if (!err.stack) {\n            err.stack = stack;\n            // match without the 2 top stack lines\n          } else if (stack) {\n            const firstNewlineIndex = stack.indexOf('\\n');\n            const secondNewlineIndex =\n              firstNewlineIndex === -1 ? -1 : stack.indexOf('\\n', firstNewlineIndex + 1);\n            const stackWithoutTwoTopLines =\n              secondNewlineIndex === -1 ? '' : stack.slice(secondNewlineIndex + 1);\n\n            if (!String(err.stack).endsWith(stackWithoutTwoTopLines)) {\n              err.stack += '\\n' + stack;\n            }\n          }\n        } catch (e) {\n          // Ignore failures from custom stack hooks or un-writable stack properties.\n        }\n      }\n\n      throw err;\n    }\n  }\n\n  _request(configOrUrl, config) {\n    /*eslint no-param-reassign:0*/\n    // Allow for axios('example/url'[, config]) a la fetch API\n    if (typeof configOrUrl === 'string') {\n      config = config || {};\n      config.url = configOrUrl;\n    } else {\n      config = configOrUrl || {};\n    }\n\n    config = mergeConfig(this.defaults, config);\n\n    const { transitional, paramsSerializer, headers } = config;\n\n    if (transitional !== undefined) {\n      validator.assertOptions(\n        transitional,\n        {\n          silentJSONParsing: validators.transitional(validators.boolean),\n          forcedJSONParsing: validators.transitional(validators.boolean),\n          clarifyTimeoutError: validators.transitional(validators.boolean),\n          legacyInterceptorReqResOrdering: validators.transitional(validators.boolean),\n          advertiseZstdAcceptEncoding: validators.transitional(validators.boolean),\n          validateStatusUndefinedResolves: validators.transitional(validators.boolean),\n        },\n        false\n      );\n    }\n\n    if (paramsSerializer != null) {\n      if (utils.isFunction(paramsSerializer)) {\n        config.paramsSerializer = {\n          serialize: paramsSerializer,\n        };\n      } else {\n        validator.assertOptions(\n          paramsSerializer,\n          {\n            encode: validators.function,\n            serialize: validators.function,\n          },\n          true\n        );\n      }\n    }\n\n    // Set config.allowAbsoluteUrls\n    if (config.allowAbsoluteUrls !== undefined) {\n      // do nothing\n    } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n      config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n    } else {\n      config.allowAbsoluteUrls = true;\n    }\n\n    validator.assertOptions(\n      config,\n      {\n        baseUrl: validators.spelling('baseURL'),\n        withXsrfToken: validators.spelling('withXSRFToken'),\n      },\n      true\n    );\n\n    // Set config.method\n    config.method = (\n      utils.getSafeProp(config, 'method') ||\n      utils.getSafeProp(this.defaults, 'method') ||\n      'get'\n    ).toLowerCase();\n\n    // Flatten headers\n    let contextHeaders = headers && utils.merge(headers.common, headers[config.method]);\n\n    headers &&\n      utils.forEach(methodList.concat('common'), (method) => {\n        delete headers[method];\n      });\n\n    config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n    // filter out skipped interceptors\n    const requestInterceptorChain = [];\n    let synchronousRequestInterceptors = true;\n    this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n      if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n        return;\n      }\n\n      synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n      const transitional = config.transitional || transitionalDefaults;\n      const legacyInterceptorReqResOrdering =\n        transitional && transitional.legacyInterceptorReqResOrdering;\n\n      if (legacyInterceptorReqResOrdering) {\n        requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n      } else {\n        requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n      }\n    });\n\n    const responseInterceptorChain = [];\n    this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n      responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    let promise;\n    let i = 0;\n    let len;\n\n    if (!synchronousRequestInterceptors) {\n      const chain = [dispatchRequest.bind(this), undefined];\n      chain.unshift(...requestInterceptorChain);\n      chain.push(...responseInterceptorChain);\n      len = chain.length;\n\n      promise = Promise.resolve(config);\n\n      while (i < len) {\n        promise = promise.then(chain[i++], chain[i++]);\n      }\n\n      return promise;\n    }\n\n    len = requestInterceptorChain.length;\n\n    let newConfig = config;\n\n    while (i < len) {\n      const onFulfilled = requestInterceptorChain[i++];\n      const onRejected = requestInterceptorChain[i++];\n      try {\n        newConfig = onFulfilled ? onFulfilled(newConfig) : newConfig;\n      } catch (error) {\n        if (!onRejected) {\n          promise = Promise.reject(error);\n          break;\n        }\n\n        try {\n          const rejectedResult = onRejected.call(this, error);\n\n          if (utils.isThenable(rejectedResult)) {\n            promise = Promise.resolve(rejectedResult).then(() =>\n              dispatchRequest.call(this, newConfig)\n            );\n          }\n        } catch (rejectedError) {\n          promise = Promise.reject(rejectedError);\n        }\n\n        break;\n      }\n    }\n\n    if (!promise) {\n      try {\n        promise = dispatchRequest.call(this, newConfig);\n      } catch (error) {\n        promise = Promise.reject(error);\n      }\n    }\n\n    i = 0;\n    len = responseInterceptorChain.length;\n\n    while (i < len) {\n      promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n    }\n\n    return promise;\n  }\n\n  getUri(config) {\n    config = mergeConfig(this.defaults, config);\n    const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls, config);\n    return buildURL(fullPath, config.params, config.paramsSerializer);\n  }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function (url, config) {\n    return this.request(\n      mergeConfig(config || {}, {\n        method,\n        url,\n        data: config && utils.hasOwnProp(config, 'data') ? config.data : undefined,\n      })\n    );\n  };\n});\n\nutils.forEach(['post', 'put', 'patch', 'query'], function forEachMethodWithData(method) {\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(\n        mergeConfig(config || {}, {\n          method,\n          headers: isForm\n            ? {\n                'Content-Type': 'multipart/form-data',\n              }\n            : {},\n          url,\n          data,\n        })\n      );\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  // QUERY is a safe/idempotent read method; multipart form bodies don't fit\n  // its semantics, so no queryForm shorthand is generated.\n  if (method !== 'query') {\n    Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n  }\n});\n\nexport default Axios;\n", "'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n  constructor(executor) {\n    if (typeof executor !== 'function') {\n      throw new TypeError('executor must be a function.');\n    }\n\n    let resolvePromise;\n\n    this.promise = new Promise(function promiseExecutor(resolve) {\n      resolvePromise = resolve;\n    });\n\n    const token = this;\n\n    // eslint-disable-next-line func-names\n    this.promise.then((cancel) => {\n      if (!token._listeners) return;\n\n      let i = token._listeners.length;\n\n      while (i-- > 0) {\n        token._listeners[i](cancel);\n      }\n      token._listeners = null;\n    });\n\n    // eslint-disable-next-line func-names\n    this.promise.then = (onfulfilled) => {\n      let _resolve;\n      // eslint-disable-next-line func-names\n      const promise = new Promise((resolve) => {\n        token.subscribe(resolve);\n        _resolve = resolve;\n      }).then(onfulfilled);\n\n      promise.cancel = function reject() {\n        token.unsubscribe(_resolve);\n      };\n\n      return promise;\n    };\n\n    executor(function cancel(message, config, request) {\n      if (token.reason) {\n        // Cancellation has already been requested\n        return;\n      }\n\n      token.reason = new CanceledError(message, config, request);\n      resolvePromise(token.reason);\n    });\n  }\n\n  /**\n   * Throws a `CanceledError` if cancellation has been requested.\n   */\n  throwIfRequested() {\n    if (this.reason) {\n      throw this.reason;\n    }\n  }\n\n  /**\n   * Subscribe to the cancel signal\n   */\n\n  subscribe(listener) {\n    if (this.reason) {\n      listener(this.reason);\n      return;\n    }\n\n    if (this._listeners) {\n      this._listeners.push(listener);\n    } else {\n      this._listeners = [listener];\n    }\n  }\n\n  /**\n   * Unsubscribe from the cancel signal\n   */\n\n  unsubscribe(listener) {\n    if (!this._listeners) {\n      return;\n    }\n    const index = this._listeners.indexOf(listener);\n    if (index !== -1) {\n      this._listeners.splice(index, 1);\n    }\n  }\n\n  toAbortSignal() {\n    const controller = new AbortController();\n\n    const abort = (err) => {\n      controller.abort(err);\n    };\n\n    this.subscribe(abort);\n\n    controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n    return controller.signal;\n  }\n\n  /**\n   * Returns an object that contains a new `CancelToken` and a function that, when called,\n   * cancels the `CancelToken`.\n   */\n  static source() {\n    let cancel;\n    const token = new CancelToken(function executor(c) {\n      cancel = c;\n    });\n    return {\n      token,\n      cancel,\n    };\n  }\n}\n\nexport default CancelToken;\n", "'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  const args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n  return utils.isObject(payload) && payload.isAxiosError === true;\n}\n", "const HttpStatusCode = {\n  Continue: 100,\n  SwitchingProtocols: 101,\n  Processing: 102,\n  EarlyHints: 103,\n  Ok: 200,\n  Created: 201,\n  Accepted: 202,\n  NonAuthoritativeInformation: 203,\n  NoContent: 204,\n  ResetContent: 205,\n  PartialContent: 206,\n  MultiStatus: 207,\n  AlreadyReported: 208,\n  ImUsed: 226,\n  MultipleChoices: 300,\n  MovedPermanently: 301,\n  Found: 302,\n  SeeOther: 303,\n  NotModified: 304,\n  UseProxy: 305,\n  Unused: 306,\n  TemporaryRedirect: 307,\n  PermanentRedirect: 308,\n  BadRequest: 400,\n  Unauthorized: 401,\n  PaymentRequired: 402,\n  Forbidden: 403,\n  NotFound: 404,\n  MethodNotAllowed: 405,\n  NotAcceptable: 406,\n  ProxyAuthenticationRequired: 407,\n  RequestTimeout: 408,\n  Conflict: 409,\n  Gone: 410,\n  LengthRequired: 411,\n  PreconditionFailed: 412,\n  /**\n   * @deprecated Use `ContentTooLarge` instead.\n   */\n  PayloadTooLarge: 413,\n  ContentTooLarge: 413,\n  UriTooLong: 414,\n  UnsupportedMediaType: 415,\n  RangeNotSatisfiable: 416,\n  ExpectationFailed: 417,\n  ImATeapot: 418,\n  MisdirectedRequest: 421,\n  /**\n   * @deprecated Use `UnprocessableContent` instead.\n   */\n  UnprocessableEntity: 422,\n  UnprocessableContent: 422,\n  Locked: 423,\n  FailedDependency: 424,\n  TooEarly: 425,\n  UpgradeRequired: 426,\n  PreconditionRequired: 428,\n  TooManyRequests: 429,\n  RequestHeaderFieldsTooLarge: 431,\n  UnavailableForLegalReasons: 451,\n  InternalServerError: 500,\n  NotImplemented: 501,\n  BadGateway: 502,\n  ServiceUnavailable: 503,\n  GatewayTimeout: 504,\n  HttpVersionNotSupported: 505,\n  VariantAlsoNegotiates: 506,\n  InsufficientStorage: 507,\n  LoopDetected: 508,\n  NotExtended: 510,\n  NetworkAuthenticationRequired: 511,\n  WebServerReturnsAnUnknownError: 520,\n  WebServerIsDown: 521,\n  ConnectionTimedOut: 522,\n  OriginIsUnreachable: 523,\n  TimeoutOccurred: 524,\n  SslHandshakeFailed: 525,\n  InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n  if (HttpStatusCode[value] === undefined) {\n    HttpStatusCode[value] = key;\n  }\n});\n\nexport default HttpStatusCode;\n", "'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport { VERSION } from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from './core/AxiosHeaders.js';\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  const context = new Axios(defaultConfig);\n  const instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context, { allOwnKeys: true });\n\n  // Copy context to instance\n  utils.extend(instance, context, null, { allOwnKeys: true });\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = (thing) => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios;\n", "import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig,\n  create,\n} = axios;\n\nexport {\n  axios as default,\n  create,\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig,\n};\n", "import axios from 'axios'\n\nexport const api = axios.create({\n  withCredentials: true,\n  xsrfCookieName: 'csrftoken',\n  xsrfHeaderName: 'X-CSRFTOKEN'\n})\n", "import { api } from './api'\n\ninterface IEnvironment {\n  VAPID_PUBLIC_KEY: string | null\n}\n\nexport const env: IEnvironment = {\n  VAPID_PUBLIC_KEY: null\n}\n\nasync function fetchEnvironment() {\n  const { data } = await api.get<IEnvironment>('/api/env/')\n  Object.assign(env, data)\n}\n\n/* Just fetch immediately, no error handling for now */\nfetchEnvironment()\n", "import type {\n  Heartbeat,\n  IChannelsMessage,\n  SocketOptions,\n  SocketState,\n  TypeHandler\n} from './types'\n\ntype ReadyState = (typeof SocketState)[keyof typeof SocketState]\ntype ReadyStateHandler = (readyState: ReadyState) => void\n\nexport default class Socket {\n  private readyStateHandlers: Set<ReadyStateHandler>\n  private heartbeats: Heartbeat[]\n  private options: SocketOptions\n  private _readyState?: ReadyState // last readyState value\n  private typeHandlers: Map<string, Set<TypeHandler>>\n  private url: string | URL\n  private ws?: WebSocket\n\n  constructor(url: string | URL, opts?: SocketOptions) {\n    this.readyStateHandlers = new Set()\n    this.heartbeats = []\n    this.options = opts || {}\n    this.typeHandlers = new Map()\n    this.url = url\n    if (!opts?.manual) this.connect()\n  }\n\n  public get readyState() {\n    return this.ws?.readyState as ReadyState\n  }\n\n  /**\n   * Listen to ready state changes\n   * @param handler Callback to handle changes\n   * @returns dispose method\n   */\n  public onReadyStateChanged(handler: ReadyStateHandler) {\n    this.readyStateHandlers.add(handler)\n    return () => {\n      this.readyStateHandlers.delete(handler)\n    }\n  }\n\n  /**\n   * Registers a type listener...\n   * @param name Type name\n   * @param handler Event handler\n   * @returns dispose method - call to remove handler\n   */\n  public registerTypeHandler(name: string, handler: TypeHandler) {\n    if (!this.typeHandlers.has(name)) this.typeHandlers.set(name, new Set())\n    const handlers = this.typeHandlers.get(name)!\n    handlers.add(handler)\n    return () => {\n      handlers.delete(handler)\n    }\n  }\n\n  private updateReadyState() {\n    if (this.readyState === undefined || this._readyState === this.readyState)\n      return\n    this._readyState = this.readyState\n    for (const handler of this.readyStateHandlers) handler(this.readyState)\n  }\n\n  public connect() {\n    this.ws = new WebSocket(this.url)\n    this.updateReadyState()\n\n    this.ws.onerror = this.updateReadyState.bind(this)\n    this.ws.onclose = () => {\n      this.updateReadyState()\n      this.heartbeat('off')\n    }\n    this.ws.onopen = () => {\n      this.updateReadyState()\n      this.heartbeat('incoming')\n      this.heartbeat('outgoing')\n    }\n    this.ws.onmessage = (event) => {\n      this.updateReadyState()\n      this.heartbeat('incoming')\n      const msg: IChannelsMessage = JSON.parse(event.data)\n\n      // Handle type message\n      this.handleTypeMessage(msg)\n    }\n  }\n\n  private handleTypeMessage(msg: IChannelsMessage) {\n    const [type, ...action] = msg.action.split('.')\n    const handlers = this.typeHandlers.get(type)\n    if (!handlers) {\n      if (this.options.debug)\n        console.warn(`No handler for message of type '${type}'`)\n      return\n    }\n    for (const handler of handlers)\n      handler({ action: action.join('.'), payload: msg.payload })\n  }\n\n  public close() {\n    // Unregister listeners here?\n    if (!this.ws) return\n    this.ws.onopen = () => {\n      throw new Error('Undead socket detected')\n    }\n    this.ws.onmessage = null\n    this.ws.onerror = null\n    // onclose is left in place, so that the ready state reaches Closed and\n    // whoever listens for it gets a chance to reconnect.\n    this.ws.close()\n    this.updateReadyState()\n  }\n\n  public get isOpen() {\n    return this.readyState === WebSocket.OPEN\n  }\n\n  /**\n   * Send a message to server, without listening to response\n   * @param action action name\n   * @param payload payload\n   */\n  public send(action: string, payload?: object) {\n    // Does not register a response listener\n    if (!this.isOpen)\n      throw new Error(`Socket not open (readyState ${this.readyState})`)\n    this.heartbeat('outgoing')\n    this.ws!.send(JSON.stringify({ action, payload }))\n  }\n\n  public removeHeartbeat(callback: Heartbeat['callback']) {\n    const finder = (beat: Heartbeat) => beat.callback === callback\n    const heartbeat = this.heartbeats.find(finder)\n    if (!heartbeat) return\n    // Clear timeout and drop from heartbeats\n    clearInterval(heartbeat.intervalID)\n    this.heartbeats = this.heartbeats.filter((beat) => !finder(beat))\n  }\n\n  private heartbeat(direction: NonNullable<Heartbeat['direction']> | 'off') {\n    if (direction === 'off') {\n      for (const beat of this.heartbeats) clearInterval(beat.intervalID)\n      return\n    }\n    for (const heartbeat of this.heartbeats) {\n      // Skip if heartbeat has a direction that doesn't match\n      if (heartbeat.direction && heartbeat.direction !== direction) continue\n      // Reset interval\n      clearInterval(heartbeat.intervalID)\n      heartbeat.intervalID = setInterval(\n        () => heartbeat.callback(this),\n        heartbeat.ms\n      )\n    }\n  }\n}\n", "import type Socket from './Socket'\n\nexport interface IChannelsMessage<T extends {} = {}> {\n  action: string\n  payload: T\n}\n\nexport type TypeHandler<T extends {} = {}> = (data: IChannelsMessage<T>) => void\n\nexport interface ChannelsConfig {\n  timeout?: number\n}\n\nexport const SocketState = {\n  Connecting: 0,\n  Open: 1,\n  Closing: 2,\n  Closed: 3\n} as const\n\nexport interface Heartbeat {\n  callback(socket: Socket): void\n  direction?: 'incoming' | 'outgoing'\n  ms: number\n  intervalID?: ReturnType<typeof setInterval>\n}\n\nexport interface SocketOptions {\n  config?: ChannelsConfig\n  debug?: boolean\n  manual?: boolean\n}\n", "import { userLoadedEvent } from '../events'\nimport Socket from './Socket'\nimport { SocketState, type SocketOptions } from './types'\n\nconst wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:'\nconst DEFAULT_CONFIG: SocketOptions['config'] = {\n  timeout: 20_000 // 20 s, longer than server's 15 s\n}\nconst RECONNECT_DELAY = 5_000\nconst MAX_RETRIES = 5\nlet userIsLoaded = false\nlet reconnectTimeout: ReturnType<typeof setTimeout> | undefined\nlet retriesLeft = MAX_RETRIES\n\nexport const socket = new Socket(`${wsProtocol}//${location.host}/ws/`, {\n  config: DEFAULT_CONFIG,\n  manual: true\n})\n\n/**\n * Attempt to reconnect, then schedule the next attempt. Rescheduling from\n * within the ticker is what keeps a chain going, so only the chain itself can\n * extend it.\n */\nfunction reconnectTicker() {\n  reconnectTimeout = undefined\n  if (\n    !userIsLoaded ||\n    document.visibilityState !== 'visible' ||\n    retriesLeft <= 0 ||\n    socket.readyState !== SocketState.Closed\n  )\n    return\n  retriesLeft--\n  socket.connect()\n  scheduleReconnect(RECONNECT_DELAY)\n}\n\n/**\n * Queue a reconnect attempt, unless one is already queued. Every close event\n * asks for a reconnect, and without this guard each one would start a chain of\n * its own and they would multiply for as long as connecting keeps failing.\n */\nfunction scheduleReconnect(delay: number) {\n  if (reconnectTimeout !== undefined || retriesLeft <= 0) return\n  reconnectTimeout = setTimeout(reconnectTicker, delay)\n}\n\n/**\n * The user came back, or the device did. Whatever made the earlier attempts\n * fail may well be gone, so hand the socket a fresh budget of retries.\n */\nfunction restartReconnecting() {\n  retriesLeft = MAX_RETRIES\n  scheduleReconnect(0)\n}\n\nuserLoadedEvent.on(() => {\n  userIsLoaded = true\n  socket.connect()\n})\n\ndocument.addEventListener('visibilitychange', () => {\n  if (document.visibilityState === 'visible') restartReconnecting()\n})\n\nwindow.addEventListener('online', restartReconnecting)\n\nsocket.onReadyStateChanged((state) => {\n  switch (state) {\n    case SocketState.Open:\n      retriesLeft = MAX_RETRIES\n      socket.send('ping')\n      break\n    case SocketState.Closed:\n      scheduleReconnect(0)\n      break\n  }\n})\n", "import { sorted } from 'itertools'\nimport { html, nothing, render } from 'lit-html'\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js'\nimport { getDocTitle } from './utils'\nimport SubscribeButton from './components/SubscribeButton'\nimport { api } from './api'\nimport type User from './User'\nimport type ServiceWorker from './ServiceWorker'\nimport { pageUpdateEvent } from './events'\nimport { INotification, INotificationData } from './types'\nimport { env } from './environment'\nimport { socket } from './socket'\nimport { IChannelsMessage } from './socket/types'\n\ndeclare const user: User\ndeclare const serviceWorker: ServiceWorker\n\nconst Endpoint = {\n  notificationList: '/api/notifications/',\n  add: '/api/notification-endpoints/',\n  readTimestampUpdate: '/api/notifications/read/'\n} as const\n\nconst elem = {\n  menu: undefined as undefined | NodeListOf<HTMLElement>,\n  list: undefined as undefined | NodeListOf<HTMLUListElement>\n}\n\nconst store = {\n  baseTitle: '',\n  count: undefined as undefined | number,\n  hooks: {},\n  isSubscribed: false,\n  notifications: new Map<number, INotification>(),\n  subscribeButtons: [] as SubscribeButton[],\n  subscription: null as null | PushSubscription,\n  userCanSubscribe: false\n}\n\nfunction isNotificationMessage(\n  msg: IChannelsMessage\n): msg is IChannelsMessage<INotification> {\n  return msg.action === 'upserted'\n}\n\nsocket.registerTypeHandler('notification', (msg) => {\n  if (!isNotificationMessage(msg)) return\n  const n = msg.payload\n  store.notifications.set(n.id, n)\n  if (n.unread) setCount((store.count ?? 0) + 1)\n  setNotifications([n])\n})\n\nfunction setNotifications(notifications: INotification[]) {\n  for (const n of notifications) store.notifications.set(n.id, n)\n  renderNotifications()\n}\n\nfunction renderNotifications() {\n  if (!elem.list) return\n  // Highest id first, should always be latest one\n  const ordered = sorted(store.notifications.values(), (n) => n.id, true)\n  const template = ordered.map(\n    (n) =>\n      html`<li>\n        <a\n          href=${n.href}\n          class=${n.unread ? 'unread' : nothing}\n          @click=${n.unread ? () => notificationMarkRead(n) : nothing}\n          >${\n            n.icon ? html`<i class=\"material-icons\">${n.icon}</i> ` : nothing\n          }${unsafeHTML(n.description)}\n        </a>\n      </li>`\n  )\n  for (const list of elem.list) render(template, list)\n}\n\n// Show how many unread in <title>\nfunction setCount(count: number) {\n  store.count = count\n  elem.menu?.forEach((menu) => {\n    menu.querySelector<HTMLElement>('.count')!.innerText = count.toString()\n    menu.dataset.count = count.toString()\n    // menu.setAttribute('data-count', count.toString())\n  })\n  setTitle()\n}\n\n/**\n * Update latest read time and set count to 0\n */\nfunction clearCount() {\n  api.post(Endpoint.readTimestampUpdate)\n  setCount(0)\n}\n\nfunction loadSubscribeButtons() {\n  store.subscribeButtons = Array.from(\n    document.querySelectorAll<HTMLButtonElement>(SubscribeButton.selector)\n  ).map((button) => new SubscribeButton(button))\n}\n\nfunction setTitle(title?: string) {\n  if (title) store.baseTitle = title\n  document.querySelector('title')!.innerText = store.count\n    ? `(${store.count}) ${store.baseTitle}`\n    : store.baseTitle\n}\n\nasync function notificationMarkRead(n: INotification) {\n  await api.post(`/api/notifications/${n.id}/read/`)\n  n.unread = false\n  renderNotifications()\n}\n\nasync function fetchNotifications() {\n  try {\n    const { data } = await api.get<INotificationData>(\n      Endpoint.notificationList,\n      {\n        params: { limit: 50 }\n      }\n    )\n    setCount(data.unread_count)\n    setNotifications(data.results)\n  } catch (e) {\n    // Fail here is ok\n  }\n}\n\nfunction isHtmlElement(target: EventTarget | null): target is HTMLElement {\n  return !!target && 'closest' in target\n}\n\nfunction init() {\n  elem.menu = document.querySelectorAll('.mp-notifications-display')\n  elem.list = document.querySelectorAll('ul.mp-notifications-list')\n  store.baseTitle = getDocTitle(document) ?? ''\n  loadSubscribeButtons()\n  pageUpdateEvent.on(loadSubscribeButtons)\n  // Fetch notifications\n  fetchNotifications()\n  // Ugly fix. This is because main menu is now bootstrap.\n  elem.menu.forEach((menu) =>\n    menu.addEventListener('click', (event) => {\n      if (\n        isHtmlElement(event.currentTarget) &&\n        !event.currentTarget.closest('.dropdown')?.classList.contains('open')\n      )\n        clearCount()\n    })\n  )\n}\n\nfunction checkVapidKey(subscription: PushSubscription) {\n  const isChrome = /googleapis|android/.test(subscription.endpoint)\n  return !isChrome || subscription.options.applicationServerKey\n}\n\nasync function initSubscription(swReg: ServiceWorkerRegistration) {\n  try {\n    const state = await swReg.pushManager.permissionState({\n      userVisibleOnly: true\n    })\n    store.userCanSubscribe = state !== 'denied'\n    if (state === 'denied') return\n    store.subscription = await swReg.pushManager.getSubscription()\n    setSubscribeState(!!store.subscription)\n    if (store.subscription) {\n      if (!checkVapidKey(store.subscription)) unsubscribe()\n    } else user.pushable()\n  } catch (e) {\n    console.log('Opera? :^(', e)\n  }\n}\n\nasync function subscribe() {\n  if (!env.VAPID_PUBLIC_KEY)\n    throw new Error(\"No VAPID public key: Can't subscribe.\")\n  if (!serviceWorker.registration)\n    throw new Error('No service worker registration.')\n  store.subscription = await serviceWorker.registration.pushManager.subscribe({\n    userVisibleOnly: true,\n    applicationServerKey: Uint8Array.from(atob(env.VAPID_PUBLIC_KEY), (c) =>\n      c.charCodeAt(0)\n    )\n  })\n  await api.post(Endpoint.add, store.subscription)\n  setSubscribeState(true)\n  console.log('Subscribed!', store.subscription)\n}\n\nasync function unsubscribe() {\n  try {\n    await store.subscription?.unsubscribe()\n  } catch (e) {\n    console.error('Error unsubscribing', e)\n  }\n  setSubscribeState(false)\n}\n\nfunction setSubscribeState(active: boolean) {\n  store.subscribeButtons.forEach((button) => {\n    button.setSubscribeState(active)\n  })\n  store.isSubscribed = active\n}\n\nexport default {\n  get canSubscribe() {\n    return store.userCanSubscribe\n  },\n  init,\n  initSubscription,\n  get isSubscribed() {\n    return store.isSubscribed\n  },\n  loadSubscribeButtons,\n  runUpdate: fetchNotifications,\n  setCount,\n  setTitle,\n  subscribe,\n  unsubscribe\n}\n", "import { api } from './api'\nimport { contentInsertedEvent, popupCloseEvent } from './events'\n\ninterface IPopup {\n  callback?(content: HTMLDivElement): any\n  method?: string\n  title: string\n  url: string\n}\n\nconst wrapper = document.createElement('div')\nwrapper.id = 'legacy-popup'\nwrapper.classList.add('popup')\nwrapper.setAttribute('aria-hidden', 'true')\nwrapper.innerHTML =\n  '<div class=\"box cream\" role=\"dialog\"><button role=\"button\" class=\"material-icons closer\">close</button><header><h1></h1></header><i class=\"material-icons working\">sync</i><div class=\"content\"></div></div>'\nconst content = wrapper.querySelector<HTMLDivElement>('.content')!\n\nlet active = false\nlet current: IPopup | undefined\nlet lastFocus: Element | null = null\nconst queue: IPopup[] = []\n\nfunction setTitle(title: string) {\n  wrapper.querySelector('h1')!.innerText = title\n}\n\nfunction isHtmlElement(target: EventTarget): target is HTMLElement {\n  return 'closest' in target\n}\n\nfunction init() {\n  document.body.appendChild(wrapper)\n  // A click fires on the common ancestor of press and release, so a drag\n  // from inside the box out to the backdrop would land on wrapper too.\n  let pressedOnBackdrop = false\n  wrapper.addEventListener('pointerdown', (ev) => {\n    pressedOnBackdrop = ev.target === wrapper\n  })\n  wrapper.addEventListener('click', (ev) => {\n    if (\n      pressedOnBackdrop &&\n      ev.target === wrapper &&\n      !wrapper.classList.contains('take-over')\n    )\n      next()\n  })\n  wrapper.querySelector('.closer')!.addEventListener('click', next)\n  document.addEventListener(\n    'focus',\n    (ev) => {\n      if (\n        active &&\n        !(isHtmlElement(ev.target!) && ev.target.closest('div.popup'))\n      ) {\n        ev.stopPropagation()\n        focusFirst()\n      }\n    },\n    true\n  )\n  document.addEventListener(\n    'keydown',\n    (ev) => {\n      if (\n        active &&\n        ev.key === 'Escape' &&\n        !wrapper.classList.contains('take-over')\n      )\n        next()\n    },\n    true\n  )\n}\n\nfunction _replaceContent(html: string) {\n  content.innerHTML = html\n  contentInsertedEvent.emit(content)\n}\n\nasync function open(popup: IPopup) {\n  if (!document.querySelector('#legacy-popup')) init()\n  if (current) return queue.push(popup)\n  current = popup\n  wrapper.classList.add('open')\n  setTitle(popup.title)\n  if (popup.url) {\n    wrapper.classList.add('loading')\n    try {\n      const { data } = await api.request({\n        method: popup.method ?? 'GET',\n        url: popup.url\n      })\n      wrapper.classList.remove('loading')\n      // A GET renders a template directly; an API action hands back {html},\n      // the same shape the embed and attachment serializers return.\n      content.innerHTML = typeof data === 'string' ? data : data.html\n      contentInsertedEvent.emit(content)\n      if (current.callback) current.callback(content)\n      focusFirst()\n    } catch (e) {\n      console.error(e)\n    }\n  }\n  active = true\n  wrapper.setAttribute('aria-hidden', 'false')\n  if (!lastFocus) lastFocus = document.activeElement\n}\n\nfunction focusFirst() {\n  wrapper.querySelector<HTMLButtonElement>('.focus')?.focus()\n}\n\nfunction next() {\n  wrapper.classList.remove('take-over')\n  content.innerHTML = ''\n  current = undefined\n  if (queue.length) open(queue.shift()!)\n  else close()\n}\n\nfunction isFocusable(elem: Element): elem is HTMLElement {\n  return 'focus' in elem\n}\n\nfunction close() {\n  wrapper.classList.remove('open')\n  active = false\n  wrapper.setAttribute('aria-hidden', 'true')\n  if (lastFocus && isFocusable(lastFocus)) {\n    lastFocus.focus()\n    lastFocus = null\n  }\n}\n\n// Something inside the popup is done with it - a form that has saved, say.\n// next() rather than close() so a queued popup still gets its turn, the way\n// the close button and Escape behave.\npopupCloseEvent.on(() => {\n  if (active) next()\n})\n\nfunction setTakeover(activate = true) {\n  if (activate) wrapper.classList.add('take-over')\n  else wrapper.classList.remove('take-over')\n}\n\nexport default class Popup {\n  callback?: (content: HTMLDivElement) => any\n  method?: string\n  title: string\n  url: string\n\n  constructor(\n    title: string,\n    url: string,\n    callback?: (content: HTMLDivElement) => any,\n    method?: string\n  ) {\n    this.title = title\n    this.url = url\n    this.callback = callback\n    this.method = method\n    open(this)\n  }\n\n  close() {\n    next()\n  }\n\n  takeover() {\n    setTakeover()\n  }\n\n  disableTakeover() {\n    setTakeover(false)\n  }\n\n  replaceContent(html: string) {\n    _replaceContent(html)\n  }\n\n  /** The popup body, for content built in the browser rather than fetched. */\n  get content() {\n    return content\n  }\n}\n", "import notifications from './notifications'\n\nexport default class ServiceWorker {\n  registration?: ServiceWorkerRegistration\n\n  constructor() {\n    if ('serviceWorker' in navigator) {\n      // Update notifications on push message.\n      navigator.serviceWorker.addEventListener('message', this.message)\n      navigator.serviceWorker\n        .register('/sw.js')\n        .then(this.register.bind(this))\n        .catch((err) => {\n          console.log(':^(', err)\n        })\n    }\n  }\n\n  message(ev: MessageEvent) {\n    if ('new_location' in ev.data) location.assign(ev.data.new_location)\n  }\n\n  register(serviceWorkerRegistration: ServiceWorkerRegistration) {\n    this.registration = serviceWorkerRegistration\n    if ('pushManager' in serviceWorkerRegistration) {\n      notifications.initSubscription(serviceWorkerRegistration)\n    }\n  }\n}\n", "import Popup from './Popup'\nimport { isMobile } from './utils'\nimport notifications from './notifications'\nimport ServiceWorker from './ServiceWorker'\nimport { api } from './api'\nimport { IUser } from './types'\nimport { userLoadedEvent } from './events'\n\nconst API = {\n  EDIT_NOTIFICATIONS: '/profil/edit-notifications'\n} as const\n\nexport default class User {\n  data?: IUser\n  loggedIn: boolean\n  noPushing = false\n\n  constructor() {\n    this.loggedIn = 'loggedIn' in document.body.dataset\n    if (!this.loggedIn) return\n    this.fetchUser()\n    this.noPushing = !!localStorage.noPushing\n    notifications.init()\n    // @ts-ignore\n    globalThis.serviceWorker = new ServiceWorker()\n  }\n\n  async fetchUser() {\n    const { data } = await api.get<IUser>('/api/user/')\n    this.data = data\n    userLoadedEvent.emit()\n  }\n\n  get fullName() {\n    return (\n      [this.data?.first_name, this.data?.last_name]\n        .filter((c) => c)\n        .join(' ') || '??'\n    )\n  }\n\n  pushable() {\n    if (this.noPushing) return\n    const title = isMobile.any()\n      ? 'Snabba uppdateringar i telefonen'\n      : 'Snabba uppdateringar i datorn'\n    const popup = new Popup(title, API.EDIT_NOTIFICATIONS, (content) => {\n      notifications.loadSubscribeButtons()\n      const stopElem = content.querySelector('.stop-asking')\n      stopElem?.classList.add('active')\n      stopElem?.addEventListener('click', (event) => {\n        event.preventDefault()\n        localStorage.noPushing = 1\n        popup.close()\n      })\n    })\n  }\n}\n", "import $ from 'jquery'\nimport { api } from '../api'\nimport { isHTMLElement } from '../utils'\nimport { goToPageEvent } from '../events'\nimport { showApiError } from '../formErrors'\n\nasync function performDelete(elem: HTMLElement) {\n  elem.setAttribute('disabled', 'disabled')\n  const { deleteApi, deleteRedirect } = elem.dataset\n  try {\n    await api.delete(deleteApi!)\n    if (deleteRedirect)\n      goToPageEvent.emit({ href: deleteRedirect, currentTarget: elem })\n    else {\n      const container = elem.closest('.json-delete')\n      if (container) {\n        // @ts-ignore\n        const $container = $(container)\n        $container.slideUp($container.remove)\n      }\n    }\n  } catch (e) {\n    showApiError(e, elem.closest('form'), 'Misslyckades att radera inneh\u00E5ll')\n  }\n  elem.removeAttribute('disabled')\n}\n\nexport default {\n  selector: '[data-delete-api]',\n  install() {\n    document.body.addEventListener('click', (event) => {\n      if (!isHTMLElement(event.target!)) return\n      const elem = event.target.closest(this.selector) as HTMLButtonElement\n      if (!elem || elem.disabled) return\n      event.preventDefault()\n      const confirmation = elem.dataset.confirm\n      if (!confirmation || confirm(confirmation)) performDelete(elem)\n    })\n  }\n}\n", "import { isAxiosError } from 'axios'\n\n/**\n * Render DRF validation errors onto a server-rendered Django form.\n *\n * DRF answers an invalid write with {field: [messages]}, plus\n * \"non_field_errors\" for form-wide problems and \"detail\" for the errors that\n * never reach a serializer (permission denied, throttling, 404). Django has\n * already rendered the same markup server-side for classic form posts, so we\n * reproduce it exactly and inherit the existing `.errorlist` styling:\n *\n *     <ul class=\"errorlist\" id=\"id_<field>_error\"><li>message</li></ul>\n *\n * placed before the field's row, with aria-invalid/aria-describedby on the\n * input, the way django/forms/p.html does it.\n */\n\nconst ERROR_CLASS = 'errorlist'\nconst NON_FIELD_KEYS = ['non_field_errors', 'detail']\n\ntype ErrorData = Record<string, unknown>\n\nfunction messagesFor(value: unknown): string[] {\n  if (typeof value === 'string') return [value]\n  if (Array.isArray(value)) return value.flatMap(messagesFor)\n  // A nested serializer answers with an object; flatten it rather than\n  // dropping the message on the floor.\n  if (value && typeof value === 'object')\n    return Object.values(value as ErrorData).flatMap(messagesFor)\n  return []\n}\n\nfunction buildList(messages: string[], id?: string, nonField = false) {\n  const list = document.createElement('ul')\n  list.className = nonField ? `${ERROR_CLASS} nonfield` : ERROR_CLASS\n  if (id) list.id = id\n  for (const message of messages) {\n    const item = document.createElement('li')\n    item.textContent = message\n    list.appendChild(item)\n  }\n  return list\n}\n\nfunction fieldElement(form: HTMLElement, name: string) {\n  return form.querySelector<HTMLElement>(`[name=\"${CSS.escape(name)}\"]`)\n}\n\n/**\n * The row Django wrapped the field in - what p.html puts the error list before.\n *\n * Found from the label rather than the input, because a widget may sit in a\n * wrapper of its own inside that row: CKEditor puts its textarea in a\n * div.ck-editor-container next to the label, and anchoring on the input would\n * leave the errors between the label and the editor.\n */\nfunction rowFor(form: HTMLElement, field: HTMLElement) {\n  const fieldId = field.getAttribute('id')\n  const label = fieldId\n    ? form.querySelector<HTMLElement>(`label[for=\"${CSS.escape(fieldId)}\"]`)\n    : null\n  return (label ?? field).closest('p, li, div')\n}\n\n/** Remove every error this module previously rendered. */\nexport function clearFormErrors(form: HTMLElement) {\n  form.querySelectorAll(`.${ERROR_CLASS}`).forEach((list) => list.remove())\n  form.querySelectorAll('[aria-invalid=\"true\"]').forEach((field) => {\n    field.removeAttribute('aria-invalid')\n    field.removeAttribute('aria-describedby')\n  })\n}\n\n/**\n * Show `errors` on `form`. Returns the messages that had nowhere to go, so\n * the caller can decide how to surface them.\n */\nexport function renderFormErrors(\n  form: HTMLElement,\n  errors: ErrorData\n): string[] {\n  clearFormErrors(form)\n  const unplaced: string[] = []\n\n  for (const [name, value] of Object.entries(errors)) {\n    const messages = messagesFor(value)\n    if (!messages.length) continue\n\n    const field = NON_FIELD_KEYS.includes(name)\n      ? null\n      : fieldElement(form, name)\n    if (!field) {\n      unplaced.push(...messages)\n      continue\n    }\n    const id = `id_${name}_error`\n    field.setAttribute('aria-invalid', 'true')\n    field.setAttribute('aria-describedby', id)\n    // Django renders the list before the field's row, not the field itself.\n    const row = rowFor(form, field) ?? field\n    const anchor = form.contains(row) && row !== form ? row : field\n    anchor.parentElement?.insertBefore(buildList(messages, id), anchor)\n  }\n\n  if (unplaced.length)\n    form.insertBefore(buildList(unplaced, undefined, true), form.firstChild)\n\n  return unplaced\n}\n\n/**\n * Surface a failed API write. Renders field errors on `form` when the server\n * sent a validation body, and falls back to `fallback` for everything else -\n * a network drop, a 500, or a response we cannot place on any field.\n */\nexport function showApiError(\n  error: unknown,\n  form: HTMLElement | null,\n  fallback: string\n) {\n  const data = isAxiosError(error) ? error.response?.data : undefined\n  if (!form || !data || typeof data !== 'object' || Array.isArray(data)) {\n    alert(fallback)\n    return\n  }\n  // An empty body tells the user nothing; keep the generic message for it.\n  if (!Object.keys(data).length) {\n    alert(fallback)\n    return\n  }\n  // Anything renderFormErrors cannot place on a field still gets shown, in\n  // the non-field list at the top of the form.\n  renderFormErrors(form, data as ErrorData)\n}\n", "const METHODS = ['POST', 'DELETE', 'PUT', 'PATCH']\n\nexport function interpretApi(api: string) {\n  const [method, url] = api.split(/\\s+/)\n  return METHODS.includes(method.toUpperCase())\n    ? { method, url }\n    : { method: 'POST', url: method }\n}\n", "import { api } from '../api'\nimport { isHTMLElement } from '../utils'\nimport { goToPageEvent } from '../events'\nimport { interpretApi } from './utils'\nimport { showApiError } from '../formErrors'\n\nasync function performPost(elem: HTMLElement) {\n  elem.setAttribute('disabled', 'disabled')\n  const { postApi, postAssign, postRedirect, confirm, ...dataset } =\n    elem.dataset\n  const { method, url } = interpretApi(postApi!)\n  try {\n    await api.request({\n      method,\n      url,\n      data: dataset\n    })\n    if (postAssign) return location.assign(postAssign)\n    if (postRedirect)\n      goToPageEvent.emit({ href: postRedirect, currentTarget: elem })\n  } catch (e) {\n    showApiError(e, elem.closest('form'), 'Misslyckades att posta inneh\u00E5ll')\n  }\n  elem.removeAttribute('disabled')\n}\n\nexport default {\n  selector: '[data-post-api]',\n  install() {\n    document.body.addEventListener('click', (ev) => {\n      if (!isHTMLElement(ev.target!)) return\n      const elem = ev.target.closest(this.selector) as HTMLButtonElement\n      if (!elem || elem.disabled) return\n      ev.preventDefault()\n      const confirmation = elem.dataset.confirm\n      if (!confirmation || confirm(confirmation)) performPost(elem)\n    })\n  }\n}\n", "import { api } from '../api'\nimport { contentFilterChangedEvent } from '../events'\n\n/**\n * A filter toggle above a list. The change is saved through the API in\n * data-api on the <form>; the list named by data-target then reloads itself.\n */\nexport default class ContentFilterButton {\n  static selector = 'form.content-filter button.toggler'\n  apiUrl: string\n  elem: HTMLElement\n  name: string\n  target: string\n\n  constructor(elem: HTMLElement) {\n    this.elem = elem\n    const { api: apiUrl, target } = this.elem.closest('form')!.dataset\n    if (!target)\n      throw new Error('Missing data-target from content-filter element')\n    if (!apiUrl) throw new Error('Missing data-api from content-filter element')\n    this.apiUrl = apiUrl\n    this.target = target\n    this.elem.addEventListener('click', (ev) => {\n      ev.preventDefault()\n      this.clickHandler()\n    })\n    this.name = this.elem.getAttribute('name')!\n  }\n\n  get active() {\n    return this.elem.classList.contains('active')\n  }\n\n  async clickHandler() {\n    if (this.active) this.elem.classList.remove('active')\n    else this.elem.classList.add('active')\n    await api.patch(this.apiUrl, { [this.name]: this.active })\n    contentFilterChangedEvent.emit(this.target)\n  }\n}\n", "import { isHTMLElement } from '../utils'\n\nexport default {\n  currentMenu: null as HTMLElement | null,\n\n  checkClickOutside(target: HTMLElement) {\n    if (!!this.currentMenu && !this.currentMenu.contains(target))\n      this.closeCurrent()\n  },\n\n  closeCurrent() {\n    this.currentMenu?.classList.remove('open')\n    this.currentMenu = null\n  },\n\n  toggle(menu: HTMLElement) {\n    const open = menu.classList.toggle('open')\n    this.currentMenu = open ? menu : null\n  },\n\n  install() {\n    document.addEventListener('click', (ev) => {\n      if (!ev.target || !isHTMLElement(ev.target)) return\n      this.checkClickOutside(ev.target)\n      const contextMenu = ev.target.closest<HTMLElement>('nav.context-menu')\n      if (!contextMenu) return\n      const toggler = ev.target.closest<HTMLButtonElement>('button.toggler')\n      if (toggler) this.toggle(contextMenu)\n    })\n  }\n}\n", "/**\n * Cropping and scaling of images in the browser, before upload.\n *\n * Ported from voteit's CropImageField. Coordinates are in the original\n * image's pixels; the UI scales pointer movement into them.\n */\n\nexport type ImageSize = { width: number; height: number }\nexport type CropArea = {\n  sx: number\n  sy: number\n  sWidth: number\n  sHeight: number\n}\nexport type DragHandle =\n  'tl' | 'tr' | 'bl' | 'br' | 't' | 'b' | 'l' | 'r' | 'move'\n\nexport const DATA_TYPES = [\n  'image/jpeg',\n  'image/png',\n  'image/webp',\n  'image/svg+xml'\n]\n\nfunction withinBounds(value: number, min: number, max: number) {\n  return Math.max(min, Math.min(max, value))\n}\n\n/**\n * Aspect ratio as width/height.\n * @param aspectRatio A string, for example 1.234, 1 or 16/9\n */\nexport function parseAspectRatio(aspectRatio: string) {\n  const [wAsp, hAsp] = aspectRatio.split('/').map(Number)\n  // If only one value, that is the actual target ratio\n  return hAsp ? wAsp / hAsp : wAsp\n}\n\nexport function loadOriginalImage(\n  file: File\n): Promise<{ src: string; orig: ImageSize }> {\n  return new Promise((resolve, reject) => {\n    if (!file.type.match(/image.*/)) return reject(new Error('Not an image'))\n    const reader = new FileReader()\n    reader.onerror = reject\n    reader.onload = () => {\n      const dataURL = reader.result as string | null\n      if (!dataURL) return reject(new Error('No result'))\n      const img = new Image()\n      img.onerror = reject\n      img.onload = () =>\n        resolve({\n          src: dataURL,\n          orig: { width: img.naturalWidth, height: img.naturalHeight }\n        })\n      img.src = dataURL\n    }\n    reader.readAsDataURL(file)\n  })\n}\n\n/** The largest area of the target ratio, centered on the image. */\nexport function initCropArea(orig: ImageSize, ratio: number): CropArea {\n  const sWidth = Math.min(orig.width, orig.height * ratio)\n  const sHeight = sWidth / ratio\n  return {\n    sx: (orig.width - sWidth) / 2,\n    sy: (orig.height - sHeight) / 2,\n    sWidth,\n    sHeight\n  }\n}\n\n/** What is cut away on each side, as fractions of the image. */\nexport function cropFractions(area: CropArea, orig: ImageSize) {\n  const { sx, sy, sWidth, sHeight } = area\n  const { width: imgW, height: imgH } = orig\n  return {\n    left: sx / imgW,\n    top: sy / imgH,\n    right: (imgW - sx - sWidth) / imgW,\n    bottom: (imgH - sy - sHeight) / imgH\n  }\n}\n\n/**\n * The crop area after dragging `handle` by dx, dy (image pixels) from where\n * it was at `start`. Keeps the ratio and stays within the image.\n */\nexport function dragCropArea(\n  handle: DragHandle,\n  start: CropArea,\n  dx: number,\n  dy: number,\n  orig: ImageSize,\n  ratio: number\n): CropArea {\n  const { sx, sy, sWidth, sHeight } = start\n  const { width: imgW, height: imgH } = orig\n  const MIN = Math.min(imgW, imgH) * 0.1\n  const next: CropArea = { ...start }\n\n  switch (handle) {\n    case 'move': {\n      next.sx = withinBounds(sx + dx, 0, imgW - sWidth)\n      next.sy = withinBounds(sy + dy, 0, imgH - sHeight)\n      break\n    }\n    case 'br': {\n      const w = withinBounds(sWidth + dx, MIN, imgW - sx)\n      const h = w / ratio\n      if (sy + h <= imgH) {\n        next.sWidth = w\n        next.sHeight = h\n      }\n      break\n    }\n    case 'bl': {\n      const w = withinBounds(sWidth - dx, MIN, sx + sWidth)\n      const h = w / ratio\n      if (sy + h <= imgH) {\n        next.sx = sx + sWidth - w\n        next.sWidth = w\n        next.sHeight = h\n      }\n      break\n    }\n    case 'tr': {\n      const w = withinBounds(sWidth + dx, MIN, imgW - sx)\n      const h = w / ratio\n      if (sy + sHeight - h >= 0) {\n        next.sy = sy + sHeight - h\n        next.sWidth = w\n        next.sHeight = h\n      }\n      break\n    }\n    case 'tl': {\n      const w = withinBounds(sWidth - dx, MIN, sx + sWidth)\n      const h = w / ratio\n      if (sy + sHeight - h >= 0) {\n        next.sx = sx + sWidth - w\n        next.sy = sy + sHeight - h\n        next.sWidth = w\n        next.sHeight = h\n      }\n      break\n    }\n    case 'r': {\n      const w = withinBounds(sWidth + dx, MIN, imgW - sx)\n      const h = w / ratio\n      next.sWidth = w\n      next.sHeight = h\n      next.sy = withinBounds(sy + (sHeight - h) / 2, 0, imgH - h)\n      break\n    }\n    case 'l': {\n      const w = withinBounds(sWidth - dx, MIN, sx + sWidth)\n      const h = w / ratio\n      next.sx = sx + sWidth - w\n      next.sWidth = w\n      next.sHeight = h\n      next.sy = withinBounds(sy + (sHeight - h) / 2, 0, imgH - h)\n      break\n    }\n    case 'b': {\n      const h = withinBounds(sHeight + dy, MIN, imgH - sy)\n      const w = h * ratio\n      next.sHeight = h\n      next.sWidth = w\n      next.sx = withinBounds(sx + (sWidth - w) / 2, 0, imgW - w)\n      break\n    }\n    case 't': {\n      const h = withinBounds(sHeight - dy, MIN, sy + sHeight)\n      const w = h * ratio\n      next.sy = sy + sHeight - h\n      next.sHeight = h\n      next.sWidth = w\n      next.sx = withinBounds(sx + (sWidth - w) / 2, 0, imgW - w)\n      break\n    }\n  }\n  return next\n}\n\n/**\n * Find the most efficient file format the browser can encode, by testing\n * which type toDataURL actually produces.\n */\nconst formatPrio = ['image/webp', 'image/jpeg', 'image/png'] as const\nfunction toFormatDataURL(canvas: HTMLCanvasElement) {\n  for (const type of formatPrio) {\n    const dataURL = canvas.toDataURL(type)\n    if (dataURL.startsWith(`data:${type}`)) return [type, dataURL] as const\n  }\n  throw new Error('No supported image data format found!')\n}\n\nfunction getScaled({ width, height }: ImageSize, maxSize: number) {\n  const imageMax = Math.max(height, width)\n  const scale = Math.min(imageMax, maxSize) / imageMax\n  return { width: scale * width, height: scale * height }\n}\n\n/**\n * Cut `crop` out of the image at `src` and scale it down to fit `maxSize`.\n */\nexport function resizeImage(\n  src: string,\n  crop: CropArea,\n  maxSize = 640\n): Promise<{ blob: Blob; type: string; src: string }> {\n  return new Promise((resolve, reject) => {\n    const img = new Image()\n    img.onerror = reject\n    img.onload = () => {\n      const canvas = document.createElement('canvas')\n      const size = getScaled(\n        { width: crop.sWidth, height: crop.sHeight },\n        maxSize\n      )\n      canvas.width = size.width\n      canvas.height = size.height\n      const context = canvas.getContext('2d')\n      if (!context) return reject(new Error(\"Can't draw image, no 2d context\"))\n      context.drawImage(\n        img,\n        crop.sx,\n        crop.sy,\n        crop.sWidth,\n        crop.sHeight,\n        0,\n        0,\n        canvas.width,\n        canvas.height\n      )\n      const [type, dataURL] = toFormatDataURL(canvas)\n      canvas.toBlob(\n        (blob) => {\n          if (!blob)\n            return reject(new Error(\"Can't scale image, no blob generated\"))\n          resolve({ blob, type, src: dataURL })\n        },\n        type,\n        0.8\n      )\n    }\n    img.src = src\n  })\n}\n", "import { api } from '../api'\nimport { goToPageEvent } from '../events'\nimport { clearFormErrors, showApiError } from '../formErrors'\nimport {\n  CropArea,\n  DATA_TYPES,\n  DragHandle,\n  ImageSize,\n  cropFractions,\n  dragCropArea,\n  initCropArea,\n  loadOriginalImage,\n  parseAspectRatio,\n  resizeImage\n} from '../imageCrop'\nimport Popup from '../Popup'\nimport { interpretApi } from './utils'\n\n/**\n * A button that opens a popup for picking, cropping and uploading an image.\n *\n * The image is cropped and scaled down in the browser, so what reaches the\n * server is already the part the user chose. Works like voteit's\n * CropImageField, but in the legacy popup: the crop step takes over the popup\n * body instead of opening a dialog of its own.\n *\n * Attributes, all on the button:\n *   data-crop-image        \"[METHOD ]url\" to send the image to, as\n *                          interpretApi reads it. Marks the element.\n *   data-crop-image-field  Field name in the request body. Default \"image\".\n *   data-aspect-ratio      Width/height, \"1\" or \"16/9\". Default \"1\".\n *   data-crop-max-size     Longest side in pixels the image is scaled down\n *                          to. Default 640.\n *   data-current           URL of the current image, shown before a new one\n *                          is picked.\n *   data-rounded           Show the image and the crop frame as a circle.\n *   data-clearable         Offer removing the current image.\n *   data-title             Popup title. Falls back to the title attribute.\n *\n * Afterwards the page is reloaded, so every place showing the image updates.\n */\n\nconst ERROR_TEXT = 'Misslyckades med att spara bilden.'\nconst HANDLES: DragHandle[] = ['t', 'b', 'l', 'r', 'tl', 'tr', 'bl', 'br']\n\nconst TEMPLATE = `\n<div class=\"crop-image\">\n  <div class=\"crop-image--select\">\n    <div class=\"crop-image--preview\">\n      <img alt=\"\" hidden>\n      <button type=\"button\" class=\"crop-image--placeholder\" data-action=\"select\">\n        <i class=\"material-icons\">photo_camera</i>\n        <span>V\u00E4lj eller sl\u00E4pp en bild</span>\n      </button>\n    </div>\n    <p class=\"meta\">Till\u00E5tna format \u00E4r JPEG, PNG, WebP och SVG. Du kan ocks\u00E5 sl\u00E4ppa en bild h\u00E4r.</p>\n    <p>\n      <button type=\"button\" data-action=\"select\"><i class=\"material-icons\">image</i> Byt bild</button>\n      <button type=\"button\" data-action=\"crop\" hidden><i class=\"material-icons\">crop</i> Besk\u00E4r</button>\n      <button type=\"button\" class=\"no\" data-action=\"clear\" hidden><i class=\"material-icons\">delete</i> Ta bort bild</button>\n    </p>\n    <p class=\"crop-image--buttons\">\n      <button type=\"button\" class=\"toggler\" data-action=\"close\">Avbryt</button>\n      <button type=\"button\" data-action=\"save\" disabled><i class=\"material-icons\">check</i> Spara</button>\n    </p>\n  </div>\n  <div class=\"crop-image--crop\" hidden>\n    <div class=\"crop-image--area\">\n      <img alt=\"\">\n      <div class=\"crop-frame\"></div>\n      <div class=\"crop-move\" data-handle=\"move\"></div>\n      ${HANDLES.map((h) => `<div class=\"handle handle-${h}\" data-handle=\"${h}\"></div>`).join('')}\n    </div>\n    <p>Dra i rutan f\u00F6r att flytta den, och i h\u00F6rnen eller kanterna f\u00F6r att \u00E4ndra storleken.</p>\n    <p class=\"crop-image--buttons\">\n      <button type=\"button\" class=\"toggler\" data-action=\"crop-cancel\">Avbryt</button>\n      <button type=\"button\" data-action=\"crop-ok\"><i class=\"material-icons\">check</i> OK</button>\n    </p>\n  </div>\n  <input type=\"file\" hidden>\n</div>`\n\nfunction isFileDrag(ev: DragEvent) {\n  return !!ev.dataTransfer?.types.includes('Files')\n}\n\n/** The state of one opened popup. */\nclass CropImageDialog {\n  trigger: HTMLElement\n  popup: Popup\n  root: HTMLElement\n  ratio: number\n  field: string\n  maxSize?: number\n\n  file: File | null = null\n  origSrc = ''\n  origSize: ImageSize | null = null\n  cropArea: CropArea | null = null\n  // The crop area when the crop step opened, to go back to on cancel.\n  cropStart: CropArea | null = null\n  result: { blob: Blob; type: string } | null = null\n  busy = false\n\n  dragging: {\n    handle: DragHandle\n    startX: number\n    startY: number\n    startArea: CropArea\n  } | null = null\n\n  constructor(trigger: HTMLElement) {\n    const { dataset } = trigger\n    this.trigger = trigger\n    this.ratio = parseAspectRatio(dataset.aspectRatio ?? '1')\n    this.field = dataset.cropImageField ?? 'image'\n    this.maxSize = Number(dataset.cropMaxSize) || undefined\n    this.popup = new Popup(dataset.title ?? trigger.title, '')\n    this.popup.content.innerHTML = TEMPLATE\n    this.root = this.popup.content.querySelector('.crop-image')!\n\n    if (dataset.rounded !== undefined) this.root.classList.add('is-rounded')\n    this.root.style.setProperty('--aspect-ratio', String(this.ratio))\n    this.$<HTMLInputElement>('input[type=file]').accept = DATA_TYPES.join(',')\n    if (dataset.current) this.showPreview(dataset.current)\n    this.$('[data-action=clear]').hidden =\n      dataset.clearable === undefined || !dataset.current\n\n    this.root.addEventListener('click', this.onClick.bind(this))\n    this.$('input[type=file]').addEventListener('change', (ev) => {\n      const file = (ev.target as HTMLInputElement).files?.[0]\n      if (file) this.selectFile(file)\n    })\n    this.$('.crop-image--area').addEventListener(\n      'pointerdown',\n      this.startDrag.bind(this)\n    )\n    this.onDrag = this.onDrag.bind(this)\n    this.stopDrag = this.stopDrag.bind(this)\n    this.setupDropZone()\n  }\n\n  $<T extends HTMLElement = HTMLElement>(selector: string) {\n    return this.root.querySelector<T>(selector)!\n  }\n\n  onClick(ev: MouseEvent) {\n    const button = (ev.target as HTMLElement).closest<HTMLElement>(\n      '[data-action]'\n    )\n    if (!button || this.busy) return\n    switch (button.dataset.action) {\n      case 'select':\n        return this.$('input[type=file]').click()\n      case 'crop':\n        return this.showCrop()\n      case 'crop-cancel':\n        this.cropArea = this.cropStart\n        return this.showSelect()\n      case 'crop-ok':\n        return this.applyCrop()\n      case 'clear':\n        return this.clear()\n      case 'close':\n        return this.popup.close()\n      case 'save':\n        return this.save()\n    }\n  }\n\n  setupDropZone() {\n    const content = this.popup.content\n    // dragenter and dragleave fire for every child passed over, so count\n    // them to know when the pointer actually leaves.\n    let depth = 0\n    const setOver = (over: boolean) =>\n      this.root.classList.toggle('is-over', over)\n    content.addEventListener('dragenter', (ev) => {\n      if (!isFileDrag(ev)) return\n      depth++\n      setOver(true)\n    })\n    content.addEventListener('dragleave', (ev) => {\n      if (!isFileDrag(ev)) return\n      depth = Math.max(0, depth - 1)\n      if (!depth) setOver(false)\n    })\n    content.addEventListener('dragover', (ev) => {\n      if (!isFileDrag(ev)) return\n      ev.preventDefault()\n      const type = ev.dataTransfer!.items[0]?.type\n      ev.dataTransfer!.dropEffect =\n        type && DATA_TYPES.includes(type) ? 'copy' : 'none'\n    })\n    content.addEventListener('drop', (ev) => {\n      if (!isFileDrag(ev)) return\n      ev.preventDefault()\n      depth = 0\n      setOver(false)\n      const file = ev.dataTransfer!.files[0]\n      if (file && DATA_TYPES.includes(file.type) && !this.busy)\n        this.selectFile(file)\n    })\n  }\n\n  showPreview(src: string) {\n    const img = this.$<HTMLImageElement>('.crop-image--preview img')\n    img.src = src\n    img.hidden = false\n    this.$('.crop-image--placeholder').hidden = true\n  }\n\n  showSelect() {\n    this.$('.crop-image--crop').hidden = true\n    this.$('.crop-image--select').hidden = false\n  }\n\n  showCrop() {\n    this.cropStart = this.cropArea\n    this.$('.crop-image--select').hidden = true\n    this.$('.crop-image--crop').hidden = false\n    this.renderCrop()\n  }\n\n  setBusy(busy: boolean) {\n    this.busy = busy\n    this.root.classList.toggle('is-busy', busy)\n  }\n\n  async selectFile(file: File) {\n    this.setBusy(true)\n    clearFormErrors(this.root)\n    try {\n      const { src, orig } = await loadOriginalImage(file)\n      this.file = file\n      this.origSrc = src\n      this.origSize = orig\n      this.cropArea = initCropArea(orig, this.ratio)\n      this.$<HTMLImageElement>('.crop-image--area img').src = src\n      await this.updateResult()\n    } catch (e) {\n      console.error(e)\n      alert('Kunde inte l\u00E4sa bilden.')\n      return\n    } finally {\n      this.setBusy(false)\n    }\n    this.$('[data-action=crop]').hidden = false\n    this.$('[data-action=clear]').hidden = true\n    this.showCrop()\n  }\n\n  async updateResult() {\n    const { blob, type, src } = await resizeImage(\n      this.origSrc,\n      this.cropArea!,\n      this.maxSize\n    )\n    this.result = { blob, type }\n    this.showPreview(src)\n    this.$<HTMLButtonElement>('[data-action=save]').disabled = false\n  }\n\n  async applyCrop() {\n    this.setBusy(true)\n    try {\n      await this.updateResult()\n    } finally {\n      this.setBusy(false)\n    }\n    this.showSelect()\n  }\n\n  renderCrop() {\n    if (!this.cropArea || !this.origSize) return\n    const fractions = cropFractions(this.cropArea, this.origSize)\n    const area = this.$('.crop-image--area')\n    for (const [side, value] of Object.entries(fractions))\n      area.style.setProperty(`--crop-${side}`, `${value * 100}%`)\n  }\n\n  startDrag(ev: PointerEvent) {\n    const handle = (ev.target as HTMLElement).dataset.handle as\n      DragHandle | undefined\n    if (!handle || !this.cropArea) return\n    ev.preventDefault()\n    this.dragging = {\n      handle,\n      startX: ev.clientX,\n      startY: ev.clientY,\n      startArea: { ...this.cropArea }\n    }\n    window.addEventListener('pointermove', this.onDrag)\n    window.addEventListener('pointerup', this.stopDrag)\n    window.addEventListener('pointercancel', this.stopDrag)\n  }\n\n  onDrag(ev: PointerEvent) {\n    if (!this.dragging || !this.origSize) return\n    const img = this.$<HTMLImageElement>('.crop-image--area img')\n    const scaleX = this.origSize.width / img.clientWidth\n    const scaleY = this.origSize.height / img.clientHeight\n    const { handle, startX, startY, startArea } = this.dragging\n    this.cropArea = dragCropArea(\n      handle,\n      startArea,\n      (ev.clientX - startX) * scaleX,\n      (ev.clientY - startY) * scaleY,\n      this.origSize,\n      this.ratio\n    )\n    this.renderCrop()\n  }\n\n  stopDrag() {\n    this.dragging = null\n    window.removeEventListener('pointermove', this.onDrag)\n    window.removeEventListener('pointerup', this.stopDrag)\n    window.removeEventListener('pointercancel', this.stopDrag)\n  }\n\n  async clear() {\n    if (!confirm('Vill du ta bort bilden?')) return\n    const data = new FormData()\n    data.append(this.field, '')\n    await this.send(data)\n  }\n\n  async save() {\n    if (!this.result) return\n    const { blob, type } = this.result\n    const data = new FormData()\n    const ext = type.split('/')[1]\n    data.append(this.field, new File([blob], `${this.field}.${ext}`, { type }))\n    await this.send(data)\n  }\n\n  async send(data: FormData) {\n    const { method, url } = interpretApi(this.trigger.dataset.cropImage!)\n    this.setBusy(true)\n    clearFormErrors(this.root)\n    try {\n      await api.request({ method, url, data })\n    } catch (e) {\n      showApiError(e, this.root, ERROR_TEXT)\n      return\n    } finally {\n      this.setBusy(false)\n    }\n    this.popup.close()\n    goToPageEvent.emit({ href: location.href, currentTarget: this.trigger })\n  }\n}\n\nexport default class CropImage {\n  static selector = '[data-crop-image]'\n\n  constructor(elem: HTMLElement) {\n    elem.addEventListener('click', (ev) => {\n      ev.preventDefault()\n      new CropImageDialog(elem)\n    })\n  }\n}\n", "/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport {\n  _$LH,\n  Part,\n  DirectiveParent,\n  CompiledTemplateResult,\n  MaybeCompiledTemplateResult,\n  UncompiledTemplateResult,\n} from './lit-html.js';\nimport {\n  DirectiveResult,\n  DirectiveClass,\n  PartInfo,\n  AttributePartInfo,\n} from './directive.js';\ntype Primitive = null | undefined | boolean | number | string | symbol | bigint;\n\nconst {_ChildPart: ChildPart} = _$LH;\n\ntype ChildPart = InstanceType<typeof ChildPart>;\n\nconst ENABLE_SHADYDOM_NOPATCH = true;\n\nconst wrap =\n  ENABLE_SHADYDOM_NOPATCH &&\n  window.ShadyDOM?.inUse &&\n  window.ShadyDOM?.noPatch === true\n    ? window.ShadyDOM!.wrap\n    : (node: Node) => node;\n\n/**\n * Tests if a value is a primitive value.\n *\n * See https://tc39.github.io/ecma262/#sec-typeof-operator\n */\nexport const isPrimitive = (value: unknown): value is Primitive =>\n  value === null || (typeof value != 'object' && typeof value != 'function');\n\nexport const TemplateResultType = {\n  HTML: 1,\n  SVG: 2,\n  MATHML: 3,\n} as const;\n\nexport type TemplateResultType =\n  (typeof TemplateResultType)[keyof typeof TemplateResultType];\n\ntype IsTemplateResult = {\n  (val: unknown): val is MaybeCompiledTemplateResult;\n  <T extends TemplateResultType>(\n    val: unknown,\n    type: T\n  ): val is UncompiledTemplateResult<T>;\n};\n\n/**\n * Tests if a value is a TemplateResult or a CompiledTemplateResult.\n */\nexport const isTemplateResult: IsTemplateResult = (\n  value: unknown,\n  type?: TemplateResultType\n): value is UncompiledTemplateResult =>\n  type === undefined\n    ? // This property needs to remain unminified.\n      (value as UncompiledTemplateResult)?.['_$litType$'] !== undefined\n    : (value as UncompiledTemplateResult)?.['_$litType$'] === type;\n\n/**\n * Tests if a value is a CompiledTemplateResult.\n */\nexport const isCompiledTemplateResult = (\n  value: unknown\n): value is CompiledTemplateResult => {\n  return (value as CompiledTemplateResult)?.['_$litType$']?.h != null;\n};\n\n/**\n * Tests if a value is a DirectiveResult.\n */\nexport const isDirectiveResult = (value: unknown): value is DirectiveResult =>\n  // This property needs to remain unminified.\n  (value as DirectiveResult)?.['_$litDirective$'] !== undefined;\n\n/**\n * Retrieves the Directive class for a DirectiveResult\n */\nexport const getDirectiveClass = (value: unknown): DirectiveClass | undefined =>\n  // This property needs to remain unminified.\n  (value as DirectiveResult)?.['_$litDirective$'];\n\n/**\n * Tests whether a part has only a single-expression with no strings to\n * interpolate between.\n *\n * Only AttributePart and PropertyPart can have multiple expressions.\n * Multi-expression parts have a `strings` property and single-expression\n * parts do not.\n */\nexport const isSingleExpression = (part: PartInfo) =>\n  (part as AttributePartInfo).strings === undefined;\n\nconst createMarker = () => document.createComment('');\n\n/**\n * Inserts a ChildPart into the given container ChildPart's DOM, either at the\n * end of the container ChildPart, or before the optional `refPart`.\n *\n * This does not add the part to the containerPart's committed value. That must\n * be done by callers.\n *\n * @param containerPart Part within which to add the new ChildPart\n * @param refPart Part before which to add the new ChildPart; when omitted the\n *     part added to the end of the `containerPart`\n * @param part Part to insert, or undefined to create a new part\n */\nexport const insertPart = (\n  containerPart: ChildPart,\n  refPart?: ChildPart,\n  part?: ChildPart\n): ChildPart => {\n  const container = wrap(containerPart._$startNode).parentNode!;\n\n  const refNode =\n    refPart === undefined ? containerPart._$endNode : refPart._$startNode;\n\n  if (part === undefined) {\n    const startNode = wrap(container).insertBefore(createMarker(), refNode);\n    const endNode = wrap(container).insertBefore(createMarker(), refNode);\n    part = new ChildPart(\n      startNode,\n      endNode,\n      containerPart,\n      containerPart.options\n    );\n  } else {\n    const endNode = wrap(part._$endNode!).nextSibling;\n    const oldParent = part._$parent;\n    const parentChanged = oldParent !== containerPart;\n    if (parentChanged) {\n      part._$reparentDisconnectables?.(containerPart);\n      // Note that although `_$reparentDisconnectables` updates the part's\n      // `_$parent` reference after unlinking from its current parent, that\n      // method only exists if Disconnectables are present, so we need to\n      // unconditionally set it here\n      part._$parent = containerPart;\n      // Since the _$isConnected getter is somewhat costly, only\n      // read it once we know the subtree has directives that need\n      // to be notified\n      let newConnectionState;\n      if (\n        part._$notifyConnectionChanged !== undefined &&\n        (newConnectionState = containerPart._$isConnected) !==\n          oldParent!._$isConnected\n      ) {\n        part._$notifyConnectionChanged(newConnectionState);\n      }\n    }\n    if (endNode !== refNode || parentChanged) {\n      let start: Node | null = part._$startNode;\n      while (start !== endNode) {\n        const n: Node | null = wrap(start!).nextSibling;\n        wrap(container).insertBefore(start!, refNode);\n        start = n;\n      }\n    }\n  }\n\n  return part;\n};\n\n/**\n * Sets the value of a Part.\n *\n * Note that this should only be used to set/update the value of user-created\n * parts (i.e. those created using `insertPart`); it should not be used\n * by directives to set the value of the directive's container part. Directives\n * should return a value from `update`/`render` to update their part state.\n *\n * For directives that require setting their part value asynchronously, they\n * should extend `AsyncDirective` and call `this.setValue()`.\n *\n * @param part Part to set\n * @param value Value to set\n * @param index For `AttributePart`s, the index to set\n * @param directiveParent Used internally; should not be set by user\n */\nexport const setChildPartValue = <T extends ChildPart>(\n  part: T,\n  value: unknown,\n  directiveParent: DirectiveParent = part\n): T => {\n  part._$setValue(value, directiveParent);\n  return part;\n};\n\n// A sentinel value that can never appear as a part value except when set by\n// live(). Used to force a dirty-check to fail and cause a re-render.\nconst RESET_VALUE = {};\n\n/**\n * Sets the committed value of a ChildPart directly without triggering the\n * commit stage of the part.\n *\n * This is useful in cases where a directive needs to update the part such\n * that the next update detects a value change or not. When value is omitted,\n * the next update will be guaranteed to be detected as a change.\n *\n * @param part\n * @param value\n */\nexport const setCommittedValue = (part: Part, value: unknown = RESET_VALUE) =>\n  (part._$committedValue = value);\n\n/**\n * Returns the committed value of a ChildPart.\n *\n * The committed value is used for change detection and efficient updates of\n * the part. It can differ from the value set by the template or directive in\n * cases where the template value is transformed before being committed.\n *\n * - `TemplateResult`s are committed as a `TemplateInstance`\n * - Iterables are committed as `Array<ChildPart>`\n * - All other types are committed as the template value or value returned or\n *   set by a directive.\n *\n * @param part\n */\nexport const getCommittedValue = (part: ChildPart) => part._$committedValue;\n\n/**\n * Removes a ChildPart from the DOM, including any of its content and markers.\n *\n * Note: The only difference between this and clearPart() is that this also\n * removes the part's start node. This means that the ChildPart must own its\n * start node, ie it must be a marker node specifically for this part and not an\n * anchor from surrounding content.\n *\n * @param part The Part to remove\n */\nexport const removePart = (part: ChildPart) => {\n  part._$clear();\n  part._$startNode.remove();\n};\n\nexport const clearPart = (part: ChildPart) => {\n  part._$clear();\n};\n", "/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\nimport {ChildPart, noChange} from '../lit-html.js';\nimport {directive, Directive, PartInfo, PartType} from '../directive.js';\nimport {\n  insertPart,\n  getCommittedValue,\n  removePart,\n  setCommittedValue,\n  setChildPartValue,\n} from '../directive-helpers.js';\n\nexport type KeyFn<T> = (item: T, index: number) => unknown;\nexport type ItemTemplate<T> = (item: T, index: number) => unknown;\n\n// Helper for generating a map of array item to its index over a subset\n// of an array (used to lazily generate `newKeyToIndexMap` and\n// `oldKeyToIndexMap`)\nconst generateMap = (list: unknown[], start: number, end: number) => {\n  const map = new Map<unknown, number>();\n  for (let i = start; i <= end; i++) {\n    map.set(list[i], i);\n  }\n  return map;\n};\n\nclass RepeatDirective extends Directive {\n  private _itemKeys?: unknown[];\n\n  constructor(partInfo: PartInfo) {\n    super(partInfo);\n    if (partInfo.type !== PartType.CHILD) {\n      throw new Error('repeat() can only be used in text expressions');\n    }\n  }\n\n  private _getValuesAndKeys<T>(\n    items: Iterable<T>,\n    keyFnOrTemplate: KeyFn<T> | ItemTemplate<T>,\n    template?: ItemTemplate<T>\n  ) {\n    let keyFn: KeyFn<T> | undefined;\n    if (template === undefined) {\n      template = keyFnOrTemplate;\n    } else if (keyFnOrTemplate !== undefined) {\n      keyFn = keyFnOrTemplate as KeyFn<T>;\n    }\n    const keys = [];\n    const values = [];\n    let index = 0;\n    for (const item of items) {\n      keys[index] = keyFn ? keyFn(item, index) : index;\n      values[index] = template!(item, index);\n      index++;\n    }\n    return {\n      values,\n      keys,\n    };\n  }\n\n  render<T>(items: Iterable<T>, template: ItemTemplate<T>): Array<unknown>;\n  render<T>(\n    items: Iterable<T>,\n    keyFn: KeyFn<T> | ItemTemplate<T>,\n    template: ItemTemplate<T>\n  ): Array<unknown>;\n  render<T>(\n    items: Iterable<T>,\n    keyFnOrTemplate: KeyFn<T> | ItemTemplate<T>,\n    template?: ItemTemplate<T>\n  ) {\n    return this._getValuesAndKeys(items, keyFnOrTemplate, template).values;\n  }\n\n  override update<T>(\n    containerPart: ChildPart,\n    [items, keyFnOrTemplate, template]: [\n      Iterable<T>,\n      KeyFn<T> | ItemTemplate<T>,\n      ItemTemplate<T>,\n    ]\n  ) {\n    // Old part & key lists are retrieved from the last update (which may\n    // be primed by hydration)\n    const oldParts = getCommittedValue(\n      containerPart\n    ) as Array<ChildPart | null>;\n    const {values: newValues, keys: newKeys} = this._getValuesAndKeys(\n      items,\n      keyFnOrTemplate,\n      template\n    );\n\n    // We check that oldParts, the committed value, is an Array as an\n    // indicator that the previous value came from a repeat() call. If\n    // oldParts is not an Array then this is the first render and we return\n    // an array for lit-html's array handling to render, and remember the\n    // keys.\n    if (!Array.isArray(oldParts)) {\n      this._itemKeys = newKeys;\n      return newValues;\n    }\n\n    // In SSR hydration it's possible for oldParts to be an array but for us\n    // to not have item keys because the update() hasn't run yet. We set the\n    // keys to an empty array. This will cause all oldKey/newKey comparisons\n    // to fail and execution to fall to the last nested brach below which\n    // reuses the oldPart.\n    const oldKeys = (this._itemKeys ??= []);\n\n    // New part list will be built up as we go (either reused from\n    // old parts or created for new keys in this update). This is\n    // saved in the above cache at the end of the update.\n    const newParts: ChildPart[] = [];\n\n    // Maps from key to index for current and previous update; these\n    // are generated lazily only when needed as a performance\n    // optimization, since they are only required for multiple\n    // non-contiguous changes in the list, which are less common.\n    let newKeyToIndexMap!: Map<unknown, number>;\n    let oldKeyToIndexMap!: Map<unknown, number>;\n\n    // Head and tail pointers to old parts and new values\n    let oldHead = 0;\n    let oldTail = oldParts.length - 1;\n    let newHead = 0;\n    let newTail = newValues.length - 1;\n\n    // Overview of O(n) reconciliation algorithm (general approach\n    // based on ideas found in ivi, vue, snabbdom, etc.):\n    //\n    // * We start with the list of old parts and new values (and\n    //   arrays of their respective keys), head/tail pointers into\n    //   each, and we build up the new list of parts by updating\n    //   (and when needed, moving) old parts or creating new ones.\n    //   The initial scenario might look like this (for brevity of\n    //   the diagrams, the numbers in the array reflect keys\n    //   associated with the old parts or new values, although keys\n    //   and parts/values are actually stored in parallel arrays\n    //   indexed using the same head/tail pointers):\n    //\n    //      oldHead v                 v oldTail\n    //   oldKeys:  [0, 1, 2, 3, 4, 5, 6]\n    //   newParts: [ ,  ,  ,  ,  ,  ,  ]\n    //   newKeys:  [0, 2, 1, 4, 3, 7, 6] <- reflects the user's new\n    //                                      item order\n    //      newHead ^                 ^ newTail\n    //\n    // * Iterate old & new lists from both sides, updating,\n    //   swapping, or removing parts at the head/tail locations\n    //   until neither head nor tail can move.\n    //\n    // * Example below: keys at head pointers match, so update old\n    //   part 0 in-place (no need to move it) and record part 0 in\n    //   the `newParts` list. The last thing we do is advance the\n    //   `oldHead` and `newHead` pointers (will be reflected in the\n    //   next diagram).\n    //\n    //      oldHead v                 v oldTail\n    //   oldKeys:  [0, 1, 2, 3, 4, 5, 6]\n    //   newParts: [0,  ,  ,  ,  ,  ,  ] <- heads matched: update 0\n    //   newKeys:  [0, 2, 1, 4, 3, 7, 6]    and advance both oldHead\n    //                                      & newHead\n    //      newHead ^                 ^ newTail\n    //\n    // * Example below: head pointers don't match, but tail\n    //   pointers do, so update part 6 in place (no need to move\n    //   it), and record part 6 in the `newParts` list. Last,\n    //   advance the `oldTail` and `oldHead` pointers.\n    //\n    //         oldHead v              v oldTail\n    //   oldKeys:  [0, 1, 2, 3, 4, 5, 6]\n    //   newParts: [0,  ,  ,  ,  ,  , 6] <- tails matched: update 6\n    //   newKeys:  [0, 2, 1, 4, 3, 7, 6]    and advance both oldTail\n    //                                      & newTail\n    //         newHead ^              ^ newTail\n    //\n    // * If neither head nor tail match; next check if one of the\n    //   old head/tail items was removed. We first need to generate\n    //   the reverse map of new keys to index (`newKeyToIndexMap`),\n    //   which is done once lazily as a performance optimization,\n    //   since we only hit this case if multiple non-contiguous\n    //   changes were made. Note that for contiguous removal\n    //   anywhere in the list, the head and tails would advance\n    //   from either end and pass each other before we get to this\n    //   case and removals would be handled in the final while loop\n    //   without needing to generate the map.\n    //\n    // * Example below: The key at `oldTail` was removed (no longer\n    //   in the `newKeyToIndexMap`), so remove that part from the\n    //   DOM and advance just the `oldTail` pointer.\n    //\n    //         oldHead v           v oldTail\n    //   oldKeys:  [0, 1, 2, 3, 4, 5, 6]\n    //   newParts: [0,  ,  ,  ,  ,  , 6] <- 5 not in new map: remove\n    //   newKeys:  [0, 2, 1, 4, 3, 7, 6]    5 and advance oldTail\n    //         newHead ^           ^ newTail\n    //\n    // * Once head and tail cannot move, any mismatches are due to\n    //   either new or moved items; if a new key is in the previous\n    //   \"old key to old index\" map, move the old part to the new\n    //   location, otherwise create and insert a new part. Note\n    //   that when moving an old part we null its position in the\n    //   oldParts array if it lies between the head and tail so we\n    //   know to skip it when the pointers get there.\n    //\n    // * Example below: neither head nor tail match, and neither\n    //   were removed; so find the `newHead` key in the\n    //   `oldKeyToIndexMap`, and move that old part's DOM into the\n    //   next head position (before `oldParts[oldHead]`). Last,\n    //   null the part in the `oldPart` array since it was\n    //   somewhere in the remaining oldParts still to be scanned\n    //   (between the head and tail pointers) so that we know to\n    //   skip that old part on future iterations.\n    //\n    //         oldHead v        v oldTail\n    //   oldKeys:  [0, 1, -, 3, 4, 5, 6]\n    //   newParts: [0, 2,  ,  ,  ,  , 6] <- stuck: update & move 2\n    //   newKeys:  [0, 2, 1, 4, 3, 7, 6]    into place and advance\n    //                                      newHead\n    //         newHead ^           ^ newTail\n    //\n    // * Note that for moves/insertions like the one above, a part\n    //   inserted at the head pointer is inserted before the\n    //   current `oldParts[oldHead]`, and a part inserted at the\n    //   tail pointer is inserted before `newParts[newTail+1]`. The\n    //   seeming asymmetry lies in the fact that new parts are\n    //   moved into place outside in, so to the right of the head\n    //   pointer are old parts, and to the right of the tail\n    //   pointer are new parts.\n    //\n    // * We always restart back from the top of the algorithm,\n    //   allowing matching and simple updates in place to\n    //   continue...\n    //\n    // * Example below: the head pointers once again match, so\n    //   simply update part 1 and record it in the `newParts`\n    //   array.  Last, advance both head pointers.\n    //\n    //         oldHead v        v oldTail\n    //   oldKeys:  [0, 1, -, 3, 4, 5, 6]\n    //   newParts: [0, 2, 1,  ,  ,  , 6] <- heads matched: update 1\n    //   newKeys:  [0, 2, 1, 4, 3, 7, 6]    and advance both oldHead\n    //                                      & newHead\n    //            newHead ^        ^ newTail\n    //\n    // * As mentioned above, items that were moved as a result of\n    //   being stuck (the final else clause in the code below) are\n    //   marked with null, so we always advance old pointers over\n    //   these so we're comparing the next actual old value on\n    //   either end.\n    //\n    // * Example below: `oldHead` is null (already placed in\n    //   newParts), so advance `oldHead`.\n    //\n    //            oldHead v     v oldTail\n    //   oldKeys:  [0, 1, -, 3, 4, 5, 6] <- old head already used:\n    //   newParts: [0, 2, 1,  ,  ,  , 6]    advance oldHead\n    //   newKeys:  [0, 2, 1, 4, 3, 7, 6]\n    //               newHead ^     ^ newTail\n    //\n    // * Note it's not critical to mark old parts as null when they\n    //   are moved from head to tail or tail to head, since they\n    //   will be outside the pointer range and never visited again.\n    //\n    // * Example below: Here the old tail key matches the new head\n    //   key, so the part at the `oldTail` position and move its\n    //   DOM to the new head position (before `oldParts[oldHead]`).\n    //   Last, advance `oldTail` and `newHead` pointers.\n    //\n    //               oldHead v  v oldTail\n    //   oldKeys:  [0, 1, -, 3, 4, 5, 6]\n    //   newParts: [0, 2, 1, 4,  ,  , 6] <- old tail matches new\n    //   newKeys:  [0, 2, 1, 4, 3, 7, 6]   head: update & move 4,\n    //                                     advance oldTail & newHead\n    //               newHead ^     ^ newTail\n    //\n    // * Example below: Old and new head keys match, so update the\n    //   old head part in place, and advance the `oldHead` and\n    //   `newHead` pointers.\n    //\n    //               oldHead v oldTail\n    //   oldKeys:  [0, 1, -, 3, 4, 5, 6]\n    //   newParts: [0, 2, 1, 4, 3,   ,6] <- heads match: update 3\n    //   newKeys:  [0, 2, 1, 4, 3, 7, 6]    and advance oldHead &\n    //                                      newHead\n    //                  newHead ^  ^ newTail\n    //\n    // * Once the new or old pointers move past each other then all\n    //   we have left is additions (if old list exhausted) or\n    //   removals (if new list exhausted). Those are handled in the\n    //   final while loops at the end.\n    //\n    // * Example below: `oldHead` exceeded `oldTail`, so we're done\n    //   with the main loop.  Create the remaining part and insert\n    //   it at the new head position, and the update is complete.\n    //\n    //                   (oldHead > oldTail)\n    //   oldKeys:  [0, 1, -, 3, 4, 5, 6]\n    //   newParts: [0, 2, 1, 4, 3, 7 ,6] <- create and insert 7\n    //   newKeys:  [0, 2, 1, 4, 3, 7, 6]\n    //                     newHead ^ newTail\n    //\n    // * Note that the order of the if/else clauses is not\n    //   important to the algorithm, as long as the null checks\n    //   come first (to ensure we're always working on valid old\n    //   parts) and that the final else clause comes last (since\n    //   that's where the expensive moves occur). The order of\n    //   remaining clauses is just a simple guess at which cases\n    //   will be most common.\n    //\n    // * Note, we could calculate the longest\n    //   increasing subsequence (LIS) of old items in new position,\n    //   and only move those not in the LIS set. However that costs\n    //   O(nlogn) time and adds a bit more code, and only helps\n    //   make rare types of mutations require fewer moves. The\n    //   above handles removes, adds, reversal, swaps, and single\n    //   moves of contiguous items in linear time, in the minimum\n    //   number of moves. As the number of multiple moves where LIS\n    //   might help approaches a random shuffle, the LIS\n    //   optimization becomes less helpful, so it seems not worth\n    //   the code at this point. Could reconsider if a compelling\n    //   case arises.\n\n    while (oldHead <= oldTail && newHead <= newTail) {\n      if (oldParts[oldHead] === null) {\n        // `null` means old part at head has already been used\n        // below; skip\n        oldHead++;\n      } else if (oldParts[oldTail] === null) {\n        // `null` means old part at tail has already been used\n        // below; skip\n        oldTail--;\n      } else if (oldKeys[oldHead] === newKeys[newHead]) {\n        // Old head matches new head; update in place\n        newParts[newHead] = setChildPartValue(\n          oldParts[oldHead]!,\n          newValues[newHead]\n        );\n        oldHead++;\n        newHead++;\n      } else if (oldKeys[oldTail] === newKeys[newTail]) {\n        // Old tail matches new tail; update in place\n        newParts[newTail] = setChildPartValue(\n          oldParts[oldTail]!,\n          newValues[newTail]\n        );\n        oldTail--;\n        newTail--;\n      } else if (oldKeys[oldHead] === newKeys[newTail]) {\n        // Old head matches new tail; update and move to new tail\n        newParts[newTail] = setChildPartValue(\n          oldParts[oldHead]!,\n          newValues[newTail]\n        );\n        insertPart(containerPart, newParts[newTail + 1], oldParts[oldHead]!);\n        oldHead++;\n        newTail--;\n      } else if (oldKeys[oldTail] === newKeys[newHead]) {\n        // Old tail matches new head; update and move to new head\n        newParts[newHead] = setChildPartValue(\n          oldParts[oldTail]!,\n          newValues[newHead]\n        );\n        insertPart(containerPart, oldParts[oldHead]!, oldParts[oldTail]!);\n        oldTail--;\n        newHead++;\n      } else {\n        if (newKeyToIndexMap === undefined) {\n          // Lazily generate key-to-index maps, used for removals &\n          // moves below\n          newKeyToIndexMap = generateMap(newKeys, newHead, newTail);\n          oldKeyToIndexMap = generateMap(oldKeys, oldHead, oldTail);\n        }\n        if (!newKeyToIndexMap.has(oldKeys[oldHead])) {\n          // Old head is no longer in new list; remove\n          removePart(oldParts[oldHead]!);\n          oldHead++;\n        } else if (!newKeyToIndexMap.has(oldKeys[oldTail])) {\n          // Old tail is no longer in new list; remove\n          removePart(oldParts[oldTail]!);\n          oldTail--;\n        } else {\n          // Any mismatches at this point are due to additions or\n          // moves; see if we have an old part we can reuse and move\n          // into place\n          const oldIndex = oldKeyToIndexMap.get(newKeys[newHead]);\n          const oldPart = oldIndex !== undefined ? oldParts[oldIndex] : null;\n          if (oldPart === null) {\n            // No old part for this value; create a new one and\n            // insert it\n            const newPart = insertPart(containerPart, oldParts[oldHead]!);\n            setChildPartValue(newPart, newValues[newHead]);\n            newParts[newHead] = newPart;\n          } else {\n            // Reuse old part\n            newParts[newHead] = setChildPartValue(oldPart, newValues[newHead]);\n            insertPart(containerPart, oldParts[oldHead]!, oldPart);\n            // This marks the old part as having been used, so that\n            // it will be skipped in the first two checks above\n            oldParts[oldIndex as number] = null;\n          }\n          newHead++;\n        }\n      }\n    }\n    // Add parts for any remaining new values\n    while (newHead <= newTail) {\n      // For all remaining additions, we insert before last new\n      // tail, since old pointers are no longer valid\n      const newPart = insertPart(containerPart, newParts[newTail + 1]);\n      setChildPartValue(newPart, newValues[newHead]);\n      newParts[newHead++] = newPart;\n    }\n    // Remove any remaining unused old parts\n    while (oldHead <= oldTail) {\n      const oldPart = oldParts[oldHead++];\n      if (oldPart !== null) {\n        removePart(oldPart);\n      }\n    }\n\n    // Save order of new parts for next round\n    this._itemKeys = newKeys;\n    // Directly set part value, bypassing it's dirty-checking\n    setCommittedValue(containerPart, newParts);\n    return noChange;\n  }\n}\n\nexport interface RepeatDirectiveFn {\n  <T>(\n    items: Iterable<T>,\n    keyFnOrTemplate: KeyFn<T> | ItemTemplate<T>,\n    template?: ItemTemplate<T>\n  ): unknown;\n  <T>(items: Iterable<T>, template: ItemTemplate<T>): unknown;\n  <T>(\n    items: Iterable<T>,\n    keyFn: KeyFn<T> | ItemTemplate<T>,\n    template: ItemTemplate<T>\n  ): unknown;\n}\n\n/**\n * A directive that repeats a series of values (usually `TemplateResults`)\n * generated from an iterable, and updates those items efficiently when the\n * iterable changes based on user-provided `keys` associated with each item.\n *\n * Note that if a `keyFn` is provided, strict key-to-DOM mapping is maintained,\n * meaning previous DOM for a given key is moved into the new position if\n * needed, and DOM will never be reused with values for different keys (new DOM\n * will always be created for new keys). This is generally the most efficient\n * way to use `repeat` since it performs minimum unnecessary work for insertions\n * and removals.\n *\n * The `keyFn` takes two parameters, the item and its index, and returns a unique key value.\n *\n * ```js\n * html`\n *   <ol>\n *     ${repeat(this.items, (item) => item.id, (item, index) => {\n *       return html`<li>${index}: ${item.name}</li>`;\n *     })}\n *   </ol>\n * `\n * ```\n *\n * **Important**: If providing a `keyFn`, keys *must* be unique for all items in a\n * given call to `repeat`. The behavior when two or more items have the same key\n * is undefined.\n *\n * If no `keyFn` is provided, this directive will perform similar to mapping\n * items to values, and DOM will be reused against potentially different items.\n */\nexport const repeat = directive(RepeatDirective) as RepeatDirectiveFn;\n\n/**\n * The type of the class that powers this directive. Necessary for naming the\n * directive's return type.\n */\nexport type {RepeatDirective};\n", "import { html, nothing, render, TemplateResult } from 'lit-html'\nimport { repeat } from 'lit-html/directives/repeat.js'\nimport { api } from '../api'\nimport { contentFilterChangedEvent } from '../events'\nimport { IPaginated } from '../types'\n\n/**\n * A list read page by page from a paginated API endpoint, which NewsList and\n * DiscussionList build on.\n *\n * data-limit: items per page\n * data-paginate: load the next page when the last item scrolls into view,\n *   so it is usually there before the reader reaches the bottom. A button to\n *   try again is only shown when a load fails.\n *\n * The list reloads when a content filter names it (contentFilterChangedEvent).\n *\n * The constructor already renders, before a subclass' own fields are set, so\n * subclasses give their settings as getters and methods.\n */\nexport default abstract class FeedList<T> {\n  elem: HTMLElement\n  items: T[] = []\n  next: string | null = null\n  loaded = false\n  loading = false\n  error = false\n  paginate: boolean\n  // Bumped on reload(), so a response for the list before it is dropped.\n  generation = 0\n  observer = new IntersectionObserver((entries) => {\n    if (entries.some((e) => e.isIntersecting)) this.loadNext()\n  })\n\n  /** The endpoint, without query parameters. */\n  abstract get endpoint(): string\n  abstract get emptyText(): string\n  /** The retry button's label when the first page failed. */\n  abstract get loadLabel(): string\n  /** The retry button's label when a later page failed. */\n  abstract get moreLabel(): string\n  abstract itemKey(item: T): unknown\n  abstract itemTemplate(item: T): TemplateResult\n\n  /** The class of the element around the items. */\n  get listClass() {\n    return 'big-list'\n  }\n\n  /** Query parameters for the first page; undefined ones are left out. */\n  get params(): Record<string, string | undefined> {\n    return { limit: this.elem.dataset.limit }\n  }\n\n  constructor(elem: HTMLElement) {\n    this.elem = elem\n    this.paginate = 'paginate' in elem.dataset\n    // registerComponents runs again on inserted content; one list per element.\n    if ('feedListBound' in elem.dataset) return\n    elem.dataset.feedListBound = ''\n    const listener = contentFilterChangedEvent.on((selector) => {\n      if (!this.elem.isConnected) return listener.unregister()\n      if (this.elem.matches(selector)) this.reload()\n    })\n    this.reload()\n  }\n\n  get firstPageUrl() {\n    const url = new URL(this.endpoint, location.href)\n    for (const [key, value] of Object.entries(this.params))\n      if (value !== undefined) url.searchParams.set(key, value)\n    return url.toString()\n  }\n\n  reload() {\n    this.generation++\n    this.items = []\n    this.next = this.firstPageUrl\n    this.loaded = false\n    this.loading = false\n    this.load()\n  }\n\n  loadNext() {\n    if (this.loading || this.error || !this.next) return\n    this.load()\n  }\n\n  async load() {\n    const generation = this.generation\n    this.loading = true\n    this.error = false\n    this.render()\n    try {\n      const { data } = await api.get<IPaginated<T>>(this.next!)\n      if (generation !== this.generation) return\n      this.items.push(...data.results)\n      this.next = data.next\n      this.loaded = true\n    } catch (e) {\n      if (generation !== this.generation) return\n      console.error(e)\n      this.error = true\n    }\n    this.loading = false\n    this.render()\n  }\n\n  retry(ev: Event) {\n    ev.preventDefault()\n    this.error = false\n    this.loadNext()\n  }\n\n  render() {\n    render(\n      html`<div class=\"feed-list-items ${this.listClass}\">\n          ${repeat(\n            this.items,\n            (item) => this.itemKey(item),\n            (item) => this.itemTemplate(item)\n          )}\n        </div>\n        ${this.loaded && !this.items.length && this.emptyText\n          ? html`<p class=\"teaser\">${this.emptyText}</p>`\n          : nothing}\n        ${this.loading\n          ? html`<div class=\"feed-list-status\">\n              <i class=\"material-icons spinner\">autorenew</i>\n            </div>`\n          : nothing}\n        ${this.error\n          ? html`<div class=\"feed-list-status\">\n              <button\n                class=\"button pagination\"\n                @click=${(ev: Event) => this.retry(ev)}\n              >\n                <i class=\"material-icons\">expand_more</i>\n                ${this.loaded ? this.moreLabel : this.loadLabel}\n              </button>\n            </div>`\n          : nothing}`,\n      this.elem\n    )\n    // Observing again makes the observer report the last item's current\n    // state, so a page too short to fill the screen loads the next one too.\n    this.observer.disconnect()\n    if (!this.paginate || !this.next || this.loading || this.error) return\n    const lastItem = this.elem.querySelector('.feed-list-items > :last-child')\n    if (lastItem) this.observer.observe(lastItem)\n  }\n}\n", "import { html, nothing } from 'lit-html'\nimport { IDiscussionListItem, IDiscussionModeration } from '../types'\nimport FeedList from './FeedList'\n\nfunction moderationMenu(\n  item: IDiscussionListItem,\n  moderation: IDiscussionModeration\n) {\n  const { pin_url, archive_url, redirect } = moderation\n  const menuId = `discussion-settings-${item.id}`\n  const items = item.archive\n    ? html`<li>\n        <a\n          href=\"#\"\n          data-post-api=\"PATCH ${archive_url}\"\n          data-archive=\"false\"\n          data-post-redirect=${redirect}\n        >\n          <i class=\"material-icons\">unarchive</i>\n          Avarkivera diskussion\n        </a>\n      </li>`\n    : html`<li>\n          <a\n            href=\"#\"\n            data-post-api=\"PATCH ${pin_url}\"\n            data-pinned_discussion=${item.pinned ? '' : item.id}\n            data-post-redirect=${redirect}\n          >\n            <i class=\"material-icons\">attachment</i>\n            ${item.pinned ? 'Avpinna diskussion' : 'Pinna diskussion'}\n          </a>\n        </li>\n        <li>\n          <a\n            href=\"#\"\n            data-post-api=\"PATCH ${archive_url}\"\n            data-archive=\"true\"\n            data-post-redirect=${redirect}\n          >\n            <i class=\"material-icons\">archive</i>\n            Arkivera diskussion\n          </a>\n        </li>`\n  return html`<div class=\"dropdown\">\n    <button\n      class=\"btn btn-default dropdown-toggle\"\n      type=\"button\"\n      id=${menuId}\n      data-toggle=\"dropdown\"\n      aria-haspopup=\"true\"\n    >\n      <i class=\"material-icons\">settings</i>\n      <span class=\"caret\"></span>\n    </button>\n    <ul class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=${menuId}>\n      ${items}\n    </ul>\n  </div>`\n}\n\nfunction authorTemplate({ author }: IDiscussionListItem) {\n  if (author.url)\n    return html`<a href=${author.url} class=\"popup-link\">${author.name}</a>`\n  if (author.name) return html`<span>${author.name}</span>`\n  return html`<em>Borttagen anv\u00E4ndare</em>`\n}\n\nfunction authorImageTemplate({ author }: IDiscussionListItem) {\n  const image = html`<img\n    src=${author.image}\n    width=\"200\"\n    height=\"200\"\n    class=\"profile-image\"\n    alt=\"\"\n  />`\n  if (author.url)\n    return html`<a href=${author.url} class=\"popup-link\">${image}</a>`\n  return image\n}\n\n/**\n * Discussions from DiscussionViewSet.list.\n *\n * data-discussion-list: the list URL\n * data-group: only this group's discussions, pinned first\n * data-archive: the group's archive instead\n * data-tag: only discussions with this tag\n * data-show-group: name the group of each discussion\n * data-plain: the items without .big-list dividers\n * data-empty-text: what to say when there are none; nothing without it\n * data-limit, data-paginate: see FeedList\n */\nexport default class DiscussionList extends FeedList<IDiscussionListItem> {\n  static selector = '[data-discussion-list]'\n\n  get endpoint() {\n    return this.elem.dataset.discussionList!\n  }\n\n  get params() {\n    const { group, tag } = this.elem.dataset\n    const archive = 'archive' in this.elem.dataset ? '1' : undefined\n    return { ...super.params, group, tag, archive }\n  }\n\n  get listClass() {\n    return 'plain' in this.elem.dataset ? '' : 'big-list'\n  }\n\n  get showGroup() {\n    return 'showGroup' in this.elem.dataset\n  }\n\n  get emptyText() {\n    return this.elem.dataset.emptyText ?? ''\n  }\n\n  get loadLabel() {\n    return 'Ladda diskussioner'\n  }\n\n  get moreLabel() {\n    return '\u00C4ldre diskussioner'\n  }\n\n  itemKey(item: IDiscussionListItem) {\n    return item.id\n  }\n\n  itemTemplate(item: IDiscussionListItem) {\n    // The group's own list shows its pinned discussion; lists across groups\n    // name the group instead.\n    const pinned = !this.showGroup && item.pinned\n    return html`<div class=\"discussion item${pinned ? ' pinned' : ''}\">\n      <div class=\"the-post d-flex ga-2\">\n        <div class=\"author-image position-relative\">\n          ${pinned\n            ? html`<i class=\"material-icons pin\">attachment</i>`\n            : item.is_unread\n              ? html`<i class=\"material-icons unread-icon\" title=\"Ol\u00E4st\"\n                  >star</i\n                >`\n              : nothing}\n          ${authorImageTemplate(item)}\n        </div>\n        <div class=\"flex-grow-1\">\n          ${item.moderation ? moderationMenu(item, item.moderation) : nothing}\n          <div class=\"position-relative\">\n            <div class=\"d-flex ga-2\">\n              <h3>\n                <a href=${item.url} class=\"stretched-link\">${item.title}</a>\n              </h3>\n              ${item.unread_display\n                ? html`<span\n                    class=\"unread flex-shrink-0\"\n                    title=\"Nya kommentarer\"\n                    >${item.unread_display}</span\n                  >`\n                : nothing}\n            </div>\n            <p>${item.teaser}</p>\n          </div>\n          <p class=\"meta\">\n            ${this.showGroup\n              ? html`<a href=${item.group.url}\n                    ><i class=\"material-icons\">group</i> ${item.group.name}</a\n                  >\n                  -`\n              : nothing}\n            ${authorTemplate(item)}\n            ${item.posted_display\n              ? html`- <a href=${item.url}>${item.posted_display}</a> -\n                  <a href=\"${item.url}#comments\"\n                    >${item.comment_count}\n                    ${item.comment_count === 1\n                      ? 'kommentar'\n                      : 'kommentarer'}</a\n                  >`\n              : nothing}\n          </p>\n        </div>\n      </div>\n    </div>`\n  }\n}\n", "import { html, render } from 'lit-html'\nimport { userLoadedEvent } from '../events'\n\nexport default class DiscussPostAs {\n  static selector = '[data-post-as]'\n\n  linkElem: HTMLAnchorElement\n  listElem: HTMLUListElement\n  inputElem?: HTMLInputElement | null\n\n  get selected() {\n    return Number(localStorage['discuss:postingAs']) || 0\n  }\n\n  set selected(value: number) {\n    localStorage['discuss:postingAs'] = value\n    // Set input elem. 0 = indefined\n    if (this.inputElem) this.inputElem.value = value ? value.toString() : ''\n    this.linkElem.innerText = `${this.currentText} \u23F7`\n  }\n\n  get currentGroup() {\n    return user.data?.posting_groups.find((g) => g.id === this.selected)\n  }\n\n  get currentText() {\n    return this.currentGroup?.name ?? user.fullName\n  }\n\n  select(ev: Event, value: number) {\n    ev.preventDefault()\n    this.selected = value\n  }\n\n  /**\n   * To be run when user data is loaded\n   */\n  init() {\n    const choices = [\n      { id: 0, name: user.fullName },\n      ...user.data!.posting_groups\n    ]\n    render(\n      choices.map(\n        ({ id, name }) =>\n          html`<li>\n            <a href=\"#\" @click=${(ev: Event) => this.select(ev, id)}>${name}</a>\n          </li>`\n      ),\n      this.listElem\n    )\n    this.selected = Number(localStorage['discuss:postingAs']) || 0\n  }\n\n  constructor(elem: HTMLDivElement) {\n    this.linkElem = elem.querySelector('a.dropdown-toggle')!\n    this.listElem = elem.querySelector('ul')!\n    this.inputElem = elem\n      .closest('form')\n      ?.querySelector('input[name=\"posting_group\"]')\n    if (user.data) this.init()\n    else {\n      const ev = userLoadedEvent.on(() => {\n        ev.unregister()\n        this.init()\n      })\n    }\n  }\n}\n", "function setButtonsDisable(form: HTMLFormElement, disable = true) {\n  for (const button of form.querySelectorAll<HTMLButtonElement>(\n    '[type=\"submit\"]'\n  ))\n    button.disabled = disable\n}\n\n/** Let a form be submitted again. */\nexport function releaseSubmit(form: HTMLFormElement) {\n  delete form.dataset.submitting\n  setButtonsDisable(form, false)\n}\n\nexport default {\n  install() {\n    document.body.addEventListener('submit', (ev) => {\n      const form = ev.target as HTMLFormElement\n      if (form.dataset.submitting) {\n        ev.preventDefault()\n        return false\n      }\n      form.dataset.submitting = 'true'\n      setButtonsDisable(form)\n      // A .json-form releases itself as soon as the API answers. This is the\n      // fallback for a classic POST, where the page is expected to go away.\n      setTimeout(() => releaseSubmit(form), 5_000)\n    })\n  }\n}\n", "export default class DynamicChoices {\n  static selector = '.dynamic-choices'\n  api: string\n  choices: NodeListOf<HTMLButtonElement>\n  form: HTMLDivElement\n  wrapper: HTMLElement\n\n  constructor(elem: HTMLElement) {\n    this.wrapper = elem\n    this.form = this.wrapper.querySelector('#dynamic-form')!\n    this.api = this.wrapper.dataset.api!\n    this.initialize(this.wrapper)\n    this.choices = this.wrapper.querySelectorAll('button.choice')\n    for (const btn of this.choices)\n      btn.addEventListener('click', this.choiceHandler.bind(this))\n    this.onChoiceClick(this.wrapper)\n  }\n\n  choiceHandler(ev: PointerEvent) {\n    const button = ev.currentTarget as HTMLButtonElement\n    const wrapper = button.parentElement!\n    if (button.classList.contains('active')) return\n\n    for (const btn of this.choices) {\n      if (btn === button) button.classList.add('active')\n      else btn.classList.remove('active')\n    }\n\n    if (wrapper.classList.contains('chosen')) this.initialize(wrapper)\n    else wrapper.classList.add('chosen')\n    button.classList.add('on')\n\n    if (button.classList.contains('target')) {\n      for (const [key, value] of Object.entries(button.dataset))\n        this.form.querySelector(`#id_${key}`)?.setAttribute('value', value!)\n      this.form.style.display = 'block'\n    } else {\n      const target = this.wrapper.querySelector<HTMLElement>(\n        button.dataset.target!\n      )\n      if (!target) throw new Error('No target found for button')\n      target.classList.add('active')\n      this.onChoiceClick(target)\n    }\n  }\n\n  initialize(elem: HTMLElement) {\n    for (const div of elem.querySelectorAll('div'))\n      div.classList.remove('chosen', 'active')\n    for (const btn of elem.querySelectorAll('button.choice'))\n      btn.classList.remove('on')\n    this.form.style.display = 'none'\n  }\n\n  /**\n   * Automatically activate single button child\n   */\n  onChoiceClick(elem: HTMLElement) {\n    const buttons = elem.querySelectorAll<HTMLButtonElement>(':scope > button')\n    if (buttons.length === 1) buttons[0].click()\n  }\n}\n", "import { contentInsertedEvent } from '../events'\n\nlet delayTimeout: ReturnType<typeof setTimeout>\nfunction delayed(fn: () => unknown, ms = 100) {\n  return () => {\n    clearTimeout(delayTimeout)\n    delayTimeout = setTimeout(fn, ms)\n  }\n}\n\nexport default class DynamicForm {\n  static selector = 'form.dynamic-form'\n\n  form: HTMLFormElement\n  filterElement: HTMLInputElement | null\n  targetElement: HTMLDivElement | null\n\n  constructor(form: HTMLFormElement) {\n    this.form = form\n    form.addEventListener('submit', (e) => e.preventDefault())\n    this.filterElement = this.form.querySelector('input.dynamic-form--filter')\n    this.filterElement?.addEventListener(\n      'keyup',\n      delayed(this.handleFilter.bind(this))\n    )\n    this.targetElement = this.form.querySelector('.dynamic-form--target')\n  }\n\n  async handleFilter() {\n    if (!this.filterElement || !this.targetElement)\n      throw new Error('Missing filter or target elements')\n    const { action, method } = this.form\n    const data = {\n      [this.filterElement.name]: this.filterElement.value\n    }\n    const isGetMethod = method.toUpperCase() === 'GET'\n    const response = await (isGetMethod\n      ? fetch(`${action}?${new URLSearchParams(data)}`, { method })\n      : fetch(action, { body: JSON.stringify(data), method }))\n    const text = await response.text()\n    this.targetElement.innerHTML = text\n    contentInsertedEvent.emit(this.targetElement)\n  }\n}\n", "import { api } from '../api'\nimport { contentInsertedEvent, goToPageEvent, popupCloseEvent } from '../events'\nimport { clearFormErrors, showApiError } from '../formErrors'\nimport { getFormData } from '../utils'\nimport { releaseSubmit } from './FormSubmitOnce'\nimport { interpretApi } from './utils'\n\n/**\n * Post a server-rendered Django form to the REST API instead of to a view.\n *\n * The form keeps its Django markup and its {% csrf_token %}; this only takes\n * over the submit. Field errors are painted back onto the form by formErrors,\n * so an invalid write looks the way it always did.\n *\n * Attributes, all on the <form>:\n *   data-form-api     \"[METHOD ]url\", as interpretApi reads it. Naming the\n *                     endpoint is what marks the form, the way data-post-api\n *                     marks a button for ApiPost.\n *   data-redirect     Where to go afterwards, via the usual ajax navigation.\n *                     May contain {field} placeholders, filled in from the\n *                     response - a create learns the slug of the thing it just\n *                     made only from there. Which region that navigation\n *                     replaces comes from the nearest [data-ajax-target], and\n *                     closest() counts the form itself - so a form that edits\n *                     something rendered outside its own region can carry\n *                     data-ajax-target=\"#main-content\" and reload the lot.\n *   data-popup-close  Close the popup the form was opened in. On its own, for a\n *                     form whose result reaches the page by other means, such\n *                     as the comment socket; with data-redirect, the page\n *                     behind the popup is reloaded as well.\n *   data-error-text   Message for the failures that cannot be shown per field.\n */\n\nconst SELECTOR = 'form[data-form-api]'\nconst PLACEHOLDER = /\\{(\\w+)\\}/g\nconst DEFAULT_ERROR = 'Misslyckades med att spara.'\n\n/**\n * Forms with a write in flight. FormSubmitOnce guards the *native* submit, but\n * it cannot stop this handler firing a second request, and which of the two\n * listeners runs first is an accident of registration order - so guard here too.\n */\nconst inFlight = new WeakSet<HTMLFormElement>()\n\nfunction resolveRedirect(template: string, data: unknown) {\n  return template.replace(PLACEHOLDER, (_match, key: string) => {\n    const value = (data as Record<string, unknown> | null)?.[key]\n    if (value === undefined || value === null)\n      throw new Error(\n        `data-redirect needs \"${key}\", which the API did not send`\n      )\n    return encodeURIComponent(String(value))\n  })\n}\n\nasync function submitForm(form: HTMLFormElement) {\n  const { formApi, popupClose, redirect, errorText } = form.dataset\n  const { method, url } = interpretApi(formApi!)\n  try {\n    const { data } = await api.request({ method, url, data: getFormData(form) })\n    clearFormErrors(form)\n    // Append mode: the serializer answers with rendered {html}, which goes at\n    // the end of the neighbouring container and the form starts over.\n    const container = form.parentElement?.querySelector('.json-add-container')\n    if (container) {\n      container.insertAdjacentHTML('beforeend', data.html)\n      // The inserted markup has components of its own - delete buttons, embeds.\n      contentInsertedEvent.emit(container as HTMLElement)\n      form.reset()\n      return\n    }\n    // Navigate first: goToPage reads its target region off the form, which\n    // closing the popup removes from the document.\n    if (redirect)\n      goToPageEvent.emit({\n        href: resolveRedirect(redirect, data),\n        currentTarget: form\n      })\n    if (popupClose !== undefined) popupCloseEvent.emit()\n  } catch (e) {\n    showApiError(e, form, errorText ?? DEFAULT_ERROR)\n  }\n}\n\nexport default {\n  selector: SELECTOR,\n  install() {\n    document.body.addEventListener('submit', async (ev) => {\n      const form = ev.target as HTMLFormElement\n      if (!form.matches(SELECTOR)) return\n      ev.preventDefault()\n      if (inFlight.has(form)) return\n      inFlight.add(form)\n      try {\n        await submitForm(form)\n      } finally {\n        inFlight.delete(form)\n        releaseSubmit(form)\n      }\n    })\n  }\n}\n", "import { isHTMLElement } from '../utils'\n\nlet currentMenu: Menu | null = null\n\n/**\n * Click outside reaction\n */\ndocument.addEventListener('click', (ev) => {\n  if (!currentMenu || !isHTMLElement(ev.target!)) return\n  if (!currentMenu.target.contains(ev.target)) currentMenu.close()\n})\n\nexport default class Menu {\n  static selector = 'nav a.toggler'\n  isOpen = false\n  target: HTMLElement\n  toggler: HTMLAnchorElement\n\n  constructor(toggler: HTMLAnchorElement) {\n    this.toggler = toggler\n    this.target = document.querySelector(toggler.getAttribute('href')!)!\n    toggler.addEventListener('click', this.click.bind(this))\n  }\n\n  click(event: PointerEvent) {\n    event.preventDefault()\n    const thisOpen = this.isOpen\n    if (currentMenu) currentMenu.close()\n    if (!thisOpen) this.open()\n    else currentMenu = null\n    this.toggler.blur()\n  }\n\n  close() {\n    this.target.classList.remove('open')\n    this.toggler.classList.remove('active')\n    this.isOpen = false\n    document.body.classList.remove(`${this.target.id}-is-open`)\n  }\n\n  open() {\n    this.target.classList.add('open')\n    this.toggler.classList.add('active')\n    this.isOpen = true\n    document.body.classList.add(`${this.target.id}-is-open`)\n    currentMenu = this\n  }\n}\n", "import { html, nothing } from 'lit-html'\nimport { INewsListItem } from '../types'\nimport FeedList from './FeedList'\n\n/**\n * The news the user's filter picks, from NewsFlashViewSet.feed.\n *\n * data-news-list: the feed URL\n * data-target: \"national\" or \"local\", to show only one of them\n * data-limit, data-paginate: see FeedList\n */\nexport default class NewsList extends FeedList<INewsListItem> {\n  static selector = '[data-news-list]'\n\n  get endpoint() {\n    return this.elem.dataset.newsList!\n  }\n\n  get params() {\n    return { ...super.params, target: this.elem.dataset.target }\n  }\n\n  get emptyText() {\n    return 'Du har inga nyheter just nu. Testa att aktivera n\u00E5gra nyhetsk\u00E4llor.'\n  }\n\n  get loadLabel() {\n    return 'Ladda nyheter'\n  }\n\n  get moreLabel() {\n    return 'Fler nyheter'\n  }\n\n  itemKey(item: INewsListItem) {\n    return item.slug\n  }\n\n  itemTemplate(item: INewsListItem) {\n    return html`<div class=\"item position-relative\">\n      <div class=\"d-flex flex-column flex-xs-row ga-2\">\n        ${item.thumbnail\n          ? html`<div class=\"image flex-shrink-0 order-xs-last w-xs-33\">\n              <img\n                class=\"w-full h-auto\"\n                src=${item.thumbnail.url}\n                width=${item.thumbnail.width}\n                height=${item.thumbnail.height}\n                alt=\"\"\n              />\n            </div>`\n          : nothing}\n        <div class=\"flex-grow-1\">\n          <h2><a href=${item.url} class=\"stretched-link\">${item.title}</a></h2>\n          <p>${item.description}</p>\n        </div>\n      </div>\n      <p class=\"meta\">\n        <i class=\"material-icons\">${item.icon}</i> ${item.target_name} \u2013\n        ${item.posted_display}\n        ${item.is_published\n          ? nothing\n          : html`<i class=\"material-icons\">${item.state_icon}</i>\n              ${item.state_display}`}\n      </p>\n    </div>`\n  }\n}\n", "import Popup from '../Popup'\nimport { isHTMLElement } from '../utils'\n\nexport default {\n  className: 'popup-link',\n\n  install() {\n    document.body.addEventListener('click', this.click.bind(this))\n  },\n\n  click(event: MouseEvent) {\n    if (!isHTMLElement(event.target!)) return\n    const linkTag = event.target.closest('a')\n    if (linkTag && linkTag.classList.contains(this.className)) {\n      event.preventDefault()\n      new Popup(\n        linkTag.title,\n        linkTag.href,\n        undefined,\n        linkTag.dataset.popupMethod\n      )\n    }\n  }\n}\n", "import { api } from '../api'\n\nexport default class RadioButtons {\n  url: string\n  attribute: string\n  container: HTMLElement\n  data: { [k: string]: string | undefined }\n  method: string\n  static selector = '.json-radio'\n\n  constructor(elem: HTMLElement) {\n    this.container = elem\n    const { api, attribute, ...data } = elem.dataset\n    if (!api) throw new Error('Missing data-api on json-radio element')\n    this.attribute = attribute ?? 'value'\n    if (api.includes(' ')) {\n      const [method, href] = api.split(/\\s+/)\n      this.url = href\n      this.method = method\n    } else {\n      this.url = api\n      this.method = 'POST'\n    }\n    this.data = data\n    delete this.data.api\n    for (const button of elem.querySelectorAll('button')) {\n      button.addEventListener('click', this.clickHandler.bind(this))\n    }\n  }\n\n  async clickHandler(event: PointerEvent) {\n    event.preventDefault()\n    const current = event.currentTarget as HTMLButtonElement\n    current.blur()\n    // The active button is the state we are already in: nothing to post.\n    if (current.classList.contains('active')) return\n    try {\n      await api.request({\n        method: this.method,\n        url: this.url,\n        data: {\n          ...this.data,\n          [this.attribute]: current.value\n        }\n      })\n      this.container.querySelector('.active')?.classList.remove('active')\n      current.classList.add('active')\n    } catch {}\n  }\n}\n", "import $ from 'jquery'\nimport { api } from '../api'\n\nexport default class ReadMarker {\n  static selector = '.click-read'\n\n  constructor(element: HTMLElement) {\n    const id = element.id\n    const storageKey = `has-read-${id}`\n\n    if (!localStorage[storageKey]) element.classList.add('open')\n    const closer = element.querySelector('a.closer')\n    if (!closer) throw new Error('Missing closer element to mark read-click')\n\n    closer.addEventListener('click', (ev) => {\n      ev.preventDefault()\n      $(element).slideUp()\n      if (element.classList.contains('json'))\n        api.post((ev.currentTarget as HTMLAnchorElement).href, { id })\n      else localStorage[storageKey] = 'True'\n    })\n  }\n}\n", "export default class ResponsiveEmbed {\n  static selector = '.embed-container.photo'\n  container: HTMLDivElement\n  retries = 100\n  retryDelay = 100\n  embed: HTMLIFrameElement | null = null\n  orig = { width: 0, height: 0, ratio: 0 }\n\n  constructor(elem: HTMLDivElement) {\n    this.container = elem\n    window.addEventListener('resize', this.resize.bind(this))\n    this.checkIt()\n  }\n\n  get parentWidth() {\n    return this.embed?.parentElement?.getBoundingClientRect().width ?? 0\n  }\n\n  setEmbedSize(width: number, height: number) {\n    if (!this.embed) return\n    this.embed.style.width = `${width}px`\n    this.embed.style.height = `${height}px`\n  }\n\n  resize() {\n    if (!this.embed) return\n\n    if (this.parentWidth > this.orig.width)\n      this.setEmbedSize(this.orig.width, this.orig.height)\n    else\n      this.setEmbedSize(\n        this.embed.parentElement!.clientWidth,\n        this.embed.parentElement!.clientWidth * this.orig.ratio\n      )\n  }\n\n  retry() {\n    if (this.retries <= 0) return\n    this.retries -= 1\n    setTimeout(this.checkIt.bind(this), this.retryDelay) // Try again\n  }\n\n  setOriginalSize(width: number, height: number) {\n    this.orig = { width, height, ratio: height / width }\n  }\n\n  checkIt() {\n    this.embed = this.container.querySelector('iframe')\n    if (!this.embed) return this.retry()\n\n    if (this.embed.classList.contains('flickr-embed-frame')) {\n      const { naturalWidth, naturalHeight } = this.embed.dataset\n      this.setOriginalSize(Number(naturalWidth), Number(naturalHeight))\n    } else {\n      const { width, height } = this.embed.getBoundingClientRect()\n      this.setOriginalSize(width, height)\n    }\n    this.embed.setAttribute('scrolling', 'no') // iOS fix\n    this.container.style.paddingBottom = `${this.orig.ratio * 100}%`\n    this.resize()\n  }\n}\n", "import $ from 'jquery'\nimport { getNamespace } from '../utils'\nimport { namespaceEvent, pageUpdateEvent } from '../events'\nimport { api } from '../api'\nimport { isAxiosError, isCancel } from 'axios'\nimport { html, nothing, render, type TemplateResult } from 'lit-html'\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js'\n\nconst TIMEOUT = 250 // timeout in ms\nconst MIN_CHARS = 3 // Type minimum chars before searching\nconst MODES = ['searching', 'type-more']\nconst namespaces = ['news', 'discuss', 'knowledge']\nlet controller: AbortController | null = null\n\nexport default class SiteSearch {\n  static selector = '#site-search'\n  static onlyInitial = true\n  active = false\n  checkboxes: NodeListOf<HTMLInputElement>\n  elem: HTMLElement\n  timeout?: ReturnType<typeof setTimeout>\n  resultsElem: HTMLElement\n  qElem: HTMLInputElement\n  query: string\n\n  constructor(elem: HTMLElement) {\n    this.elem = elem\n    this.qElem = elem.querySelector<HTMLInputElement>('[name=\"q\"]')!\n    this.checkboxes = elem.querySelectorAll('[type=\"checkbox\"]')\n    this.resultsElem = elem.querySelector('#site-search-results')!\n    this.query = ''\n\n    namespaceEvent.on((namespace) => {\n      namespace = namespace && namespace.split(':')[0]\n      const setAll = namespaces.indexOf(namespace) === -1\n      this.checkboxes.forEach((element) => {\n        const setThis = setAll || element.name === namespace\n        if (element.checked !== setThis) {\n          element.checked = setThis\n          element.dispatchEvent(new Event('change'))\n        }\n      })\n    })\n    pageUpdateEvent.on(() => {\n      if (this.active) this.close()\n      // Because page loads resets body classes.\n      // this.addClass('site-search-active', 'body')\n    })\n    // Set initial namespace\n    namespaceEvent.emit(getNamespace(document))\n    elem.querySelector('.activate')?.addEventListener('click', () => {\n      if (this.active) this.close()\n      else this.open()\n    })\n    elem.querySelector('form')?.addEventListener('submit', (event) => {\n      event.preventDefault()\n    })\n    this.qElem.addEventListener('input', () => {\n      this.searchTimeout()\n    })\n    this.checkboxes.forEach((checkbox) => {\n      checkbox.addEventListener('change', () => {\n        this.searchTimeout(true)\n      })\n    })\n  }\n\n  searchTimeout(forceUpdate = false) {\n    if (!forceUpdate && this.query === this.qElem.value.trim()) return\n    this.query = this.qElem.value.trim()\n    this.render(nothing)\n    clearTimeout(this.timeout)\n    if (controller) {\n      controller.abort()\n      controller = null\n    }\n    if (!this.active) return\n\n    if (this.query.length === 0) this.setMode()\n    else if (this.query.length < MIN_CHARS) this.setMode('type-more')\n    else {\n      this.setMode('searching')\n      this.timeout = setTimeout(this.doSearch.bind(this), TIMEOUT)\n    }\n  }\n\n  close() {\n    this.removeClass('active')\n    this.removeClass('site-search-active', 'body')\n    this.active = false\n  }\n\n  open() {\n    this.addClass('active')\n    this.addClass('site-search-active', 'body')\n    this.elem.scrollIntoView(true)\n    this.active = true\n    this.qElem.focus()\n    this.searchTimeout(true)\n  }\n\n  addClass(name: string, selector?: string) {\n    const elem = selector ? document.querySelector(selector)! : this.elem\n    elem.classList.add(name)\n  }\n\n  removeClass(name: string, selector?: string) {\n    const elem = selector ? document.querySelector(selector)! : this.elem\n    elem.classList.remove(name)\n  }\n\n  setMode(mode?: 'searching' | 'type-more') {\n    MODES.forEach((m) => {\n      if (mode === m) this.addClass(m)\n      else this.removeClass(m)\n    })\n  }\n\n  // All content goes through render(), since lit-html loses track of a\n  // container that is emptied any other way.\n  render(content: TemplateResult | typeof nothing) {\n    render(content, this.resultsElem)\n  }\n\n  setResults(results: string) {\n    this.render(html`${unsafeHTML(results)}`)\n  }\n\n  setErrorText(text: string) {\n    this.render(html`<span class=\"meta\"><strong>${text}</strong></span>`)\n  }\n\n  async doSearch() {\n    const namespaces = Array.from(this.checkboxes)\n      .filter((cb) => cb.checked)\n      .map((cb) => cb.name)\n    controller = new AbortController()\n    try {\n      const { data } = await api.get('/search/', {\n        signal: controller.signal,\n        params: { q: this.query, namespaces }\n      })\n      this.setResults(data)\n    } catch (e) {\n      if (!isAxiosError(e) || isCancel(e)) return\n      if (e.response) return this.setErrorText(e.message)\n      this.setErrorText('Inget n\u00E4tverk')\n    } finally {\n      this.setMode()\n    }\n  }\n}\n", "import { isHTMLElement } from '../utils'\n\nexport default {\n  buttonSelector: '[data-tab-name]',\n  containerselector: '[data-tabs]',\n\n  install() {\n    document.body.addEventListener('click', (ev) => {\n      if (!ev.target || !isHTMLElement(ev.target)) return\n      const button = ev.target.closest(this.buttonSelector)\n      if (!button || !isHTMLElement(button)) return\n      // Can't use closest(), dont know why.\n      const container = button.parentElement!\n      const name = button.dataset.tabName!\n      this.setActive(this.getButtons(container), name)\n      this.setActive(this.getContentTabs(container.dataset.tabs!), name)\n    })\n  },\n\n  getButtons(container: HTMLElement) {\n    return container.querySelectorAll<HTMLElement>(this.buttonSelector)\n  },\n\n  getContentTabs(id: string) {\n    return document.querySelectorAll<HTMLElement>(\n      `[data-tab-content=\"${id}\"] [data-tab-name]`\n    )\n  },\n\n  setActive(elements: NodeListOf<HTMLElement>, name: string) {\n    for (const { dataset } of elements) {\n      if (dataset.tabName === name) dataset.active = ''\n      else delete dataset.active\n    }\n  }\n}\n", "import { api } from '../api'\nimport { updateTarget } from '../navigation'\nimport { interpretApi } from './utils'\n\nexport default class ToggleButton {\n  button: HTMLAnchorElement | HTMLButtonElement\n  icon: { on?: string; off?: string }\n  iconElem: HTMLElement | null\n  offMethod?: string\n  once: boolean\n  reload: boolean\n  state: boolean\n  statusElem: HTMLSpanElement | null\n  updateTarget?: string\n  static selector = 'a[data-toggle-api],button[data-toggle-api]'\n\n  constructor(elem: HTMLAnchorElement | HTMLButtonElement) {\n    this.button = elem\n    const {\n      icon,\n      icon_on,\n      icon_off,\n      toggleApi,\n      toggleAttr,\n      toggleOffApi,\n      toggleOnce,\n      reload,\n      updateTarget,\n      ...dataset\n    } = elem.dataset\n    this.icon = {\n      off: icon_off ?? (icon && `${icon}_off`),\n      on: icon_on ?? (icon && `${icon}_on`)\n    }\n    this.state = elem.classList.contains('is-true')\n    this.iconElem = elem.querySelector('.material-icons')\n    // A one-way toggle, e.g. a ping: once it is on there is no turning it off.\n    this.once = typeof toggleOnce === 'string'\n    this.reload = typeof reload === 'string'\n    this.statusElem = elem.parentElement?.querySelector('.status') ?? null\n    this.updateTarget = updateTarget\n    this.setState(elem.classList.contains('is-true'))\n\n    const attribute = toggleAttr || 'state'\n    const offApi = toggleOffApi || toggleApi!\n\n    elem.addEventListener('click', async (ev) => {\n      ev.preventDefault()\n      if (this.once && this.state) return\n      const { method, url } = interpretApi(this.state ? offApi : toggleApi!)\n      const { data } = await api.request({\n        data: { [attribute]: !this.state, ...dataset },\n        method,\n        url\n      })\n      this.handleResponse(data, attribute)\n      this.button.blur()\n    })\n  }\n\n  setState(state: boolean) {\n    this.state = state\n    if (this.once && state) this.button.setAttribute('aria-disabled', 'true')\n    if (state) {\n      if (this.icon.on && this.iconElem) this.iconElem.innerHTML = this.icon.on\n      this.button.classList.add('is-true')\n    } else {\n      if (this.icon.off && this.iconElem)\n        this.iconElem.innerHTML = this.icon.off\n      this.button.classList.remove('is-true')\n    }\n  }\n\n  setStatus(status?: string | number) {\n    if (typeof status === 'undefined' || !this.statusElem) return\n    this.statusElem.innerHTML = String(status)\n  }\n\n  handleResponse(response: any, attribute: string) {\n    if (this.reload) return location.reload()\n    // A 204 has no body, and an action that only flips the toggle need not\n    // echo it back, so fall back to the state we asked for.\n    this.setState(response?.[attribute] ?? !this.state)\n    // \"status\" is the counter or label beside the toggle, e.g. a like count.\n    this.setStatus(response?.status)\n    if (this.updateTarget) updateTarget(this.updateTarget)\n  }\n}\n", "import { isHTMLElement } from '../utils'\n\nfunction isAnchorElement(elem: EventTarget): elem is HTMLAnchorElement {\n  return 'href' in elem\n}\n\nexport default class Toggler {\n  static selector = '#takeover .menu-toggler'\n  static onlyInitial = true\n\n  constructor(elem: HTMLAnchorElement) {\n    elem.addEventListener('click', (ev) => {\n      ev.preventDefault()\n      const container = document.querySelector('#takeover')!\n      const button = ev.currentTarget\n      if (!button || !isAnchorElement(button)) return\n      const target = document.querySelector(button.getAttribute('href')!)\n      if (!target) return\n\n      if (button.classList.contains('active')) {\n        container.classList.remove('open')\n        button.classList.remove('active')\n        target.classList.remove('open')\n      } else {\n        container.classList.add('open')\n        container.querySelector('.open')?.classList.remove('open')\n        container\n          .querySelector('.menu-toggler.active')\n          ?.classList.remove('active')\n        target.classList.add('open')\n        button.classList.add('active')\n      }\n    })\n  }\n}\n", "import { contentInsertedEvent } from '../events'\nimport ApiDelete from './ApiDelete'\nimport ApiPost from './ApiPost'\nimport ContentFilterButton from './ContentFilterButton'\nimport ContextMenu from './ContextMenu'\nimport CropImage from './CropImage'\nimport DiscussionList from './DiscussionList'\nimport DiscussPostAs from './DiscussPostAs'\nimport FormSubmitOnce from './FormSubmitOnce'\nimport DynamicChoices from './DynamicChoices'\nimport DynamicForm from './DynamicForm'\nimport JsonForm from './JsonForm'\nimport Menu from './Menu'\nimport NewsList from './NewsList'\nimport PopupLink from './PopupLink'\nimport RadioButtons from './RadioButtons'\nimport ReadMarker from './ReadMarker'\nimport ResponsiveEmbed from './ResponsiveEmbed'\nimport SiteSearch from './SiteSearch'\nimport Tabs from './Tabs'\nimport ToggleButton from './ToggleButton'\nimport Toggler from './Toggler'\n\ndeclare class ClsComponent {\n  static selector: string\n  constructor(elem: HTMLElement)\n}\n\ndeclare class InitialOnlyComponent extends ClsComponent {\n  static onlyInitial: true\n}\n\ntype InstallComponent = { install(): void }\n\nconst allComponents: (typeof ClsComponent | InstallComponent)[] = [\n  ApiDelete,\n  ApiPost,\n  ContentFilterButton,\n  ContextMenu,\n  CropImage,\n  DiscussionList,\n  DiscussPostAs,\n  DynamicChoices,\n  DynamicForm,\n  FormSubmitOnce,\n  JsonForm,\n  Menu,\n  NewsList,\n  PopupLink,\n  RadioButtons,\n  ReadMarker,\n  ResponsiveEmbed,\n  SiteSearch,\n  Tabs,\n  ToggleButton,\n  Toggler\n]\n\nfunction isInstallComponent(\n  component: ClsComponent | InstallComponent\n): component is InstallComponent {\n  return 'install' in component\n}\n\nfunction isIntialOnlyComponent(\n  component: ClsComponent | InstallComponent\n): component is typeof InitialOnlyComponent {\n  return 'onlyInitial' in component\n}\n\nconst dynamicComponents = allComponents.filter(\n  (c) => !isInstallComponent(c) && !isIntialOnlyComponent(c)\n)\n\n// Function to create objects for elements that match selector,\nexport default function registerComponents(target?: HTMLElement) {\n  const components = target ? dynamicComponents : allComponents\n  for (const component of components) {\n    if (isInstallComponent(component)) component.install()\n    else {\n      for (const elem of (target ?? document).querySelectorAll<HTMLElement>(\n        component.selector\n      ))\n        new component(elem)\n    }\n  }\n}\n\n// Also dynamically inserted when content is inserted\ncontentInsertedEvent.on(registerComponents)\n", "import { isAxiosError } from 'axios'\nimport $ from 'jquery'\nimport * as events from './events'\nimport notifications from './notifications'\nimport defineChannel from './socket/defineChannel'\nimport { socket } from './socket'\nimport Popup from './Popup'\nimport { api } from './api'\nimport { beforeNextNavigate } from './navigation'\n\n// Must run before Bootstrap is imported: Bootstrap 3 throws unless it finds\n// jQuery on the global object at load time.\nObject.assign(globalThis, {\n  jQuery: $,\n  $,\n  notifications,\n  MP: {\n    api,\n    defineChannel,\n    events,\n    navigation: { beforeNextNavigate },\n    Popup,\n    socket,\n    isAxiosError\n  }\n})\n", "import { any } from 'itertools'\n\nimport { socket } from '.'\nimport { type IChannelsMessage, SocketState } from './types'\n\nfunction* count(): Generator<number, number> {\n  let n = 0\n  while (true) yield ++n\n}\n\nexport enum ErrorStatus {\n  NotFound = 404,\n  Timeout = 408\n}\n\ninterface ErrorMsg {\n  id: string\n}\n\nexport class SubscribeError extends Error {\n  public status: number\n\n  constructor(status: ErrorStatus, message?: string) {\n    super(message ?? ErrorStatus[status])\n    this.status = status\n  }\n}\n\nexport function isSubscribeError(err: unknown): err is SubscribeError {\n  return err instanceof SubscribeError\n}\n\ninterface IChannelOptions {\n  leaveDelay: number\n  subscribeTimeout: number\n}\n\nfunction isSubscribedMessage<P extends {}>(\n  msg: IChannelsMessage\n): msg is IChannelsMessage<P> {\n  return msg.action === 'subscribed'\n}\n\nfunction isSubscribeFailMessage(\n  msg: IChannelsMessage\n): msg is IChannelsMessage<ErrorMsg> {\n  return msg.action === 'subscribe_error'\n}\n\nconst DEFAULT_OPTIONS = {\n  leaveDelay: 5_000, // 5 secs\n  subscribeTimeout: 20_000 // 20 secs\n} as const\n\n/**\n * Create a subscribtion handler for a named channel.\n * @param name Namespace of this channel\n */\nexport default function defineChannel<\n  Payload extends { id: string } = { id: string }\n>(name: string, opts?: Partial<IChannelOptions>) {\n  const options = { ...DEFAULT_OPTIONS, ...opts }\n  const onSubscribedCallbacks = new Set<(payload: Payload) => void>()\n  // Map subscription id to channel id\n  const subscriptions = new Map<number, string>()\n  // Channels that are awaiting subscription\n  const subscribingIds = new Set<string>()\n  // Channels that have a successful subscription\n  const subscribedIds = new Set<string>()\n  const subscribedCallbacks = new Map<string, ((payload: Payload) => void)[]>()\n  const subscribeErrorCallbacks = new Map<string, (() => void)[]>()\n  const idGenerator = count()\n\n  /**\n   * Registers callback, setting callbacks Array when needed\n   */\n  function registerCallback<Fn extends Function>(\n    map: Map<string, Fn[]>,\n    id: string,\n    cb: Fn\n  ) {\n    if (!map.has(id)) map.set(id, [])\n    map.get(id)!.push(cb)\n  }\n\n  /**\n   * Forget the pending callbacks for a channel. Bookkeeping of what is\n   * subscribed lives outside them, so that it stays right for the\n   * subscriptions that a reconnect renews rather than a caller awaits.\n   */\n  function clearCallbacks(id: string) {\n    subscribeErrorCallbacks.delete(id)\n    subscribedCallbacks.delete(id)\n    subscribingIds.delete(id)\n  }\n\n  socket.registerTypeHandler(name, (msg) => {\n    if (isSubscribedMessage<Payload>(msg)) {\n      const callbacks = subscribedCallbacks.get(msg.payload.id) ?? []\n      clearCallbacks(msg.payload.id)\n      subscribedIds.add(msg.payload.id)\n      for (const cb of callbacks) cb(msg.payload)\n      for (const cb of onSubscribedCallbacks) cb(msg.payload)\n    }\n    if (isSubscribeFailMessage(msg)) {\n      const callbacks = subscribeErrorCallbacks.get(msg.payload.id) ?? []\n      clearCallbacks(msg.payload.id)\n      subscribedIds.delete(msg.payload.id)\n      for (const cb of callbacks) cb()\n    }\n  })\n\n  socket.onReadyStateChanged((readyState) => {\n    if (readyState !== SocketState.Open) {\n      // The server keeps no record of our subscriptions across a connection,\n      // and a subscribe that was in flight will never be answered. Dropping\n      // both lets the next open subscribe everything again from scratch.\n      subscribedIds.clear()\n      subscribingIds.clear()\n      return\n    }\n    const shouldSubscribeTo = new Set(subscriptions.values())\n    for (const id of shouldSubscribeTo) performSubscribe(id)\n  })\n\n  function send(action: string, payload: object) {\n    socket.send(`${name}.${action}`, payload)\n  }\n\n  /**\n   * Create a Promise that resolves when channel is properly subscribed or rejects on timeout.\n   */\n  function getSubscriptionPromise(id: string) {\n    return new Promise<void>((resolve, reject) => {\n      // If rejected, the promise will not resolve later, no matter what\n      const timeout = setTimeout(() => {\n        clearCallbacks(id)\n        reject(new SubscribeError(ErrorStatus.Timeout))\n      }, options.subscribeTimeout)\n      registerCallback(subscribedCallbacks, id, () => {\n        clearTimeout(timeout)\n        resolve()\n      })\n      registerCallback(subscribeErrorCallbacks, id, () => {\n        clearTimeout(timeout)\n        reject(new SubscribeError(ErrorStatus.NotFound))\n      })\n    })\n  }\n\n  /**\n   * Make sure channel is subscribed when there is a subscription.\n   * @returns true if subscription should be under way\n   */\n  function performSubscribe(id: string) {\n    // subscribing logic ensures that multiple subscribers can await the subscription\n    const isSubscribing = subscribingIds.has(id)\n    const isSubscribed = subscribedIds.has(id)\n    const shouldSubscribe = any(subscriptions.values(), (v) => v === id)\n    if (socket.isOpen) {\n      // A subscribe in flight counts as subscribed here, so that leaving\n      // before the server answered still sends the unsubscribe.\n      if (!shouldSubscribe && (isSubscribed || isSubscribing)) {\n        subscribedIds.delete(id)\n        subscribingIds.delete(id)\n        send('unsubscribe', { id })\n      }\n      if (shouldSubscribe && !isSubscribed && !isSubscribing) {\n        subscribingIds.add(id) // Hinders another subscription from triggering subscription message\n        send('subscribe', { id })\n      }\n    }\n    return shouldSubscribe && !isSubscribed\n  }\n\n  /**\n   * Subscribe to a channel. Caller must keep the leave() function in order to cancel subscription.\n   */\n  async function subscribe(id: string) {\n    const subscriptionId = idGenerator.next().value\n    subscriptions.set(subscriptionId, id)\n    if (performSubscribe(id)) await getSubscriptionPromise(id)\n    return {\n      leave() {\n        if (!subscriptions.has(subscriptionId))\n          throw new Error(`Subscription is already canceled`)\n        subscriptions.delete(subscriptionId)\n        setTimeout(() => performSubscribe(id), options.leaveDelay)\n      }\n    }\n  }\n\n  /**\n   * Listen for every successful subscription on this channel, the renewals\n   * made after a reconnect included.\n   * @returns dispose method - call to remove handler\n   */\n  function onSubscribe(cb: (payload: Payload) => void) {\n    onSubscribedCallbacks.add(cb)\n    return () => {\n      onSubscribedCallbacks.delete(cb)\n    }\n  }\n\n  return {\n    name,\n    onSubscribe,\n    send,\n    subscribe\n  }\n}\n", "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')", "import './django'\nimport './navigation'\nimport User from './User'\nimport registerComponents from './components'\n// './globals' publishes jQuery on the global object and must stay ahead of\n// 'bootstrap', which throws at load time if jQuery is not already there.\nimport './globals'\nimport 'bootstrap'\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  Object.assign(globalThis, { user: new User() })\n  registerComponents()\n})\n"],
  "mappings": "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",
  "names": ["require_jquery", "__commonJSMin", "exports", "module", "global", "factory", "w", "window", "noGlobal", "arr", "getProto", "slice", "flat", "array", "push", "indexOf", "class2type", "toString", "hasOwn", "fnToString", "ObjectFunctionString", "support", "isFunction", "obj", "isWindow", "document", "preservedScriptAttributes", "DOMEval", "code", "node", "doc", "i", "val", "script", "toType", "version", "jQuery", "selector", "context", "num", "elems", "ret", "callback", "elem", "_elem", "len", "j", "options", "name", "src", "copy", "copyIsArray", "clone", "target", "length", "deep", "msg", "proto", "Ctor", "isArrayLike", "results", "first", "second", "invert", "callbackInverse", "matches", "callbackExpect", "arg", "value", "_i", "type", "Sizzle", "Expr", "getText", "isXML", "tokenize", "compile", "select", "outermostContext", "sortInput", "hasDuplicate", "setDocument", "docElem", "documentIsHTML", "rbuggyQSA", "rbuggyMatches", "contains", "expando", "preferredDoc", "dirruns", "done", "classCache", "createCache", "tokenCache", "compilerCache", "nonnativeSelectorCache", "sortOrder", "a", "b", "pop", "pushNative", "list", "booleans", "whitespace", "identifier", "attributes", "pseudos", "rwhitespace", "rtrim", "rcomma", "rcombinators", "rdescend", "rpseudo", "ridentifier", "matchExpr", "rhtml", "rinputs", "rheader", "rnative", "rquickExpr", "rsibling", "runescape", "funescape", "escape", "nonHex", "high", "rcssescape", "fcssescape", "ch", "asCodePoint", "unloadHandler", "inDisabledFieldset", "addCombinator", "els", "seed", "m", "nid", "match", "groups", "newSelector", "newContext", "nodeType", "testContext", "toSelector", "keys", "cache", "key", "markFunction", "fn", "assert", "el", "addHandle", "attrs", "handler", "siblingCheck", "cur", "diff", "createInputPseudo", "createButtonPseudo", "createDisabledPseudo", "disabled", "createPositionalPseudo", "argument", "matchIndexes", "namespace", "hasCompare", "subWindow", "id", "attrId", "tag", "tmp", "className", "input", "adown", "bup", "compare", "aup", "ap", "bp", "expr", "elements", "sel", "duplicates", "excess", "unquoted", "nodeNameSelector", "nodeName", "pattern", "operator", "check", "result", "what", "_argument", "last", "simple", "forward", "ofType", "_context", "xml", "uniqueCache", "outerCache", "nodeIndex", "start", "dir", "parent", "useCache", "pseudo", "args", "idx", "matched", "matcher", "unmatched", "text", "lang", "elemLang", "hash", "attr", "_matchIndexes", "setFilters", "parseOnly", "tokens", "soFar", "preFilters", "cached", "combinator", "base", "skip", "checkNonElements", "doneName", "oldCache", "newCache", "elementMatcher", "matchers", "multipleContexts", "contexts", "condense", "map", "filter", "newUnmatched", "mapped", "setMatcher", "preFilter", "postFilter", "postFinder", "postSelector", "temp", "preMap", "postMap", "preexisting", "matcherIn", "matcherOut", "matcherFromTokens", "checkContext", "leadingRelative", "implicitRelative", "matchContext", "matchAnyContext", "matcherFromGroupMatchers", "elementMatchers", "setMatchers", "bySet", "byElement", "superMatcher", "outermost", "matchedCount", "setMatched", "contextBackup", "dirrunsUnique", "token", "find", "compiled", "_name", "until", "truncate", "siblings", "rneedsContext", "rsingleTag", "winnow", "qualifier", "not", "self", "rootjQuery", "init", "root", "rparentsprev", "guaranteedUnique", "targets", "l", "selectors", "sibling", "rnothtmlwhite", "createOptions", "object", "_", "flag", "firing", "memory", "fired", "locked", "queue", "firingIndex", "fire", "add", "index", "Identity", "v", "Thrower", "ex", "adoptValue", "resolve", "reject", "noValue", "method", "func", "tuples", "state", "promise", "deferred", "fns", "newDefer", "tuple", "returned", "onFulfilled", "onRejected", "onProgress", "maxDepth", "depth", "special", "that", "mightThrow", "then", "process", "e", "stateString", "singleValue", "remaining", "resolveContexts", "resolveValues", "master", "updateFunc", "rerrorNames", "error", "stack", "readyList", "wait", "completed", "access", "chainable", "emptyGet", "raw", "bulk", "_key", "rmsPrefix", "rdashAlpha", "fcamelCase", "_all", "letter", "camelCase", "string", "acceptData", "owner", "Data", "data", "prop", "dataPriv", "dataUser", "rbrace", "rmultiDash", "getData", "dataAttr", "startLength", "hooks", "next", "setter", "count", "defer", "pnum", "rcssNum", "cssExpand", "documentElement", "isAttached", "composed", "isHiddenWithinTree", "adjustCSS", "valueParts", "tween", "adjusted", "scale", "maxIterations", "currentValue", "initial", "unit", "initialInUnit", "defaultDisplayMap", "getDefaultDisplay", "display", "showHide", "show", "values", "rcheckableType", "rtagName", "rscriptType", "fragment", "div", "wrapMap", "getAll", "setGlobalEval", "refElements", "buildFragment", "scripts", "selection", "ignored", "wrap", "attached", "nodes", "rkeyEvent", "rmouseEvent", "rtypenamespace", "returnTrue", "returnFalse", "expectSync", "safeActiveElement", "on", "types", "one", "origFn", "event", "handleObjIn", "eventHandle", "events", "t", "handleObj", "handlers", "namespaces", "origType", "elemData", "mappedTypes", "origCount", "nativeEvent", "handlerQueue", "matchedHandlers", "matchedSelectors", "delegateCount", "hook", "originalEvent", "leverageNative", "notAsync", "saved", "handle", "props", "button", "delegateType", "orig", "fix", "related", "rnoInnerhtml", "rchecked", "rcleanScript", "manipulationTarget", "content", "disableScript", "restoreScript", "cloneCopyEvent", "dest", "pdataOld", "udataOld", "udataCur", "fixInput", "domManip", "collection", "hasScripts", "iNoClone", "valueIsFunction", "remove", "keepData", "html", "dataAndEvents", "deepDataAndEvents", "srcElements", "destElements", "inPage", "original", "insert", "rnumnonpx", "getStyles", "view", "swap", "old", "rboxStyle", "computeStyleTests", "container", "divStyle", "pixelPositionVal", "reliableMarginLeftVal", "roundPixelMeasures", "pixelBoxStylesVal", "boxSizingReliableVal", "scrollboxSizeVal", "measure", "reliableTrDimensionsVal", "table", "tr", "trChild", "trStyle", "curCSS", "computed", "width", "minWidth", "maxWidth", "style", "addGetHookIf", "conditionFn", "hookFn", "cssPrefixes", "emptyStyle", "vendorProps", "vendorPropName", "capName", "finalPropName", "final", "rdisplayswap", "rcustomProp", "cssShow", "cssNormalTransform", "setPositiveNumber", "subtract", "boxModelAdjustment", "dimension", "box", "isBorderBox", "styles", "computedVal", "extra", "delta", "getWidthOrHeight", "boxSizingNeeded", "valueIsBorderBox", "offsetProp", "origName", "isCustomProp", "scrollboxSizeBuggy", "prefix", "suffix", "expanded", "parts", "Tween", "end", "easing", "percent", "eased", "p", "fxNow", "inProgress", "rfxtypes", "rrun", "schedule", "createFxNow", "genFx", "includeWidth", "which", "createTween", "animation", "Animation", "defaultPrefilter", "opts", "toggle", "oldfire", "propTween", "restoreDisplay", "isBox", "anim", "hidden", "dataShow", "propFilter", "specialEasing", "properties", "stopped", "tick", "currentTime", "gotoEnd", "prepend", "speed", "opt", "to", "empty", "optall", "doAnimation", "clearQueue", "stopQueue", "stop", "dequeue", "timers", "cssFn", "timer", "time", "timeout", "boolHook", "attrHandle", "nType", "attrNames", "getter", "lowercaseName", "rfocusable", "rclickable", "tabindex", "stripAndCollapse", "getClass", "classesToArray", "classes", "curValue", "clazz", "finalValue", "stateVal", "isValidValue", "classNames", "rreturn", "option", "max", "optionSet", "rfocusMorph", "stopPropagationCallback", "onlyHandlers", "bubbleType", "ontype", "lastElement", "eventPath", "attaches", "location", "nonce", "rquery", "rbracket", "rCRLF", "rsubmitterTypes", "rsubmittable", "buildParams", "traditional", "s", "valueOrFunction", "r20", "rhash", "rantiCache", "rheaders", "rlocalProtocol", "rnoContent", "rprotocol", "prefilters", "transports", "allTypes", "originAnchor", "addToPrefiltersOrTransports", "structure", "dataTypeExpression", "dataType", "dataTypes", "inspectPrefiltersOrTransports", "originalOptions", "jqXHR", "inspected", "seekingTransport", "inspect", "selected", "prefilterOrFactory", "dataTypeOrTransport", "ajaxExtend", "flatOptions", "ajaxHandleResponses", "responses", "ct", "finalDataType", "firstDataType", "contents", "ajaxConvert", "response", "isSuccess", "conv2", "current", "conv", "prev", "converters", "settings", "url", "transport", "cacheURL", "responseHeadersString", "responseHeaders", "timeoutTimer", "urlAnchor", "fireGlobals", "uncached", "callbackContext", "globalEventContext", "completeDeferred", "statusCode", "requestHeaders", "requestHeadersNames", "strAbort", "statusText", "finalText", "status", "nativeStatusText", "headers", "success", "modified", "htmlIsFunction", "xhrSuccessStatus", "xhrSupported", "errorCallback", "complete", "xhr", "evt", "oldCallbacks", "rjsonp", "originalSettings", "callbackName", "overwritten", "responseContainer", "jsonProp", "body", "keepScripts", "parsed", "params", "off", "responseText", "curPosition", "curLeft", "curCSSTop", "curTop", "curOffset", "curCSSLeft", "calculatePosition", "position", "curElem", "rect", "win", "offsetParent", "offset", "parentOffset", "top", "defaultExtra", "funcName", "margin", "fnOver", "fnOut", "proxy", "hold", "_jQuery", "_$", "require_transition", "__commonJSMin", "$", "transitionEnd", "el", "transEndEventNames", "name", "duration", "called", "$el", "callback", "e", "require_alert", "__commonJSMin", "$", "dismiss", "Alert", "el", "e", "$this", "selector", "$parent", "removeElement", "Plugin", "option", "data", "old", "require_button", "__commonJSMin", "$", "Button", "element", "options", "state", "d", "$el", "val", "data", "changed", "$parent", "$input", "Plugin", "option", "$this", "old", "e", "$btn", "require_carousel", "__commonJSMin", "$", "Carousel", "element", "options", "e", "item", "direction", "active", "activeIndex", "willWrap", "delta", "itemIndex", "pos", "that", "type", "next", "$active", "$next", "isCycling", "relatedTarget", "slideEvent", "$nextIndicator", "slidEvent", "Plugin", "option", "$this", "data", "action", "old", "clickHandler", "href", "target", "$target", "slideIndex", "$carousel", "require_collapse", "__commonJSMin", "$", "Collapse", "element", "options", "hasWidth", "activesData", "actives", "startEvent", "Plugin", "dimension", "complete", "scrollSize", "i", "$element", "getTargetFromTrigger", "$trigger", "isOpen", "href", "target", "option", "$this", "data", "old", "e", "$target", "require_dropdown", "__commonJSMin", "$", "backdrop", "toggle", "Dropdown", "element", "getParent", "$this", "selector", "$parent", "clearMenus", "e", "relatedTarget", "isActive", "desc", "$items", "index", "Plugin", "option", "data", "old", "require_modal", "__commonJSMin", "$", "Modal", "element", "options", "_relatedTarget", "that", "e", "transition", "callback", "animate", "doAnimate", "callbackRemove", "modalIsOverflowing", "fullWindowWidth", "documentElementRect", "bodyPad", "scrollbarWidth", "index", "actualPadding", "calculatedPadding", "padding", "scrollDiv", "Plugin", "option", "$this", "data", "old", "href", "target", "$target", "showEvent", "require_tooltip", "__commonJSMin", "$", "DISALLOWED_ATTRIBUTES", "uriAttrs", "ARIA_ATTRIBUTE_PATTERN", "DefaultWhitelist", "SAFE_URL_PATTERN", "DATA_URL_PATTERN", "allowedAttribute", "attr", "allowedAttributeList", "attrName", "regExp", "index", "value", "i", "l", "sanitizeHtml", "unsafeHtml", "whiteList", "sanitizeFn", "createdDocument", "whitelistKeys", "el", "elements", "len", "elName", "attributeList", "whitelistedAttributes", "j", "len2", "Tooltip", "element", "options", "type", "triggers", "trigger", "eventIn", "eventOut", "dataAttributes", "dataAttr", "defaults", "key", "obj", "self", "e", "inDom", "that", "$tip", "tipId", "placement", "autoToken", "autoPlace", "pos", "actualWidth", "actualHeight", "orgPlacement", "viewportDim", "calculatedOffset", "complete", "prevHoverState", "offset", "width", "height", "marginTop", "marginLeft", "props", "delta", "isVertical", "arrowDelta", "arrowOffsetPosition", "dimension", "title", "callback", "$e", "$element", "isBody", "elRect", "isSvg", "elOffset", "scroll", "outerDims", "viewportPadding", "viewportDimensions", "topEdgeOffset", "bottomEdgeOffset", "leftEdgeOffset", "rightEdgeOffset", "o", "prefix", "Plugin", "option", "$this", "data", "old", "require_popover", "__commonJSMin", "$", "Popover", "element", "options", "$tip", "title", "content", "typeContent", "$e", "o", "Plugin", "option", "$this", "data", "old", "require_scrollspy", "__commonJSMin", "$", "ScrollSpy", "element", "options", "that", "offsetMethod", "offsetBase", "$el", "href", "$href", "a", "b", "scrollTop", "scrollHeight", "maxScroll", "offsets", "targets", "activeTarget", "i", "target", "selector", "active", "Plugin", "option", "$this", "data", "old", "$spy", "require_tab", "__commonJSMin", "$", "Tab", "element", "$this", "$ul", "selector", "$previous", "hideEvent", "showEvent", "$target", "container", "callback", "$active", "transition", "next", "Plugin", "option", "data", "old", "clickHandler", "e", "require_affix", "__commonJSMin", "$", "Affix", "element", "options", "target", "scrollHeight", "height", "offsetTop", "offsetBottom", "scrollTop", "position", "targetHeight", "initializing", "colliderTop", "colliderHeight", "offset", "affix", "affixType", "e", "Plugin", "option", "$this", "data", "old", "$spy", "events_exports", "__export", "contentFilterChangedEvent", "contentInsertedEvent", "goToPageEvent", "intervalUpdateEvent", "namespaceEvent", "pageUpdateEvent", "popupCloseEvent", "userLoadedEvent", "EventBus", "listeners", "listener", "value", "getCookie", "name", "cookieValue", "cookies", "i", "cookie", "isMobile", "getNamespace", "source", "_a", "elem", "getFormData", "form", "data", "key", "value", "htmlStringToDom", "html", "dom", "isInternalLink", "href", "getDocTitle", "_b", "isHTMLElement", "import_jquery", "csrftoken", "getCookie", "csrfSafeMethod", "method", "sameOrigin", "url", "host", "protocol", "srOrigin", "origin", "$", "xhr", "settings", "contentInsertedEvent", "elem", "STRIP_EDITOR_IDS", "stripStyle", "element", "editorCallback", "editor", "data", "id", "import_jquery", "keyToCmp", "keyFn", "a", "b", "ka", "kb", "identityPredicate", "x", "primitiveIdentity", "x", "some", "iterable", "predicate", "identityPredicate", "index", "item", "any", "some", "sorted", "iterable", "keyFn", "primitiveIdentity", "reverse", "result", "keyToCmp", "global", "globalThis", "wrap", "node", "trustedTypes", "policy", "createPolicy", "createHTML", "s", "boundAttributeSuffix", "marker", "Math", "random", "toFixed", "slice", "markerMatch", "nodeMarker", "d", "document", "createMarker", "createComment", "isPrimitive", "value", "isArray", "Array", "isIterable", "Symbol", "iterator", "SPACE_CHAR", "textEndRegex", "commentEndRegex", "comment2EndRegex", "tagEndRegex", "RegExp", "singleQuoteAttrEndRegex", "doubleQuoteAttrEndRegex", "rawTextElement", "tag", "type", "strings", "values", "_$litType$", "html", "svg", "mathml", "noChange", "for", "nothing", "templateCache", "WeakMap", "walker", "createTreeWalker", "trustFromTemplateString", "tsa", "stringFromTSA", "hasOwnProperty", "Error", "getTemplateHtml", "l", "length", "attrNames", "rawTextEndRegex", "regex", "i", "attrName", "match", "attrNameEndIndex", "lastIndex", "exec", "test", "end", "startsWith", "push", "Template", "constructor", "options", "this", "parts", "nodeIndex", "attrNameIndex", "partCount", "el", "createElement", "currentNode", "content", "wrapper", "firstChild", "replaceWith", "childNodes", "nextNode", "nodeType", "hasAttributes", "name", "getAttributeNames", "endsWith", "realName", "statics", "getAttribute", "split", "m", "index", "ctor", "PropertyPart", "BooleanAttributePart", "EventPart", "AttributePart", "removeAttribute", "tagName", "textContent", "emptyScript", "append", "data", "indexOf", "_options", "innerHTML", "resolveDirective", "part", "parent", "attributeIndex", "currentDirective", "__directives", "__directive", "nextDirectiveConstructor", "_$initialize", "_$resolve", "TemplateInstance", "template", "_$parts", "_$disconnectableChildren", "_$template", "_$parent", "parentNode", "_$isConnected", "fragment", "creationScope", "importNode", "partIndex", "templatePart", "ChildPart", "nextSibling", "ElementPart", "_$setValue", "__isConnected", "startNode", "endNode", "_$committedValue", "_$startNode", "_$endNode", "isConnected", "directiveParent", "_$clear", "_commitText", "_commitTemplateResult", "_commitNode", "_commitIterable", "insertBefore", "_insert", "createTextNode", "result", "_$getTemplate", "h", "_update", "instance", "_clone", "get", "set", "itemParts", "itemPart", "item", "start", "from", "_$notifyConnectionChanged", "n", "remove", "element", "fill", "String", "valueIndex", "noCommit", "change", "v", "_commitValue", "setAttribute", "toggleAttribute", "super", "newListener", "oldListener", "shouldRemoveListener", "capture", "once", "passive", "shouldAddListener", "removeEventListener", "addEventListener", "event", "call", "host", "handleEvent", "_$LH", "_boundAttributeSuffix", "_marker", "_markerMatch", "_HTML_RESULT", "_getTemplateHtml", "_TemplateInstance", "_isIterable", "_resolveDirective", "_ChildPart", "_AttributePart", "_BooleanAttributePart", "_EventPart", "_PropertyPart", "_ElementPart", "polyfillSupport", "litHtmlPolyfillSupport", "litHtmlVersions", "render", "container", "partOwnerNode", "renderBefore", "PartType", "ATTRIBUTE", "CHILD", "PROPERTY", "BOOLEAN_ATTRIBUTE", "EVENT", "ELEMENT", "directive", "c", "values", "_$litDirective$", "Directive", "_partInfo", "_$isConnected", "this", "_$parent", "part", "parent", "attributeIndex", "__part", "__attributeIndex", "props", "update", "_part", "render", "UnsafeHTMLDirective", "Directive", "partInfo", "super", "this", "_value", "nothing", "type", "PartType", "CHILD", "Error", "constructor", "directiveName", "value", "_templateResult", "noChange", "strings", "raw", "_$litType$", "resultType", "values", "unsafeHTML", "directive", "SubscribeButton", "elem", "notifications_default", "active", "bind", "fn", "thisArg", "toString", "getPrototypeOf", "iterator", "toStringTag", "hasOwnProperty", "obj", "prop", "isUnsafeObjectKey", "isPrototypeBoundary", "prototype", "source", "isSafeAndFullyMutable", "props", "descriptor", "hasOwnInPrototypeChain", "thing", "seen", "getSafeProp", "toSafeFlatObject", "sourcePrototype", "result", "merged", "current", "kindOf", "cache", "str", "kindOfTest", "type", "typeOfTest", "isArray", "isUndefined", "isBuffer", "val", "isFunction", "isArrayBuffer", "isArrayBufferView", "isString", "isNumber", "isObject", "isBoolean", "isPlainObject", "isEmptyObject", "isDate", "isFile", "isReactNativeBlob", "value", "isReactNative", "formData", "isBlob", "isFileList", "isSet", "isStream", "getGlobal", "G", "FormDataCtor", "isFormData", "proto", "kind", "isURLSearchParams", "isReadableStream", "isRequest", "isResponse", "isHeaders", "trim", "forEach", "fn", "allOwnKeys", "i", "l", "keys", "len", "key", "findKey", "_key", "_global", "isContextDefined", "context", "merge", "objs", "caseless", "skipUndefined", "assignValue", "targetKey", "existing", "symbols", "j", "symbol", "propertyIsEnumerable", "extend", "a", "b", "thisArg", "bind", "stripBOM", "content", "inherits", "constructor", "superConstructor", "descriptors", "toFlatObject", "sourceObj", "destObj", "filter", "propFilter", "endsWith", "searchString", "position", "lastIndex", "toArray", "arr", "isTypedArray", "TypedArray", "forEachEntry", "_iterator", "pair", "matchAll", "regExp", "matches", "isHTMLForm", "toCamelCase", "m", "p1", "p2", "isRegExp", "reduceDescriptors", "reducer", "reducedDescriptors", "name", "ret", "freezeMethods", "toObjectSet", "arrayOrString", "delimiter", "define", "noop", "toFiniteNumber", "defaultValue", "isSpecCompliantForm", "toJSONObject", "visited", "visit", "target", "reducedValue", "isAsyncFn", "isThenable", "_setImmediate", "setImmediateSupported", "postMessageSupported", "token", "callbacks", "data", "cb", "asap", "isIterable", "isSafeIterable", "utils_default", "ignoreDuplicateOf", "utils_default", "parseHeaders_default", "rawHeaders", "parsed", "key", "val", "i", "line", "hasKey", "trimSPorHTAB", "str", "start", "end", "code", "INVALID_UNICODE_HEADER_VALUE_CHARS", "INVALID_BYTE_STRING_HEADER_VALUE_CHARS", "sanitizeValue", "value", "invalidChars", "utils_default", "item", "sanitizeHeaderValue", "sanitizeByteStringHeaderValue", "toByteStringHeaderObject", "headers", "byteStringHeaders", "header", "$internals", "normalizeHeader", "header", "normalizeValue", "value", "utils_default", "sanitizeHeaderValue", "parseTokens", "str", "tokens", "tokensRE", "match", "parameterNameRE", "trimOWS", "start", "end", "code", "decodeQuotedString", "last", "decoded", "i", "parseParameters", "parameters", "quoted", "escaped", "parseParameter", "part", "equals", "name", "normalizedName", "parameterValue", "isValidHeaderName", "matchHeaderValue", "context", "filter", "isHeaderNameFilter", "formatHeader", "w", "char", "buildAccessors", "obj", "accessorName", "methodName", "arg1", "arg2", "arg3", "AxiosHeaders", "headers", "valueOrRewrite", "rewrite", "self", "setHeader", "_value", "_header", "_rewrite", "lHeader", "key", "setHeaders", "parseHeaders_default", "dest", "entry", "parser", "matcher", "deleted", "deleteHeader", "keys", "format", "normalized", "targets", "asStrings", "thing", "first", "computed", "target", "accessors", "prototype", "defineAccessor", "mapped", "headerValue", "AxiosHeaders_default", "REDACTED", "hasOwnOrPrototypeToJSON", "source", "utils_default", "prototype", "redactConfig", "config", "redactKeys", "lowerKeys", "k", "seen", "visit", "AxiosHeaders_default", "result", "v", "i", "reducedValue", "key", "value", "stringifySafely", "aggregateErrorMessage", "error", "entry", "AxiosError", "_AxiosError", "code", "request", "response", "customProps", "message", "axiosError", "serializedConfig", "AxiosError_default", "null_default", "DEFAULT_FORM_DATA_MAX_DEPTH", "isVisitable", "thing", "utils_default", "removeBrackets", "key", "renderKey", "path", "dots", "token", "i", "isFlatArray", "arr", "predicates", "prop", "toFormData", "obj", "formData", "options", "null_default", "option", "name", "fallback", "value", "metaTokens", "visitor", "defaultVisitor", "indexes", "_Blob", "maxDepth", "useBlob", "stack", "convertValue", "AxiosError_default", "throwIfMaxDepthExceeded", "depth", "stringifyWithDepthLimit", "ancestors", "_key", "currentValue", "el", "index", "exposedHelpers", "build", "toFormData_default", "encode", "str", "charMap", "match", "AxiosURLSearchParams", "params", "options", "toFormData_default", "prototype", "name", "value", "encoder", "_encode", "pair", "AxiosURLSearchParams_default", "encode", "val", "buildURL", "url", "params", "options", "_options", "utils_default", "_encode", "serializeFn", "serializedParams", "AxiosURLSearchParams_default", "hashmarkIndex", "$internals", "countHandlers", "handlers", "trimHandlers", "syncHandlerEntries", "manager", "internals", "length", "entry", "id", "InterceptorManager", "fulfilled", "rejected", "options", "handler", "fn", "utils_default", "h", "InterceptorManager_default", "transitional_default", "URLSearchParams_default", "AxiosURLSearchParams_default", "FormData_default", "Blob_default", "browser_default", "URLSearchParams_default", "FormData_default", "Blob_default", "utils_exports", "__export", "hasBrowserEnv", "hasStandardBrowserEnv", "hasStandardBrowserWebWorkerEnv", "_navigator", "origin", "platform_default", "utils_exports", "browser_default", "toURLEncodedForm", "data", "options", "toFormData_default", "platform_default", "value", "key", "path", "helpers", "utils_default", "MAX_DEPTH", "DEFAULT_FORM_DATA_MAX_DEPTH", "throwIfDepthExceeded", "index", "AxiosError_default", "parsePropPath", "name", "path", "pattern", "match", "arrayToObject", "arr", "obj", "keys", "i", "len", "key", "formDataToJSON", "formData", "buildPath", "value", "target", "isNumericKey", "isLast", "utils_default", "formDataToJSON_default", "methodList", "methodList_default", "own", "obj", "key", "utils_default", "stringifySafely", "rawValue", "parser", "encoder", "e", "defaults", "transitional_default", "data", "headers", "contentType", "hasJSONContentType", "isObjectPayload", "formDataToJSON_default", "isFileList", "formSerializer", "toURLEncodedForm", "env", "_FormData", "toFormData_default", "transitional", "forcedJSONParsing", "responseType", "JSONRequested", "strictJSONParsing", "AxiosError_default", "platform_default", "status", "methodList_default", "method", "defaults_default", "transformData", "fns", "response", "config", "defaults_default", "context", "headers", "AxiosHeaders_default", "data", "utils_default", "fn", "isCancel", "value", "CanceledError", "AxiosError_default", "message", "config", "request", "CanceledError_default", "settle", "resolve", "reject", "response", "validateStatus", "AxiosError_default", "urlParserControlCharacters", "normalizeURLForProtocolCheck", "url", "start", "parseProtocol", "url", "match", "speedometer", "samplesCount", "min", "bytes", "timestamps", "head", "tail", "firstSampleTS", "chunkLength", "now", "startedAt", "i", "bytesCount", "passed", "speedometer_default", "throttle", "fn", "freq", "timestamp", "threshold", "lastArgs", "timer", "invoke", "args", "now", "passed", "throttle_default", "progressEventReducer", "listener", "isDownloadStream", "freq", "bytesNotified", "_speedometer", "speedometer_default", "throttle_default", "e", "utils_default", "rawLoaded", "total", "loaded", "progressBytes", "rate", "data", "progressEventDecorator", "throttled", "lengthComputable", "asyncDecorator", "fn", "scheduler", "args", "isURLSameOrigin_default", "platform_default", "origin", "isMSIE", "url", "cookies_default", "platform_default", "name", "value", "expires", "path", "domain", "secure", "sameSite", "cookie", "utils_default", "cookies", "i", "eq", "isAbsoluteURL", "url", "combineURLs", "baseURL", "relativeURL", "end", "malformedHttpProtocol", "redactFragment", "fragment", "match", "separator", "parameterName", "REDACTED", "redactSensitiveURLParts", "url", "redactedURL", "fragmentIndex", "redactedURLWithoutFragment", "assertValidHttpProtocolURL", "config", "normalizedURL", "normalizeURLForProtocolCheck", "AxiosError_default", "buildFullPath", "baseURL", "requestedURL", "allowAbsoluteUrls", "isRelativeUrl", "isAbsoluteURL", "combineURLs", "headersToObject", "thing", "AxiosHeaders_default", "ownEnumerableKeys", "symbol", "mergeConfig", "config1", "config2", "config", "getMergedValue", "target", "source", "prop", "caseless", "utils_default", "mergeDeepProperties", "a", "b", "valueFromConfig2", "defaultToConfig2", "getMergedTransitionalOption", "transitional2", "transitional1", "mergeDirectKeys", "mergeMap", "merge", "configValue", "FORM_DATA_CONTENT_HEADERS", "setFormDataHeaders", "headers", "formHeaders", "policy", "key", "val", "encodeUTF8", "str", "_", "hex", "resolveConfig", "config", "newConfig", "mergeConfig", "own", "key", "utils_default", "data", "withXSRFToken", "xsrfHeaderName", "xsrfCookieName", "headers", "auth", "baseURL", "allowAbsoluteUrls", "url", "AxiosHeaders_default", "buildURL", "buildFullPath", "username", "password", "e", "AxiosError_default", "getHeaders", "platform_default", "setFormDataHeaders", "isURLSameOrigin_default", "xsrfValue", "cookies_default", "resolveConfig_default", "isXHRAdapterSupported", "xhr_default", "config", "resolve", "reject", "_config", "resolveConfig_default", "requestData", "requestHeaders", "AxiosHeaders_default", "responseType", "onUploadProgress", "onDownloadProgress", "onCanceled", "uploadThrottled", "downloadThrottled", "flushUpload", "flushDownload", "flushDownloadWithEvent", "done", "request", "onloadend", "event", "parseProtocol", "normalizeURLForProtocolCheck", "platform_default", "AxiosError_default", "err", "responseHeaders", "response", "settle", "value", "msg", "timeoutErrorMessage", "transitional", "transitional_default", "utils_default", "toByteStringHeaderObject", "val", "key", "progressEventReducer", "cancel", "CanceledError_default", "protocol", "composeSignals", "signals", "timeout", "controller", "aborted", "onabort", "reason", "unsubscribe", "err", "AxiosError_default", "CanceledError_default", "timer", "signal", "utils_default", "composeSignals_default", "streamChunk", "chunk", "chunkSize", "len", "pos", "end", "readBytes", "iterable", "readStream", "stream", "reader", "done", "value", "trackStream", "onProgress", "onFinish", "iterator", "bytes", "_onFinish", "e", "controller", "loadedBytes", "err", "reason", "isHexDigit", "charCode", "isPercentEncodedByte", "str", "i", "len", "hexValue", "isBase64Char", "isBase64Whitespace", "base64Bytes", "significant", "groups", "remainder", "estimateBase64BufferAllocation", "body", "padding", "estimatePercentDecodedBase64Bytes", "invalid", "code", "estimateDataURLBytes", "url", "estimateBase64", "comma", "meta", "bytes", "c", "next", "estimateDataURLDecodedBytes", "fragmentIndex", "VERSION", "DEFAULT_CHUNK_SIZE", "DEFAULT_REQUEST_OPTIONS", "isFunction", "utils_default", "encodeUTF8", "str", "_", "hex", "decodeURIComponentSafe", "value", "test", "fn", "args", "maybeWithAuthCredentials", "url", "protocolIndex", "urlToCheck", "factory", "env", "globalObject", "ReadableStream", "TextEncoder", "envFetch", "Request", "Response", "isFetchSupported", "isRequestSupported", "isResponseSupported", "isReadableStreamSupported", "encodeText", "encoder", "supportsRequestStream", "duplexAccessed", "request", "platform_default", "hasContentType", "supportsResponseStream", "resolvers", "res", "type", "config", "method", "AxiosError_default", "getBodyLength", "body", "resolveBodyLength", "headers", "length", "data", "signal", "cancelToken", "timeout", "onDownloadProgress", "onUploadProgress", "responseType", "withCredentials", "fetchOptions", "maxContentLength", "maxBodyLength", "maxRedirects", "resolveConfig_default", "hasMaxContentLength", "hasMaxBodyLength", "own", "key", "_fetch", "composedSignal", "composeSignals_default", "unsubscribe", "requestContentLength", "pendingBodyError", "maxBodyLengthError", "auth", "configAuth", "username", "password", "parsedURL", "urlUsername", "urlPassword", "estimateDataURLDecodedBytes", "outboundLength", "mustEnforceStreamBody", "trackRequestStream", "stream", "onProgress", "flush", "trackStream", "loadedBytes", "_request", "contentTypeHeader", "progressEventDecorator", "progressEventReducer", "asyncDecorator", "isCredentialsSupported", "contentType", "VERSION", "safeFetchOptions", "resolvedOptions", "toByteStringHeaderObject", "response", "responseHeaders", "AxiosHeaders_default", "declaredLength", "isStreamResponse", "options", "prop", "responseContentLength", "bytesRead", "onChunkProgress", "responseData", "materializedSize", "resolve", "reject", "settle", "err", "canceledError", "networkError", "seedCache", "getFetch", "fetch", "seeds", "len", "i", "seed", "target", "map", "adapter", "knownAdapters", "null_default", "xhr_default", "getFetch", "utils_default", "fn", "value", "renderReason", "reason", "isResolvedHandle", "adapter", "getAdapter", "adapters", "config", "length", "nameOrAdapter", "rejectedReasons", "i", "id", "AxiosError_default", "reasons", "state", "s", "adapters_default", "throwIfCancellationRequested", "config", "CanceledError_default", "dispatchRequest", "_config", "utils_default", "AxiosHeaders_default", "transformData", "adapters_default", "defaults_default", "response", "reason", "isCancel", "validators", "type", "i", "thing", "deprecatedWarnings", "validator", "version", "message", "formatMessage", "opt", "desc", "VERSION", "value", "opts", "AxiosError_default", "correctSpelling", "assertOptions", "options", "schema", "allowUnknown", "keys", "result", "validator_default", "validators", "validator_default", "Axios", "instanceConfig", "InterceptorManager_default", "configOrUrl", "config", "err", "dummy", "dummyStack", "stack", "firstNewlineIndex", "secondNewlineIndex", "stackWithoutTwoTopLines", "mergeConfig", "transitional", "paramsSerializer", "headers", "utils_default", "contextHeaders", "methodList_default", "method", "AxiosHeaders_default", "requestInterceptorChain", "synchronousRequestInterceptors", "interceptor", "transitional_default", "responseInterceptorChain", "promise", "i", "len", "chain", "dispatchRequest", "newConfig", "onFulfilled", "onRejected", "error", "rejectedResult", "rejectedError", "fullPath", "buildFullPath", "buildURL", "url", "generateHTTPMethod", "isForm", "data", "Axios_default", "CancelToken", "_CancelToken", "executor", "resolvePromise", "resolve", "token", "cancel", "i", "onfulfilled", "_resolve", "promise", "message", "config", "request", "CanceledError_default", "listener", "index", "controller", "abort", "err", "c", "CancelToken_default", "spread", "callback", "arr", "isAxiosError", "payload", "utils_default", "HttpStatusCode", "key", "value", "HttpStatusCode_default", "createInstance", "defaultConfig", "context", "Axios_default", "instance", "bind", "utils_default", "instanceConfig", "mergeConfig", "axios", "defaults_default", "CanceledError_default", "CancelToken_default", "isCancel", "VERSION", "toFormData_default", "AxiosError_default", "promises", "spread", "isAxiosError", "AxiosHeaders_default", "thing", "formDataToJSON_default", "adapters_default", "HttpStatusCode_default", "axios_default", "Axios", "AxiosError", "CanceledError", "isCancel", "CancelToken", "VERSION", "all", "Cancel", "isAxiosError", "spread", "toFormData", "AxiosHeaders", "HttpStatusCode", "formToJSON", "getAdapter", "mergeConfig", "create", "axios_default", "api", "axios_default", "env", "fetchEnvironment", "data", "api", "Socket", "url", "opts", "_a", "handler", "name", "handlers", "event", "msg", "type", "action", "payload", "callback", "finder", "beat", "heartbeat", "direction", "SocketState", "wsProtocol", "DEFAULT_CONFIG", "RECONNECT_DELAY", "MAX_RETRIES", "userIsLoaded", "reconnectTimeout", "retriesLeft", "socket", "Socket", "reconnectTicker", "SocketState", "scheduleReconnect", "delay", "restartReconnecting", "userLoadedEvent", "state", "Endpoint", "elem", "store", "isNotificationMessage", "msg", "socket", "_a", "n", "setCount", "setNotifications", "notifications", "renderNotifications", "template", "sorted", "b", "A", "notificationMarkRead", "o", "list", "D", "count", "menu", "setTitle", "clearCount", "api", "loadSubscribeButtons", "SubscribeButton", "button", "title", "fetchNotifications", "data", "isHtmlElement", "target", "init", "getDocTitle", "pageUpdateEvent", "event", "checkVapidKey", "subscription", "initSubscription", "swReg", "state", "setSubscribeState", "unsubscribe", "subscribe", "env", "c", "active", "notifications_default", "DEFAULT_TARGET", "HASH_RE", "BEFORE_NAVIGATE_TIMEOUT", "beforeNavigateHooks", "beforeNextNavigate", "hook", "runBeforeNavigate", "hooks", "resolve", "contentInsertedEvent", "element", "hash", "el", "displayNamespace", "source", "namespace", "getNamespace", "elem", "namespaceEvent", "handlePopState", "event", "partial", "data", "api", "updateContentFromData", "pageUpdateEvent", "htmlStringToDom", "insertWithScriptTags", "target", "scriptEl", "newScript", "updateFromResponse", "targetId", "html", "content", "updateTarget", "endpoint", "getContentBySelector", "selectors", "selector", "contentEl", "setTitle", "targetEl", "notifications_default", "getDocTitle", "openInTab", "href", "openInMenu", "menu", "menuItem", "subMenu", "unfoldInMenu", "knowledgeNavHandler", "currentTarget", "NON_AJAX", "insertContent", "_a", "dom", "container", "ajaxTarget", "loadExtraTarget", "goToPage", "_b", "goToPageEvent", "internalClickHandler", "isHTMLElement", "cls", "isInternalLink", "closeClickHandler", "addClickEvent", "callback", "$", "evt", "wrapper", "content", "active", "current", "lastFocus", "queue", "setTitle", "title", "isHtmlElement", "target", "init", "pressedOnBackdrop", "ev", "next", "focusFirst", "_replaceContent", "html", "contentInsertedEvent", "open", "popup", "_a", "data", "api", "e", "close", "isFocusable", "elem", "popupCloseEvent", "setTakeover", "activate", "Popup", "url", "callback", "method", "ServiceWorker", "err", "ev", "serviceWorkerRegistration", "notifications_default", "API", "User", "notifications_default", "ServiceWorker", "data", "api", "userLoadedEvent", "_a", "_b", "c", "title", "isMobile", "popup", "Popup", "content", "stopElem", "event", "import_jquery", "ERROR_CLASS", "NON_FIELD_KEYS", "messagesFor", "value", "buildList", "messages", "id", "nonField", "list", "message", "item", "fieldElement", "form", "name", "rowFor", "field", "fieldId", "label", "clearFormErrors", "renderFormErrors", "errors", "_a", "_b", "unplaced", "row", "anchor", "showApiError", "error", "fallback", "data", "isAxiosError", "performDelete", "elem", "deleteApi", "deleteRedirect", "api", "goToPageEvent", "container", "$container", "$", "e", "showApiError", "ApiDelete_default", "event", "isHTMLElement", "confirmation", "METHODS", "interpretApi", "api", "method", "url", "performPost", "elem", "postApi", "postAssign", "postRedirect", "confirm", "dataset", "method", "url", "interpretApi", "api", "goToPageEvent", "e", "showApiError", "ApiPost_default", "ev", "isHTMLElement", "confirmation", "ContentFilterButton", "elem", "apiUrl", "target", "ev", "api", "contentFilterChangedEvent", "ContextMenu_default", "target", "_a", "menu", "open", "ev", "isHTMLElement", "contextMenu", "DATA_TYPES", "withinBounds", "value", "min", "max", "parseAspectRatio", "aspectRatio", "wAsp", "hAsp", "loadOriginalImage", "file", "resolve", "reject", "reader", "dataURL", "img", "initCropArea", "orig", "ratio", "sWidth", "sHeight", "cropFractions", "area", "sx", "sy", "imgW", "imgH", "dragCropArea", "handle", "start", "dx", "dy", "MIN", "next", "w", "h", "formatPrio", "toFormatDataURL", "canvas", "type", "getScaled", "width", "height", "maxSize", "imageMax", "scale", "resizeImage", "src", "crop", "size", "context", "blob", "ERROR_TEXT", "HANDLES", "TEMPLATE", "h", "isFileDrag", "ev", "_a", "CropImageDialog", "trigger", "_b", "_c", "dataset", "parseAspectRatio", "Popup", "DATA_TYPES", "file", "selector", "button", "content", "depth", "setOver", "over", "type", "src", "img", "busy", "clearFormErrors", "orig", "loadOriginalImage", "initCropArea", "e", "blob", "resizeImage", "fractions", "cropFractions", "area", "side", "value", "handle", "scaleX", "scaleY", "startX", "startY", "startArea", "dragCropArea", "data", "ext", "method", "url", "interpretApi", "api", "showApiError", "goToPageEvent", "CropImage", "elem", "_ChildPart", "ChildPart", "_$LH", "wrap", "node", "createMarker", "document", "createComment", "insertPart", "containerPart", "refPart", "part", "container", "_$startNode", "parentNode", "refNode", "_$endNode", "startNode", "insertBefore", "endNode", "ChildPart", "options", "nextSibling", "oldParent", "_$parent", "parentChanged", "newConnectionState", "_$reparentDisconnectables", "_$notifyConnectionChanged", "_$isConnected", "start", "n", "wrap", "setChildPartValue", "value", "directiveParent", "_$setValue", "RESET_VALUE", "setCommittedValue", "_$committedValue", "getCommittedValue", "removePart", "_$clear", "remove", "generateMap", "list", "start", "end", "map", "Map", "i", "set", "repeat", "directive", "Directive", "partInfo", "super", "type", "PartType", "CHILD", "Error", "items", "keyFnOrTemplate", "template", "keyFn", "keys", "values", "index", "item", "this", "_getValuesAndKeys", "containerPart", "oldParts", "getCommittedValue", "newValues", "newKeys", "Array", "isArray", "_itemKeys", "oldKeys", "newParts", "newKeyToIndexMap", "oldKeyToIndexMap", "oldHead", "oldTail", "length", "newHead", "newTail", "setChildPartValue", "insertPart", "has", "oldIndex", "get", "oldPart", "newPart", "removePart", "setCommittedValue", "noChange", "FeedList", "elem", "entries", "e", "listener", "contentFilterChangedEvent", "selector", "url", "key", "value", "generation", "data", "api", "ev", "D", "b", "c", "item", "A", "lastItem", "moderationMenu", "item", "moderation", "pin_url", "archive_url", "redirect", "menuId", "items", "b", "authorTemplate", "author", "authorImageTemplate", "image", "DiscussionList", "FeedList", "group", "tag", "archive", "_a", "pinned", "A", "DiscussPostAs", "value", "_a", "g", "_b", "ev", "choices", "D", "id", "name", "b", "elem", "userLoadedEvent", "setButtonsDisable", "form", "disable", "button", "releaseSubmit", "FormSubmitOnce_default", "ev", "DynamicChoices", "elem", "btn", "ev", "_a", "button", "wrapper", "key", "value", "target", "div", "buttons", "delayTimeout", "delayed", "fn", "ms", "DynamicForm", "form", "_a", "e", "action", "method", "data", "text", "contentInsertedEvent", "SELECTOR", "PLACEHOLDER", "DEFAULT_ERROR", "inFlight", "resolveRedirect", "template", "data", "_match", "key", "value", "submitForm", "form", "_a", "formApi", "popupClose", "redirect", "errorText", "method", "url", "interpretApi", "api", "getFormData", "clearFormErrors", "container", "contentInsertedEvent", "goToPageEvent", "popupCloseEvent", "e", "showApiError", "JsonForm_default", "ev", "releaseSubmit", "currentMenu", "ev", "isHTMLElement", "Menu", "toggler", "event", "thisOpen", "NewsList", "FeedList", "item", "b", "A", "PopupLink_default", "event", "isHTMLElement", "linkTag", "Popup", "RadioButtons", "elem", "api", "attribute", "data", "method", "href", "button", "event", "_a", "current", "import_jquery", "ReadMarker", "element", "id", "storageKey", "closer", "ev", "$", "api", "ResponsiveEmbed", "elem", "_a", "_b", "_c", "width", "height", "naturalWidth", "naturalHeight", "TIMEOUT", "MIN_CHARS", "MODES", "namespaces", "controller", "SiteSearch", "elem", "_a", "_b", "namespaceEvent", "namespace", "setAll", "element", "setThis", "pageUpdateEvent", "getNamespace", "event", "checkbox", "forceUpdate", "A", "name", "selector", "mode", "m", "content", "D", "results", "b", "o", "text", "cb", "data", "api", "e", "isAxiosError", "isCancel", "Tabs_default", "ev", "isHTMLElement", "button", "container", "name", "id", "elements", "dataset", "ToggleButton", "elem", "_a", "_b", "icon", "icon_on", "icon_off", "toggleApi", "toggleAttr", "toggleOffApi", "toggleOnce", "reload", "updateTarget", "dataset", "attribute", "offApi", "ev", "method", "url", "interpretApi", "data", "api", "state", "status", "response", "isAnchorElement", "elem", "Toggler", "ev", "_a", "_b", "container", "button", "target", "allComponents", "ApiDelete_default", "ApiPost_default", "ContentFilterButton", "ContextMenu_default", "CropImage", "DiscussionList", "DiscussPostAs", "DynamicChoices", "DynamicForm", "FormSubmitOnce_default", "JsonForm_default", "Menu", "NewsList", "PopupLink_default", "RadioButtons", "ReadMarker", "ResponsiveEmbed", "SiteSearch", "Tabs_default", "ToggleButton", "Toggler", "isInstallComponent", "component", "isIntialOnlyComponent", "dynamicComponents", "c", "registerComponents", "target", "components", "elem", "contentInsertedEvent", "import_jquery", "count", "n", "ErrorStatus", "SubscribeError", "status", "message", "isSubscribedMessage", "msg", "isSubscribeFailMessage", "DEFAULT_OPTIONS", "defineChannel", "name", "opts", "options", "onSubscribedCallbacks", "subscriptions", "subscribingIds", "subscribedIds", "subscribedCallbacks", "subscribeErrorCallbacks", "idGenerator", "count", "registerCallback", "map", "id", "cb", "clearCallbacks", "socket", "_a", "_b", "callbacks", "readyState", "SocketState", "shouldSubscribeTo", "performSubscribe", "send", "action", "payload", "getSubscriptionPromise", "resolve", "reject", "timeout", "SubscribeError", "isSubscribing", "isSubscribed", "shouldSubscribe", "any", "v", "subscribe", "subscriptionId", "onSubscribe", "$", "notifications_default", "api", "defineChannel", "events_exports", "beforeNextNavigate", "Popup", "socket", "isAxiosError", "User", "registerComponents"]
}
