{"version":3,"file":"index.js","sources":["../../node_modules/jquery/dist/jquery.js","../../node_modules/popper.js/dist/esm/popper.js","../../node_modules/bootstrap/dist/js/bootstrap.js","../../node_modules/lodash/lodash.js","../../Client/scripts/product-filter.ts","../../Client/scripts/navbar.ts","../../Client/scripts/drawer.ts","../../node_modules/slick-slider/slick/slick.js","../../Client/scripts/carousel.ts","../../Client/scripts/gallery-lightbox.ts","../../Client/scripts/save-colours.ts","../../Client/scripts/my-samples-form.ts","../../Client/scripts/hero.ts","../../node_modules/colorthief/dist/color-thief.mjs","../../Client/scripts/save-colour-icon.ts","../../Client/index.ts","../../Client/scripts/livechat.ts"],"sourcesContent":["/*!\n * jQuery JavaScript Library v3.6.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-03-02T17:08Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.6.0\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<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\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <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 primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<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 rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <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\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\t// Suppress native focus or blur as it's already being fired\n\t\t// in leverageNative.\n\t\t_default: function() {\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<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\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<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\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( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( 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(\n\t( \"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\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 * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/*!\n * Bootstrap v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :\n typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n}(this, (function (exports, $, Popper) { 'use strict';\n\n function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\n var $__default = /*#__PURE__*/_interopDefaultLegacy($);\n var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n }\n\n function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n }\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\n var TRANSITION_END = 'transitionend';\n var MAX_UID = 1000000;\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n function toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return \"\" + obj;\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle: function handle(event) {\n if ($__default['default'](event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined;\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $__default['default'](this).one(Util.TRANSITION_END, function () {\n called = true;\n });\n setTimeout(function () {\n if (!called) {\n Util.triggerTransitionEnd(_this);\n }\n }, duration);\n return this;\n }\n\n function setTransitionEndSupport() {\n $__default['default'].fn.emulateTransitionEnd = transitionEndEmulator;\n $__default['default'].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n var hrefAttr = element.getAttribute('href');\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n }\n\n try {\n return document.querySelector(selector) ? selector : null;\n } catch (_) {\n return null;\n }\n },\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = $__default['default'](element).css('transition-duration');\n var transitionDelay = $__default['default'](element).css('transition-delay');\n var floatTransitionDuration = parseFloat(transitionDuration);\n var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n triggerTransitionEnd: function triggerTransitionEnd(element) {\n $__default['default'](element).trigger(TRANSITION_END);\n },\n supportsTransitionEnd: function supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n isElement: function isElement(obj) {\n return (obj[0] || obj).nodeType;\n },\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n for (var property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n }\n }\n }\n },\n findShadowRoot: function findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null;\n } // Can find the shadow root otherwise it'll return the document\n\n\n if (typeof element.getRootNode === 'function') {\n var root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n\n if (element instanceof ShadowRoot) {\n return element;\n } // when we don't find a shadow root\n\n\n if (!element.parentNode) {\n return null;\n }\n\n return Util.findShadowRoot(element.parentNode);\n },\n jQueryDetection: function jQueryDetection() {\n if (typeof $__default['default'] === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n }\n\n var version = $__default['default'].fn.jquery.split(' ')[0].split('.');\n var minMajor = 1;\n var ltMajor = 2;\n var minMinor = 9;\n var minPatch = 1;\n var maxMajor = 4;\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n }\n }\n };\n Util.jQueryDetection();\n setTransitionEndSupport();\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'alert';\n var VERSION = '4.5.3';\n var DATA_KEY = 'bs.alert';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];\n var SELECTOR_DISMISS = '[data-dismiss=\"alert\"]';\n var EVENT_CLOSE = \"close\" + EVENT_KEY;\n var EVENT_CLOSED = \"closed\" + EVENT_KEY;\n var EVENT_CLICK_DATA_API = \"click\" + EVENT_KEY + DATA_API_KEY;\n var CLASS_NAME_ALERT = 'alert';\n var CLASS_NAME_FADE = 'fade';\n var CLASS_NAME_SHOW = 'show';\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Alert = /*#__PURE__*/function () {\n function Alert(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Alert.prototype;\n\n // Public\n _proto.close = function close(element) {\n var rootElement = this._element;\n\n if (element) {\n rootElement = this._getRootElement(element);\n }\n\n var customEvent = this._triggerCloseEvent(rootElement);\n\n if (customEvent.isDefaultPrevented()) {\n return;\n }\n\n this._removeElement(rootElement);\n };\n\n _proto.dispose = function dispose() {\n $__default['default'].removeData(this._element, DATA_KEY);\n this._element = null;\n } // Private\n ;\n\n _proto._getRootElement = function _getRootElement(element) {\n var selector = Util.getSelectorFromElement(element);\n var parent = false;\n\n if (selector) {\n parent = document.querySelector(selector);\n }\n\n if (!parent) {\n parent = $__default['default'](element).closest(\".\" + CLASS_NAME_ALERT)[0];\n }\n\n return parent;\n };\n\n _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n var closeEvent = $__default['default'].Event(EVENT_CLOSE);\n $__default['default'](element).trigger(closeEvent);\n return closeEvent;\n };\n\n _proto._removeElement = function _removeElement(element) {\n var _this = this;\n\n $__default['default'](element).removeClass(CLASS_NAME_SHOW);\n\n if (!$__default['default'](element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element);\n\n return;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(element);\n $__default['default'](element).one(Util.TRANSITION_END, function (event) {\n return _this._destroyElement(element, event);\n }).emulateTransitionEnd(transitionDuration);\n };\n\n _proto._destroyElement = function _destroyElement(element) {\n $__default['default'](element).detach().trigger(EVENT_CLOSED).remove();\n } // Static\n ;\n\n Alert._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $__default['default'](this);\n var data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new Alert(this);\n $element.data(DATA_KEY, data);\n }\n\n if (config === 'close') {\n data[config](this);\n }\n });\n };\n\n Alert._handleDismiss = function _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault();\n }\n\n alertInstance.close(this);\n };\n };\n\n _createClass(Alert, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Alert;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'](document).on(EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME] = Alert._jQueryInterface;\n $__default['default'].fn[NAME].Constructor = Alert;\n\n $__default['default'].fn[NAME].noConflict = function () {\n $__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;\n return Alert._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$1 = 'button';\n var VERSION$1 = '4.5.3';\n var DATA_KEY$1 = 'bs.button';\n var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n var DATA_API_KEY$1 = '.data-api';\n var JQUERY_NO_CONFLICT$1 = $__default['default'].fn[NAME$1];\n var CLASS_NAME_ACTIVE = 'active';\n var CLASS_NAME_BUTTON = 'btn';\n var CLASS_NAME_FOCUS = 'focus';\n var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]';\n var SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]';\n var SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]';\n var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn';\n var SELECTOR_INPUT = 'input:not([type=\"hidden\"])';\n var SELECTOR_ACTIVE = '.active';\n var SELECTOR_BUTTON = '.btn';\n var EVENT_CLICK_DATA_API$1 = \"click\" + EVENT_KEY$1 + DATA_API_KEY$1;\n var EVENT_FOCUS_BLUR_DATA_API = \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1);\n var EVENT_LOAD_DATA_API = \"load\" + EVENT_KEY$1 + DATA_API_KEY$1;\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Button = /*#__PURE__*/function () {\n function Button(element) {\n this._element = element;\n this.shouldAvoidTriggerChange = false;\n } // Getters\n\n\n var _proto = Button.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n var triggerChangeEvent = true;\n var addAriaPressed = true;\n var rootElement = $__default['default'](this._element).closest(SELECTOR_DATA_TOGGLES)[0];\n\n if (rootElement) {\n var input = this._element.querySelector(SELECTOR_INPUT);\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false;\n } else {\n var activeElement = rootElement.querySelector(SELECTOR_ACTIVE);\n\n if (activeElement) {\n $__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE);\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE);\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $__default['default'](input).trigger('change');\n }\n }\n\n input.focus();\n addAriaPressed = false;\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE));\n }\n\n if (triggerChangeEvent) {\n $__default['default'](this._element).toggleClass(CLASS_NAME_ACTIVE);\n }\n }\n };\n\n _proto.dispose = function dispose() {\n $__default['default'].removeData(this._element, DATA_KEY$1);\n this._element = null;\n } // Static\n ;\n\n Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n var $element = $__default['default'](this);\n var data = $element.data(DATA_KEY$1);\n\n if (!data) {\n data = new Button(this);\n $element.data(DATA_KEY$1, data);\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange;\n\n if (config === 'toggle') {\n data[config]();\n }\n });\n };\n\n _createClass(Button, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$1;\n }\n }]);\n\n return Button;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE_CARROT, function (event) {\n var button = event.target;\n var initialButton = button;\n\n if (!$__default['default'](button).hasClass(CLASS_NAME_BUTTON)) {\n button = $__default['default'](button).closest(SELECTOR_BUTTON)[0];\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault(); // work around Firefox bug #1540995\n } else {\n var inputBtn = button.querySelector(SELECTOR_INPUT);\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault(); // work around Firefox bug #1540995\n\n return;\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($__default['default'](button), 'toggle', initialButton.tagName === 'INPUT');\n }\n }\n }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {\n var button = $__default['default'](event.target).closest(SELECTOR_BUTTON)[0];\n $__default['default'](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));\n });\n $__default['default'](window).on(EVENT_LOAD_DATA_API, function () {\n // ensure correct active class is set to match the controls' actual values/states\n // find all checkboxes/readio buttons inside data-toggle groups\n var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));\n\n for (var i = 0, len = buttons.length; i < len; i++) {\n var button = buttons[i];\n var input = button.querySelector(SELECTOR_INPUT);\n\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE);\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE);\n }\n } // find all button toggles\n\n\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));\n\n for (var _i = 0, _len = buttons.length; _i < _len; _i++) {\n var _button = buttons[_i];\n\n if (_button.getAttribute('aria-pressed') === 'true') {\n _button.classList.add(CLASS_NAME_ACTIVE);\n } else {\n _button.classList.remove(CLASS_NAME_ACTIVE);\n }\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME$1] = Button._jQueryInterface;\n $__default['default'].fn[NAME$1].Constructor = Button;\n\n $__default['default'].fn[NAME$1].noConflict = function () {\n $__default['default'].fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n return Button._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$2 = 'carousel';\n var VERSION$2 = '4.5.3';\n var DATA_KEY$2 = 'bs.carousel';\n var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n var DATA_API_KEY$2 = '.data-api';\n var JQUERY_NO_CONFLICT$2 = $__default['default'].fn[NAME$2];\n var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n var SWIPE_THRESHOLD = 40;\n var Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n };\n var DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n };\n var DIRECTION_NEXT = 'next';\n var DIRECTION_PREV = 'prev';\n var DIRECTION_LEFT = 'left';\n var DIRECTION_RIGHT = 'right';\n var EVENT_SLIDE = \"slide\" + EVENT_KEY$2;\n var EVENT_SLID = \"slid\" + EVENT_KEY$2;\n var EVENT_KEYDOWN = \"keydown\" + EVENT_KEY$2;\n var EVENT_MOUSEENTER = \"mouseenter\" + EVENT_KEY$2;\n var EVENT_MOUSELEAVE = \"mouseleave\" + EVENT_KEY$2;\n var EVENT_TOUCHSTART = \"touchstart\" + EVENT_KEY$2;\n var EVENT_TOUCHMOVE = \"touchmove\" + EVENT_KEY$2;\n var EVENT_TOUCHEND = \"touchend\" + EVENT_KEY$2;\n var EVENT_POINTERDOWN = \"pointerdown\" + EVENT_KEY$2;\n var EVENT_POINTERUP = \"pointerup\" + EVENT_KEY$2;\n var EVENT_DRAG_START = \"dragstart\" + EVENT_KEY$2;\n var EVENT_LOAD_DATA_API$1 = \"load\" + EVENT_KEY$2 + DATA_API_KEY$2;\n var EVENT_CLICK_DATA_API$2 = \"click\" + EVENT_KEY$2 + DATA_API_KEY$2;\n var CLASS_NAME_CAROUSEL = 'carousel';\n var CLASS_NAME_ACTIVE$1 = 'active';\n var CLASS_NAME_SLIDE = 'slide';\n var CLASS_NAME_RIGHT = 'carousel-item-right';\n var CLASS_NAME_LEFT = 'carousel-item-left';\n var CLASS_NAME_NEXT = 'carousel-item-next';\n var CLASS_NAME_PREV = 'carousel-item-prev';\n var CLASS_NAME_POINTER_EVENT = 'pointer-event';\n var SELECTOR_ACTIVE$1 = '.active';\n var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n var SELECTOR_ITEM = '.carousel-item';\n var SELECTOR_ITEM_IMG = '.carousel-item img';\n var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n var SELECTOR_INDICATORS = '.carousel-indicators';\n var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';\n var SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]';\n var PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Carousel = /*#__PURE__*/function () {\n function Carousel(element, config) {\n this._items = null;\n this._interval = null;\n this._activeElement = null;\n this._isPaused = false;\n this._isSliding = false;\n this.touchTimeout = null;\n this.touchStartX = 0;\n this.touchDeltaX = 0;\n this._config = this._getConfig(config);\n this._element = element;\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Carousel.prototype;\n\n // Public\n _proto.next = function next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT);\n }\n };\n\n _proto.nextWhenVisible = function nextWhenVisible() {\n var $element = $__default['default'](this._element); // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n\n if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') {\n this.next();\n }\n };\n\n _proto.prev = function prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV);\n }\n };\n\n _proto.pause = function pause(event) {\n if (!event) {\n this._isPaused = true;\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element);\n this.cycle(true);\n }\n\n clearInterval(this._interval);\n this._interval = null;\n };\n\n _proto.cycle = function cycle(event) {\n if (!event) {\n this._isPaused = false;\n }\n\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n }\n };\n\n _proto.to = function to(index) {\n var _this = this;\n\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n\n var activeIndex = this._getItemIndex(this._activeElement);\n\n if (index > this._items.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n $__default['default'](this._element).one(EVENT_SLID, function () {\n return _this.to(index);\n });\n return;\n }\n\n if (activeIndex === index) {\n this.pause();\n this.cycle();\n return;\n }\n\n var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;\n\n this._slide(direction, this._items[index]);\n };\n\n _proto.dispose = function dispose() {\n $__default['default'](this._element).off(EVENT_KEY$2);\n $__default['default'].removeData(this._element, DATA_KEY$2);\n this._items = null;\n this._config = null;\n this._element = null;\n this._interval = null;\n this._isPaused = null;\n this._isSliding = null;\n this._activeElement = null;\n this._indicatorsElement = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _extends({}, Default, config);\n Util.typeCheckConfig(NAME$2, config, DefaultType);\n return config;\n };\n\n _proto._handleSwipe = function _handleSwipe() {\n var absDeltax = Math.abs(this.touchDeltaX);\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return;\n }\n\n var direction = absDeltax / this.touchDeltaX;\n this.touchDeltaX = 0; // swipe left\n\n if (direction > 0) {\n this.prev();\n } // swipe right\n\n\n if (direction < 0) {\n this.next();\n }\n };\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this2 = this;\n\n if (this._config.keyboard) {\n $__default['default'](this._element).on(EVENT_KEYDOWN, function (event) {\n return _this2._keydown(event);\n });\n }\n\n if (this._config.pause === 'hover') {\n $__default['default'](this._element).on(EVENT_MOUSEENTER, function (event) {\n return _this2.pause(event);\n }).on(EVENT_MOUSELEAVE, function (event) {\n return _this2.cycle(event);\n });\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners();\n }\n };\n\n _proto._addTouchEventListeners = function _addTouchEventListeners() {\n var _this3 = this;\n\n if (!this._touchSupported) {\n return;\n }\n\n var start = function start(event) {\n if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n _this3.touchStartX = event.originalEvent.clientX;\n } else if (!_this3._pointerEvent) {\n _this3.touchStartX = event.originalEvent.touches[0].clientX;\n }\n };\n\n var move = function move(event) {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n _this3.touchDeltaX = 0;\n } else {\n _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n }\n };\n\n var end = function end(event) {\n if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n }\n\n _this3._handleSwipe();\n\n if (_this3._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n _this3.pause();\n\n if (_this3.touchTimeout) {\n clearTimeout(_this3.touchTimeout);\n }\n\n _this3.touchTimeout = setTimeout(function (event) {\n return _this3.cycle(event);\n }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n }\n };\n\n $__default['default'](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {\n return e.preventDefault();\n });\n\n if (this._pointerEvent) {\n $__default['default'](this._element).on(EVENT_POINTERDOWN, function (event) {\n return start(event);\n });\n $__default['default'](this._element).on(EVENT_POINTERUP, function (event) {\n return end(event);\n });\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n $__default['default'](this._element).on(EVENT_TOUCHSTART, function (event) {\n return start(event);\n });\n $__default['default'](this._element).on(EVENT_TOUCHMOVE, function (event) {\n return move(event);\n });\n $__default['default'](this._element).on(EVENT_TOUCHEND, function (event) {\n return end(event);\n });\n }\n };\n\n _proto._keydown = function _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n }\n };\n\n _proto._getItemIndex = function _getItemIndex(element) {\n this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];\n return this._items.indexOf(element);\n };\n\n _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n var isNextDirection = direction === DIRECTION_NEXT;\n var isPrevDirection = direction === DIRECTION_PREV;\n\n var activeIndex = this._getItemIndex(activeElement);\n\n var lastItemIndex = this._items.length - 1;\n var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement;\n }\n\n var delta = direction === DIRECTION_PREV ? -1 : 1;\n var itemIndex = (activeIndex + delta) % this._items.length;\n return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n };\n\n _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n var targetIndex = this._getItemIndex(relatedTarget);\n\n var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));\n\n var slideEvent = $__default['default'].Event(EVENT_SLIDE, {\n relatedTarget: relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n $__default['default'](this._element).trigger(slideEvent);\n return slideEvent;\n };\n\n _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));\n $__default['default'](indicators).removeClass(CLASS_NAME_ACTIVE$1);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $__default['default'](nextIndicator).addClass(CLASS_NAME_ACTIVE$1);\n }\n }\n };\n\n _proto._slide = function _slide(direction, element) {\n var _this4 = this;\n\n var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n\n var activeElementIndex = this._getItemIndex(activeElement);\n\n var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n var nextElementIndex = this._getItemIndex(nextElement);\n\n var isCycling = Boolean(this._interval);\n var directionalClassName;\n var orderClassName;\n var eventDirectionName;\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT;\n orderClassName = CLASS_NAME_NEXT;\n eventDirectionName = DIRECTION_LEFT;\n } else {\n directionalClassName = CLASS_NAME_RIGHT;\n orderClassName = CLASS_NAME_PREV;\n eventDirectionName = DIRECTION_RIGHT;\n }\n\n if (nextElement && $__default['default'](nextElement).hasClass(CLASS_NAME_ACTIVE$1)) {\n this._isSliding = false;\n return;\n }\n\n var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n if (slideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return;\n }\n\n this._isSliding = true;\n\n if (isCycling) {\n this.pause();\n }\n\n this._setActiveIndicatorElement(nextElement);\n\n var slidEvent = $__default['default'].Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n });\n\n if ($__default['default'](this._element).hasClass(CLASS_NAME_SLIDE)) {\n $__default['default'](nextElement).addClass(orderClassName);\n Util.reflow(nextElement);\n $__default['default'](activeElement).addClass(directionalClassName);\n $__default['default'](nextElement).addClass(directionalClassName);\n var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n this._config.interval = nextElementInterval;\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n $__default['default'](activeElement).one(Util.TRANSITION_END, function () {\n $__default['default'](nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(CLASS_NAME_ACTIVE$1);\n $__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE$1 + \" \" + orderClassName + \" \" + directionalClassName);\n _this4._isSliding = false;\n setTimeout(function () {\n return $__default['default'](_this4._element).trigger(slidEvent);\n }, 0);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n $__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE$1);\n $__default['default'](nextElement).addClass(CLASS_NAME_ACTIVE$1);\n this._isSliding = false;\n $__default['default'](this._element).trigger(slidEvent);\n }\n\n if (isCycling) {\n this.cycle();\n }\n } // Static\n ;\n\n Carousel._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $__default['default'](this).data(DATA_KEY$2);\n\n var _config = _extends({}, Default, $__default['default'](this).data());\n\n if (typeof config === 'object') {\n _config = _extends({}, _config, config);\n }\n\n var action = typeof config === 'string' ? config : _config.slide;\n\n if (!data) {\n data = new Carousel(this, _config);\n $__default['default'](this).data(DATA_KEY$2, data);\n }\n\n if (typeof config === 'number') {\n data.to(config);\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n }\n\n data[action]();\n } else if (_config.interval && _config.ride) {\n data.pause();\n data.cycle();\n }\n });\n };\n\n Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n var selector = Util.getSelectorFromElement(this);\n\n if (!selector) {\n return;\n }\n\n var target = $__default['default'](selector)[0];\n\n if (!target || !$__default['default'](target).hasClass(CLASS_NAME_CAROUSEL)) {\n return;\n }\n\n var config = _extends({}, $__default['default'](target).data(), $__default['default'](this).data());\n\n var slideIndex = this.getAttribute('data-slide-to');\n\n if (slideIndex) {\n config.interval = false;\n }\n\n Carousel._jQueryInterface.call($__default['default'](target), config);\n\n if (slideIndex) {\n $__default['default'](target).data(DATA_KEY$2).to(slideIndex);\n }\n\n event.preventDefault();\n };\n\n _createClass(Carousel, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$2;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Carousel;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'](document).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);\n $__default['default'](window).on(EVENT_LOAD_DATA_API$1, function () {\n var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));\n\n for (var i = 0, len = carousels.length; i < len; i++) {\n var $carousel = $__default['default'](carousels[i]);\n\n Carousel._jQueryInterface.call($carousel, $carousel.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME$2] = Carousel._jQueryInterface;\n $__default['default'].fn[NAME$2].Constructor = Carousel;\n\n $__default['default'].fn[NAME$2].noConflict = function () {\n $__default['default'].fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n return Carousel._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$3 = 'collapse';\n var VERSION$3 = '4.5.3';\n var DATA_KEY$3 = 'bs.collapse';\n var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n var DATA_API_KEY$3 = '.data-api';\n var JQUERY_NO_CONFLICT$3 = $__default['default'].fn[NAME$3];\n var Default$1 = {\n toggle: true,\n parent: ''\n };\n var DefaultType$1 = {\n toggle: 'boolean',\n parent: '(string|element)'\n };\n var EVENT_SHOW = \"show\" + EVENT_KEY$3;\n var EVENT_SHOWN = \"shown\" + EVENT_KEY$3;\n var EVENT_HIDE = \"hide\" + EVENT_KEY$3;\n var EVENT_HIDDEN = \"hidden\" + EVENT_KEY$3;\n var EVENT_CLICK_DATA_API$3 = \"click\" + EVENT_KEY$3 + DATA_API_KEY$3;\n var CLASS_NAME_SHOW$1 = 'show';\n var CLASS_NAME_COLLAPSE = 'collapse';\n var CLASS_NAME_COLLAPSING = 'collapsing';\n var CLASS_NAME_COLLAPSED = 'collapsed';\n var DIMENSION_WIDTH = 'width';\n var DIMENSION_HEIGHT = 'height';\n var SELECTOR_ACTIVES = '.show, .collapsing';\n var SELECTOR_DATA_TOGGLE$1 = '[data-toggle=\"collapse\"]';\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Collapse = /*#__PURE__*/function () {\n function Collapse(element, config) {\n this._isTransitioning = false;\n this._element = element;\n this._config = this._getConfig(config);\n this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$1));\n\n for (var i = 0, len = toggleList.length; i < len; i++) {\n var elem = toggleList[i];\n var selector = Util.getSelectorFromElement(elem);\n var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n return foundElem === element;\n });\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector;\n\n this._triggerArray.push(elem);\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null;\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n } // Getters\n\n\n var _proto = Collapse.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if ($__default['default'](this._element).hasClass(CLASS_NAME_SHOW$1)) {\n this.hide();\n } else {\n this.show();\n }\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if (this._isTransitioning || $__default['default'](this._element).hasClass(CLASS_NAME_SHOW$1)) {\n return;\n }\n\n var actives;\n var activesData;\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {\n if (typeof _this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === _this._config.parent;\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE);\n });\n\n if (actives.length === 0) {\n actives = null;\n }\n }\n\n if (actives) {\n activesData = $__default['default'](actives).not(this._selector).data(DATA_KEY$3);\n\n if (activesData && activesData._isTransitioning) {\n return;\n }\n }\n\n var startEvent = $__default['default'].Event(EVENT_SHOW);\n $__default['default'](this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($__default['default'](actives).not(this._selector), 'hide');\n\n if (!activesData) {\n $__default['default'](actives).data(DATA_KEY$3, null);\n }\n }\n\n var dimension = this._getDimension();\n\n $__default['default'](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);\n this._element.style[dimension] = 0;\n\n if (this._triggerArray.length) {\n $__default['default'](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n $__default['default'](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + \" \" + CLASS_NAME_SHOW$1);\n _this._element.style[dimension] = '';\n\n _this.setTransitioning(false);\n\n $__default['default'](_this._element).trigger(EVENT_SHOWN);\n };\n\n var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n var scrollSize = \"scroll\" + capitalizedDimension;\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $__default['default'](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n this._element.style[dimension] = this._element[scrollSize] + \"px\";\n };\n\n _proto.hide = function hide() {\n var _this2 = this;\n\n if (this._isTransitioning || !$__default['default'](this._element).hasClass(CLASS_NAME_SHOW$1)) {\n return;\n }\n\n var startEvent = $__default['default'].Event(EVENT_HIDE);\n $__default['default'](this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n var dimension = this._getDimension();\n\n this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n Util.reflow(this._element);\n $__default['default'](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + \" \" + CLASS_NAME_SHOW$1);\n var triggerArrayLength = this._triggerArray.length;\n\n if (triggerArrayLength > 0) {\n for (var i = 0; i < triggerArrayLength; i++) {\n var trigger = this._triggerArray[i];\n var selector = Util.getSelectorFromElement(trigger);\n\n if (selector !== null) {\n var $elem = $__default['default']([].slice.call(document.querySelectorAll(selector)));\n\n if (!$elem.hasClass(CLASS_NAME_SHOW$1)) {\n $__default['default'](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);\n }\n }\n }\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n _this2.setTransitioning(false);\n\n $__default['default'](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN);\n };\n\n this._element.style[dimension] = '';\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $__default['default'](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n };\n\n _proto.setTransitioning = function setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning;\n };\n\n _proto.dispose = function dispose() {\n $__default['default'].removeData(this._element, DATA_KEY$3);\n this._config = null;\n this._parent = null;\n this._element = null;\n this._triggerArray = null;\n this._isTransitioning = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _extends({}, Default$1, config);\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n return config;\n };\n\n _proto._getDimension = function _getDimension() {\n var hasWidth = $__default['default'](this._element).hasClass(DIMENSION_WIDTH);\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;\n };\n\n _proto._getParent = function _getParent() {\n var _this3 = this;\n\n var parent;\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent; // It's a jQuery object\n\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0];\n }\n } else {\n parent = document.querySelector(this._config.parent);\n }\n\n var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n var children = [].slice.call(parent.querySelectorAll(selector));\n $__default['default'](children).each(function (i, element) {\n _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n });\n return parent;\n };\n\n _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n var isOpen = $__default['default'](element).hasClass(CLASS_NAME_SHOW$1);\n\n if (triggerArray.length) {\n $__default['default'](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n }\n } // Static\n ;\n\n Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n var selector = Util.getSelectorFromElement(element);\n return selector ? document.querySelector(selector) : null;\n };\n\n Collapse._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $__default['default'](this);\n var data = $element.data(DATA_KEY$3);\n\n var _config = _extends({}, Default$1, $element.data(), typeof config === 'object' && config ? config : {});\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n if (!data) {\n data = new Collapse(this, _config);\n $element.data(DATA_KEY$3, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Collapse, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$3;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$1;\n }\n }]);\n\n return Collapse;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$1, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault();\n }\n\n var $trigger = $__default['default'](this);\n var selector = Util.getSelectorFromElement(this);\n var selectors = [].slice.call(document.querySelectorAll(selector));\n $__default['default'](selectors).each(function () {\n var $target = $__default['default'](this);\n var data = $target.data(DATA_KEY$3);\n var config = data ? 'toggle' : $trigger.data();\n\n Collapse._jQueryInterface.call($target, config);\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME$3] = Collapse._jQueryInterface;\n $__default['default'].fn[NAME$3].Constructor = Collapse;\n\n $__default['default'].fn[NAME$3].noConflict = function () {\n $__default['default'].fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n return Collapse._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$4 = 'dropdown';\n var VERSION$4 = '4.5.3';\n var DATA_KEY$4 = 'bs.dropdown';\n var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n var DATA_API_KEY$4 = '.data-api';\n var JQUERY_NO_CONFLICT$4 = $__default['default'].fn[NAME$4];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n var EVENT_HIDE$1 = \"hide\" + EVENT_KEY$4;\n var EVENT_HIDDEN$1 = \"hidden\" + EVENT_KEY$4;\n var EVENT_SHOW$1 = \"show\" + EVENT_KEY$4;\n var EVENT_SHOWN$1 = \"shown\" + EVENT_KEY$4;\n var EVENT_CLICK = \"click\" + EVENT_KEY$4;\n var EVENT_CLICK_DATA_API$4 = \"click\" + EVENT_KEY$4 + DATA_API_KEY$4;\n var EVENT_KEYDOWN_DATA_API = \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4;\n var EVENT_KEYUP_DATA_API = \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4;\n var CLASS_NAME_DISABLED = 'disabled';\n var CLASS_NAME_SHOW$2 = 'show';\n var CLASS_NAME_DROPUP = 'dropup';\n var CLASS_NAME_DROPRIGHT = 'dropright';\n var CLASS_NAME_DROPLEFT = 'dropleft';\n var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';\n var CLASS_NAME_POSITION_STATIC = 'position-static';\n var SELECTOR_DATA_TOGGLE$2 = '[data-toggle=\"dropdown\"]';\n var SELECTOR_FORM_CHILD = '.dropdown form';\n var SELECTOR_MENU = '.dropdown-menu';\n var SELECTOR_NAVBAR_NAV = '.navbar-nav';\n var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n var PLACEMENT_TOP = 'top-start';\n var PLACEMENT_TOPEND = 'top-end';\n var PLACEMENT_BOTTOM = 'bottom-start';\n var PLACEMENT_BOTTOMEND = 'bottom-end';\n var PLACEMENT_RIGHT = 'right-start';\n var PLACEMENT_LEFT = 'left-start';\n var Default$2 = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n };\n var DefaultType$2 = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Dropdown = /*#__PURE__*/function () {\n function Dropdown(element, config) {\n this._element = element;\n this._popper = null;\n this._config = this._getConfig(config);\n this._menu = this._getMenuElement();\n this._inNavbar = this._detectNavbar();\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Dropdown.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED)) {\n return;\n }\n\n var isActive = $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW$2);\n\n Dropdown._clearMenus();\n\n if (isActive) {\n return;\n }\n\n this.show(true);\n };\n\n _proto.show = function show(usePopper) {\n if (usePopper === void 0) {\n usePopper = false;\n }\n\n if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW$2)) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var showEvent = $__default['default'].Event(EVENT_SHOW$1, relatedTarget);\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n $__default['default'](parent).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n } // Disable totally Popper.js for Dropdown in Navbar\n\n\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper__default['default'] === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n }\n\n var referenceElement = this._element;\n\n if (this._config.reference === 'parent') {\n referenceElement = parent;\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference; // Check if it's jQuery element\n\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0];\n }\n } // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n\n\n if (this._config.boundary !== 'scrollParent') {\n $__default['default'](parent).addClass(CLASS_NAME_POSITION_STATIC);\n }\n\n this._popper = new Popper__default['default'](referenceElement, this._menu, this._getPopperConfig());\n } // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n if ('ontouchstart' in document.documentElement && $__default['default'](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $__default['default'](document.body).children().on('mouseover', null, $__default['default'].noop);\n }\n\n this._element.focus();\n\n this._element.setAttribute('aria-expanded', true);\n\n $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW$2);\n $__default['default'](parent).toggleClass(CLASS_NAME_SHOW$2).trigger($__default['default'].Event(EVENT_SHOWN$1, relatedTarget));\n };\n\n _proto.hide = function hide() {\n if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || !$__default['default'](this._menu).hasClass(CLASS_NAME_SHOW$2)) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var hideEvent = $__default['default'].Event(EVENT_HIDE$1, relatedTarget);\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n $__default['default'](parent).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (this._popper) {\n this._popper.destroy();\n }\n\n $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW$2);\n $__default['default'](parent).toggleClass(CLASS_NAME_SHOW$2).trigger($__default['default'].Event(EVENT_HIDDEN$1, relatedTarget));\n };\n\n _proto.dispose = function dispose() {\n $__default['default'].removeData(this._element, DATA_KEY$4);\n $__default['default'](this._element).off(EVENT_KEY$4);\n this._element = null;\n this._menu = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n\n this._popper = null;\n }\n };\n\n _proto.update = function update() {\n this._inNavbar = this._detectNavbar();\n\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n } // Private\n ;\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this = this;\n\n $__default['default'](this._element).on(EVENT_CLICK, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n _this.toggle();\n });\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _extends({}, this.constructor.Default, $__default['default'](this._element).data(), config);\n Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getMenuElement = function _getMenuElement() {\n if (!this._menu) {\n var parent = Dropdown._getParentFromElement(this._element);\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU);\n }\n }\n\n return this._menu;\n };\n\n _proto._getPlacement = function _getPlacement() {\n var $parentDropdown = $__default['default'](this._element.parentNode);\n var placement = PLACEMENT_BOTTOM; // Handle dropup\n\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT;\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT;\n } else if ($__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND;\n }\n\n return placement;\n };\n\n _proto._detectNavbar = function _detectNavbar() {\n return $__default['default'](this._element).closest('.navbar').length > 0;\n };\n\n _proto._getOffset = function _getOffset() {\n var _this2 = this;\n\n var offset = {};\n\n if (typeof this._config.offset === 'function') {\n offset.fn = function (data) {\n data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});\n return data;\n };\n } else {\n offset.offset = this._config.offset;\n }\n\n return offset;\n };\n\n _proto._getPopperConfig = function _getPopperConfig() {\n var popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }; // Disable Popper.js if we have a static display\n\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n };\n }\n\n return _extends({}, popperConfig, this._config.popperConfig);\n } // Static\n ;\n\n Dropdown._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $__default['default'](this).data(DATA_KEY$4);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data) {\n data = new Dropdown(this, _config);\n $__default['default'](this).data(DATA_KEY$4, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n Dropdown._clearMenus = function _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return;\n }\n\n var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));\n\n for (var i = 0, len = toggles.length; i < len; i++) {\n var parent = Dropdown._getParentFromElement(toggles[i]);\n\n var context = $__default['default'](toggles[i]).data(DATA_KEY$4);\n var relatedTarget = {\n relatedTarget: toggles[i]\n };\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n\n if (!context) {\n continue;\n }\n\n var dropdownMenu = context._menu;\n\n if (!$__default['default'](parent).hasClass(CLASS_NAME_SHOW$2)) {\n continue;\n }\n\n if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default['default'].contains(parent, event.target)) {\n continue;\n }\n\n var hideEvent = $__default['default'].Event(EVENT_HIDE$1, relatedTarget);\n $__default['default'](parent).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n continue;\n } // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n\n if ('ontouchstart' in document.documentElement) {\n $__default['default'](document.body).children().off('mouseover', null, $__default['default'].noop);\n }\n\n toggles[i].setAttribute('aria-expanded', 'false');\n\n if (context._popper) {\n context._popper.destroy();\n }\n\n $__default['default'](dropdownMenu).removeClass(CLASS_NAME_SHOW$2);\n $__default['default'](parent).removeClass(CLASS_NAME_SHOW$2).trigger($__default['default'].Event(EVENT_HIDDEN$1, relatedTarget));\n }\n };\n\n Dropdown._getParentFromElement = function _getParentFromElement(element) {\n var parent;\n var selector = Util.getSelectorFromElement(element);\n\n if (selector) {\n parent = document.querySelector(selector);\n }\n\n return parent || element.parentNode;\n } // eslint-disable-next-line complexity\n ;\n\n Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default['default'](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return;\n }\n\n if (this.disabled || $__default['default'](this).hasClass(CLASS_NAME_DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this);\n\n var isActive = $__default['default'](parent).hasClass(CLASS_NAME_SHOW$2);\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (!isActive || event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE) {\n if (event.which === ESCAPE_KEYCODE) {\n $__default['default'](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');\n }\n\n $__default['default'](this).trigger('click');\n return;\n }\n\n var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {\n return $__default['default'](item).is(':visible');\n });\n\n if (items.length === 0) {\n return;\n }\n\n var index = items.indexOf(event.target);\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) {\n // Up\n index--;\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n // Down\n index++;\n }\n\n if (index < 0) {\n index = 0;\n }\n\n items[index].focus();\n };\n\n _createClass(Dropdown, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$4;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$2;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$2;\n }\n }]);\n\n return Dropdown;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$4 + \" \" + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$2, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n Dropdown._jQueryInterface.call($__default['default'](this), 'toggle');\n }).on(EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function (e) {\n e.stopPropagation();\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME$4] = Dropdown._jQueryInterface;\n $__default['default'].fn[NAME$4].Constructor = Dropdown;\n\n $__default['default'].fn[NAME$4].noConflict = function () {\n $__default['default'].fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n return Dropdown._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$5 = 'modal';\n var VERSION$5 = '4.5.3';\n var DATA_KEY$5 = 'bs.modal';\n var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n var DATA_API_KEY$5 = '.data-api';\n var JQUERY_NO_CONFLICT$5 = $__default['default'].fn[NAME$5];\n var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var Default$3 = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n };\n var DefaultType$3 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n };\n var EVENT_HIDE$2 = \"hide\" + EVENT_KEY$5;\n var EVENT_HIDE_PREVENTED = \"hidePrevented\" + EVENT_KEY$5;\n var EVENT_HIDDEN$2 = \"hidden\" + EVENT_KEY$5;\n var EVENT_SHOW$2 = \"show\" + EVENT_KEY$5;\n var EVENT_SHOWN$2 = \"shown\" + EVENT_KEY$5;\n var EVENT_FOCUSIN = \"focusin\" + EVENT_KEY$5;\n var EVENT_RESIZE = \"resize\" + EVENT_KEY$5;\n var EVENT_CLICK_DISMISS = \"click.dismiss\" + EVENT_KEY$5;\n var EVENT_KEYDOWN_DISMISS = \"keydown.dismiss\" + EVENT_KEY$5;\n var EVENT_MOUSEUP_DISMISS = \"mouseup.dismiss\" + EVENT_KEY$5;\n var EVENT_MOUSEDOWN_DISMISS = \"mousedown.dismiss\" + EVENT_KEY$5;\n var EVENT_CLICK_DATA_API$5 = \"click\" + EVENT_KEY$5 + DATA_API_KEY$5;\n var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';\n var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';\n var CLASS_NAME_BACKDROP = 'modal-backdrop';\n var CLASS_NAME_OPEN = 'modal-open';\n var CLASS_NAME_FADE$1 = 'fade';\n var CLASS_NAME_SHOW$3 = 'show';\n var CLASS_NAME_STATIC = 'modal-static';\n var SELECTOR_DIALOG = '.modal-dialog';\n var SELECTOR_MODAL_BODY = '.modal-body';\n var SELECTOR_DATA_TOGGLE$3 = '[data-toggle=\"modal\"]';\n var SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]';\n var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n var SELECTOR_STICKY_CONTENT = '.sticky-top';\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Modal = /*#__PURE__*/function () {\n function Modal(element, config) {\n this._config = this._getConfig(config);\n this._element = element;\n this._dialog = element.querySelector(SELECTOR_DIALOG);\n this._backdrop = null;\n this._isShown = false;\n this._isBodyOverflowing = false;\n this._ignoreBackdropClick = false;\n this._isTransitioning = false;\n this._scrollbarWidth = 0;\n } // Getters\n\n\n var _proto = Modal.prototype;\n\n // Public\n _proto.toggle = function toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n };\n\n _proto.show = function show(relatedTarget) {\n var _this = this;\n\n if (this._isShown || this._isTransitioning) {\n return;\n }\n\n if ($__default['default'](this._element).hasClass(CLASS_NAME_FADE$1)) {\n this._isTransitioning = true;\n }\n\n var showEvent = $__default['default'].Event(EVENT_SHOW$2, {\n relatedTarget: relatedTarget\n });\n $__default['default'](this._element).trigger(showEvent);\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = true;\n\n this._checkScrollbar();\n\n this._setScrollbar();\n\n this._adjustDialog();\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $__default['default'](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {\n return _this.hide(event);\n });\n $__default['default'](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {\n $__default['default'](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {\n if ($__default['default'](event.target).is(_this._element)) {\n _this._ignoreBackdropClick = true;\n }\n });\n });\n\n this._showBackdrop(function () {\n return _this._showElement(relatedTarget);\n });\n };\n\n _proto.hide = function hide(event) {\n var _this2 = this;\n\n if (event) {\n event.preventDefault();\n }\n\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n\n var hideEvent = $__default['default'].Event(EVENT_HIDE$2);\n $__default['default'](this._element).trigger(hideEvent);\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = false;\n var transition = $__default['default'](this._element).hasClass(CLASS_NAME_FADE$1);\n\n if (transition) {\n this._isTransitioning = true;\n }\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $__default['default'](document).off(EVENT_FOCUSIN);\n $__default['default'](this._element).removeClass(CLASS_NAME_SHOW$3);\n $__default['default'](this._element).off(EVENT_CLICK_DISMISS);\n $__default['default'](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $__default['default'](this._element).one(Util.TRANSITION_END, function (event) {\n return _this2._hideModal(event);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n this._hideModal();\n }\n };\n\n _proto.dispose = function dispose() {\n [window, this._element, this._dialog].forEach(function (htmlElement) {\n return $__default['default'](htmlElement).off(EVENT_KEY$5);\n });\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n\n $__default['default'](document).off(EVENT_FOCUSIN);\n $__default['default'].removeData(this._element, DATA_KEY$5);\n this._config = null;\n this._element = null;\n this._dialog = null;\n this._backdrop = null;\n this._isShown = null;\n this._isBodyOverflowing = null;\n this._ignoreBackdropClick = null;\n this._isTransitioning = null;\n this._scrollbarWidth = null;\n };\n\n _proto.handleUpdate = function handleUpdate() {\n this._adjustDialog();\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _extends({}, Default$3, config);\n Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n return config;\n };\n\n _proto._triggerBackdropTransition = function _triggerBackdropTransition() {\n var _this3 = this;\n\n if (this._config.backdrop === 'static') {\n var hideEventPrevented = $__default['default'].Event(EVENT_HIDE_PREVENTED);\n $__default['default'](this._element).trigger(hideEventPrevented);\n\n if (hideEventPrevented.isDefaultPrevented()) {\n return;\n }\n\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n\n this._element.classList.add(CLASS_NAME_STATIC);\n\n var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n $__default['default'](this._element).off(Util.TRANSITION_END);\n $__default['default'](this._element).one(Util.TRANSITION_END, function () {\n _this3._element.classList.remove(CLASS_NAME_STATIC);\n\n if (!isModalOverflowing) {\n $__default['default'](_this3._element).one(Util.TRANSITION_END, function () {\n _this3._element.style.overflowY = '';\n }).emulateTransitionEnd(_this3._element, modalTransitionDuration);\n }\n }).emulateTransitionEnd(modalTransitionDuration);\n\n this._element.focus();\n } else {\n this.hide();\n }\n };\n\n _proto._showElement = function _showElement(relatedTarget) {\n var _this4 = this;\n\n var transition = $__default['default'](this._element).hasClass(CLASS_NAME_FADE$1);\n var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element);\n }\n\n this._element.style.display = 'block';\n\n this._element.removeAttribute('aria-hidden');\n\n this._element.setAttribute('aria-modal', true);\n\n this._element.setAttribute('role', 'dialog');\n\n if ($__default['default'](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0;\n } else {\n this._element.scrollTop = 0;\n }\n\n if (transition) {\n Util.reflow(this._element);\n }\n\n $__default['default'](this._element).addClass(CLASS_NAME_SHOW$3);\n\n if (this._config.focus) {\n this._enforceFocus();\n }\n\n var shownEvent = $__default['default'].Event(EVENT_SHOWN$2, {\n relatedTarget: relatedTarget\n });\n\n var transitionComplete = function transitionComplete() {\n if (_this4._config.focus) {\n _this4._element.focus();\n }\n\n _this4._isTransitioning = false;\n $__default['default'](_this4._element).trigger(shownEvent);\n };\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n $__default['default'](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n } else {\n transitionComplete();\n }\n };\n\n _proto._enforceFocus = function _enforceFocus() {\n var _this5 = this;\n\n $__default['default'](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, function (event) {\n if (document !== event.target && _this5._element !== event.target && $__default['default'](_this5._element).has(event.target).length === 0) {\n _this5._element.focus();\n }\n });\n };\n\n _proto._setEscapeEvent = function _setEscapeEvent() {\n var _this6 = this;\n\n if (this._isShown) {\n $__default['default'](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {\n if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {\n event.preventDefault();\n\n _this6.hide();\n } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {\n _this6._triggerBackdropTransition();\n }\n });\n } else if (!this._isShown) {\n $__default['default'](this._element).off(EVENT_KEYDOWN_DISMISS);\n }\n };\n\n _proto._setResizeEvent = function _setResizeEvent() {\n var _this7 = this;\n\n if (this._isShown) {\n $__default['default'](window).on(EVENT_RESIZE, function (event) {\n return _this7.handleUpdate(event);\n });\n } else {\n $__default['default'](window).off(EVENT_RESIZE);\n }\n };\n\n _proto._hideModal = function _hideModal() {\n var _this8 = this;\n\n this._element.style.display = 'none';\n\n this._element.setAttribute('aria-hidden', true);\n\n this._element.removeAttribute('aria-modal');\n\n this._element.removeAttribute('role');\n\n this._isTransitioning = false;\n\n this._showBackdrop(function () {\n $__default['default'](document.body).removeClass(CLASS_NAME_OPEN);\n\n _this8._resetAdjustments();\n\n _this8._resetScrollbar();\n\n $__default['default'](_this8._element).trigger(EVENT_HIDDEN$2);\n });\n };\n\n _proto._removeBackdrop = function _removeBackdrop() {\n if (this._backdrop) {\n $__default['default'](this._backdrop).remove();\n this._backdrop = null;\n }\n };\n\n _proto._showBackdrop = function _showBackdrop(callback) {\n var _this9 = this;\n\n var animate = $__default['default'](this._element).hasClass(CLASS_NAME_FADE$1) ? CLASS_NAME_FADE$1 : '';\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = CLASS_NAME_BACKDROP;\n\n if (animate) {\n this._backdrop.classList.add(animate);\n }\n\n $__default['default'](this._backdrop).appendTo(document.body);\n $__default['default'](this._element).on(EVENT_CLICK_DISMISS, function (event) {\n if (_this9._ignoreBackdropClick) {\n _this9._ignoreBackdropClick = false;\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n _this9._triggerBackdropTransition();\n });\n\n if (animate) {\n Util.reflow(this._backdrop);\n }\n\n $__default['default'](this._backdrop).addClass(CLASS_NAME_SHOW$3);\n\n if (!callback) {\n return;\n }\n\n if (!animate) {\n callback();\n return;\n }\n\n var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n $__default['default'](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n } else if (!this._isShown && this._backdrop) {\n $__default['default'](this._backdrop).removeClass(CLASS_NAME_SHOW$3);\n\n var callbackRemove = function callbackRemove() {\n _this9._removeBackdrop();\n\n if (callback) {\n callback();\n }\n };\n\n if ($__default['default'](this._element).hasClass(CLASS_NAME_FADE$1)) {\n var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n $__default['default'](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n } else {\n callbackRemove();\n }\n } else if (callback) {\n callback();\n }\n } // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n ;\n\n _proto._adjustDialog = function _adjustDialog() {\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n }\n };\n\n _proto._resetAdjustments = function _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n };\n\n _proto._checkScrollbar = function _checkScrollbar() {\n var rect = document.body.getBoundingClientRect();\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;\n this._scrollbarWidth = this._getScrollbarWidth();\n };\n\n _proto._setScrollbar = function _setScrollbar() {\n var _this10 = this;\n\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding\n\n $__default['default'](fixedContent).each(function (index, element) {\n var actualPadding = element.style.paddingRight;\n var calculatedPadding = $__default['default'](element).css('padding-right');\n $__default['default'](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + \"px\");\n }); // Adjust sticky content margin\n\n $__default['default'](stickyContent).each(function (index, element) {\n var actualMargin = element.style.marginRight;\n var calculatedMargin = $__default['default'](element).css('margin-right');\n $__default['default'](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + \"px\");\n }); // Adjust body padding\n\n var actualPadding = document.body.style.paddingRight;\n var calculatedPadding = $__default['default'](document.body).css('padding-right');\n $__default['default'](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n }\n\n $__default['default'](document.body).addClass(CLASS_NAME_OPEN);\n };\n\n _proto._resetScrollbar = function _resetScrollbar() {\n // Restore fixed content padding\n var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n $__default['default'](fixedContent).each(function (index, element) {\n var padding = $__default['default'](element).data('padding-right');\n $__default['default'](element).removeData('padding-right');\n element.style.paddingRight = padding ? padding : '';\n }); // Restore sticky content\n\n var elements = [].slice.call(document.querySelectorAll(\"\" + SELECTOR_STICKY_CONTENT));\n $__default['default'](elements).each(function (index, element) {\n var margin = $__default['default'](element).data('margin-right');\n\n if (typeof margin !== 'undefined') {\n $__default['default'](element).css('margin-right', margin).removeData('margin-right');\n }\n }); // Restore body padding\n\n var padding = $__default['default'](document.body).data('padding-right');\n $__default['default'](document.body).removeData('padding-right');\n document.body.style.paddingRight = padding ? padding : '';\n };\n\n _proto._getScrollbarWidth = function _getScrollbarWidth() {\n // thx d.walsh\n var scrollDiv = document.createElement('div');\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n } // Static\n ;\n\n Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n var data = $__default['default'](this).data(DATA_KEY$5);\n\n var _config = _extends({}, Default$3, $__default['default'](this).data(), typeof config === 'object' && config ? config : {});\n\n if (!data) {\n data = new Modal(this, _config);\n $__default['default'](this).data(DATA_KEY$5, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config](relatedTarget);\n } else if (_config.show) {\n data.show(relatedTarget);\n }\n });\n };\n\n _createClass(Modal, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$5;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$3;\n }\n }]);\n\n return Modal;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE$3, function (event) {\n var _this11 = this;\n\n var target;\n var selector = Util.getSelectorFromElement(this);\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n var config = $__default['default'](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default['default'](target).data(), $__default['default'](this).data());\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault();\n }\n\n var $target = $__default['default'](target).one(EVENT_SHOW$2, function (showEvent) {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return;\n }\n\n $target.one(EVENT_HIDDEN$2, function () {\n if ($__default['default'](_this11).is(':visible')) {\n _this11.focus();\n }\n });\n });\n\n Modal._jQueryInterface.call($__default['default'](target), config, this);\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME$5] = Modal._jQueryInterface;\n $__default['default'].fn[NAME$5].Constructor = Modal;\n\n $__default['default'].fn[NAME$5].noConflict = function () {\n $__default['default'].fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n return Modal._jQueryInterface;\n };\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\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', 'srcset', '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 * 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\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi;\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\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,[\\d+/a-z]+=*$/i;\n\n function allowedAttribute(attr, allowedAttributeList) {\n var attrName = attr.nodeName.toLowerCase();\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -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 (attrRegex) {\n return attrRegex instanceof RegExp;\n }); // Check if a regular expression validates the attribute.\n\n for (var i = 0, len = regExp.length; i < len; 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 var domParser = new window.DOMParser();\n var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n var whitelistKeys = Object.keys(whiteList);\n var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n var _loop = function _loop(i, len) {\n var el = elements[i];\n var elName = el.nodeName.toLowerCase();\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el);\n return \"continue\";\n }\n\n var attributeList = [].slice.call(el.attributes);\n var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n attributeList.forEach(function (attr) {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName);\n }\n });\n };\n\n for (var i = 0, len = elements.length; i < len; i++) {\n var _ret = _loop(i);\n\n if (_ret === \"continue\") continue;\n }\n\n return createdDocument.body.innerHTML;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$6 = 'tooltip';\n var VERSION$6 = '4.5.3';\n var DATA_KEY$6 = 'bs.tooltip';\n var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n var JQUERY_NO_CONFLICT$6 = $__default['default'].fn[NAME$6];\n var CLASS_PREFIX = 'bs-tooltip';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n var DefaultType$4 = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n };\n var AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n };\n var Default$4 = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n };\n var HOVER_STATE_SHOW = 'show';\n var HOVER_STATE_OUT = 'out';\n var Event = {\n HIDE: \"hide\" + EVENT_KEY$6,\n HIDDEN: \"hidden\" + EVENT_KEY$6,\n SHOW: \"show\" + EVENT_KEY$6,\n SHOWN: \"shown\" + EVENT_KEY$6,\n INSERTED: \"inserted\" + EVENT_KEY$6,\n CLICK: \"click\" + EVENT_KEY$6,\n FOCUSIN: \"focusin\" + EVENT_KEY$6,\n FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n };\n var CLASS_NAME_FADE$2 = 'fade';\n var CLASS_NAME_SHOW$4 = 'show';\n var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n var SELECTOR_ARROW = '.arrow';\n var TRIGGER_HOVER = 'hover';\n var TRIGGER_FOCUS = 'focus';\n var TRIGGER_CLICK = 'click';\n var TRIGGER_MANUAL = 'manual';\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Tooltip = /*#__PURE__*/function () {\n function Tooltip(element, config) {\n if (typeof Popper__default['default'] === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n } // private\n\n\n this._isEnabled = true;\n this._timeout = 0;\n this._hoverState = '';\n this._activeTrigger = {};\n this._popper = null; // Protected\n\n this.element = element;\n this.config = this._getConfig(config);\n this.tip = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Tooltip.prototype;\n\n // Public\n _proto.enable = function enable() {\n this._isEnabled = true;\n };\n\n _proto.disable = function disable() {\n this._isEnabled = false;\n };\n\n _proto.toggleEnabled = function toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n };\n\n _proto.toggle = function toggle(event) {\n if (!this._isEnabled) {\n return;\n }\n\n if (event) {\n var dataKey = this.constructor.DATA_KEY;\n var context = $__default['default'](event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $__default['default'](event.currentTarget).data(dataKey, context);\n }\n\n context._activeTrigger.click = !context._activeTrigger.click;\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context);\n } else {\n context._leave(null, context);\n }\n } else {\n if ($__default['default'](this.getTipElement()).hasClass(CLASS_NAME_SHOW$4)) {\n this._leave(null, this);\n\n return;\n }\n\n this._enter(null, this);\n }\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n $__default['default'].removeData(this.element, this.constructor.DATA_KEY);\n $__default['default'](this.element).off(this.constructor.EVENT_KEY);\n $__default['default'](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);\n\n if (this.tip) {\n $__default['default'](this.tip).remove();\n }\n\n this._isEnabled = null;\n this._timeout = null;\n this._hoverState = null;\n this._activeTrigger = null;\n\n if (this._popper) {\n this._popper.destroy();\n }\n\n this._popper = null;\n this.element = null;\n this.config = null;\n this.tip = null;\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if ($__default['default'](this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $__default['default'].Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $__default['default'](this.element).trigger(showEvent);\n var shadowRoot = Util.findShadowRoot(this.element);\n var isInTheDom = $__default['default'].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return;\n }\n\n var tip = this.getTipElement();\n var tipId = Util.getUID(this.constructor.NAME);\n tip.setAttribute('id', tipId);\n this.element.setAttribute('aria-describedby', tipId);\n this.setContent();\n\n if (this.config.animation) {\n $__default['default'](tip).addClass(CLASS_NAME_FADE$2);\n }\n\n var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n var attachment = this._getAttachment(placement);\n\n this.addAttachmentClass(attachment);\n\n var container = this._getContainer();\n\n $__default['default'](tip).data(this.constructor.DATA_KEY, this);\n\n if (!$__default['default'].contains(this.element.ownerDocument.documentElement, this.tip)) {\n $__default['default'](tip).appendTo(container);\n }\n\n $__default['default'](this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper__default['default'](this.element, tip, this._getPopperConfig(attachment));\n $__default['default'](tip).addClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n $__default['default'](document.body).children().on('mouseover', null, $__default['default'].noop);\n }\n\n var complete = function complete() {\n if (_this.config.animation) {\n _this._fixTransition();\n }\n\n var prevHoverState = _this._hoverState;\n _this._hoverState = null;\n $__default['default'](_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HOVER_STATE_OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($__default['default'](this.tip).hasClass(CLASS_NAME_FADE$2)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $__default['default'](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n }\n };\n\n _proto.hide = function hide(callback) {\n var _this2 = this;\n\n var tip = this.getTipElement();\n var hideEvent = $__default['default'].Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $__default['default'](_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n if (_this2._popper !== null) {\n _this2._popper.destroy();\n }\n\n if (callback) {\n callback();\n }\n };\n\n $__default['default'](this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $__default['default'](tip).removeClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n $__default['default'](document.body).children().off('mouseover', null, $__default['default'].noop);\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n\n if ($__default['default'](this.tip).hasClass(CLASS_NAME_FADE$2)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $__default['default'](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n\n this._hoverState = '';\n };\n\n _proto.update = function update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n } // Protected\n ;\n\n _proto.isWithContent = function isWithContent() {\n return Boolean(this.getTitle());\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $__default['default'](this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $__default['default'](this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var tip = this.getTipElement();\n this.setElementContent($__default['default'](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());\n $__default['default'](tip).removeClass(CLASS_NAME_FADE$2 + \" \" + CLASS_NAME_SHOW$4);\n };\n\n _proto.setElementContent = function setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$__default['default'](content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($__default['default'](content).text());\n }\n\n return;\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n }\n\n $element.html(content);\n } else {\n $element.text(content);\n }\n };\n\n _proto.getTitle = function getTitle() {\n var title = this.element.getAttribute('data-original-title');\n\n if (!title) {\n title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n }\n\n return title;\n } // Private\n ;\n\n _proto._getPopperConfig = function _getPopperConfig(attachment) {\n var _this3 = this;\n\n var defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: function onCreate(data) {\n if (data.originalPlacement !== data.placement) {\n _this3._handlePopperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n return _this3._handlePopperPlacementChange(data);\n }\n };\n return _extends({}, defaultBsConfig, this.config.popperConfig);\n };\n\n _proto._getOffset = function _getOffset() {\n var _this4 = this;\n\n var offset = {};\n\n if (typeof this.config.offset === 'function') {\n offset.fn = function (data) {\n data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element) || {});\n return data;\n };\n } else {\n offset.offset = this.config.offset;\n }\n\n return offset;\n };\n\n _proto._getContainer = function _getContainer() {\n if (this.config.container === false) {\n return document.body;\n }\n\n if (Util.isElement(this.config.container)) {\n return $__default['default'](this.config.container);\n }\n\n return $__default['default'](document).find(this.config.container);\n };\n\n _proto._getAttachment = function _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()];\n };\n\n _proto._setListeners = function _setListeners() {\n var _this5 = this;\n\n var triggers = this.config.trigger.split(' ');\n triggers.forEach(function (trigger) {\n if (trigger === 'click') {\n $__default['default'](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {\n return _this5.toggle(event);\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;\n var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;\n $__default['default'](_this5.element).on(eventIn, _this5.config.selector, function (event) {\n return _this5._enter(event);\n }).on(eventOut, _this5.config.selector, function (event) {\n return _this5._leave(event);\n });\n }\n });\n\n this._hideModalHandler = function () {\n if (_this5.element) {\n _this5.hide();\n }\n };\n\n $__default['default'](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);\n\n if (this.config.selector) {\n this.config = _extends({}, this.config, {\n trigger: 'manual',\n selector: ''\n });\n } else {\n this._fixTitle();\n }\n };\n\n _proto._fixTitle = function _fixTitle() {\n var titleType = typeof this.element.getAttribute('data-original-title');\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n this.element.setAttribute('title', '');\n }\n };\n\n _proto._enter = function _enter(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $__default['default'](event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $__default['default'](event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n }\n\n if ($__default['default'](context.getTipElement()).hasClass(CLASS_NAME_SHOW$4) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HOVER_STATE_SHOW;\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show();\n }\n }, context.config.delay.show);\n };\n\n _proto._leave = function _leave(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $__default['default'](event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $__default['default'](event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;\n }\n\n if (context._isWithActiveTrigger()) {\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HOVER_STATE_OUT;\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide();\n }\n }, context.config.delay.hide);\n };\n\n _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n for (var trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true;\n }\n }\n\n return false;\n };\n\n _proto._getConfig = function _getConfig(config) {\n var dataAttributes = $__default['default'](this.element).data();\n Object.keys(dataAttributes).forEach(function (dataAttr) {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr];\n }\n });\n config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n }\n\n return config;\n };\n\n _proto._getDelegateConfig = function _getDelegateConfig() {\n var config = {};\n\n if (this.config) {\n for (var key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key];\n }\n }\n }\n\n return config;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $__default['default'](this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''));\n }\n };\n\n _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper;\n\n this._cleanTipClass();\n\n this.addAttachmentClass(this._getAttachment(popperData.placement));\n };\n\n _proto._fixTransition = function _fixTransition() {\n var tip = this.getTipElement();\n var initConfigAnimation = this.config.animation;\n\n if (tip.getAttribute('x-placement') !== null) {\n return;\n }\n\n $__default['default'](tip).removeClass(CLASS_NAME_FADE$2);\n this.config.animation = false;\n this.hide();\n this.show();\n this.config.animation = initConfigAnimation;\n } // Static\n ;\n\n Tooltip._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $__default['default'](this);\n var data = $element.data(DATA_KEY$6);\n\n var _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Tooltip(this, _config);\n $element.data(DATA_KEY$6, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tooltip, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$6;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$4;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME$6;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY$6;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY$6;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$4;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'].fn[NAME$6] = Tooltip._jQueryInterface;\n $__default['default'].fn[NAME$6].Constructor = Tooltip;\n\n $__default['default'].fn[NAME$6].noConflict = function () {\n $__default['default'].fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n return Tooltip._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$7 = 'popover';\n var VERSION$7 = '4.5.3';\n var DATA_KEY$7 = 'bs.popover';\n var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n var JQUERY_NO_CONFLICT$7 = $__default['default'].fn[NAME$7];\n var CLASS_PREFIX$1 = 'bs-popover';\n var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n var Default$5 = _extends({}, Tooltip.Default, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n });\n\n var DefaultType$5 = _extends({}, Tooltip.DefaultType, {\n content: '(string|element|function)'\n });\n\n var CLASS_NAME_FADE$3 = 'fade';\n var CLASS_NAME_SHOW$5 = 'show';\n var SELECTOR_TITLE = '.popover-header';\n var SELECTOR_CONTENT = '.popover-body';\n var Event$1 = {\n HIDE: \"hide\" + EVENT_KEY$7,\n HIDDEN: \"hidden\" + EVENT_KEY$7,\n SHOW: \"show\" + EVENT_KEY$7,\n SHOWN: \"shown\" + EVENT_KEY$7,\n INSERTED: \"inserted\" + EVENT_KEY$7,\n CLICK: \"click\" + EVENT_KEY$7,\n FOCUSIN: \"focusin\" + EVENT_KEY$7,\n FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Popover = /*#__PURE__*/function (_Tooltip) {\n _inheritsLoose(Popover, _Tooltip);\n\n function Popover() {\n return _Tooltip.apply(this, arguments) || this;\n }\n\n var _proto = Popover.prototype;\n\n // Overrides\n _proto.isWithContent = function isWithContent() {\n return this.getTitle() || this._getContent();\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $__default['default'](this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $__default['default'](this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $__default['default'](this.getTipElement()); // We use append for html objects to maintain js events\n\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());\n\n var content = this._getContent();\n\n if (typeof content === 'function') {\n content = content.call(this.element);\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content);\n $tip.removeClass(CLASS_NAME_FADE$3 + \" \" + CLASS_NAME_SHOW$5);\n } // Private\n ;\n\n _proto._getContent = function _getContent() {\n return this.element.getAttribute('data-content') || this.config.content;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $__default['default'](this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n } // Static\n ;\n\n Popover._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $__default['default'](this).data(DATA_KEY$7);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Popover(this, _config);\n $__default['default'](this).data(DATA_KEY$7, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Popover, null, [{\n key: \"VERSION\",\n // Getters\n get: function get() {\n return VERSION$7;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$5;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME$7;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY$7;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event$1;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY$7;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$5;\n }\n }]);\n\n return Popover;\n }(Tooltip);\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'].fn[NAME$7] = Popover._jQueryInterface;\n $__default['default'].fn[NAME$7].Constructor = Popover;\n\n $__default['default'].fn[NAME$7].noConflict = function () {\n $__default['default'].fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n return Popover._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$8 = 'scrollspy';\n var VERSION$8 = '4.5.3';\n var DATA_KEY$8 = 'bs.scrollspy';\n var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n var DATA_API_KEY$6 = '.data-api';\n var JQUERY_NO_CONFLICT$8 = $__default['default'].fn[NAME$8];\n var Default$6 = {\n offset: 10,\n method: 'auto',\n target: ''\n };\n var DefaultType$6 = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n };\n var EVENT_ACTIVATE = \"activate\" + EVENT_KEY$8;\n var EVENT_SCROLL = \"scroll\" + EVENT_KEY$8;\n var EVENT_LOAD_DATA_API$2 = \"load\" + EVENT_KEY$8 + DATA_API_KEY$6;\n var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n var CLASS_NAME_ACTIVE$2 = 'active';\n var SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]';\n var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n var SELECTOR_NAV_LINKS = '.nav-link';\n var SELECTOR_NAV_ITEMS = '.nav-item';\n var SELECTOR_LIST_ITEMS = '.list-group-item';\n var SELECTOR_DROPDOWN = '.dropdown';\n var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';\n var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n var METHOD_OFFSET = 'offset';\n var METHOD_POSITION = 'position';\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var ScrollSpy = /*#__PURE__*/function () {\n function ScrollSpy(element, config) {\n var _this = this;\n\n this._element = element;\n this._scrollElement = element.tagName === 'BODY' ? window : element;\n this._config = this._getConfig(config);\n this._selector = this._config.target + \" \" + SELECTOR_NAV_LINKS + \",\" + (this._config.target + \" \" + SELECTOR_LIST_ITEMS + \",\") + (this._config.target + \" \" + SELECTOR_DROPDOWN_ITEMS);\n this._offsets = [];\n this._targets = [];\n this._activeTarget = null;\n this._scrollHeight = 0;\n $__default['default'](this._scrollElement).on(EVENT_SCROLL, function (event) {\n return _this._process(event);\n });\n this.refresh();\n\n this._process();\n } // Getters\n\n\n var _proto = ScrollSpy.prototype;\n\n // Public\n _proto.refresh = function refresh() {\n var _this2 = this;\n\n var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n this._offsets = [];\n this._targets = [];\n this._scrollHeight = this._getScrollHeight();\n var targets = [].slice.call(document.querySelectorAll(this._selector));\n targets.map(function (element) {\n var target;\n var targetSelector = Util.getSelectorFromElement(element);\n\n if (targetSelector) {\n target = document.querySelector(targetSelector);\n }\n\n if (target) {\n var targetBCR = target.getBoundingClientRect();\n\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [$__default['default'](target)[offsetMethod]().top + offsetBase, targetSelector];\n }\n }\n\n return null;\n }).filter(function (item) {\n return item;\n }).sort(function (a, b) {\n return a[0] - b[0];\n }).forEach(function (item) {\n _this2._offsets.push(item[0]);\n\n _this2._targets.push(item[1]);\n });\n };\n\n _proto.dispose = function dispose() {\n $__default['default'].removeData(this._element, DATA_KEY$8);\n $__default['default'](this._scrollElement).off(EVENT_KEY$8);\n this._element = null;\n this._scrollElement = null;\n this._config = null;\n this._selector = null;\n this._offsets = null;\n this._targets = null;\n this._activeTarget = null;\n this._scrollHeight = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _extends({}, Default$6, typeof config === 'object' && config ? config : {});\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n var id = $__default['default'](config.target).attr('id');\n\n if (!id) {\n id = Util.getUID(NAME$8);\n $__default['default'](config.target).attr('id', id);\n }\n\n config.target = \"#\" + id;\n }\n\n Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n return config;\n };\n\n _proto._getScrollTop = function _getScrollTop() {\n return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n };\n\n _proto._getScrollHeight = function _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n };\n\n _proto._getOffsetHeight = function _getOffsetHeight() {\n return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n };\n\n _proto._process = function _process() {\n var scrollTop = this._getScrollTop() + this._config.offset;\n\n var scrollHeight = this._getScrollHeight();\n\n var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh();\n }\n\n if (scrollTop >= maxScroll) {\n var target = this._targets[this._targets.length - 1];\n\n if (this._activeTarget !== target) {\n this._activate(target);\n }\n\n return;\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null;\n\n this._clear();\n\n return;\n }\n\n for (var i = this._offsets.length; i--;) {\n var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n if (isActiveTarget) {\n this._activate(this._targets[i]);\n }\n }\n };\n\n _proto._activate = function _activate(target) {\n this._activeTarget = target;\n\n this._clear();\n\n var queries = this._selector.split(',').map(function (selector) {\n return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n });\n\n var $link = $__default['default']([].slice.call(document.querySelectorAll(queries.join(','))));\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN).find(SELECTOR_DROPDOWN_TOGGLE).addClass(CLASS_NAME_ACTIVE$2);\n $link.addClass(CLASS_NAME_ACTIVE$2);\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE$2); // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n $link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_LINKS + \", \" + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$2); // Handle special case when .nav-link is inside .nav-item\n\n $link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$2);\n }\n\n $__default['default'](this._scrollElement).trigger(EVENT_ACTIVATE, {\n relatedTarget: target\n });\n };\n\n _proto._clear = function _clear() {\n [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n return node.classList.contains(CLASS_NAME_ACTIVE$2);\n }).forEach(function (node) {\n return node.classList.remove(CLASS_NAME_ACTIVE$2);\n });\n } // Static\n ;\n\n ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $__default['default'](this).data(DATA_KEY$8);\n\n var _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new ScrollSpy(this, _config);\n $__default['default'](this).data(DATA_KEY$8, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(ScrollSpy, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$8;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$6;\n }\n }]);\n\n return ScrollSpy;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'](window).on(EVENT_LOAD_DATA_API$2, function () {\n var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));\n var scrollSpysLength = scrollSpys.length;\n\n for (var i = scrollSpysLength; i--;) {\n var $spy = $__default['default'](scrollSpys[i]);\n\n ScrollSpy._jQueryInterface.call($spy, $spy.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME$8] = ScrollSpy._jQueryInterface;\n $__default['default'].fn[NAME$8].Constructor = ScrollSpy;\n\n $__default['default'].fn[NAME$8].noConflict = function () {\n $__default['default'].fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n return ScrollSpy._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$9 = 'tab';\n var VERSION$9 = '4.5.3';\n var DATA_KEY$9 = 'bs.tab';\n var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n var DATA_API_KEY$7 = '.data-api';\n var JQUERY_NO_CONFLICT$9 = $__default['default'].fn[NAME$9];\n var EVENT_HIDE$3 = \"hide\" + EVENT_KEY$9;\n var EVENT_HIDDEN$3 = \"hidden\" + EVENT_KEY$9;\n var EVENT_SHOW$3 = \"show\" + EVENT_KEY$9;\n var EVENT_SHOWN$3 = \"shown\" + EVENT_KEY$9;\n var EVENT_CLICK_DATA_API$6 = \"click\" + EVENT_KEY$9 + DATA_API_KEY$7;\n var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n var CLASS_NAME_ACTIVE$3 = 'active';\n var CLASS_NAME_DISABLED$1 = 'disabled';\n var CLASS_NAME_FADE$4 = 'fade';\n var CLASS_NAME_SHOW$6 = 'show';\n var SELECTOR_DROPDOWN$1 = '.dropdown';\n var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n var SELECTOR_ACTIVE$2 = '.active';\n var SELECTOR_ACTIVE_UL = '> li > .active';\n var SELECTOR_DATA_TOGGLE$4 = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]';\n var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Tab = /*#__PURE__*/function () {\n function Tab(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Tab.prototype;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default['default'](this._element).hasClass(CLASS_NAME_ACTIVE$3) || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED$1)) {\n return;\n }\n\n var target;\n var previous;\n var listElement = $__default['default'](this._element).closest(SELECTOR_NAV_LIST_GROUP$1)[0];\n var selector = Util.getSelectorFromElement(this._element);\n\n if (listElement) {\n var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE$2;\n previous = $__default['default'].makeArray($__default['default'](listElement).find(itemSelector));\n previous = previous[previous.length - 1];\n }\n\n var hideEvent = $__default['default'].Event(EVENT_HIDE$3, {\n relatedTarget: this._element\n });\n var showEvent = $__default['default'].Event(EVENT_SHOW$3, {\n relatedTarget: previous\n });\n\n if (previous) {\n $__default['default'](previous).trigger(hideEvent);\n }\n\n $__default['default'](this._element).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n this._activate(this._element, listElement);\n\n var complete = function complete() {\n var hiddenEvent = $__default['default'].Event(EVENT_HIDDEN$3, {\n relatedTarget: _this._element\n });\n var shownEvent = $__default['default'].Event(EVENT_SHOWN$3, {\n relatedTarget: previous\n });\n $__default['default'](previous).trigger(hiddenEvent);\n $__default['default'](_this._element).trigger(shownEvent);\n };\n\n if (target) {\n this._activate(target, target.parentNode, complete);\n } else {\n complete();\n }\n };\n\n _proto.dispose = function dispose() {\n $__default['default'].removeData(this._element, DATA_KEY$9);\n this._element = null;\n } // Private\n ;\n\n _proto._activate = function _activate(element, container, callback) {\n var _this2 = this;\n\n var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default['default'](container).find(SELECTOR_ACTIVE_UL) : $__default['default'](container).children(SELECTOR_ACTIVE$2);\n var active = activeElements[0];\n var isTransitioning = callback && active && $__default['default'](active).hasClass(CLASS_NAME_FADE$4);\n\n var complete = function complete() {\n return _this2._transitionComplete(element, active, callback);\n };\n\n if (active && isTransitioning) {\n var transitionDuration = Util.getTransitionDurationFromElement(active);\n $__default['default'](active).removeClass(CLASS_NAME_SHOW$6).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n if (active) {\n $__default['default'](active).removeClass(CLASS_NAME_ACTIVE$3);\n var dropdownChild = $__default['default'](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];\n\n if (dropdownChild) {\n $__default['default'](dropdownChild).removeClass(CLASS_NAME_ACTIVE$3);\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false);\n }\n }\n\n $__default['default'](element).addClass(CLASS_NAME_ACTIVE$3);\n\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true);\n }\n\n Util.reflow(element);\n\n if (element.classList.contains(CLASS_NAME_FADE$4)) {\n element.classList.add(CLASS_NAME_SHOW$6);\n }\n\n if (element.parentNode && $__default['default'](element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n var dropdownElement = $__default['default'](element).closest(SELECTOR_DROPDOWN$1)[0];\n\n if (dropdownElement) {\n var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE$1));\n $__default['default'](dropdownToggleList).addClass(CLASS_NAME_ACTIVE$3);\n }\n\n element.setAttribute('aria-expanded', true);\n }\n\n if (callback) {\n callback();\n }\n } // Static\n ;\n\n Tab._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $__default['default'](this);\n var data = $this.data(DATA_KEY$9);\n\n if (!data) {\n data = new Tab(this);\n $this.data(DATA_KEY$9, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tab, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$9;\n }\n }]);\n\n return Tab;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$4, function (event) {\n event.preventDefault();\n\n Tab._jQueryInterface.call($__default['default'](this), 'show');\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME$9] = Tab._jQueryInterface;\n $__default['default'].fn[NAME$9].Constructor = Tab;\n\n $__default['default'].fn[NAME$9].noConflict = function () {\n $__default['default'].fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n return Tab._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$a = 'toast';\n var VERSION$a = '4.5.3';\n var DATA_KEY$a = 'bs.toast';\n var EVENT_KEY$a = \".\" + DATA_KEY$a;\n var JQUERY_NO_CONFLICT$a = $__default['default'].fn[NAME$a];\n var EVENT_CLICK_DISMISS$1 = \"click.dismiss\" + EVENT_KEY$a;\n var EVENT_HIDE$4 = \"hide\" + EVENT_KEY$a;\n var EVENT_HIDDEN$4 = \"hidden\" + EVENT_KEY$a;\n var EVENT_SHOW$4 = \"show\" + EVENT_KEY$a;\n var EVENT_SHOWN$4 = \"shown\" + EVENT_KEY$a;\n var CLASS_NAME_FADE$5 = 'fade';\n var CLASS_NAME_HIDE = 'hide';\n var CLASS_NAME_SHOW$7 = 'show';\n var CLASS_NAME_SHOWING = 'showing';\n var DefaultType$7 = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n };\n var Default$7 = {\n animation: true,\n autohide: true,\n delay: 500\n };\n var SELECTOR_DATA_DISMISS$1 = '[data-dismiss=\"toast\"]';\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Toast = /*#__PURE__*/function () {\n function Toast(element, config) {\n this._element = element;\n this._config = this._getConfig(config);\n this._timeout = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Toast.prototype;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n var showEvent = $__default['default'].Event(EVENT_SHOW$4);\n $__default['default'](this._element).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._clearTimeout();\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE$5);\n }\n\n var complete = function complete() {\n _this._element.classList.remove(CLASS_NAME_SHOWING);\n\n _this._element.classList.add(CLASS_NAME_SHOW$7);\n\n $__default['default'](_this._element).trigger(EVENT_SHOWN$4);\n\n if (_this._config.autohide) {\n _this._timeout = setTimeout(function () {\n _this.hide();\n }, _this._config.delay);\n }\n };\n\n this._element.classList.remove(CLASS_NAME_HIDE);\n\n Util.reflow(this._element);\n\n this._element.classList.add(CLASS_NAME_SHOWING);\n\n if (this._config.animation) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $__default['default'](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto.hide = function hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW$7)) {\n return;\n }\n\n var hideEvent = $__default['default'].Event(EVENT_HIDE$4);\n $__default['default'](this._element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._close();\n };\n\n _proto.dispose = function dispose() {\n this._clearTimeout();\n\n if (this._element.classList.contains(CLASS_NAME_SHOW$7)) {\n this._element.classList.remove(CLASS_NAME_SHOW$7);\n }\n\n $__default['default'](this._element).off(EVENT_CLICK_DISMISS$1);\n $__default['default'].removeData(this._element, DATA_KEY$a);\n this._element = null;\n this._config = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _extends({}, Default$7, $__default['default'](this._element).data(), typeof config === 'object' && config ? config : {});\n Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._setListeners = function _setListeners() {\n var _this2 = this;\n\n $__default['default'](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function () {\n return _this2.hide();\n });\n };\n\n _proto._close = function _close() {\n var _this3 = this;\n\n var complete = function complete() {\n _this3._element.classList.add(CLASS_NAME_HIDE);\n\n $__default['default'](_this3._element).trigger(EVENT_HIDDEN$4);\n };\n\n this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n if (this._config.animation) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $__default['default'](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto._clearTimeout = function _clearTimeout() {\n clearTimeout(this._timeout);\n this._timeout = null;\n } // Static\n ;\n\n Toast._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $__default['default'](this);\n var data = $element.data(DATA_KEY$a);\n\n var _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new Toast(this, _config);\n $element.data(DATA_KEY$a, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config](this);\n }\n });\n };\n\n _createClass(Toast, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$a;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$7;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$7;\n }\n }]);\n\n return Toast;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'].fn[NAME$a] = Toast._jQueryInterface;\n $__default['default'].fn[NAME$a].Constructor = Toast;\n\n $__default['default'].fn[NAME$a].noConflict = function () {\n $__default['default'].fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n return Toast._jQueryInterface;\n };\n\n exports.Alert = Alert;\n exports.Button = Button;\n exports.Carousel = Carousel;\n exports.Collapse = Collapse;\n exports.Dropdown = Dropdown;\n exports.Modal = Modal;\n exports.Popover = Popover;\n exports.Scrollspy = ScrollSpy;\n exports.Tab = Tab;\n exports.Toast = Toast;\n exports.Tooltip = Tooltip;\n exports.Util = Util;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=bootstrap.js.map\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, & pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b><script></b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n // The sourceURL gets injected into the source that's eval-ed, so be careful\n // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n // and escape the comment, thus injecting code that gets evaled.\n var sourceURL = '//# sourceURL=' +\n (hasOwnProperty.call(options, 'sourceURL')\n ? (options.sourceURL + '').replace(/\\s/g, ' ')\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Throw an error if a forbidden character was found in `variable`, to prevent\n // potential command injection attacks.\n else if (reForbiddenIdentifierChars.test(variable)) {\n throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n }\n\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return baseTrim(string);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.slice(0, trimmedEndIndex(string) + 1);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&`, `<`, `>`, `"`, and `'` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n *\n * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = lodashFunc.name + '';\n if (!hasOwnProperty.call(realNames, key)) {\n realNames[key] = [];\n }\n realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","import { uniq } from 'lodash';\r\nconst productFilter = document.querySelector(\".product-filter\");\r\nif (productFilter) {\r\n const filterList = document.querySelectorAll('.filter-item');\r\n if (filterList) {\r\n for (let j = 0; j < filterList.length; j++) {\r\n const filterItem = filterList[j];\r\n const expandToggle = filterItem.querySelector(\".item-heading\");\r\n if (expandToggle) {\r\n applyTransition();\r\n expandToggle.addEventListener('click', () => {\r\n filterItem.classList.toggle(\"open\");\r\n applyTransition();\r\n });\r\n }\r\n function applyTransition() {\r\n if (!filterItem.classList.contains(\"open\")) {\r\n filterItem.style.height = \"\";\r\n }\r\n else {\r\n filterItem.style.height = `${filterItem.scrollHeight}px`;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n// FRONT END FILTERs\r\nif (document.querySelector(\".product-collection\")) {\r\n // get filter checkboxes\r\n const filterCheckBoxes = [].slice.call(document.querySelectorAll(\".product-sub-categories .product-filter-checkbox\"));\r\n // filter event\r\n filterCheckBoxes.forEach(item => {\r\n item.addEventListener(\"change\", () => { onFilterChange(item.value, item.checked); });\r\n });\r\n // clear filter\r\n document.querySelectorAll(\".product-sub-categories .filter-clear\").forEach(item => item.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n filterCheckBoxes.forEach(item => {\r\n item.checked = false;\r\n });\r\n onFilterChange();\r\n // close drawer\r\n document.dispatchEvent(new CustomEvent('drawer-close', { detail: \"filter\" }));\r\n }));\r\n // init \r\n readFilterFromQueryString();\r\n // methods\r\n function onFilterChange(category = '', checked = false) {\r\n // apply filter from checkboxes\r\n // filtered Categories\r\n let filteredCategories = filterCheckBoxes.filter(item => item.checked).map(item => item.value);\r\n if (checked) {\r\n filteredCategories.push(category);\r\n }\r\n else {\r\n filteredCategories = filteredCategories.filter(x => x !== category);\r\n }\r\n // get unique\r\n filteredCategories = uniq(filteredCategories);\r\n // update query string\r\n insertUrlParam('sub', filteredCategories.join(\",\"));\r\n // check checkboxes\r\n filterCheckBoxes.forEach(item => {\r\n item.checked = filteredCategories.includes(item.value);\r\n });\r\n // apply\r\n applyFilter(filteredCategories);\r\n }\r\n function readFilterFromQueryString() {\r\n const query = getParameterByName('sub');\r\n if (query && query.length) {\r\n const filteredCategories = query.split(\",\");\r\n // check checkboxes\r\n filterCheckBoxes.forEach(item => {\r\n item.checked = filteredCategories.includes(item.value);\r\n });\r\n // apply\r\n applyFilter(filteredCategories);\r\n }\r\n }\r\n function applyFilter(categories = []) {\r\n let transitionDelay = .05;\r\n const products = [].slice.call(document.querySelectorAll(\".product-grid .grid-item .card-product\"));\r\n products.forEach(p => {\r\n const category = p.dataset['category'];\r\n const show = categories.length === 0 || categories.includes(category);\r\n applyTransition(p.parentElement, show);\r\n });\r\n function applyTransition(element, show = true) {\r\n if (show) {\r\n // show\r\n if (element.classList.contains(\"grid-item--hidding\") || element.classList.contains(\"grid-item--hidden\")) {\r\n if (transitionDelay < 2) {\r\n transitionDelay += .05;\r\n }\r\n element.style.transitionDelay = transitionDelay + \"s\";\r\n element.classList.remove(\"grid-item--hidden\");\r\n element.classList.add(\"grid-item--hidding\");\r\n requestAnimationFrame(() => {\r\n element.classList.remove(\"grid-item--hidding\");\r\n });\r\n }\r\n else {\r\n element.style.transitionDelay = \"\";\r\n }\r\n }\r\n else {\r\n // hide\r\n if (!element.classList.contains(\"grid-item--hidding\")) {\r\n element.style.transitionDelay = \"\";\r\n element.classList.add(\"grid-item--hidding\");\r\n setTimeout(cleanUp, 200);\r\n }\r\n }\r\n function cleanUp() {\r\n if (element.classList.contains(\"grid-item--hidding\")) {\r\n element.classList.add(\"grid-item--hidden\");\r\n element.classList.remove(\"grid-item--hidding\");\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction insertUrlParam(key, value) {\r\n if (history.replaceState) {\r\n const searchParams = new URLSearchParams(\"\");\r\n searchParams.set(key, value);\r\n const newurl = window.location.protocol + \"//\" + window.location.host + window.location.pathname + '?' + searchParams.toString();\r\n window.history.replaceState({ path: newurl }, '', newurl);\r\n }\r\n}\r\nfunction getParameterByName(name, url = window.location.href) {\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), results = regex.exec(url);\r\n if (!results)\r\n return null;\r\n if (!results[2])\r\n return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n}\r\nexport default undefined;\r\n","function handleNavDropdown() {\r\n const productRange = document.querySelector(\"#productRangeLink\");\r\n const navDropdown = document.querySelector(\".nav-dropdown\");\r\n const navUnderline = document.querySelector(\".nav-item-underline\");\r\n // initialize dropdown height and remove FOUC\r\n navDropdown.style.height = \"auto\";\r\n const dropdownHeight = navDropdown.clientHeight;\r\n navDropdown.style.height = \"0\";\r\n productRange.addEventListener(\"click\", () => {\r\n if (navDropdown.classList.contains(\"dropdown-open\")) {\r\n navDropdown.classList.remove(\"dropdown-open\");\r\n navUnderline.classList.remove(\"full-width\");\r\n navDropdown.style.height = \"0\";\r\n }\r\n else {\r\n navDropdown.classList.add(\"dropdown-open\");\r\n navUnderline.classList.add(\"full-width\");\r\n navDropdown.style.height = `${dropdownHeight}px`;\r\n }\r\n });\r\n}\r\nfunction handleMobileMenu() {\r\n const openMenuBtn = document.querySelector(\".open-mobile-menu\");\r\n const closeMenuBtn = document.querySelector(\".close-mobile-menu\");\r\n const mobileMenu = document.querySelector(\".mobile-menu\");\r\n openMenuBtn.addEventListener(\"click\", () => {\r\n if (mobileMenu.classList.contains(\"mobile-menu-open\")) {\r\n mobileMenu.classList.remove(\"mobile-menu-open\");\r\n }\r\n else {\r\n mobileMenu.classList.add(\"mobile-menu-open\");\r\n }\r\n disableBodyScrolling();\r\n });\r\n closeMenuBtn.addEventListener(\"click\", () => {\r\n if (mobileMenu.classList.contains(\"mobile-menu-open\")) {\r\n mobileMenu.classList.remove(\"mobile-menu-open\");\r\n }\r\n else {\r\n mobileMenu.classList.add(\"mobile-menu-open\");\r\n }\r\n enableBodyScrolling();\r\n });\r\n}\r\nfunction handleMobileDropdown() {\r\n const mobileProductRange = document.querySelector(\".product-range-heading\");\r\n const mobileProductRangeDropdown = document.querySelector(\".mobile-product-range-categories\");\r\n // initialize dropdown height and remove FOUC\r\n mobileProductRangeDropdown.style.height = \"auto\";\r\n const dropdownHeight = mobileProductRangeDropdown.clientHeight;\r\n mobileProductRangeDropdown.style.height = \"0\";\r\n mobileProductRange.addEventListener(\"click\", () => {\r\n if (mobileProductRangeDropdown.classList.contains(\"dropdown-open\")) {\r\n mobileProductRange.classList.remove(\"dropdown-open\");\r\n mobileProductRangeDropdown.classList.remove(\"dropdown-open\");\r\n mobileProductRangeDropdown.style.height = \"0\";\r\n }\r\n else {\r\n mobileProductRange.classList.add(\"dropdown-open\");\r\n mobileProductRangeDropdown.classList.add(\"dropdown-open\");\r\n mobileProductRangeDropdown.style.height = `${dropdownHeight}px`;\r\n }\r\n });\r\n}\r\nhandleNavDropdown();\r\nhandleMobileMenu();\r\nhandleMobileDropdown();\r\nfunction disableBodyScrolling() {\r\n const documentScrollY = window.scrollY;\r\n const body = document.body;\r\n body.style.position = 'fixed';\r\n body.style.top = `-${documentScrollY}px`;\r\n body.dataset['scroll'] = documentScrollY.toString();\r\n}\r\nfunction enableBodyScrolling() {\r\n const body = document.body;\r\n const documentScrollY = parseFloat(body.dataset['scroll']);\r\n body.style.position = '';\r\n body.style.top = '';\r\n window.scrollTo(0, documentScrollY);\r\n}\r\nexport {};\r\n","// trigger\r\nconst triggers = document.querySelectorAll(\"[data-drawer]\");\r\nconst overlay = document.querySelector(\".global-overlay\");\r\nfor (let item of triggers) {\r\n const name = item.dataset[\"drawer\"];\r\n const modifierClass = `drawer-${name}--open`;\r\n // open\r\n item.addEventListener(\"click\", (e) => {\r\n e.preventDefault();\r\n document.body.classList.toggle(modifierClass);\r\n });\r\n // close\r\n overlay.addEventListener(\"click\", () => {\r\n document.body.classList.remove(modifierClass);\r\n });\r\n}\r\nfunction handleOpen(e) {\r\n const modifierClass = `drawer-${e.detail}--open`;\r\n document.body.classList.add(modifierClass);\r\n}\r\nfunction handleClose(e) {\r\n const modifierClass = `drawer-${e.detail}--open`;\r\n document.body.classList.remove(modifierClass);\r\n}\r\ndocument.addEventListener(\"drawer-open\", handleOpen);\r\ndocument.addEventListener(\"drawer-close\", handleClose);\r\nexport default undefined;\r\n","/*\n _ _ _ _\n ___| (_) ___| | __ (_)___\n/ __| | |/ __| |/ / | / __|\n\\__ \\ | | (__| < _ | \\__ \\\n|___/_|_|\\___|_|\\_(_)/ |___/\n |__/\n\n Version: 1.9.0\n Author: Ken Wheeler\n Website: http://kenwheeler.github.io\n Docs: http://kenwheeler.github.io/slick\n Repo: http://github.com/kenwheeler/slick\n Issues: http://github.com/kenwheeler/slick/issues\n\n */\n/* global window, document, define, jQuery, setInterval, clearInterval */\n;(function(factory) {\n 'use strict';\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (typeof exports !== 'undefined') {\n module.exports = factory(require('jquery'));\n } else {\n factory(jQuery);\n }\n\n}(function($) {\n 'use strict';\n var Slick = window.Slick || {};\n\n Slick = (function() {\n\n var instanceUid = 0;\n\n function Slick(element, settings) {\n\n var _ = this, dataSettings;\n\n _.defaults = {\n accessibility: true,\n adaptiveHeight: false,\n appendArrows: $(element),\n appendDots: $(element),\n arrows: true,\n asNavFor: null,\n prevArrow: '<button class=\"slick-prev\" aria-label=\"Previous\" type=\"button\">Previous</button>',\n nextArrow: '<button class=\"slick-next\" aria-label=\"Next\" type=\"button\">Next</button>',\n autoplay: false,\n autoplaySpeed: 3000,\n centerMode: false,\n centerPadding: '50px',\n cssEase: 'ease',\n customPaging: function(slider, i) {\n return $('<button type=\"button\" />').text(i + 1);\n },\n dots: false,\n dotsClass: 'slick-dots',\n draggable: true,\n easing: 'linear',\n edgeFriction: 0.35,\n fade: false,\n focusOnSelect: false,\n focusOnChange: false,\n infinite: true,\n initialSlide: 0,\n lazyLoad: 'ondemand',\n mobileFirst: false,\n pauseOnHover: true,\n pauseOnFocus: true,\n pauseOnDotsHover: false,\n respondTo: 'window',\n responsive: null,\n rows: 1,\n rtl: false,\n slide: '',\n slidesPerRow: 1,\n slidesToShow: 1,\n slidesToScroll: 1,\n speed: 500,\n swipe: true,\n swipeToSlide: false,\n touchMove: true,\n touchThreshold: 5,\n useCSS: true,\n useTransform: true,\n variableWidth: false,\n vertical: false,\n verticalSwiping: false,\n waitForAnimate: true,\n zIndex: 1000\n };\n\n _.initials = {\n animating: false,\n dragging: false,\n autoPlayTimer: null,\n currentDirection: 0,\n currentLeft: null,\n currentSlide: 0,\n direction: 1,\n $dots: null,\n listWidth: null,\n listHeight: null,\n loadIndex: 0,\n $nextArrow: null,\n $prevArrow: null,\n scrolling: false,\n slideCount: null,\n slideWidth: null,\n $slideTrack: null,\n $slides: null,\n sliding: false,\n slideOffset: 0,\n swipeLeft: null,\n swiping: false,\n $list: null,\n touchObject: {},\n transformsEnabled: false,\n unslicked: false\n };\n\n $.extend(_, _.initials);\n\n _.activeBreakpoint = null;\n _.animType = null;\n _.animProp = null;\n _.breakpoints = [];\n _.breakpointSettings = [];\n _.cssTransitions = false;\n _.focussed = false;\n _.interrupted = false;\n _.hidden = 'hidden';\n _.paused = true;\n _.positionProp = null;\n _.respondTo = null;\n _.rowCount = 1;\n _.shouldClick = true;\n _.$slider = $(element);\n _.$slidesCache = null;\n _.transformType = null;\n _.transitionType = null;\n _.visibilityChange = 'visibilitychange';\n _.windowWidth = 0;\n _.windowTimer = null;\n\n dataSettings = $(element).data('slick') || {};\n\n _.options = $.extend({}, _.defaults, settings, dataSettings);\n\n _.currentSlide = _.options.initialSlide;\n\n _.originalSettings = _.options;\n\n if (typeof document.mozHidden !== 'undefined') {\n _.hidden = 'mozHidden';\n _.visibilityChange = 'mozvisibilitychange';\n } else if (typeof document.webkitHidden !== 'undefined') {\n _.hidden = 'webkitHidden';\n _.visibilityChange = 'webkitvisibilitychange';\n }\n\n _.autoPlay = $.proxy(_.autoPlay, _);\n _.autoPlayClear = $.proxy(_.autoPlayClear, _);\n _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);\n _.changeSlide = $.proxy(_.changeSlide, _);\n _.clickHandler = $.proxy(_.clickHandler, _);\n _.selectHandler = $.proxy(_.selectHandler, _);\n _.setPosition = $.proxy(_.setPosition, _);\n _.swipeHandler = $.proxy(_.swipeHandler, _);\n _.dragHandler = $.proxy(_.dragHandler, _);\n _.keyHandler = $.proxy(_.keyHandler, _);\n\n _.instanceUid = instanceUid++;\n\n // A simple way to check for HTML strings\n // Strict HTML recognition (must start with <)\n // Extracted from jQuery v1.11 source\n _.htmlExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*)$/;\n\n\n _.registerBreakpoints();\n _.init(true);\n\n }\n\n return Slick;\n\n }());\n\n Slick.prototype.activateADA = function() {\n var _ = this;\n\n _.$slideTrack.find('.slick-active').attr({\n 'aria-hidden': 'false'\n }).find('a, input, button, select').attr({\n 'tabindex': '0'\n });\n\n };\n\n Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {\n\n var _ = this;\n\n if (typeof(index) === 'boolean') {\n addBefore = index;\n index = null;\n } else if (index < 0 || (index >= _.slideCount)) {\n return false;\n }\n\n _.unload();\n\n if (typeof(index) === 'number') {\n if (index === 0 && _.$slides.length === 0) {\n $(markup).appendTo(_.$slideTrack);\n } else if (addBefore) {\n $(markup).insertBefore(_.$slides.eq(index));\n } else {\n $(markup).insertAfter(_.$slides.eq(index));\n }\n } else {\n if (addBefore === true) {\n $(markup).prependTo(_.$slideTrack);\n } else {\n $(markup).appendTo(_.$slideTrack);\n }\n }\n\n _.$slides = _.$slideTrack.children(this.options.slide);\n\n _.$slideTrack.children(this.options.slide).detach();\n\n _.$slideTrack.append(_.$slides);\n\n _.$slides.each(function(index, element) {\n $(element).attr('data-slick-index', index);\n });\n\n _.$slidesCache = _.$slides;\n\n _.reinit();\n\n };\n\n Slick.prototype.animateHeight = function() {\n var _ = this;\n if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n _.$list.animate({\n height: targetHeight\n }, _.options.speed);\n }\n };\n\n Slick.prototype.animateSlide = function(targetLeft, callback) {\n\n var animProps = {},\n _ = this;\n\n _.animateHeight();\n\n if (_.options.rtl === true && _.options.vertical === false) {\n targetLeft = -targetLeft;\n }\n if (_.transformsEnabled === false) {\n if (_.options.vertical === false) {\n _.$slideTrack.animate({\n left: targetLeft\n }, _.options.speed, _.options.easing, callback);\n } else {\n _.$slideTrack.animate({\n top: targetLeft\n }, _.options.speed, _.options.easing, callback);\n }\n\n } else {\n\n if (_.cssTransitions === false) {\n if (_.options.rtl === true) {\n _.currentLeft = -(_.currentLeft);\n }\n $({\n animStart: _.currentLeft\n }).animate({\n animStart: targetLeft\n }, {\n duration: _.options.speed,\n easing: _.options.easing,\n step: function(now) {\n now = Math.ceil(now);\n if (_.options.vertical === false) {\n animProps[_.animType] = 'translate(' +\n now + 'px, 0px)';\n _.$slideTrack.css(animProps);\n } else {\n animProps[_.animType] = 'translate(0px,' +\n now + 'px)';\n _.$slideTrack.css(animProps);\n }\n },\n complete: function() {\n if (callback) {\n callback.call();\n }\n }\n });\n\n } else {\n\n _.applyTransition();\n targetLeft = Math.ceil(targetLeft);\n\n if (_.options.vertical === false) {\n animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';\n } else {\n animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';\n }\n _.$slideTrack.css(animProps);\n\n if (callback) {\n setTimeout(function() {\n\n _.disableTransition();\n\n callback.call();\n }, _.options.speed);\n }\n\n }\n\n }\n\n };\n\n Slick.prototype.getNavTarget = function() {\n\n var _ = this,\n asNavFor = _.options.asNavFor;\n\n if ( asNavFor && asNavFor !== null ) {\n asNavFor = $(asNavFor).not(_.$slider);\n }\n\n return asNavFor;\n\n };\n\n Slick.prototype.asNavFor = function(index) {\n\n var _ = this,\n asNavFor = _.getNavTarget();\n\n if ( asNavFor !== null && typeof asNavFor === 'object' ) {\n asNavFor.each(function() {\n var target = $(this).slick('getSlick');\n if(!target.unslicked) {\n target.slideHandler(index, true);\n }\n });\n }\n\n };\n\n Slick.prototype.applyTransition = function(slide) {\n\n var _ = this,\n transition = {};\n\n if (_.options.fade === false) {\n transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;\n } else {\n transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;\n }\n\n if (_.options.fade === false) {\n _.$slideTrack.css(transition);\n } else {\n _.$slides.eq(slide).css(transition);\n }\n\n };\n\n Slick.prototype.autoPlay = function() {\n\n var _ = this;\n\n _.autoPlayClear();\n\n if ( _.slideCount > _.options.slidesToShow ) {\n _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );\n }\n\n };\n\n Slick.prototype.autoPlayClear = function() {\n\n var _ = this;\n\n if (_.autoPlayTimer) {\n clearInterval(_.autoPlayTimer);\n }\n\n };\n\n Slick.prototype.autoPlayIterator = function() {\n\n var _ = this,\n slideTo = _.currentSlide + _.options.slidesToScroll;\n\n if ( !_.paused && !_.interrupted && !_.focussed ) {\n\n if ( _.options.infinite === false ) {\n\n if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {\n _.direction = 0;\n }\n\n else if ( _.direction === 0 ) {\n\n slideTo = _.currentSlide - _.options.slidesToScroll;\n\n if ( _.currentSlide - 1 === 0 ) {\n _.direction = 1;\n }\n\n }\n\n }\n\n _.slideHandler( slideTo );\n\n }\n\n };\n\n Slick.prototype.buildArrows = function() {\n\n var _ = this;\n\n if (_.options.arrows === true ) {\n\n _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');\n _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');\n\n if( _.slideCount > _.options.slidesToShow ) {\n\n _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n\n if (_.htmlExpr.test(_.options.prevArrow)) {\n _.$prevArrow.prependTo(_.options.appendArrows);\n }\n\n if (_.htmlExpr.test(_.options.nextArrow)) {\n _.$nextArrow.appendTo(_.options.appendArrows);\n }\n\n if (_.options.infinite !== true) {\n _.$prevArrow\n .addClass('slick-disabled')\n .attr('aria-disabled', 'true');\n }\n\n } else {\n\n _.$prevArrow.add( _.$nextArrow )\n\n .addClass('slick-hidden')\n .attr({\n 'aria-disabled': 'true',\n 'tabindex': '-1'\n });\n\n }\n\n }\n\n };\n\n Slick.prototype.buildDots = function() {\n\n var _ = this,\n i, dot;\n\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n _.$slider.addClass('slick-dotted');\n\n dot = $('<ul />').addClass(_.options.dotsClass);\n\n for (i = 0; i <= _.getDotCount(); i += 1) {\n dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));\n }\n\n _.$dots = dot.appendTo(_.options.appendDots);\n\n _.$dots.find('li').first().addClass('slick-active');\n\n }\n\n };\n\n Slick.prototype.buildOut = function() {\n\n var _ = this;\n\n _.$slides =\n _.$slider\n .children( _.options.slide + ':not(.slick-cloned)')\n .addClass('slick-slide');\n\n _.slideCount = _.$slides.length;\n\n _.$slides.each(function(index, element) {\n $(element)\n .attr('data-slick-index', index)\n .data('originalStyling', $(element).attr('style') || '');\n });\n\n _.$slider.addClass('slick-slider');\n\n _.$slideTrack = (_.slideCount === 0) ?\n $('<div class=\"slick-track\"/>').appendTo(_.$slider) :\n _.$slides.wrapAll('<div class=\"slick-track\"/>').parent();\n\n _.$list = _.$slideTrack.wrap(\n '<div class=\"slick-list\"/>').parent();\n _.$slideTrack.css('opacity', 0);\n\n if (_.options.centerMode === true || _.options.swipeToSlide === true) {\n _.options.slidesToScroll = 1;\n }\n\n $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');\n\n _.setupInfinite();\n\n _.buildArrows();\n\n _.buildDots();\n\n _.updateDots();\n\n\n _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n if (_.options.draggable === true) {\n _.$list.addClass('draggable');\n }\n\n };\n\n Slick.prototype.buildRows = function() {\n\n var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;\n\n newSlides = document.createDocumentFragment();\n originalSlides = _.$slider.children();\n\n if(_.options.rows > 0) {\n\n slidesPerSection = _.options.slidesPerRow * _.options.rows;\n numOfSlides = Math.ceil(\n originalSlides.length / slidesPerSection\n );\n\n for(a = 0; a < numOfSlides; a++){\n var slide = document.createElement('div');\n for(b = 0; b < _.options.rows; b++) {\n var row = document.createElement('div');\n for(c = 0; c < _.options.slidesPerRow; c++) {\n var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));\n if (originalSlides.get(target)) {\n row.appendChild(originalSlides.get(target));\n }\n }\n slide.appendChild(row);\n }\n newSlides.appendChild(slide);\n }\n\n _.$slider.empty().append(newSlides);\n _.$slider.children().children().children()\n .css({\n 'width':(100 / _.options.slidesPerRow) + '%',\n 'display': 'inline-block'\n });\n\n }\n\n };\n\n Slick.prototype.checkResponsive = function(initial, forceUpdate) {\n\n var _ = this,\n breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;\n var sliderWidth = _.$slider.width();\n var windowWidth = window.innerWidth || $(window).width();\n\n if (_.respondTo === 'window') {\n respondToWidth = windowWidth;\n } else if (_.respondTo === 'slider') {\n respondToWidth = sliderWidth;\n } else if (_.respondTo === 'min') {\n respondToWidth = Math.min(windowWidth, sliderWidth);\n }\n\n if ( _.options.responsive &&\n _.options.responsive.length &&\n _.options.responsive !== null) {\n\n targetBreakpoint = null;\n\n for (breakpoint in _.breakpoints) {\n if (_.breakpoints.hasOwnProperty(breakpoint)) {\n if (_.originalSettings.mobileFirst === false) {\n if (respondToWidth < _.breakpoints[breakpoint]) {\n targetBreakpoint = _.breakpoints[breakpoint];\n }\n } else {\n if (respondToWidth > _.breakpoints[breakpoint]) {\n targetBreakpoint = _.breakpoints[breakpoint];\n }\n }\n }\n }\n\n if (targetBreakpoint !== null) {\n if (_.activeBreakpoint !== null) {\n if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {\n _.activeBreakpoint =\n targetBreakpoint;\n if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n _.unslick(targetBreakpoint);\n } else {\n _.options = $.extend({}, _.originalSettings,\n _.breakpointSettings[\n targetBreakpoint]);\n if (initial === true) {\n _.currentSlide = _.options.initialSlide;\n }\n _.refresh(initial);\n }\n triggerBreakpoint = targetBreakpoint;\n }\n } else {\n _.activeBreakpoint = targetBreakpoint;\n if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n _.unslick(targetBreakpoint);\n } else {\n _.options = $.extend({}, _.originalSettings,\n _.breakpointSettings[\n targetBreakpoint]);\n if (initial === true) {\n _.currentSlide = _.options.initialSlide;\n }\n _.refresh(initial);\n }\n triggerBreakpoint = targetBreakpoint;\n }\n } else {\n if (_.activeBreakpoint !== null) {\n _.activeBreakpoint = null;\n _.options = _.originalSettings;\n if (initial === true) {\n _.currentSlide = _.options.initialSlide;\n }\n _.refresh(initial);\n triggerBreakpoint = targetBreakpoint;\n }\n }\n\n // only trigger breakpoints during an actual break. not on initialize.\n if( !initial && triggerBreakpoint !== false ) {\n _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);\n }\n }\n\n };\n\n Slick.prototype.changeSlide = function(event, dontAnimate) {\n\n var _ = this,\n $target = $(event.currentTarget),\n indexOffset, slideOffset, unevenOffset;\n\n // If target is a link, prevent default action.\n if($target.is('a')) {\n event.preventDefault();\n }\n\n // If target is not the <li> element (ie: a child), find the <li>.\n if(!$target.is('li')) {\n $target = $target.closest('li');\n }\n\n unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);\n indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;\n\n switch (event.data.message) {\n\n case 'previous':\n slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;\n if (_.slideCount > _.options.slidesToShow) {\n _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);\n }\n break;\n\n case 'next':\n slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;\n if (_.slideCount > _.options.slidesToShow) {\n _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);\n }\n break;\n\n case 'index':\n var index = event.data.index === 0 ? 0 :\n event.data.index || $target.index() * _.options.slidesToScroll;\n\n _.slideHandler(_.checkNavigable(index), false, dontAnimate);\n $target.children().trigger('focus');\n break;\n\n default:\n return;\n }\n\n };\n\n Slick.prototype.checkNavigable = function(index) {\n\n var _ = this,\n navigables, prevNavigable;\n\n navigables = _.getNavigableIndexes();\n prevNavigable = 0;\n if (index > navigables[navigables.length - 1]) {\n index = navigables[navigables.length - 1];\n } else {\n for (var n in navigables) {\n if (index < navigables[n]) {\n index = prevNavigable;\n break;\n }\n prevNavigable = navigables[n];\n }\n }\n\n return index;\n };\n\n Slick.prototype.cleanUpEvents = function() {\n\n var _ = this;\n\n if (_.options.dots && _.$dots !== null) {\n\n $('li', _.$dots)\n .off('click.slick', _.changeSlide)\n .off('mouseenter.slick', $.proxy(_.interrupt, _, true))\n .off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n if (_.options.accessibility === true) {\n _.$dots.off('keydown.slick', _.keyHandler);\n }\n }\n\n _.$slider.off('focus.slick blur.slick');\n\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);\n _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);\n\n if (_.options.accessibility === true) {\n _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);\n _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);\n }\n }\n\n _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);\n _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);\n _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);\n _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);\n\n _.$list.off('click.slick', _.clickHandler);\n\n $(document).off(_.visibilityChange, _.visibility);\n\n _.cleanUpSlideEvents();\n\n if (_.options.accessibility === true) {\n _.$list.off('keydown.slick', _.keyHandler);\n }\n\n if (_.options.focusOnSelect === true) {\n $(_.$slideTrack).children().off('click.slick', _.selectHandler);\n }\n\n $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);\n\n $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);\n\n $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);\n\n $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);\n\n };\n\n Slick.prototype.cleanUpSlideEvents = function() {\n\n var _ = this;\n\n _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));\n _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n };\n\n Slick.prototype.cleanUpRows = function() {\n\n var _ = this, originalSlides;\n\n if(_.options.rows > 0) {\n originalSlides = _.$slides.children().children();\n originalSlides.removeAttr('style');\n _.$slider.empty().append(originalSlides);\n }\n\n };\n\n Slick.prototype.clickHandler = function(event) {\n\n var _ = this;\n\n if (_.shouldClick === false) {\n event.stopImmediatePropagation();\n event.stopPropagation();\n event.preventDefault();\n }\n\n };\n\n Slick.prototype.destroy = function(refresh) {\n\n var _ = this;\n\n _.autoPlayClear();\n\n _.touchObject = {};\n\n _.cleanUpEvents();\n\n $('.slick-cloned', _.$slider).detach();\n\n if (_.$dots) {\n _.$dots.remove();\n }\n\n if ( _.$prevArrow && _.$prevArrow.length ) {\n\n _.$prevArrow\n .removeClass('slick-disabled slick-arrow slick-hidden')\n .removeAttr('aria-hidden aria-disabled tabindex')\n .css('display','');\n\n if ( _.htmlExpr.test( _.options.prevArrow )) {\n _.$prevArrow.remove();\n }\n }\n\n if ( _.$nextArrow && _.$nextArrow.length ) {\n\n _.$nextArrow\n .removeClass('slick-disabled slick-arrow slick-hidden')\n .removeAttr('aria-hidden aria-disabled tabindex')\n .css('display','');\n\n if ( _.htmlExpr.test( _.options.nextArrow )) {\n _.$nextArrow.remove();\n }\n }\n\n\n if (_.$slides) {\n\n _.$slides\n .removeClass('slick-slide slick-active slick-center slick-visible slick-current')\n .removeAttr('aria-hidden')\n .removeAttr('data-slick-index')\n .each(function(){\n $(this).attr('style', $(this).data('originalStyling'));\n });\n\n _.$slideTrack.children(this.options.slide).detach();\n\n _.$slideTrack.detach();\n\n _.$list.detach();\n\n _.$slider.append(_.$slides);\n }\n\n _.cleanUpRows();\n\n _.$slider.removeClass('slick-slider');\n _.$slider.removeClass('slick-initialized');\n _.$slider.removeClass('slick-dotted');\n\n _.unslicked = true;\n\n if(!refresh) {\n _.$slider.trigger('destroy', [_]);\n }\n\n };\n\n Slick.prototype.disableTransition = function(slide) {\n\n var _ = this,\n transition = {};\n\n transition[_.transitionType] = '';\n\n if (_.options.fade === false) {\n _.$slideTrack.css(transition);\n } else {\n _.$slides.eq(slide).css(transition);\n }\n\n };\n\n Slick.prototype.fadeSlide = function(slideIndex, callback) {\n\n var _ = this;\n\n if (_.cssTransitions === false) {\n\n _.$slides.eq(slideIndex).css({\n zIndex: _.options.zIndex\n });\n\n _.$slides.eq(slideIndex).animate({\n opacity: 1\n }, _.options.speed, _.options.easing, callback);\n\n } else {\n\n _.applyTransition(slideIndex);\n\n _.$slides.eq(slideIndex).css({\n opacity: 1,\n zIndex: _.options.zIndex\n });\n\n if (callback) {\n setTimeout(function() {\n\n _.disableTransition(slideIndex);\n\n callback.call();\n }, _.options.speed);\n }\n\n }\n\n };\n\n Slick.prototype.fadeSlideOut = function(slideIndex) {\n\n var _ = this;\n\n if (_.cssTransitions === false) {\n\n _.$slides.eq(slideIndex).animate({\n opacity: 0,\n zIndex: _.options.zIndex - 2\n }, _.options.speed, _.options.easing);\n\n } else {\n\n _.applyTransition(slideIndex);\n\n _.$slides.eq(slideIndex).css({\n opacity: 0,\n zIndex: _.options.zIndex - 2\n });\n\n }\n\n };\n\n Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {\n\n var _ = this;\n\n if (filter !== null) {\n\n _.$slidesCache = _.$slides;\n\n _.unload();\n\n _.$slideTrack.children(this.options.slide).detach();\n\n _.$slidesCache.filter(filter).appendTo(_.$slideTrack);\n\n _.reinit();\n\n }\n\n };\n\n Slick.prototype.focusHandler = function() {\n\n var _ = this;\n\n // If any child element receives focus within the slider we need to pause the autoplay\n _.$slider\n .off('focus.slick blur.slick')\n .on(\n 'focus.slick',\n '*',\n function(event) {\n var $sf = $(this);\n\n setTimeout(function() {\n if( _.options.pauseOnFocus ) {\n if ($sf.is(':focus')) {\n _.focussed = true;\n _.autoPlay();\n }\n }\n }, 0);\n }\n ).on(\n 'blur.slick',\n '*',\n function(event) {\n var $sf = $(this);\n\n // When a blur occurs on any elements within the slider we become unfocused\n if( _.options.pauseOnFocus ) {\n _.focussed = false;\n _.autoPlay();\n }\n }\n );\n };\n\n Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {\n\n var _ = this;\n return _.currentSlide;\n\n };\n\n Slick.prototype.getDotCount = function() {\n\n var _ = this;\n\n var breakPoint = 0;\n var counter = 0;\n var pagerQty = 0;\n\n if (_.options.infinite === true) {\n if (_.slideCount <= _.options.slidesToShow) {\n ++pagerQty;\n } else {\n while (breakPoint < _.slideCount) {\n ++pagerQty;\n breakPoint = counter + _.options.slidesToScroll;\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n }\n }\n } else if (_.options.centerMode === true) {\n pagerQty = _.slideCount;\n } else if(!_.options.asNavFor) {\n pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);\n }else {\n while (breakPoint < _.slideCount) {\n ++pagerQty;\n breakPoint = counter + _.options.slidesToScroll;\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n }\n }\n\n return pagerQty - 1;\n\n };\n\n Slick.prototype.getLeft = function(slideIndex) {\n\n var _ = this,\n targetLeft,\n verticalHeight,\n verticalOffset = 0,\n targetSlide,\n coef;\n\n _.slideOffset = 0;\n verticalHeight = _.$slides.first().outerHeight(true);\n\n if (_.options.infinite === true) {\n if (_.slideCount > _.options.slidesToShow) {\n _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;\n coef = -1\n\n if (_.options.vertical === true && _.options.centerMode === true) {\n if (_.options.slidesToShow === 2) {\n coef = -1.5;\n } else if (_.options.slidesToShow === 1) {\n coef = -2\n }\n }\n verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;\n }\n if (_.slideCount % _.options.slidesToScroll !== 0) {\n if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {\n if (slideIndex > _.slideCount) {\n _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;\n verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;\n } else {\n _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;\n verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;\n }\n }\n }\n } else {\n if (slideIndex + _.options.slidesToShow > _.slideCount) {\n _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;\n verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;\n }\n }\n\n if (_.slideCount <= _.options.slidesToShow) {\n _.slideOffset = 0;\n verticalOffset = 0;\n }\n\n if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {\n _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);\n } else if (_.options.centerMode === true && _.options.infinite === true) {\n _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;\n } else if (_.options.centerMode === true) {\n _.slideOffset = 0;\n _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);\n }\n\n if (_.options.vertical === false) {\n targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;\n } else {\n targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;\n }\n\n if (_.options.variableWidth === true) {\n\n if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n } else {\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);\n }\n\n if (_.options.rtl === true) {\n if (targetSlide[0]) {\n targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n } else {\n targetLeft = 0;\n }\n } else {\n targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n }\n\n if (_.options.centerMode === true) {\n if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n } else {\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);\n }\n\n if (_.options.rtl === true) {\n if (targetSlide[0]) {\n targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n } else {\n targetLeft = 0;\n }\n } else {\n targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n }\n\n targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;\n }\n }\n\n return targetLeft;\n\n };\n\n Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {\n\n var _ = this;\n\n return _.options[option];\n\n };\n\n Slick.prototype.getNavigableIndexes = function() {\n\n var _ = this,\n breakPoint = 0,\n counter = 0,\n indexes = [],\n max;\n\n if (_.options.infinite === false) {\n max = _.slideCount;\n } else {\n breakPoint = _.options.slidesToScroll * -1;\n counter = _.options.slidesToScroll * -1;\n max = _.slideCount * 2;\n }\n\n while (breakPoint < max) {\n indexes.push(breakPoint);\n breakPoint = counter + _.options.slidesToScroll;\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n }\n\n return indexes;\n\n };\n\n Slick.prototype.getSlick = function() {\n\n return this;\n\n };\n\n Slick.prototype.getSlideCount = function() {\n\n var _ = this,\n slidesTraversed, swipedSlide, swipeTarget, centerOffset;\n\n centerOffset = _.options.centerMode === true ? Math.floor(_.$list.width() / 2) : 0;\n swipeTarget = (_.swipeLeft * -1) + centerOffset;\n\n if (_.options.swipeToSlide === true) {\n\n _.$slideTrack.find('.slick-slide').each(function(index, slide) {\n\n var slideOuterWidth, slideOffset, slideRightBoundary;\n slideOuterWidth = $(slide).outerWidth();\n slideOffset = slide.offsetLeft;\n if (_.options.centerMode !== true) {\n slideOffset += (slideOuterWidth / 2);\n }\n\n slideRightBoundary = slideOffset + (slideOuterWidth);\n\n if (swipeTarget < slideRightBoundary) {\n swipedSlide = slide;\n return false;\n }\n });\n\n slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;\n\n return slidesTraversed;\n\n } else {\n return _.options.slidesToScroll;\n }\n\n };\n\n Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {\n\n var _ = this;\n\n _.changeSlide({\n data: {\n message: 'index',\n index: parseInt(slide)\n }\n }, dontAnimate);\n\n };\n\n Slick.prototype.init = function(creation) {\n\n var _ = this;\n\n if (!$(_.$slider).hasClass('slick-initialized')) {\n\n $(_.$slider).addClass('slick-initialized');\n\n _.buildRows();\n _.buildOut();\n _.setProps();\n _.startLoad();\n _.loadSlider();\n _.initializeEvents();\n _.updateArrows();\n _.updateDots();\n _.checkResponsive(true);\n _.focusHandler();\n\n }\n\n if (creation) {\n _.$slider.trigger('init', [_]);\n }\n\n if (_.options.accessibility === true) {\n _.initADA();\n }\n\n if ( _.options.autoplay ) {\n\n _.paused = false;\n _.autoPlay();\n\n }\n\n };\n\n Slick.prototype.initADA = function() {\n var _ = this,\n numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),\n tabControlIndexes = _.getNavigableIndexes().filter(function(val) {\n return (val >= 0) && (val < _.slideCount);\n });\n\n _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n }).find('a, input, button, select').attr({\n 'tabindex': '-1'\n });\n\n if (_.$dots !== null) {\n _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {\n var slideControlIndex = tabControlIndexes.indexOf(i);\n\n $(this).attr({\n 'role': 'tabpanel',\n 'id': 'slick-slide' + _.instanceUid + i,\n 'tabindex': -1\n });\n\n if (slideControlIndex !== -1) {\n var ariaButtonControl = 'slick-slide-control' + _.instanceUid + slideControlIndex\n if ($('#' + ariaButtonControl).length) {\n $(this).attr({\n 'aria-describedby': ariaButtonControl\n });\n }\n }\n });\n\n _.$dots.attr('role', 'tablist').find('li').each(function(i) {\n var mappedSlideIndex = tabControlIndexes[i];\n\n $(this).attr({\n 'role': 'presentation'\n });\n\n $(this).find('button').first().attr({\n 'role': 'tab',\n 'id': 'slick-slide-control' + _.instanceUid + i,\n 'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,\n 'aria-label': (i + 1) + ' of ' + numDotGroups,\n 'aria-selected': null,\n 'tabindex': '-1'\n });\n\n }).eq(_.currentSlide).find('button').attr({\n 'aria-selected': 'true',\n 'tabindex': '0'\n }).end();\n }\n\n for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {\n if (_.options.focusOnChange) {\n _.$slides.eq(i).attr({'tabindex': '0'});\n } else {\n _.$slides.eq(i).removeAttr('tabindex');\n }\n }\n\n _.activateADA();\n\n };\n\n Slick.prototype.initArrowEvents = function() {\n\n var _ = this;\n\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n _.$prevArrow\n .off('click.slick')\n .on('click.slick', {\n message: 'previous'\n }, _.changeSlide);\n _.$nextArrow\n .off('click.slick')\n .on('click.slick', {\n message: 'next'\n }, _.changeSlide);\n\n if (_.options.accessibility === true) {\n _.$prevArrow.on('keydown.slick', _.keyHandler);\n _.$nextArrow.on('keydown.slick', _.keyHandler);\n }\n }\n\n };\n\n Slick.prototype.initDotEvents = function() {\n\n var _ = this;\n\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n $('li', _.$dots).on('click.slick', {\n message: 'index'\n }, _.changeSlide);\n\n if (_.options.accessibility === true) {\n _.$dots.on('keydown.slick', _.keyHandler);\n }\n }\n\n if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {\n\n $('li', _.$dots)\n .on('mouseenter.slick', $.proxy(_.interrupt, _, true))\n .on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n }\n\n };\n\n Slick.prototype.initSlideEvents = function() {\n\n var _ = this;\n\n if ( _.options.pauseOnHover ) {\n\n _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));\n _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n }\n\n };\n\n Slick.prototype.initializeEvents = function() {\n\n var _ = this;\n\n _.initArrowEvents();\n\n _.initDotEvents();\n _.initSlideEvents();\n\n _.$list.on('touchstart.slick mousedown.slick', {\n action: 'start'\n }, _.swipeHandler);\n _.$list.on('touchmove.slick mousemove.slick', {\n action: 'move'\n }, _.swipeHandler);\n _.$list.on('touchend.slick mouseup.slick', {\n action: 'end'\n }, _.swipeHandler);\n _.$list.on('touchcancel.slick mouseleave.slick', {\n action: 'end'\n }, _.swipeHandler);\n\n _.$list.on('click.slick', _.clickHandler);\n\n $(document).on(_.visibilityChange, $.proxy(_.visibility, _));\n\n if (_.options.accessibility === true) {\n _.$list.on('keydown.slick', _.keyHandler);\n }\n\n if (_.options.focusOnSelect === true) {\n $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n }\n\n $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));\n\n $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));\n\n $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);\n\n $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);\n $(_.setPosition);\n\n };\n\n Slick.prototype.initUI = function() {\n\n var _ = this;\n\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n _.$prevArrow.show();\n _.$nextArrow.show();\n\n }\n\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n _.$dots.show();\n\n }\n\n };\n\n Slick.prototype.keyHandler = function(event) {\n\n var _ = this;\n //Dont slide if the cursor is inside the form fields and arrow keys are pressed\n if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {\n if (event.keyCode === 37 && _.options.accessibility === true) {\n _.changeSlide({\n data: {\n message: _.options.rtl === true ? 'next' : 'previous'\n }\n });\n } else if (event.keyCode === 39 && _.options.accessibility === true) {\n _.changeSlide({\n data: {\n message: _.options.rtl === true ? 'previous' : 'next'\n }\n });\n }\n }\n\n };\n\n Slick.prototype.lazyLoad = function() {\n\n var _ = this,\n loadRange, cloneRange, rangeStart, rangeEnd;\n\n function loadImages(imagesScope) {\n\n $('img[data-lazy]', imagesScope).each(function() {\n\n var image = $(this),\n imageSource = $(this).attr('data-lazy'),\n imageSrcSet = $(this).attr('data-srcset'),\n imageSizes = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),\n imageToLoad = document.createElement('img');\n\n imageToLoad.onload = function() {\n\n image\n .animate({ opacity: 0 }, 100, function() {\n\n if (imageSrcSet) {\n image\n .attr('srcset', imageSrcSet );\n\n if (imageSizes) {\n image\n .attr('sizes', imageSizes );\n }\n }\n\n image\n .attr('src', imageSource)\n .animate({ opacity: 1 }, 200, function() {\n image\n .removeAttr('data-lazy data-srcset data-sizes')\n .removeClass('slick-loading');\n });\n _.$slider.trigger('lazyLoaded', [_, image, imageSource]);\n });\n\n };\n\n imageToLoad.onerror = function() {\n\n image\n .removeAttr( 'data-lazy' )\n .removeClass( 'slick-loading' )\n .addClass( 'slick-lazyload-error' );\n\n _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n };\n\n imageToLoad.src = imageSource;\n\n });\n\n }\n\n if (_.options.centerMode === true) {\n if (_.options.infinite === true) {\n rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);\n rangeEnd = rangeStart + _.options.slidesToShow + 2;\n } else {\n rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));\n rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;\n }\n } else {\n rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;\n rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);\n if (_.options.fade === true) {\n if (rangeStart > 0) rangeStart--;\n if (rangeEnd <= _.slideCount) rangeEnd++;\n }\n }\n\n loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);\n\n if (_.options.lazyLoad === 'anticipated') {\n var prevSlide = rangeStart - 1,\n nextSlide = rangeEnd,\n $slides = _.$slider.find('.slick-slide');\n\n for (var i = 0; i < _.options.slidesToScroll; i++) {\n if (prevSlide < 0) prevSlide = _.slideCount - 1;\n loadRange = loadRange.add($slides.eq(prevSlide));\n loadRange = loadRange.add($slides.eq(nextSlide));\n prevSlide--;\n nextSlide++;\n }\n }\n\n loadImages(loadRange);\n\n if (_.slideCount <= _.options.slidesToShow) {\n cloneRange = _.$slider.find('.slick-slide');\n loadImages(cloneRange);\n } else\n if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {\n cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);\n loadImages(cloneRange);\n } else if (_.currentSlide === 0) {\n cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);\n loadImages(cloneRange);\n }\n\n };\n\n Slick.prototype.loadSlider = function() {\n\n var _ = this;\n\n _.setPosition();\n\n _.$slideTrack.css({\n opacity: 1\n });\n\n _.$slider.removeClass('slick-loading');\n\n _.initUI();\n\n if (_.options.lazyLoad === 'progressive') {\n _.progressiveLazyLoad();\n }\n\n };\n\n Slick.prototype.next = Slick.prototype.slickNext = function() {\n\n var _ = this;\n\n _.changeSlide({\n data: {\n message: 'next'\n }\n });\n\n };\n\n Slick.prototype.orientationChange = function() {\n\n var _ = this;\n\n _.checkResponsive();\n _.setPosition();\n\n };\n\n Slick.prototype.pause = Slick.prototype.slickPause = function() {\n\n var _ = this;\n\n _.autoPlayClear();\n _.paused = true;\n\n };\n\n Slick.prototype.play = Slick.prototype.slickPlay = function() {\n\n var _ = this;\n\n _.autoPlay();\n _.options.autoplay = true;\n _.paused = false;\n _.focussed = false;\n _.interrupted = false;\n\n };\n\n Slick.prototype.postSlide = function(index) {\n\n var _ = this;\n\n if( !_.unslicked ) {\n\n _.$slider.trigger('afterChange', [_, index]);\n\n _.animating = false;\n\n if (_.slideCount > _.options.slidesToShow) {\n _.setPosition();\n }\n\n _.swipeLeft = null;\n\n if ( _.options.autoplay ) {\n _.autoPlay();\n }\n\n if (_.options.accessibility === true) {\n _.initADA();\n\n if (_.options.focusOnChange) {\n var $currentSlide = $(_.$slides.get(_.currentSlide));\n $currentSlide.attr('tabindex', 0).focus();\n }\n }\n\n }\n\n };\n\n Slick.prototype.prev = Slick.prototype.slickPrev = function() {\n\n var _ = this;\n\n _.changeSlide({\n data: {\n message: 'previous'\n }\n });\n\n };\n\n Slick.prototype.preventDefault = function(event) {\n\n event.preventDefault();\n\n };\n\n Slick.prototype.progressiveLazyLoad = function( tryCount ) {\n\n tryCount = tryCount || 1;\n\n var _ = this,\n $imgsToLoad = $( 'img[data-lazy]', _.$slider ),\n image,\n imageSource,\n imageSrcSet,\n imageSizes,\n imageToLoad;\n\n if ( $imgsToLoad.length ) {\n\n image = $imgsToLoad.first();\n imageSource = image.attr('data-lazy');\n imageSrcSet = image.attr('data-srcset');\n imageSizes = image.attr('data-sizes') || _.$slider.attr('data-sizes');\n imageToLoad = document.createElement('img');\n\n imageToLoad.onload = function() {\n\n if (imageSrcSet) {\n image\n .attr('srcset', imageSrcSet );\n\n if (imageSizes) {\n image\n .attr('sizes', imageSizes );\n }\n }\n\n image\n .attr( 'src', imageSource )\n .removeAttr('data-lazy data-srcset data-sizes')\n .removeClass('slick-loading');\n\n if ( _.options.adaptiveHeight === true ) {\n _.setPosition();\n }\n\n _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);\n _.progressiveLazyLoad();\n\n };\n\n imageToLoad.onerror = function() {\n\n if ( tryCount < 3 ) {\n\n /**\n * try to load the image 3 times,\n * leave a slight delay so we don't get\n * servers blocking the request.\n */\n setTimeout( function() {\n _.progressiveLazyLoad( tryCount + 1 );\n }, 500 );\n\n } else {\n\n image\n .removeAttr( 'data-lazy' )\n .removeClass( 'slick-loading' )\n .addClass( 'slick-lazyload-error' );\n\n _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n _.progressiveLazyLoad();\n\n }\n\n };\n\n imageToLoad.src = imageSource;\n\n } else {\n\n _.$slider.trigger('allImagesLoaded', [ _ ]);\n\n }\n\n };\n\n Slick.prototype.refresh = function( initializing ) {\n\n var _ = this, currentSlide, lastVisibleIndex;\n\n lastVisibleIndex = _.slideCount - _.options.slidesToShow;\n\n // in non-infinite sliders, we don't want to go past the\n // last visible index.\n if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {\n _.currentSlide = lastVisibleIndex;\n }\n\n // if less slides than to show, go to start.\n if ( _.slideCount <= _.options.slidesToShow ) {\n _.currentSlide = 0;\n\n }\n\n currentSlide = _.currentSlide;\n\n _.destroy(true);\n\n $.extend(_, _.initials, { currentSlide: currentSlide });\n\n _.init();\n\n if( !initializing ) {\n\n _.changeSlide({\n data: {\n message: 'index',\n index: currentSlide\n }\n }, false);\n\n }\n\n };\n\n Slick.prototype.registerBreakpoints = function() {\n\n var _ = this, breakpoint, currentBreakpoint, l,\n responsiveSettings = _.options.responsive || null;\n\n if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {\n\n _.respondTo = _.options.respondTo || 'window';\n\n for ( breakpoint in responsiveSettings ) {\n\n l = _.breakpoints.length-1;\n\n if (responsiveSettings.hasOwnProperty(breakpoint)) {\n currentBreakpoint = responsiveSettings[breakpoint].breakpoint;\n\n // loop through the breakpoints and cut out any existing\n // ones with the same breakpoint number, we don't want dupes.\n while( l >= 0 ) {\n if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {\n _.breakpoints.splice(l,1);\n }\n l--;\n }\n\n _.breakpoints.push(currentBreakpoint);\n _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;\n\n }\n\n }\n\n _.breakpoints.sort(function(a, b) {\n return ( _.options.mobileFirst ) ? a-b : b-a;\n });\n\n }\n\n };\n\n Slick.prototype.reinit = function() {\n\n var _ = this;\n\n _.$slides =\n _.$slideTrack\n .children(_.options.slide)\n .addClass('slick-slide');\n\n _.slideCount = _.$slides.length;\n\n if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {\n _.currentSlide = _.currentSlide - _.options.slidesToScroll;\n }\n\n if (_.slideCount <= _.options.slidesToShow) {\n _.currentSlide = 0;\n }\n\n _.registerBreakpoints();\n\n _.setProps();\n _.setupInfinite();\n _.buildArrows();\n _.updateArrows();\n _.initArrowEvents();\n _.buildDots();\n _.updateDots();\n _.initDotEvents();\n _.cleanUpSlideEvents();\n _.initSlideEvents();\n\n _.checkResponsive(false, true);\n\n if (_.options.focusOnSelect === true) {\n $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n }\n\n _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n _.setPosition();\n _.focusHandler();\n\n _.paused = !_.options.autoplay;\n _.autoPlay();\n\n _.$slider.trigger('reInit', [_]);\n\n };\n\n Slick.prototype.resize = function() {\n\n var _ = this;\n\n if ($(window).width() !== _.windowWidth) {\n clearTimeout(_.windowDelay);\n _.windowDelay = window.setTimeout(function() {\n _.windowWidth = $(window).width();\n _.checkResponsive();\n if( !_.unslicked ) { _.setPosition(); }\n }, 50);\n }\n };\n\n Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {\n\n var _ = this;\n\n if (typeof(index) === 'boolean') {\n removeBefore = index;\n index = removeBefore === true ? 0 : _.slideCount - 1;\n } else {\n index = removeBefore === true ? --index : index;\n }\n\n if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {\n return false;\n }\n\n _.unload();\n\n if (removeAll === true) {\n _.$slideTrack.children().remove();\n } else {\n _.$slideTrack.children(this.options.slide).eq(index).remove();\n }\n\n _.$slides = _.$slideTrack.children(this.options.slide);\n\n _.$slideTrack.children(this.options.slide).detach();\n\n _.$slideTrack.append(_.$slides);\n\n _.$slidesCache = _.$slides;\n\n _.reinit();\n\n };\n\n Slick.prototype.setCSS = function(position) {\n\n var _ = this,\n positionProps = {},\n x, y;\n\n if (_.options.rtl === true) {\n position = -position;\n }\n x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';\n y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';\n\n positionProps[_.positionProp] = position;\n\n if (_.transformsEnabled === false) {\n _.$slideTrack.css(positionProps);\n } else {\n positionProps = {};\n if (_.cssTransitions === false) {\n positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';\n _.$slideTrack.css(positionProps);\n } else {\n positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';\n _.$slideTrack.css(positionProps);\n }\n }\n\n };\n\n Slick.prototype.setDimensions = function() {\n\n var _ = this;\n\n if (_.options.vertical === false) {\n if (_.options.centerMode === true) {\n _.$list.css({\n padding: ('0px ' + _.options.centerPadding)\n });\n }\n } else {\n _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);\n if (_.options.centerMode === true) {\n _.$list.css({\n padding: (_.options.centerPadding + ' 0px')\n });\n }\n }\n\n _.listWidth = _.$list.width();\n _.listHeight = _.$list.height();\n\n\n if (_.options.vertical === false && _.options.variableWidth === false) {\n _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);\n _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));\n\n } else if (_.options.variableWidth === true) {\n _.$slideTrack.width(5000 * _.slideCount);\n } else {\n _.slideWidth = Math.ceil(_.listWidth);\n _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));\n }\n\n var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();\n if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);\n\n };\n\n Slick.prototype.setFade = function() {\n\n var _ = this,\n targetLeft;\n\n _.$slides.each(function(index, element) {\n targetLeft = (_.slideWidth * index) * -1;\n if (_.options.rtl === true) {\n $(element).css({\n position: 'relative',\n right: targetLeft,\n top: 0,\n zIndex: _.options.zIndex - 2,\n opacity: 0\n });\n } else {\n $(element).css({\n position: 'relative',\n left: targetLeft,\n top: 0,\n zIndex: _.options.zIndex - 2,\n opacity: 0\n });\n }\n });\n\n _.$slides.eq(_.currentSlide).css({\n zIndex: _.options.zIndex - 1,\n opacity: 1\n });\n\n };\n\n Slick.prototype.setHeight = function() {\n\n var _ = this;\n\n if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n _.$list.css('height', targetHeight);\n }\n\n };\n\n Slick.prototype.setOption =\n Slick.prototype.slickSetOption = function() {\n\n /**\n * accepts arguments in format of:\n *\n * - for changing a single option's value:\n * .slick(\"setOption\", option, value, refresh )\n *\n * - for changing a set of responsive options:\n * .slick(\"setOption\", 'responsive', [{}, ...], refresh )\n *\n * - for updating multiple values at once (not responsive)\n * .slick(\"setOption\", { 'option': value, ... }, refresh )\n */\n\n var _ = this, l, item, option, value, refresh = false, type;\n\n if( $.type( arguments[0] ) === 'object' ) {\n\n option = arguments[0];\n refresh = arguments[1];\n type = 'multiple';\n\n } else if ( $.type( arguments[0] ) === 'string' ) {\n\n option = arguments[0];\n value = arguments[1];\n refresh = arguments[2];\n\n if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {\n\n type = 'responsive';\n\n } else if ( typeof arguments[1] !== 'undefined' ) {\n\n type = 'single';\n\n }\n\n }\n\n if ( type === 'single' ) {\n\n _.options[option] = value;\n\n\n } else if ( type === 'multiple' ) {\n\n $.each( option , function( opt, val ) {\n\n _.options[opt] = val;\n\n });\n\n\n } else if ( type === 'responsive' ) {\n\n for ( item in value ) {\n\n if( $.type( _.options.responsive ) !== 'array' ) {\n\n _.options.responsive = [ value[item] ];\n\n } else {\n\n l = _.options.responsive.length-1;\n\n // loop through the responsive object and splice out duplicates.\n while( l >= 0 ) {\n\n if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {\n\n _.options.responsive.splice(l,1);\n\n }\n\n l--;\n\n }\n\n _.options.responsive.push( value[item] );\n\n }\n\n }\n\n }\n\n if ( refresh ) {\n\n _.unload();\n _.reinit();\n\n }\n\n };\n\n Slick.prototype.setPosition = function() {\n\n var _ = this;\n\n _.setDimensions();\n\n _.setHeight();\n\n if (_.options.fade === false) {\n _.setCSS(_.getLeft(_.currentSlide));\n } else {\n _.setFade();\n }\n\n _.$slider.trigger('setPosition', [_]);\n\n };\n\n Slick.prototype.setProps = function() {\n\n var _ = this,\n bodyStyle = document.body.style;\n\n _.positionProp = _.options.vertical === true ? 'top' : 'left';\n\n if (_.positionProp === 'top') {\n _.$slider.addClass('slick-vertical');\n } else {\n _.$slider.removeClass('slick-vertical');\n }\n\n if (bodyStyle.WebkitTransition !== undefined ||\n bodyStyle.MozTransition !== undefined ||\n bodyStyle.msTransition !== undefined) {\n if (_.options.useCSS === true) {\n _.cssTransitions = true;\n }\n }\n\n if ( _.options.fade ) {\n if ( typeof _.options.zIndex === 'number' ) {\n if( _.options.zIndex < 3 ) {\n _.options.zIndex = 3;\n }\n } else {\n _.options.zIndex = _.defaults.zIndex;\n }\n }\n\n if (bodyStyle.OTransform !== undefined) {\n _.animType = 'OTransform';\n _.transformType = '-o-transform';\n _.transitionType = 'OTransition';\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n }\n if (bodyStyle.MozTransform !== undefined) {\n _.animType = 'MozTransform';\n _.transformType = '-moz-transform';\n _.transitionType = 'MozTransition';\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;\n }\n if (bodyStyle.webkitTransform !== undefined) {\n _.animType = 'webkitTransform';\n _.transformType = '-webkit-transform';\n _.transitionType = 'webkitTransition';\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n }\n if (bodyStyle.msTransform !== undefined) {\n _.animType = 'msTransform';\n _.transformType = '-ms-transform';\n _.transitionType = 'msTransition';\n if (bodyStyle.msTransform === undefined) _.animType = false;\n }\n if (bodyStyle.transform !== undefined && _.animType !== false) {\n _.animType = 'transform';\n _.transformType = 'transform';\n _.transitionType = 'transition';\n }\n _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);\n };\n\n\n Slick.prototype.setSlideClasses = function(index) {\n\n var _ = this,\n centerOffset, allSlides, indexOffset, remainder;\n\n allSlides = _.$slider\n .find('.slick-slide')\n .removeClass('slick-active slick-center slick-current')\n .attr('aria-hidden', 'true');\n\n _.$slides\n .eq(index)\n .addClass('slick-current');\n\n if (_.options.centerMode === true) {\n\n var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;\n\n centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n if (_.options.infinite === true) {\n\n if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {\n _.$slides\n .slice(index - centerOffset + evenCoef, index + centerOffset + 1)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n } else {\n\n indexOffset = _.options.slidesToShow + index;\n allSlides\n .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n }\n\n if (index === 0) {\n\n allSlides\n .eq(allSlides.length - 1 - _.options.slidesToShow)\n .addClass('slick-center');\n\n } else if (index === _.slideCount - 1) {\n\n allSlides\n .eq(_.options.slidesToShow)\n .addClass('slick-center');\n\n }\n\n }\n\n _.$slides\n .eq(index)\n .addClass('slick-center');\n\n } else {\n\n if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {\n\n _.$slides\n .slice(index, index + _.options.slidesToShow)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n } else if (allSlides.length <= _.options.slidesToShow) {\n\n allSlides\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n } else {\n\n remainder = _.slideCount % _.options.slidesToShow;\n indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;\n\n if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {\n\n allSlides\n .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n } else {\n\n allSlides\n .slice(indexOffset, indexOffset + _.options.slidesToShow)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n }\n\n }\n\n }\n\n if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {\n _.lazyLoad();\n }\n };\n\n Slick.prototype.setupInfinite = function() {\n\n var _ = this,\n i, slideIndex, infiniteCount;\n\n if (_.options.fade === true) {\n _.options.centerMode = false;\n }\n\n if (_.options.infinite === true && _.options.fade === false) {\n\n slideIndex = null;\n\n if (_.slideCount > _.options.slidesToShow) {\n\n if (_.options.centerMode === true) {\n infiniteCount = _.options.slidesToShow + 1;\n } else {\n infiniteCount = _.options.slidesToShow;\n }\n\n for (i = _.slideCount; i > (_.slideCount -\n infiniteCount); i -= 1) {\n slideIndex = i - 1;\n $(_.$slides[slideIndex]).clone(true).attr('id', '')\n .attr('data-slick-index', slideIndex - _.slideCount)\n .prependTo(_.$slideTrack).addClass('slick-cloned');\n }\n for (i = 0; i < infiniteCount + _.slideCount; i += 1) {\n slideIndex = i;\n $(_.$slides[slideIndex]).clone(true).attr('id', '')\n .attr('data-slick-index', slideIndex + _.slideCount)\n .appendTo(_.$slideTrack).addClass('slick-cloned');\n }\n _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {\n $(this).attr('id', '');\n });\n\n }\n\n }\n\n };\n\n Slick.prototype.interrupt = function( toggle ) {\n\n var _ = this;\n\n if( !toggle ) {\n _.autoPlay();\n }\n _.interrupted = toggle;\n\n };\n\n Slick.prototype.selectHandler = function(event) {\n\n var _ = this;\n\n var targetElement =\n $(event.target).is('.slick-slide') ?\n $(event.target) :\n $(event.target).parents('.slick-slide');\n\n var index = parseInt(targetElement.attr('data-slick-index'));\n\n if (!index) index = 0;\n\n if (_.slideCount <= _.options.slidesToShow) {\n\n _.slideHandler(index, false, true);\n return;\n\n }\n\n _.slideHandler(index);\n\n };\n\n Slick.prototype.slideHandler = function(index, sync, dontAnimate) {\n\n var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,\n _ = this, navTarget;\n\n sync = sync || false;\n\n if (_.animating === true && _.options.waitForAnimate === true) {\n return;\n }\n\n if (_.options.fade === true && _.currentSlide === index) {\n return;\n }\n\n if (sync === false) {\n _.asNavFor(index);\n }\n\n targetSlide = index;\n targetLeft = _.getLeft(targetSlide);\n slideLeft = _.getLeft(_.currentSlide);\n\n _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;\n\n if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {\n if (_.options.fade === false) {\n targetSlide = _.currentSlide;\n if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n _.animateSlide(slideLeft, function() {\n _.postSlide(targetSlide);\n });\n } else {\n _.postSlide(targetSlide);\n }\n }\n return;\n } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {\n if (_.options.fade === false) {\n targetSlide = _.currentSlide;\n if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n _.animateSlide(slideLeft, function() {\n _.postSlide(targetSlide);\n });\n } else {\n _.postSlide(targetSlide);\n }\n }\n return;\n }\n\n if ( _.options.autoplay ) {\n clearInterval(_.autoPlayTimer);\n }\n\n if (targetSlide < 0) {\n if (_.slideCount % _.options.slidesToScroll !== 0) {\n animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);\n } else {\n animSlide = _.slideCount + targetSlide;\n }\n } else if (targetSlide >= _.slideCount) {\n if (_.slideCount % _.options.slidesToScroll !== 0) {\n animSlide = 0;\n } else {\n animSlide = targetSlide - _.slideCount;\n }\n } else {\n animSlide = targetSlide;\n }\n\n _.animating = true;\n\n _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);\n\n oldSlide = _.currentSlide;\n _.currentSlide = animSlide;\n\n _.setSlideClasses(_.currentSlide);\n\n if ( _.options.asNavFor ) {\n\n navTarget = _.getNavTarget();\n navTarget = navTarget.slick('getSlick');\n\n if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {\n navTarget.setSlideClasses(_.currentSlide);\n }\n\n }\n\n _.updateDots();\n _.updateArrows();\n\n if (_.options.fade === true) {\n if (dontAnimate !== true) {\n\n _.fadeSlideOut(oldSlide);\n\n _.fadeSlide(animSlide, function() {\n _.postSlide(animSlide);\n });\n\n } else {\n _.postSlide(animSlide);\n }\n _.animateHeight();\n return;\n }\n\n if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n _.animateSlide(targetLeft, function() {\n _.postSlide(animSlide);\n });\n } else {\n _.postSlide(animSlide);\n }\n\n };\n\n Slick.prototype.startLoad = function() {\n\n var _ = this;\n\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n _.$prevArrow.hide();\n _.$nextArrow.hide();\n\n }\n\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n _.$dots.hide();\n\n }\n\n _.$slider.addClass('slick-loading');\n\n };\n\n Slick.prototype.swipeDirection = function() {\n\n var xDist, yDist, r, swipeAngle, _ = this;\n\n xDist = _.touchObject.startX - _.touchObject.curX;\n yDist = _.touchObject.startY - _.touchObject.curY;\n r = Math.atan2(yDist, xDist);\n\n swipeAngle = Math.round(r * 180 / Math.PI);\n if (swipeAngle < 0) {\n swipeAngle = 360 - Math.abs(swipeAngle);\n }\n\n if ((swipeAngle <= 45) && (swipeAngle >= 0)) {\n return (_.options.rtl === false ? 'left' : 'right');\n }\n if ((swipeAngle <= 360) && (swipeAngle >= 315)) {\n return (_.options.rtl === false ? 'left' : 'right');\n }\n if ((swipeAngle >= 135) && (swipeAngle <= 225)) {\n return (_.options.rtl === false ? 'right' : 'left');\n }\n if (_.options.verticalSwiping === true) {\n if ((swipeAngle >= 35) && (swipeAngle <= 135)) {\n return 'down';\n } else {\n return 'up';\n }\n }\n\n return 'vertical';\n\n };\n\n Slick.prototype.swipeEnd = function(event) {\n\n var _ = this,\n slideCount,\n direction;\n\n _.dragging = false;\n _.swiping = false;\n\n if (_.scrolling) {\n _.scrolling = false;\n return false;\n }\n\n _.interrupted = false;\n _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;\n\n if ( _.touchObject.curX === undefined ) {\n return false;\n }\n\n if ( _.touchObject.edgeHit === true ) {\n _.$slider.trigger('edge', [_, _.swipeDirection() ]);\n }\n\n if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {\n\n direction = _.swipeDirection();\n\n switch ( direction ) {\n\n case 'left':\n case 'down':\n\n slideCount =\n _.options.swipeToSlide ?\n _.checkNavigable( _.currentSlide + _.getSlideCount() ) :\n _.currentSlide + _.getSlideCount();\n\n _.currentDirection = 0;\n\n break;\n\n case 'right':\n case 'up':\n\n slideCount =\n _.options.swipeToSlide ?\n _.checkNavigable( _.currentSlide - _.getSlideCount() ) :\n _.currentSlide - _.getSlideCount();\n\n _.currentDirection = 1;\n\n break;\n\n default:\n\n\n }\n\n if( direction != 'vertical' ) {\n\n _.slideHandler( slideCount );\n _.touchObject = {};\n _.$slider.trigger('swipe', [_, direction ]);\n\n }\n\n } else {\n\n if ( _.touchObject.startX !== _.touchObject.curX ) {\n\n _.slideHandler( _.currentSlide );\n _.touchObject = {};\n\n }\n\n }\n\n };\n\n Slick.prototype.swipeHandler = function(event) {\n\n var _ = this;\n\n if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {\n return;\n } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {\n return;\n }\n\n _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?\n event.originalEvent.touches.length : 1;\n\n _.touchObject.minSwipe = _.listWidth / _.options\n .touchThreshold;\n\n if (_.options.verticalSwiping === true) {\n _.touchObject.minSwipe = _.listHeight / _.options\n .touchThreshold;\n }\n\n switch (event.data.action) {\n\n case 'start':\n _.swipeStart(event);\n break;\n\n case 'move':\n _.swipeMove(event);\n break;\n\n case 'end':\n _.swipeEnd(event);\n break;\n\n }\n\n };\n\n Slick.prototype.swipeMove = function(event) {\n\n var _ = this,\n edgeWasHit = false,\n curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;\n\n touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;\n\n if (!_.dragging || _.scrolling || touches && touches.length !== 1) {\n return false;\n }\n\n curLeft = _.getLeft(_.currentSlide);\n\n _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;\n _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;\n\n _.touchObject.swipeLength = Math.round(Math.sqrt(\n Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));\n\n verticalSwipeLength = Math.round(Math.sqrt(\n Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));\n\n if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {\n _.scrolling = true;\n return false;\n }\n\n if (_.options.verticalSwiping === true) {\n _.touchObject.swipeLength = verticalSwipeLength;\n }\n\n swipeDirection = _.swipeDirection();\n\n if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {\n _.swiping = true;\n event.preventDefault();\n }\n\n positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);\n if (_.options.verticalSwiping === true) {\n positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;\n }\n\n\n swipeLength = _.touchObject.swipeLength;\n\n _.touchObject.edgeHit = false;\n\n if (_.options.infinite === false) {\n if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {\n swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;\n _.touchObject.edgeHit = true;\n }\n }\n\n if (_.options.vertical === false) {\n _.swipeLeft = curLeft + swipeLength * positionOffset;\n } else {\n _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;\n }\n if (_.options.verticalSwiping === true) {\n _.swipeLeft = curLeft + swipeLength * positionOffset;\n }\n\n if (_.options.fade === true || _.options.touchMove === false) {\n return false;\n }\n\n if (_.animating === true) {\n _.swipeLeft = null;\n return false;\n }\n\n _.setCSS(_.swipeLeft);\n\n };\n\n Slick.prototype.swipeStart = function(event) {\n\n var _ = this,\n touches;\n\n _.interrupted = true;\n\n if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {\n _.touchObject = {};\n return false;\n }\n\n if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {\n touches = event.originalEvent.touches[0];\n }\n\n _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;\n _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;\n\n _.dragging = true;\n\n };\n\n Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {\n\n var _ = this;\n\n if (_.$slidesCache !== null) {\n\n _.unload();\n\n _.$slideTrack.children(this.options.slide).detach();\n\n _.$slidesCache.appendTo(_.$slideTrack);\n\n _.reinit();\n\n }\n\n };\n\n Slick.prototype.unload = function() {\n\n var _ = this;\n\n $('.slick-cloned', _.$slider).remove();\n\n if (_.$dots) {\n _.$dots.remove();\n }\n\n if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {\n _.$prevArrow.remove();\n }\n\n if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {\n _.$nextArrow.remove();\n }\n\n _.$slides\n .removeClass('slick-slide slick-active slick-visible slick-current')\n .attr('aria-hidden', 'true')\n .css('width', '');\n\n };\n\n Slick.prototype.unslick = function(fromBreakpoint) {\n\n var _ = this;\n _.$slider.trigger('unslick', [_, fromBreakpoint]);\n _.destroy();\n\n };\n\n Slick.prototype.updateArrows = function() {\n\n var _ = this,\n centerOffset;\n\n centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n if ( _.options.arrows === true &&\n _.slideCount > _.options.slidesToShow &&\n !_.options.infinite ) {\n\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n if (_.currentSlide === 0) {\n\n _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {\n\n _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {\n\n _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n }\n\n }\n\n };\n\n Slick.prototype.updateDots = function() {\n\n var _ = this;\n\n if (_.$dots !== null) {\n\n _.$dots\n .find('li')\n .removeClass('slick-active')\n .end();\n\n _.$dots\n .find('li')\n .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))\n .addClass('slick-active');\n\n }\n\n };\n\n Slick.prototype.visibility = function() {\n\n var _ = this;\n\n if ( _.options.autoplay ) {\n\n if ( document[_.hidden] ) {\n\n _.interrupted = true;\n\n } else {\n\n _.interrupted = false;\n\n }\n\n }\n\n };\n\n $.fn.slick = function() {\n var _ = this,\n opt = arguments[0],\n args = Array.prototype.slice.call(arguments, 1),\n l = _.length,\n i,\n ret;\n for (i = 0; i < l; i++) {\n if (typeof opt == 'object' || typeof opt == 'undefined')\n _[i].slick = new Slick(_[i], opt);\n else\n ret = _[i].slick[opt].apply(_[i].slick, args);\n if (typeof ret != 'undefined') return ret;\n }\n return _;\n };\n\n}));\n","import \"slick-slider\";\r\nimport $ from \"jquery\";\r\n// product slider\r\nconst productSlider = document.querySelector(\".product-slider\");\r\nif (productSlider) {\r\n const preview = productSlider.querySelector('.product-slider-preview');\r\n $(preview).slick({\r\n infinite: true,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n arrows: true,\r\n prevArrow: $(\".product-slider .product-slider-prev\"),\r\n nextArrow: $(\".product-slider .product-slider-next\"),\r\n accessibility: false,\r\n draggable: true,\r\n dots: true,\r\n centerPadding: 0,\r\n lazyLoad: \"anticipated\",\r\n }).on('beforeChange', function (event, slick, currentSlide, nextSlide) {\r\n //\r\n const element = slick.$slides[nextSlide];\r\n //\r\n const item = element.querySelector(\".carousel-item\");\r\n updateProductThumbnailTitle(item.dataset['title']);\r\n });\r\n}\r\nfunction updateProductThumbnailTitle(text) {\r\n const title = document.querySelector(\".product-thumbnail-title\");\r\n title.textContent = text;\r\n}\r\nexport default undefined;\r\n","import \"jquery\";\r\n//const imageGrid = document.querySelectorAll<HTMLElement>(\"[data-image-id]\");\r\nconst overlay = document.querySelector(\".gallery-lightbox\");\r\nconst closeBtn = overlay.querySelector(\".gallery-lightbox-close\");\r\nconst mediaElement = overlay.querySelector(\".gallery-lightbox-media\");\r\nconst titleTooltipElement = overlay.querySelector(\".gallery-lightbox-title .icon\");\r\nconst lightboxLabel = overlay.querySelector(\".gallery-lightbox-label\");\r\n// add light box event\r\ndocument.addEventListener(\"click\", (e) => {\r\n const target = e.target;\r\n const lightboxElement = target.closest(\"[data-lightbox]\");\r\n if (lightboxElement) {\r\n showLightBox(lightboxElement.dataset[\"src\"], lightboxElement.dataset[\"title\"], lightboxElement.dataset[\"credit\"], lightboxElement.dataset[\"link\"], lightboxElement.dataset[\"product\"]);\r\n console.log(lightboxElement.dataset[\"product\"]);\r\n }\r\n});\r\ncloseBtn.addEventListener(\"click\", (e) => {\r\n document.body.classList.toggle(\"gallery-lightbox--show\");\r\n mediaElement.innerHTML = \"\";\r\n});\r\noverlay.addEventListener(\"click\", (e) => {\r\n if (e.target !== overlay) {\r\n return;\r\n }\r\n document.body.classList.toggle(\"gallery-lightbox--show\");\r\n mediaElement.innerHTML = \"\";\r\n});\r\n// event\r\ndocument.addEventListener(\"lightbox.show\", (e) => {\r\n showLightBox(e.detail.url, e.detail.title, e.detail.credit, e.detail.link, e.detail.product);\r\n});\r\nfunction showLightBox(url, title, credit, link, product, videoSources = []) {\r\n // $(titleTooltipElement).tooltip(\"dispose\");\r\n // console.log(titleTooltipElement, url, title);\r\n mediaElement.innerHTML = \"\";\r\n // titleTooltipElement.setAttribute(\"data-title\", title);\r\n // $(titleTooltipElement).tooltip({ title });\r\n lightboxLabel.innerHTML = \"\";\r\n if (title)\r\n lightboxLabel.innerHTML += `<p>${title}</p>`;\r\n if (link && product)\r\n lightboxLabel.innerHTML += `<a href=${link} class=\"gallery-lightbox-link\"><p>Product used: ${product}</p></a>`;\r\n if (credit)\r\n lightboxLabel.innerHTML += `<p class=\"gallery-lightbox-credit\">Credit: ${credit}</p>`;\r\n // image\r\n if (videoSources.length === 0) {\r\n const img = document.createElement(\"img\");\r\n img.src = url;\r\n mediaElement.append(img);\r\n }\r\n else {\r\n const video = document.createElement(\"video\");\r\n video.controls = true;\r\n videoSources.forEach((src) => {\r\n const source = document.createElement(\"source\");\r\n source.src = src.url;\r\n source.type = src.mimeType;\r\n video.append(source);\r\n });\r\n mediaElement.append(video);\r\n video.play();\r\n }\r\n // video\r\n document.body.classList.toggle(\"gallery-lightbox--show\");\r\n}\r\nexport default undefined;\r\n","/**\r\n * Handle Saving Colour to localstorage\r\n * */\r\nexport class SavedColour {\r\n constructor() {\r\n this._colours = [];\r\n /**\r\n * Read all\r\n * */\r\n this.all = () => {\r\n this.refresh();\r\n return this._colours;\r\n };\r\n /**\r\n * Clear all\r\n * */\r\n this.clear = () => {\r\n localStorage.removeItem(SavedColour._storekey);\r\n };\r\n /**\r\n * Read localstorage\r\n * */\r\n this.refresh = () => {\r\n const jsonString = localStorage.getItem(SavedColour._storekey);\r\n if (!!jsonString) {\r\n this._colours = JSON.parse(jsonString);\r\n return;\r\n }\r\n this._colours = [];\r\n };\r\n /**\r\n * Write localstorage\r\n * */\r\n this.write = () => {\r\n localStorage.setItem(SavedColour._storekey, JSON.stringify(this._colours));\r\n this.refresh();\r\n };\r\n /**\r\n * Check if a colour was saved\r\n * */\r\n this.wasSaved = (colourId) => {\r\n return this._colours.some((x) => x.id === colourId);\r\n };\r\n /**\r\n * Save a colour to localstorage\r\n * */\r\n this.save = (data) => {\r\n if (!this.wasSaved(data.id)) {\r\n this._colours.push(data);\r\n this.write();\r\n }\r\n };\r\n /**\r\n * Toggle a colour to localstorage\r\n * */\r\n this.toggle = (data, willSave) => {\r\n if (willSave === true) {\r\n this.save(data);\r\n }\r\n else if (willSave === false) {\r\n this.unsave(data.id);\r\n }\r\n else {\r\n if (!this.wasSaved(data.id)) {\r\n this.save(data);\r\n }\r\n else {\r\n this.unsave(data.id);\r\n }\r\n }\r\n };\r\n /**\r\n * Unsave a colour to localstorage\r\n * */\r\n this.unsave = (colourId) => {\r\n if (this.wasSaved(colourId)) {\r\n this._colours = this._colours.filter((x) => x.id !== colourId);\r\n this.write();\r\n }\r\n };\r\n this.refresh();\r\n }\r\n}\r\nSavedColour._storekey = \"nsw_leather_co_saved_colours\";\r\n// create wrapper\r\nconst savedColour = new SavedColour();\r\nupdateCounter();\r\nrefreshToggle();\r\n// # notifications\r\n// refresh toggle & counter\r\ndocument.addEventListener(\"saveColours.refresh\", () => {\r\n // refresh toggle\r\n refreshToggle();\r\n // refresh counter\r\n updateCounter();\r\n});\r\n// # implementations\r\n// colour swatch toggle\r\ndocument.querySelectorAll(\"[data-save-colour]\").forEach((item) => {\r\n const data = JSON.parse(item.dataset[\"saveColour\"]);\r\n item.addEventListener(\"click\", () => {\r\n savedColour.toggle(data);\r\n // dispatch\r\n document.dispatchEvent(new CustomEvent(\"saveColours.refresh\"));\r\n });\r\n});\r\n// # methods\r\nfunction updateCounter() {\r\n const sampleCounter = document.querySelector(\".sample-counter\");\r\n const counter = document.querySelector(\".sample-counter .counter span\");\r\n const amount = savedColour.all().length;\r\n const closest = counter.closest(\".counter\");\r\n amount > 0 ? sampleCounter.classList.add(\"--has-items-mobile\") : sampleCounter.classList.remove(\"--has-items-mobile\");\r\n closest.hidden = amount === 0;\r\n counter.textContent = amount.toString();\r\n}\r\nfunction refreshToggle() {\r\n document.querySelectorAll(\"[data-save-colour]\").forEach((item) => {\r\n const data = JSON.parse(item.dataset[\"saveColour\"]);\r\n item.classList.toggle(\"saved\", savedColour.wasSaved(data.id));\r\n });\r\n}\r\n","import { SavedColour } from './save-colours';\r\nconst savedColours = new SavedColour();\r\n// populate saved colours to hidden inputs\r\nconst container = document.querySelector(\"#selectedColourInputsPanel\");\r\nif (container) {\r\n renderSavedColours();\r\n updateEmptyMessage();\r\n document.addEventListener('saveColours.refresh', () => {\r\n container.innerHTML = '';\r\n // refresh\r\n renderSavedColours();\r\n updateEmptyMessage();\r\n });\r\n}\r\nfunction createAnInputSet(container, colour, index) {\r\n // name\r\n let input = document.createElement(\"input\");\r\n input.hidden = true;\r\n input.name = `SelectedColours[${index}].Name`;\r\n input.id = `SelectedColours[${index}].Name`;\r\n input.value = colour.name;\r\n container.appendChild(input);\r\n // product name\r\n input = document.createElement(\"input\");\r\n input.hidden = true;\r\n input.name = `SelectedColours[${index}].ProductName`;\r\n input.id = `SelectedColours[${index}].ProductName`;\r\n input.value = colour.productName;\r\n container.appendChild(input);\r\n // quantity\r\n const qtyInput = document.createElement(\"div\");\r\n qtyInput.className = \"input-group input-group-sm form-control-w-xs mt-2\";\r\n qtyInput.innerHTML = `\r\n <div class=\"input-group-prepend\">\r\n <span class=\"input-group-text text-muted\" id=\"basic-addon1\">Qty</span>\r\n </div>\r\n `;\r\n input = document.createElement(\"input\");\r\n input.hidden = false;\r\n input.type = 'number';\r\n input.min = \"1\";\r\n input.step = \"1\";\r\n input.className = \"form-control\";\r\n input.name = `SelectedColours[${index}].Quantity`;\r\n input.id = `SelectedColours[${index}].Quantity`;\r\n input.value = \"1\";\r\n qtyInput.appendChild(input);\r\n container.appendChild(qtyInput);\r\n}\r\nfunction renderSavedColours() {\r\n const container = document.querySelector(\".saved-colour-list\");\r\n if (container) {\r\n container.innerHTML = '';\r\n savedColours.all().forEach((c, i) => {\r\n container.appendChild(createSavedColourItem(c, i));\r\n });\r\n }\r\n}\r\nfunction createSavedColourItem(data, index) {\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.className = \"saved-colour-item\";\r\n wrapper.innerHTML = `\r\n <div class=\"saved-colour-item-box\">\r\n <div class=\"saved-colour-item-img\">\r\n <img src=\"${data.thumbnail}\" alt=\"\"/>\r\n </div>\r\n </div>\r\n <div class=\"saved-colour-item-body\">\r\n <div class=\"colour-name\"></div>\r\n </div>\r\n <div class=\"saved-colour-item-remove\">\r\n <div class=\"icon icon-xs\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-trash-2\"><polyline points=\"3 6 5 6 21 6\" /><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" /><line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\" /><line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\" /></svg>\r\n </div>\r\n </div>\r\n`;\r\n // body\r\n const body = wrapper.querySelector('.saved-colour-item-body');\r\n createAnInputSet(body, data, index);\r\n // set\r\n wrapper.querySelector('.saved-colour-item-img img').setAttribute('alt', data.name);\r\n wrapper.querySelector('.colour-name').textContent = data.name;\r\n //wrapper.querySelector('.product-name').textContent = data.productName;\r\n // hide\r\n wrapper.addEventListener(\"transitionend\", () => {\r\n if (wrapper.classList.contains('fading')) {\r\n savedColours.unsave(data.id);\r\n // dispatch\r\n document.dispatchEvent(new CustomEvent('saveColours.refresh'));\r\n }\r\n });\r\n // remove\r\n wrapper.querySelector('.saved-colour-item-remove').addEventListener(\"click\", (e) => {\r\n e.preventDefault();\r\n wrapper.classList.add(\"fading\");\r\n });\r\n return wrapper;\r\n}\r\nfunction updateEmptyMessage() {\r\n const panel = document.querySelector(\"#mySamplesPanel\");\r\n const empty = document.querySelector(\"#savedColourEmptyMessage\");\r\n if (panel) {\r\n panel.classList.toggle(\"d-none\", savedColours.all().length === 0);\r\n empty.classList.toggle(\"d-none\", savedColours.all().length > 0);\r\n }\r\n}\r\n// clear samples\r\nif (location.search.startsWith('?clear-samples')) {\r\n savedColours.clear();\r\n // dispatch\r\n document.dispatchEvent(new CustomEvent('saveColours.refresh'));\r\n}\r\nexport default undefined;\r\n","const items = document.querySelectorAll(\".banner-animation .image\");\r\nconst box1 = document.querySelector(\".banner-animation >.banner-animation-slide .box-1\");\r\nconst box2 = document.querySelector(\".banner-animation >.banner-animation-slide .box-2\");\r\nif (items.length) {\r\n const interval = 5; // seconds\r\n // hiding event\r\n items.forEach(item => item.addEventListener('animationend', () => {\r\n if (item.classList.contains(\"image-showing\")) {\r\n // hide others\r\n item.parentElement.querySelectorAll(\".image\").forEach(item => {\r\n if (item.classList.contains(\"image-current\")) {\r\n item.classList.remove('image-current');\r\n }\r\n });\r\n item.classList.remove(\"image-showing\");\r\n item.classList.add(\"image-current\");\r\n }\r\n }));\r\n // start \r\n setInterval(() => {\r\n nextSlide(box1);\r\n nextSlide(box2);\r\n }, interval * 1000);\r\n}\r\nfunction nextSlide(boxContainer) {\r\n const images = [].slice.call(boxContainer.querySelectorAll(\".image\"));\r\n const currentImage = boxContainer.querySelector(\".image.image-current\");\r\n let currentIndex = images.indexOf(currentImage);\r\n // increase\r\n currentIndex += 1;\r\n if (currentIndex >= images.length) {\r\n currentIndex = 0;\r\n }\r\n // show\r\n images[currentIndex].classList.add(\"image-showing\");\r\n}\r\nexport default undefined;\r\n","if(!t)var t={map:function(t,r){var n={};return r?t.map(function(t,o){return n.index=o,r.call(n,t)}):t.slice()},naturalOrder:function(t,r){return t<r?-1:t>r?1:0},sum:function(t,r){var n={};return t.reduce(r?function(t,o,e){return n.index=e,t+r.call(n,o)}:function(t,r){return t+r},0)},max:function(r,n){return Math.max.apply(null,n?t.map(r,n):r)}};var r=function(){var r=5,n=8-r,o=1e3;function e(t,n,o){return(t<<2*r)+(n<<r)+o}function i(t){var r=[],n=!1;function o(){r.sort(t),n=!0}return{push:function(t){r.push(t),n=!1},peek:function(t){return n||o(),void 0===t&&(t=r.length-1),r[t]},pop:function(){return n||o(),r.pop()},size:function(){return r.length},map:function(t){return r.map(t)},debug:function(){return n||o(),r}}}function u(t,r,n,o,e,i,u){this.r1=t,this.r2=r,this.g1=n,this.g2=o,this.b1=e,this.b2=i,this.histo=u}function a(){this.vboxes=new i(function(r,n){return t.naturalOrder(r.vbox.count()*r.vbox.volume(),n.vbox.count()*n.vbox.volume())})}function s(r,n){if(n.count()){var o=n.r2-n.r1+1,i=n.g2-n.g1+1,u=t.max([o,i,n.b2-n.b1+1]);if(1==n.count())return[n.copy()];var a,s,h,c,f=0,v=[],l=[];if(u==o)for(a=n.r1;a<=n.r2;a++){for(c=0,s=n.g1;s<=n.g2;s++)for(h=n.b1;h<=n.b2;h++)c+=r[e(a,s,h)]||0;v[a]=f+=c}else if(u==i)for(a=n.g1;a<=n.g2;a++){for(c=0,s=n.r1;s<=n.r2;s++)for(h=n.b1;h<=n.b2;h++)c+=r[e(s,a,h)]||0;v[a]=f+=c}else for(a=n.b1;a<=n.b2;a++){for(c=0,s=n.r1;s<=n.r2;s++)for(h=n.g1;h<=n.g2;h++)c+=r[e(s,h,a)]||0;v[a]=f+=c}return v.forEach(function(t,r){l[r]=f-t}),function(t){var r,o,e,i,u,s=t+\"1\",h=t+\"2\",c=0;for(a=n[s];a<=n[h];a++)if(v[a]>f/2){for(e=n.copy(),i=n.copy(),u=(r=a-n[s])<=(o=n[h]-a)?Math.min(n[h]-1,~~(a+o/2)):Math.max(n[s],~~(a-1-r/2));!v[u];)u++;for(c=l[u];!c&&v[u-1];)c=l[--u];return e[h]=u,i[s]=e[h]+1,[e,i]}}(u==o?\"r\":u==i?\"g\":\"b\")}}return u.prototype={volume:function(t){return this._volume&&!t||(this._volume=(this.r2-this.r1+1)*(this.g2-this.g1+1)*(this.b2-this.b1+1)),this._volume},count:function(t){var r=this.histo;if(!this._count_set||t){var n,o,i,u=0;for(n=this.r1;n<=this.r2;n++)for(o=this.g1;o<=this.g2;o++)for(i=this.b1;i<=this.b2;i++)u+=r[e(n,o,i)]||0;this._count=u,this._count_set=!0}return this._count},copy:function(){return new u(this.r1,this.r2,this.g1,this.g2,this.b1,this.b2,this.histo)},avg:function(t){var n=this.histo;if(!this._avg||t){var o,i,u,a,s=0,h=1<<8-r,c=0,f=0,v=0;for(i=this.r1;i<=this.r2;i++)for(u=this.g1;u<=this.g2;u++)for(a=this.b1;a<=this.b2;a++)s+=o=n[e(i,u,a)]||0,c+=o*(i+.5)*h,f+=o*(u+.5)*h,v+=o*(a+.5)*h;this._avg=s?[~~(c/s),~~(f/s),~~(v/s)]:[~~(h*(this.r1+this.r2+1)/2),~~(h*(this.g1+this.g2+1)/2),~~(h*(this.b1+this.b2+1)/2)]}return this._avg},contains:function(t){var r=t[0]>>n;return gval=t[1]>>n,bval=t[2]>>n,r>=this.r1&&r<=this.r2&&gval>=this.g1&&gval<=this.g2&&bval>=this.b1&&bval<=this.b2}},a.prototype={push:function(t){this.vboxes.push({vbox:t,color:t.avg()})},palette:function(){return this.vboxes.map(function(t){return t.color})},size:function(){return this.vboxes.size()},map:function(t){for(var r=this.vboxes,n=0;n<r.size();n++)if(r.peek(n).vbox.contains(t))return r.peek(n).color;return this.nearest(t)},nearest:function(t){for(var r,n,o,e=this.vboxes,i=0;i<e.size();i++)((n=Math.sqrt(Math.pow(t[0]-e.peek(i).color[0],2)+Math.pow(t[1]-e.peek(i).color[1],2)+Math.pow(t[2]-e.peek(i).color[2],2)))<r||void 0===r)&&(r=n,o=e.peek(i).color);return o},forcebw:function(){var r=this.vboxes;r.sort(function(r,n){return t.naturalOrder(t.sum(r.color),t.sum(n.color))});var n=r[0].color;n[0]<5&&n[1]<5&&n[2]<5&&(r[0].color=[0,0,0]);var o=r.length-1,e=r[o].color;e[0]>251&&e[1]>251&&e[2]>251&&(r[o].color=[255,255,255])}},{quantize:function(h,c){if(!h.length||c<2||c>256)return!1;var f=function(t){var o,i=new Array(1<<3*r);return t.forEach(function(t){o=e(t[0]>>n,t[1]>>n,t[2]>>n),i[o]=(i[o]||0)+1}),i}(h);f.forEach(function(){});var v=function(t,r){var o,e,i,a=1e6,s=0,h=1e6,c=0,f=1e6,v=0;return t.forEach(function(t){(o=t[0]>>n)<a?a=o:o>s&&(s=o),(e=t[1]>>n)<h?h=e:e>c&&(c=e),(i=t[2]>>n)<f?f=i:i>v&&(v=i)}),new u(a,s,h,c,f,v,r)}(h,f),l=new i(function(r,n){return t.naturalOrder(r.count(),n.count())});function g(t,r){for(var n,e=t.size(),i=0;i<o;){if(e>=r)return;if(i++>o)return;if((n=t.pop()).count()){var u=s(f,n),a=u[0],h=u[1];if(!a)return;t.push(a),h&&(t.push(h),e++)}else t.push(n),i++}}l.push(v),g(l,.75*c);for(var p=new i(function(r,n){return t.naturalOrder(r.count()*r.volume(),n.count()*n.volume())});l.size();)p.push(l.pop());g(p,c);for(var b=new a;p.size();)b.push(p.pop());return b}}}().quantize,n=function(t){this.canvas=document.createElement(\"canvas\"),this.context=this.canvas.getContext(\"2d\"),this.width=this.canvas.width=t.naturalWidth,this.height=this.canvas.height=t.naturalHeight,this.context.drawImage(t,0,0,this.width,this.height)};n.prototype.getImageData=function(){return this.context.getImageData(0,0,this.width,this.height)};var o=function(){};o.prototype.getColor=function(t,r){return void 0===r&&(r=10),this.getPalette(t,5,r)[0]},o.prototype.getPalette=function(t,o,e){var i=function(t){var r=t.colorCount,n=t.quality;if(void 0!==r&&Number.isInteger(r)){if(1===r)throw new Error(\"colorCount should be between 2 and 20. To get one color, call getColor() instead of getPalette()\");r=Math.max(r,2),r=Math.min(r,20)}else r=10;return(void 0===n||!Number.isInteger(n)||n<1)&&(n=10),{colorCount:r,quality:n}}({colorCount:o,quality:e}),u=new n(t),a=function(t,r,n){for(var o=t,e=[],i=0,u=void 0,a=void 0,s=void 0,h=void 0,c=void 0;i<r;i+=n)a=o[0+(u=4*i)],s=o[u+1],h=o[u+2],(void 0===(c=o[u+3])||c>=125)&&(a>250&&s>250&&h>250||e.push([a,s,h]));return e}(u.getImageData().data,u.width*u.height,i.quality),s=r(a,i.colorCount);return s?s.palette():null},o.prototype.getColorFromUrl=function(t,r,n){var o=this,e=document.createElement(\"img\");e.addEventListener(\"load\",function(){var i=o.getPalette(e,5,n);r(i[0],t)}),e.src=t},o.prototype.getImageData=function(t,r){var n=new XMLHttpRequest;n.open(\"GET\",t,!0),n.responseType=\"arraybuffer\",n.onload=function(){if(200==this.status){var t=new Uint8Array(this.response);i=t.length;for(var n=new Array(i),o=0;o<t.length;o++)n[o]=String.fromCharCode(t[o]);var e=n.join(\"\"),u=window.btoa(e);r(\"data:image/png;base64,\"+u)}},n.send()},o.prototype.getColorAsync=function(t,r,n){var o=this;this.getImageData(t,function(t){var e=document.createElement(\"img\");e.addEventListener(\"load\",function(){var t=o.getPalette(e,5,n);r(t[0],this)}),e.src=t})};export default o;\n","import ColorThief from 'colorthief';\r\nconst colourElements = document.querySelectorAll(\".colour-swatch\");\r\ncolourElements.forEach(item => {\r\n // image\r\n const image = item.querySelector(\".colour-watch-img >img\");\r\n if (image.complete) {\r\n apply(item, image);\r\n }\r\n image.addEventListener(\"load\", () => {\r\n apply(item, image);\r\n });\r\n});\r\nfunction apply(item, image) {\r\n if (image.width === 0 || image.height === 0 || !image.complete)\r\n return;\r\n const colorThief = new ColorThief();\r\n const [r, g, b] = colorThief.getColor(image);\r\n const contrast = getcontrast(r, g, b);\r\n item.classList.toggle(\"colour-swatch-toggle-dark\", contrast === 'black');\r\n}\r\nfunction getcontrast(r, g, b) {\r\n const yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;\r\n return (yiq >= 128) ? 'black' : 'white';\r\n}\r\nexport default undefined;\r\n","// Because we're using webpack and have configured it to understand `.scss`\r\n// we're able to import this sass file and webpack will output it to a css file\r\nimport \"./index.scss\";\r\nimport \"bootstrap\";\r\nimport $ from \"jquery\";\r\nimport \"./scripts/product-filter\";\r\nimport \"./scripts/navbar\";\r\nimport \"./scripts/drawer\";\r\nimport \"./scripts/carousel\";\r\nimport \"./scripts/gallery-lightbox\";\r\nimport \"./scripts/save-colours\";\r\nimport \"./scripts/my-samples-form\";\r\nimport \"./scripts/hero\";\r\nimport \"./scripts/save-colour-icon\";\r\nimport \"./scripts/livechat\";\r\nimport \"./scripts/featured-tabs\";\r\n// smoothscroll current page\r\nfunction performSmoothscroll(element) {\r\n // expand accordion\r\n let offsetHeight = 0;\r\n if (element.classList.contains(\"collapse\")) {\r\n $(element).collapse(\"show\");\r\n if (element.classList.contains(\"accordion-item-body\")) {\r\n offsetHeight = 80;\r\n }\r\n }\r\n var { top } = offset(element);\r\n const newTop = top - offsetHeight;\r\n // temporary solution for IE11\r\n if (isIE()) {\r\n window.scrollTo(0, newTop);\r\n }\r\n else {\r\n window.scrollTo({ top: newTop, behavior: \"smooth\" });\r\n }\r\n}\r\ndocument.querySelectorAll(\"a[data-smoothscroll]\").forEach((el) => {\r\n el.addEventListener(\"click\", (e) => {\r\n let href = e.currentTarget.getAttribute(\"href\");\r\n if (href.indexOf(\"#\") === 0 && href.length > 1) {\r\n e.preventDefault();\r\n performSmoothscroll(document.querySelector(href));\r\n }\r\n });\r\n});\r\n// smooth scroll on page loaded\r\nconst hash = window.location.hash;\r\nif (!!hash && hash.length > 1) {\r\n $(window).on(\"load\", function () {\r\n performSmoothscroll(document.querySelector(hash));\r\n // remove hash from url\r\n remove_hash_from_url();\r\n });\r\n}\r\nfunction remove_hash_from_url() {\r\n var uri = window.location.toString();\r\n if (uri.indexOf(\"#\") > 0) {\r\n var clean_uri = uri.substring(0, uri.indexOf(\"#\"));\r\n window.history.replaceState({}, document.title, clean_uri);\r\n }\r\n}\r\nfunction isIE() {\r\n return navigator.userAgent.match(/Trident\\/7\\./);\r\n}\r\nfunction offset(el) {\r\n var rect = el.getBoundingClientRect(), scrollLeft = window.pageXOffset || document.documentElement.scrollLeft, scrollTop = window.pageYOffset || document.documentElement.scrollTop;\r\n var marginTop = parseFloat(window.getComputedStyle(el).marginTop.replace(\"px\", \"\"));\r\n return {\r\n top: rect.top + scrollTop - marginTop,\r\n left: rect.left + scrollLeft,\r\n };\r\n}\r\nfunction handleNavDropdown() {\r\n const navDropdown = document.querySelector(\".nav-dropdown\");\r\n if (navDropdown.classList.contains(\"dropdown-open\"))\r\n navDropdown.classList.remove(\"dropdown-open\");\r\n else\r\n navDropdown.classList.add(\"dropdown-open\");\r\n console.log(\"here\");\r\n}\r\n","window.__lc = window.__lc || {};\r\nwindow.__lc.license = 6631191;\r\nwindow.__lc.chat_between_groups = false;\r\n(function () {\r\n var lc = document.createElement(\"script\");\r\n lc.type = \"text/javascript\";\r\n lc.async = true;\r\n lc.src = (\"https:\" == document.location.protocol ? \"https://\" : \"http://\") + \"cdn.livechatinc.com/tracking.js\";\r\n var s = document.getElementsByTagName(\"script\")[0];\r\n s.parentNode.insertBefore(lc, s);\r\n})();\r\nexport default undefined;\r\n"],"names":["global","factory","module","document","w","Error","window","this","noGlobal","arr","getProto","Object","getPrototypeOf","slice","flat","array","concat","apply","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","call","support","isFunction","obj","nodeType","item","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","i","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","version","jQuery","selector","context","fn","init","isArrayLike","length","prototype","jquery","constructor","toArray","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","name","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","value","guid","Symbol","iterator","split","_i","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","childNodes","e","els","seed","m","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","testContext","scope","toSelector","join","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","input","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","not","matcher","unmatched","has","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","_matchIndexes","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","_name","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","n","rneedsContext","rsingleTag","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","targets","l","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","_","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","values","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","create","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","bind","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","for","class","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","_jQuery","_$","$","noConflict","isBrowser","navigator","timeoutDuration","longerTimeoutBrowsers","userAgent","debounce","Promise","called","scheduled","functionToCheck","getStyleComputedProperty","element","property","getParentNode","getScrollParent","_getStyleComputedProp","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","element1root","getScroll","side","upperSide","scrollingElement","includeScroll","modifier","bottom","getBordersSize","axis","sideA","sideB","getSize","computedStyle","getWindowSizes","classCallCheck","instance","Constructor","createClass","defineProperties","descriptor","protoProps","staticProps","_extends","assign","getClientRect","offsets","sizes","clientWidth","clientHeight","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderLeftWidth","marginTop","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","isFixed","getFixedPositionOffsetParent","parentElement","getBoundaries","popper","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","placement","refRect","rects","sortedAreas","area","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","runModifiers","modifiers","ends","findIndex","forEach","update","isDestroyed","arrowStyles","flipped","positionFixed","flip","originalPlacement","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","charAt","toCheck","destroy","willChange","disableEventListeners","removeOnDestroy","getWindow","attachToScrollParents","scrollParents","isBody","passive","setupEventListeners","updateBound","scrollElement","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","setStyles","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","Defaults","shiftvariation","_data$offsets","isVertical","shiftOffsets","preventOverflow","transformProp","popperStyles","transform","priority","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","querySelector","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","behavior","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","Popper","_this","Utils","PopperUtils","exports","_interopDefaultLegacy","default","$__default","Popper__default","_defineProperties","_createClass","_inheritsLoose","subClass","superClass","__proto__","TRANSITION_END","MAX_UID","MILLISECONDS_MULTIPLIER","getSpecialTransitionEndEvent","transitionEndEmulator","Util","triggerTransitionEnd","setTransitionEndSupport","emulateTransitionEnd","getUID","getSelectorFromElement","hrefAttr","getTransitionDurationFromElement","transitionDuration","transitionDelay","floatTransitionDuration","floatTransitionDelay","reflow","supportsTransitionEnd","Boolean","isElement","typeCheckConfig","componentName","config","configTypes","expectedTypes","valueType","findShadowRoot","attachShadow","ShadowRoot","jQueryDetection","minMajor","ltMajor","minMinor","minPatch","maxMajor","NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","SELECTOR_DISMISS","EVENT_CLOSE","EVENT_CLOSED","EVENT_CLICK_DATA_API","CLASS_NAME_ALERT","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","_element","_proto","close","rootElement","_getRootElement","_triggerCloseEvent","_removeElement","dispose","closeEvent","_destroyElement","_jQueryInterface","$element","_handleDismiss","alertInstance","NAME$1","VERSION$1","DATA_KEY$1","EVENT_KEY$1","DATA_API_KEY$1","JQUERY_NO_CONFLICT$1","CLASS_NAME_ACTIVE","CLASS_NAME_BUTTON","CLASS_NAME_FOCUS","SELECTOR_DATA_TOGGLE_CARROT","SELECTOR_DATA_TOGGLES","SELECTOR_DATA_TOGGLE","SELECTOR_DATA_TOGGLES_BUTTONS","SELECTOR_INPUT","SELECTOR_ACTIVE","SELECTOR_BUTTON","EVENT_CLICK_DATA_API$1","EVENT_FOCUS_BLUR_DATA_API","EVENT_LOAD_DATA_API","Button","shouldAvoidTriggerChange","triggerChangeEvent","addAriaPressed","classList","hasAttribute","avoidTriggerChange","initialButton","inputBtn","tagName","_len","_button","NAME$2","VERSION$2","DATA_KEY$2","EVENT_KEY$2","DATA_API_KEY$2","JQUERY_NO_CONFLICT$2","ARROW_LEFT_KEYCODE","ARROW_RIGHT_KEYCODE","TOUCHEVENT_COMPAT_WAIT","SWIPE_THRESHOLD","Default","keyboard","slide","pause","touch","DefaultType","DIRECTION_NEXT","DIRECTION_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","EVENT_DRAG_START","EVENT_LOAD_DATA_API$1","EVENT_CLICK_DATA_API$2","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE$1","CLASS_NAME_SLIDE","CLASS_NAME_RIGHT","CLASS_NAME_LEFT","CLASS_NAME_NEXT","CLASS_NAME_PREV","CLASS_NAME_POINTER_EVENT","SELECTOR_ACTIVE$1","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM","SELECTOR_ITEM_IMG","SELECTOR_NEXT_PREV","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","_slide","nextWhenVisible","cycle","clearInterval","setInterval","visibilityState","activeIndex","_getItemIndex","direction","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","move","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","nextElementInterval","defaultInterval","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","NAME$3","VERSION$3","DATA_KEY$3","EVENT_KEY$3","DATA_API_KEY$3","JQUERY_NO_CONFLICT$3","Default$1","DefaultType$1","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","EVENT_CLICK_DATA_API$3","CLASS_NAME_SHOW$1","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","DIMENSION_WIDTH","DIMENSION_HEIGHT","SELECTOR_ACTIVES","SELECTOR_DATA_TOGGLE$1","Collapse","_isTransitioning","_triggerArray","toggleList","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","startEvent","_getDimension","setTransitioning","scrollSize","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","isOpen","$trigger","$target","NAME$4","VERSION$4","DATA_KEY$4","EVENT_KEY$4","DATA_API_KEY$4","JQUERY_NO_CONFLICT$4","ESCAPE_KEYCODE","SPACE_KEYCODE","TAB_KEYCODE","ARROW_UP_KEYCODE","ARROW_DOWN_KEYCODE","RIGHT_MOUSE_BUTTON_WHICH","REGEXP_KEYDOWN","EVENT_HIDE$1","EVENT_HIDDEN$1","EVENT_SHOW$1","EVENT_SHOWN$1","EVENT_CLICK","EVENT_CLICK_DATA_API$4","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DISABLED","CLASS_NAME_SHOW$2","CLASS_NAME_DROPUP","CLASS_NAME_DROPRIGHT","CLASS_NAME_DROPLEFT","CLASS_NAME_MENURIGHT","CLASS_NAME_POSITION_STATIC","SELECTOR_DATA_TOGGLE$2","SELECTOR_FORM_CHILD","SELECTOR_MENU","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","Default$2","boundary","popperConfig","DefaultType$2","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","hideEvent","_getPlacement","$parentDropdown","_getOffset","toggles","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","NAME$5","VERSION$5","DATA_KEY$5","EVENT_KEY$5","DATA_API_KEY$5","JQUERY_NO_CONFLICT$5","ESCAPE_KEYCODE$1","Default$3","backdrop","DefaultType$3","EVENT_HIDE$2","EVENT_HIDE_PREVENTED","EVENT_HIDDEN$2","EVENT_SHOW$2","EVENT_SHOWN$2","EVENT_FOCUSIN","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_KEYDOWN_DISMISS","EVENT_MOUSEUP_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_CLICK_DATA_API$5","CLASS_NAME_SCROLLABLE","CLASS_NAME_SCROLLBAR_MEASURER","CLASS_NAME_BACKDROP","CLASS_NAME_OPEN","CLASS_NAME_FADE$1","CLASS_NAME_SHOW$3","CLASS_NAME_STATIC","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","SELECTOR_DATA_TOGGLE$3","SELECTOR_DATA_DISMISS","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","modalTransitionDuration","modalBody","ELEMENT_NODE","_enforceFocus","shownEvent","transitionComplete","_this5","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","paddingLeft","paddingRight","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","calculatedMargin","scrollDiv","scrollbarWidth","_this11","uriAttrs","DefaultWhitelist","br","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","pre","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attrName","regExp","attrRegex","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","whitelistKeys","_loop","elName","attributeList","whitelistedAttributes","NAME$6","VERSION$6","DATA_KEY$6","EVENT_KEY$6","JQUERY_NO_CONFLICT$6","CLASS_PREFIX","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","DefaultType$4","template","title","fallbackPlacement","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$4","HOVER_STATE_SHOW","HOVER_STATE_OUT","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","CLASS_NAME_FADE$2","CLASS_NAME_SHOW$4","SELECTOR_TOOLTIP_INNER","SELECTOR_ARROW","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","toggleEnabled","dataKey","_getDelegateConfig","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","_fixTransition","prevHoverState","_cleanTipClass","getTitle","setElementContent","_handlePopperPlacementChange","eventIn","eventOut","_fixTitle","titleType","dataAttributes","$tip","tabClass","popperData","initConfigAnimation","NAME$7","VERSION$7","DATA_KEY$7","EVENT_KEY$7","JQUERY_NO_CONFLICT$7","CLASS_PREFIX$1","BSCLS_PREFIX_REGEX$1","Default$5","DefaultType$5","CLASS_NAME_FADE$3","CLASS_NAME_SHOW$5","SELECTOR_TITLE","SELECTOR_CONTENT","Event$1","Popover","_Tooltip","_getContent","NAME$8","VERSION$8","DATA_KEY$8","EVENT_KEY$8","DATA_API_KEY$6","JQUERY_NO_CONFLICT$8","Default$6","DefaultType$6","EVENT_ACTIVATE","EVENT_SCROLL","EVENT_LOAD_DATA_API$2","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE$2","SELECTOR_DATA_SPY","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_ITEMS","SELECTOR_DROPDOWN_TOGGLE","METHOD_OFFSET","METHOD_POSITION","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","scrollSpys","$spy","NAME$9","VERSION$9","DATA_KEY$9","EVENT_KEY$9","DATA_API_KEY$7","JQUERY_NO_CONFLICT$9","EVENT_HIDE$3","EVENT_HIDDEN$3","EVENT_SHOW$3","EVENT_SHOWN$3","EVENT_CLICK_DATA_API$6","CLASS_NAME_DROPDOWN_MENU","CLASS_NAME_ACTIVE$3","CLASS_NAME_DISABLED$1","CLASS_NAME_FADE$4","CLASS_NAME_SHOW$6","SELECTOR_DROPDOWN$1","SELECTOR_NAV_LIST_GROUP$1","SELECTOR_ACTIVE$2","SELECTOR_ACTIVE_UL","SELECTOR_DATA_TOGGLE$4","SELECTOR_DROPDOWN_TOGGLE$1","SELECTOR_DROPDOWN_ACTIVE_CHILD","Tab","previous","listElement","itemSelector","hiddenEvent","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","NAME$a","VERSION$a","DATA_KEY$a","EVENT_KEY$a","JQUERY_NO_CONFLICT$a","EVENT_CLICK_DISMISS$1","EVENT_HIDE$4","EVENT_HIDDEN$4","EVENT_SHOW$4","EVENT_SHOWN$4","CLASS_NAME_FADE$5","CLASS_NAME_HIDE","CLASS_NAME_SHOW$7","CLASS_NAME_SHOWING","DefaultType$7","autohide","Default$7","SELECTOR_DATA_DISMISS$1","Toast","_clearTimeout","_close","Scrollspy","require$$0","require$$1","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","INFINITY","MAX_SAFE_INTEGER","NAN","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","freeSelf","Function","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","require","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","thisArg","arrayAggregator","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","eachFunc","baseFindIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseTrim","trimmedEndIndex","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","size","overArg","replaceHolders","setToArray","setToPairs","stringSize","lastIndex","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","runInContext","defaults","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Uint8Array","allocUnsafe","getPrototype","objectCreate","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","toStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","Map","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","isObject","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","entries","clear","entry","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","number","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","cloneArrayBuffer","dataView","buffer","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","baseDifference","includes","isCommon","valuesLength","outer","valuesIndex","templateSettings","evaluate","interpolate","variable","imports","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInvoke","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","criteria","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","trailing","createCompounder","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","newHolders","createRecurry","reorder","createInverter","toIteratee","baseInverter","createMathOperation","createOver","arrayFunc","createPadding","chars","charsLength","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrLength","arrStacked","arrValue","flatten","otherFunc","getValue","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","rand","memoize","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","findLastIndex","intersection","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","bindKey","WRAP_BIND_FLAG","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","cancel","flush","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gte","isError","isInteger","isNumber","isString","lte","iteratorToArray","remainder","toLength","isBinary","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invertBy","invoke","omit","CLONE_DEEP_FLAG","basePick","pickBy","toPairs","toPairsIn","word","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","minuend","subtrahend","castArray","chunk","compact","cond","conforms","baseConforms","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","fill","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","fromPairs","functions","functionsIn","mapKeys","mapValues","matchesProperty","nthArg","omitBy","orderBy","propertyOf","pullAllBy","pullAllWith","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","separator","limit","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","updateWith","valuesIn","zipObject","zipObjectDeep","entriesIn","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lastIndexOf","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","pad","strLength","padEnd","padStart","radix","floating","reduceRight","repeat","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","isEscaping","isEvaluating","importsKeys","importsValues","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","omission","substring","newEnd","unescape","uniqueId","eachRight","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","getView","iterLength","takeCount","iterIndex","commit","wrapped","toJSON","filterList","filterItem","expandToggle","applyTransition","filterCheckBoxes","onFilterChange","category","filteredCategories","history","replaceState","searchParams","URLSearchParams","newurl","pathname","insertUrlParam","applyFilter","categories","dataset","cleanUp","dispatchEvent","CustomEvent","query","decodeURIComponent","getParameterByName","readFilterFromQueryString","productRange","navDropdown","navUnderline","dropdownHeight","handleNavDropdown","openMenuBtn","closeMenuBtn","mobileMenu","documentScrollY","scrollY","disableBodyScrolling","enableBodyScrolling","handleMobileMenu","mobileProductRange","mobileProductRangeDropdown","handleMobileDropdown","triggers","overlay","modifierClass","Slick","instanceUid","dataSettings","accessibility","adaptiveHeight","appendArrows","appendDots","arrows","asNavFor","prevArrow","nextArrow","autoplay","autoplaySpeed","centerMode","centerPadding","cssEase","customPaging","slider","dots","dotsClass","draggable","edgeFriction","fade","focusOnSelect","focusOnChange","infinite","initialSlide","lazyLoad","mobileFirst","pauseOnHover","pauseOnFocus","pauseOnDotsHover","respondTo","responsive","rows","rtl","slidesPerRow","slidesToShow","slidesToScroll","swipe","swipeToSlide","touchMove","touchThreshold","useCSS","useTransform","variableWidth","vertical","verticalSwiping","waitForAnimate","initials","animating","dragging","autoPlayTimer","currentDirection","currentLeft","currentSlide","$dots","listWidth","listHeight","loadIndex","$nextArrow","$prevArrow","scrolling","slideCount","slideWidth","$slideTrack","$slides","sliding","slideOffset","swipeLeft","swiping","$list","touchObject","transformsEnabled","unslicked","activeBreakpoint","animType","animProp","breakpoints","breakpointSettings","cssTransitions","focussed","interrupted","paused","positionProp","rowCount","shouldClick","$slider","$slidesCache","transformType","transitionType","visibilityChange","windowWidth","windowTimer","mozHidden","webkitHidden","autoPlay","autoPlayClear","autoPlayIterator","changeSlide","clickHandler","selectHandler","setPosition","swipeHandler","dragHandler","keyHandler","htmlExpr","registerBreakpoints","activateADA","addSlide","slickAdd","markup","addBefore","unload","reinit","animateHeight","targetHeight","outerHeight","animateSlide","targetLeft","animProps","animStart","disableTransition","getNavTarget","slick","slideHandler","slideTo","buildArrows","buildDots","dot","getDotCount","buildOut","setupInfinite","updateDots","setSlideClasses","buildRows","c","newSlides","numOfSlides","originalSlides","slidesPerSection","row","checkResponsive","forceUpdate","breakpoint","targetBreakpoint","respondToWidth","triggerBreakpoint","sliderWidth","unslick","dontAnimate","indexOffset","checkNavigable","navigables","prevNavigable","getNavigableIndexes","cleanUpEvents","interrupt","cleanUpSlideEvents","orientationChange","resize","cleanUpRows","fadeSlide","fadeSlideOut","filterSlides","slickFilter","focusHandler","$sf","getCurrent","slickCurrentSlide","breakPoint","pagerQty","getLeft","verticalHeight","targetSlide","coef","verticalOffset","offsetLeft","outerWidth","getOption","slickGetOption","getSlick","getSlideCount","swipedSlide","swipeTarget","centerOffset","slideOuterWidth","goTo","slickGoTo","creation","setProps","startLoad","loadSlider","initializeEvents","updateArrows","initADA","numDotGroups","tabControlIndexes","slideControlIndex","role","ariaButtonControl","mappedSlideIndex","initArrowEvents","initDotEvents","initSlideEvents","initUI","loadRange","rangeStart","rangeEnd","loadImages","imagesScope","imageSource","imageSrcSet","imageSizes","imageToLoad","prevSlide","nextSlide","progressiveLazyLoad","slickNext","slickPause","play","slickPlay","postSlide","slickPrev","tryCount","$imgsToLoad","initializing","lastVisibleIndex","currentBreakpoint","responsiveSettings","windowDelay","removeSlide","slickRemove","removeBefore","removeAll","setCSS","positionProps","setDimensions","setFade","setHeight","setOption","slickSetOption","bodyStyle","WebkitTransition","MozTransition","msTransition","OTransform","perspectiveProperty","webkitPerspective","MozTransform","MozPerspective","webkitTransform","msTransform","allSlides","evenCoef","infiniteCount","targetElement","sync","animSlide","oldSlide","slideLeft","navTarget","swipeDirection","xDist","yDist","r","swipeAngle","startX","curX","startY","curY","atan2","swipeEnd","swipeLength","edgeHit","minSwipe","fingerCount","swipeStart","swipeMove","positionOffset","verticalSwipeLength","sqrt","pow","unfilterSlides","slickUnfilter","fromBreakpoint","productSlider","preview","closeBtn","mediaElement","lightboxLabel","showLightBox","credit","link","product","videoSources","video","controls","lightboxElement","log","SavedColour","_colours","all","localStorage","removeItem","_storekey","jsonString","getItem","write","setItem","stringify","wasSaved","colourId","save","willSave","unsave","savedColour","updateCounter","sampleCounter","amount","refreshToggle","savedColours","renderSavedColours","thumbnail","colour","productName","qtyInput","createAnInputSet","createSavedColourItem","updateEmptyMessage","panel","box1","box2","boxContainer","images","currentImage","currentIndex","o","naturalOrder","peek","debug","r1","r2","g1","g2","b1","b2","histo","vboxes","vbox","volume","h","f","_volume","_count_set","_count","avg","_avg","gval","bval","color","palette","nearest","forcebw","quantize","g","canvas","getContext","naturalWidth","naturalHeight","drawImage","getImageData","getColor","getPalette","colorCount","quality","Number","getColorFromUrl","btoa","getColorAsync","colorThief","ColorThief","contrast","getcontrast","performSmoothscroll","collapse","newTop","__lc","license","chat_between_groups","lc","uri","clean_uri","remove_hash_from_url"],"mappings":";;;;;;;;;;;;;0BAaA,SAAYA,EAAQC,GAalBC,UAAiBF,EAAOG,SACvBF,EAASD,GAAQ,GACjB,SAAUI,GACT,IAAMA,EAAED,SACP,MAAM,IAAIE,MAAO,4CAElB,OAAOJ,EAASG,IAnBpB,CA0BuB,oBAAXE,OAAyBA,OAASC,GAAM,SAAUD,EAAQE,GAQtE,IAAIC,EAAM,GAENC,EAAWC,OAAOC,eAElBC,EAAQJ,EAAII,MAEZC,EAEA,SAAUC,GACb,OAAON,EAAIO,OAAOC,MAAO,GAAIF,IAI1BG,EAAOT,EAAIS,KAEXC,EAAUV,EAAIU,QAEdC,EAAa,GAEbC,EAAWD,EAAWC,SAEtBC,EAASF,EAAWG,eAEpBC,EAAaF,EAAOD,SAEpBI,EAAuBD,EAAWE,KAAMf,QAExCgB,EAAU,GAEVC,EAAa,SAAqBC,GASpC,MAAsB,mBAARA,GAA8C,iBAAjBA,EAAIC,UAC1B,mBAAbD,EAAIE,MAIVC,EAAW,SAAmBH,GAChC,OAAc,MAAPA,GAAeA,IAAQA,EAAIvB,QAIhCH,EAAWG,EAAOH,SAIjB8B,EAA4B,CAC/BC,MAAM,EACNC,KAAK,EACLC,OAAO,EACPC,UAAU,GAGX,SAASC,EAASC,EAAMC,EAAMC,GAG7B,IAAIC,EAAGC,EACNC,GAHDH,EAAMA,GAAOtC,GAGC0C,cAAe,UAG7B,GADAD,EAAOE,KAAOP,EACTC,EACJ,IAAME,KAAKT,GAYVU,EAAMH,EAAME,IAAOF,EAAKO,cAAgBP,EAAKO,aAAcL,KAE1DE,EAAOI,aAAcN,EAAGC,GAI3BF,EAAIQ,KAAKC,YAAaN,GAASO,WAAWC,YAAaR,GAIzD,SAASS,EAAQxB,GAChB,OAAY,MAAPA,EACGA,EAAM,GAIQ,iBAARA,GAAmC,mBAARA,EACxCT,EAAYC,EAASK,KAAMG,KAAW,gBAC/BA,EAQT,IACCyB,EAAU,QAGVC,EAAS,SAAUC,EAAUC,GAI5B,OAAO,IAAIF,EAAOG,GAAGC,KAAMH,EAAUC,IA0VvC,SAASG,EAAa/B,GAMrB,IAAIgC,IAAWhC,GAAO,WAAYA,GAAOA,EAAIgC,OAC5C3B,EAAOmB,EAAQxB,GAEhB,OAAKD,EAAYC,KAASG,EAAUH,KAIpB,UAATK,GAA+B,IAAX2B,GACR,iBAAXA,GAAuBA,EAAS,GAAOA,EAAS,KAAOhC,GArWhE0B,EAAOG,GAAKH,EAAOO,UAAY,CAG9BC,OAAQT,EAERU,YAAaT,EAGbM,OAAQ,EAERI,QAAS,WACR,OAAOpD,EAAMa,KAAMnB,OAKpB2D,IAAK,SAAUC,GAGd,OAAY,MAAPA,EACGtD,EAAMa,KAAMnB,MAIb4D,EAAM,EAAI5D,KAAM4D,EAAM5D,KAAKsD,QAAWtD,KAAM4D,IAKpDC,UAAW,SAAUC,GAGpB,IAAIC,EAAMf,EAAOgB,MAAOhE,KAAKyD,cAAeK,GAM5C,OAHAC,EAAIE,WAAajE,KAGV+D,GAIRG,KAAM,SAAUC,GACf,OAAOnB,EAAOkB,KAAMlE,KAAMmE,IAG3BC,IAAK,SAAUD,GACd,OAAOnE,KAAK6D,UAAWb,EAAOoB,IAAKpE,MAAM,SAAUqE,EAAMlC,GACxD,OAAOgC,EAAShD,KAAMkD,EAAMlC,EAAGkC,QAIjC/D,MAAO,WACN,OAAON,KAAK6D,UAAWvD,EAAMI,MAAOV,KAAMsE,aAG3CC,MAAO,WACN,OAAOvE,KAAKwE,GAAI,IAGjBC,KAAM,WACL,OAAOzE,KAAKwE,IAAK,IAGlBE,KAAM,WACL,OAAO1E,KAAK6D,UAAWb,EAAO2B,KAAM3E,MAAM,SAAU4E,EAAOzC,GAC1D,OAASA,EAAI,GAAM,OAIrB0C,IAAK,WACJ,OAAO7E,KAAK6D,UAAWb,EAAO2B,KAAM3E,MAAM,SAAU4E,EAAOzC,GAC1D,OAAOA,EAAI,OAIbqC,GAAI,SAAUrC,GACb,IAAI2C,EAAM9E,KAAKsD,OACdyB,GAAK5C,GAAMA,EAAI,EAAI2C,EAAM,GAC1B,OAAO9E,KAAK6D,UAAWkB,GAAK,GAAKA,EAAID,EAAM,CAAE9E,KAAM+E,IAAQ,KAG5DC,IAAK,WACJ,OAAOhF,KAAKiE,YAAcjE,KAAKyD,eAKhC9C,KAAMA,EACNsE,KAAM/E,EAAI+E,KACVC,OAAQhF,EAAIgF,QAGblC,EAAOmC,OAASnC,EAAOG,GAAGgC,OAAS,WAClC,IAAIC,EAASC,EAAMzD,EAAK0D,EAAMC,EAAaC,EAC1CC,EAASnB,UAAW,IAAO,GAC3BnC,EAAI,EACJmB,EAASgB,UAAUhB,OACnBoC,GAAO,EAsBR,IAnBuB,kBAAXD,IACXC,EAAOD,EAGPA,EAASnB,UAAWnC,IAAO,GAC3BA,KAIsB,iBAAXsD,GAAwBpE,EAAYoE,KAC/CA,EAAS,IAILtD,IAAMmB,IACVmC,EAASzF,KACTmC,KAGOA,EAAImB,EAAQnB,IAGnB,GAAqC,OAA9BiD,EAAUd,UAAWnC,IAG3B,IAAMkD,KAAQD,EACbE,EAAOF,EAASC,GAIF,cAATA,GAAwBI,IAAWH,IAKnCI,GAAQJ,IAAUtC,EAAO2C,cAAeL,KAC1CC,EAAcK,MAAMC,QAASP,MAC/B1D,EAAM6D,EAAQJ,GAIbG,EADID,IAAgBK,MAAMC,QAASjE,GAC3B,GACI2D,GAAgBvC,EAAO2C,cAAe/D,GAG1CA,EAFA,GAIT2D,GAAc,EAGdE,EAAQJ,GAASrC,EAAOmC,OAAQO,EAAMF,EAAOF,SAGzBQ,IAATR,IACXG,EAAQJ,GAASC,IAOrB,OAAOG,GAGRzC,EAAOmC,OAAQ,CAGdY,QAAS,UAAahD,EAAUiD,KAAKC,UAAWC,QAAS,MAAO,IAGhEC,SAAS,EAETC,MAAO,SAAUC,GAChB,MAAM,IAAIvG,MAAOuG,IAGlBC,KAAM,aAENX,cAAe,SAAUrE,GACxB,IAAIiF,EAAOC,EAIX,SAAMlF,GAAgC,oBAAzBR,EAASK,KAAMG,QAI5BiF,EAAQpG,EAAUmB,KASK,mBADvBkF,EAAOzF,EAAOI,KAAMoF,EAAO,gBAAmBA,EAAM9C,cACfxC,EAAWE,KAAMqF,KAAWtF,IAGlEuF,cAAe,SAAUnF,GACxB,IAAI+D,EAEJ,IAAMA,KAAQ/D,EACb,OAAO,EAER,OAAO,GAKRoF,WAAY,SAAU1E,EAAMoD,EAASlD,GACpCH,EAASC,EAAM,CAAEH,MAAOuD,GAAWA,EAAQvD,OAASK,IAGrDgC,KAAM,SAAU5C,EAAK6C,GACpB,IAAIb,EAAQnB,EAAI,EAEhB,GAAKkB,EAAa/B,GAEjB,IADAgC,EAAShC,EAAIgC,OACLnB,EAAImB,IACqC,IAA3Ca,EAAShD,KAAMG,EAAKa,GAAKA,EAAGb,EAAKa,IADnBA,UAMpB,IAAMA,KAAKb,EACV,IAAgD,IAA3C6C,EAAShD,KAAMG,EAAKa,GAAKA,EAAGb,EAAKa,IACrC,MAKH,OAAOb,GAIRqF,UAAW,SAAUzG,EAAK0G,GACzB,IAAI7C,EAAM6C,GAAW,GAarB,OAXY,MAAP1G,IACCmD,EAAajD,OAAQF,IACzB8C,EAAOgB,MAAOD,EACE,iBAAR7D,EACN,CAAEA,GAAQA,GAGZS,EAAKQ,KAAM4C,EAAK7D,IAIX6D,GAGR8C,QAAS,SAAUxC,EAAMnE,EAAKiC,GAC7B,OAAc,MAAPjC,GAAe,EAAIU,EAAQO,KAAMjB,EAAKmE,EAAMlC,IAKpD6B,MAAO,SAAUO,EAAOuC,GAKvB,IAJA,IAAIhC,GAAOgC,EAAOxD,OACjByB,EAAI,EACJ5C,EAAIoC,EAAMjB,OAEHyB,EAAID,EAAKC,IAChBR,EAAOpC,KAAQ2E,EAAQ/B,GAKxB,OAFAR,EAAMjB,OAASnB,EAERoC,GAGRI,KAAM,SAAUb,EAAOK,EAAU4C,GAShC,IARA,IACCC,EAAU,GACV7E,EAAI,EACJmB,EAASQ,EAAMR,OACf2D,GAAkBF,EAIX5E,EAAImB,EAAQnB,KACAgC,EAAUL,EAAO3B,GAAKA,KAChB8E,GACxBD,EAAQrG,KAAMmD,EAAO3B,IAIvB,OAAO6E,GAIR5C,IAAK,SAAUN,EAAOK,EAAU+C,GAC/B,IAAI5D,EAAQ6D,EACXhF,EAAI,EACJ4B,EAAM,GAGP,GAAKV,EAAaS,GAEjB,IADAR,EAASQ,EAAMR,OACPnB,EAAImB,EAAQnB,IAGL,OAFdgF,EAAQhD,EAAUL,EAAO3B,GAAKA,EAAG+E,KAGhCnD,EAAIpD,KAAMwG,QAMZ,IAAMhF,KAAK2B,EAGI,OAFdqD,EAAQhD,EAAUL,EAAO3B,GAAKA,EAAG+E,KAGhCnD,EAAIpD,KAAMwG,GAMb,OAAO5G,EAAMwD,IAIdqD,KAAM,EAINhG,QAASA,IAGa,mBAAXiG,SACXrE,EAAOG,GAAIkE,OAAOC,UAAapH,EAAKmH,OAAOC,WAI5CtE,EAAOkB,KAAM,uEAAuEqD,MAAO,MAC1F,SAAUC,EAAInC,GACbxE,EAAY,WAAawE,EAAO,KAAQA,EAAKoC,iBAmB/C,IAAIC;;;;;;;;;;;AAWJ,SAAY3H,GACZ,IAAIoC,EACHf,EACAuG,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAC,EACAxI,EACAyI,EACAC,EACAC,EACAC,EACAxB,EACAyB,EAGA1C,EAAU,SAAW,EAAI,IAAI2C,KAC7BC,EAAe5I,EAAOH,SACtBgJ,EAAU,EACVC,EAAO,EACPC,EAAaC,KACbC,EAAaD,KACbE,EAAgBF,KAChBG,EAAyBH,KACzBI,EAAY,SAAUC,EAAGC,GAIxB,OAHKD,IAAMC,IACVlB,GAAe,GAET,GAIRpH,EAAS,GAAOC,eAChBd,EAAM,GACNoJ,EAAMpJ,EAAIoJ,IACVC,EAAarJ,EAAIS,KACjBA,EAAOT,EAAIS,KACXL,EAAQJ,EAAII,MAIZM,EAAU,SAAU4I,EAAMnF,GAGzB,IAFA,IAAIlC,EAAI,EACP2C,EAAM0E,EAAKlG,OACJnB,EAAI2C,EAAK3C,IAChB,GAAKqH,EAAMrH,KAAQkC,EAClB,OAAOlC,EAGT,OAAQ,GAGTsH,EAAW,6HAMXC,EAAa,sBAGbC,EAAa,oFAIbC,EAAa,2BAA4BD,EAAa,OAASD,EAG9D,gBAAkBA,EAIlB,2DAA6DC,EAAa,OAC1ED,EAAa,OAEdG,EAAU,KAAOF,EAAP,wFAOoBC,EAPpB,eAcVE,EAAc,IAAIC,OAAQL,EAAa,IAAK,KAC5CM,EAAQ,IAAID,OAAQ,uEACA,KAEpBE,EAAS,IAAIF,OAAQ,8CACrBG,EAAe,IAAIH,OAAQ,wEAE3BI,EAAW,IAAIJ,OAAQL,EAAa,MAEpCU,EAAU,IAAIL,OAAQF,GACtBQ,EAAc,IAAIN,OAAQ,IAAMJ,EAAa,KAE7CW,EAAY,CACXC,GAAM,IAAIR,OAAQ,MAAQJ,EAAa,KACvCa,MAAS,IAAIT,OAAQ,QAAUJ,EAAa,KAC5Cc,IAAO,IAAIV,OAAQ,KAAOJ,EAAa,SACvCe,KAAQ,IAAIX,OAAQ,IAAMH,GAC1Be,OAAU,IAAIZ,OAAQ,IAAMF,GAC5Be,MAAS,IAAIb,OAAQ,4LAE+B,KACpDc,KAAQ,IAAId,OAAQ,OAASN,EAAW,KAAM,KAI9CqB,aAAgB,IAAIf,OAAQ,6IAE2B,MAGxDgB,EAAQ,SACRC,EAAU,sCACVC,EAAU,SAEVC,EAAU,yBAGVC,EAAa,mCAEbC,GAAW,OAIXC,GAAY,IAAItB,OAAQ,8DAA8D,KACtFuB,GAAY,SAAUC,EAAQC,GAC7B,IAAIC,EAAO,KAAOF,EAAOjL,MAAO,GAAM,MAEtC,OAAOkL,IASNC,EAAO,EACNC,OAAOC,aAAcF,EAAO,OAC5BC,OAAOC,aAAcF,GAAQ,GAAK,MAAe,KAAPA,EAAe,SAK5DG,GAAa,sDACbC,GAAa,SAAUC,EAAIC,GAC1B,OAAKA,EAGQ,OAAPD,EACG,IAIDA,EAAGxL,MAAO,GAAI,GAAM,KAC1BwL,EAAGE,WAAYF,EAAGxI,OAAS,GAAIxC,SAAU,IAAO,IAI3C,KAAOgL,GAOfG,GAAgB,WACf7D,KAGD8D,GAAqBC,IACpB,SAAU9H,GACT,OAAyB,IAAlBA,EAAK+H,UAAqD,aAAhC/H,EAAKgI,SAAS5E,gBAEhD,CAAE6E,IAAK,aAAcC,KAAM,WAI7B,IACC5L,EAAKD,MACFR,EAAMI,EAAMa,KAAMwH,EAAa6D,YACjC7D,EAAa6D,YAMdtM,EAAKyI,EAAa6D,WAAWlJ,QAAS/B,SACrC,MAAQkL,GACT9L,EAAO,CAAED,MAAOR,EAAIoD,OAGnB,SAAUmC,EAAQiH,GACjBnD,EAAW7I,MAAO+E,EAAQnF,EAAMa,KAAMuL,KAKvC,SAAUjH,EAAQiH,GAKjB,IAJA,IAAI3H,EAAIU,EAAOnC,OACdnB,EAAI,EAGKsD,EAAQV,KAAQ2H,EAAKvK,OAC/BsD,EAAOnC,OAASyB,EAAI,IAKvB,SAAS2C,GAAQzE,EAAUC,EAAS0D,EAAS+F,GAC5C,IAAIC,EAAGzK,EAAGkC,EAAMwI,EAAKC,EAAOC,EAAQC,EACnCC,EAAa/J,GAAWA,EAAQgK,cAGhC3L,EAAW2B,EAAUA,EAAQ3B,SAAW,EAKzC,GAHAqF,EAAUA,GAAW,GAGI,iBAAb3D,IAA0BA,GACxB,IAAb1B,GAA+B,IAAbA,GAA+B,KAAbA,EAEpC,OAAOqF,EAIR,IAAM+F,IACLvE,EAAalF,GACbA,EAAUA,GAAWtD,EAEhB0I,GAAiB,CAIrB,GAAkB,KAAb/G,IAAqBuL,EAAQ3B,EAAWgC,KAAMlK,IAGlD,GAAO2J,EAAIE,EAAO,IAGjB,GAAkB,IAAbvL,EAAiB,CACrB,KAAO8C,EAAOnB,EAAQkK,eAAgBR,IAUrC,OAAOhG,EALP,GAAKvC,EAAKgJ,KAAOT,EAEhB,OADAhG,EAAQjG,KAAM0D,GACPuC,OAYT,GAAKqG,IAAgB5I,EAAO4I,EAAWG,eAAgBR,KACtDnE,EAAUvF,EAASmB,IACnBA,EAAKgJ,KAAOT,EAGZ,OADAhG,EAAQjG,KAAM0D,GACPuC,MAKH,CAAA,GAAKkG,EAAO,GAElB,OADAnM,EAAKD,MAAOkG,EAAS1D,EAAQoK,qBAAsBrK,IAC5C2D,EAGD,IAAOgG,EAAIE,EAAO,KAAS1L,EAAQmM,wBACzCrK,EAAQqK,uBAGR,OADA5M,EAAKD,MAAOkG,EAAS1D,EAAQqK,uBAAwBX,IAC9ChG,EAKT,GAAKxF,EAAQoM,MACXtE,EAAwBjG,EAAW,QACjCsF,IAAcA,EAAUkF,KAAMxK,MAIlB,IAAb1B,GAAqD,WAAnC2B,EAAQmJ,SAAS5E,eAA+B,CAYpE,GAVAuF,EAAc/J,EACdgK,EAAa/J,EASK,IAAb3B,IACF4I,EAASsD,KAAMxK,IAAciH,EAAauD,KAAMxK,IAAe,CAqBjE,KAlBAgK,EAAa7B,GAASqC,KAAMxK,IAAcyK,GAAaxK,EAAQN,aAC9DM,KAImBA,GAAY9B,EAAQuM,SAGhCd,EAAM3J,EAAQV,aAAc,OAClCqK,EAAMA,EAAI3G,QAAS0F,GAAYC,IAE/B3I,EAAQT,aAAc,KAAQoK,EAAM9G,IAMtC5D,GADA4K,EAASjF,EAAU7E,IACRK,OACHnB,KACP4K,EAAQ5K,IAAQ0K,EAAM,IAAMA,EAAM,UAAa,IAC9Ce,GAAYb,EAAQ5K,IAEtB6K,EAAcD,EAAOc,KAAM,KAG5B,IAIC,OAHAlN,EAAKD,MAAOkG,EACXqG,EAAWa,iBAAkBd,IAEvBpG,EACN,MAAQmH,GACT7E,EAAwBjG,GAAU,WAE7B4J,IAAQ9G,GACZ7C,EAAQ8K,gBAAiB,QAQ9B,OAAOhG,EAAQ/E,EAASiD,QAAS8D,EAAO,MAAQ9G,EAAS0D,EAAS+F,GASnE,SAAS5D,KACR,IAAIkF,EAAO,GAYX,OAVA,SAASC,EAAOC,EAAKhH,GAQpB,OALK8G,EAAKtN,KAAMwN,EAAM,KAAQxG,EAAKyG,oBAG3BF,EAAOD,EAAKI,SAEXH,EAAOC,EAAM,KAAQhH,GAShC,SAASmH,GAAcnL,GAEtB,OADAA,EAAI4C,IAAY,EACT5C,EAOR,SAASoL,GAAQpL,GAChB,IAAIqL,EAAK5O,EAAS0C,cAAe,YAEjC,IACC,QAASa,EAAIqL,GACZ,MAAQ/B,GACT,OAAO,UAIF+B,EAAG5L,YACP4L,EAAG5L,WAAWC,YAAa2L,GAI5BA,EAAK,MASP,SAASC,GAAWC,EAAOC,GAI1B,IAHA,IAAIzO,EAAMwO,EAAMnH,MAAO,KACtBpF,EAAIjC,EAAIoD,OAEDnB,KACPwF,EAAKiH,WAAY1O,EAAKiC,IAAQwM,EAUhC,SAASE,GAAczF,EAAGC,GACzB,IAAIyF,EAAMzF,GAAKD,EACd2F,EAAOD,GAAsB,IAAf1F,EAAE7H,UAAiC,IAAf8H,EAAE9H,UACnC6H,EAAE4F,YAAc3F,EAAE2F,YAGpB,GAAKD,EACJ,OAAOA,EAIR,GAAKD,EACJ,KAAUA,EAAMA,EAAIG,aACnB,GAAKH,IAAQzF,EACZ,OAAQ,EAKX,OAAOD,EAAI,GAAK,EAOjB,SAAS8F,GAAmBvN,GAC3B,OAAO,SAAU0C,GAEhB,MAAgB,UADLA,EAAKgI,SAAS5E,eACEpD,EAAK1C,OAASA,GAQ3C,SAASwN,GAAoBxN,GAC5B,OAAO,SAAU0C,GAChB,IAAIgB,EAAOhB,EAAKgI,SAAS5E,cACzB,OAAkB,UAATpC,GAA6B,WAATA,IAAuBhB,EAAK1C,OAASA,GAQpE,SAASyN,GAAsBhD,GAG9B,OAAO,SAAU/H,GAKhB,MAAK,SAAUA,EASTA,EAAKzB,aAAgC,IAAlByB,EAAK+H,SAGvB,UAAW/H,EACV,UAAWA,EAAKzB,WACbyB,EAAKzB,WAAWwJ,WAAaA,EAE7B/H,EAAK+H,WAAaA,EAMpB/H,EAAKgL,aAAejD,GAI1B/H,EAAKgL,cAAgBjD,GACrBF,GAAoB7H,KAAW+H,EAG1B/H,EAAK+H,WAAaA,EAKd,UAAW/H,GACfA,EAAK+H,WAAaA,GAY5B,SAASkD,GAAwBnM,GAChC,OAAOmL,IAAc,SAAUiB,GAE9B,OADAA,GAAYA,EACLjB,IAAc,SAAU3B,EAAM3F,GAMpC,IALA,IAAIjC,EACHyK,EAAerM,EAAI,GAAIwJ,EAAKrJ,OAAQiM,GACpCpN,EAAIqN,EAAalM,OAGVnB,KACFwK,EAAQ5H,EAAIyK,EAAcrN,MAC9BwK,EAAM5H,KAASiC,EAASjC,GAAM4H,EAAM5H,WAYzC,SAAS2I,GAAaxK,GACrB,OAAOA,QAAmD,IAAjCA,EAAQoK,sBAAwCpK,EAkrC1E,IAAMf,KA9qCNf,EAAUsG,GAAOtG,QAAU,GAO3ByG,EAAQH,GAAOG,MAAQ,SAAUxD,GAChC,IAAIoL,EAAYpL,GAAQA,EAAKqL,aAC5BrH,EAAUhE,IAAUA,EAAK6I,eAAiB7I,GAAOsL,gBAKlD,OAAQ5E,EAAM0C,KAAMgC,GAAapH,GAAWA,EAAQgE,UAAY,SAQjEjE,EAAcV,GAAOU,YAAc,SAAUnG,GAC5C,IAAI2N,EAAYC,EACf3N,EAAMD,EAAOA,EAAKiL,eAAiBjL,EAAO0G,EAO3C,OAAKzG,GAAOtC,GAA6B,IAAjBsC,EAAIX,UAAmBW,EAAIyN,iBAMnDtH,GADAzI,EAAWsC,GACQyN,gBACnBrH,GAAkBT,EAAOjI,GAQpB+I,GAAgB/I,IAClBiQ,EAAYjQ,EAASkQ,cAAiBD,EAAUE,MAAQF,IAGrDA,EAAUG,iBACdH,EAAUG,iBAAkB,SAAU/D,IAAe,GAG1C4D,EAAUI,aACrBJ,EAAUI,YAAa,WAAYhE,KASrC7K,EAAQuM,MAAQY,IAAQ,SAAUC,GAEjC,OADAnG,EAAQ1F,YAAa6L,GAAK7L,YAAa/C,EAAS0C,cAAe,aACzB,IAAxBkM,EAAGV,mBACfU,EAAGV,iBAAkB,uBAAwBxK,UAShDlC,EAAQwI,WAAa2E,IAAQ,SAAUC,GAEtC,OADAA,EAAG0B,UAAY,KACP1B,EAAGhM,aAAc,gBAO1BpB,EAAQkM,qBAAuBiB,IAAQ,SAAUC,GAEhD,OADAA,EAAG7L,YAAa/C,EAASuQ,cAAe,MAChC3B,EAAGlB,qBAAsB,KAAMhK,UAIxClC,EAAQmM,uBAAyBrC,EAAQuC,KAAM7N,EAAS2N,wBAMxDnM,EAAQgP,QAAU7B,IAAQ,SAAUC,GAEnC,OADAnG,EAAQ1F,YAAa6L,GAAKnB,GAAKtH,GACvBnG,EAASyQ,oBAAsBzQ,EAASyQ,kBAAmBtK,GAAUzC,UAIzElC,EAAQgP,SACZzI,EAAK2I,UAAiB,SAAUjD,GAC/B,IAAIkD,EAASlD,EAAGnH,QAASmF,GAAWC,IACpC,OAAO,SAAUjH,GAChB,OAAOA,EAAK7B,aAAc,QAAW+N,IAGvC5I,EAAK6I,QAAe,SAAUnD,EAAInK,GACjC,QAAuC,IAA3BA,EAAQkK,gBAAkC9E,EAAiB,CACtE,IAAIjE,EAAOnB,EAAQkK,eAAgBC,GACnC,OAAOhJ,EAAO,CAAEA,GAAS,OAI3BsD,EAAK2I,UAAkB,SAAUjD,GAChC,IAAIkD,EAASlD,EAAGnH,QAASmF,GAAWC,IACpC,OAAO,SAAUjH,GAChB,IAAIpC,OAAwC,IAA1BoC,EAAKoM,kBACtBpM,EAAKoM,iBAAkB,MACxB,OAAOxO,GAAQA,EAAKkF,QAAUoJ,IAMhC5I,EAAK6I,QAAe,SAAUnD,EAAInK,GACjC,QAAuC,IAA3BA,EAAQkK,gBAAkC9E,EAAiB,CACtE,IAAIrG,EAAME,EAAG2B,EACZO,EAAOnB,EAAQkK,eAAgBC,GAEhC,GAAKhJ,EAAO,CAIX,IADApC,EAAOoC,EAAKoM,iBAAkB,QACjBxO,EAAKkF,QAAUkG,EAC3B,MAAO,CAAEhJ,GAMV,IAFAP,EAAQZ,EAAQmN,kBAAmBhD,GACnClL,EAAI,EACMkC,EAAOP,EAAO3B,MAEvB,IADAF,EAAOoC,EAAKoM,iBAAkB,QACjBxO,EAAKkF,QAAUkG,EAC3B,MAAO,CAAEhJ,GAKZ,MAAO,MAMVsD,EAAK6I,SAAgBpP,EAAQkM,qBAC5B,SAAUoD,EAAKxN,GACd,YAA6C,IAAjCA,EAAQoK,qBACZpK,EAAQoK,qBAAsBoD,GAG1BtP,EAAQoM,IACZtK,EAAQ4K,iBAAkB4C,QAD3B,GAKR,SAAUA,EAAKxN,GACd,IAAImB,EACHsM,EAAM,GACNxO,EAAI,EAGJyE,EAAU1D,EAAQoK,qBAAsBoD,GAGzC,GAAa,MAARA,EAAc,CAClB,KAAUrM,EAAOuC,EAASzE,MACF,IAAlBkC,EAAK9C,UACToP,EAAIhQ,KAAM0D,GAIZ,OAAOsM,EAER,OAAO/J,GAITe,EAAK6I,WAAkBpP,EAAQmM,wBAA0B,SAAU2C,EAAWhN,GAC7E,QAA+C,IAAnCA,EAAQqK,wBAA0CjF,EAC7D,OAAOpF,EAAQqK,uBAAwB2C,IAUzC1H,EAAgB,GAOhBD,EAAY,IAELnH,EAAQoM,IAAMtC,EAAQuC,KAAM7N,EAASkO,qBAI3CS,IAAQ,SAAUC,GAEjB,IAAIoC,EAOJvI,EAAQ1F,YAAa6L,GAAKqC,UAAY,UAAY9K,EAAZ,qBACpBA,EADoB,kEAQjCyI,EAAGV,iBAAkB,wBAAyBxK,QAClDiF,EAAU5H,KAAM,yCAKX6N,EAAGV,iBAAkB,cAAexK,QACzCiF,EAAU5H,KAAM,mCAAoC8I,EAAW,KAI1D+E,EAAGV,iBAAkB,QAAU/H,EAAU,MAAOzC,QACrDiF,EAAU5H,KAAM,OAQjBiQ,EAAQhR,EAAS0C,cAAe,UAC1BG,aAAc,OAAQ,IAC5B+L,EAAG7L,YAAaiO,GACVpC,EAAGV,iBAAkB,aAAcxK,QACxCiF,EAAU5H,KAAM,mFAOX6N,EAAGV,iBAAkB,YAAaxK,QACvCiF,EAAU5H,KAAM,YAMX6N,EAAGV,iBAAkB,KAAO/H,EAAU,MAAOzC,QAClDiF,EAAU5H,KAAM,YAKjB6N,EAAGV,iBAAkB,QACrBvF,EAAU5H,KAAM,kBAGjB4N,IAAQ,SAAUC,GACjBA,EAAGqC,UAAY,oFAKf,IAAID,EAAQhR,EAAS0C,cAAe,SACpCsO,EAAMnO,aAAc,OAAQ,UAC5B+L,EAAG7L,YAAaiO,GAAQnO,aAAc,OAAQ,KAIzC+L,EAAGV,iBAAkB,YAAaxK,QACtCiF,EAAU5H,KAAM,sCAKiC,IAA7C6N,EAAGV,iBAAkB,YAAaxK,QACtCiF,EAAU5H,KAAM,WAAY,aAK7B0H,EAAQ1F,YAAa6L,GAAKpC,UAAW,EACc,IAA9CoC,EAAGV,iBAAkB,aAAcxK,QACvCiF,EAAU5H,KAAM,WAAY,aAK7B6N,EAAGV,iBAAkB,QACrBvF,EAAU5H,KAAM,aAIXS,EAAQ0P,gBAAkB5F,EAAQuC,KAAQzG,EAAUqB,EAAQrB,SAClEqB,EAAQ0I,uBACR1I,EAAQ2I,oBACR3I,EAAQ4I,kBACR5I,EAAQ6I,qBAER3C,IAAQ,SAAUC,GAIjBpN,EAAQ+P,kBAAoBnK,EAAQ7F,KAAMqN,EAAI,KAI9CxH,EAAQ7F,KAAMqN,EAAI,aAClBhG,EAAc7H,KAAM,KAAMkJ,MAI5BtB,EAAYA,EAAUjF,QAAU,IAAIyG,OAAQxB,EAAUsF,KAAM,MAC5DrF,EAAgBA,EAAclF,QAAU,IAAIyG,OAAQvB,EAAcqF,KAAM,MAIxE+B,EAAa1E,EAAQuC,KAAMpF,EAAQ+I,yBAKnC3I,EAAWmH,GAAc1E,EAAQuC,KAAMpF,EAAQI,UAC9C,SAAUW,EAAGC,GACZ,IAAIgI,EAAuB,IAAfjI,EAAE7H,SAAiB6H,EAAEuG,gBAAkBvG,EAClDkI,EAAMjI,GAAKA,EAAEzG,WACd,OAAOwG,IAAMkI,MAAWA,GAAwB,IAAjBA,EAAI/P,YAClC8P,EAAM5I,SACL4I,EAAM5I,SAAU6I,GAChBlI,EAAEgI,yBAA8D,GAAnChI,EAAEgI,wBAAyBE,MAG3D,SAAUlI,EAAGC,GACZ,GAAKA,EACJ,KAAUA,EAAIA,EAAEzG,YACf,GAAKyG,IAAMD,EACV,OAAO,EAIV,OAAO,GAOTD,EAAYyG,EACZ,SAAUxG,EAAGC,GAGZ,GAAKD,IAAMC,EAEV,OADAlB,GAAe,EACR,EAIR,IAAIoJ,GAAWnI,EAAEgI,yBAA2B/H,EAAE+H,wBAC9C,OAAKG,IAgBU,GAPfA,GAAYnI,EAAE8D,eAAiB9D,KAASC,EAAE6D,eAAiB7D,GAC1DD,EAAEgI,wBAAyB/H,GAG3B,KAIGjI,EAAQoQ,cAAgBnI,EAAE+H,wBAAyBhI,KAAQmI,EAOzDnI,GAAKxJ,GAAYwJ,EAAE8D,eAAiBvE,GACxCF,EAAUE,EAAcS,IAChB,EAOJC,GAAKzJ,GAAYyJ,EAAE6D,eAAiBvE,GACxCF,EAAUE,EAAcU,GACjB,EAIDnB,EACJtH,EAASsH,EAAWkB,GAAMxI,EAASsH,EAAWmB,GAChD,EAGe,EAAVkI,GAAe,EAAI,IAE3B,SAAUnI,EAAGC,GAGZ,GAAKD,IAAMC,EAEV,OADAlB,GAAe,EACR,EAGR,IAAI2G,EACH3M,EAAI,EACJsP,EAAMrI,EAAExG,WACR0O,EAAMjI,EAAEzG,WACR8O,EAAK,CAAEtI,GACPuI,EAAK,CAAEtI,GAGR,IAAMoI,IAAQH,EAMb,OAAOlI,GAAKxJ,GAAY,EACvByJ,GAAKzJ,EAAW,EAEhB6R,GAAO,EACPH,EAAM,EACNpJ,EACEtH,EAASsH,EAAWkB,GAAMxI,EAASsH,EAAWmB,GAChD,EAGK,GAAKoI,IAAQH,EACnB,OAAOzC,GAAczF,EAAGC,GAKzB,IADAyF,EAAM1F,EACI0F,EAAMA,EAAIlM,YACnB8O,EAAGE,QAAS9C,GAGb,IADAA,EAAMzF,EACIyF,EAAMA,EAAIlM,YACnB+O,EAAGC,QAAS9C,GAIb,KAAQ4C,EAAIvP,KAAQwP,EAAIxP,IACvBA,IAGD,OAAOA,EAGN0M,GAAc6C,EAAIvP,GAAKwP,EAAIxP,IAO3BuP,EAAIvP,IAAOwG,GAAgB,EAC3BgJ,EAAIxP,IAAOwG,EAAe,EAE1B,GAGK/I,GA/cCA,GAkdT8H,GAAOV,QAAU,SAAU6K,EAAMC,GAChC,OAAOpK,GAAQmK,EAAM,KAAM,KAAMC,IAGlCpK,GAAOoJ,gBAAkB,SAAUzM,EAAMwN,GAGxC,GAFAzJ,EAAa/D,GAERjD,EAAQ0P,iBAAmBxI,IAC9BY,EAAwB2I,EAAO,QAC7BrJ,IAAkBA,EAAciF,KAAMoE,OACtCtJ,IAAkBA,EAAUkF,KAAMoE,IAErC,IACC,IAAI9N,EAAMiD,EAAQ7F,KAAMkD,EAAMwN,GAG9B,GAAK9N,GAAO3C,EAAQ+P,mBAInB9M,EAAKzE,UAAuC,KAA3ByE,EAAKzE,SAAS2B,SAC/B,OAAOwC,EAEP,MAAQ0I,GACTvD,EAAwB2I,GAAM,GAIhC,OAAOnK,GAAQmK,EAAMjS,EAAU,KAAM,CAAEyE,IAASf,OAAS,GAG1DoE,GAAOe,SAAW,SAAUvF,EAASmB,GAUpC,OAHOnB,EAAQgK,eAAiBhK,IAAatD,GAC5CwI,EAAalF,GAEPuF,EAAUvF,EAASmB,IAG3BqD,GAAOqK,KAAO,SAAU1N,EAAMgB,IAOtBhB,EAAK6I,eAAiB7I,IAAUzE,GACtCwI,EAAa/D,GAGd,IAAIlB,EAAKwE,EAAKiH,WAAYvJ,EAAKoC,eAG9BrF,EAAMe,GAAMpC,EAAOI,KAAMwG,EAAKiH,WAAYvJ,EAAKoC,eAC9CtE,EAAIkB,EAAMgB,GAAOiD,QACjBxC,EAEF,YAAeA,IAAR1D,EACNA,EACAhB,EAAQwI,aAAetB,EACtBjE,EAAK7B,aAAc6C,IACjBjD,EAAMiC,EAAKoM,iBAAkBpL,KAAYjD,EAAI4P,UAC9C5P,EAAI+E,MACJ,MAGJO,GAAO6D,OAAS,SAAU0G,GACzB,OAASA,EAAM,IAAK/L,QAAS0F,GAAYC,KAG1CnE,GAAOtB,MAAQ,SAAUC,GACxB,MAAM,IAAIvG,MAAO,0CAA4CuG,IAO9DqB,GAAOwK,WAAa,SAAUtL,GAC7B,IAAIvC,EACH8N,EAAa,GACbpN,EAAI,EACJ5C,EAAI,EAOL,GAJAgG,GAAgB/G,EAAQgR,iBACxBlK,GAAa9G,EAAQiR,YAAczL,EAAQtG,MAAO,GAClDsG,EAAQ3B,KAAMkE,GAEThB,EAAe,CACnB,KAAU9D,EAAOuC,EAASzE,MACpBkC,IAASuC,EAASzE,KACtB4C,EAAIoN,EAAWxR,KAAMwB,IAGvB,KAAQ4C,KACP6B,EAAQ1B,OAAQiN,EAAYpN,GAAK,GAQnC,OAFAmD,EAAY,KAELtB,GAORgB,EAAUF,GAAOE,QAAU,SAAUvD,GACpC,IAAIpC,EACH8B,EAAM,GACN5B,EAAI,EACJZ,EAAW8C,EAAK9C,SAEjB,GAAMA,GAQC,GAAkB,IAAbA,GAA+B,IAAbA,GAA+B,KAAbA,EAAkB,CAIjE,GAAiC,iBAArB8C,EAAKiO,YAChB,OAAOjO,EAAKiO,YAIZ,IAAMjO,EAAOA,EAAKkO,WAAYlO,EAAMA,EAAOA,EAAK4K,YAC/ClL,GAAO6D,EAASvD,QAGZ,GAAkB,IAAb9C,GAA+B,IAAbA,EAC7B,OAAO8C,EAAKmO,eAnBZ,KAAUvQ,EAAOoC,EAAMlC,MAGtB4B,GAAO6D,EAAS3F,GAqBlB,OAAO8B,IAGR4D,EAAOD,GAAO+K,UAAY,CAGzBrE,YAAa,GAEbsE,aAAcpE,GAEdxB,MAAOxC,EAEPsE,WAAY,GAEZ4B,KAAM,GAENmC,SAAU,CACT,IAAK,CAAErG,IAAK,aAAc/H,OAAO,GACjC,IAAK,CAAE+H,IAAK,cACZ,IAAK,CAAEA,IAAK,kBAAmB/H,OAAO,GACtC,IAAK,CAAE+H,IAAK,oBAGbsG,UAAW,CACVlI,KAAQ,SAAUoC,GAWjB,OAVAA,EAAO,GAAMA,EAAO,GAAI5G,QAASmF,GAAWC,IAG5CwB,EAAO,IAAQA,EAAO,IAAOA,EAAO,IACnCA,EAAO,IAAO,IAAK5G,QAASmF,GAAWC,IAEpB,OAAfwB,EAAO,KACXA,EAAO,GAAM,IAAMA,EAAO,GAAM,KAG1BA,EAAMxM,MAAO,EAAG,IAGxBsK,MAAS,SAAUkC,GAiClB,OArBAA,EAAO,GAAMA,EAAO,GAAIrF,cAEU,QAA7BqF,EAAO,GAAIxM,MAAO,EAAG,IAGnBwM,EAAO,IACZpF,GAAOtB,MAAO0G,EAAO,IAKtBA,EAAO,KAASA,EAAO,GACtBA,EAAO,IAAQA,EAAO,IAAO,GAC7B,GAAqB,SAAfA,EAAO,IAAiC,QAAfA,EAAO,KACvCA,EAAO,KAAWA,EAAO,GAAMA,EAAO,IAAwB,QAAfA,EAAO,KAG3CA,EAAO,IAClBpF,GAAOtB,MAAO0G,EAAO,IAGfA,GAGRnC,OAAU,SAAUmC,GACnB,IAAI+F,EACHC,GAAYhG,EAAO,IAAOA,EAAO,GAElC,OAAKxC,QAAqBmD,KAAMX,EAAO,IAC/B,MAIHA,EAAO,GACXA,EAAO,GAAMA,EAAO,IAAOA,EAAO,IAAO,GAG9BgG,GAAY1I,EAAQqD,KAAMqF,KAGnCD,EAAS/K,EAAUgL,GAAU,MAG7BD,EAASC,EAASlS,QAAS,IAAKkS,EAASxP,OAASuP,GAAWC,EAASxP,UAGxEwJ,EAAO,GAAMA,EAAO,GAAIxM,MAAO,EAAGuS,GAClC/F,EAAO,GAAMgG,EAASxS,MAAO,EAAGuS,IAI1B/F,EAAMxM,MAAO,EAAG,MAIzBgQ,OAAQ,CAEP7F,IAAO,SAAUsI,GAChB,IAAI1G,EAAW0G,EAAiB7M,QAASmF,GAAWC,IAAY7D,cAChE,MAA4B,MAArBsL,EACN,WACC,OAAO,GAER,SAAU1O,GACT,OAAOA,EAAKgI,UAAYhI,EAAKgI,SAAS5E,gBAAkB4E,IAI3D7B,MAAS,SAAU0F,GAClB,IAAI8C,EAAUlK,EAAYoH,EAAY,KAEtC,OAAO8C,IACJA,EAAU,IAAIjJ,OAAQ,0BACjBmG,EAAY,IAAMxG,EAAa,SAAaZ,EACjDoH,GAAW,SAAU7L,GACpB,OAAO2O,EAAQvF,KACY,iBAAnBpJ,EAAK6L,WAA0B7L,EAAK6L,gBACd,IAAtB7L,EAAK7B,cACX6B,EAAK7B,aAAc,UACpB,QAKNkI,KAAQ,SAAUrF,EAAM4N,EAAUC,GACjC,OAAO,SAAU7O,GAChB,IAAI8O,EAASzL,GAAOqK,KAAM1N,EAAMgB,GAEhC,OAAe,MAAV8N,EACgB,OAAbF,GAEFA,IAINE,GAAU,GAIU,MAAbF,EAAmBE,IAAWD,EACvB,OAAbD,EAAoBE,IAAWD,EAClB,OAAbD,EAAoBC,GAAqC,IAA5BC,EAAOvS,QAASsS,GAChC,OAAbD,EAAoBC,GAASC,EAAOvS,QAASsS,IAAW,EAC3C,OAAbD,EAAoBC,GAASC,EAAO7S,OAAQ4S,EAAM5P,UAAa4P,EAClD,OAAbD,GAAsB,IAAME,EAAOjN,QAAS4D,EAAa,KAAQ,KAAMlJ,QAASsS,IAAW,EAC9E,OAAbD,IAAoBE,IAAWD,GAASC,EAAO7S,MAAO,EAAG4S,EAAM5P,OAAS,KAAQ4P,EAAQ,QAO3FtI,MAAS,SAAUjJ,EAAMyR,EAAMC,EAAW9O,EAAOE,GAChD,IAAI6O,EAAgC,QAAvB3R,EAAKrB,MAAO,EAAG,GAC3BiT,EAA+B,SAArB5R,EAAKrB,OAAQ,GACvBkT,EAAkB,YAATJ,EAEV,OAAiB,IAAV7O,GAAwB,IAATE,EAGrB,SAAUJ,GACT,QAASA,EAAKzB,YAGf,SAAUyB,EAAMoP,EAAUC,GACzB,IAAIxF,EAAOyF,EAAaC,EAAY3R,EAAM4R,EAAWC,EACpDxH,EAAMgH,IAAWC,EAAU,cAAgB,kBAC3CQ,EAAS1P,EAAKzB,WACdyC,EAAOmO,GAAUnP,EAAKgI,SAAS5E,cAC/BuM,GAAYN,IAAQF,EACpBzE,GAAO,EAER,GAAKgF,EAAS,CAGb,GAAKT,EAAS,CACb,KAAQhH,GAAM,CAEb,IADArK,EAAOoC,EACGpC,EAAOA,EAAMqK,IACtB,GAAKkH,EACJvR,EAAKoK,SAAS5E,gBAAkBpC,EACd,IAAlBpD,EAAKV,SAEL,OAAO,EAKTuS,EAAQxH,EAAe,SAAT3K,IAAoBmS,GAAS,cAE5C,OAAO,EAMR,GAHAA,EAAQ,CAAEP,EAAUQ,EAAOxB,WAAawB,EAAOE,WAG1CV,GAAWS,GAkBf,IAHAjF,GADA8E,GADA3F,GAHAyF,GAJAC,GADA3R,EAAO8R,GACYhO,KAAe9D,EAAM8D,GAAY,KAI1B9D,EAAKiS,YAC5BN,EAAY3R,EAAKiS,UAAa,KAEZvS,IAAU,IACZ,KAAQiH,GAAWsF,EAAO,KACzBA,EAAO,GAC3BjM,EAAO4R,GAAaE,EAAOvH,WAAYqH,GAE7B5R,IAAS4R,GAAa5R,GAAQA,EAAMqK,KAG3CyC,EAAO8E,EAAY,IAAOC,EAAMxK,OAGlC,GAAuB,IAAlBrH,EAAKV,YAAoBwN,GAAQ9M,IAASoC,EAAO,CACrDsP,EAAahS,GAAS,CAAEiH,EAASiL,EAAW9E,GAC5C,YAyBF,GAlBKiF,IAaJjF,EADA8E,GADA3F,GAHAyF,GAJAC,GADA3R,EAAOoC,GACY0B,KAAe9D,EAAM8D,GAAY,KAI1B9D,EAAKiS,YAC5BN,EAAY3R,EAAKiS,UAAa,KAEZvS,IAAU,IACZ,KAAQiH,GAAWsF,EAAO,KAMhC,IAATa,EAGJ,MAAU9M,IAAS4R,GAAa5R,GAAQA,EAAMqK,KAC3CyC,EAAO8E,EAAY,IAAOC,EAAMxK,UAE3BkK,EACNvR,EAAKoK,SAAS5E,gBAAkBpC,EACd,IAAlBpD,EAAKV,cACHwN,IAGGiF,KAMJL,GALAC,EAAa3R,EAAM8D,KAChB9D,EAAM8D,GAAY,KAIK9D,EAAKiS,YAC5BN,EAAY3R,EAAKiS,UAAa,KAEpBvS,GAAS,CAAEiH,EAASmG,IAG7B9M,IAASoC,MAUlB,OADA0K,GAAQtK,KACQF,GAAWwK,EAAOxK,GAAU,GAAKwK,EAAOxK,GAAS,KAKrEoG,OAAU,SAAUwJ,EAAQ5E,GAM3B,IAAI6E,EACHjR,EAAKwE,EAAKkC,QAASsK,IAAYxM,EAAK0M,WAAYF,EAAO1M,gBACtDC,GAAOtB,MAAO,uBAAyB+N,GAKzC,OAAKhR,EAAI4C,GACD5C,EAAIoM,GAIPpM,EAAGG,OAAS,GAChB8Q,EAAO,CAAED,EAAQA,EAAQ,GAAI5E,GACtB5H,EAAK0M,WAAWrT,eAAgBmT,EAAO1M,eAC7C6G,IAAc,SAAU3B,EAAM3F,GAI7B,IAHA,IAAIsN,EACHC,EAAUpR,EAAIwJ,EAAM4C,GACpBpN,EAAIoS,EAAQjR,OACLnB,KAEPwK,EADA2H,EAAM1T,EAAS+L,EAAM4H,EAASpS,OACb6E,EAASsN,GAAQC,EAASpS,OAG7C,SAAUkC,GACT,OAAOlB,EAAIkB,EAAM,EAAG+P,KAIhBjR,IAIT0G,QAAS,CAGR2K,IAAOlG,IAAc,SAAUrL,GAK9B,IAAI2N,EAAQ,GACXhK,EAAU,GACV6N,EAAU1M,EAAS9E,EAASiD,QAAS8D,EAAO,OAE7C,OAAOyK,EAAS1O,GACfuI,IAAc,SAAU3B,EAAM3F,EAASyM,EAAUC,GAMhD,IALA,IAAIrP,EACHqQ,EAAYD,EAAS9H,EAAM,KAAM+G,EAAK,IACtCvR,EAAIwK,EAAKrJ,OAGFnB,MACAkC,EAAOqQ,EAAWvS,MACxBwK,EAAMxK,KAAS6E,EAAS7E,GAAMkC,OAIjC,SAAUA,EAAMoP,EAAUC,GAMzB,OALA9C,EAAO,GAAMvM,EACboQ,EAAS7D,EAAO,KAAM8C,EAAK9M,GAG3BgK,EAAO,GAAM,MACLhK,EAAQ0C,UAInBqL,IAAOrG,IAAc,SAAUrL,GAC9B,OAAO,SAAUoB,GAChB,OAAOqD,GAAQzE,EAAUoB,GAAOf,OAAS,MAI3CmF,SAAY6F,IAAc,SAAU/L,GAEnC,OADAA,EAAOA,EAAK2D,QAASmF,GAAWC,IACzB,SAAUjH,GAChB,OAASA,EAAKiO,aAAe1K,EAASvD,IAASzD,QAAS2B,IAAU,MAWpEqS,KAAQtG,IAAc,SAAUsG,GAO/B,OAJMvK,EAAYoD,KAAMmH,GAAQ,KAC/BlN,GAAOtB,MAAO,qBAAuBwO,GAEtCA,EAAOA,EAAK1O,QAASmF,GAAWC,IAAY7D,cACrC,SAAUpD,GAChB,IAAIwQ,EACJ,GACC,GAAOA,EAAWvM,EACjBjE,EAAKuQ,KACLvQ,EAAK7B,aAAc,aAAgB6B,EAAK7B,aAAc,QAGtD,OADAqS,EAAWA,EAASpN,iBACAmN,GAA2C,IAAnCC,EAASjU,QAASgU,EAAO,YAE3CvQ,EAAOA,EAAKzB,aAAkC,IAAlByB,EAAK9C,UAC7C,OAAO,MAKTkE,OAAU,SAAUpB,GACnB,IAAIyQ,EAAO/U,EAAOgV,UAAYhV,EAAOgV,SAASD,KAC9C,OAAOA,GAAQA,EAAKxU,MAAO,KAAQ+D,EAAKgJ,IAGzC2H,KAAQ,SAAU3Q,GACjB,OAAOA,IAASgE,GAGjB4M,MAAS,SAAU5Q,GAClB,OAAOA,IAASzE,EAASsV,iBACrBtV,EAASuV,UAAYvV,EAASuV,gBAC7B9Q,EAAK1C,MAAQ0C,EAAK+Q,OAAS/Q,EAAKgR,WAItCC,QAAWlG,IAAsB,GACjChD,SAAYgD,IAAsB,GAElCmG,QAAW,SAAUlR,GAIpB,IAAIgI,EAAWhI,EAAKgI,SAAS5E,cAC7B,MAAsB,UAAb4E,KAA0BhI,EAAKkR,SACxB,WAAblJ,KAA2BhI,EAAKmR,UAGpCA,SAAY,SAAUnR,GASrB,OALKA,EAAKzB,YAETyB,EAAKzB,WAAW6S,eAGQ,IAAlBpR,EAAKmR,UAIbE,MAAS,SAAUrR,GAMlB,IAAMA,EAAOA,EAAKkO,WAAYlO,EAAMA,EAAOA,EAAK4K,YAC/C,GAAK5K,EAAK9C,SAAW,EACpB,OAAO,EAGT,OAAO,GAGRwS,OAAU,SAAU1P,GACnB,OAAQsD,EAAKkC,cAAoBxF,IAIlCsR,OAAU,SAAUtR,GACnB,OAAO4G,EAAQwC,KAAMpJ,EAAKgI,WAG3BuE,MAAS,SAAUvM,GAClB,OAAO2G,EAAQyC,KAAMpJ,EAAKgI,WAG3BuJ,OAAU,SAAUvR,GACnB,IAAIgB,EAAOhB,EAAKgI,SAAS5E,cACzB,MAAgB,UAATpC,GAAkC,WAAdhB,EAAK1C,MAA8B,WAAT0D,GAGtD9C,KAAQ,SAAU8B,GACjB,IAAI0N,EACJ,MAAuC,UAAhC1N,EAAKgI,SAAS5E,eACN,SAAdpD,EAAK1C,OAIuC,OAAxCoQ,EAAO1N,EAAK7B,aAAc,UACN,SAAvBuP,EAAKtK,gBAIRlD,MAAS+K,IAAwB,WAChC,MAAO,CAAE,MAGV7K,KAAQ6K,IAAwB,SAAUuG,EAAevS,GACxD,MAAO,CAAEA,EAAS,MAGnBkB,GAAM8K,IAAwB,SAAUuG,EAAevS,EAAQiM,GAC9D,MAAO,CAAEA,EAAW,EAAIA,EAAWjM,EAASiM,MAG7C7K,KAAQ4K,IAAwB,SAAUE,EAAclM,GAEvD,IADA,IAAInB,EAAI,EACAA,EAAImB,EAAQnB,GAAK,EACxBqN,EAAa7O,KAAMwB,GAEpB,OAAOqN,KAGR3K,IAAOyK,IAAwB,SAAUE,EAAclM,GAEtD,IADA,IAAInB,EAAI,EACAA,EAAImB,EAAQnB,GAAK,EACxBqN,EAAa7O,KAAMwB,GAEpB,OAAOqN,KAGRsG,GAAMxG,IAAwB,SAAUE,EAAclM,EAAQiM,GAM7D,IALA,IAAIpN,EAAIoN,EAAW,EAClBA,EAAWjM,EACXiM,EAAWjM,EACVA,EACAiM,IACQpN,GAAK,GACdqN,EAAa7O,KAAMwB,GAEpB,OAAOqN,KAGRuG,GAAMzG,IAAwB,SAAUE,EAAclM,EAAQiM,GAE7D,IADA,IAAIpN,EAAIoN,EAAW,EAAIA,EAAWjM,EAASiM,IACjCpN,EAAImB,GACbkM,EAAa7O,KAAMwB,GAEpB,OAAOqN,QAKL3F,YAAmBlC,EAAKkC,WAGlB,CAAEmM,OAAO,EAAMC,UAAU,EAAMC,MAAM,EAAMC,UAAU,EAAMC,OAAO,GAC5EzO,EAAKkC,QAAS1H,GAAM+M,GAAmB/M,GAExC,IAAMA,IAAK,CAAEkU,QAAQ,EAAMC,OAAO,GACjC3O,EAAKkC,QAAS1H,GAAMgN,GAAoBhN,GAIzC,SAASkS,MA0ET,SAASzG,GAAY2I,GAIpB,IAHA,IAAIpU,EAAI,EACP2C,EAAMyR,EAAOjT,OACbL,EAAW,GACJd,EAAI2C,EAAK3C,IAChBc,GAAYsT,EAAQpU,GAAIgF,MAEzB,OAAOlE,EAGR,SAASkJ,GAAesI,EAAS+B,EAAYC,GAC5C,IAAInK,EAAMkK,EAAWlK,IACpBoK,EAAOF,EAAWjK,KAClB4B,EAAMuI,GAAQpK,EACdqK,EAAmBF,GAAgB,eAARtI,EAC3ByI,EAAW/N,IAEZ,OAAO2N,EAAWjS,MAGjB,SAAUF,EAAMnB,EAASwQ,GACxB,KAAUrP,EAAOA,EAAMiI,IACtB,GAAuB,IAAlBjI,EAAK9C,UAAkBoV,EAC3B,OAAOlC,EAASpQ,EAAMnB,EAASwQ,GAGjC,OAAO,GAIR,SAAUrP,EAAMnB,EAASwQ,GACxB,IAAImD,EAAUlD,EAAaC,EAC1BkD,EAAW,CAAElO,EAASgO,GAGvB,GAAKlD,GACJ,KAAUrP,EAAOA,EAAMiI,IACtB,IAAuB,IAAlBjI,EAAK9C,UAAkBoV,IACtBlC,EAASpQ,EAAMnB,EAASwQ,GAC5B,OAAO,OAKV,KAAUrP,EAAOA,EAAMiI,IACtB,GAAuB,IAAlBjI,EAAK9C,UAAkBoV,EAQ3B,GAHAhD,GAJAC,EAAavP,EAAM0B,KAAe1B,EAAM0B,GAAY,KAI1B1B,EAAK6P,YAC5BN,EAAYvP,EAAK6P,UAAa,IAE5BwC,GAAQA,IAASrS,EAAKgI,SAAS5E,cACnCpD,EAAOA,EAAMiI,IAASjI,MAChB,CAAA,IAAOwS,EAAWlD,EAAaxF,KACrC0I,EAAU,KAAQjO,GAAWiO,EAAU,KAAQD,EAG/C,OAASE,EAAU,GAAMD,EAAU,GAOnC,GAHAlD,EAAaxF,GAAQ2I,EAGdA,EAAU,GAAMrC,EAASpQ,EAAMnB,EAASwQ,GAC9C,OAAO,EAMZ,OAAO,GAIV,SAASqD,GAAgBC,GACxB,OAAOA,EAAS1T,OAAS,EACxB,SAAUe,EAAMnB,EAASwQ,GAExB,IADA,IAAIvR,EAAI6U,EAAS1T,OACTnB,KACP,IAAM6U,EAAU7U,GAAKkC,EAAMnB,EAASwQ,GACnC,OAAO,EAGT,OAAO,GAERsD,EAAU,GAYZ,SAASC,GAAUvC,EAAWtQ,EAAKkM,EAAQpN,EAASwQ,GAOnD,IANA,IAAIrP,EACH6S,EAAe,GACf/U,EAAI,EACJ2C,EAAM4P,EAAUpR,OAChB6T,EAAgB,MAAP/S,EAEFjC,EAAI2C,EAAK3C,KACTkC,EAAOqQ,EAAWvS,MAClBmO,IAAUA,EAAQjM,EAAMnB,EAASwQ,KACtCwD,EAAavW,KAAM0D,GACd8S,GACJ/S,EAAIzD,KAAMwB,KAMd,OAAO+U,EAGR,SAASE,GAAYxE,EAAW3P,EAAUwR,EAAS4C,EAAYC,EAAYC,GAO1E,OANKF,IAAeA,EAAYtR,KAC/BsR,EAAaD,GAAYC,IAErBC,IAAeA,EAAYvR,KAC/BuR,EAAaF,GAAYE,EAAYC,IAE/BjJ,IAAc,SAAU3B,EAAM/F,EAAS1D,EAASwQ,GACtD,IAAI8D,EAAMrV,EAAGkC,EACZoT,EAAS,GACTC,EAAU,GACVC,EAAc/Q,EAAQtD,OAGtBQ,EAAQ6I,GA5CX,SAA2B1J,EAAU2U,EAAUhR,GAG9C,IAFA,IAAIzE,EAAI,EACP2C,EAAM8S,EAAStU,OACRnB,EAAI2C,EAAK3C,IAChBuF,GAAQzE,EAAU2U,EAAUzV,GAAKyE,GAElC,OAAOA,EAsCWiR,CACf5U,GAAY,IACZC,EAAQ3B,SAAW,CAAE2B,GAAYA,EACjC,IAID4U,GAAYlF,IAAejG,GAAS1J,EAEnCa,EADAmT,GAAUnT,EAAO2T,EAAQ7E,EAAW1P,EAASwQ,GAG9CqE,EAAatD,EAGZ6C,IAAgB3K,EAAOiG,EAAY+E,GAAeN,GAGjD,GAGAzQ,EACDkR,EAQF,GALKrD,GACJA,EAASqD,EAAWC,EAAY7U,EAASwQ,GAIrC2D,EAMJ,IALAG,EAAOP,GAAUc,EAAYL,GAC7BL,EAAYG,EAAM,GAAItU,EAASwQ,GAG/BvR,EAAIqV,EAAKlU,OACDnB,MACAkC,EAAOmT,EAAMrV,MACnB4V,EAAYL,EAASvV,MAAW2V,EAAWJ,EAASvV,IAAQkC,IAK/D,GAAKsI,GACJ,GAAK2K,GAAc1E,EAAY,CAC9B,GAAK0E,EAAa,CAKjB,IAFAE,EAAO,GACPrV,EAAI4V,EAAWzU,OACPnB,MACAkC,EAAO0T,EAAY5V,KAGzBqV,EAAK7W,KAAQmX,EAAW3V,GAAMkC,GAGhCiT,EAAY,KAAQS,EAAa,GAAMP,EAAM9D,GAK9C,IADAvR,EAAI4V,EAAWzU,OACPnB,MACAkC,EAAO0T,EAAY5V,MACvBqV,EAAOF,EAAa1W,EAAS+L,EAAMtI,GAASoT,EAAQtV,KAAS,IAE/DwK,EAAM6K,KAAY5Q,EAAS4Q,GAASnT,UAOvC0T,EAAad,GACZc,IAAenR,EACdmR,EAAW7S,OAAQyS,EAAaI,EAAWzU,QAC3CyU,GAEGT,EACJA,EAAY,KAAM1Q,EAASmR,EAAYrE,GAEvC/S,EAAKD,MAAOkG,EAASmR,MAMzB,SAASC,GAAmBzB,GAyB3B,IAxBA,IAAI0B,EAAcxD,EAAS1P,EAC1BD,EAAMyR,EAAOjT,OACb4U,EAAkBvQ,EAAKgL,SAAU4D,EAAQ,GAAI5U,MAC7CwW,EAAmBD,GAAmBvQ,EAAKgL,SAAU,KACrDxQ,EAAI+V,EAAkB,EAAI,EAG1BE,EAAejM,IAAe,SAAU9H,GACvC,OAAOA,IAAS4T,IACdE,GAAkB,GACrBE,EAAkBlM,IAAe,SAAU9H,GAC1C,OAAOzD,EAASqX,EAAc5T,IAAU,IACtC8T,GAAkB,GACrBnB,EAAW,CAAE,SAAU3S,EAAMnB,EAASwQ,GACrC,IAAI3P,GAASmU,IAAqBxE,GAAOxQ,IAAY+E,MAClDgQ,EAAe/U,GAAU3B,SAC1B6W,EAAc/T,EAAMnB,EAASwQ,GAC7B2E,EAAiBhU,EAAMnB,EAASwQ,IAIlC,OADAuE,EAAe,KACRlU,IAGD5B,EAAI2C,EAAK3C,IAChB,GAAOsS,EAAU9M,EAAKgL,SAAU4D,EAAQpU,GAAIR,MAC3CqV,EAAW,CAAE7K,GAAe4K,GAAgBC,GAAYvC,QAClD,CAIN,IAHAA,EAAU9M,EAAK2I,OAAQiG,EAAQpU,GAAIR,MAAOjB,MAAO,KAAM6V,EAAQpU,GAAI6E,UAGrDjB,GAAY,CAIzB,IADAhB,IAAM5C,EACE4C,EAAID,IACN6C,EAAKgL,SAAU4D,EAAQxR,GAAIpD,MADhBoD,KAKjB,OAAOqS,GACNjV,EAAI,GAAK4U,GAAgBC,GACzB7U,EAAI,GAAKyL,GAGT2I,EACEjW,MAAO,EAAG6B,EAAI,GACd1B,OAAQ,CAAE0G,MAAgC,MAAzBoP,EAAQpU,EAAI,GAAIR,KAAe,IAAM,MACtDuE,QAAS8D,EAAO,MAClByK,EACAtS,EAAI4C,GAAKiT,GAAmBzB,EAAOjW,MAAO6B,EAAG4C,IAC7CA,EAAID,GAAOkT,GAAqBzB,EAASA,EAAOjW,MAAOyE,IACvDA,EAAID,GAAO8I,GAAY2I,IAGzBS,EAASrW,KAAM8T,GAIjB,OAAOsC,GAAgBC,GAoTxB,OAtpBA3C,GAAW9Q,UAAYoE,EAAK2Q,QAAU3Q,EAAKkC,QAC3ClC,EAAK0M,WAAa,IAAIA,GAEtBvM,EAAWJ,GAAOI,SAAW,SAAU7E,EAAUsV,GAChD,IAAIhE,EAASzH,EAAOyJ,EAAQ5U,EAC3B6W,EAAOzL,EAAQ0L,EACfC,EAAS1P,EAAY/F,EAAW,KAEjC,GAAKyV,EACJ,OAAOH,EAAY,EAAIG,EAAOpY,MAAO,GAOtC,IAJAkY,EAAQvV,EACR8J,EAAS,GACT0L,EAAa9Q,EAAKiL,UAEV4F,GAAQ,CA2Bf,IAAM7W,KAxBA4S,KAAazH,EAAQ7C,EAAOkD,KAAMqL,MAClC1L,IAGJ0L,EAAQA,EAAMlY,MAAOwM,EAAO,GAAIxJ,SAAYkV,GAE7CzL,EAAOpM,KAAQ4V,EAAS,KAGzBhC,GAAU,GAGHzH,EAAQ5C,EAAaiD,KAAMqL,MACjCjE,EAAUzH,EAAMuB,QAChBkI,EAAO5V,KAAM,CACZwG,MAAOoN,EAGP5S,KAAMmL,EAAO,GAAI5G,QAAS8D,EAAO,OAElCwO,EAAQA,EAAMlY,MAAOiU,EAAQjR,SAIhBqE,EAAK2I,SACXxD,EAAQxC,EAAW3I,GAAOwL,KAAMqL,KAAgBC,EAAY9W,MAChEmL,EAAQ2L,EAAY9W,GAAQmL,MAC9ByH,EAAUzH,EAAMuB,QAChBkI,EAAO5V,KAAM,CACZwG,MAAOoN,EACP5S,KAAMA,EACNqF,QAAS8F,IAEV0L,EAAQA,EAAMlY,MAAOiU,EAAQjR,SAI/B,IAAMiR,EACL,MAOF,OAAOgE,EACNC,EAAMlV,OACNkV,EACC9Q,GAAOtB,MAAOnD,GAGd+F,EAAY/F,EAAU8J,GAASzM,MAAO,IA4ZzCyH,EAAUL,GAAOK,QAAU,SAAU9E,EAAU6J,GAC9C,IAAI3K,EACHwW,EAAc,GACdC,EAAkB,GAClBF,EAASzP,EAAehG,EAAW,KAEpC,IAAMyV,EAAS,CAOd,IAJM5L,IACLA,EAAQhF,EAAU7E,IAEnBd,EAAI2K,EAAMxJ,OACFnB,MACPuW,EAASV,GAAmBlL,EAAO3K,KACtB4D,GACZ4S,EAAYhY,KAAM+X,GAElBE,EAAgBjY,KAAM+X,IAKxBA,EAASzP,EACRhG,EArJH,SAAmC2V,EAAiBD,GACnD,IAAIE,EAAQF,EAAYrV,OAAS,EAChCwV,EAAYF,EAAgBtV,OAAS,EACrCyV,EAAe,SAAUpM,EAAMzJ,EAASwQ,EAAK9M,EAASoS,GACrD,IAAI3U,EAAMU,EAAG0P,EACZwE,EAAe,EACf9W,EAAI,IACJuS,EAAY/H,GAAQ,GACpBuM,EAAa,GACbC,EAAgBlR,EAGhBnE,EAAQ6I,GAAQmM,GAAanR,EAAK6I,SAAe,IAAKwI,GAGtDI,EAAkBxQ,GAA4B,MAAjBuQ,EAAwB,EAAInT,KAAKC,UAAY,GAC1EnB,EAAMhB,EAAMR,OAcb,IAZK0V,IAMJ/Q,EAAmB/E,GAAWtD,GAAYsD,GAAW8V,GAM9C7W,IAAM2C,GAAgC,OAAvBT,EAAOP,EAAO3B,IAAeA,IAAM,CACzD,GAAK2W,GAAazU,EAAO,CAWxB,IAVAU,EAAI,EAME7B,GAAWmB,EAAK6I,eAAiBtN,IACtCwI,EAAa/D,GACbqP,GAAOpL,GAEEmM,EAAUmE,EAAiB7T,MACpC,GAAK0P,EAASpQ,EAAMnB,GAAWtD,EAAU8T,GAAQ,CAChD9M,EAAQjG,KAAM0D,GACd,MAGG2U,IACJpQ,EAAUwQ,GAKPP,KAGGxU,GAAQoQ,GAAWpQ,IACzB4U,IAIItM,GACJ+H,EAAU/T,KAAM0D,IAgBnB,GATA4U,GAAgB9W,EASX0W,GAAS1W,IAAM8W,EAAe,CAElC,IADAlU,EAAI,EACM0P,EAAUkE,EAAa5T,MAChC0P,EAASC,EAAWwE,EAAYhW,EAASwQ,GAG1C,GAAK/G,EAAO,CAGX,GAAKsM,EAAe,EACnB,KAAQ9W,KACCuS,EAAWvS,IAAO+W,EAAY/W,KACrC+W,EAAY/W,GAAMmH,EAAInI,KAAMyF,IAM/BsS,EAAajC,GAAUiC,GAIxBvY,EAAKD,MAAOkG,EAASsS,GAGhBF,IAAcrM,GAAQuM,EAAW5V,OAAS,GAC5C2V,EAAeN,EAAYrV,OAAW,GAExCoE,GAAOwK,WAAYtL,GAUrB,OALKoS,IACJpQ,EAAUwQ,EACVnR,EAAmBkR,GAGbzE,GAGT,OAAOmE,EACNvK,GAAcyK,GACdA,EA4BCM,CAA0BT,EAAiBD,KAIrC1V,SAAWA,EAEnB,OAAOyV,GAYR1Q,EAASN,GAAOM,OAAS,SAAU/E,EAAUC,EAAS0D,EAAS+F,GAC9D,IAAIxK,EAAGoU,EAAQ+C,EAAO3X,EAAM6O,EAC3B+I,EAA+B,mBAAbtW,GAA2BA,EAC7C6J,GAASH,GAAQ7E,EAAY7E,EAAWsW,EAAStW,UAAYA,GAM9D,GAJA2D,EAAUA,GAAW,GAIC,IAAjBkG,EAAMxJ,OAAe,CAIzB,IADAiT,EAASzJ,EAAO,GAAMA,EAAO,GAAIxM,MAAO,IAC5BgD,OAAS,GAAsC,QAA/BgW,EAAQ/C,EAAQ,IAAM5U,MAC5B,IAArBuB,EAAQ3B,UAAkB+G,GAAkBX,EAAKgL,SAAU4D,EAAQ,GAAI5U,MAAS,CAIhF,KAFAuB,GAAYyE,EAAK6I,QAAc8I,EAAMtS,QAAS,GAC5Cd,QAASmF,GAAWC,IAAapI,IAAa,IAAM,IAErD,OAAO0D,EAGI2S,IACXrW,EAAUA,EAAQN,YAGnBK,EAAWA,EAAS3C,MAAOiW,EAAOlI,QAAQlH,MAAM7D,QAKjD,IADAnB,EAAImI,eAA4BmD,KAAMxK,GAAa,EAAIsT,EAAOjT,OACtDnB,MACPmX,EAAQ/C,EAAQpU,IAGXwF,EAAKgL,SAAYhR,EAAO2X,EAAM3X,QAGnC,IAAO6O,EAAO7I,EAAK6I,KAAM7O,MAGjBgL,EAAO6D,EACb8I,EAAMtS,QAAS,GAAId,QAASmF,GAAWC,IACvCF,GAASqC,KAAM8I,EAAQ,GAAI5U,OAAU+L,GAAaxK,EAAQN,aACzDM,IACI,CAKL,GAFAqT,EAAOrR,OAAQ/C,EAAG,KAClBc,EAAW0J,EAAKrJ,QAAUsK,GAAY2I,IAGrC,OADA5V,EAAKD,MAAOkG,EAAS+F,GACd/F,EAGR,OAeJ,OAPE2S,GAAYxR,EAAS9E,EAAU6J,IAChCH,EACAzJ,GACCoF,EACD1B,GACC1D,GAAWkI,GAASqC,KAAMxK,IAAcyK,GAAaxK,EAAQN,aAAgBM,GAExE0D,GAMRxF,EAAQiR,WAAatM,EAAQwB,MAAO,IAAKtC,KAAMkE,GAAY0E,KAAM,MAAS9H,EAI1E3E,EAAQgR,mBAAqBjK,EAG7BC,IAIAhH,EAAQoQ,aAAejD,IAAQ,SAAUC,GAGxC,OAA4E,EAArEA,EAAG4C,wBAAyBxR,EAAS0C,cAAe,gBAMtDiM,IAAQ,SAAUC,GAEvB,OADAA,EAAGqC,UAAY,mBACiC,MAAzCrC,EAAG+D,WAAW/P,aAAc,YAEnCiM,GAAW,0BAA0B,SAAUpK,EAAMgB,EAAMwC,GAC1D,IAAMA,EACL,OAAOxD,EAAK7B,aAAc6C,EAA6B,SAAvBA,EAAKoC,cAA2B,EAAI,MAOjErG,EAAQwI,YAAe2E,IAAQ,SAAUC,GAG9C,OAFAA,EAAGqC,UAAY,WACfrC,EAAG+D,WAAW9P,aAAc,QAAS,IACY,KAA1C+L,EAAG+D,WAAW/P,aAAc,aAEnCiM,GAAW,SAAS,SAAUpK,EAAMmV,EAAO3R,GAC1C,IAAMA,GAAyC,UAAhCxD,EAAKgI,SAAS5E,cAC5B,OAAOpD,EAAKoV,gBAOTlL,IAAQ,SAAUC,GACvB,OAAwC,MAAjCA,EAAGhM,aAAc,gBAExBiM,GAAWhF,GAAU,SAAUpF,EAAMgB,EAAMwC,GAC1C,IAAIzF,EACJ,IAAMyF,EACL,OAAwB,IAAjBxD,EAAMgB,GAAkBA,EAAKoC,eACjCrF,EAAMiC,EAAKoM,iBAAkBpL,KAAYjD,EAAI4P,UAC9C5P,EAAI+E,MACJ,QAKEO,GA14EP,CA44EK3H,GAILiD,EAAOwN,KAAO9I,EACd1E,EAAO6O,KAAOnK,EAAO+K,UAGrBzP,EAAO6O,KAAM,KAAQ7O,EAAO6O,KAAKhI,QACjC7G,EAAOkP,WAAalP,EAAO0W,OAAShS,EAAOwK,WAC3ClP,EAAOT,KAAOmF,EAAOE,QACrB5E,EAAO2W,SAAWjS,EAAOG,MACzB7E,EAAOyF,SAAWf,EAAOe,SACzBzF,EAAO4W,eAAiBlS,EAAO6D,OAK/B,IAAIe,EAAM,SAAUjI,EAAMiI,EAAKuN,GAI9B,IAHA,IAAItF,EAAU,GACbuF,OAAqBhU,IAAV+T,GAEFxV,EAAOA,EAAMiI,KAA6B,IAAlBjI,EAAK9C,UACtC,GAAuB,IAAlB8C,EAAK9C,SAAiB,CAC1B,GAAKuY,GAAY9W,EAAQqB,GAAO0V,GAAIF,GACnC,MAEDtF,EAAQ5T,KAAM0D,GAGhB,OAAOkQ,GAIJyF,EAAW,SAAUC,EAAG5V,GAG3B,IAFA,IAAIkQ,EAAU,GAEN0F,EAAGA,EAAIA,EAAEhL,YACI,IAAfgL,EAAE1Y,UAAkB0Y,IAAM5V,GAC9BkQ,EAAQ5T,KAAMsZ,GAIhB,OAAO1F,GAIJ2F,EAAgBlX,EAAO6O,KAAK/E,MAAMhC,aAItC,SAASuB,EAAUhI,EAAMgB,GAExB,OAAOhB,EAAKgI,UAAYhI,EAAKgI,SAAS5E,gBAAkBpC,EAAKoC,cAG9D,IAAI0S,oEAKJ,SAASC,EAAQtI,EAAUuI,EAAW7F,GACrC,OAAKnT,EAAYgZ,GACTrX,EAAO2B,KAAMmN,GAAU,SAAUzN,EAAMlC,GAC7C,QAASkY,EAAUlZ,KAAMkD,EAAMlC,EAAGkC,KAAWmQ,KAK1C6F,EAAU9Y,SACPyB,EAAO2B,KAAMmN,GAAU,SAAUzN,GACvC,OAASA,IAASgW,IAAgB7F,KAKV,iBAAd6F,EACJrX,EAAO2B,KAAMmN,GAAU,SAAUzN,GACvC,OAASzD,EAAQO,KAAMkZ,EAAWhW,IAAU,IAAQmQ,KAK/CxR,EAAOsN,OAAQ+J,EAAWvI,EAAU0C,GAG5CxR,EAAOsN,OAAS,SAAUuB,EAAM/N,EAAO0Q,GACtC,IAAInQ,EAAOP,EAAO,GAMlB,OAJK0Q,IACJ3C,EAAO,QAAUA,EAAO,KAGH,IAAjB/N,EAAMR,QAAkC,IAAlBe,EAAK9C,SACxByB,EAAOwN,KAAKM,gBAAiBzM,EAAMwN,GAAS,CAAExN,GAAS,GAGxDrB,EAAOwN,KAAKxJ,QAAS6K,EAAM7O,EAAO2B,KAAMb,GAAO,SAAUO,GAC/D,OAAyB,IAAlBA,EAAK9C,cAIdyB,EAAOG,GAAGgC,OAAQ,CACjBqL,KAAM,SAAUvN,GACf,IAAId,EAAG4B,EACNe,EAAM9E,KAAKsD,OACXgX,EAAOta,KAER,GAAyB,iBAAbiD,EACX,OAAOjD,KAAK6D,UAAWb,EAAQC,GAAWqN,QAAQ,WACjD,IAAMnO,EAAI,EAAGA,EAAI2C,EAAK3C,IACrB,GAAKa,EAAOyF,SAAU6R,EAAMnY,GAAKnC,MAChC,OAAO,MAQX,IAFA+D,EAAM/D,KAAK6D,UAAW,IAEhB1B,EAAI,EAAGA,EAAI2C,EAAK3C,IACrBa,EAAOwN,KAAMvN,EAAUqX,EAAMnY,GAAK4B,GAGnC,OAAOe,EAAM,EAAI9B,EAAOkP,WAAYnO,GAAQA,GAE7CuM,OAAQ,SAAUrN,GACjB,OAAOjD,KAAK6D,UAAWuW,EAAQpa,KAAMiD,GAAY,IAAI,KAEtDuR,IAAK,SAAUvR,GACd,OAAOjD,KAAK6D,UAAWuW,EAAQpa,KAAMiD,GAAY,IAAI,KAEtD8W,GAAI,SAAU9W,GACb,QAASmX,EACRpa,KAIoB,iBAAbiD,GAAyBiX,EAAczM,KAAMxK,GACnDD,EAAQC,GACRA,GAAY,IACb,GACCK,UASJ,IAAIiX,EAMHpP,EAAa,uCAENnI,EAAOG,GAAGC,KAAO,SAAUH,EAAUC,EAAS8R,GACpD,IAAIlI,EAAOzI,EAGX,IAAMpB,EACL,OAAOjD,KAQR,GAHAgV,EAAOA,GAAQuF,EAGU,iBAAbtX,EAAwB,CAanC,KAPC6J,EALsB,MAAlB7J,EAAU,IACsB,MAApCA,EAAUA,EAASK,OAAS,IAC5BL,EAASK,QAAU,EAGX,CAAE,KAAML,EAAU,MAGlBkI,EAAWgC,KAAMlK,MAIV6J,EAAO,IAAQ5J,EA6CxB,OAAMA,GAAWA,EAAQM,QACtBN,GAAW8R,GAAOxE,KAAMvN,GAK1BjD,KAAKyD,YAAaP,GAAUsN,KAAMvN,GAhDzC,GAAK6J,EAAO,GAAM,CAYjB,GAXA5J,EAAUA,aAAmBF,EAASE,EAAS,GAAMA,EAIrDF,EAAOgB,MAAOhE,KAAMgD,EAAOwX,UAC1B1N,EAAO,GACP5J,GAAWA,EAAQ3B,SAAW2B,EAAQgK,eAAiBhK,EAAUtD,GACjE,IAIIua,EAAW1M,KAAMX,EAAO,KAAS9J,EAAO2C,cAAezC,GAC3D,IAAM4J,KAAS5J,EAGT7B,EAAYrB,KAAM8M,IACtB9M,KAAM8M,GAAS5J,EAAS4J,IAIxB9M,KAAK+R,KAAMjF,EAAO5J,EAAS4J,IAK9B,OAAO9M,KAYP,OARAqE,EAAOzE,EAASwN,eAAgBN,EAAO,OAKtC9M,KAAM,GAAMqE,EACZrE,KAAKsD,OAAS,GAERtD,KAcH,OAAKiD,EAAS1B,UACpBvB,KAAM,GAAMiD,EACZjD,KAAKsD,OAAS,EACPtD,MAIIqB,EAAY4B,QACD6C,IAAfkP,EAAKyF,MACXzF,EAAKyF,MAAOxX,GAGZA,EAAUD,GAGLA,EAAO2D,UAAW1D,EAAUjD,QAIhCuD,UAAYP,EAAOG,GAGxBoX,EAAavX,EAAQpD,GAGrB,IAAI8a,EAAe,iCAGlBC,EAAmB,CAClBC,UAAU,EACVC,UAAU,EACVtO,MAAM,EACNuO,MAAM,GAoFR,SAASC,EAASjM,EAAKxC,GACtB,MAAUwC,EAAMA,EAAKxC,KAA4B,IAAjBwC,EAAIvN,WACpC,OAAOuN,EAnFR9L,EAAOG,GAAGgC,OAAQ,CACjBwP,IAAK,SAAUlP,GACd,IAAIuV,EAAUhY,EAAQyC,EAAQzF,MAC7Bib,EAAID,EAAQ1X,OAEb,OAAOtD,KAAKsQ,QAAQ,WAEnB,IADA,IAAInO,EAAI,EACAA,EAAI8Y,EAAG9Y,IACd,GAAKa,EAAOyF,SAAUzI,KAAMgb,EAAS7Y,IACpC,OAAO,MAMX+Y,QAAS,SAAUzI,EAAWvP,GAC7B,IAAI4L,EACH3M,EAAI,EACJ8Y,EAAIjb,KAAKsD,OACTiR,EAAU,GACVyG,EAA+B,iBAAdvI,GAA0BzP,EAAQyP,GAGpD,IAAMyH,EAAczM,KAAMgF,GACzB,KAAQtQ,EAAI8Y,EAAG9Y,IACd,IAAM2M,EAAM9O,KAAMmC,GAAK2M,GAAOA,IAAQ5L,EAAS4L,EAAMA,EAAIlM,WAGxD,GAAKkM,EAAIvN,SAAW,KAAQyZ,EAC3BA,EAAQG,MAAOrM,IAAS,EAGP,IAAjBA,EAAIvN,UACHyB,EAAOwN,KAAKM,gBAAiBhC,EAAK2D,IAAgB,CAEnD8B,EAAQ5T,KAAMmO,GACd,MAMJ,OAAO9O,KAAK6D,UAAW0Q,EAAQjR,OAAS,EAAIN,EAAOkP,WAAYqC,GAAYA,IAI5E4G,MAAO,SAAU9W,GAGhB,OAAMA,EAKe,iBAATA,EACJzD,EAAQO,KAAM6B,EAAQqB,GAAQrE,KAAM,IAIrCY,EAAQO,KAAMnB,KAGpBqE,EAAKb,OAASa,EAAM,GAAMA,GAZjBrE,KAAM,IAAOA,KAAM,GAAI4C,WAAe5C,KAAKuE,QAAQ6W,UAAU9X,QAAU,GAgBlF+X,IAAK,SAAUpY,EAAUC,GACxB,OAAOlD,KAAK6D,UACXb,EAAOkP,WACNlP,EAAOgB,MAAOhE,KAAK2D,MAAOX,EAAQC,EAAUC,OAK/CoY,QAAS,SAAUrY,GAClB,OAAOjD,KAAKqb,IAAiB,MAAZpY,EAChBjD,KAAKiE,WAAajE,KAAKiE,WAAWqM,OAAQrN,OAU7CD,EAAOkB,KAAM,CACZ6P,OAAQ,SAAU1P,GACjB,IAAI0P,EAAS1P,EAAKzB,WAClB,OAAOmR,GAA8B,KAApBA,EAAOxS,SAAkBwS,EAAS,MAEpDwH,QAAS,SAAUlX,GAClB,OAAOiI,EAAKjI,EAAM,eAEnBmX,aAAc,SAAUnX,EAAMmD,EAAIqS,GACjC,OAAOvN,EAAKjI,EAAM,aAAcwV,IAEjCtN,KAAM,SAAUlI,GACf,OAAO0W,EAAS1W,EAAM,gBAEvByW,KAAM,SAAUzW,GACf,OAAO0W,EAAS1W,EAAM,oBAEvBoX,QAAS,SAAUpX,GAClB,OAAOiI,EAAKjI,EAAM,gBAEnB+W,QAAS,SAAU/W,GAClB,OAAOiI,EAAKjI,EAAM,oBAEnBqX,UAAW,SAAUrX,EAAMmD,EAAIqS,GAC9B,OAAOvN,EAAKjI,EAAM,cAAewV,IAElC8B,UAAW,SAAUtX,EAAMmD,EAAIqS,GAC9B,OAAOvN,EAAKjI,EAAM,kBAAmBwV,IAEtCG,SAAU,SAAU3V,GACnB,OAAO2V,GAAY3V,EAAKzB,YAAc,IAAK2P,WAAYlO,IAExDuW,SAAU,SAAUvW,GACnB,OAAO2V,EAAU3V,EAAKkO,aAEvBsI,SAAU,SAAUxW,GACnB,OAA6B,MAAxBA,EAAKuX,iBAKTzb,EAAUkE,EAAKuX,iBAERvX,EAAKuX,iBAMRvP,EAAUhI,EAAM,cACpBA,EAAOA,EAAKwX,SAAWxX,GAGjBrB,EAAOgB,MAAO,GAAIK,EAAKmI,gBAE7B,SAAUnH,EAAMlC,GAClBH,EAAOG,GAAIkC,GAAS,SAAUwU,EAAO5W,GACpC,IAAIsR,EAAUvR,EAAOoB,IAAKpE,KAAMmD,EAAI0W,GAuBpC,MArB0B,UAArBxU,EAAK/E,OAAQ,KACjB2C,EAAW4W,GAGP5W,GAAgC,iBAAbA,IACvBsR,EAAUvR,EAAOsN,OAAQrN,EAAUsR,IAG/BvU,KAAKsD,OAAS,IAGZqX,EAAkBtV,IACvBrC,EAAOkP,WAAYqC,GAIfmG,EAAajN,KAAMpI,IACvBkP,EAAQuH,WAIH9b,KAAK6D,UAAW0Q,OAGzB,IAAIwH,sBAsOJ,SAASC,EAAUC,GAClB,OAAOA,EAER,SAASC,EAASC,GACjB,MAAMA,EAGP,SAASC,EAAYjV,EAAOkV,EAASC,EAAQC,GAC5C,IAAIC,EAEJ,IAGMrV,GAAS9F,EAAcmb,EAASrV,EAAMsV,SAC1CD,EAAOrb,KAAMgG,GAAQ0B,KAAMwT,GAAUK,KAAMJ,GAGhCnV,GAAS9F,EAAcmb,EAASrV,EAAMwV,MACjDH,EAAOrb,KAAMgG,EAAOkV,EAASC,GAQ7BD,EAAQ3b,WAAOoF,EAAW,CAAEqB,GAAQ7G,MAAOic,IAM3C,MAAQpV,GAITmV,EAAO5b,WAAOoF,EAAW,CAAEqB,KAvO7BnE,EAAO4Z,UAAY,SAAUxX,GAI5BA,EAA6B,iBAAZA,EAlClB,SAAwBA,GACvB,IAAIyX,EAAS,GAIb,OAHA7Z,EAAOkB,KAAMkB,EAAQ0H,MAAOiP,IAAmB,IAAI,SAAUe,EAAGC,GAC/DF,EAAQE,IAAS,KAEXF,EA8BNG,CAAe5X,GACfpC,EAAOmC,OAAQ,GAAIC,GAEpB,IACC6X,EAGAC,EAGAC,EAGAC,EAGA5T,EAAO,GAGP6T,EAAQ,GAGRC,GAAe,EAGfC,EAAO,WAQN,IALAH,EAASA,GAAUhY,EAAQoY,KAI3BL,EAAQF,GAAS,EACTI,EAAM/Z,OAAQga,GAAe,EAEpC,IADAJ,EAASG,EAAMhP,UACLiP,EAAc9T,EAAKlG,SAGmC,IAA1DkG,EAAM8T,GAAc5c,MAAOwc,EAAQ,GAAKA,EAAQ,KACpD9X,EAAQqY,cAGRH,EAAc9T,EAAKlG,OACnB4Z,GAAS,GAMN9X,EAAQ8X,SACbA,GAAS,GAGVD,GAAS,EAGJG,IAIH5T,EADI0T,EACG,GAIA,KAMV5C,EAAO,CAGNe,IAAK,WA2BJ,OA1BK7R,IAGC0T,IAAWD,IACfK,EAAc9T,EAAKlG,OAAS,EAC5B+Z,EAAM1c,KAAMuc,IAGb,SAAW7B,EAAKjH,GACfpR,EAAOkB,KAAMkQ,GAAM,SAAU0I,EAAG5V,GAC1B7F,EAAY6F,GACV9B,EAAQsU,QAAWY,EAAK3F,IAAKzN,IAClCsC,EAAK7I,KAAMuG,GAEDA,GAAOA,EAAI5D,QAA4B,WAAlBR,EAAQoE,IAGxCmU,EAAKnU,MATR,CAYK5C,WAEA4Y,IAAWD,GACfM,KAGKvd,MAIR0d,OAAQ,WAYP,OAXA1a,EAAOkB,KAAMI,WAAW,SAAUwY,EAAG5V,GAEpC,IADA,IAAIiU,GACMA,EAAQnY,EAAO6D,QAASK,EAAKsC,EAAM2R,KAAa,GACzD3R,EAAKtE,OAAQiW,EAAO,GAGfA,GAASmC,GACbA,OAIItd,MAKR2U,IAAK,SAAUxR,GACd,OAAOA,EACNH,EAAO6D,QAAS1D,EAAIqG,IAAU,EAC9BA,EAAKlG,OAAS,GAIhBoS,MAAO,WAIN,OAHKlM,IACJA,EAAO,IAEDxJ,MAMR2d,QAAS,WAGR,OAFAP,EAASC,EAAQ,GACjB7T,EAAO0T,EAAS,GACTld,MAERoM,SAAU,WACT,OAAQ5C,GAMToU,KAAM,WAKL,OAJAR,EAASC,EAAQ,GACXH,GAAWD,IAChBzT,EAAO0T,EAAS,IAEVld,MAERod,OAAQ,WACP,QAASA,GAIVS,SAAU,SAAU3a,EAASkR,GAS5B,OARMgJ,IAELhJ,EAAO,CAAElR,GADTkR,EAAOA,GAAQ,IACQ9T,MAAQ8T,EAAK9T,QAAU8T,GAC9CiJ,EAAM1c,KAAMyT,GACN6I,GACLM,KAGKvd,MAIRud,KAAM,WAEL,OADAjD,EAAKuD,SAAU7d,KAAMsE,WACdtE,MAIRmd,MAAO,WACN,QAASA,IAIZ,OAAO7C,GA4CRtX,EAAOmC,OAAQ,CAEd2Y,SAAU,SAAUC,GACnB,IAAIC,EAAS,CAIX,CAAE,SAAU,WAAYhb,EAAO4Z,UAAW,UACzC5Z,EAAO4Z,UAAW,UAAY,GAC/B,CAAE,UAAW,OAAQ5Z,EAAO4Z,UAAW,eACtC5Z,EAAO4Z,UAAW,eAAiB,EAAG,YACvC,CAAE,SAAU,OAAQ5Z,EAAO4Z,UAAW,eACrC5Z,EAAO4Z,UAAW,eAAiB,EAAG,aAExCqB,EAAQ,UACRxB,EAAU,CACTwB,MAAO,WACN,OAAOA,GAERC,OAAQ,WAEP,OADAC,EAAStV,KAAMvE,WAAYoY,KAAMpY,WAC1BtE,MAERoe,MAAS,SAAUjb,GAClB,OAAOsZ,EAAQE,KAAM,KAAMxZ,IAI5Bkb,KAAM,WACL,IAAIC,EAAMha,UAEV,OAAOtB,EAAO8a,UAAU,SAAUS,GACjCvb,EAAOkB,KAAM8Z,GAAQ,SAAUxW,EAAIgX,GAGlC,IAAIrb,EAAK9B,EAAYid,EAAKE,EAAO,MAAWF,EAAKE,EAAO,IAKxDL,EAAUK,EAAO,KAAO,WACvB,IAAIC,EAAWtb,GAAMA,EAAGzC,MAAOV,KAAMsE,WAChCma,GAAYpd,EAAYod,EAAShC,SACrCgC,EAAShC,UACPiC,SAAUH,EAASI,QACnB9V,KAAM0V,EAASlC,SACfK,KAAM6B,EAASjC,QAEjBiC,EAAUC,EAAO,GAAM,QACtBxe,KACAmD,EAAK,CAAEsb,GAAana,iBAKxBga,EAAM,QACH7B,WAELE,KAAM,SAAUiC,EAAaC,EAAYC,GACxC,IAAIC,EAAW,EACf,SAAS1C,EAAS2C,EAAOb,EAAUxP,EAASsQ,GAC3C,OAAO,WACN,IAAIC,EAAOlf,KACVoU,EAAO9P,UACP6a,EAAa,WACZ,IAAIV,EAAU9B,EAKd,KAAKqC,EAAQD,GAAb,CAQA,IAJAN,EAAW9P,EAAQjO,MAAOwe,EAAM9K,MAId+J,EAAS1B,UAC1B,MAAM,IAAI2C,UAAW,4BAOtBzC,EAAO8B,IAKgB,iBAAbA,GACY,mBAAbA,IACRA,EAAS9B,KAGLtb,EAAYsb,GAGXsC,EACJtC,EAAKxb,KACJsd,EACApC,EAAS0C,EAAUZ,EAAUnC,EAAUiD,GACvC5C,EAAS0C,EAAUZ,EAAUjC,EAAS+C,KAOvCF,IAEApC,EAAKxb,KACJsd,EACApC,EAAS0C,EAAUZ,EAAUnC,EAAUiD,GACvC5C,EAAS0C,EAAUZ,EAAUjC,EAAS+C,GACtC5C,EAAS0C,EAAUZ,EAAUnC,EAC5BmC,EAASkB,eASP1Q,IAAYqN,IAChBkD,OAAOpZ,EACPsO,EAAO,CAAEqK,KAKRQ,GAAWd,EAASmB,aAAeJ,EAAM9K,MAK7CmL,EAAUN,EACTE,EACA,WACC,IACCA,IACC,MAAQ1S,GAEJzJ,EAAO8a,SAAS0B,eACpBxc,EAAO8a,SAAS0B,cAAe/S,EAC9B8S,EAAQE,YAMLT,EAAQ,GAAKD,IAIZpQ,IAAYuN,IAChBgD,OAAOpZ,EACPsO,EAAO,CAAE3H,IAGV0R,EAASuB,WAAYR,EAAM9K,MAS3B4K,EACJO,KAKKvc,EAAO8a,SAAS6B,eACpBJ,EAAQE,WAAazc,EAAO8a,SAAS6B,gBAEtC5f,EAAO6f,WAAYL,KAKtB,OAAOvc,EAAO8a,UAAU,SAAUS,GAGjCP,EAAQ,GAAK,GAAI3C,IAChBgB,EACC,EACAkC,EACAld,EAAYyd,GACXA,EACA9C,EACDuC,EAASc,aAKXrB,EAAQ,GAAK,GAAI3C,IAChBgB,EACC,EACAkC,EACAld,EAAYud,GACXA,EACA5C,IAKHgC,EAAQ,GAAK,GAAI3C,IAChBgB,EACC,EACAkC,EACAld,EAAYwd,GACXA,EACA3C,OAGAO,WAKLA,QAAS,SAAUnb,GAClB,OAAc,MAAPA,EAAc0B,EAAOmC,OAAQ7D,EAAKmb,GAAYA,IAGvD0B,EAAW,GAkEZ,OA/DAnb,EAAOkB,KAAM8Z,GAAQ,SAAU7b,EAAGqc,GACjC,IAAIhV,EAAOgV,EAAO,GACjBqB,EAAcrB,EAAO,GAKtB/B,EAAS+B,EAAO,IAAQhV,EAAK6R,IAGxBwE,GACJrW,EAAK6R,KACJ,WAIC4C,EAAQ4B,IAKT7B,EAAQ,EAAI7b,GAAK,GAAIwb,QAIrBK,EAAQ,EAAI7b,GAAK,GAAIwb,QAGrBK,EAAQ,GAAK,GAAIJ,KAGjBI,EAAQ,GAAK,GAAIJ,MAOnBpU,EAAK6R,IAAKmD,EAAO,GAAIjB,MAKrBY,EAAUK,EAAO,IAAQ,WAExB,OADAL,EAAUK,EAAO,GAAM,QAAUxe,OAASme,OAAWrY,EAAY9F,KAAMsE,WAChEtE,MAMRme,EAAUK,EAAO,GAAM,QAAWhV,EAAKqU,YAIxCpB,EAAQA,QAAS0B,GAGZJ,GACJA,EAAK5c,KAAMgd,EAAUA,GAIfA,GAIR2B,KAAM,SAAUC,GACf,IAGCC,EAAY1b,UAAUhB,OAGtBnB,EAAI6d,EAGJC,EAAkBra,MAAOzD,GACzB+d,EAAgB5f,EAAMa,KAAMmD,WAG5B6b,EAAUnd,EAAO8a,WAGjBsC,EAAa,SAAUje,GACtB,OAAO,SAAUgF,GAChB8Y,EAAiB9d,GAAMnC,KACvBkgB,EAAe/d,GAAMmC,UAAUhB,OAAS,EAAIhD,EAAMa,KAAMmD,WAAc6C,IAC5D6Y,GACTG,EAAQb,YAAaW,EAAiBC,KAM1C,GAAKF,GAAa,IACjB5D,EAAY2D,EAAaI,EAAQtX,KAAMuX,EAAYje,IAAMka,QAAS8D,EAAQ7D,QACxE0D,GAGuB,YAApBG,EAAQlC,SACZ5c,EAAY6e,EAAe/d,IAAO+d,EAAe/d,GAAIwa,OAErD,OAAOwD,EAAQxD,OAKjB,KAAQxa,KACPia,EAAY8D,EAAe/d,GAAKie,EAAYje,GAAKge,EAAQ7D,QAG1D,OAAO6D,EAAQ1D,aAOjB,IAAI4D,EAAc,yDAElBrd,EAAO8a,SAAS0B,cAAgB,SAAUpZ,EAAOka,GAI3CvgB,EAAOwgB,SAAWxgB,EAAOwgB,QAAQC,MAAQpa,GAASia,EAAY5S,KAAMrH,EAAMf,OAC9EtF,EAAOwgB,QAAQC,KAAM,8BAAgCpa,EAAMqa,QAASra,EAAMka,MAAOA,IAOnFtd,EAAO0d,eAAiB,SAAUta,GACjCrG,EAAO6f,YAAY,WAClB,MAAMxZ,MAQR,IAAIua,EAAY3d,EAAO8a,WAkDvB,SAAS8C,IACRhhB,EAASihB,oBAAqB,mBAAoBD,GAClD7gB,EAAO8gB,oBAAqB,OAAQD,GACpC5d,EAAOyX,QAnDRzX,EAAOG,GAAGsX,MAAQ,SAAUtX,GAY3B,OAVAwd,EACEhE,KAAMxZ,GAKNib,OAAO,SAAUhY,GACjBpD,EAAO0d,eAAgBta,MAGlBpG,MAGRgD,EAAOmC,OAAQ,CAGdgB,SAAS,EAIT2a,UAAW,EAGXrG,MAAO,SAAUsG,KAGF,IAATA,IAAkB/d,EAAO8d,UAAY9d,EAAOmD,WAKjDnD,EAAOmD,SAAU,GAGH,IAAT4a,KAAmB/d,EAAO8d,UAAY,GAK3CH,EAAUrB,YAAa1f,EAAU,CAAEoD,QAIrCA,EAAOyX,MAAMkC,KAAOgE,EAAUhE,KAaD,aAAxB/c,EAASohB,YACa,YAAxBphB,EAASohB,aAA6BphB,EAAS+P,gBAAgBsR,SAGjElhB,EAAO6f,WAAY5c,EAAOyX,QAK1B7a,EAASoQ,iBAAkB,mBAAoB4Q,GAG/C7gB,EAAOiQ,iBAAkB,OAAQ4Q,IAQlC,IAAIM,EAAS,SAAUpd,EAAOX,EAAIgL,EAAKhH,EAAOga,EAAWC,EAAUC,GAClE,IAAIlf,EAAI,EACP2C,EAAMhB,EAAMR,OACZge,EAAc,MAAPnT,EAGR,GAAuB,WAAlBrL,EAAQqL,GAEZ,IAAMhM,KADNgf,GAAY,EACDhT,EACV+S,EAAQpd,EAAOX,EAAIhB,EAAGgM,EAAKhM,IAAK,EAAMif,EAAUC,QAI3C,QAAevb,IAAVqB,IACXga,GAAY,EAEN9f,EAAY8F,KACjBka,GAAM,GAGFC,IAGCD,GACJle,EAAGhC,KAAM2C,EAAOqD,GAChBhE,EAAK,OAILme,EAAOne,EACPA,EAAK,SAAUkB,EAAMkd,EAAMpa,GAC1B,OAAOma,EAAKngB,KAAM6B,EAAQqB,GAAQ8C,MAKhChE,GACJ,KAAQhB,EAAI2C,EAAK3C,IAChBgB,EACCW,EAAO3B,GAAKgM,EAAKkT,EAChBla,EACAA,EAAMhG,KAAM2C,EAAO3B,GAAKA,EAAGgB,EAAIW,EAAO3B,GAAKgM,KAMhD,OAAKgT,EACGrd,EAIHwd,EACGne,EAAGhC,KAAM2C,GAGVgB,EAAM3B,EAAIW,EAAO,GAAKqK,GAAQiT,GAKlCI,EAAY,QACfC,EAAa,YAGd,SAASC,EAAYC,EAAMC,GAC1B,OAAOA,EAAOC,cAMf,SAASC,EAAWC,GACnB,OAAOA,EAAO7b,QAASsb,EAAW,OAAQtb,QAASub,EAAYC,GAEhE,IAAIM,EAAa,SAAUC,GAQ1B,OAA0B,IAAnBA,EAAM1gB,UAAqC,IAAnB0gB,EAAM1gB,YAAsB0gB,EAAM1gB,UAMlE,SAAS2gB,IACRliB,KAAK+F,QAAU/C,EAAO+C,QAAUmc,EAAKC,MAGtCD,EAAKC,IAAM,EAEXD,EAAK3e,UAAY,CAEhB2K,MAAO,SAAU+T,GAGhB,IAAI9a,EAAQ8a,EAAOjiB,KAAK+F,SA4BxB,OAzBMoB,IACLA,EAAQ,GAKH6a,EAAYC,KAIXA,EAAM1gB,SACV0gB,EAAOjiB,KAAK+F,SAAYoB,EAMxB/G,OAAOgiB,eAAgBH,EAAOjiB,KAAK+F,QAAS,CAC3CoB,MAAOA,EACPkb,cAAc,MAMXlb,GAERmb,IAAK,SAAUL,EAAOM,EAAMpb,GAC3B,IAAIqb,EACHtU,EAAQlO,KAAKkO,MAAO+T,GAIrB,GAAqB,iBAATM,EACXrU,EAAO4T,EAAWS,IAAWpb,OAM7B,IAAMqb,KAAQD,EACbrU,EAAO4T,EAAWU,IAAWD,EAAMC,GAGrC,OAAOtU,GAERvK,IAAK,SAAUse,EAAO9T,GACrB,YAAerI,IAARqI,EACNnO,KAAKkO,MAAO+T,GAGZA,EAAOjiB,KAAK+F,UAAakc,EAAOjiB,KAAK+F,SAAW+b,EAAW3T,KAE7D+S,OAAQ,SAAUe,EAAO9T,EAAKhH,GAa7B,YAAarB,IAARqI,GACCA,GAAsB,iBAARA,QAAgCrI,IAAVqB,EAElCnH,KAAK2D,IAAKse,EAAO9T,IASzBnO,KAAKsiB,IAAKL,EAAO9T,EAAKhH,QAILrB,IAAVqB,EAAsBA,EAAQgH,IAEtCuP,OAAQ,SAAUuE,EAAO9T,GACxB,IAAIhM,EACH+L,EAAQ+T,EAAOjiB,KAAK+F,SAErB,QAAeD,IAAVoI,EAAL,CAIA,QAAapI,IAARqI,EAAoB,CAkBxBhM,GAXCgM,EAJIvI,MAAMC,QAASsI,GAIbA,EAAI/J,IAAK0d,IAEf3T,EAAM2T,EAAW3T,MAIJD,EACZ,CAAEC,GACAA,EAAIrB,MAAOiP,IAAmB,IAG1BzY,OAER,KAAQnB,YACA+L,EAAOC,EAAKhM,UAKR2D,IAARqI,GAAqBnL,EAAOyD,cAAeyH,MAM1C+T,EAAM1gB,SACV0gB,EAAOjiB,KAAK+F,cAAYD,SAEjBmc,EAAOjiB,KAAK+F,YAItB0c,QAAS,SAAUR,GAClB,IAAI/T,EAAQ+T,EAAOjiB,KAAK+F,SACxB,YAAiBD,IAAVoI,IAAwBlL,EAAOyD,cAAeyH,KAGvD,IAAIwU,EAAW,IAAIR,EAEfS,EAAW,IAAIT,EAcfU,EAAS,gCACZC,EAAa,SA2Bd,SAASC,EAAUze,EAAM8J,EAAKoU,GAC7B,IAAIld,EAIJ,QAAcS,IAATyc,GAAwC,IAAlBle,EAAK9C,SAI/B,GAHA8D,EAAO,QAAU8I,EAAIjI,QAAS2c,EAAY,OAAQpb,cAG7B,iBAFrB8a,EAAOle,EAAK7B,aAAc6C,IAEM,CAC/B,IACCkd,EApCJ,SAAkBA,GACjB,MAAc,SAATA,GAIS,UAATA,IAIS,SAATA,EACG,KAIHA,KAAUA,EAAO,IACbA,EAGJK,EAAOnV,KAAM8U,GACVQ,KAAKC,MAAOT,GAGbA,GAcGU,CAASV,GACf,MAAQ9V,IAGVkW,EAASL,IAAKje,EAAM8J,EAAKoU,QAEzBA,OAAOzc,EAGT,OAAOyc,EAGRvf,EAAOmC,OAAQ,CACdsd,QAAS,SAAUpe,GAClB,OAAOse,EAASF,QAASpe,IAAUqe,EAASD,QAASpe,IAGtDke,KAAM,SAAUle,EAAMgB,EAAMkd,GAC3B,OAAOI,EAASzB,OAAQ7c,EAAMgB,EAAMkd,IAGrCW,WAAY,SAAU7e,EAAMgB,GAC3Bsd,EAASjF,OAAQrZ,EAAMgB,IAKxB8d,MAAO,SAAU9e,EAAMgB,EAAMkd,GAC5B,OAAOG,EAASxB,OAAQ7c,EAAMgB,EAAMkd,IAGrCa,YAAa,SAAU/e,EAAMgB,GAC5Bqd,EAAShF,OAAQrZ,EAAMgB,MAIzBrC,EAAOG,GAAGgC,OAAQ,CACjBod,KAAM,SAAUpU,EAAKhH,GACpB,IAAIhF,EAAGkD,EAAMkd,EACZle,EAAOrE,KAAM,GACb0O,EAAQrK,GAAQA,EAAKuF,WAGtB,QAAa9D,IAARqI,EAAoB,CACxB,GAAKnO,KAAKsD,SACTif,EAAOI,EAAShf,IAAKU,GAEE,IAAlBA,EAAK9C,WAAmBmhB,EAAS/e,IAAKU,EAAM,iBAAmB,CAEnE,IADAlC,EAAIuM,EAAMpL,OACFnB,KAIFuM,EAAOvM,IAEsB,KADjCkD,EAAOqJ,EAAOvM,GAAIkD,MACRzE,QAAS,WAClByE,EAAOyc,EAAWzc,EAAK/E,MAAO,IAC9BwiB,EAAUze,EAAMgB,EAAMkd,EAAMld,KAI/Bqd,EAASJ,IAAKje,EAAM,gBAAgB,GAItC,OAAOke,EAIR,MAAoB,iBAARpU,EACJnO,KAAKkE,MAAM,WACjBye,EAASL,IAAKtiB,KAAMmO,MAIf+S,EAAQlhB,MAAM,SAAUmH,GAC9B,IAAIob,EAOJ,GAAKle,QAAkByB,IAAVqB,EAKZ,YAAcrB,KADdyc,EAAOI,EAAShf,IAAKU,EAAM8J,UAQbrI,KADdyc,EAAOO,EAAUze,EAAM8J,IALfoU,OAWR,EAIDviB,KAAKkE,MAAM,WAGVye,EAASL,IAAKtiB,KAAMmO,EAAKhH,QAExB,KAAMA,EAAO7C,UAAUhB,OAAS,EAAG,MAAM,IAG7C4f,WAAY,SAAU/U,GACrB,OAAOnO,KAAKkE,MAAM,WACjBye,EAASjF,OAAQ1d,KAAMmO,SAM1BnL,EAAOmC,OAAQ,CACdkY,MAAO,SAAUhZ,EAAM1C,EAAM4gB,GAC5B,IAAIlF,EAEJ,GAAKhZ,EAYJ,OAXA1C,GAASA,GAAQ,MAAS,QAC1B0b,EAAQqF,EAAS/e,IAAKU,EAAM1C,GAGvB4gB,KACElF,GAASzX,MAAMC,QAAS0c,GAC7BlF,EAAQqF,EAASxB,OAAQ7c,EAAM1C,EAAMqB,EAAO2D,UAAW4b,IAEvDlF,EAAM1c,KAAM4hB,IAGPlF,GAAS,IAIlBgG,QAAS,SAAUhf,EAAM1C,GACxBA,EAAOA,GAAQ,KAEf,IAAI0b,EAAQra,EAAOqa,MAAOhZ,EAAM1C,GAC/B2hB,EAAcjG,EAAM/Z,OACpBH,EAAKka,EAAMhP,QACXkV,EAAQvgB,EAAOwgB,YAAanf,EAAM1C,GAMvB,eAAPwB,IACJA,EAAKka,EAAMhP,QACXiV,KAGIngB,IAIU,OAATxB,GACJ0b,EAAMzL,QAAS,qBAIT2R,EAAME,KACbtgB,EAAGhC,KAAMkD,GApBF,WACNrB,EAAOqgB,QAAShf,EAAM1C,KAmBF4hB,KAGhBD,GAAeC,GACpBA,EAAM7N,MAAM6H,QAKdiG,YAAa,SAAUnf,EAAM1C,GAC5B,IAAIwM,EAAMxM,EAAO,aACjB,OAAO+gB,EAAS/e,IAAKU,EAAM8J,IAASuU,EAASxB,OAAQ7c,EAAM8J,EAAK,CAC/DuH,MAAO1S,EAAO4Z,UAAW,eAAgBvB,KAAK,WAC7CqH,EAAShF,OAAQrZ,EAAM,CAAE1C,EAAO,QAASwM,YAM7CnL,EAAOG,GAAGgC,OAAQ,CACjBkY,MAAO,SAAU1b,EAAM4gB,GACtB,IAAImB,EAAS,EAQb,MANqB,iBAAT/hB,IACX4gB,EAAO5gB,EACPA,EAAO,KACP+hB,KAGIpf,UAAUhB,OAASogB,EAChB1gB,EAAOqa,MAAOrd,KAAM,GAAK2B,QAGjBmE,IAATyc,EACNviB,KACAA,KAAKkE,MAAM,WACV,IAAImZ,EAAQra,EAAOqa,MAAOrd,KAAM2B,EAAM4gB,GAGtCvf,EAAOwgB,YAAaxjB,KAAM2B,GAEZ,OAATA,GAAgC,eAAf0b,EAAO,IAC5Bra,EAAOqgB,QAASrjB,KAAM2B,OAI1B0hB,QAAS,SAAU1hB,GAClB,OAAO3B,KAAKkE,MAAM,WACjBlB,EAAOqgB,QAASrjB,KAAM2B,OAGxBgiB,WAAY,SAAUhiB,GACrB,OAAO3B,KAAKqd,MAAO1b,GAAQ,KAAM,KAKlC8a,QAAS,SAAU9a,EAAML,GACxB,IAAIqP,EACHiT,EAAQ,EACRC,EAAQ7gB,EAAO8a,WACfhM,EAAW9R,KACXmC,EAAInC,KAAKsD,OACT+Y,EAAU,aACCuH,GACTC,EAAMvE,YAAaxN,EAAU,CAAEA,KAUlC,IANqB,iBAATnQ,IACXL,EAAMK,EACNA,OAAOmE,GAERnE,EAAOA,GAAQ,KAEPQ,MACPwO,EAAM+R,EAAS/e,IAAKmO,EAAU3P,GAAKR,EAAO,gBAC9BgP,EAAI+E,QACfkO,IACAjT,EAAI+E,MAAM2F,IAAKgB,IAIjB,OADAA,IACOwH,EAAMpH,QAASnb,MAGxB,IAAIwiB,GAAO,sCAA0CC,OAEjDC,GAAU,IAAIja,OAAQ,iBAAmB+Z,GAAO,cAAe,KAG/DG,GAAY,CAAE,MAAO,QAAS,SAAU,QAExCtU,GAAkB/P,EAAS+P,gBAI1BuU,GAAa,SAAU7f,GACzB,OAAOrB,EAAOyF,SAAUpE,EAAK6I,cAAe7I,IAE7C8f,GAAW,CAAEA,UAAU,GAOnBxU,GAAgByU,cACpBF,GAAa,SAAU7f,GACtB,OAAOrB,EAAOyF,SAAUpE,EAAK6I,cAAe7I,IAC3CA,EAAK+f,YAAaD,MAAe9f,EAAK6I,gBAG1C,IAAImX,GAAqB,SAAUhgB,EAAMmK,GAOvC,MAA8B,UAH9BnK,EAAOmK,GAAMnK,GAGDigB,MAAMC,SACM,KAAvBlgB,EAAKigB,MAAMC,SAMXL,GAAY7f,IAEsB,SAAlCrB,EAAOwhB,IAAKngB,EAAM,YAKrB,SAASogB,GAAWpgB,EAAMme,EAAMkC,EAAYC,GAC3C,IAAIC,EAAUC,EACbC,EAAgB,GAChBC,EAAeJ,EACd,WACC,OAAOA,EAAM7V,OAEd,WACC,OAAO9L,EAAOwhB,IAAKngB,EAAMme,EAAM,KAEjCwC,EAAUD,IACVE,EAAOP,GAAcA,EAAY,KAAS1hB,EAAOkiB,UAAW1C,GAAS,GAAK,MAG1E2C,EAAgB9gB,EAAK9C,WAClByB,EAAOkiB,UAAW1C,IAAmB,OAATyC,IAAkBD,IAChDhB,GAAQ7W,KAAMnK,EAAOwhB,IAAKngB,EAAMme,IAElC,GAAK2C,GAAiBA,EAAe,KAAQF,EAAO,CAYnD,IARAD,GAAoB,EAGpBC,EAAOA,GAAQE,EAAe,GAG9BA,GAAiBH,GAAW,EAEpBF,KAIP9hB,EAAOshB,MAAOjgB,EAAMme,EAAM2C,EAAgBF,IACnC,EAAIJ,IAAY,GAAMA,EAAQE,IAAiBC,GAAW,MAAW,IAC3EF,EAAgB,GAEjBK,GAAgCN,EAIjCM,GAAgC,EAChCniB,EAAOshB,MAAOjgB,EAAMme,EAAM2C,EAAgBF,GAG1CP,EAAaA,GAAc,GAgB5B,OAbKA,IACJS,GAAiBA,IAAkBH,GAAW,EAG9CJ,EAAWF,EAAY,GACtBS,GAAkBT,EAAY,GAAM,GAAMA,EAAY,IACrDA,EAAY,GACTC,IACJA,EAAMM,KAAOA,EACbN,EAAM7Q,MAAQqR,EACdR,EAAM3f,IAAM4f,IAGPA,EAIR,IAAIQ,GAAoB,GAExB,SAASC,GAAmBhhB,GAC3B,IAAImT,EACHtV,EAAMmC,EAAK6I,cACXb,EAAWhI,EAAKgI,SAChBkY,EAAUa,GAAmB/Y,GAE9B,OAAKkY,IAIL/M,EAAOtV,EAAIojB,KAAK3iB,YAAaT,EAAII,cAAe+J,IAChDkY,EAAUvhB,EAAOwhB,IAAKhN,EAAM,WAE5BA,EAAK5U,WAAWC,YAAa2U,GAEZ,SAAZ+M,IACJA,EAAU,SAEXa,GAAmB/Y,GAAakY,EAEzBA,GAGR,SAASgB,GAAUzT,EAAU0T,GAO5B,IANA,IAAIjB,EAASlgB,EACZohB,EAAS,GACTtK,EAAQ,EACR7X,EAASwO,EAASxO,OAGX6X,EAAQ7X,EAAQ6X,KACvB9W,EAAOyN,EAAUqJ,IACNmJ,QAIXC,EAAUlgB,EAAKigB,MAAMC,QAChBiB,GAKa,SAAZjB,IACJkB,EAAQtK,GAAUuH,EAAS/e,IAAKU,EAAM,YAAe,KAC/CohB,EAAQtK,KACb9W,EAAKigB,MAAMC,QAAU,KAGK,KAAvBlgB,EAAKigB,MAAMC,SAAkBF,GAAoBhgB,KACrDohB,EAAQtK,GAAUkK,GAAmBhhB,KAGrB,SAAZkgB,IACJkB,EAAQtK,GAAU,OAGlBuH,EAASJ,IAAKje,EAAM,UAAWkgB,KAMlC,IAAMpJ,EAAQ,EAAGA,EAAQ7X,EAAQ6X,IACR,MAAnBsK,EAAQtK,KACZrJ,EAAUqJ,GAAQmJ,MAAMC,QAAUkB,EAAQtK,IAI5C,OAAOrJ,EAGR9O,EAAOG,GAAGgC,OAAQ,CACjBqgB,KAAM,WACL,OAAOD,GAAUvlB,MAAM,IAExB0lB,KAAM,WACL,OAAOH,GAAUvlB,OAElB2lB,OAAQ,SAAU1H,GACjB,MAAsB,kBAAVA,EACJA,EAAQje,KAAKwlB,OAASxlB,KAAK0lB,OAG5B1lB,KAAKkE,MAAM,WACZmgB,GAAoBrkB,MACxBgD,EAAQhD,MAAOwlB,OAEfxiB,EAAQhD,MAAO0lB,aAKnB,IAUEE,GACAhV,GAXEiV,2BAEAC,oCAEAC,wCAMFH,GADchmB,EAASomB,yBACRrjB,YAAa/C,EAAS0C,cAAe,SACpDsO,GAAQhR,EAAS0C,cAAe,UAM3BG,aAAc,OAAQ,SAC5BmO,GAAMnO,aAAc,UAAW,WAC/BmO,GAAMnO,aAAc,OAAQ,KAE5BmjB,GAAIjjB,YAAaiO,IAIjBxP,EAAQ6kB,WAAaL,GAAIM,WAAW,GAAOA,WAAW,GAAOjS,UAAUsB,QAIvEqQ,GAAI/U,UAAY,yBAChBzP,EAAQ+kB,iBAAmBP,GAAIM,WAAW,GAAOjS,UAAUwF,aAK3DmM,GAAI/U,UAAY,oBAChBzP,EAAQglB,SAAWR,GAAI3R,UAKxB,IAAIoS,GAAU,CAKbC,MAAO,CAAE,EAAG,UAAW,YACvBC,IAAK,CAAE,EAAG,oBAAqB,uBAC/BC,GAAI,CAAE,EAAG,iBAAkB,oBAC3BC,GAAI,CAAE,EAAG,qBAAsB,yBAE/BC,SAAU,CAAE,EAAG,GAAI,KAYpB,SAASC,GAAQzjB,EAASwN,GAIzB,IAAI3M,EAYJ,OATCA,OAD4C,IAAjCb,EAAQoK,qBACbpK,EAAQoK,qBAAsBoD,GAAO,UAEI,IAA7BxN,EAAQ4K,iBACpB5K,EAAQ4K,iBAAkB4C,GAAO,KAGjC,QAGM5K,IAAR4K,GAAqBA,GAAOrE,EAAUnJ,EAASwN,GAC5C1N,EAAOgB,MAAO,CAAEd,GAAWa,GAG5BA,EAKR,SAAS6iB,GAAe9iB,EAAO+iB,GAI9B,IAHA,IAAI1kB,EAAI,EACP8Y,EAAInX,EAAMR,OAEHnB,EAAI8Y,EAAG9Y,IACdugB,EAASJ,IACRxe,EAAO3B,GACP,cACC0kB,GAAenE,EAAS/e,IAAKkjB,EAAa1kB,GAAK,eA1CnDkkB,GAAQS,MAAQT,GAAQU,MAAQV,GAAQW,SAAWX,GAAQY,QAAUZ,GAAQC,MAC7ED,GAAQa,GAAKb,GAAQI,GAGfrlB,EAAQglB,SACbC,GAAQc,SAAWd,GAAQD,OAAS,CAAE,EAAG,+BAAgC,cA2C1E,IAAIrb,GAAQ,YAEZ,SAASqc,GAAetjB,EAAOZ,EAASmkB,EAASC,EAAWC,GAO3D,IANA,IAAIljB,EAAMsM,EAAKD,EAAK8W,EAAMC,EAAU1iB,EACnC2iB,EAAWxkB,EAAQ8iB,yBACnB2B,EAAQ,GACRxlB,EAAI,EACJ8Y,EAAInX,EAAMR,OAEHnB,EAAI8Y,EAAG9Y,IAGd,IAFAkC,EAAOP,EAAO3B,KAEQ,IAATkC,EAGZ,GAAwB,WAAnBvB,EAAQuB,GAIZrB,EAAOgB,MAAO2jB,EAAOtjB,EAAK9C,SAAW,CAAE8C,GAASA,QAG1C,GAAM0G,GAAM0C,KAAMpJ,GAIlB,CAUN,IATAsM,EAAMA,GAAO+W,EAAS/kB,YAAaO,EAAQZ,cAAe,QAG1DoO,GAAQoV,GAAS3Y,KAAM9I,IAAU,CAAE,GAAI,KAAQ,GAAIoD,cACnD+f,EAAOnB,GAAS3V,IAAS2V,GAAQK,SACjC/V,EAAIE,UAAY2W,EAAM,GAAMxkB,EAAO4kB,cAAevjB,GAASmjB,EAAM,GAGjEziB,EAAIyiB,EAAM,GACFziB,KACP4L,EAAMA,EAAIsD,UAKXjR,EAAOgB,MAAO2jB,EAAOhX,EAAInE,aAGzBmE,EAAM+W,EAASnV,YAGXD,YAAc,QAzBlBqV,EAAMhnB,KAAMuC,EAAQ2kB,eAAgBxjB,IAkCvC,IAHAqjB,EAASpV,YAAc,GAEvBnQ,EAAI,EACMkC,EAAOsjB,EAAOxlB,MAGvB,GAAKmlB,GAAatkB,EAAO6D,QAASxC,EAAMijB,IAAe,EACjDC,GACJA,EAAQ5mB,KAAM0D,QAgBhB,GAXAojB,EAAWvD,GAAY7f,GAGvBsM,EAAMgW,GAAQe,EAAS/kB,YAAa0B,GAAQ,UAGvCojB,GACJb,GAAejW,GAIX0W,EAEJ,IADAtiB,EAAI,EACMV,EAAOsM,EAAK5L,MAChBghB,GAAYtY,KAAMpJ,EAAK1C,MAAQ,KACnC0lB,EAAQ1mB,KAAM0D,GAMlB,OAAOqjB,EAIR,IAAII,GAAiB,sBAErB,SAASC,KACR,OAAO,EAGR,SAASC,KACR,OAAO,EASR,SAASC,GAAY5jB,EAAM1C,GAC1B,OAAS0C,IAMV,WACC,IACC,OAAOzE,EAASsV,cACf,MAAQgT,KATQC,KAAqC,UAATxmB,GAY/C,SAASymB,GAAI/jB,EAAMgkB,EAAOplB,EAAUsf,EAAMpf,EAAImlB,GAC7C,IAAIC,EAAQ5mB,EAGZ,GAAsB,iBAAV0mB,EAAqB,CAShC,IAAM1mB,IANmB,iBAAbsB,IAGXsf,EAAOA,GAAQtf,EACfA,OAAW6C,GAEEuiB,EACbD,GAAI/jB,EAAM1C,EAAMsB,EAAUsf,EAAM8F,EAAO1mB,GAAQ2mB,GAEhD,OAAOjkB,EAsBR,GAnBa,MAARke,GAAsB,MAANpf,GAGpBA,EAAKF,EACLsf,EAAOtf,OAAW6C,GACD,MAAN3C,IACc,iBAAbF,GAGXE,EAAKof,EACLA,OAAOzc,IAIP3C,EAAKof,EACLA,EAAOtf,EACPA,OAAW6C,KAGD,IAAP3C,EACJA,EAAK6kB,QACC,IAAM7kB,EACZ,OAAOkB,EAeR,OAZa,IAARikB,IACJC,EAASplB,GACTA,EAAK,SAAUqlB,GAId,OADAxlB,IAASylB,IAAKD,GACPD,EAAO7nB,MAAOV,KAAMsE,aAIzB8C,KAAOmhB,EAAOnhB,OAAUmhB,EAAOnhB,KAAOpE,EAAOoE,SAE1C/C,EAAKH,MAAM,WACjBlB,EAAOwlB,MAAMnN,IAAKrb,KAAMqoB,EAAOllB,EAAIof,EAAMtf,MA+a3C,SAASylB,GAAgBla,EAAI7M,EAAMsmB,GAG5BA,GAQNvF,EAASJ,IAAK9T,EAAI7M,GAAM,GACxBqB,EAAOwlB,MAAMnN,IAAK7M,EAAI7M,EAAM,CAC3B8N,WAAW,EACXd,QAAS,SAAU6Z,GAClB,IAAIG,EAAUxV,EACbyV,EAAQlG,EAAS/e,IAAK3D,KAAM2B,GAE7B,GAAyB,EAAlB6mB,EAAMK,WAAmB7oB,KAAM2B,IAKrC,GAAMinB,EAAMtlB,QAuCEN,EAAOwlB,MAAMvJ,QAAStd,IAAU,IAAKmnB,cAClDN,EAAMO,uBArBN,GAdAH,EAAQtoB,EAAMa,KAAMmD,WACpBoe,EAASJ,IAAKtiB,KAAM2B,EAAMinB,GAK1BD,EAAWV,EAAYjoB,KAAM2B,GAC7B3B,KAAM2B,KAEDinB,KADLzV,EAASuP,EAAS/e,IAAK3D,KAAM2B,KACJgnB,EACxBjG,EAASJ,IAAKtiB,KAAM2B,GAAM,GAE1BwR,EAAS,GAELyV,IAAUzV,EAWd,OARAqV,EAAMQ,2BACNR,EAAMS,iBAOC9V,GAAUA,EAAOhM,WAefyhB,EAAMtlB,SAGjBof,EAASJ,IAAKtiB,KAAM2B,EAAM,CACzBwF,MAAOnE,EAAOwlB,MAAMU,QAInBlmB,EAAOmC,OAAQyjB,EAAO,GAAK5lB,EAAOmmB,MAAM5lB,WACxCqlB,EAAMtoB,MAAO,GACbN,QAKFwoB,EAAMQ,qCA/E0BljB,IAA7B4c,EAAS/e,IAAK6K,EAAI7M,IACtBqB,EAAOwlB,MAAMnN,IAAK7M,EAAI7M,EAAMomB,IA5a/B/kB,EAAOwlB,MAAQ,CAEd/oB,OAAQ,GAER4b,IAAK,SAAUhX,EAAMgkB,EAAO1Z,EAAS4T,EAAMtf,GAE1C,IAAImmB,EAAaC,EAAa1Y,EAC7B2Y,EAAQC,EAAGC,EACXvK,EAASwK,EAAU9nB,EAAM+nB,EAAYC,EACrCC,EAAWlH,EAAS/e,IAAKU,GAG1B,GAAM2d,EAAY3d,GAuClB,IAlCKsK,EAAQA,UAEZA,GADAya,EAAcza,GACQA,QACtB1L,EAAWmmB,EAAYnmB,UAKnBA,GACJD,EAAOwN,KAAKM,gBAAiBnB,GAAiB1M,GAIzC0L,EAAQvH,OACbuH,EAAQvH,KAAOpE,EAAOoE,SAIfkiB,EAASM,EAASN,UACzBA,EAASM,EAASN,OAASlpB,OAAOypB,OAAQ,QAEnCR,EAAcO,EAASE,UAC9BT,EAAcO,EAASE,OAAS,SAAUrd,GAIzC,YAAyB,IAAXzJ,GAA0BA,EAAOwlB,MAAMuB,YAActd,EAAE9K,KACpEqB,EAAOwlB,MAAMwB,SAAStpB,MAAO2D,EAAMC,gBAAcwB,IAMpDyjB,GADAlB,GAAUA,GAAS,IAAKvb,MAAOiP,IAAmB,CAAE,KAC1CzY,OACFimB,KAEP5nB,EAAOgoB,GADPhZ,EAAMmX,GAAe3a,KAAMkb,EAAOkB,KAAS,IACpB,GACvBG,GAAe/Y,EAAK,IAAO,IAAKpJ,MAAO,KAAMtC,OAGvCtD,IAKNsd,EAAUjc,EAAOwlB,MAAMvJ,QAAStd,IAAU,GAG1CA,GAASsB,EAAWgc,EAAQ6J,aAAe7J,EAAQgL,WAActoB,EAGjEsd,EAAUjc,EAAOwlB,MAAMvJ,QAAStd,IAAU,GAG1C6nB,EAAYxmB,EAAOmC,OAAQ,CAC1BxD,KAAMA,EACNgoB,SAAUA,EACVpH,KAAMA,EACN5T,QAASA,EACTvH,KAAMuH,EAAQvH,KACdnE,SAAUA,EACV6H,aAAc7H,GAAYD,EAAO6O,KAAK/E,MAAMhC,aAAa2C,KAAMxK,GAC/DwM,UAAWia,EAAW7b,KAAM,MAC1Bub,IAGKK,EAAWH,EAAQ3nB,OAC1B8nB,EAAWH,EAAQ3nB,GAAS,IACnBuoB,cAAgB,EAGnBjL,EAAQkL,QACiD,IAA9DlL,EAAQkL,MAAMhpB,KAAMkD,EAAMke,EAAMmH,EAAYL,IAEvChlB,EAAK2L,kBACT3L,EAAK2L,iBAAkBrO,EAAM0nB,IAK3BpK,EAAQ5D,MACZ4D,EAAQ5D,IAAIla,KAAMkD,EAAMmlB,GAElBA,EAAU7a,QAAQvH,OACvBoiB,EAAU7a,QAAQvH,KAAOuH,EAAQvH,OAK9BnE,EACJwmB,EAASvkB,OAAQukB,EAASS,gBAAiB,EAAGV,GAE9CC,EAAS9oB,KAAM6oB,GAIhBxmB,EAAOwlB,MAAM/oB,OAAQkC,IAAS,IAMhC+b,OAAQ,SAAUrZ,EAAMgkB,EAAO1Z,EAAS1L,EAAUmnB,GAEjD,IAAIrlB,EAAGslB,EAAW1Z,EACjB2Y,EAAQC,EAAGC,EACXvK,EAASwK,EAAU9nB,EAAM+nB,EAAYC,EACrCC,EAAWlH,EAASD,QAASpe,IAAUqe,EAAS/e,IAAKU,GAEtD,GAAMulB,IAAeN,EAASM,EAASN,QAAvC,CAOA,IADAC,GADAlB,GAAUA,GAAS,IAAKvb,MAAOiP,IAAmB,CAAE,KAC1CzY,OACFimB,KAMP,GAJA5nB,EAAOgoB,GADPhZ,EAAMmX,GAAe3a,KAAMkb,EAAOkB,KAAS,IACpB,GACvBG,GAAe/Y,EAAK,IAAO,IAAKpJ,MAAO,KAAMtC,OAGvCtD,EAAN,CAeA,IARAsd,EAAUjc,EAAOwlB,MAAMvJ,QAAStd,IAAU,GAE1C8nB,EAAWH,EADX3nB,GAASsB,EAAWgc,EAAQ6J,aAAe7J,EAAQgL,WAActoB,IACpC,GAC7BgP,EAAMA,EAAK,IACV,IAAI5G,OAAQ,UAAY2f,EAAW7b,KAAM,iBAAoB,WAG9Dwc,EAAYtlB,EAAI0kB,EAASnmB,OACjByB,KACPykB,EAAYC,EAAU1kB,IAEfqlB,GAAeT,IAAaH,EAAUG,UACzChb,GAAWA,EAAQvH,OAASoiB,EAAUpiB,MACtCuJ,IAAOA,EAAIlD,KAAM+b,EAAU/Z,YAC3BxM,GAAYA,IAAaumB,EAAUvmB,WACxB,OAAbA,IAAqBumB,EAAUvmB,YAChCwmB,EAASvkB,OAAQH,EAAG,GAEfykB,EAAUvmB,UACdwmB,EAASS,gBAELjL,EAAQvB,QACZuB,EAAQvB,OAAOvc,KAAMkD,EAAMmlB,IAOzBa,IAAcZ,EAASnmB,SACrB2b,EAAQqL,WACkD,IAA/DrL,EAAQqL,SAASnpB,KAAMkD,EAAMqlB,EAAYE,EAASE,SAElD9mB,EAAOunB,YAAalmB,EAAM1C,EAAMioB,EAASE,eAGnCR,EAAQ3nB,SA1Cf,IAAMA,KAAQ2nB,EACbtmB,EAAOwlB,MAAM9K,OAAQrZ,EAAM1C,EAAO0mB,EAAOkB,GAAK5a,EAAS1L,GAAU,GA8C/DD,EAAOyD,cAAe6iB,IAC1B5G,EAAShF,OAAQrZ,EAAM,mBAIzB2lB,SAAU,SAAUQ,GAEnB,IAAIroB,EAAG4C,EAAGhB,EAAKwQ,EAASiV,EAAWiB,EAClCrW,EAAO,IAAIxO,MAAOtB,UAAUhB,QAG5BklB,EAAQxlB,EAAOwlB,MAAMkC,IAAKF,GAE1Bf,GACC/G,EAAS/e,IAAK3D,KAAM,WAAcI,OAAOypB,OAAQ,OAC/CrB,EAAM7mB,OAAU,GACnBsd,EAAUjc,EAAOwlB,MAAMvJ,QAASuJ,EAAM7mB,OAAU,GAKjD,IAFAyS,EAAM,GAAMoU,EAENrmB,EAAI,EAAGA,EAAImC,UAAUhB,OAAQnB,IAClCiS,EAAMjS,GAAMmC,UAAWnC,GAMxB,GAHAqmB,EAAMmC,eAAiB3qB,MAGlBif,EAAQ2L,cAA2D,IAA5C3L,EAAQ2L,YAAYzpB,KAAMnB,KAAMwoB,GAA5D,CASA,IAJAiC,EAAeznB,EAAOwlB,MAAMiB,SAAStoB,KAAMnB,KAAMwoB,EAAOiB,GAGxDtnB,EAAI,GACMoS,EAAUkW,EAActoB,QAAYqmB,EAAMqC,wBAInD,IAHArC,EAAMsC,cAAgBvW,EAAQlQ,KAE9BU,EAAI,GACMykB,EAAYjV,EAAQkV,SAAU1kB,QACtCyjB,EAAMuC,iCAIDvC,EAAMwC,aAAsC,IAAxBxB,EAAU/Z,YACnC+Y,EAAMwC,WAAWvd,KAAM+b,EAAU/Z,aAEjC+Y,EAAMgB,UAAYA,EAClBhB,EAAMjG,KAAOiH,EAAUjH,UAKVzc,KAHb/B,IAAUf,EAAOwlB,MAAMvJ,QAASuK,EAAUG,WAAc,IAAKG,QAC5DN,EAAU7a,SAAUjO,MAAO6T,EAAQlQ,KAAM+P,MAGT,KAAzBoU,EAAMrV,OAASpP,KACrBykB,EAAMS,iBACNT,EAAMO,oBAYX,OAJK9J,EAAQgM,cACZhM,EAAQgM,aAAa9pB,KAAMnB,KAAMwoB,GAG3BA,EAAMrV,SAGdsW,SAAU,SAAUjB,EAAOiB,GAC1B,IAAItnB,EAAGqnB,EAAWvX,EAAKiZ,EAAiBC,EACvCV,EAAe,GACfP,EAAgBT,EAASS,cACzBpb,EAAM0Z,EAAM/iB,OAGb,GAAKykB,GAIJpb,EAAIvN,YAOc,UAAfinB,EAAM7mB,MAAoB6mB,EAAM5S,QAAU,GAE7C,KAAQ9G,IAAQ9O,KAAM8O,EAAMA,EAAIlM,YAAc5C,KAI7C,GAAsB,IAAjB8O,EAAIvN,WAAoC,UAAfinB,EAAM7mB,OAAqC,IAAjBmN,EAAI1C,UAAsB,CAGjF,IAFA8e,EAAkB,GAClBC,EAAmB,GACbhpB,EAAI,EAAGA,EAAI+nB,EAAe/nB,SAME2D,IAA5BqlB,EAFLlZ,GAHAuX,EAAYC,EAAUtnB,IAGNc,SAAW,OAG1BkoB,EAAkBlZ,GAAQuX,EAAU1e,aACnC9H,EAAQiP,EAAKjS,MAAOmb,MAAOrM,IAAS,EACpC9L,EAAOwN,KAAMyB,EAAKjS,KAAM,KAAM,CAAE8O,IAAQxL,QAErC6nB,EAAkBlZ,IACtBiZ,EAAgBvqB,KAAM6oB,GAGnB0B,EAAgB5nB,QACpBmnB,EAAa9pB,KAAM,CAAE0D,KAAMyK,EAAK2a,SAAUyB,IAY9C,OALApc,EAAM9O,KACDkqB,EAAgBT,EAASnmB,QAC7BmnB,EAAa9pB,KAAM,CAAE0D,KAAMyK,EAAK2a,SAAUA,EAASnpB,MAAO4pB,KAGpDO,GAGRW,QAAS,SAAU/lB,EAAMgmB,GACxBjrB,OAAOgiB,eAAgBpf,EAAOmmB,MAAM5lB,UAAW8B,EAAM,CACpDimB,YAAY,EACZjJ,cAAc,EAEd1e,IAAKtC,EAAYgqB,GAChB,WACC,GAAKrrB,KAAKurB,cACT,OAAOF,EAAMrrB,KAAKurB,gBAGpB,WACC,GAAKvrB,KAAKurB,cACT,OAAOvrB,KAAKurB,cAAelmB,IAI9Bid,IAAK,SAAUnb,GACd/G,OAAOgiB,eAAgBpiB,KAAMqF,EAAM,CAClCimB,YAAY,EACZjJ,cAAc,EACdmJ,UAAU,EACVrkB,MAAOA,QAMXujB,IAAK,SAAUa,GACd,OAAOA,EAAevoB,EAAO+C,SAC5BwlB,EACA,IAAIvoB,EAAOmmB,MAAOoC,IAGpBtM,QAAS,CACRwM,KAAM,CAGLC,UAAU,GAEXC,MAAO,CAGNxB,MAAO,SAAU5H,GAIhB,IAAI/T,EAAKxO,MAAQuiB,EAWjB,OARKsD,GAAepY,KAAMe,EAAG7M,OAC5B6M,EAAGmd,OAAStf,EAAUmC,EAAI,UAG1Bka,GAAgBla,EAAI,QAASuZ,KAIvB,GAERmB,QAAS,SAAU3G,GAIlB,IAAI/T,EAAKxO,MAAQuiB,EAUjB,OAPKsD,GAAepY,KAAMe,EAAG7M,OAC5B6M,EAAGmd,OAAStf,EAAUmC,EAAI,UAE1Bka,GAAgBla,EAAI,UAId,GAKRkY,SAAU,SAAU8B,GACnB,IAAI/iB,EAAS+iB,EAAM/iB,OACnB,OAAOogB,GAAepY,KAAMhI,EAAO9D,OAClC8D,EAAOkmB,OAAStf,EAAU5G,EAAQ,UAClCid,EAAS/e,IAAK8B,EAAQ,UACtB4G,EAAU5G,EAAQ,OAIrBmmB,aAAc,CACbX,aAAc,SAAUzC,QAID1iB,IAAjB0iB,EAAMrV,QAAwBqV,EAAM+C,gBACxC/C,EAAM+C,cAAcM,YAAcrD,EAAMrV,YAoG7CnQ,EAAOunB,YAAc,SAAUlmB,EAAM1C,EAAMmoB,GAGrCzlB,EAAKwc,qBACTxc,EAAKwc,oBAAqBlf,EAAMmoB,IAIlC9mB,EAAOmmB,MAAQ,SAAUvnB,EAAKkqB,GAG7B,KAAQ9rB,gBAAgBgD,EAAOmmB,OAC9B,OAAO,IAAInmB,EAAOmmB,MAAOvnB,EAAKkqB,GAI1BlqB,GAAOA,EAAID,MACf3B,KAAKurB,cAAgB3pB,EACrB5B,KAAK2B,KAAOC,EAAID,KAIhB3B,KAAK+rB,mBAAqBnqB,EAAIoqB,uBACHlmB,IAAzBlE,EAAIoqB,mBAGgB,IAApBpqB,EAAIiqB,YACL9D,GACAC,GAKDhoB,KAAKyF,OAAW7D,EAAI6D,QAAkC,IAAxB7D,EAAI6D,OAAOlE,SACxCK,EAAI6D,OAAO7C,WACXhB,EAAI6D,OAELzF,KAAK8qB,cAAgBlpB,EAAIkpB,cACzB9qB,KAAKisB,cAAgBrqB,EAAIqqB,eAIzBjsB,KAAK2B,KAAOC,EAIRkqB,GACJ9oB,EAAOmC,OAAQnF,KAAM8rB,GAItB9rB,KAAKksB,UAAYtqB,GAAOA,EAAIsqB,WAAaxjB,KAAKyjB,MAG9CnsB,KAAMgD,EAAO+C,UAAY,GAK1B/C,EAAOmmB,MAAM5lB,UAAY,CACxBE,YAAaT,EAAOmmB,MACpB4C,mBAAoB/D,GACpB6C,qBAAsB7C,GACtB+C,8BAA+B/C,GAC/BoE,aAAa,EAEbnD,eAAgB,WACf,IAAIxc,EAAIzM,KAAKurB,cAEbvrB,KAAK+rB,mBAAqBhE,GAErBtb,IAAMzM,KAAKosB,aACf3f,EAAEwc,kBAGJF,gBAAiB,WAChB,IAAItc,EAAIzM,KAAKurB,cAEbvrB,KAAK6qB,qBAAuB9C,GAEvBtb,IAAMzM,KAAKosB,aACf3f,EAAEsc,mBAGJC,yBAA0B,WACzB,IAAIvc,EAAIzM,KAAKurB,cAEbvrB,KAAK+qB,8BAAgChD,GAEhCtb,IAAMzM,KAAKosB,aACf3f,EAAEuc,2BAGHhpB,KAAK+oB,oBAKP/lB,EAAOkB,KAAM,CACZmoB,QAAQ,EACRC,SAAS,EACTC,YAAY,EACZC,gBAAgB,EAChBC,SAAS,EACTC,QAAQ,EACRC,YAAY,EACZC,SAAS,EACTC,OAAO,EACPC,OAAO,EACPC,UAAU,EACVC,MAAM,EACNC,MAAQ,EACRjrB,MAAM,EACNkrB,UAAU,EACV/e,KAAK,EACLgf,SAAS,EACTvX,QAAQ,EACRwX,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,WAAW,EACXC,aAAa,EACbC,SAAS,EACTC,SAAS,EACTC,eAAe,EACfC,WAAW,EACXC,SAAS,EACTC,OAAO,GACLhrB,EAAOwlB,MAAM4C,SAEhBpoB,EAAOkB,KAAM,CAAE+Q,MAAO,UAAWgZ,KAAM,aAAc,SAAUtsB,EAAMmnB,GACpE9lB,EAAOwlB,MAAMvJ,QAAStd,GAAS,CAG9BwoB,MAAO,WAQN,OAHAzB,GAAgB1oB,KAAM2B,EAAMsmB,KAGrB,GAERiB,QAAS,WAMR,OAHAR,GAAgB1oB,KAAM2B,IAGf,GAKR+kB,SAAU,WACT,OAAO,GAGRoC,aAAcA,MAYhB9lB,EAAOkB,KAAM,CACZgqB,WAAY,YACZC,WAAY,WACZC,aAAc,cACdC,aAAc,eACZ,SAAUC,EAAM5D,GAClB1nB,EAAOwlB,MAAMvJ,QAASqP,GAAS,CAC9BxF,aAAc4B,EACdT,SAAUS,EAEVZ,OAAQ,SAAUtB,GACjB,IAAIzkB,EACH0B,EAASzF,KACTuuB,EAAU/F,EAAMyD,cAChBzC,EAAYhB,EAAMgB,UASnB,OALM+E,IAAaA,IAAY9oB,GAAWzC,EAAOyF,SAAUhD,EAAQ8oB,MAClE/F,EAAM7mB,KAAO6nB,EAAUG,SACvB5lB,EAAMylB,EAAU7a,QAAQjO,MAAOV,KAAMsE,WACrCkkB,EAAM7mB,KAAO+oB,GAEP3mB,OAKVf,EAAOG,GAAGgC,OAAQ,CAEjBijB,GAAI,SAAUC,EAAOplB,EAAUsf,EAAMpf,GACpC,OAAOilB,GAAIpoB,KAAMqoB,EAAOplB,EAAUsf,EAAMpf,IAEzCmlB,IAAK,SAAUD,EAAOplB,EAAUsf,EAAMpf,GACrC,OAAOilB,GAAIpoB,KAAMqoB,EAAOplB,EAAUsf,EAAMpf,EAAI,IAE7CslB,IAAK,SAAUJ,EAAOplB,EAAUE,GAC/B,IAAIqmB,EAAW7nB,EACf,GAAK0mB,GAASA,EAAMY,gBAAkBZ,EAAMmB,UAW3C,OARAA,EAAYnB,EAAMmB,UAClBxmB,EAAQqlB,EAAMsC,gBAAiBlC,IAC9Be,EAAU/Z,UACT+Z,EAAUG,SAAW,IAAMH,EAAU/Z,UACrC+Z,EAAUG,SACXH,EAAUvmB,SACVumB,EAAU7a,SAEJ3O,KAER,GAAsB,iBAAVqoB,EAAqB,CAGhC,IAAM1mB,KAAQ0mB,EACbroB,KAAKyoB,IAAK9mB,EAAMsB,EAAUolB,EAAO1mB,IAElC,OAAO3B,KAWR,OATkB,IAAbiD,GAA0C,mBAAbA,IAGjCE,EAAKF,EACLA,OAAW6C,IAEA,IAAP3C,IACJA,EAAK6kB,IAEChoB,KAAKkE,MAAM,WACjBlB,EAAOwlB,MAAM9K,OAAQ1d,KAAMqoB,EAAOllB,EAAIF,SAMzC,IAKCurB,GAAe,wBAGfC,GAAW,oCACXC,GAAe,2CAGhB,SAASC,GAAoBtqB,EAAMwX,GAClC,OAAKxP,EAAUhI,EAAM,UACpBgI,EAA+B,KAArBwP,EAAQta,SAAkBsa,EAAUA,EAAQtJ,WAAY,OAE3DvP,EAAQqB,GAAOuW,SAAU,SAAW,IAGrCvW,EAIR,SAASuqB,GAAevqB,GAEvB,OADAA,EAAK1C,MAAyC,OAAhC0C,EAAK7B,aAAc,SAAsB,IAAM6B,EAAK1C,KAC3D0C,EAER,SAASwqB,GAAexqB,GAOvB,MAN2C,WAApCA,EAAK1C,MAAQ,IAAKrB,MAAO,EAAG,GAClC+D,EAAK1C,KAAO0C,EAAK1C,KAAKrB,MAAO,GAE7B+D,EAAK2J,gBAAiB,QAGhB3J,EAGR,SAASyqB,GAAgBltB,EAAKmtB,GAC7B,IAAI5sB,EAAG8Y,EAAGtZ,EAAgBqtB,EAAUC,EAAU3F,EAE9C,GAAuB,IAAlByF,EAAKxtB,SAAV,CAKA,GAAKmhB,EAASD,QAAS7gB,KAEtB0nB,EADW5G,EAAS/e,IAAK/B,GACP0nB,QAKjB,IAAM3nB,KAFN+gB,EAAShF,OAAQqR,EAAM,iBAETzF,EACb,IAAMnnB,EAAI,EAAG8Y,EAAIqO,EAAQ3nB,GAAO2B,OAAQnB,EAAI8Y,EAAG9Y,IAC9Ca,EAAOwlB,MAAMnN,IAAK0T,EAAMptB,EAAM2nB,EAAQ3nB,GAAQQ,IAO7CwgB,EAASF,QAAS7gB,KACtBotB,EAAWrM,EAASzB,OAAQtf,GAC5BqtB,EAAWjsB,EAAOmC,OAAQ,GAAI6pB,GAE9BrM,EAASL,IAAKyM,EAAME,KAKtB,SAASC,GAAUttB,EAAKmtB,GACvB,IAAI1iB,EAAW0iB,EAAK1iB,SAAS5E,cAGX,UAAb4E,GAAwBwZ,GAAepY,KAAM7L,EAAID,MACrDotB,EAAKxZ,QAAU3T,EAAI2T,QAGK,UAAblJ,GAAqC,aAAbA,IACnC0iB,EAAKtV,aAAe7X,EAAI6X,cAI1B,SAAS0V,GAAUC,EAAYhb,EAAMjQ,EAAUojB,GAG9CnT,EAAO7T,EAAM6T,GAEb,IAAIsT,EAAUnjB,EAAO8iB,EAASgI,EAAYptB,EAAMC,EAC/CC,EAAI,EACJ8Y,EAAImU,EAAW9rB,OACfgsB,EAAWrU,EAAI,EACf9T,EAAQiN,EAAM,GACdmb,EAAkBluB,EAAY8F,GAG/B,GAAKooB,GACDtU,EAAI,GAAsB,iBAAV9T,IAChB/F,EAAQ6kB,YAAcwI,GAAShhB,KAAMtG,GACxC,OAAOioB,EAAWlrB,MAAM,SAAUiX,GACjC,IAAIb,EAAO8U,EAAW5qB,GAAI2W,GACrBoU,IACJnb,EAAM,GAAMjN,EAAMhG,KAAMnB,KAAMmb,EAAOb,EAAKkV,SAE3CL,GAAU7U,EAAMlG,EAAMjQ,EAAUojB,MAIlC,GAAKtM,IAEJ1W,GADAmjB,EAAWN,GAAehT,EAAMgb,EAAY,GAAIliB,eAAe,EAAOkiB,EAAY7H,IACjEhV,WAEmB,IAA/BmV,EAASlb,WAAWlJ,SACxBokB,EAAWnjB,GAIPA,GAASgjB,GAAU,CAOvB,IALA8H,GADAhI,EAAUrkB,EAAOoB,IAAKuiB,GAAQe,EAAU,UAAYkH,KAC/BtrB,OAKbnB,EAAI8Y,EAAG9Y,IACdF,EAAOylB,EAEFvlB,IAAMmtB,IACVrtB,EAAOe,EAAOwC,MAAOvD,GAAM,GAAM,GAG5BotB,GAIJrsB,EAAOgB,MAAOqjB,EAASV,GAAQ1kB,EAAM,YAIvCkC,EAAShD,KAAMiuB,EAAYjtB,GAAKF,EAAME,GAGvC,GAAKktB,EAOJ,IANAntB,EAAMmlB,EAASA,EAAQ/jB,OAAS,GAAI4J,cAGpClK,EAAOoB,IAAKijB,EAASwH,IAGf1sB,EAAI,EAAGA,EAAIktB,EAAYltB,IAC5BF,EAAOolB,EAASllB,GACX4jB,GAAYtY,KAAMxL,EAAKN,MAAQ,MAClC+gB,EAASxB,OAAQjf,EAAM,eACxBe,EAAOyF,SAAUvG,EAAKD,KAEjBA,EAAKL,KAA8C,YAArCK,EAAKN,MAAQ,IAAK8F,cAG/BzE,EAAOysB,WAAaxtB,EAAKH,UAC7BkB,EAAOysB,SAAUxtB,EAAKL,IAAK,CAC1BC,MAAOI,EAAKJ,OAASI,EAAKO,aAAc,UACtCN,GAGJH,EAASE,EAAKqQ,YAAYpM,QAASwoB,GAAc,IAAMzsB,EAAMC,IAQnE,OAAOktB,EAGR,SAAS1R,GAAQrZ,EAAMpB,EAAUysB,GAKhC,IAJA,IAAIztB,EACH0lB,EAAQ1kB,EAAWD,EAAOsN,OAAQrN,EAAUoB,GAASA,EACrDlC,EAAI,EAE4B,OAAvBF,EAAO0lB,EAAOxlB,IAAeA,IAChCutB,GAA8B,IAAlBztB,EAAKV,UACtByB,EAAO2sB,UAAWhJ,GAAQ1kB,IAGtBA,EAAKW,aACJ8sB,GAAYxL,GAAYjiB,IAC5B2kB,GAAeD,GAAQ1kB,EAAM,WAE9BA,EAAKW,WAAWC,YAAaZ,IAI/B,OAAOoC,EAGRrB,EAAOmC,OAAQ,CACdyiB,cAAe,SAAU4H,GACxB,OAAOA,GAGRhqB,MAAO,SAAUnB,EAAMurB,EAAeC,GACrC,IAAI1tB,EAAG8Y,EAAG6U,EAAaC,EACtBvqB,EAAQnB,EAAK6hB,WAAW,GACxB8J,EAAS9L,GAAY7f,GAGtB,KAAMjD,EAAQ+kB,gBAAsC,IAAlB9hB,EAAK9C,UAAoC,KAAlB8C,EAAK9C,UAC3DyB,EAAO2W,SAAUtV,IAMnB,IAHA0rB,EAAepJ,GAAQnhB,GAGjBrD,EAAI,EAAG8Y,GAFb6U,EAAcnJ,GAAQtiB,IAEOf,OAAQnB,EAAI8Y,EAAG9Y,IAC3C+sB,GAAUY,EAAa3tB,GAAK4tB,EAAc5tB,IAK5C,GAAKytB,EACJ,GAAKC,EAIJ,IAHAC,EAAcA,GAAenJ,GAAQtiB,GACrC0rB,EAAeA,GAAgBpJ,GAAQnhB,GAEjCrD,EAAI,EAAG8Y,EAAI6U,EAAYxsB,OAAQnB,EAAI8Y,EAAG9Y,IAC3C2sB,GAAgBgB,EAAa3tB,GAAK4tB,EAAc5tB,SAGjD2sB,GAAgBzqB,EAAMmB,GAWxB,OANAuqB,EAAepJ,GAAQnhB,EAAO,WACZlC,OAAS,GAC1BsjB,GAAemJ,GAAeC,GAAUrJ,GAAQtiB,EAAM,WAIhDmB,GAGRmqB,UAAW,SAAU7rB,GAKpB,IAJA,IAAIye,EAAMle,EAAM1C,EACfsd,EAAUjc,EAAOwlB,MAAMvJ,QACvB9c,EAAI,OAE6B2D,KAAxBzB,EAAOP,EAAO3B,IAAqBA,IAC5C,GAAK6f,EAAY3d,GAAS,CACzB,GAAOke,EAAOle,EAAMqe,EAAS3c,SAAc,CAC1C,GAAKwc,EAAK+G,OACT,IAAM3nB,KAAQ4gB,EAAK+G,OACbrK,EAAStd,GACbqB,EAAOwlB,MAAM9K,OAAQrZ,EAAM1C,GAI3BqB,EAAOunB,YAAalmB,EAAM1C,EAAM4gB,EAAKuH,QAOxCzlB,EAAMqe,EAAS3c,cAAYD,EAEvBzB,EAAMse,EAAS5c,WAInB1B,EAAMse,EAAS5c,cAAYD,OAOhC9C,EAAOG,GAAGgC,OAAQ,CACjB8qB,OAAQ,SAAUhtB,GACjB,OAAOya,GAAQ1d,KAAMiD,GAAU,IAGhCya,OAAQ,SAAUza,GACjB,OAAOya,GAAQ1d,KAAMiD,IAGtBV,KAAM,SAAU4E,GACf,OAAO+Z,EAAQlhB,MAAM,SAAUmH,GAC9B,YAAiBrB,IAAVqB,EACNnE,EAAOT,KAAMvC,MACbA,KAAK0V,QAAQxR,MAAM,WACK,IAAlBlE,KAAKuB,UAAoC,KAAlBvB,KAAKuB,UAAqC,IAAlBvB,KAAKuB,WACxDvB,KAAKsS,YAAcnL,QAGpB,KAAMA,EAAO7C,UAAUhB,SAG3B4sB,OAAQ,WACP,OAAOf,GAAUnvB,KAAMsE,WAAW,SAAUD,GACpB,IAAlBrE,KAAKuB,UAAoC,KAAlBvB,KAAKuB,UAAqC,IAAlBvB,KAAKuB,UAC3CotB,GAAoB3uB,KAAMqE,GAChC1B,YAAa0B,OAKvB8rB,QAAS,WACR,OAAOhB,GAAUnvB,KAAMsE,WAAW,SAAUD,GAC3C,GAAuB,IAAlBrE,KAAKuB,UAAoC,KAAlBvB,KAAKuB,UAAqC,IAAlBvB,KAAKuB,SAAiB,CACzE,IAAIkE,EAASkpB,GAAoB3uB,KAAMqE,GACvCoB,EAAO2qB,aAAc/rB,EAAMoB,EAAO8M,iBAKrC8d,OAAQ,WACP,OAAOlB,GAAUnvB,KAAMsE,WAAW,SAAUD,GACtCrE,KAAK4C,YACT5C,KAAK4C,WAAWwtB,aAAc/rB,EAAMrE,UAKvCswB,MAAO,WACN,OAAOnB,GAAUnvB,KAAMsE,WAAW,SAAUD,GACtCrE,KAAK4C,YACT5C,KAAK4C,WAAWwtB,aAAc/rB,EAAMrE,KAAKiP,iBAK5CyG,MAAO,WAIN,IAHA,IAAIrR,EACHlC,EAAI,EAE2B,OAAtBkC,EAAOrE,KAAMmC,IAAeA,IACd,IAAlBkC,EAAK9C,WAGTyB,EAAO2sB,UAAWhJ,GAAQtiB,GAAM,IAGhCA,EAAKiO,YAAc,IAIrB,OAAOtS,MAGRwF,MAAO,SAAUoqB,EAAeC,GAI/B,OAHAD,EAAiC,MAAjBA,GAAgCA,EAChDC,EAAyC,MAArBA,EAA4BD,EAAgBC,EAEzD7vB,KAAKoE,KAAK,WAChB,OAAOpB,EAAOwC,MAAOxF,KAAM4vB,EAAeC,OAI5CL,KAAM,SAAUroB,GACf,OAAO+Z,EAAQlhB,MAAM,SAAUmH,GAC9B,IAAI9C,EAAOrE,KAAM,IAAO,GACvBmC,EAAI,EACJ8Y,EAAIjb,KAAKsD,OAEV,QAAewC,IAAVqB,GAAyC,IAAlB9C,EAAK9C,SAChC,OAAO8C,EAAKwM,UAIb,GAAsB,iBAAV1J,IAAuBqnB,GAAa/gB,KAAMtG,KACpDkf,IAAWP,GAAS3Y,KAAMhG,IAAW,CAAE,GAAI,KAAQ,GAAIM,eAAkB,CAE1EN,EAAQnE,EAAO4kB,cAAezgB,GAE9B,IACC,KAAQhF,EAAI8Y,EAAG9Y,IAIS,KAHvBkC,EAAOrE,KAAMmC,IAAO,IAGVZ,WACTyB,EAAO2sB,UAAWhJ,GAAQtiB,GAAM,IAChCA,EAAKwM,UAAY1J,GAInB9C,EAAO,EAGN,MAAQoI,KAGNpI,GACJrE,KAAK0V,QAAQwa,OAAQ/oB,KAEpB,KAAMA,EAAO7C,UAAUhB,SAG3BitB,YAAa,WACZ,IAAIhJ,EAAU,GAGd,OAAO4H,GAAUnvB,KAAMsE,WAAW,SAAUD,GAC3C,IAAI0P,EAAS/T,KAAK4C,WAEbI,EAAO6D,QAAS7G,KAAMunB,GAAY,IACtCvkB,EAAO2sB,UAAWhJ,GAAQ3mB,OACrB+T,GACJA,EAAOyc,aAAcnsB,EAAMrE,SAK3BunB,MAILvkB,EAAOkB,KAAM,CACZusB,SAAU,SACVC,UAAW,UACXN,aAAc,SACdO,YAAa,QACbC,WAAY,gBACV,SAAUvrB,EAAMwrB,GAClB7tB,EAAOG,GAAIkC,GAAS,SAAUpC,GAO7B,IANA,IAAIa,EACHC,EAAM,GACN+sB,EAAS9tB,EAAQC,GACjBwB,EAAOqsB,EAAOxtB,OAAS,EACvBnB,EAAI,EAEGA,GAAKsC,EAAMtC,IAClB2B,EAAQ3B,IAAMsC,EAAOzE,KAAOA,KAAKwF,OAAO,GACxCxC,EAAQ8tB,EAAQ3uB,IAAO0uB,GAAY/sB,GAInCnD,EAAKD,MAAOqD,EAAKD,EAAMH,OAGxB,OAAO3D,KAAK6D,UAAWE,OAGzB,IAAIgtB,GAAY,IAAIhnB,OAAQ,KAAO+Z,GAAO,kBAAmB,KAEzDkN,GAAY,SAAU3sB,GAKxB,IAAI2oB,EAAO3oB,EAAK6I,cAAc4C,YAM9B,OAJMkd,GAASA,EAAKiE,SACnBjE,EAAOjtB,GAGDitB,EAAKkE,iBAAkB7sB,IAG5B8sB,GAAO,SAAU9sB,EAAMe,EAASjB,GACnC,IAAIJ,EAAKsB,EACR+rB,EAAM,GAGP,IAAM/rB,KAAQD,EACbgsB,EAAK/rB,GAAShB,EAAKigB,MAAOjf,GAC1BhB,EAAKigB,MAAOjf,GAASD,EAASC,GAM/B,IAAMA,KAHNtB,EAAMI,EAAShD,KAAMkD,GAGPe,EACbf,EAAKigB,MAAOjf,GAAS+rB,EAAK/rB,GAG3B,OAAOtB,GAIJstB,GAAY,IAAItnB,OAAQka,GAAUpW,KAAM,KAAO,KAiJnD,SAASyjB,GAAQjtB,EAAMgB,EAAMksB,GAC5B,IAAIC,EAAOC,EAAUC,EAAU3tB,EAM9BugB,EAAQjgB,EAAKigB,MAqCd,OAnCAiN,EAAWA,GAAYP,GAAW3sB,MAQpB,MAFbN,EAAMwtB,EAASI,iBAAkBtsB,IAAUksB,EAAUlsB,KAEjC6e,GAAY7f,KAC/BN,EAAMf,EAAOshB,MAAOjgB,EAAMgB,KAQrBjE,EAAQwwB,kBAAoBb,GAAUtjB,KAAM1J,IAASstB,GAAU5jB,KAAMpI,KAG1EmsB,EAAQlN,EAAMkN,MACdC,EAAWnN,EAAMmN,SACjBC,EAAWpN,EAAMoN,SAGjBpN,EAAMmN,SAAWnN,EAAMoN,SAAWpN,EAAMkN,MAAQztB,EAChDA,EAAMwtB,EAASC,MAGflN,EAAMkN,MAAQA,EACdlN,EAAMmN,SAAWA,EACjBnN,EAAMoN,SAAWA,SAIJ5rB,IAAR/B,EAINA,EAAM,GACNA,EAIF,SAAS8tB,GAAcC,EAAaC,GAGnC,MAAO,CACNpuB,IAAK,WACJ,IAAKmuB,IASL,OAAS9xB,KAAK2D,IAAMouB,GAASrxB,MAAOV,KAAMsE,kBALlCtE,KAAK2D,OA3MhB,WAIC,SAASquB,IAGR,GAAMpM,EAAN,CAIAqM,EAAU3N,MAAM4N,QAAU,+EAE1BtM,EAAItB,MAAM4N,QACT,4HAGDviB,GAAgBhN,YAAasvB,GAAYtvB,YAAaijB,GAEtD,IAAIuM,EAAWpyB,EAAOmxB,iBAAkBtL,GACxCwM,EAAoC,OAAjBD,EAASpiB,IAG5BsiB,EAAsE,KAA9CC,EAAoBH,EAASI,YAIrD3M,EAAItB,MAAMkO,MAAQ,MAClBC,EAA6D,KAAzCH,EAAoBH,EAASK,OAIjDE,EAAgE,KAAzCJ,EAAoBH,EAASX,OAMpD5L,EAAItB,MAAMqO,SAAW,WACrBC,EAAiE,KAA9CN,EAAoB1M,EAAIiN,YAAc,GAEzDljB,GAAgB9M,YAAaovB,GAI7BrM,EAAM,MAGP,SAAS0M,EAAoBQ,GAC5B,OAAO9sB,KAAK+sB,MAAOC,WAAYF,IAGhC,IAAIV,EAAkBM,EAAsBE,EAAkBH,EAC7DQ,EAAyBZ,EACzBJ,EAAYryB,EAAS0C,cAAe,OACpCsjB,EAAMhmB,EAAS0C,cAAe,OAGzBsjB,EAAItB,QAMVsB,EAAItB,MAAM4O,eAAiB,cAC3BtN,EAAIM,WAAW,GAAO5B,MAAM4O,eAAiB,GAC7C9xB,EAAQ+xB,gBAA+C,gBAA7BvN,EAAItB,MAAM4O,eAEpClwB,EAAOmC,OAAQ/D,EAAS,CACvBgyB,kBAAmB,WAElB,OADApB,IACOU,GAERd,eAAgB,WAEf,OADAI,IACOS,GAERY,cAAe,WAEd,OADArB,IACOI,GAERkB,mBAAoB,WAEnB,OADAtB,IACOK,GAERkB,cAAe,WAEd,OADAvB,IACOY,GAYRY,qBAAsB,WACrB,IAAIC,EAAOjN,EAAIkN,EAASC,EAmCxB,OAlCgC,MAA3BV,IACJQ,EAAQ7zB,EAAS0C,cAAe,SAChCkkB,EAAK5mB,EAAS0C,cAAe,MAC7BoxB,EAAU9zB,EAAS0C,cAAe,OAElCmxB,EAAMnP,MAAM4N,QAAU,2DACtB1L,EAAGlC,MAAM4N,QAAU,mBAKnB1L,EAAGlC,MAAMsP,OAAS,MAClBF,EAAQpP,MAAMsP,OAAS,MAQvBF,EAAQpP,MAAMC,QAAU,QAExB5U,GACEhN,YAAa8wB,GACb9wB,YAAa6jB,GACb7jB,YAAa+wB,GAEfC,EAAU5zB,EAAOmxB,iBAAkB1K,GACnCyM,EAA4BY,SAAUF,EAAQC,OAAQ,IACrDC,SAAUF,EAAQG,eAAgB,IAClCD,SAAUF,EAAQI,kBAAmB,MAAWvN,EAAGwN,aAEpDrkB,GAAgB9M,YAAa4wB,IAEvBR,MAvIV,GAsNA,IAAIgB,GAAc,CAAE,SAAU,MAAO,MACpCC,GAAat0B,EAAS0C,cAAe,OAAQgiB,MAC7C6P,GAAc,GAkBf,SAASC,GAAe/uB,GACvB,IAAIgvB,EAAQrxB,EAAOsxB,SAAUjvB,IAAU8uB,GAAa9uB,GAEpD,OAAKgvB,IAGAhvB,KAAQ6uB,GACL7uB,EAED8uB,GAAa9uB,GAxBrB,SAAyBA,GAMxB,IAHA,IAAIkvB,EAAUlvB,EAAM,GAAIwc,cAAgBxc,EAAK/E,MAAO,GACnD6B,EAAI8xB,GAAY3wB,OAETnB,KAEP,IADAkD,EAAO4uB,GAAa9xB,GAAMoyB,KACbL,GACZ,OAAO7uB,EAeoBmvB,CAAgBnvB,IAAUA,GAIxD,IAKCovB,GAAe,4BACfC,GAAc,MACdC,GAAU,CAAEhC,SAAU,WAAYiC,WAAY,SAAUrQ,QAAS,SACjEsQ,GAAqB,CACpBC,cAAe,IACfC,WAAY,OAGd,SAASC,GAAmBpwB,EAAOuC,EAAO8tB,GAIzC,IAAIjuB,EAAUgd,GAAQ7W,KAAMhG,GAC5B,OAAOH,EAGNhB,KAAKkvB,IAAK,EAAGluB,EAAS,IAAQiuB,GAAY,KAAUjuB,EAAS,IAAO,MACpEG,EAGF,SAASguB,GAAoB9wB,EAAM+wB,EAAWC,EAAKC,EAAaC,EAAQC,GACvE,IAAIrzB,EAAkB,UAAdizB,EAAwB,EAAI,EACnCK,EAAQ,EACRC,EAAQ,EAGT,GAAKL,KAAUC,EAAc,SAAW,WACvC,OAAO,EAGR,KAAQnzB,EAAI,EAAGA,GAAK,EAGN,WAARkzB,IACJK,GAAS1yB,EAAOwhB,IAAKngB,EAAMgxB,EAAMpR,GAAW9hB,IAAK,EAAMozB,IAIlDD,GAmBQ,YAARD,IACJK,GAAS1yB,EAAOwhB,IAAKngB,EAAM,UAAY4f,GAAW9hB,IAAK,EAAMozB,IAIjD,WAARF,IACJK,GAAS1yB,EAAOwhB,IAAKngB,EAAM,SAAW4f,GAAW9hB,GAAM,SAAS,EAAMozB,MAtBvEG,GAAS1yB,EAAOwhB,IAAKngB,EAAM,UAAY4f,GAAW9hB,IAAK,EAAMozB,GAGhD,YAARF,EACJK,GAAS1yB,EAAOwhB,IAAKngB,EAAM,SAAW4f,GAAW9hB,GAAM,SAAS,EAAMozB,GAItEE,GAASzyB,EAAOwhB,IAAKngB,EAAM,SAAW4f,GAAW9hB,GAAM,SAAS,EAAMozB,IAoCzE,OAhBMD,GAAeE,GAAe,IAInCE,GAAS1vB,KAAKkvB,IAAK,EAAGlvB,KAAK2vB,KAC1BtxB,EAAM,SAAW+wB,EAAW,GAAIvT,cAAgBuT,EAAU90B,MAAO,IACjEk1B,EACAE,EACAD,EACA,MAIM,GAGDC,EAGR,SAASE,GAAkBvxB,EAAM+wB,EAAWK,GAG3C,IAAIF,EAASvE,GAAW3sB,GAKvBixB,IADmBl0B,EAAQgyB,qBAAuBqC,IAEE,eAAnDzyB,EAAOwhB,IAAKngB,EAAM,aAAa,EAAOkxB,GACvCM,EAAmBP,EAEnBlzB,EAAMkvB,GAAQjtB,EAAM+wB,EAAWG,GAC/BO,EAAa,SAAWV,EAAW,GAAIvT,cAAgBuT,EAAU90B,MAAO,GAIzE,GAAKywB,GAAUtjB,KAAMrL,GAAQ,CAC5B,IAAMqzB,EACL,OAAOrzB,EAERA,EAAM,OAyCP,QAlCQhB,EAAQgyB,qBAAuBkC,IAMrCl0B,EAAQoyB,wBAA0BnnB,EAAUhI,EAAM,OAI3C,SAARjC,IAIC4wB,WAAY5wB,IAA0D,WAAjDY,EAAOwhB,IAAKngB,EAAM,WAAW,EAAOkxB,KAG1DlxB,EAAK0xB,iBAAiBzyB,SAEtBgyB,EAAiE,eAAnDtyB,EAAOwhB,IAAKngB,EAAM,aAAa,EAAOkxB,IAKpDM,EAAmBC,KAAczxB,KAEhCjC,EAAMiC,EAAMyxB,MAKd1zB,EAAM4wB,WAAY5wB,IAAS,GAI1B+yB,GACC9wB,EACA+wB,EACAK,IAAWH,EAAc,SAAW,WACpCO,EACAN,EAGAnzB,GAEE,KA+SL,SAAS4zB,GAAO3xB,EAAMe,EAASod,EAAMxd,EAAKixB,GACzC,OAAO,IAAID,GAAMzyB,UAAUH,KAAMiB,EAAMe,EAASod,EAAMxd,EAAKixB,GA7S5DjzB,EAAOmC,OAAQ,CAId+wB,SAAU,CACTC,QAAS,CACRxyB,IAAK,SAAUU,EAAMktB,GACpB,GAAKA,EAAW,CAGf,IAAIxtB,EAAMutB,GAAQjtB,EAAM,WACxB,MAAe,KAARN,EAAa,IAAMA,MAO9BmhB,UAAW,CACVkR,yBAA2B,EAC3BC,aAAe,EACfC,aAAe,EACfC,UAAY,EACZC,YAAc,EACdzB,YAAc,EACd0B,UAAY,EACZC,YAAc,EACdC,eAAiB,EACjBC,iBAAmB,EACnBC,SAAW,EACXC,YAAc,EACdC,cAAgB,EAChBC,YAAc,EACdb,SAAW,EACXc,OAAS,EACTC,SAAW,EACXC,QAAU,EACVC,QAAU,EACVC,MAAQ,GAKT/C,SAAU,GAGVhQ,MAAO,SAAUjgB,EAAMgB,EAAM8B,EAAOsuB,GAGnC,GAAMpxB,GAA0B,IAAlBA,EAAK9C,UAAoC,IAAlB8C,EAAK9C,UAAmB8C,EAAKigB,MAAlE,CAKA,IAAIvgB,EAAKpC,EAAM4hB,EACd+T,EAAWxV,EAAWzc,GACtBkyB,EAAe7C,GAAYjnB,KAAMpI,GACjCif,EAAQjgB,EAAKigB,MAad,GARMiT,IACLlyB,EAAO+uB,GAAekD,IAIvB/T,EAAQvgB,EAAOkzB,SAAU7wB,IAAUrC,EAAOkzB,SAAUoB,QAGrCxxB,IAAVqB,EA0CJ,OAAKoc,GAAS,QAASA,QACwBzd,KAA5C/B,EAAMwf,EAAM5f,IAAKU,GAAM,EAAOoxB,IAEzB1xB,EAIDugB,EAAOjf,GA7CA,YAHd1D,SAAcwF,KAGcpD,EAAMigB,GAAQ7W,KAAMhG,KAAapD,EAAK,KACjEoD,EAAQsd,GAAWpgB,EAAMgB,EAAMtB,GAG/BpC,EAAO,UAIM,MAATwF,GAAiBA,GAAUA,IAOlB,WAATxF,GAAsB41B,IAC1BpwB,GAASpD,GAAOA,EAAK,KAASf,EAAOkiB,UAAWoS,GAAa,GAAK,OAI7Dl2B,EAAQ+xB,iBAA6B,KAAVhsB,GAAiD,IAAjC9B,EAAKzE,QAAS,gBAC9D0jB,EAAOjf,GAAS,WAIXke,GAAY,QAASA,QACsBzd,KAA9CqB,EAAQoc,EAAMjB,IAAKje,EAAM8C,EAAOsuB,MAE7B8B,EACJjT,EAAMkT,YAAanyB,EAAM8B,GAEzBmd,EAAOjf,GAAS8B,MAkBpBqd,IAAK,SAAUngB,EAAMgB,EAAMowB,EAAOF,GACjC,IAAInzB,EAAKwB,EAAK2f,EACb+T,EAAWxV,EAAWzc,GA6BvB,OA5BgBqvB,GAAYjnB,KAAMpI,KAMjCA,EAAO+uB,GAAekD,KAIvB/T,EAAQvgB,EAAOkzB,SAAU7wB,IAAUrC,EAAOkzB,SAAUoB,KAGtC,QAAS/T,IACtBnhB,EAAMmhB,EAAM5f,IAAKU,GAAM,EAAMoxB,SAIjB3vB,IAAR1D,IACJA,EAAMkvB,GAAQjtB,EAAMgB,EAAMkwB,IAId,WAARnzB,GAAoBiD,KAAQwvB,KAChCzyB,EAAMyyB,GAAoBxvB,IAIZ,KAAVowB,GAAgBA,GACpB7xB,EAAMovB,WAAY5wB,IACD,IAAVqzB,GAAkBgC,SAAU7zB,GAAQA,GAAO,EAAIxB,GAGhDA,KAITY,EAAOkB,KAAM,CAAE,SAAU,UAAW,SAAUsD,EAAI4tB,GACjDpyB,EAAOkzB,SAAUd,GAAc,CAC9BzxB,IAAK,SAAUU,EAAMktB,EAAUkE,GAC9B,GAAKlE,EAIJ,OAAOkD,GAAahnB,KAAMzK,EAAOwhB,IAAKngB,EAAM,aAQxCA,EAAK0xB,iBAAiBzyB,QAAWe,EAAKqzB,wBAAwBlG,MAIjEoE,GAAkBvxB,EAAM+wB,EAAWK,GAHnCtE,GAAM9sB,EAAMswB,IAAS,WACpB,OAAOiB,GAAkBvxB,EAAM+wB,EAAWK,OAM9CnT,IAAK,SAAUje,EAAM8C,EAAOsuB,GAC3B,IAAIzuB,EACHuuB,EAASvE,GAAW3sB,GAIpBszB,GAAsBv2B,EAAQmyB,iBACT,aAApBgC,EAAO5C,SAIR2C,GADkBqC,GAAsBlC,IAEY,eAAnDzyB,EAAOwhB,IAAKngB,EAAM,aAAa,EAAOkxB,GACvCN,EAAWQ,EACVN,GACC9wB,EACA+wB,EACAK,EACAH,EACAC,GAED,EAqBF,OAjBKD,GAAeqC,IACnB1C,GAAYjvB,KAAK2vB,KAChBtxB,EAAM,SAAW+wB,EAAW,GAAIvT,cAAgBuT,EAAU90B,MAAO,IACjE0yB,WAAYuC,EAAQH,IACpBD,GAAoB9wB,EAAM+wB,EAAW,UAAU,EAAOG,GACtD,KAKGN,IAAcjuB,EAAUgd,GAAQ7W,KAAMhG,KACb,QAA3BH,EAAS,IAAO,QAElB3C,EAAKigB,MAAO8Q,GAAcjuB,EAC1BA,EAAQnE,EAAOwhB,IAAKngB,EAAM+wB,IAGpBJ,GAAmB3wB,EAAM8C,EAAO8tB,QAK1CjyB,EAAOkzB,SAAS3D,WAAaV,GAAczwB,EAAQkyB,oBAClD,SAAUjvB,EAAMktB,GACf,GAAKA,EACJ,OAASyB,WAAY1B,GAAQjtB,EAAM,gBAClCA,EAAKqzB,wBAAwBE,KAC5BzG,GAAM9sB,EAAM,CAAEkuB,WAAY,IAAK,WAC9B,OAAOluB,EAAKqzB,wBAAwBE,SAEnC,QAMP50B,EAAOkB,KAAM,CACZ2zB,OAAQ,GACRC,QAAS,GACTC,OAAQ,UACN,SAAUC,EAAQC,GACpBj1B,EAAOkzB,SAAU8B,EAASC,GAAW,CACpCC,OAAQ,SAAU/wB,GAOjB,IANA,IAAIhF,EAAI,EACPg2B,EAAW,GAGXC,EAAyB,iBAAVjxB,EAAqBA,EAAMI,MAAO,KAAQ,CAAEJ,GAEpDhF,EAAI,EAAGA,IACdg2B,EAAUH,EAAS/T,GAAW9hB,GAAM81B,GACnCG,EAAOj2B,IAAOi2B,EAAOj2B,EAAI,IAAOi2B,EAAO,GAGzC,OAAOD,IAIO,WAAXH,IACJh1B,EAAOkzB,SAAU8B,EAASC,GAAS3V,IAAM0S,OAI3ChyB,EAAOG,GAAGgC,OAAQ,CACjBqf,IAAK,SAAUnf,EAAM8B,GACpB,OAAO+Z,EAAQlhB,MAAM,SAAUqE,EAAMgB,EAAM8B,GAC1C,IAAIouB,EAAQzwB,EACXV,EAAM,GACNjC,EAAI,EAEL,GAAKyD,MAAMC,QAASR,GAAS,CAI5B,IAHAkwB,EAASvE,GAAW3sB,GACpBS,EAAMO,EAAK/B,OAEHnB,EAAI2C,EAAK3C,IAChBiC,EAAKiB,EAAMlD,IAAQa,EAAOwhB,IAAKngB,EAAMgB,EAAMlD,IAAK,EAAOozB,GAGxD,OAAOnxB,EAGR,YAAiB0B,IAAVqB,EACNnE,EAAOshB,MAAOjgB,EAAMgB,EAAM8B,GAC1BnE,EAAOwhB,IAAKngB,EAAMgB,KACjBA,EAAM8B,EAAO7C,UAAUhB,OAAS,MAQrCN,EAAOgzB,MAAQA,GAEfA,GAAMzyB,UAAY,CACjBE,YAAauyB,GACb5yB,KAAM,SAAUiB,EAAMe,EAASod,EAAMxd,EAAKixB,EAAQhR,GACjDjlB,KAAKqE,KAAOA,EACZrE,KAAKwiB,KAAOA,EACZxiB,KAAKi2B,OAASA,GAAUjzB,EAAOizB,OAAOvP,SACtC1mB,KAAKoF,QAAUA,EACfpF,KAAK8T,MAAQ9T,KAAKmsB,IAAMnsB,KAAK8O,MAC7B9O,KAAKgF,IAAMA,EACXhF,KAAKilB,KAAOA,IAAUjiB,EAAOkiB,UAAW1C,GAAS,GAAK,OAEvD1T,IAAK,WACJ,IAAIyU,EAAQyS,GAAMqC,UAAWr4B,KAAKwiB,MAElC,OAAOe,GAASA,EAAM5f,IACrB4f,EAAM5f,IAAK3D,MACXg2B,GAAMqC,UAAU3R,SAAS/iB,IAAK3D,OAEhCs4B,IAAK,SAAUC,GACd,IAAIC,EACHjV,EAAQyS,GAAMqC,UAAWr4B,KAAKwiB,MAoB/B,OAlBKxiB,KAAKoF,QAAQqzB,SACjBz4B,KAAK04B,IAAMF,EAAQx1B,EAAOizB,OAAQj2B,KAAKi2B,QACtCsC,EAASv4B,KAAKoF,QAAQqzB,SAAWF,EAAS,EAAG,EAAGv4B,KAAKoF,QAAQqzB,UAG9Dz4B,KAAK04B,IAAMF,EAAQD,EAEpBv4B,KAAKmsB,KAAQnsB,KAAKgF,IAAMhF,KAAK8T,OAAU0kB,EAAQx4B,KAAK8T,MAE/C9T,KAAKoF,QAAQuzB,MACjB34B,KAAKoF,QAAQuzB,KAAKx3B,KAAMnB,KAAKqE,KAAMrE,KAAKmsB,IAAKnsB,MAGzCujB,GAASA,EAAMjB,IACnBiB,EAAMjB,IAAKtiB,MAEXg2B,GAAMqC,UAAU3R,SAASpE,IAAKtiB,MAExBA,OAITg2B,GAAMzyB,UAAUH,KAAKG,UAAYyyB,GAAMzyB,UAEvCyyB,GAAMqC,UAAY,CACjB3R,SAAU,CACT/iB,IAAK,SAAUghB,GACd,IAAIxR,EAIJ,OAA6B,IAAxBwR,EAAMtgB,KAAK9C,UACa,MAA5BojB,EAAMtgB,KAAMsgB,EAAMnC,OAAoD,MAAlCmC,EAAMtgB,KAAKigB,MAAOK,EAAMnC,MACrDmC,EAAMtgB,KAAMsgB,EAAMnC,OAO1BrP,EAASnQ,EAAOwhB,IAAKG,EAAMtgB,KAAMsgB,EAAMnC,KAAM,MAGhB,SAAXrP,EAAwBA,EAAJ,GAEvCmP,IAAK,SAAUqC,GAKT3hB,EAAO41B,GAAGD,KAAMhU,EAAMnC,MAC1Bxf,EAAO41B,GAAGD,KAAMhU,EAAMnC,MAAQmC,GACK,IAAxBA,EAAMtgB,KAAK9C,WACtByB,EAAOkzB,SAAUvR,EAAMnC,OAC6B,MAAnDmC,EAAMtgB,KAAKigB,MAAO8P,GAAezP,EAAMnC,OAGxCmC,EAAMtgB,KAAMsgB,EAAMnC,MAASmC,EAAMwH,IAFjCnpB,EAAOshB,MAAOK,EAAMtgB,KAAMsgB,EAAMnC,KAAMmC,EAAMwH,IAAMxH,EAAMM,SAU5D+Q,GAAMqC,UAAUQ,UAAY7C,GAAMqC,UAAUS,WAAa,CACxDxW,IAAK,SAAUqC,GACTA,EAAMtgB,KAAK9C,UAAYojB,EAAMtgB,KAAKzB,aACtC+hB,EAAMtgB,KAAMsgB,EAAMnC,MAASmC,EAAMwH,OAKpCnpB,EAAOizB,OAAS,CACf8C,OAAQ,SAAUC,GACjB,OAAOA,GAERC,MAAO,SAAUD,GAChB,MAAO,GAAMhzB,KAAKkzB,IAAKF,EAAIhzB,KAAKmzB,IAAO,GAExCzS,SAAU,SAGX1jB,EAAO41B,GAAK5C,GAAMzyB,UAAUH,KAG5BJ,EAAO41B,GAAGD,KAAO,GAKjB,IACCS,GAAOC,GACPC,GAAW,yBACXC,GAAO,cAER,SAASC,KACHH,MACqB,IAApBz5B,EAAS65B,QAAoB15B,EAAO25B,sBACxC35B,EAAO25B,sBAAuBF,IAE9Bz5B,EAAO6f,WAAY4Z,GAAUx2B,EAAO41B,GAAGe,UAGxC32B,EAAO41B,GAAGgB,QAKZ,SAASC,KAIR,OAHA95B,EAAO6f,YAAY,WAClBwZ,QAAQtzB,KAEAszB,GAAQ1wB,KAAKyjB,MAIvB,SAAS2N,GAAOn4B,EAAMo4B,GACrB,IAAI/L,EACH7rB,EAAI,EACJuM,EAAQ,CAAEklB,OAAQjyB,GAKnB,IADAo4B,EAAeA,EAAe,EAAI,EAC1B53B,EAAI,EAAGA,GAAK,EAAI43B,EAEvBrrB,EAAO,UADPsf,EAAQ/J,GAAW9hB,KACSuM,EAAO,UAAYsf,GAAUrsB,EAO1D,OAJKo4B,IACJrrB,EAAMynB,QAAUznB,EAAM8iB,MAAQ7vB,GAGxB+M,EAGR,SAASsrB,GAAa7yB,EAAOqb,EAAMyX,GAKlC,IAJA,IAAItV,EACHyK,GAAe8K,GAAUC,SAAU3X,IAAU,IAAK/hB,OAAQy5B,GAAUC,SAAU,MAC9Ehf,EAAQ,EACR7X,EAAS8rB,EAAW9rB,OACb6X,EAAQ7X,EAAQ6X,IACvB,GAAOwJ,EAAQyK,EAAYjU,GAAQha,KAAM84B,EAAWzX,EAAMrb,GAGzD,OAAOwd,EAsNV,SAASuV,GAAW71B,EAAM+1B,EAAYh1B,GACrC,IAAI+N,EACHknB,EACAlf,EAAQ,EACR7X,EAAS42B,GAAUI,WAAWh3B,OAC9B6a,EAAWnb,EAAO8a,WAAWI,QAAQ,kBAG7B0b,EAAKv1B,QAEbu1B,EAAO,WACN,GAAKS,EACJ,OAAO,EAYR,IAVA,IAAIE,EAAcnB,IAASS,KAC1B7Z,EAAYha,KAAKkvB,IAAK,EAAG+E,EAAUO,UAAYP,EAAUxB,SAAW8B,GAKpEhC,EAAU,GADHvY,EAAYia,EAAUxB,UAAY,GAEzCtd,EAAQ,EACR7X,EAAS22B,EAAUQ,OAAOn3B,OAEnB6X,EAAQ7X,EAAQ6X,IACvB8e,EAAUQ,OAAQtf,GAAQmd,IAAKC,GAMhC,OAHApa,EAASkB,WAAYhb,EAAM,CAAE41B,EAAW1B,EAASvY,IAG5CuY,EAAU,GAAKj1B,EACZ0c,GAIF1c,GACL6a,EAASkB,WAAYhb,EAAM,CAAE41B,EAAW,EAAG,IAI5C9b,EAASmB,YAAajb,EAAM,CAAE41B,KACvB,IAERA,EAAY9b,EAAS1B,QAAS,CAC7BpY,KAAMA,EACNynB,MAAO9oB,EAAOmC,OAAQ,GAAIi1B,GAC1BM,KAAM13B,EAAOmC,QAAQ,EAAM,CAC1Bw1B,cAAe,GACf1E,OAAQjzB,EAAOizB,OAAOvP,UACpBthB,GACHw1B,mBAAoBR,EACpBS,gBAAiBz1B,EACjBo1B,UAAWpB,IAASS,KACpBpB,SAAUrzB,EAAQqzB,SAClBgC,OAAQ,GACRT,YAAa,SAAUxX,EAAMxd,GAC5B,IAAI2f,EAAQ3hB,EAAOgzB,MAAO3xB,EAAM41B,EAAUS,KAAMlY,EAAMxd,EACrDi1B,EAAUS,KAAKC,cAAenY,IAAUyX,EAAUS,KAAKzE,QAExD,OADAgE,EAAUQ,OAAO95B,KAAMgkB,GAChBA,GAERlB,KAAM,SAAUqX,GACf,IAAI3f,EAAQ,EAIX7X,EAASw3B,EAAUb,EAAUQ,OAAOn3B,OAAS,EAC9C,GAAK+2B,EACJ,OAAOr6B,KAGR,IADAq6B,GAAU,EACFlf,EAAQ7X,EAAQ6X,IACvB8e,EAAUQ,OAAQtf,GAAQmd,IAAK,GAUhC,OANKwC,GACJ3c,EAASkB,WAAYhb,EAAM,CAAE41B,EAAW,EAAG,IAC3C9b,EAASmB,YAAajb,EAAM,CAAE41B,EAAWa,KAEzC3c,EAASuB,WAAYrb,EAAM,CAAE41B,EAAWa,IAElC96B,QAGT8rB,EAAQmO,EAAUnO,MAInB,KA/HD,SAAqBA,EAAO6O,GAC3B,IAAIxf,EAAO9V,EAAM4wB,EAAQ9uB,EAAOoc,EAGhC,IAAMpI,KAAS2Q,EAed,GAbAmK,EAAS0E,EADTt1B,EAAOyc,EAAW3G,IAElBhU,EAAQ2kB,EAAO3Q,GACVvV,MAAMC,QAASsB,KACnB8uB,EAAS9uB,EAAO,GAChBA,EAAQ2kB,EAAO3Q,GAAUhU,EAAO,IAG5BgU,IAAU9V,IACdymB,EAAOzmB,GAAS8B,SACT2kB,EAAO3Q,KAGfoI,EAAQvgB,EAAOkzB,SAAU7wB,KACX,WAAYke,EAMzB,IAAMpI,KALNhU,EAAQoc,EAAM2U,OAAQ/wB,UACf2kB,EAAOzmB,GAIC8B,EACNgU,KAAS2Q,IAChBA,EAAO3Q,GAAUhU,EAAOgU,GACxBwf,EAAexf,GAAU8a,QAI3B0E,EAAet1B,GAAS4wB,EA6F1B8E,CAAYjP,EAAOmO,EAAUS,KAAKC,eAE1Bxf,EAAQ7X,EAAQ6X,IAEvB,GADAhI,EAAS+mB,GAAUI,WAAYnf,GAAQha,KAAM84B,EAAW51B,EAAMynB,EAAOmO,EAAUS,MAM9E,OAJKr5B,EAAY8R,EAAOsQ,QACvBzgB,EAAOwgB,YAAayW,EAAU51B,KAAM41B,EAAUS,KAAKrd,OAAQoG,KAC1DtQ,EAAOsQ,KAAKuX,KAAM7nB,IAEbA,EAyBT,OArBAnQ,EAAOoB,IAAK0nB,EAAOkO,GAAaC,GAE3B54B,EAAY44B,EAAUS,KAAK5mB,QAC/BmmB,EAAUS,KAAK5mB,MAAM3S,KAAMkD,EAAM41B,GAIlCA,EACEvb,SAAUub,EAAUS,KAAKhc,UACzB7V,KAAMoxB,EAAUS,KAAK7xB,KAAMoxB,EAAUS,KAAKO,UAC1Cve,KAAMud,EAAUS,KAAKhe,MACrBwB,OAAQ+b,EAAUS,KAAKxc,QAEzBlb,EAAO41B,GAAGsC,MACTl4B,EAAOmC,OAAQy0B,EAAM,CACpBv1B,KAAMA,EACN82B,KAAMlB,EACN5c,MAAO4c,EAAUS,KAAKrd,SAIjB4c,EAGRj3B,EAAOk3B,UAAYl3B,EAAOmC,OAAQ+0B,GAAW,CAE5CC,SAAU,CACT,IAAK,CAAE,SAAU3X,EAAMrb,GACtB,IAAIwd,EAAQ3kB,KAAKg6B,YAAaxX,EAAMrb,GAEpC,OADAsd,GAAWE,EAAMtgB,KAAMme,EAAMwB,GAAQ7W,KAAMhG,GAASwd,GAC7CA,KAITyW,QAAS,SAAUtP,EAAO3nB,GACpB9C,EAAYyqB,IAChB3nB,EAAW2nB,EACXA,EAAQ,CAAE,MAEVA,EAAQA,EAAMhf,MAAOiP,GAOtB,IAJA,IAAIyG,EACHrH,EAAQ,EACR7X,EAASwoB,EAAMxoB,OAER6X,EAAQ7X,EAAQ6X,IACvBqH,EAAOsJ,EAAO3Q,GACd+e,GAAUC,SAAU3X,GAAS0X,GAAUC,SAAU3X,IAAU,GAC3D0X,GAAUC,SAAU3X,GAAO5Q,QAASzN,IAItCm2B,WAAY,CA3Wb,SAA2Bj2B,EAAMynB,EAAO4O,GACvC,IAAIlY,EAAMrb,EAAOwe,EAAQpC,EAAO8X,EAASC,EAAWC,EAAgBhX,EACnEiX,EAAQ,UAAW1P,GAAS,WAAYA,EACxCqP,EAAOn7B,KACPsuB,EAAO,GACPhK,EAAQjgB,EAAKigB,MACbmV,EAASp1B,EAAK9C,UAAY8iB,GAAoBhgB,GAC9Co3B,EAAW/Y,EAAS/e,IAAKU,EAAM,UA6BhC,IAAMme,KA1BAkY,EAAKrd,QAEa,OADvBkG,EAAQvgB,EAAOwgB,YAAanf,EAAM,OACvBq3B,WACVnY,EAAMmY,SAAW,EACjBL,EAAU9X,EAAM7N,MAAM6H,KACtBgG,EAAM7N,MAAM6H,KAAO,WACZgG,EAAMmY,UACXL,MAIH9X,EAAMmY,WAENP,EAAKjd,QAAQ,WAGZid,EAAKjd,QAAQ,WACZqF,EAAMmY,WACA14B,EAAOqa,MAAOhZ,EAAM,MAAOf,QAChCigB,EAAM7N,MAAM6H,cAOFuO,EAEb,GADA3kB,EAAQ2kB,EAAOtJ,GACV8W,GAAS7rB,KAAMtG,GAAU,CAG7B,UAFO2kB,EAAOtJ,GACdmD,EAASA,GAAoB,WAAVxe,EACdA,KAAYsyB,EAAS,OAAS,QAAW,CAI7C,GAAe,SAAVtyB,IAAoBs0B,QAAiC31B,IAArB21B,EAAUjZ,GAK9C,SAJAiX,GAAS,EAOXnL,EAAM9L,GAASiZ,GAAYA,EAAUjZ,IAAUxf,EAAOshB,MAAOjgB,EAAMme,GAMrE,IADA8Y,GAAat4B,EAAOyD,cAAeqlB,MAChB9oB,EAAOyD,cAAe6nB,GA8DzC,IAAM9L,KAzDDgZ,GAA2B,IAAlBn3B,EAAK9C,WAMlBm5B,EAAKiB,SAAW,CAAErX,EAAMqX,SAAUrX,EAAMsX,UAAWtX,EAAMuX,WAIlC,OADvBN,EAAiBE,GAAYA,EAASlX,WAErCgX,EAAiB7Y,EAAS/e,IAAKU,EAAM,YAGrB,UADjBkgB,EAAUvhB,EAAOwhB,IAAKngB,EAAM,cAEtBk3B,EACJhX,EAAUgX,GAIVhW,GAAU,CAAElhB,IAAQ,GACpBk3B,EAAiBl3B,EAAKigB,MAAMC,SAAWgX,EACvChX,EAAUvhB,EAAOwhB,IAAKngB,EAAM,WAC5BkhB,GAAU,CAAElhB,OAKG,WAAZkgB,GAAoC,iBAAZA,GAAgD,MAAlBgX,IACrB,SAAhCv4B,EAAOwhB,IAAKngB,EAAM,WAGhBi3B,IACLH,EAAKtyB,MAAM,WACVyb,EAAMC,QAAUgX,KAEM,MAAlBA,IACJhX,EAAUD,EAAMC,QAChBgX,EAA6B,SAAZhX,EAAqB,GAAKA,IAG7CD,EAAMC,QAAU,iBAKdmW,EAAKiB,WACTrX,EAAMqX,SAAW,SACjBR,EAAKjd,QAAQ,WACZoG,EAAMqX,SAAWjB,EAAKiB,SAAU,GAChCrX,EAAMsX,UAAYlB,EAAKiB,SAAU,GACjCrX,EAAMuX,UAAYnB,EAAKiB,SAAU,OAKnCL,GAAY,EACEhN,EAGPgN,IACAG,EACC,WAAYA,IAChBhC,EAASgC,EAAShC,QAGnBgC,EAAW/Y,EAASxB,OAAQ7c,EAAM,SAAU,CAAEkgB,QAASgX,IAInD5V,IACJ8V,EAAShC,QAAUA,GAIfA,GACJlU,GAAU,CAAElhB,IAAQ,GAKrB82B,EAAKtyB,MAAM,WASV,IAAM2Z,KAJAiX,GACLlU,GAAU,CAAElhB,IAEbqe,EAAShF,OAAQrZ,EAAM,UACTiqB,EACbtrB,EAAOshB,MAAOjgB,EAAMme,EAAM8L,EAAM9L,QAMnC8Y,EAAYtB,GAAaP,EAASgC,EAAUjZ,GAAS,EAAGA,EAAM2Y,GACtD3Y,KAAQiZ,IACfA,EAAUjZ,GAAS8Y,EAAUxnB,MACxB2lB,IACJ6B,EAAUt2B,IAAMs2B,EAAUxnB,MAC1BwnB,EAAUxnB,MAAQ,MAuMrBgoB,UAAW,SAAU33B,EAAUgsB,GACzBA,EACJ+J,GAAUI,WAAW1oB,QAASzN,GAE9B+1B,GAAUI,WAAW35B,KAAMwD,MAK9BnB,EAAO+4B,MAAQ,SAAUA,EAAO9F,EAAQ9yB,GACvC,IAAI64B,EAAMD,GAA0B,iBAAVA,EAAqB/4B,EAAOmC,OAAQ,GAAI42B,GAAU,CAC3Ed,SAAU93B,IAAOA,GAAM8yB,GACtB50B,EAAY06B,IAAWA,EACxBtD,SAAUsD,EACV9F,OAAQ9yB,GAAM8yB,GAAUA,IAAW50B,EAAY40B,IAAYA,GAoC5D,OAhCKjzB,EAAO41B,GAAGnQ,IACduT,EAAIvD,SAAW,EAGc,iBAAjBuD,EAAIvD,WACVuD,EAAIvD,YAAYz1B,EAAO41B,GAAGqD,OAC9BD,EAAIvD,SAAWz1B,EAAO41B,GAAGqD,OAAQD,EAAIvD,UAGrCuD,EAAIvD,SAAWz1B,EAAO41B,GAAGqD,OAAOvV,UAMjB,MAAbsV,EAAI3e,QAA+B,IAAd2e,EAAI3e,QAC7B2e,EAAI3e,MAAQ,MAIb2e,EAAI5K,IAAM4K,EAAIf,SAEde,EAAIf,SAAW,WACT55B,EAAY26B,EAAI5K,MACpB4K,EAAI5K,IAAIjwB,KAAMnB,MAGVg8B,EAAI3e,OACRra,EAAOqgB,QAASrjB,KAAMg8B,EAAI3e,QAIrB2e,GAGRh5B,EAAOG,GAAGgC,OAAQ,CACjB+2B,OAAQ,SAAUH,EAAOI,EAAIlG,EAAQ9xB,GAGpC,OAAOnE,KAAKsQ,OAAQ+T,IAAqBG,IAAK,UAAW,GAAIgB,OAG3DxgB,MAAMo3B,QAAS,CAAEjG,QAASgG,GAAMJ,EAAO9F,EAAQ9xB,IAElDi4B,QAAS,SAAU5Z,EAAMuZ,EAAO9F,EAAQ9xB,GACvC,IAAIuR,EAAQ1S,EAAOyD,cAAe+b,GACjC6Z,EAASr5B,EAAO+4B,MAAOA,EAAO9F,EAAQ9xB,GACtCm4B,EAAc,WAGb,IAAInB,EAAOjB,GAAWl6B,KAAMgD,EAAOmC,OAAQ,GAAIqd,GAAQ6Z,IAGlD3mB,GAASgN,EAAS/e,IAAK3D,KAAM,YACjCm7B,EAAK1X,MAAM,IAMd,OAFA6Y,EAAYC,OAASD,EAEd5mB,IAA0B,IAAjB2mB,EAAOhf,MACtBrd,KAAKkE,KAAMo4B,GACXt8B,KAAKqd,MAAOgf,EAAOhf,MAAOif,IAE5B7Y,KAAM,SAAU9hB,EAAMgiB,EAAYmX,GACjC,IAAI0B,EAAY,SAAUjZ,GACzB,IAAIE,EAAOF,EAAME,YACVF,EAAME,KACbA,EAAMqX,IAYP,MATqB,iBAATn5B,IACXm5B,EAAUnX,EACVA,EAAahiB,EACbA,OAAOmE,GAEH6d,GACJ3jB,KAAKqd,MAAO1b,GAAQ,KAAM,IAGpB3B,KAAKkE,MAAM,WACjB,IAAImf,GAAU,EACblI,EAAgB,MAARxZ,GAAgBA,EAAO,aAC/B86B,EAASz5B,EAAOy5B,OAChBla,EAAOG,EAAS/e,IAAK3D,MAEtB,GAAKmb,EACCoH,EAAMpH,IAAWoH,EAAMpH,GAAQsI,MACnC+Y,EAAWja,EAAMpH,SAGlB,IAAMA,KAASoH,EACTA,EAAMpH,IAAWoH,EAAMpH,GAAQsI,MAAQ8V,GAAK9rB,KAAM0N,IACtDqhB,EAAWja,EAAMpH,IAKpB,IAAMA,EAAQshB,EAAOn5B,OAAQ6X,KACvBshB,EAAQthB,GAAQ9W,OAASrE,MACnB,MAAR2B,GAAgB86B,EAAQthB,GAAQkC,QAAU1b,IAE5C86B,EAAQthB,GAAQggB,KAAK1X,KAAMqX,GAC3BzX,GAAU,EACVoZ,EAAOv3B,OAAQiW,EAAO,KAOnBkI,GAAYyX,GAChB93B,EAAOqgB,QAASrjB,KAAM2B,OAIzB46B,OAAQ,SAAU56B,GAIjB,OAHc,IAATA,IACJA,EAAOA,GAAQ,MAET3B,KAAKkE,MAAM,WACjB,IAAIiX,EACHoH,EAAOG,EAAS/e,IAAK3D,MACrBqd,EAAQkF,EAAM5gB,EAAO,SACrB4hB,EAAQhB,EAAM5gB,EAAO,cACrB86B,EAASz5B,EAAOy5B,OAChBn5B,EAAS+Z,EAAQA,EAAM/Z,OAAS,EAajC,IAVAif,EAAKga,QAAS,EAGdv5B,EAAOqa,MAAOrd,KAAM2B,EAAM,IAErB4hB,GAASA,EAAME,MACnBF,EAAME,KAAKtiB,KAAMnB,MAAM,GAIlBmb,EAAQshB,EAAOn5B,OAAQ6X,KACvBshB,EAAQthB,GAAQ9W,OAASrE,MAAQy8B,EAAQthB,GAAQkC,QAAU1b,IAC/D86B,EAAQthB,GAAQggB,KAAK1X,MAAM,GAC3BgZ,EAAOv3B,OAAQiW,EAAO,IAKxB,IAAMA,EAAQ,EAAGA,EAAQ7X,EAAQ6X,IAC3BkC,EAAOlC,IAAWkC,EAAOlC,GAAQohB,QACrClf,EAAOlC,GAAQohB,OAAOp7B,KAAMnB,aAKvBuiB,EAAKga,aAKfv5B,EAAOkB,KAAM,CAAE,SAAU,OAAQ,SAAU,SAAUsD,EAAInC,GACxD,IAAIq3B,EAAQ15B,EAAOG,GAAIkC,GACvBrC,EAAOG,GAAIkC,GAAS,SAAU02B,EAAO9F,EAAQ9xB,GAC5C,OAAgB,MAAT43B,GAAkC,kBAAVA,EAC9BW,EAAMh8B,MAAOV,KAAMsE,WACnBtE,KAAKo8B,QAAStC,GAAOz0B,GAAM,GAAQ02B,EAAO9F,EAAQ9xB,OAKrDnB,EAAOkB,KAAM,CACZy4B,UAAW7C,GAAO,QAClB8C,QAAS9C,GAAO,QAChB+C,YAAa/C,GAAO,UACpBgD,OAAQ,CAAE3G,QAAS,QACnB4G,QAAS,CAAE5G,QAAS,QACpB6G,WAAY,CAAE7G,QAAS,YACrB,SAAU9wB,EAAMymB,GAClB9oB,EAAOG,GAAIkC,GAAS,SAAU02B,EAAO9F,EAAQ9xB,GAC5C,OAAOnE,KAAKo8B,QAAStQ,EAAOiQ,EAAO9F,EAAQ9xB,OAI7CnB,EAAOy5B,OAAS,GAChBz5B,EAAO41B,GAAGgB,KAAO,WAChB,IAAIsB,EACH/4B,EAAI,EACJs6B,EAASz5B,EAAOy5B,OAIjB,IAFArD,GAAQ1wB,KAAKyjB,MAELhqB,EAAIs6B,EAAOn5B,OAAQnB,KAC1B+4B,EAAQuB,EAAQt6B,OAGCs6B,EAAQt6B,KAAQ+4B,GAChCuB,EAAOv3B,OAAQ/C,IAAK,GAIhBs6B,EAAOn5B,QACZN,EAAO41B,GAAGnV,OAEX2V,QAAQtzB,GAGT9C,EAAO41B,GAAGsC,MAAQ,SAAUA,GAC3Bl4B,EAAOy5B,OAAO97B,KAAMu6B,GACpBl4B,EAAO41B,GAAG9kB,SAGX9Q,EAAO41B,GAAGe,SAAW,GACrB32B,EAAO41B,GAAG9kB,MAAQ,WACZulB,KAILA,IAAa,EACbG,OAGDx2B,EAAO41B,GAAGnV,KAAO,WAChB4V,GAAa,MAGdr2B,EAAO41B,GAAGqD,OAAS,CAClBgB,KAAM,IACNC,KAAM,IAGNxW,SAAU,KAMX1jB,EAAOG,GAAGg6B,MAAQ,SAAUC,EAAMz7B,GAIjC,OAHAy7B,EAAOp6B,EAAO41B,IAAK51B,EAAO41B,GAAGqD,OAAQmB,IAAiBA,EACtDz7B,EAAOA,GAAQ,KAER3B,KAAKqd,MAAO1b,GAAM,SAAU4K,EAAMgX,GACxC,IAAI8Z,EAAUt9B,EAAO6f,WAAYrT,EAAM6wB,GACvC7Z,EAAME,KAAO,WACZ1jB,EAAOu9B,aAAcD,QAMxB,WACC,IAAIzsB,EAAQhR,EAAS0C,cAAe,SAEnC05B,EADSp8B,EAAS0C,cAAe,UACpBK,YAAa/C,EAAS0C,cAAe,WAEnDsO,EAAMjP,KAAO,WAIbP,EAAQm8B,QAA0B,KAAhB3sB,EAAMzJ,MAIxB/F,EAAQo8B,YAAcxB,EAAIxmB,UAI1B5E,EAAQhR,EAAS0C,cAAe,UAC1B6E,MAAQ,IACdyJ,EAAMjP,KAAO,QACbP,EAAQq8B,WAA6B,MAAhB7sB,EAAMzJ,MApB5B,GAwBA,IAAIu2B,GACH9uB,GAAa5L,EAAO6O,KAAKjD,WAE1B5L,EAAOG,GAAGgC,OAAQ,CACjB4M,KAAM,SAAU1M,EAAM8B,GACrB,OAAO+Z,EAAQlhB,KAAMgD,EAAO+O,KAAM1M,EAAM8B,EAAO7C,UAAUhB,OAAS,IAGnEq6B,WAAY,SAAUt4B,GACrB,OAAOrF,KAAKkE,MAAM,WACjBlB,EAAO26B,WAAY39B,KAAMqF,SAK5BrC,EAAOmC,OAAQ,CACd4M,KAAM,SAAU1N,EAAMgB,EAAM8B,GAC3B,IAAIpD,EAAKwf,EACRqa,EAAQv5B,EAAK9C,SAGd,GAAe,IAAVq8B,GAAyB,IAAVA,GAAyB,IAAVA,EAKnC,YAAkC,IAAtBv5B,EAAK7B,aACTQ,EAAOwf,KAAMne,EAAMgB,EAAM8B,IAKlB,IAAVy2B,GAAgB56B,EAAO2W,SAAUtV,KACrCkf,EAAQvgB,EAAO66B,UAAWx4B,EAAKoC,iBAC5BzE,EAAO6O,KAAK/E,MAAMjC,KAAK4C,KAAMpI,GAASq4B,QAAW53B,SAGtCA,IAAVqB,EACW,OAAVA,OACJnE,EAAO26B,WAAYt5B,EAAMgB,GAIrBke,GAAS,QAASA,QACuBzd,KAA3C/B,EAAMwf,EAAMjB,IAAKje,EAAM8C,EAAO9B,IACzBtB,GAGRM,EAAK5B,aAAc4C,EAAM8B,EAAQ,IAC1BA,GAGHoc,GAAS,QAASA,GAA+C,QAApCxf,EAAMwf,EAAM5f,IAAKU,EAAMgB,IACjDtB,EAMM,OAHdA,EAAMf,EAAOwN,KAAKuB,KAAM1N,EAAMgB,SAGTS,EAAY/B,IAGlC85B,UAAW,CACVl8B,KAAM,CACL2gB,IAAK,SAAUje,EAAM8C,GACpB,IAAM/F,EAAQq8B,YAAwB,UAAVt2B,GAC3BkF,EAAUhI,EAAM,SAAY,CAC5B,IAAIjC,EAAMiC,EAAK8C,MAKf,OAJA9C,EAAK5B,aAAc,OAAQ0E,GACtB/E,IACJiC,EAAK8C,MAAQ/E,GAEP+E,MAMXw2B,WAAY,SAAUt5B,EAAM8C,GAC3B,IAAI9B,EACHlD,EAAI,EAIJ27B,EAAY32B,GAASA,EAAM2F,MAAOiP,GAEnC,GAAK+hB,GAA+B,IAAlBz5B,EAAK9C,SACtB,KAAU8D,EAAOy4B,EAAW37B,MAC3BkC,EAAK2J,gBAAiB3I,MAO1Bq4B,GAAW,CACVpb,IAAK,SAAUje,EAAM8C,EAAO9B,GAQ3B,OAPe,IAAV8B,EAGJnE,EAAO26B,WAAYt5B,EAAMgB,GAEzBhB,EAAK5B,aAAc4C,EAAMA,GAEnBA,IAITrC,EAAOkB,KAAMlB,EAAO6O,KAAK/E,MAAMjC,KAAKkZ,OAAOjX,MAAO,SAAU,SAAUtF,EAAInC,GACzE,IAAI04B,EAASnvB,GAAYvJ,IAAUrC,EAAOwN,KAAKuB,KAE/CnD,GAAYvJ,GAAS,SAAUhB,EAAMgB,EAAMwC,GAC1C,IAAI9D,EAAK+lB,EACRkU,EAAgB34B,EAAKoC,cAYtB,OAVMI,IAGLiiB,EAASlb,GAAYovB,GACrBpvB,GAAYovB,GAAkBj6B,EAC9BA,EAAqC,MAA/Bg6B,EAAQ15B,EAAMgB,EAAMwC,GACzBm2B,EACA,KACDpvB,GAAYovB,GAAkBlU,GAExB/lB,MAOT,IAAIk6B,GAAa,sCAChBC,GAAa,gBAyIb,SAASC,GAAkBh3B,GAE1B,OADaA,EAAM2F,MAAOiP,IAAmB,IAC/BlO,KAAM,KAItB,SAASuwB,GAAU/5B,GAClB,OAAOA,EAAK7B,cAAgB6B,EAAK7B,aAAc,UAAa,GAG7D,SAAS67B,GAAgBl3B,GACxB,OAAKvB,MAAMC,QAASsB,GACZA,EAEc,iBAAVA,GACJA,EAAM2F,MAAOiP,IAEd,GAxJR/Y,EAAOG,GAAGgC,OAAQ,CACjBqd,KAAM,SAAUnd,EAAM8B,GACrB,OAAO+Z,EAAQlhB,KAAMgD,EAAOwf,KAAMnd,EAAM8B,EAAO7C,UAAUhB,OAAS,IAGnEg7B,WAAY,SAAUj5B,GACrB,OAAOrF,KAAKkE,MAAM,kBACVlE,KAAMgD,EAAOu7B,QAASl5B,IAAUA,SAK1CrC,EAAOmC,OAAQ,CACdqd,KAAM,SAAUne,EAAMgB,EAAM8B,GAC3B,IAAIpD,EAAKwf,EACRqa,EAAQv5B,EAAK9C,SAGd,GAAe,IAAVq8B,GAAyB,IAAVA,GAAyB,IAAVA,EAWnC,OAPe,IAAVA,GAAgB56B,EAAO2W,SAAUtV,KAGrCgB,EAAOrC,EAAOu7B,QAASl5B,IAAUA,EACjCke,EAAQvgB,EAAOq1B,UAAWhzB,SAGZS,IAAVqB,EACCoc,GAAS,QAASA,QACuBzd,KAA3C/B,EAAMwf,EAAMjB,IAAKje,EAAM8C,EAAO9B,IACzBtB,EAGCM,EAAMgB,GAAS8B,EAGpBoc,GAAS,QAASA,GAA+C,QAApCxf,EAAMwf,EAAM5f,IAAKU,EAAMgB,IACjDtB,EAGDM,EAAMgB,IAGdgzB,UAAW,CACVhjB,SAAU,CACT1R,IAAK,SAAUU,GAOd,IAAIm6B,EAAWx7B,EAAOwN,KAAKuB,KAAM1N,EAAM,YAEvC,OAAKm6B,EACG3K,SAAU2K,EAAU,IAI3BP,GAAWxwB,KAAMpJ,EAAKgI,WACtB6xB,GAAWzwB,KAAMpJ,EAAKgI,WACtBhI,EAAK+Q,KAEE,GAGA,KAKXmpB,QAAS,CACRE,IAAO,UACPC,MAAS,eAYLt9B,EAAQo8B,cACbx6B,EAAOq1B,UAAU7iB,SAAW,CAC3B7R,IAAK,SAAUU,GAId,IAAI0P,EAAS1P,EAAKzB,WAIlB,OAHKmR,GAAUA,EAAOnR,YACrBmR,EAAOnR,WAAW6S,cAEZ,MAER6M,IAAK,SAAUje,GAId,IAAI0P,EAAS1P,EAAKzB,WACbmR,IACJA,EAAO0B,cAEF1B,EAAOnR,YACXmR,EAAOnR,WAAW6S,kBAOvBzS,EAAOkB,KAAM,CACZ,WACA,WACA,YACA,cACA,cACA,UACA,UACA,SACA,cACA,oBACE,WACFlB,EAAOu7B,QAASv+B,KAAKyH,eAAkBzH,QA4BxCgD,EAAOG,GAAGgC,OAAQ,CACjBw5B,SAAU,SAAUx3B,GACnB,IAAIy3B,EAASv6B,EAAMyK,EAAK+vB,EAAUC,EAAO/5B,EAAGg6B,EAC3C58B,EAAI,EAEL,GAAKd,EAAY8F,GAChB,OAAOnH,KAAKkE,MAAM,SAAUa,GAC3B/B,EAAQhD,MAAO2+B,SAAUx3B,EAAMhG,KAAMnB,KAAM+E,EAAGq5B,GAAUp+B,WAM1D,IAFA4+B,EAAUP,GAAgBl3B,IAEb7D,OACZ,KAAUe,EAAOrE,KAAMmC,MAItB,GAHA08B,EAAWT,GAAU/5B,GACrByK,EAAwB,IAAlBzK,EAAK9C,UAAoB,IAAM48B,GAAkBU,GAAa,IAEzD,CAEV,IADA95B,EAAI,EACM+5B,EAAQF,EAAS75B,MACrB+J,EAAIlO,QAAS,IAAMk+B,EAAQ,KAAQ,IACvChwB,GAAOgwB,EAAQ,KAMZD,KADLE,EAAaZ,GAAkBrvB,KAE9BzK,EAAK5B,aAAc,QAASs8B,GAMhC,OAAO/+B,MAGRg/B,YAAa,SAAU73B,GACtB,IAAIy3B,EAASv6B,EAAMyK,EAAK+vB,EAAUC,EAAO/5B,EAAGg6B,EAC3C58B,EAAI,EAEL,GAAKd,EAAY8F,GAChB,OAAOnH,KAAKkE,MAAM,SAAUa,GAC3B/B,EAAQhD,MAAOg/B,YAAa73B,EAAMhG,KAAMnB,KAAM+E,EAAGq5B,GAAUp+B,WAI7D,IAAMsE,UAAUhB,OACf,OAAOtD,KAAK+R,KAAM,QAAS,IAK5B,IAFA6sB,EAAUP,GAAgBl3B,IAEb7D,OACZ,KAAUe,EAAOrE,KAAMmC,MAMtB,GALA08B,EAAWT,GAAU/5B,GAGrByK,EAAwB,IAAlBzK,EAAK9C,UAAoB,IAAM48B,GAAkBU,GAAa,IAEzD,CAEV,IADA95B,EAAI,EACM+5B,EAAQF,EAAS75B,MAG1B,KAAQ+J,EAAIlO,QAAS,IAAMk+B,EAAQ,MAAS,GAC3ChwB,EAAMA,EAAI5I,QAAS,IAAM44B,EAAQ,IAAK,KAMnCD,KADLE,EAAaZ,GAAkBrvB,KAE9BzK,EAAK5B,aAAc,QAASs8B,GAMhC,OAAO/+B,MAGRi/B,YAAa,SAAU93B,EAAO+3B,GAC7B,IAAIv9B,SAAcwF,EACjBg4B,EAAwB,WAATx9B,GAAqBiE,MAAMC,QAASsB,GAEpD,MAAyB,kBAAb+3B,GAA0BC,EAC9BD,EAAWl/B,KAAK2+B,SAAUx3B,GAAUnH,KAAKg/B,YAAa73B,GAGzD9F,EAAY8F,GACTnH,KAAKkE,MAAM,SAAU/B,GAC3Ba,EAAQhD,MAAOi/B,YACd93B,EAAMhG,KAAMnB,KAAMmC,EAAGi8B,GAAUp+B,MAAQk/B,GACvCA,MAKIl/B,KAAKkE,MAAM,WACjB,IAAIgM,EAAW/N,EAAGmY,EAAM8kB,EAExB,GAAKD,EAOJ,IAJAh9B,EAAI,EACJmY,EAAOtX,EAAQhD,MACfo/B,EAAaf,GAAgBl3B,GAEnB+I,EAAYkvB,EAAYj9B,MAG5BmY,EAAK+kB,SAAUnvB,GACnBoK,EAAK0kB,YAAa9uB,GAElBoK,EAAKqkB,SAAUzuB,aAKIpK,IAAVqB,GAAgC,YAATxF,KAClCuO,EAAYkuB,GAAUp+B,QAIrB0iB,EAASJ,IAAKtiB,KAAM,gBAAiBkQ,GAOjClQ,KAAKyC,cACTzC,KAAKyC,aAAc,QAClByN,IAAuB,IAAV/I,EACZ,GACAub,EAAS/e,IAAK3D,KAAM,kBAAqB,SAO/Cq/B,SAAU,SAAUp8B,GACnB,IAAIiN,EAAW7L,EACdlC,EAAI,EAGL,IADA+N,EAAY,IAAMjN,EAAW,IACnBoB,EAAOrE,KAAMmC,MACtB,GAAuB,IAAlBkC,EAAK9C,WACP,IAAM48B,GAAkBC,GAAU/5B,IAAW,KAAMzD,QAASsP,IAAe,EAC7E,OAAO,EAIT,OAAO,KAOT,IAAIovB,GAAU,MAEdt8B,EAAOG,GAAGgC,OAAQ,CACjB/C,IAAK,SAAU+E,GACd,IAAIoc,EAAOxf,EAAKwrB,EACflrB,EAAOrE,KAAM,GAEd,OAAMsE,UAAUhB,QA0BhBisB,EAAkBluB,EAAY8F,GAEvBnH,KAAKkE,MAAM,SAAU/B,GAC3B,IAAIC,EAEmB,IAAlBpC,KAAKuB,WAWE,OANXa,EADImtB,EACEpoB,EAAMhG,KAAMnB,KAAMmC,EAAGa,EAAQhD,MAAOoC,OAEpC+E,GAKN/E,EAAM,GAEoB,iBAARA,EAClBA,GAAO,GAEIwD,MAAMC,QAASzD,KAC1BA,EAAMY,EAAOoB,IAAKhC,GAAK,SAAU+E,GAChC,OAAgB,MAATA,EAAgB,GAAKA,EAAQ,QAItCoc,EAAQvgB,EAAOu8B,SAAUv/B,KAAK2B,OAAUqB,EAAOu8B,SAAUv/B,KAAKqM,SAAS5E,iBAGrD,QAAS8b,QAA+Czd,IAApCyd,EAAMjB,IAAKtiB,KAAMoC,EAAK,WAC3DpC,KAAKmH,MAAQ/E,QAzDTiC,GACJkf,EAAQvgB,EAAOu8B,SAAUl7B,EAAK1C,OAC7BqB,EAAOu8B,SAAUl7B,EAAKgI,SAAS5E,iBAG/B,QAAS8b,QACgCzd,KAAvC/B,EAAMwf,EAAM5f,IAAKU,EAAM,UAElBN,EAMY,iBAHpBA,EAAMM,EAAK8C,OAIHpD,EAAImC,QAASo5B,GAAS,IAIhB,MAAPv7B,EAAc,GAAKA,OAG3B,KAyCHf,EAAOmC,OAAQ,CACdo6B,SAAU,CACTnZ,OAAQ,CACPziB,IAAK,SAAUU,GAEd,IAAIjC,EAAMY,EAAOwN,KAAKuB,KAAM1N,EAAM,SAClC,OAAc,MAAPjC,EACNA,EAMA+7B,GAAkBn7B,EAAOT,KAAM8B,MAGlC2D,OAAQ,CACPrE,IAAK,SAAUU,GACd,IAAI8C,EAAOif,EAAQjkB,EAClBiD,EAAUf,EAAKe,QACf+V,EAAQ9W,EAAKoR,cACb6S,EAAoB,eAAdjkB,EAAK1C,KACX8jB,EAAS6C,EAAM,KAAO,GACtB4M,EAAM5M,EAAMnN,EAAQ,EAAI/V,EAAQ9B,OAUjC,IAPCnB,EADIgZ,EAAQ,EACR+Z,EAGA5M,EAAMnN,EAAQ,EAIXhZ,EAAI+yB,EAAK/yB,IAKhB,KAJAikB,EAAShhB,EAASjD,IAIJqT,UAAYrT,IAAMgZ,KAG7BiL,EAAOha,YACLga,EAAOxjB,WAAWwJ,WACnBC,EAAU+Z,EAAOxjB,WAAY,aAAiB,CAMjD,GAHAuE,EAAQnE,EAAQojB,GAAShkB,MAGpBkmB,EACJ,OAAOnhB,EAIRse,EAAO9kB,KAAMwG,GAIf,OAAOse,GAGRnD,IAAK,SAAUje,EAAM8C,GAMpB,IALA,IAAIq4B,EAAWpZ,EACdhhB,EAAUf,EAAKe,QACfqgB,EAASziB,EAAO2D,UAAWQ,GAC3BhF,EAAIiD,EAAQ9B,OAELnB,OACPikB,EAAShhB,EAASjD,IAINqT,SACXxS,EAAO6D,QAAS7D,EAAOu8B,SAASnZ,OAAOziB,IAAKyiB,GAAUX,IAAY,KAElE+Z,GAAY,GAUd,OAHMA,IACLn7B,EAAKoR,eAAiB,GAEhBgQ,OAOXziB,EAAOkB,KAAM,CAAE,QAAS,aAAc,WACrClB,EAAOu8B,SAAUv/B,MAAS,CACzBsiB,IAAK,SAAUje,EAAM8C,GACpB,GAAKvB,MAAMC,QAASsB,GACnB,OAAS9C,EAAKkR,QAAUvS,EAAO6D,QAAS7D,EAAQqB,GAAOjC,MAAO+E,IAAW,IAItE/F,EAAQm8B,UACbv6B,EAAOu8B,SAAUv/B,MAAO2D,IAAM,SAAUU,GACvC,OAAwC,OAAjCA,EAAK7B,aAAc,SAAqB,KAAO6B,EAAK8C,WAW9D/F,EAAQq+B,QAAU,cAAe1/B,EAGjC,IAAI2/B,GAAc,kCACjBC,GAA0B,SAAUlzB,GACnCA,EAAEsc,mBAGJ/lB,EAAOmC,OAAQnC,EAAOwlB,MAAO,CAE5BU,QAAS,SAAUV,EAAOjG,EAAMle,EAAMu7B,GAErC,IAAIz9B,EAAG2M,EAAK6B,EAAKkvB,EAAYC,EAAQhW,EAAQ7K,EAAS8gB,EACrDC,EAAY,CAAE37B,GAAQzE,GACtB+B,EAAOZ,EAAOI,KAAMqnB,EAAO,QAAWA,EAAM7mB,KAAO6mB,EACnDkB,EAAa3oB,EAAOI,KAAMqnB,EAAO,aAAgBA,EAAM/Y,UAAUlI,MAAO,KAAQ,GAKjF,GAHAuH,EAAMixB,EAAcpvB,EAAMtM,EAAOA,GAAQzE,EAGlB,IAAlByE,EAAK9C,UAAoC,IAAlB8C,EAAK9C,WAK5Bm+B,GAAYjyB,KAAM9L,EAAOqB,EAAOwlB,MAAMuB,aAItCpoB,EAAKf,QAAS,MAAS,IAG3B8oB,EAAa/nB,EAAK4F,MAAO,KACzB5F,EAAO+nB,EAAWrb,QAClBqb,EAAWzkB,QAEZ66B,EAASn+B,EAAKf,QAAS,KAAQ,GAAK,KAAOe,GAG3C6mB,EAAQA,EAAOxlB,EAAO+C,SACrByiB,EACA,IAAIxlB,EAAOmmB,MAAOxnB,EAAuB,iBAAV6mB,GAAsBA,IAGhDK,UAAY+W,EAAe,EAAI,EACrCpX,EAAM/Y,UAAYia,EAAW7b,KAAM,KACnC2a,EAAMwC,WAAaxC,EAAM/Y,UACxB,IAAI1F,OAAQ,UAAY2f,EAAW7b,KAAM,iBAAoB,WAC7D,KAGD2a,EAAMrV,YAASrN,EACT0iB,EAAM/iB,SACX+iB,EAAM/iB,OAASpB,GAIhBke,EAAe,MAARA,EACN,CAAEiG,GACFxlB,EAAO2D,UAAW4b,EAAM,CAAEiG,IAG3BvJ,EAAUjc,EAAOwlB,MAAMvJ,QAAStd,IAAU,GACpCi+B,IAAgB3gB,EAAQiK,UAAmD,IAAxCjK,EAAQiK,QAAQxoB,MAAO2D,EAAMke,IAAtE,CAMA,IAAMqd,IAAiB3gB,EAAQyM,WAAajqB,EAAU4C,GAAS,CAM9D,IAJAw7B,EAAa5gB,EAAQ6J,cAAgBnnB,EAC/B+9B,GAAYjyB,KAAMoyB,EAAal+B,KACpCmN,EAAMA,EAAIlM,YAEHkM,EAAKA,EAAMA,EAAIlM,WACtBo9B,EAAUr/B,KAAMmO,GAChB6B,EAAM7B,EAIF6B,KAAUtM,EAAK6I,eAAiBtN,IACpCogC,EAAUr/B,KAAMgQ,EAAIb,aAAea,EAAIsvB,cAAgBlgC,GAMzD,IADAoC,EAAI,GACM2M,EAAMkxB,EAAW79B,QAAYqmB,EAAMqC,wBAC5CkV,EAAcjxB,EACd0Z,EAAM7mB,KAAOQ,EAAI,EAChB09B,EACA5gB,EAAQgL,UAAYtoB,GAGrBmoB,GAAWpH,EAAS/e,IAAKmL,EAAK,WAAc1O,OAAOypB,OAAQ,OAAUrB,EAAM7mB,OAC1E+gB,EAAS/e,IAAKmL,EAAK,YAEnBgb,EAAOppB,MAAOoO,EAAKyT,IAIpBuH,EAASgW,GAAUhxB,EAAKgxB,KACThW,EAAOppB,OAASshB,EAAYlT,KAC1C0Z,EAAMrV,OAAS2W,EAAOppB,MAAOoO,EAAKyT,IACZ,IAAjBiG,EAAMrV,QACVqV,EAAMS,kBA8CT,OA1CAT,EAAM7mB,KAAOA,EAGPi+B,GAAiBpX,EAAMuD,sBAEpB9M,EAAQyH,WACqC,IAApDzH,EAAQyH,SAAShmB,MAAOs/B,EAAU12B,MAAOiZ,KACzCP,EAAY3d,IAIPy7B,GAAUz+B,EAAYgD,EAAM1C,MAAaF,EAAU4C,MAGvDsM,EAAMtM,EAAMy7B,MAGXz7B,EAAMy7B,GAAW,MAIlB98B,EAAOwlB,MAAMuB,UAAYpoB,EAEpB6mB,EAAMqC,wBACVkV,EAAY/vB,iBAAkBrO,EAAMg+B,IAGrCt7B,EAAM1C,KAED6mB,EAAMqC,wBACVkV,EAAYlf,oBAAqBlf,EAAMg+B,IAGxC38B,EAAOwlB,MAAMuB,eAAYjkB,EAEpB6K,IACJtM,EAAMy7B,GAAWnvB,IAMd6X,EAAMrV,SAKd+sB,SAAU,SAAUv+B,EAAM0C,EAAMmkB,GAC/B,IAAI/b,EAAIzJ,EAAOmC,OACd,IAAInC,EAAOmmB,MACXX,EACA,CACC7mB,KAAMA,EACNyqB,aAAa,IAIfppB,EAAOwlB,MAAMU,QAASzc,EAAG,KAAMpI,MAKjCrB,EAAOG,GAAGgC,OAAQ,CAEjB+jB,QAAS,SAAUvnB,EAAM4gB,GACxB,OAAOviB,KAAKkE,MAAM,WACjBlB,EAAOwlB,MAAMU,QAASvnB,EAAM4gB,EAAMviB,UAGpCmgC,eAAgB,SAAUx+B,EAAM4gB,GAC/B,IAAIle,EAAOrE,KAAM,GACjB,GAAKqE,EACJ,OAAOrB,EAAOwlB,MAAMU,QAASvnB,EAAM4gB,EAAMle,GAAM,MAc5CjD,EAAQq+B,SACbz8B,EAAOkB,KAAM,CAAE+Q,MAAO,UAAWgZ,KAAM,aAAc,SAAUK,EAAM5D,GAGpE,IAAI/b,EAAU,SAAU6Z,GACvBxlB,EAAOwlB,MAAM0X,SAAUxV,EAAKlC,EAAM/iB,OAAQzC,EAAOwlB,MAAMkC,IAAKlC,KAG7DxlB,EAAOwlB,MAAMvJ,QAASyL,GAAQ,CAC7BP,MAAO,WAIN,IAAIjoB,EAAMlC,KAAKkN,eAAiBlN,KAAKJ,UAAYI,KAChDogC,EAAW1d,EAASxB,OAAQhf,EAAKwoB,GAE5B0V,GACLl+B,EAAI8N,iBAAkBse,EAAM3f,GAAS,GAEtC+T,EAASxB,OAAQhf,EAAKwoB,GAAO0V,GAAY,GAAM,IAEhD9V,SAAU,WACT,IAAIpoB,EAAMlC,KAAKkN,eAAiBlN,KAAKJ,UAAYI,KAChDogC,EAAW1d,EAASxB,OAAQhf,EAAKwoB,GAAQ,EAEpC0V,EAKL1d,EAASxB,OAAQhf,EAAKwoB,EAAK0V,IAJ3Bl+B,EAAI2e,oBAAqByN,EAAM3f,GAAS,GACxC+T,EAAShF,OAAQxb,EAAKwoB,SAS3B,IAAI3V,GAAWhV,EAAOgV,SAElBlT,GAAQ,CAAEuF,KAAMsB,KAAKyjB,OAErBkU,QAKJr9B,EAAOs9B,SAAW,SAAU/d,GAC3B,IAAI7O,EAAK6sB,EACT,IAAMhe,GAAwB,iBAATA,EACpB,OAAO,KAKR,IACC7O,GAAM,IAAM3T,EAAOygC,WAAcC,gBAAiBle,EAAM,YACvD,MAAQ9V,IAYV,OAVA8zB,EAAkB7sB,GAAOA,EAAIpG,qBAAsB,eAAiB,GAC9DoG,IAAO6sB,GACZv9B,EAAOoD,MAAO,iBACbm6B,EACCv9B,EAAOoB,IAAKm8B,EAAgB/zB,YAAY,SAAUgC,GACjD,OAAOA,EAAG8D,eACPzE,KAAM,MACV0U,IAGI7O,GAIR,IACCgtB,GAAW,QACXC,GAAQ,SACRC,GAAkB,wCAClBC,GAAe,qCAEhB,SAASC,GAAa9I,EAAQ12B,EAAKy/B,EAAa1lB,GAC/C,IAAIhW,EAEJ,GAAKO,MAAMC,QAASvE,GAGnB0B,EAAOkB,KAAM5C,GAAK,SAAUa,EAAG8Z,GACzB8kB,GAAeL,GAASjzB,KAAMuqB,GAGlC3c,EAAK2c,EAAQ/b,GAKb6kB,GACC9I,EAAS,KAAqB,iBAAN/b,GAAuB,MAALA,EAAY9Z,EAAI,IAAO,IACjE8Z,EACA8kB,EACA1lB,WAKG,GAAM0lB,GAAiC,WAAlBj+B,EAAQxB,GAUnC+Z,EAAK2c,EAAQ12B,QAPb,IAAM+D,KAAQ/D,EACbw/B,GAAa9I,EAAS,IAAM3yB,EAAO,IAAK/D,EAAK+D,GAAQ07B,EAAa1lB,GAYrErY,EAAOg+B,MAAQ,SAAU53B,EAAG23B,GAC3B,IAAI/I,EACHiJ,EAAI,GACJ5lB,EAAM,SAAUlN,EAAK+yB,GAGpB,IAAI/5B,EAAQ9F,EAAY6/B,GACvBA,IACAA,EAEDD,EAAGA,EAAE39B,QAAW69B,mBAAoBhzB,GAAQ,IAC3CgzB,mBAA6B,MAATh6B,EAAgB,GAAKA,IAG5C,GAAU,MAALiC,EACJ,MAAO,GAIR,GAAKxD,MAAMC,QAASuD,IAASA,EAAE5F,SAAWR,EAAO2C,cAAeyD,GAG/DpG,EAAOkB,KAAMkF,GAAG,WACfiS,EAAKrb,KAAKqF,KAAMrF,KAAKmH,eAOtB,IAAM6wB,KAAU5uB,EACf03B,GAAa9I,EAAQ5uB,EAAG4uB,GAAU+I,EAAa1lB,GAKjD,OAAO4lB,EAAEpzB,KAAM,MAGhB7K,EAAOG,GAAGgC,OAAQ,CACjBi8B,UAAW,WACV,OAAOp+B,EAAOg+B,MAAOhhC,KAAKqhC,mBAE3BA,eAAgB,WACf,OAAOrhC,KAAKoE,KAAK,WAGhB,IAAI0N,EAAW9O,EAAOwf,KAAMxiB,KAAM,YAClC,OAAO8R,EAAW9O,EAAO2D,UAAWmL,GAAa9R,QAC9CsQ,QAAQ,WACX,IAAI3O,EAAO3B,KAAK2B,KAGhB,OAAO3B,KAAKqF,OAASrC,EAAQhD,MAAO+Z,GAAI,cACvC8mB,GAAapzB,KAAMzN,KAAKqM,YAAeu0B,GAAgBnzB,KAAM9L,KAC3D3B,KAAKuV,UAAYsQ,GAAepY,KAAM9L,OACtCyC,KAAK,SAAUoD,EAAInD,GACtB,IAAIjC,EAAMY,EAAQhD,MAAOoC,MAEzB,OAAY,MAAPA,EACG,KAGHwD,MAAMC,QAASzD,GACZY,EAAOoB,IAAKhC,GAAK,SAAUA,GACjC,MAAO,CAAEiD,KAAMhB,EAAKgB,KAAM8B,MAAO/E,EAAI8D,QAASy6B,GAAO,YAIhD,CAAEt7B,KAAMhB,EAAKgB,KAAM8B,MAAO/E,EAAI8D,QAASy6B,GAAO,YAClDh9B,SAKN,IACC29B,GAAM,OACNC,GAAQ,OACRC,GAAa,gBACbC,GAAW,6BAIXC,GAAa,iBACbC,GAAY,QAWZrH,GAAa,GAObsH,GAAa,GAGbC,GAAW,KAAKphC,OAAQ,KAGxBqhC,GAAeliC,EAAS0C,cAAe,KAKxC,SAASy/B,GAA6BC,GAGrC,OAAO,SAAUC,EAAoBlkB,GAED,iBAAvBkkB,IACXlkB,EAAOkkB,EACPA,EAAqB,KAGtB,IAAIC,EACH//B,EAAI,EACJggC,EAAYF,EAAmBx6B,cAAcqF,MAAOiP,IAAmB,GAExE,GAAK1a,EAAY0c,GAGhB,KAAUmkB,EAAWC,EAAWhgC,MAGR,MAAlB+/B,EAAU,IACdA,EAAWA,EAAS5hC,MAAO,IAAO,KAChC0hC,EAAWE,GAAaF,EAAWE,IAAc,IAAKtwB,QAASmM,KAI/DikB,EAAWE,GAAaF,EAAWE,IAAc,IAAKvhC,KAAMod,IAQnE,SAASqkB,GAA+BJ,EAAW58B,EAASy1B,EAAiBwH,GAE5E,IAAIC,EAAY,GACfC,EAAqBP,IAAcJ,GAEpC,SAASY,EAASN,GACjB,IAAI1sB,EAcJ,OAbA8sB,EAAWJ,IAAa,EACxBl/B,EAAOkB,KAAM89B,EAAWE,IAAc,IAAI,SAAUplB,EAAG2lB,GACtD,IAAIC,EAAsBD,EAAoBr9B,EAASy1B,EAAiBwH,GACxE,MAAoC,iBAAxBK,GACVH,GAAqBD,EAAWI,GAKtBH,IACD/sB,EAAWktB,QADf,GAHNt9B,EAAQ+8B,UAAUvwB,QAAS8wB,GAC3BF,EAASE,IACF,MAKFltB,EAGR,OAAOgtB,EAASp9B,EAAQ+8B,UAAW,MAAUG,EAAW,MAASE,EAAS,KAM3E,SAASG,GAAYl9B,EAAQ7D,GAC5B,IAAIuM,EAAKzI,EACRk9B,EAAc5/B,EAAO6/B,aAAaD,aAAe,GAElD,IAAMz0B,KAAOvM,OACQkE,IAAflE,EAAKuM,MACPy0B,EAAaz0B,GAAQ1I,EAAWC,IAAUA,EAAO,KAAUyI,GAAQvM,EAAKuM,IAO5E,OAJKzI,GACJ1C,EAAOmC,QAAQ,EAAMM,EAAQC,GAGvBD,EA/ERq8B,GAAa1sB,KAAOL,GAASK,KAgP7BpS,EAAOmC,OAAQ,CAGd29B,OAAQ,EAGRC,aAAc,GACdC,KAAM,GAENH,aAAc,CACbI,IAAKluB,GAASK,KACdzT,KAAM,MACNuhC,QAxRgB,4DAwRQz1B,KAAMsH,GAASouB,UACvC1jC,QAAQ,EACR2jC,aAAa,EACbC,OAAO,EACPC,YAAa,mDAcbC,QAAS,CACR,IAAK1B,GACLt/B,KAAM,aACNitB,KAAM,YACN9b,IAAK,4BACL8vB,KAAM,qCAGP3oB,SAAU,CACTnH,IAAK,UACL8b,KAAM,SACNgU,KAAM,YAGPC,eAAgB,CACf/vB,IAAK,cACLnR,KAAM,eACNihC,KAAM,gBAKPE,WAAY,CAGX,SAAUh4B,OAGV,aAAa,EAGb,YAAaqX,KAAKC,MAGlB,WAAYhgB,EAAOs9B,UAOpBsC,YAAa,CACZK,KAAK,EACL//B,SAAS,IAOXygC,UAAW,SAAUl+B,EAAQm+B,GAC5B,OAAOA,EAGNjB,GAAYA,GAAYl9B,EAAQzC,EAAO6/B,cAAgBe,GAGvDjB,GAAY3/B,EAAO6/B,aAAcp9B,IAGnCo+B,cAAe9B,GAA6BzH,IAC5CwJ,cAAe/B,GAA6BH,IAG5CmC,KAAM,SAAUd,EAAK79B,GAGA,iBAAR69B,IACX79B,EAAU69B,EACVA,OAAMn9B,GAIPV,EAAUA,GAAW,GAErB,IAAI4+B,EAGHC,EAGAC,EACAC,EAGAC,EAGAC,EAGAzjB,EAGA0jB,EAGAniC,EAGAoiC,EAGAtD,EAAIj+B,EAAO2gC,UAAW,GAAIv+B,GAG1Bo/B,EAAkBvD,EAAE/9B,SAAW+9B,EAG/BwD,EAAqBxD,EAAE/9B,UACpBshC,EAAgBjjC,UAAYijC,EAAgBhhC,QAC9CR,EAAQwhC,GACRxhC,EAAOwlB,MAGRrK,EAAWnb,EAAO8a,WAClB4mB,EAAmB1hC,EAAO4Z,UAAW,eAGrC+nB,EAAa1D,EAAE0D,YAAc,GAG7BC,EAAiB,GACjBC,EAAsB,GAGtBC,EAAW,WAGXzC,EAAQ,CACPrhB,WAAY,EAGZ+jB,kBAAmB,SAAU52B,GAC5B,IAAIrB,EACJ,GAAK8T,EAAY,CAChB,IAAMujB,EAEL,IADAA,EAAkB,GACRr3B,EAAQ20B,GAASt0B,KAAM+2B,IAChCC,EAAiBr3B,EAAO,GAAIrF,cAAgB,MACzC08B,EAAiBr3B,EAAO,GAAIrF,cAAgB,MAAS,IACrDhH,OAAQqM,EAAO,IAGpBA,EAAQq3B,EAAiBh2B,EAAI1G,cAAgB,KAE9C,OAAgB,MAATqF,EAAgB,KAAOA,EAAMe,KAAM,OAI3Cm3B,sBAAuB,WACtB,OAAOpkB,EAAYsjB,EAAwB,MAI5Ce,iBAAkB,SAAU5/B,EAAM8B,GAMjC,OALkB,MAAbyZ,IACJvb,EAAOw/B,EAAqBx/B,EAAKoC,eAChCo9B,EAAqBx/B,EAAKoC,gBAAmBpC,EAC9Cu/B,EAAgBv/B,GAAS8B,GAEnBnH,MAIRklC,iBAAkB,SAAUvjC,GAI3B,OAHkB,MAAbif,IACJqgB,EAAEkE,SAAWxjC,GAEP3B,MAIR2kC,WAAY,SAAUvgC,GACrB,IAAIpC,EACJ,GAAKoC,EACJ,GAAKwc,EAGJyhB,EAAMnkB,OAAQ9Z,EAAKi+B,EAAM+C,cAIzB,IAAMpjC,KAAQoC,EACbugC,EAAY3iC,GAAS,CAAE2iC,EAAY3iC,GAAQoC,EAAKpC,IAInD,OAAOhC,MAIRqlC,MAAO,SAAUC,GAChB,IAAIC,EAAYD,GAAcR,EAK9B,OAJKd,GACJA,EAAUqB,MAAOE,GAElB18B,EAAM,EAAG08B,GACFvlC,OAoBV,GAfAme,EAAS1B,QAAS4lB,GAKlBpB,EAAEgC,MAAUA,GAAOhC,EAAEgC,KAAOluB,GAASK,MAAS,IAC5ClP,QAASy7B,GAAW5sB,GAASouB,SAAW,MAG1ClC,EAAEt/B,KAAOyD,EAAQoX,QAAUpX,EAAQzD,MAAQs/B,EAAEzkB,QAAUykB,EAAEt/B,KAGzDs/B,EAAEkB,WAAclB,EAAEiB,UAAY,KAAMz6B,cAAcqF,MAAOiP,IAAmB,CAAE,IAGxD,MAAjBklB,EAAEuE,YAAsB,CAC5BnB,EAAYzkC,EAAS0C,cAAe,KAKpC,IACC+hC,EAAUjvB,KAAO6rB,EAAEgC,IAInBoB,EAAUjvB,KAAOivB,EAAUjvB,KAC3B6rB,EAAEuE,YAAc1D,GAAaqB,SAAW,KAAOrB,GAAa2D,MAC3DpB,EAAUlB,SAAW,KAAOkB,EAAUoB,KACtC,MAAQh5B,GAITw0B,EAAEuE,aAAc,GAalB,GARKvE,EAAE1e,MAAQ0e,EAAEmC,aAAiC,iBAAXnC,EAAE1e,OACxC0e,EAAE1e,KAAOvf,EAAOg+B,MAAOC,EAAE1e,KAAM0e,EAAEF,cAIlCqB,GAA+B9H,GAAY2G,EAAG77B,EAASi9B,GAGlDzhB,EACJ,OAAOyhB,EA8ER,IAAMlgC,KAzENmiC,EAActhC,EAAOwlB,OAASyY,EAAExhC,SAGQ,GAApBuD,EAAO8/B,UAC1B9/B,EAAOwlB,MAAMU,QAAS,aAIvB+X,EAAEt/B,KAAOs/B,EAAEt/B,KAAKkgB,cAGhBof,EAAEyE,YAAchE,GAAWj0B,KAAMwzB,EAAEt/B,MAKnCsiC,EAAWhD,EAAEgC,IAAI/8B,QAASq7B,GAAO,IAG3BN,EAAEyE,WAwBIzE,EAAE1e,MAAQ0e,EAAEmC,aACoD,KAAzEnC,EAAEqC,aAAe,IAAK1iC,QAAS,uCACjCqgC,EAAE1e,KAAO0e,EAAE1e,KAAKrc,QAASo7B,GAAK,OAvB9BiD,EAAWtD,EAAEgC,IAAI3iC,MAAO2jC,EAAS3gC,QAG5B29B,EAAE1e,OAAU0e,EAAEmC,aAAiC,iBAAXnC,EAAE1e,QAC1C0hB,IAAc5D,GAAO5yB,KAAMw2B,GAAa,IAAM,KAAQhD,EAAE1e,YAGjD0e,EAAE1e,OAIO,IAAZ0e,EAAE/yB,QACN+1B,EAAWA,EAAS/9B,QAASs7B,GAAY,MACzC+C,GAAalE,GAAO5yB,KAAMw2B,GAAa,IAAM,KAAQ,KAASpiC,GAAMuF,OACnEm9B,GAIFtD,EAAEgC,IAAMgB,EAAWM,GASftD,EAAE0E,aACD3iC,EAAO+/B,aAAckB,IACzB5B,EAAM4C,iBAAkB,oBAAqBjiC,EAAO+/B,aAAckB,IAE9DjhC,EAAOggC,KAAMiB,IACjB5B,EAAM4C,iBAAkB,gBAAiBjiC,EAAOggC,KAAMiB,MAKnDhD,EAAE1e,MAAQ0e,EAAEyE,aAAgC,IAAlBzE,EAAEqC,aAAyBl+B,EAAQk+B,cACjEjB,EAAM4C,iBAAkB,eAAgBhE,EAAEqC,aAI3CjB,EAAM4C,iBACL,SACAhE,EAAEkB,UAAW,IAAOlB,EAAEsC,QAAStC,EAAEkB,UAAW,IAC3ClB,EAAEsC,QAAStC,EAAEkB,UAAW,KACA,MAArBlB,EAAEkB,UAAW,GAAc,KAAON,GAAW,WAAa,IAC7DZ,EAAEsC,QAAS,MAIFtC,EAAE2E,QACZvD,EAAM4C,iBAAkB9iC,EAAG8+B,EAAE2E,QAASzjC,IAIvC,GAAK8+B,EAAE4E,cAC+C,IAAnD5E,EAAE4E,WAAW1kC,KAAMqjC,EAAiBnC,EAAOpB,IAAiBrgB,GAG9D,OAAOyhB,EAAMgD,QAed,GAXAP,EAAW,QAGXJ,EAAiBrpB,IAAK4lB,EAAEhG,UACxBoH,EAAMx5B,KAAMo4B,EAAE6E,SACdzD,EAAM3lB,KAAMukB,EAAE76B,OAGd49B,EAAY5B,GAA+BR,GAAYX,EAAG77B,EAASi9B,GAK5D,CASN,GARAA,EAAMrhB,WAAa,EAGdsjB,GACJG,EAAmBvb,QAAS,WAAY,CAAEmZ,EAAOpB,IAI7CrgB,EACJ,OAAOyhB,EAIHpB,EAAEoC,OAASpC,EAAE5D,QAAU,IAC3B+G,EAAerkC,EAAO6f,YAAY,WACjCyiB,EAAMgD,MAAO,aACXpE,EAAE5D,UAGN,IACCzc,GAAY,EACZojB,EAAU+B,KAAMnB,EAAgB/7B,GAC/B,MAAQ4D,GAGT,GAAKmU,EACJ,MAAMnU,EAIP5D,GAAO,EAAG4D,SAhCX5D,GAAO,EAAG,gBAqCX,SAASA,EAAMu8B,EAAQY,EAAkBC,EAAWL,GACnD,IAAIM,EAAWJ,EAAS1/B,EAAO+/B,EAAUC,EACxCd,EAAaU,EAGTplB,IAILA,GAAY,EAGPwjB,GACJrkC,EAAOu9B,aAAc8G,GAKtBJ,OAAYl+B,EAGZo+B,EAAwB0B,GAAW,GAGnCvD,EAAMrhB,WAAaokB,EAAS,EAAI,EAAI,EAGpCc,EAAYd,GAAU,KAAOA,EAAS,KAAkB,MAAXA,EAGxCa,IACJE,EA7lBJ,SAA8BlF,EAAGoB,EAAO4D,GAOvC,IALA,IAAII,EAAI1kC,EAAM2kC,EAAeC,EAC5B1rB,EAAWomB,EAAEpmB,SACbsnB,EAAYlB,EAAEkB,UAGY,MAAnBA,EAAW,IAClBA,EAAU9zB,aACEvI,IAAPugC,IACJA,EAAKpF,EAAEkE,UAAY9C,EAAM0C,kBAAmB,iBAK9C,GAAKsB,EACJ,IAAM1kC,KAAQkZ,EACb,GAAKA,EAAUlZ,IAAUkZ,EAAUlZ,GAAO8L,KAAM44B,GAAO,CACtDlE,EAAUvwB,QAASjQ,GACnB,MAMH,GAAKwgC,EAAW,KAAO8D,EACtBK,EAAgBnE,EAAW,OACrB,CAGN,IAAMxgC,KAAQskC,EAAY,CACzB,IAAM9D,EAAW,IAAOlB,EAAEyC,WAAY/hC,EAAO,IAAMwgC,EAAW,IAAQ,CACrEmE,EAAgB3kC,EAChB,MAEK4kC,IACLA,EAAgB5kC,GAKlB2kC,EAAgBA,GAAiBC,EAMlC,GAAKD,EAIJ,OAHKA,IAAkBnE,EAAW,IACjCA,EAAUvwB,QAAS00B,GAEbL,EAAWK,GA0iBLE,CAAqBvF,EAAGoB,EAAO4D,KAIrCC,GACLljC,EAAO6D,QAAS,SAAUo6B,EAAEkB,YAAe,GAC3Cn/B,EAAO6D,QAAS,OAAQo6B,EAAEkB,WAAc,IACxClB,EAAEyC,WAAY,eAAkB,cAIjCyC,EA9iBH,SAAsBlF,EAAGkF,EAAU9D,EAAO6D,GACzC,IAAIO,EAAOC,EAASC,EAAMh2B,EAAKmK,EAC9B4oB,EAAa,GAGbvB,EAAYlB,EAAEkB,UAAU7hC,QAGzB,GAAK6hC,EAAW,GACf,IAAMwE,KAAQ1F,EAAEyC,WACfA,EAAYiD,EAAKl/B,eAAkBw5B,EAAEyC,WAAYiD,GAOnD,IAHAD,EAAUvE,EAAU9zB,QAGZq4B,GAcP,GAZKzF,EAAEwC,eAAgBiD,KACtBrE,EAAOpB,EAAEwC,eAAgBiD,IAAcP,IAIlCrrB,GAAQorB,GAAajF,EAAE2F,aAC5BT,EAAWlF,EAAE2F,WAAYT,EAAUlF,EAAEiB,WAGtCpnB,EAAO4rB,EACPA,EAAUvE,EAAU9zB,QAKnB,GAAiB,MAAZq4B,EAEJA,EAAU5rB,OAGJ,GAAc,MAATA,GAAgBA,IAAS4rB,EAAU,CAM9C,KAHAC,EAAOjD,EAAY5oB,EAAO,IAAM4rB,IAAahD,EAAY,KAAOgD,IAI/D,IAAMD,KAAS/C,EAId,IADA/yB,EAAM81B,EAAMl/B,MAAO,MACT,KAAQm/B,IAGjBC,EAAOjD,EAAY5oB,EAAO,IAAMnK,EAAK,KACpC+yB,EAAY,KAAO/yB,EAAK,KACb,EAGG,IAATg2B,EACJA,EAAOjD,EAAY+C,IAGgB,IAAxB/C,EAAY+C,KACvBC,EAAU/1B,EAAK,GACfwxB,EAAUvwB,QAASjB,EAAK,KAEzB,MAOJ,IAAc,IAATg2B,EAGJ,GAAKA,GAAQ1F,EAAE4F,OACdV,EAAWQ,EAAMR,QAEjB,IACCA,EAAWQ,EAAMR,GAChB,MAAQ15B,GACT,MAAO,CACNwR,MAAO,cACP7X,MAAOugC,EAAOl6B,EAAI,sBAAwBqO,EAAO,OAAS4rB,IASjE,MAAO,CAAEzoB,MAAO,UAAWsE,KAAM4jB,GAidpBW,CAAa7F,EAAGkF,EAAU9D,EAAO6D,GAGvCA,GAGCjF,EAAE0E,cACNS,EAAW/D,EAAM0C,kBAAmB,oBAEnC/hC,EAAO+/B,aAAckB,GAAamC,IAEnCA,EAAW/D,EAAM0C,kBAAmB,WAEnC/hC,EAAOggC,KAAMiB,GAAamC,IAKZ,MAAXhB,GAA6B,SAAXnE,EAAEt/B,KACxB2jC,EAAa,YAGS,MAAXF,EACXE,EAAa,eAIbA,EAAaa,EAASloB,MACtB6nB,EAAUK,EAAS5jB,KAEnB2jB,IADA9/B,EAAQ+/B,EAAS//B,UAMlBA,EAAQk/B,GACHF,GAAWE,IACfA,EAAa,QACRF,EAAS,IACbA,EAAS,KAMZ/C,EAAM+C,OAASA,EACf/C,EAAMiD,YAAeU,GAAoBV,GAAe,GAGnDY,EACJ/nB,EAASmB,YAAaklB,EAAiB,CAAEsB,EAASR,EAAYjD,IAE9DlkB,EAASuB,WAAY8kB,EAAiB,CAAEnC,EAAOiD,EAAYl/B,IAI5Di8B,EAAMsC,WAAYA,GAClBA,OAAa7+B,EAERw+B,GACJG,EAAmBvb,QAASgd,EAAY,cAAgB,YACvD,CAAE7D,EAAOpB,EAAGiF,EAAYJ,EAAU1/B,IAIpCs+B,EAAiB7mB,SAAU2mB,EAAiB,CAAEnC,EAAOiD,IAEhDhB,IACJG,EAAmBvb,QAAS,eAAgB,CAAEmZ,EAAOpB,MAG3Cj+B,EAAO8/B,QAChB9/B,EAAOwlB,MAAMU,QAAS,cAKzB,OAAOmZ,GAGR0E,QAAS,SAAU9D,EAAK1gB,EAAMpe,GAC7B,OAAOnB,EAAOW,IAAKs/B,EAAK1gB,EAAMpe,EAAU,SAGzC6iC,UAAW,SAAU/D,EAAK9+B,GACzB,OAAOnB,EAAOW,IAAKs/B,OAAKn9B,EAAW3B,EAAU,aAI/CnB,EAAOkB,KAAM,CAAE,MAAO,SAAU,SAAUsD,EAAIgV,GAC7CxZ,EAAQwZ,GAAW,SAAUymB,EAAK1gB,EAAMpe,EAAUxC,GAUjD,OAPKN,EAAYkhB,KAChB5gB,EAAOA,GAAQwC,EACfA,EAAWoe,EACXA,OAAOzc,GAID9C,EAAO+gC,KAAM/gC,EAAOmC,OAAQ,CAClC89B,IAAKA,EACLthC,KAAM6a,EACN0lB,SAAUvgC,EACV4gB,KAAMA,EACNujB,QAAS3hC,GACPnB,EAAO2C,cAAes9B,IAASA,QAIpCjgC,EAAO6gC,eAAe,SAAU5C,GAC/B,IAAI9+B,EACJ,IAAMA,KAAK8+B,EAAE2E,QACa,iBAApBzjC,EAAEsF,gBACNw5B,EAAEqC,YAAcrC,EAAE2E,QAASzjC,IAAO,OAMrCa,EAAOysB,SAAW,SAAUwT,EAAK79B,EAASlD,GACzC,OAAOc,EAAO+gC,KAAM,CACnBd,IAAKA,EAGLthC,KAAM,MACNugC,SAAU,SACVh0B,OAAO,EACPm1B,OAAO,EACP5jC,QAAQ,EAKRikC,WAAY,CACX,cAAe,cAEhBkD,WAAY,SAAUT,GACrBnjC,EAAO0D,WAAYy/B,EAAU/gC,EAASlD,OAMzCc,EAAOG,GAAGgC,OAAQ,CACjB8hC,QAAS,SAAUzX,GAClB,IAAIhI,EAyBJ,OAvBKxnB,KAAM,KACLqB,EAAYmuB,KAChBA,EAAOA,EAAKruB,KAAMnB,KAAM,KAIzBwnB,EAAOxkB,EAAQwsB,EAAMxvB,KAAM,GAAIkN,eAAgB1I,GAAI,GAAIgB,OAAO,GAEzDxF,KAAM,GAAI4C,YACd4kB,EAAK4I,aAAcpwB,KAAM,IAG1BwnB,EAAKpjB,KAAK,WAGT,IAFA,IAAIC,EAAOrE,KAEHqE,EAAK6iC,mBACZ7iC,EAAOA,EAAK6iC,kBAGb,OAAO7iC,KACJ6rB,OAAQlwB,OAGNA,MAGRmnC,UAAW,SAAU3X,GACpB,OAAKnuB,EAAYmuB,GACTxvB,KAAKkE,MAAM,SAAU/B,GAC3Ba,EAAQhD,MAAOmnC,UAAW3X,EAAKruB,KAAMnB,KAAMmC,OAItCnC,KAAKkE,MAAM,WACjB,IAAIoW,EAAOtX,EAAQhD,MAClB6a,EAAWP,EAAKO,WAEZA,EAASvX,OACbuX,EAASosB,QAASzX,GAGlBlV,EAAK4V,OAAQV,OAKhBhI,KAAM,SAAUgI,GACf,IAAI4X,EAAiB/lC,EAAYmuB,GAEjC,OAAOxvB,KAAKkE,MAAM,SAAU/B,GAC3Ba,EAAQhD,MAAOinC,QAASG,EAAiB5X,EAAKruB,KAAMnB,KAAMmC,GAAMqtB,OAIlE6X,OAAQ,SAAUpkC,GAIjB,OAHAjD,KAAK+T,OAAQ9Q,GAAWuR,IAAK,QAAStQ,MAAM,WAC3ClB,EAAQhD,MAAOuwB,YAAavwB,KAAKwM,eAE3BxM,QAKTgD,EAAO6O,KAAKhI,QAAQ4vB,OAAS,SAAUp1B,GACtC,OAAQrB,EAAO6O,KAAKhI,QAAQy9B,QAASjjC,IAEtCrB,EAAO6O,KAAKhI,QAAQy9B,QAAU,SAAUjjC,GACvC,SAAWA,EAAKwuB,aAAexuB,EAAK2vB,cAAgB3vB,EAAK0xB,iBAAiBzyB,SAM3EN,EAAO6/B,aAAa0E,IAAM,WACzB,IACC,OAAO,IAAIxnC,EAAOynC,eACjB,MAAQ/6B,MAGX,IAAIg7B,GAAmB,CAGrB,EAAG,IAIH,KAAM,KAEPC,GAAe1kC,EAAO6/B,aAAa0E,MAEpCnmC,EAAQumC,OAASD,IAAkB,oBAAqBA,GACxDtmC,EAAQ2iC,KAAO2D,KAAiBA,GAEhC1kC,EAAO8gC,eAAe,SAAU1+B,GAC/B,IAAIjB,EAAUyjC,EAGd,GAAKxmC,EAAQumC,MAAQD,KAAiBtiC,EAAQogC,YAC7C,MAAO,CACNO,KAAM,SAAUH,EAAS3K,GACxB,IAAI94B,EACHolC,EAAMniC,EAAQmiC,MAWf,GATAA,EAAIM,KACHziC,EAAQzD,KACRyD,EAAQ69B,IACR79B,EAAQi+B,MACRj+B,EAAQ0iC,SACR1iC,EAAQ+Q,UAIJ/Q,EAAQ2iC,UACZ,IAAM5lC,KAAKiD,EAAQ2iC,UAClBR,EAAKplC,GAAMiD,EAAQ2iC,UAAW5lC,GAmBhC,IAAMA,KAdDiD,EAAQ+/B,UAAYoC,EAAIrC,kBAC5BqC,EAAIrC,iBAAkB9/B,EAAQ+/B,UAQzB//B,EAAQogC,aAAgBI,EAAS,sBACtCA,EAAS,oBAAuB,kBAItBA,EACV2B,EAAItC,iBAAkB9iC,EAAGyjC,EAASzjC,IAInCgC,EAAW,SAAUxC,GACpB,OAAO,WACDwC,IACJA,EAAWyjC,EAAgBL,EAAIS,OAC9BT,EAAIU,QAAUV,EAAIW,QAAUX,EAAIY,UAC/BZ,EAAIa,mBAAqB,KAEb,UAATzmC,EACJ4lC,EAAIlC,QACgB,UAAT1jC,EAKgB,iBAAf4lC,EAAInC,OACfnK,EAAU,EAAG,SAEbA,EAGCsM,EAAInC,OACJmC,EAAIjC,YAINrK,EACCwM,GAAkBF,EAAInC,SAAYmC,EAAInC,OACtCmC,EAAIjC,WAK+B,UAAjCiC,EAAIc,cAAgB,SACM,iBAArBd,EAAIe,aACV,CAAEC,OAAQhB,EAAIpB,UACd,CAAE5jC,KAAMglC,EAAIe,cACbf,EAAIvC,4BAQTuC,EAAIS,OAAS7jC,IACbyjC,EAAgBL,EAAIU,QAAUV,EAAIY,UAAYhkC,EAAU,cAKnC2B,IAAhByhC,EAAIW,QACRX,EAAIW,QAAUN,EAEdL,EAAIa,mBAAqB,WAGA,IAAnBb,EAAIvmB,YAMRjhB,EAAO6f,YAAY,WACbzb,GACJyjC,QAQLzjC,EAAWA,EAAU,SAErB,IAGCojC,EAAIxB,KAAM3gC,EAAQsgC,YAActgC,EAAQmd,MAAQ,MAC/C,MAAQ9V,GAGT,GAAKtI,EACJ,MAAMsI,IAKT44B,MAAO,WACDlhC,GACJA,SAWLnB,EAAO6gC,eAAe,SAAU5C,GAC1BA,EAAEuE,cACNvE,EAAEpmB,SAASxY,QAAS,MAKtBW,EAAO2gC,UAAW,CACjBJ,QAAS,CACRlhC,OAAQ,6FAGTwY,SAAU,CACTxY,OAAQ,2BAETqhC,WAAY,CACX,cAAe,SAAUnhC,GAExB,OADAS,EAAO0D,WAAYnE,GACZA,MAMVS,EAAO6gC,cAAe,UAAU,SAAU5C,QACxBn7B,IAAZm7B,EAAE/yB,QACN+yB,EAAE/yB,OAAQ,GAEN+yB,EAAEuE,cACNvE,EAAEt/B,KAAO,UAKXqB,EAAO8gC,cAAe,UAAU,SAAU7C,GAIxC,IAAI5+B,EAAQ8B,EADb,GAAK88B,EAAEuE,aAAevE,EAAEuH,YAEvB,MAAO,CACNzC,KAAM,SAAUjpB,EAAGme,GAClB54B,EAASW,EAAQ,YACf+O,KAAMkvB,EAAEuH,aAAe,IACvBhmB,KAAM,CAAEimB,QAASxH,EAAEyH,cAAe9mC,IAAKq/B,EAAEgC,MACzC7a,GAAI,aAAcjkB,EAAW,SAAUwkC,GACvCtmC,EAAOqb,SACPvZ,EAAW,KACNwkC,GACJ1N,EAAuB,UAAb0N,EAAIhnC,KAAmB,IAAM,IAAKgnC,EAAIhnC,QAKnD/B,EAAS8C,KAAKC,YAAaN,EAAQ,KAEpCgjC,MAAO,WACDlhC,GACJA,SAUL,IAqGKmhB,GArGDsjB,GAAe,GAClBC,GAAS,oBAGV7lC,EAAO2gC,UAAW,CACjBmF,MAAO,WACPC,cAAe,WACd,IAAI5kC,EAAWykC,GAAat/B,OAAWtG,EAAO+C,QAAU,IAAQlE,GAAMuF,OAEtE,OADApH,KAAMmE,IAAa,EACZA,KAKTnB,EAAO6gC,cAAe,cAAc,SAAU5C,EAAG+H,EAAkB3G,GAElE,IAAI4G,EAAcC,EAAaC,EAC9BC,GAAuB,IAAZnI,EAAE6H,QAAqBD,GAAOp7B,KAAMwzB,EAAEgC,KAChD,MACkB,iBAAXhC,EAAE1e,MAE6C,KADnD0e,EAAEqC,aAAe,IACjB1iC,QAAS,sCACXioC,GAAOp7B,KAAMwzB,EAAE1e,OAAU,QAI5B,GAAK6mB,GAAiC,UAArBnI,EAAEkB,UAAW,GA8D7B,OA3DA8G,EAAehI,EAAE8H,cAAgB1nC,EAAY4/B,EAAE8H,eAC9C9H,EAAE8H,gBACF9H,EAAE8H,cAGEK,EACJnI,EAAGmI,GAAanI,EAAGmI,GAAWljC,QAAS2iC,GAAQ,KAAOI,IAC/B,IAAZhI,EAAE6H,QACb7H,EAAEgC,MAAS5C,GAAO5yB,KAAMwzB,EAAEgC,KAAQ,IAAM,KAAQhC,EAAE6H,MAAQ,IAAMG,GAIjEhI,EAAEyC,WAAY,eAAkB,WAI/B,OAHMyF,GACLnmC,EAAOoD,MAAO6iC,EAAe,mBAEvBE,EAAmB,IAI3BlI,EAAEkB,UAAW,GAAM,OAGnB+G,EAAcnpC,EAAQkpC,GACtBlpC,EAAQkpC,GAAiB,WACxBE,EAAoB7kC,WAIrB+9B,EAAMnkB,QAAQ,gBAGQpY,IAAhBojC,EACJlmC,EAAQjD,GAASu+B,WAAY2K,GAI7BlpC,EAAQkpC,GAAiBC,EAIrBjI,EAAGgI,KAGPhI,EAAE8H,cAAgBC,EAAiBD,cAGnCH,GAAajoC,KAAMsoC,IAIfE,GAAqB9nC,EAAY6nC,IACrCA,EAAaC,EAAmB,IAGjCA,EAAoBD,OAAcpjC,KAI5B,YAYT1E,EAAQioC,qBACH/jB,GAAO1lB,EAAS0pC,eAAeD,mBAAoB,IAAK/jB,MACvDzU,UAAY,6BACiB,IAA3ByU,GAAK9Y,WAAWlJ,QAQxBN,EAAOwX,UAAY,SAAU+H,EAAMrf,EAASqmC,GAC3C,MAAqB,iBAAThnB,EACJ,IAEgB,kBAAZrf,IACXqmC,EAAcrmC,EACdA,GAAU,GAKLA,IAIA9B,EAAQioC,qBAMZ5yB,GALAvT,EAAUtD,EAAS0pC,eAAeD,mBAAoB,KAKvC/mC,cAAe,SACzB8S,KAAOxV,EAASmV,SAASK,KAC9BlS,EAAQR,KAAKC,YAAa8T,IAE1BvT,EAAUtD,GAKZynB,GAAWkiB,GAAe,IAD1BC,EAASrvB,EAAWhN,KAAMoV,IAKlB,CAAErf,EAAQZ,cAAeknC,EAAQ,MAGzCA,EAASpiB,GAAe,CAAE7E,GAAQrf,EAASmkB,GAEtCA,GAAWA,EAAQ/jB,QACvBN,EAAQqkB,GAAU3J,SAGZ1a,EAAOgB,MAAO,GAAIwlC,EAAOh9B,cAlChC,IAAIiK,EAAM+yB,EAAQniB,GAyCnBrkB,EAAOG,GAAGsoB,KAAO,SAAUwX,EAAKwG,EAAQtlC,GACvC,IAAIlB,EAAUtB,EAAMwkC,EACnB7rB,EAAOta,KACPyoB,EAAMwa,EAAIriC,QAAS,KAsDpB,OApDK6nB,GAAO,IACXxlB,EAAWk7B,GAAkB8E,EAAI3iC,MAAOmoB,IACxCwa,EAAMA,EAAI3iC,MAAO,EAAGmoB,IAIhBpnB,EAAYooC,IAGhBtlC,EAAWslC,EACXA,OAAS3jC,GAGE2jC,GAA4B,iBAAXA,IAC5B9nC,EAAO,QAIH2Y,EAAKhX,OAAS,GAClBN,EAAO+gC,KAAM,CACZd,IAAKA,EAKLthC,KAAMA,GAAQ,MACdugC,SAAU,OACV3f,KAAMknB,IACH5gC,MAAM,SAAUy/B,GAGnBnC,EAAW7hC,UAEXgW,EAAKkV,KAAMvsB,EAIVD,EAAQ,SAAUktB,OAAQltB,EAAOwX,UAAW8tB,IAAiB93B,KAAMvN,GAGnEqlC,MAKEpqB,OAAQ/Z,GAAY,SAAUk+B,EAAO+C,GACxC9qB,EAAKpW,MAAM,WACVC,EAASzD,MAAOV,KAAMmmC,GAAY,CAAE9D,EAAMiG,aAAclD,EAAQ/C,SAK5DriC,MAMRgD,EAAO6O,KAAKhI,QAAQ6/B,SAAW,SAAUrlC,GACxC,OAAOrB,EAAO2B,KAAM3B,EAAOy5B,QAAQ,SAAUt5B,GAC5C,OAAOkB,IAASlB,EAAGkB,QAChBf,QAMLN,EAAO2mC,OAAS,CACfC,UAAW,SAAUvlC,EAAMe,EAASjD,GACnC,IAAI0nC,EAAaC,EAASC,EAAWC,EAAQC,EAAWC,EACvDvX,EAAW3vB,EAAOwhB,IAAKngB,EAAM,YAC7B8lC,EAAUnnC,EAAQqB,GAClBynB,EAAQ,GAGS,WAAb6G,IACJtuB,EAAKigB,MAAMqO,SAAW,YAGvBsX,EAAYE,EAAQR,SACpBI,EAAY/mC,EAAOwhB,IAAKngB,EAAM,OAC9B6lC,EAAalnC,EAAOwhB,IAAKngB,EAAM,SACI,aAAbsuB,GAAwC,UAAbA,KAC9CoX,EAAYG,GAAatpC,QAAS,SAAY,GAMhDopC,GADAH,EAAcM,EAAQxX,YACD5iB,IACrB+5B,EAAUD,EAAYjS,OAGtBoS,EAAShX,WAAY+W,IAAe,EACpCD,EAAU9W,WAAYkX,IAAgB,GAGlC7oC,EAAY+D,KAGhBA,EAAUA,EAAQjE,KAAMkD,EAAMlC,EAAGa,EAAOmC,OAAQ,GAAI8kC,KAGjC,MAAf7kC,EAAQ2K,MACZ+b,EAAM/b,IAAQ3K,EAAQ2K,IAAMk6B,EAAUl6B,IAAQi6B,GAE1B,MAAhB5kC,EAAQwyB,OACZ9L,EAAM8L,KAASxyB,EAAQwyB,KAAOqS,EAAUrS,KAASkS,GAG7C,UAAW1kC,EACfA,EAAQglC,MAAMjpC,KAAMkD,EAAMynB,GAG1Bqe,EAAQ3lB,IAAKsH,KAKhB9oB,EAAOG,GAAGgC,OAAQ,CAGjBwkC,OAAQ,SAAUvkC,GAGjB,GAAKd,UAAUhB,OACd,YAAmBwC,IAAZV,EACNpF,KACAA,KAAKkE,MAAM,SAAU/B,GACpBa,EAAO2mC,OAAOC,UAAW5pC,KAAMoF,EAASjD,MAI3C,IAAIkoC,EAAMC,EACTjmC,EAAOrE,KAAM,GAEd,OAAMqE,EAQAA,EAAK0xB,iBAAiBzyB,QAK5B+mC,EAAOhmC,EAAKqzB,wBACZ4S,EAAMjmC,EAAK6I,cAAc4C,YAClB,CACNC,IAAKs6B,EAAKt6B,IAAMu6B,EAAIC,YACpB3S,KAAMyS,EAAKzS,KAAO0S,EAAIE,cARf,CAAEz6B,IAAK,EAAG6nB,KAAM,QATxB,GAuBDjF,SAAU,WACT,GAAM3yB,KAAM,GAAZ,CAIA,IAAIyqC,EAAcd,EAAQznC,EACzBmC,EAAOrE,KAAM,GACb0qC,EAAe,CAAE36B,IAAK,EAAG6nB,KAAM,GAGhC,GAAwC,UAAnC50B,EAAOwhB,IAAKngB,EAAM,YAGtBslC,EAAStlC,EAAKqzB,4BAER,CAON,IANAiS,EAAS3pC,KAAK2pC,SAIdznC,EAAMmC,EAAK6I,cACXu9B,EAAepmC,EAAKomC,cAAgBvoC,EAAIyN,gBAChC86B,IACLA,IAAiBvoC,EAAIojB,MAAQmlB,IAAiBvoC,EAAIyN,kBACT,WAA3C3M,EAAOwhB,IAAKimB,EAAc,aAE1BA,EAAeA,EAAa7nC,WAExB6nC,GAAgBA,IAAiBpmC,GAAkC,IAA1BomC,EAAalpC,YAG1DmpC,EAAe1nC,EAAQynC,GAAed,UACzB55B,KAAO/M,EAAOwhB,IAAKimB,EAAc,kBAAkB,GAChEC,EAAa9S,MAAQ50B,EAAOwhB,IAAKimB,EAAc,mBAAmB,IAKpE,MAAO,CACN16B,IAAK45B,EAAO55B,IAAM26B,EAAa36B,IAAM/M,EAAOwhB,IAAKngB,EAAM,aAAa,GACpEuzB,KAAM+R,EAAO/R,KAAO8S,EAAa9S,KAAO50B,EAAOwhB,IAAKngB,EAAM,cAAc,MAc1EomC,aAAc,WACb,OAAOzqC,KAAKoE,KAAK,WAGhB,IAFA,IAAIqmC,EAAezqC,KAAKyqC,aAEhBA,GAA2D,WAA3CznC,EAAOwhB,IAAKimB,EAAc,aACjDA,EAAeA,EAAaA,aAG7B,OAAOA,GAAgB96B,SAM1B3M,EAAOkB,KAAM,CAAE40B,WAAY,cAAeD,UAAW,gBAAiB,SAAUrc,EAAQgG,GACvF,IAAIzS,EAAM,gBAAkByS,EAE5Bxf,EAAOG,GAAIqZ,GAAW,SAAUpa,GAC/B,OAAO8e,EAAQlhB,MAAM,SAAUqE,EAAMmY,EAAQpa,GAG5C,IAAIkoC,EAOJ,GANK7oC,EAAU4C,GACdimC,EAAMjmC,EACuB,IAAlBA,EAAK9C,WAChB+oC,EAAMjmC,EAAKyL,kBAGChK,IAAR1D,EACJ,OAAOkoC,EAAMA,EAAK9nB,GAASne,EAAMmY,GAG7B8tB,EACJA,EAAIK,SACF56B,EAAYu6B,EAAIE,YAAVpoC,EACP2N,EAAM3N,EAAMkoC,EAAIC,aAIjBlmC,EAAMmY,GAAWpa,IAEhBoa,EAAQpa,EAAKkC,UAAUhB,YAU5BN,EAAOkB,KAAM,CAAE,MAAO,SAAU,SAAUsD,EAAIgb,GAC7Cxf,EAAOkzB,SAAU1T,GAASqP,GAAczwB,EAAQiyB,eAC/C,SAAUhvB,EAAMktB,GACf,GAAKA,EAIJ,OAHAA,EAAWD,GAAQjtB,EAAMme,GAGlBuO,GAAUtjB,KAAM8jB,GACtBvuB,EAAQqB,GAAOsuB,WAAYnQ,GAAS,KACpC+O,QAQLvuB,EAAOkB,KAAM,CAAE0mC,OAAQ,SAAUC,MAAO,UAAW,SAAUxlC,EAAM1D,GAClEqB,EAAOkB,KAAM,CACZ4zB,QAAS,QAAUzyB,EACnBwW,QAASla,EACT,GAAI,QAAU0D,IACZ,SAAUylC,EAAcC,GAG1B/nC,EAAOG,GAAI4nC,GAAa,SAAUlT,EAAQ1wB,GACzC,IAAIga,EAAY7c,UAAUhB,SAAYwnC,GAAkC,kBAAXjT,GAC5DpC,EAAQqV,KAA6B,IAAXjT,IAA6B,IAAV1wB,EAAiB,SAAW,UAE1E,OAAO+Z,EAAQlhB,MAAM,SAAUqE,EAAM1C,EAAMwF,GAC1C,IAAIjF,EAEJ,OAAKT,EAAU4C,GAGyB,IAAhC0mC,EAASnqC,QAAS,SACxByD,EAAM,QAAUgB,GAChBhB,EAAKzE,SAAS+P,gBAAiB,SAAWtK,GAIrB,IAAlBhB,EAAK9C,UACTW,EAAMmC,EAAKsL,gBAIJ3J,KAAKkvB,IACX7wB,EAAKihB,KAAM,SAAWjgB,GAAQnD,EAAK,SAAWmD,GAC9ChB,EAAKihB,KAAM,SAAWjgB,GAAQnD,EAAK,SAAWmD,GAC9CnD,EAAK,SAAWmD,UAIDS,IAAVqB,EAGNnE,EAAOwhB,IAAKngB,EAAM1C,EAAM8zB,GAGxBzyB,EAAOshB,MAAOjgB,EAAM1C,EAAMwF,EAAOsuB,KAChC9zB,EAAMwf,EAAY0W,OAAS/xB,EAAWqb,UAM5Cne,EAAOkB,KAAM,CACZ,YACA,WACA,eACA,YACA,cACA,aACE,SAAUsD,EAAI7F,GAChBqB,EAAOG,GAAIxB,GAAS,SAAUwB,GAC7B,OAAOnD,KAAKooB,GAAIzmB,EAAMwB,OAOxBH,EAAOG,GAAGgC,OAAQ,CAEjB61B,KAAM,SAAU3S,EAAO9F,EAAMpf,GAC5B,OAAOnD,KAAKooB,GAAIC,EAAO,KAAM9F,EAAMpf,IAEpC6nC,OAAQ,SAAU3iB,EAAOllB,GACxB,OAAOnD,KAAKyoB,IAAKJ,EAAO,KAAMllB,IAG/B8nC,SAAU,SAAUhoC,EAAUolB,EAAO9F,EAAMpf,GAC1C,OAAOnD,KAAKooB,GAAIC,EAAOplB,EAAUsf,EAAMpf,IAExC+nC,WAAY,SAAUjoC,EAAUolB,EAAOllB,GAGtC,OAA4B,IAArBmB,UAAUhB,OAChBtD,KAAKyoB,IAAKxlB,EAAU,MACpBjD,KAAKyoB,IAAKJ,EAAOplB,GAAY,KAAME,IAGrCgoC,MAAO,SAAUC,EAAQC,GACxB,OAAOrrC,KAAKkuB,WAAYkd,GAASjd,WAAYkd,GAASD,MAIxDpoC,EAAOkB,KACN,wLAE4DqD,MAAO,MACnE,SAAUC,EAAInC,GAGbrC,EAAOG,GAAIkC,GAAS,SAAUkd,EAAMpf,GACnC,OAAOmB,UAAUhB,OAAS,EACzBtD,KAAKooB,GAAI/iB,EAAM,KAAMkd,EAAMpf,GAC3BnD,KAAKkpB,QAAS7jB,OAUlB,IAAI2E,GAAQ,qCAMZhH,EAAOsoC,MAAQ,SAAUnoC,EAAID,GAC5B,IAAIyN,EAAKyD,EAAMk3B,EAUf,GARwB,iBAAZpoC,IACXyN,EAAMxN,EAAID,GACVA,EAAUC,EACVA,EAAKwN,GAKAtP,EAAY8B,GAalB,OARAiR,EAAO9T,EAAMa,KAAMmD,UAAW,IAC9BgnC,EAAQ,WACP,OAAOnoC,EAAGzC,MAAOwC,GAAWlD,KAAMoU,EAAK3T,OAAQH,EAAMa,KAAMmD,eAItD8C,KAAOjE,EAAGiE,KAAOjE,EAAGiE,MAAQpE,EAAOoE,OAElCkkC,GAGRtoC,EAAOuoC,UAAY,SAAUC,GACvBA,EACJxoC,EAAO8d,YAEP9d,EAAOyX,OAAO,IAGhBzX,EAAO6C,QAAUD,MAAMC,QACvB7C,EAAOyoC,UAAY1oB,KAAKC,MACxBhgB,EAAOqJ,SAAWA,EAClBrJ,EAAO3B,WAAaA,EACpB2B,EAAOvB,SAAWA,EAClBuB,EAAO8e,UAAYA,EACnB9e,EAAOrB,KAAOmB,EAEdE,EAAOmpB,IAAMzjB,KAAKyjB,IAElBnpB,EAAO0oC,UAAY,SAAUpqC,GAK5B,IAAIK,EAAOqB,EAAOrB,KAAML,GACxB,OAAkB,WAATK,GAA8B,WAATA,KAK5BgqC,MAAOrqC,EAAM0xB,WAAY1xB,KAG5B0B,EAAO4oC,KAAO,SAAUrpC,GACvB,OAAe,MAARA,EACN,IACEA,EAAO,IAAK2D,QAAS8D,GAAO,KA2BhC,IAGC6hC,GAAU9rC,EAAOiD,OAGjB8oC,GAAK/rC,EAAOgsC,EAwBb,OAtBA/oC,EAAOgpC,WAAa,SAAUtmC,GAS7B,OARK3F,EAAOgsC,IAAM/oC,IACjBjD,EAAOgsC,EAAID,IAGPpmC,GAAQ3F,EAAOiD,SAAWA,IAC9BjD,EAAOiD,OAAS6oC,IAGV7oC,QAMiB,IAAb/C,IACXF,EAAOiD,OAASjD,EAAOgsC,EAAI/oC,GAMrBA,QCvmVHipC,EAA8B,oBAAXlsC,QAA8C,oBAAbH,UAAiD,oBAAdssC,UAEvFC,EAAkB,WAEpB,IADA,IAAIC,EAAwB,CAAC,OAAQ,UAAW,WACvCjqC,EAAI,EAAGA,EAAIiqC,EAAsB9oC,OAAQnB,GAAK,EACrD,GAAI8pC,GAAaC,UAAUG,UAAUzrC,QAAQwrC,EAAsBjqC,KAAO,EACxE,OAAO,EAGX,OAAO,EAPa;;;;;;;;;;;;;;;;;;;;;;;;GAqCtB,IAWImqC,EAXqBL,GAAalsC,OAAOwsC,QA3B7C,SAA2BppC,GACzB,IAAIqpC,GAAS,EACb,OAAO,WACDA,IAGJA,GAAS,EACTzsC,OAAOwsC,QAAQlwB,UAAUM,MAAK,WAC5B6vB,GAAS,EACTrpC,UAKN,SAAsBA,GACpB,IAAIspC,GAAY,EAChB,OAAO,WACAA,IACHA,GAAY,EACZ7sB,YAAW,WACT6sB,GAAY,EACZtpC,MACCgpC,MAyBT,SAAS9qC,EAAWqrC,GAElB,OAAOA,GAA8D,sBADvD,GACoB5rC,SAASK,KAAKurC,GAUlD,SAASC,EAAyBC,EAASC,GACzC,GAAyB,IAArBD,EAAQrrC,SACV,MAAO,GAGT,IACIijB,EADSooB,EAAQ1/B,cAAc4C,YAClBohB,iBAAiB0b,EAAS,MAC3C,OAAOC,EAAWroB,EAAIqoB,GAAYroB,EAUpC,SAASsoB,EAAcF,GACrB,MAAyB,SAArBA,EAAQvgC,SACHugC,EAEFA,EAAQhqC,YAAcgqC,EAAQnH,KAUvC,SAASsH,EAAgBH,GAEvB,IAAKA,EACH,OAAOhtC,SAAS0lB,KAGlB,OAAQsnB,EAAQvgC,UACd,IAAK,OACL,IAAK,OACH,OAAOugC,EAAQ1/B,cAAcoY,KAC/B,IAAK,YACH,OAAOsnB,EAAQtnB,KAKnB,IAAI0nB,EAAwBL,EAAyBC,GACjDjR,EAAWqR,EAAsBrR,SACjCC,EAAYoR,EAAsBpR,UAClCC,EAAYmR,EAAsBnR,UAEtC,MAAI,wBAAwBpuB,KAAKkuB,EAAWE,EAAYD,GAC/CgR,EAGFG,EAAgBD,EAAcF,IAUvC,SAASK,EAAiBC,GACxB,OAAOA,GAAaA,EAAUC,cAAgBD,EAAUC,cAAgBD,EAG1E,IAAIE,EAASnB,MAAgBlsC,OAAOstC,uBAAwBztC,SAAS0tC,cACjEC,EAAStB,GAAa,UAAUx+B,KAAKy+B,UAAUG,WASnD,SAASmB,EAAKzqC,GACZ,OAAgB,KAAZA,EACKqqC,EAEO,KAAZrqC,EACKwqC,EAEFH,GAAUG,EAUnB,SAASE,EAAgBb,GACvB,IAAKA,EACH,OAAOhtC,SAAS+P,gBAQlB,IALA,IAAI+9B,EAAiBF,EAAK,IAAM5tC,SAAS0lB,KAAO,KAG5CmlB,EAAemC,EAAQnC,cAAgB,KAEpCA,IAAiBiD,GAAkBd,EAAQe,oBAChDlD,GAAgBmC,EAAUA,EAAQe,oBAAoBlD,aAGxD,IAAIp+B,EAAWo+B,GAAgBA,EAAap+B,SAE5C,OAAKA,GAAyB,SAAbA,GAAoC,SAAbA,GAMsB,IAA1D,CAAC,KAAM,KAAM,SAASzL,QAAQ6pC,EAAap+B,WAA2E,WAAvDsgC,EAAyBlC,EAAc,YACjGgD,EAAgBhD,GAGlBA,EATEmC,EAAUA,EAAQ1/B,cAAcyC,gBAAkB/P,SAAS+P,gBA4BtE,SAASi+B,EAAQ3rC,GACf,OAAwB,OAApBA,EAAKW,WACAgrC,EAAQ3rC,EAAKW,YAGfX,EAWT,SAAS4rC,EAAuBC,EAAUC,GAExC,KAAKD,GAAaA,EAASvsC,UAAawsC,GAAaA,EAASxsC,UAC5D,OAAO3B,SAAS+P,gBAIlB,IAAIsnB,EAAQ6W,EAAS18B,wBAAwB28B,GAAYC,KAAKC,4BAC1Dn6B,EAAQmjB,EAAQ6W,EAAWC,EAC3B/oC,EAAMiyB,EAAQ8W,EAAWD,EAGzBI,EAAQtuC,SAASuuC,cACrBD,EAAME,SAASt6B,EAAO,GACtBo6B,EAAMG,OAAOrpC,EAAK,GAClB,IA/CyB4nC,EACrBvgC,EA8CAiiC,EAA0BJ,EAAMI,wBAIpC,GAAIR,IAAaQ,GAA2BP,IAAaO,GAA2Bx6B,EAAMrL,SAASzD,GACjG,MAjDe,UAFbqH,GADqBugC,EAoDD0B,GAnDDjiC,WAKH,SAAbA,GAAuBohC,EAAgBb,EAAQ1F,qBAAuB0F,EAkDpEa,EAAgBa,GAHdA,EAOX,IAAIC,EAAeX,EAAQE,GAC3B,OAAIS,EAAa9I,KACRoI,EAAuBU,EAAa9I,KAAMsI,GAE1CF,EAAuBC,EAAUF,EAAQG,GAAUtI,MAY9D,SAAS+I,EAAU5B,GACjB,IAAI6B,EAAOnqC,UAAUhB,OAAS,QAAsBwC,IAAjBxB,UAAU,GAAmBA,UAAU,GAAK,MAE3EoqC,EAAqB,QAATD,EAAiB,YAAc,aAC3CpiC,EAAWugC,EAAQvgC,SAEvB,GAAiB,SAAbA,GAAoC,SAAbA,EAAqB,CAC9C,IAAImjB,EAAOod,EAAQ1/B,cAAcyC,gBAC7Bg/B,EAAmB/B,EAAQ1/B,cAAcyhC,kBAAoBnf,EACjE,OAAOmf,EAAiBD,GAG1B,OAAO9B,EAAQ8B,GAYjB,SAASE,EAAcvE,EAAMuC,GAC3B,IAAI3X,EAAW3wB,UAAUhB,OAAS,QAAsBwC,IAAjBxB,UAAU,IAAmBA,UAAU,GAE1Eu0B,EAAY2V,EAAU5B,EAAS,OAC/B9T,EAAa0V,EAAU5B,EAAS,QAChCiC,EAAW5Z,GAAY,EAAI,EAK/B,OAJAoV,EAAKt6B,KAAO8oB,EAAYgW,EACxBxE,EAAKyE,QAAUjW,EAAYgW,EAC3BxE,EAAKzS,MAAQkB,EAAa+V,EAC1BxE,EAAK7X,OAASsG,EAAa+V,EACpBxE,EAaT,SAAS0E,EAAexZ,EAAQyZ,GAC9B,IAAIC,EAAiB,MAATD,EAAe,OAAS,MAChCE,EAAkB,SAAVD,EAAmB,QAAU,SAEzC,OAAOjc,WAAWuC,EAAO,SAAW0Z,EAAQ,UAAYjc,WAAWuC,EAAO,SAAW2Z,EAAQ,UAG/F,SAASC,EAAQH,EAAM1pB,EAAMkK,EAAM4f,GACjC,OAAOppC,KAAKkvB,IAAI5P,EAAK,SAAW0pB,GAAO1pB,EAAK,SAAW0pB,GAAOxf,EAAK,SAAWwf,GAAOxf,EAAK,SAAWwf,GAAOxf,EAAK,SAAWwf,GAAOxB,EAAK,IAAM3Z,SAASrE,EAAK,SAAWwf,IAASnb,SAASub,EAAc,UAAqB,WAATJ,EAAoB,MAAQ,UAAYnb,SAASub,EAAc,UAAqB,WAATJ,EAAoB,SAAW,WAAa,GAG5U,SAASK,EAAezvC,GACtB,IAAI0lB,EAAO1lB,EAAS0lB,KAChBkK,EAAO5vB,EAAS+P,gBAChBy/B,EAAgB5B,EAAK,KAAOtc,iBAAiB1B,GAEjD,MAAO,CACLoE,OAAQub,EAAQ,SAAU7pB,EAAMkK,EAAM4f,GACtC5d,MAAO2d,EAAQ,QAAS7pB,EAAMkK,EAAM4f,IAIxC,IAAIE,EAAiB,SAAUC,EAAUC,GACvC,KAAMD,aAAoBC,GACxB,MAAM,IAAIpwB,UAAU,sCAIpBqwB,EAAc,WAChB,SAASC,EAAiBjqC,EAAQqmB,GAChC,IAAK,IAAI3pB,EAAI,EAAGA,EAAI2pB,EAAMxoB,OAAQnB,IAAK,CACrC,IAAIwtC,EAAa7jB,EAAM3pB,GACvBwtC,EAAWrkB,WAAaqkB,EAAWrkB,aAAc,EACjDqkB,EAAWttB,cAAe,EACtB,UAAWstB,IAAYA,EAAWnkB,UAAW,GACjDprB,OAAOgiB,eAAe3c,EAAQkqC,EAAWxhC,IAAKwhC,IAIlD,OAAO,SAAUH,EAAaI,EAAYC,GAGxC,OAFID,GAAYF,EAAiBF,EAAYjsC,UAAWqsC,GACpDC,GAAaH,EAAiBF,EAAaK,GACxCL,GAdO,GAsBdptB,EAAiB,SAAU9gB,EAAK6M,EAAKhH,GAYvC,OAXIgH,KAAO7M,EACTlB,OAAOgiB,eAAe9gB,EAAK6M,EAAK,CAC9BhH,MAAOA,EACPmkB,YAAY,EACZjJ,cAAc,EACdmJ,UAAU,IAGZlqB,EAAI6M,GAAOhH,EAGN7F,GAGLwuC,EAAW1vC,OAAO2vC,QAAU,SAAUtqC,GACxC,IAAK,IAAItD,EAAI,EAAGA,EAAImC,UAAUhB,OAAQnB,IAAK,CACzC,IAAI4hB,EAASzf,UAAUnC,GAEvB,IAAK,IAAIgM,KAAO4V,EACV3jB,OAAOmD,UAAUvC,eAAeG,KAAK4iB,EAAQ5V,KAC/C1I,EAAO0I,GAAO4V,EAAO5V,IAK3B,OAAO1I,GAUT,SAASuqC,EAAcC,GACrB,OAAOH,EAAS,GAAIG,EAAS,CAC3Bzd,MAAOyd,EAAQrY,KAAOqY,EAAQze,MAC9Bsd,OAAQmB,EAAQlgC,IAAMkgC,EAAQrc,SAWlC,SAAS8D,EAAsBkV,GAC7B,IAAIvC,EAAO,GAKX,IACE,GAAImD,EAAK,IAAK,CACZnD,EAAOuC,EAAQlV,wBACf,IAAImB,EAAY2V,EAAU5B,EAAS,OAC/B9T,EAAa0V,EAAU5B,EAAS,QACpCvC,EAAKt6B,KAAO8oB,EACZwR,EAAKzS,MAAQkB,EACbuR,EAAKyE,QAAUjW,EACfwR,EAAK7X,OAASsG,OAEduR,EAAOuC,EAAQlV,wBAEjB,MAAOjrB,IAET,IAAI0G,EAAS,CACXykB,KAAMyS,EAAKzS,KACX7nB,IAAKs6B,EAAKt6B,IACVyhB,MAAO6Y,EAAK7X,MAAQ6X,EAAKzS,KACzBhE,OAAQyW,EAAKyE,OAASzE,EAAKt6B,KAIzBmgC,EAA6B,SAArBtD,EAAQvgC,SAAsBgjC,EAAezC,EAAQ1/B,eAAiB,GAC9EskB,EAAQ0e,EAAM1e,OAASob,EAAQuD,aAAeh9B,EAAOqe,MACrDoC,EAASsc,EAAMtc,QAAUgZ,EAAQwD,cAAgBj9B,EAAOygB,OAExDyc,EAAiBzD,EAAQ/Z,YAAcrB,EACvC8e,EAAgB1D,EAAQ5Y,aAAeJ,EAI3C,GAAIyc,GAAkBC,EAAe,CACnC,IAAI/a,EAASoX,EAAyBC,GACtCyD,GAAkBtB,EAAexZ,EAAQ,KACzC+a,GAAiBvB,EAAexZ,EAAQ,KAExCpiB,EAAOqe,OAAS6e,EAChBl9B,EAAOygB,QAAU0c,EAGnB,OAAON,EAAc78B,GAGvB,SAASo9B,EAAqC31B,EAAU7G,GACtD,IAAIy8B,EAAgBlsC,UAAUhB,OAAS,QAAsBwC,IAAjBxB,UAAU,IAAmBA,UAAU,GAE/EipC,EAASC,EAAK,IACdiD,EAA6B,SAApB18B,EAAO1H,SAChBqkC,EAAehZ,EAAsB9c,GACrC+1B,EAAajZ,EAAsB3jB,GACnC68B,EAAe7D,EAAgBnyB,GAE/B2a,EAASoX,EAAyB54B,GAClC+f,EAAiBd,WAAWuC,EAAOzB,gBACnC+c,EAAkB7d,WAAWuC,EAAOsb,iBAGpCL,GAAiBC,IACnBE,EAAW5gC,IAAM/J,KAAKkvB,IAAIyb,EAAW5gC,IAAK,GAC1C4gC,EAAW/Y,KAAO5xB,KAAKkvB,IAAIyb,EAAW/Y,KAAM,IAE9C,IAAIqY,EAAUD,EAAc,CAC1BjgC,IAAK2gC,EAAa3gC,IAAM4gC,EAAW5gC,IAAM+jB,EACzC8D,KAAM8Y,EAAa9Y,KAAO+Y,EAAW/Y,KAAOiZ,EAC5Crf,MAAOkf,EAAalf,MACpBoC,OAAQ8c,EAAa9c,SASvB,GAPAqc,EAAQa,UAAY,EACpBb,EAAQ1d,WAAa,GAMhBgb,GAAUkD,EAAQ,CACrB,IAAIK,EAAY9d,WAAWuC,EAAOub,WAC9Bve,EAAaS,WAAWuC,EAAOhD,YAEnC0d,EAAQlgC,KAAO+jB,EAAiBgd,EAChCb,EAAQnB,QAAUhb,EAAiBgd,EACnCb,EAAQrY,MAAQiZ,EAAkBte,EAClC0d,EAAQzd,OAASqe,EAAkBte,EAGnC0d,EAAQa,UAAYA,EACpBb,EAAQ1d,WAAaA,EAOvB,OAJIgb,IAAWiD,EAAgBz8B,EAAOtL,SAASmoC,GAAgB78B,IAAW68B,GAA0C,SAA1BA,EAAavkC,YACrG4jC,EAAUrB,EAAcqB,EAASl8B,IAG5Bk8B,EAGT,SAASc,EAA8CnE,GACrD,IAAIoE,EAAgB1sC,UAAUhB,OAAS,QAAsBwC,IAAjBxB,UAAU,IAAmBA,UAAU,GAE/EkrB,EAAOod,EAAQ1/B,cAAcyC,gBAC7BshC,EAAiBV,EAAqC3D,EAASpd,GAC/DgC,EAAQxrB,KAAKkvB,IAAI1F,EAAK2gB,YAAapwC,OAAOmxC,YAAc,GACxDtd,EAAS5tB,KAAKkvB,IAAI1F,EAAK4gB,aAAcrwC,OAAOoxC,aAAe,GAE3DtY,EAAamY,EAAkC,EAAlBxC,EAAUhf,GACvCsJ,EAAckY,EAA0C,EAA1BxC,EAAUhf,EAAM,QAE9Cma,EAAS,CACX55B,IAAK8oB,EAAYoY,EAAelhC,IAAMkhC,EAAeH,UACrDlZ,KAAMkB,EAAamY,EAAerZ,KAAOqZ,EAAe1e,WACxDf,MAAOA,EACPoC,OAAQA,GAGV,OAAOoc,EAAcrG,GAWvB,SAASyH,EAAQxE,GACf,IAAIvgC,EAAWugC,EAAQvgC,SACvB,GAAiB,SAAbA,GAAoC,SAAbA,EACzB,OAAO,EAET,GAAsD,UAAlDsgC,EAAyBC,EAAS,YACpC,OAAO,EAET,IAAIhqC,EAAakqC,EAAcF,GAC/B,QAAKhqC,GAGEwuC,EAAQxuC,GAWjB,SAASyuC,EAA6BzE,GAEpC,IAAKA,IAAYA,EAAQ0E,eAAiB9D,IACxC,OAAO5tC,SAAS+P,gBAGlB,IADA,IAAInB,EAAKo+B,EAAQ0E,cACV9iC,GAAoD,SAA9Cm+B,EAAyBn+B,EAAI,cACxCA,EAAKA,EAAG8iC,cAEV,OAAO9iC,GAAM5O,SAAS+P,gBAcxB,SAAS4hC,EAAcC,EAAQtE,EAAWpV,EAAS2Z,GACjD,IAAIjB,EAAgBlsC,UAAUhB,OAAS,QAAsBwC,IAAjBxB,UAAU,IAAmBA,UAAU,GAI/EotC,EAAa,CAAE3hC,IAAK,EAAG6nB,KAAM,GAC7B6S,EAAe+F,EAAgBa,EAA6BG,GAAU3D,EAAuB2D,EAAQvE,EAAiBC,IAG1H,GAA0B,aAAtBuE,EACFC,EAAaX,EAA8CtG,EAAc+F,OACpE,CAEL,IAAImB,OAAiB,EACK,iBAAtBF,EAE8B,UADhCE,EAAiB5E,EAAgBD,EAAcI,KAC5B7gC,WACjBslC,EAAiBH,EAAOtkC,cAAcyC,iBAGxCgiC,EAD+B,WAAtBF,EACQD,EAAOtkC,cAAcyC,gBAErB8hC,EAGnB,IAAIxB,EAAUM,EAAqCoB,EAAgBlH,EAAc+F,GAGjF,GAAgC,SAA5BmB,EAAetlC,UAAwB+kC,EAAQ3G,GAWjDiH,EAAazB,MAXmD,CAChE,IAAI2B,EAAkBvC,EAAemC,EAAOtkC,eACxC0mB,EAASge,EAAgBhe,OACzBpC,EAAQogB,EAAgBpgB,MAE5BkgB,EAAW3hC,KAAOkgC,EAAQlgC,IAAMkgC,EAAQa,UACxCY,EAAW5C,OAASlb,EAASqc,EAAQlgC,IACrC2hC,EAAW9Z,MAAQqY,EAAQrY,KAAOqY,EAAQ1d,WAC1Cmf,EAAWlf,MAAQhB,EAAQye,EAAQrY,MASvC,IAAIia,EAAqC,iBADzC/Z,EAAUA,GAAW,GAOrB,OALA4Z,EAAW9Z,MAAQia,EAAkB/Z,EAAUA,EAAQF,MAAQ,EAC/D8Z,EAAW3hC,KAAO8hC,EAAkB/Z,EAAUA,EAAQ/nB,KAAO,EAC7D2hC,EAAWlf,OAASqf,EAAkB/Z,EAAUA,EAAQtF,OAAS,EACjEkf,EAAW5C,QAAU+C,EAAkB/Z,EAAUA,EAAQgX,QAAU,EAE5D4C,EAGT,SAASI,EAAQC,GAIf,OAHYA,EAAKvgB,MACJugB,EAAKne,OAcpB,SAASoe,EAAqBC,EAAWC,EAASV,EAAQtE,EAAWuE,GACnE,IAAI3Z,EAAUxzB,UAAUhB,OAAS,QAAsBwC,IAAjBxB,UAAU,GAAmBA,UAAU,GAAK,EAElF,IAAmC,IAA/B2tC,EAAUrxC,QAAQ,QACpB,OAAOqxC,EAGT,IAAIP,EAAaH,EAAcC,EAAQtE,EAAWpV,EAAS2Z,GAEvDU,EAAQ,CACVpiC,IAAK,CACHyhB,MAAOkgB,EAAWlgB,MAClBoC,OAAQse,EAAQniC,IAAM2hC,EAAW3hC,KAEnCyiB,MAAO,CACLhB,MAAOkgB,EAAWlf,MAAQ0f,EAAQ1f,MAClCoB,OAAQ8d,EAAW9d,QAErBkb,OAAQ,CACNtd,MAAOkgB,EAAWlgB,MAClBoC,OAAQ8d,EAAW5C,OAASoD,EAAQpD,QAEtClX,KAAM,CACJpG,MAAO0gB,EAAQta,KAAO8Z,EAAW9Z,KACjChE,OAAQ8d,EAAW9d,SAInBwe,EAAchyC,OAAO6N,KAAKkkC,GAAO/tC,KAAI,SAAU+J,GACjD,OAAO2hC,EAAS,CACd3hC,IAAKA,GACJgkC,EAAMhkC,GAAM,CACbkkC,KAAMP,EAAQK,EAAMhkC,SAErBlJ,MAAK,SAAUmE,EAAGC,GACnB,OAAOA,EAAEgpC,KAAOjpC,EAAEipC,QAGhBC,EAAgBF,EAAY9hC,QAAO,SAAUiiC,GAC/C,IAAI/gB,EAAQ+gB,EAAM/gB,MACdoC,EAAS2e,EAAM3e,OACnB,OAAOpC,GAASggB,EAAOrB,aAAevc,GAAU4d,EAAOpB,gBAGrDoC,EAAoBF,EAAchvC,OAAS,EAAIgvC,EAAc,GAAGnkC,IAAMikC,EAAY,GAAGjkC,IAErFskC,EAAYR,EAAU1qC,MAAM,KAAK,GAErC,OAAOirC,GAAqBC,EAAY,IAAMA,EAAY,IAa5D,SAASC,EAAoBz0B,EAAOuzB,EAAQtE,GAC1C,IAAIsD,EAAgBlsC,UAAUhB,OAAS,QAAsBwC,IAAjBxB,UAAU,GAAmBA,UAAU,GAAK,KAEpFquC,EAAqBnC,EAAgBa,EAA6BG,GAAU3D,EAAuB2D,EAAQvE,EAAiBC,IAChI,OAAOqD,EAAqCrD,EAAWyF,EAAoBnC,GAU7E,SAASoC,EAAchG,GACrB,IACIrX,EADSqX,EAAQ1/B,cAAc4C,YACfohB,iBAAiB0b,GACjCiG,EAAI7f,WAAWuC,EAAOub,WAAa,GAAK9d,WAAWuC,EAAOud,cAAgB,GAC1EC,EAAI/f,WAAWuC,EAAOhD,YAAc,GAAKS,WAAWuC,EAAOyd,aAAe,GAK9E,MAJa,CACXxhB,MAAOob,EAAQ/Z,YAAckgB,EAC7Bnf,OAAQgZ,EAAQ5Y,aAAe6e,GAYnC,SAASI,EAAqBhB,GAC5B,IAAIn9B,EAAO,CAAE8iB,KAAM,QAASpF,MAAO,OAAQsc,OAAQ,MAAO/+B,IAAK,UAC/D,OAAOkiC,EAAU/rC,QAAQ,0BAA0B,SAAUqO,GAC3D,OAAOO,EAAKP,MAchB,SAAS2+B,EAAiB1B,EAAQ2B,EAAkBlB,GAClDA,EAAYA,EAAU1qC,MAAM,KAAK,GAGjC,IAAI6rC,EAAaR,EAAcpB,GAG3B6B,EAAgB,CAClB7hB,MAAO4hB,EAAW5hB,MAClBoC,OAAQwf,EAAWxf,QAIjB0f,GAAoD,IAA1C,CAAC,QAAS,QAAQ1yC,QAAQqxC,GACpCsB,EAAWD,EAAU,MAAQ,OAC7BE,EAAgBF,EAAU,OAAS,MACnCG,EAAcH,EAAU,SAAW,QACnCI,EAAwBJ,EAAqB,QAAX,SAStC,OAPAD,EAAcE,GAAYJ,EAAiBI,GAAYJ,EAAiBM,GAAe,EAAIL,EAAWK,GAAe,EAEnHJ,EAAcG,GADZvB,IAAcuB,EACeL,EAAiBK,GAAiBJ,EAAWM,GAE7CP,EAAiBF,EAAqBO,IAGhEH,EAYT,SAAS7iC,EAAKtQ,EAAKgT,GAEjB,OAAItN,MAAMrC,UAAUiN,KACXtQ,EAAIsQ,KAAK0C,GAIXhT,EAAIoQ,OAAO4C,GAAO,GAqC3B,SAASygC,EAAaC,EAAWrxB,EAAMsxB,GAoBrC,YAnB8B/tC,IAAT+tC,EAAqBD,EAAYA,EAAUtzC,MAAM,EA1BxE,SAAmBJ,EAAKsiB,EAAMrb,GAE5B,GAAIvB,MAAMrC,UAAUuwC,UAClB,OAAO5zC,EAAI4zC,WAAU,SAAUhlC,GAC7B,OAAOA,EAAI0T,KAAUrb,KAKzB,IAAI2F,EAAQ0D,EAAKtQ,GAAK,SAAUoB,GAC9B,OAAOA,EAAIkhB,KAAUrb,KAEvB,OAAOjH,EAAIU,QAAQkM,GAcsDgnC,CAAUF,EAAW,OAAQC,KAEvFE,SAAQ,SAAUlF,GAC3BA,EAAmB,UAErBtuB,QAAQC,KAAK,yDAEf,IAAIrd,EAAK0rC,EAAmB,UAAKA,EAAS1rC,GACtC0rC,EAASv5B,SAAWjU,EAAW8B,KAIjCof,EAAK0tB,QAAQuB,OAASxB,EAAcztB,EAAK0tB,QAAQuB,QACjDjvB,EAAK0tB,QAAQ/C,UAAY8C,EAAcztB,EAAK0tB,QAAQ/C,WAEpD3qB,EAAOpf,EAAGof,EAAMssB,OAIbtsB,EAUT,SAASyxB,IAEP,IAAIh0C,KAAKie,MAAMg2B,YAAf,CAIA,IAAI1xB,EAAO,CACTgtB,SAAUvvC,KACVu1B,OAAQ,GACR2e,YAAa,GACbtqC,WAAY,GACZuqC,SAAS,EACTlE,QAAS,IAIX1tB,EAAK0tB,QAAQ/C,UAAYwF,EAAoB1yC,KAAKie,MAAOje,KAAKwxC,OAAQxxC,KAAKktC,UAAWltC,KAAKoF,QAAQgvC,eAKnG7xB,EAAK0vB,UAAYD,EAAqBhyC,KAAKoF,QAAQ6sC,UAAW1vB,EAAK0tB,QAAQ/C,UAAWltC,KAAKwxC,OAAQxxC,KAAKktC,UAAWltC,KAAKoF,QAAQwuC,UAAUS,KAAK5C,kBAAmBzxC,KAAKoF,QAAQwuC,UAAUS,KAAKvc,SAG9LvV,EAAK+xB,kBAAoB/xB,EAAK0vB,UAE9B1vB,EAAK6xB,cAAgBp0C,KAAKoF,QAAQgvC,cAGlC7xB,EAAK0tB,QAAQuB,OAAS0B,EAAiBlzC,KAAKwxC,OAAQjvB,EAAK0tB,QAAQ/C,UAAW3qB,EAAK0vB,WAEjF1vB,EAAK0tB,QAAQuB,OAAO7e,SAAW3yB,KAAKoF,QAAQgvC,cAAgB,QAAU,WAGtE7xB,EAAOoxB,EAAa3zC,KAAK4zC,UAAWrxB,GAI/BviB,KAAKie,MAAMs2B,UAIdv0C,KAAKoF,QAAQovC,SAASjyB,IAHtBviB,KAAKie,MAAMs2B,WAAY,EACvBv0C,KAAKoF,QAAQqvC,SAASlyB,KAY1B,SAASmyB,EAAkBd,EAAWe,GACpC,OAAOf,EAAUgB,MAAK,SAAU7C,GAC9B,IAAI1sC,EAAO0sC,EAAK1sC,KAEhB,OADc0sC,EAAKz8B,SACDjQ,IAASsvC,KAW/B,SAASE,EAAyBhI,GAIhC,IAHA,IAAIiI,EAAW,EAAC,EAAO,KAAM,SAAU,MAAO,KAC1CC,EAAYlI,EAASmI,OAAO,GAAGnzB,cAAgBgrB,EAASvsC,MAAM,GAEzD6B,EAAI,EAAGA,EAAI2yC,EAASxxC,OAAQnB,IAAK,CACxC,IAAI61B,EAAS8c,EAAS3yC,GAClB8yC,EAAUjd,EAAS,GAAKA,EAAS+c,EAAYlI,EACjD,QAA4C,IAAjCjtC,SAAS0lB,KAAKhB,MAAM2wB,GAC7B,OAAOA,EAGX,OAAO,KAQT,SAASC,IAsBP,OArBAl1C,KAAKie,MAAMg2B,aAAc,EAGrBS,EAAkB10C,KAAK4zC,UAAW,gBACpC5zC,KAAKwxC,OAAOxjC,gBAAgB,eAC5BhO,KAAKwxC,OAAOltB,MAAMqO,SAAW,GAC7B3yB,KAAKwxC,OAAOltB,MAAMvU,IAAM,GACxB/P,KAAKwxC,OAAOltB,MAAMsT,KAAO,GACzB53B,KAAKwxC,OAAOltB,MAAMkO,MAAQ,GAC1BxyB,KAAKwxC,OAAOltB,MAAMwqB,OAAS,GAC3B9uC,KAAKwxC,OAAOltB,MAAM6wB,WAAa,GAC/Bn1C,KAAKwxC,OAAOltB,MAAMuwB,EAAyB,cAAgB,IAG7D70C,KAAKo1C,wBAIDp1C,KAAKoF,QAAQiwC,iBACfr1C,KAAKwxC,OAAO5uC,WAAWC,YAAY7C,KAAKwxC,QAEnCxxC,KAQT,SAASs1C,EAAU1I,GACjB,IAAI1/B,EAAgB0/B,EAAQ1/B,cAC5B,OAAOA,EAAgBA,EAAc4C,YAAc/P,OAGrD,SAASw1C,EAAsB3E,EAAcpoB,EAAOrkB,EAAUqxC,GAC5D,IAAIC,EAAmC,SAA1B7E,EAAavkC,SACtB5G,EAASgwC,EAAS7E,EAAa1jC,cAAc4C,YAAc8gC,EAC/DnrC,EAAOuK,iBAAiBwY,EAAOrkB,EAAU,CAAEuxC,SAAS,IAE/CD,GACHF,EAAsBxI,EAAgBtnC,EAAO7C,YAAa4lB,EAAOrkB,EAAUqxC,GAE7EA,EAAc70C,KAAK8E,GASrB,SAASkwC,EAAoBzI,EAAW9nC,EAAS6Y,EAAO23B,GAEtD33B,EAAM23B,YAAcA,EACpBN,EAAUpI,GAAWl9B,iBAAiB,SAAUiO,EAAM23B,YAAa,CAAEF,SAAS,IAG9E,IAAIG,EAAgB9I,EAAgBG,GAKpC,OAJAqI,EAAsBM,EAAe,SAAU53B,EAAM23B,YAAa33B,EAAMu3B,eACxEv3B,EAAM43B,cAAgBA,EACtB53B,EAAM63B,eAAgB,EAEf73B,EAST,SAAS83B,IACF/1C,KAAKie,MAAM63B,gBACd91C,KAAKie,MAAQ03B,EAAoB31C,KAAKktC,UAAWltC,KAAKoF,QAASpF,KAAKie,MAAOje,KAAKg2C,iBAkCpF,SAASZ,IAxBT,IAA8BlI,EAAWjvB,EAyBnCje,KAAKie,MAAM63B,gBACbG,qBAAqBj2C,KAAKg2C,gBAC1Bh2C,KAAKie,OA3BqBivB,EA2BQltC,KAAKktC,UA3BFjvB,EA2Baje,KAAKie,MAzBzDq3B,EAAUpI,GAAWrsB,oBAAoB,SAAU5C,EAAM23B,aAGzD33B,EAAMu3B,cAAczB,SAAQ,SAAUtuC,GACpCA,EAAOob,oBAAoB,SAAU5C,EAAM23B,gBAI7C33B,EAAM23B,YAAc,KACpB33B,EAAMu3B,cAAgB,GACtBv3B,EAAM43B,cAAgB,KACtB53B,EAAM63B,eAAgB,EACf73B,IAwBT,SAASytB,EAAUzxB,GACjB,MAAa,KAANA,IAAa0xB,MAAM3Y,WAAW/Y,KAAOwd,SAASxd,GAWvD,SAASi8B,EAAUtJ,EAASrX,GAC1Bn1B,OAAO6N,KAAKsnB,GAAQwe,SAAQ,SAAUvxB,GACpC,IAAIyC,EAAO,IAEkE,IAAzE,CAAC,QAAS,SAAU,MAAO,QAAS,SAAU,QAAQrkB,QAAQ4hB,IAAgBkpB,EAAUnW,EAAO/S,MACjGyC,EAAO,MAET2nB,EAAQtoB,MAAM9B,GAAQ+S,EAAO/S,GAAQyC,KAgIzC,IAAIkxB,GAAYlK,GAAa,WAAWx+B,KAAKy+B,UAAUG,WA8GvD,SAAS+J,GAAmBxC,EAAWyC,EAAgBC,GACrD,IAAIC,EAAa/lC,EAAKojC,GAAW,SAAU7B,GAEzC,OADWA,EAAK1sC,OACAgxC,KAGdG,IAAeD,GAAc3C,EAAUgB,MAAK,SAAU/F,GACxD,OAAOA,EAASxpC,OAASixC,GAAiBzH,EAASv5B,SAAWu5B,EAAS5X,MAAQsf,EAAWtf,SAG5F,IAAKuf,EAAY,CACf,IAAIC,EAAc,IAAMJ,EAAiB,IACrCK,EAAY,IAAMJ,EAAgB,IACtC/1B,QAAQC,KAAKk2B,EAAY,4BAA8BD,EAAc,4DAA8DA,EAAc,KAEnJ,OAAOD,EAoIT,IAAIG,GAAa,CAAC,aAAc,OAAQ,WAAY,YAAa,MAAO,UAAW,cAAe,QAAS,YAAa,aAAc,SAAU,eAAgB,WAAY,OAAQ,cAGhLC,GAAkBD,GAAWr2C,MAAM,GAYvC,SAASu2C,GAAU5E,GACjB,IAAI6E,EAAUxyC,UAAUhB,OAAS,QAAsBwC,IAAjBxB,UAAU,IAAmBA,UAAU,GAEzE6W,EAAQy7B,GAAgBh2C,QAAQqxC,GAChC/xC,EAAM02C,GAAgBt2C,MAAM6a,EAAQ,GAAG1a,OAAOm2C,GAAgBt2C,MAAM,EAAG6a,IAC3E,OAAO27B,EAAU52C,EAAI4b,UAAY5b,EAGnC,IAAI62C,GACI,OADJA,GAES,YAFTA,GAGgB,mBAiMpB,SAASC,GAAYrN,EAAQ0J,EAAeF,EAAkB8D,GAC5D,IAAIhH,EAAU,CAAC,EAAG,GAKdiH,GAA0D,IAA9C,CAAC,QAAS,QAAQt2C,QAAQq2C,GAItCE,EAAYxN,EAAOpiC,MAAM,WAAWnD,KAAI,SAAUgzC,GACpD,OAAOA,EAAKxL,UAKVyL,EAAUF,EAAUv2C,QAAQ4P,EAAK2mC,GAAW,SAAUC,GACxD,OAAgC,IAAzBA,EAAKE,OAAO,YAGjBH,EAAUE,KAAiD,IAArCF,EAAUE,GAASz2C,QAAQ,MACnD2f,QAAQC,KAAK,gFAKf,IAAI+2B,EAAa,cACbC,GAAmB,IAAbH,EAAiB,CAACF,EAAU72C,MAAM,EAAG+2C,GAAS52C,OAAO,CAAC02C,EAAUE,GAAS9vC,MAAMgwC,GAAY,KAAM,CAACJ,EAAUE,GAAS9vC,MAAMgwC,GAAY,IAAI92C,OAAO02C,EAAU72C,MAAM+2C,EAAU,KAAO,CAACF,GAqC9L,OAlCAK,EAAMA,EAAIpzC,KAAI,SAAUqzC,EAAIt8B,GAE1B,IAAIs4B,GAAyB,IAAVt4B,GAAe+7B,EAAYA,GAAa,SAAW,QAClEQ,GAAoB,EACxB,OAAOD,EAGNE,QAAO,SAAUvuC,EAAGC,GACnB,MAAwB,KAApBD,EAAEA,EAAE9F,OAAS,KAAwC,IAA3B,CAAC,IAAK,KAAK1C,QAAQyI,IAC/CD,EAAEA,EAAE9F,OAAS,GAAK+F,EAClBquC,GAAoB,EACbtuC,GACEsuC,GACTtuC,EAAEA,EAAE9F,OAAS,IAAM+F,EACnBquC,GAAoB,EACbtuC,GAEAA,EAAE3I,OAAO4I,KAEjB,IAEFjF,KAAI,SAAUwzC,GACb,OAxGN,SAAiBA,EAAKnE,EAAaJ,EAAeF,GAEhD,IAAI5rC,EAAQqwC,EAAI9qC,MAAM,6BAClB3F,GAASI,EAAM,GACf0d,EAAO1d,EAAM,GAGjB,IAAKJ,EACH,OAAOywC,EAGT,GAA0B,IAAtB3yB,EAAKrkB,QAAQ,KAAY,CAC3B,IAAIgsC,OAAU,EACd,OAAQ3nB,GACN,IAAK,KACH2nB,EAAUyG,EACV,MACF,IAAK,IACL,IAAK,KACL,QACEzG,EAAUuG,EAId,OADWnD,EAAcpD,GACb6G,GAAe,IAAMtsC,EAC5B,GAAa,OAAT8d,GAA0B,OAATA,EAQ1B,OALa,OAATA,EACKjf,KAAKkvB,IAAIt1B,SAAS+P,gBAAgBygC,aAAcrwC,OAAOoxC,aAAe,GAEtEnrC,KAAKkvB,IAAIt1B,SAAS+P,gBAAgBwgC,YAAapwC,OAAOmxC,YAAc,IAE/D,IAAM/pC,EAIpB,OAAOA,EAmEE0wC,CAAQD,EAAKnE,EAAaJ,EAAeF,UAKhDY,SAAQ,SAAU0D,EAAIt8B,GACxBs8B,EAAG1D,SAAQ,SAAUqD,EAAMU,GACrBpM,EAAU0L,KACZnH,EAAQ90B,IAAUi8B,GAA2B,MAAnBK,EAAGK,EAAS,IAAc,EAAI,UAIvD7H,EA2OT,IAkWI8H,GAAW,CAKb9F,UAAW,SAMXmC,eAAe,EAMf0B,eAAe,EAOfT,iBAAiB,EAQjBZ,SAAU,aAUVD,SAAU,aAOVZ,UAnZc,CASdvlC,MAAO,CAEL4oB,MAAO,IAEP3hB,SAAS,EAETnS,GA9HJ,SAAeof,GACb,IAAI0vB,EAAY1vB,EAAK0vB,UACjBgF,EAAgBhF,EAAU1qC,MAAM,KAAK,GACrCywC,EAAiB/F,EAAU1qC,MAAM,KAAK,GAG1C,GAAIywC,EAAgB,CAClB,IAAIC,EAAgB11B,EAAK0tB,QACrB/C,EAAY+K,EAAc/K,UAC1BsE,EAASyG,EAAczG,OAEvB0G,GAA2D,IAA9C,CAAC,SAAU,OAAOt3C,QAAQq2C,GACvCxI,EAAOyJ,EAAa,OAAS,MAC7BzE,EAAcyE,EAAa,QAAU,SAErCC,EAAe,CACjBrkC,MAAOsO,EAAe,GAAIqsB,EAAMvB,EAAUuB,IAC1CzpC,IAAKod,EAAe,GAAIqsB,EAAMvB,EAAUuB,GAAQvB,EAAUuG,GAAejC,EAAOiC,KAGlFlxB,EAAK0tB,QAAQuB,OAAS1B,EAAS,GAAI0B,EAAQ2G,EAAaH,IAG1D,OAAOz1B,IAgJPonB,OAAQ,CAEN1S,MAAO,IAEP3hB,SAAS,EAETnS,GA7RJ,SAAgBof,EAAMwvB,GACpB,IAAIpI,EAASoI,EAAKpI,OACdsI,EAAY1vB,EAAK0vB,UACjBgG,EAAgB11B,EAAK0tB,QACrBuB,EAASyG,EAAczG,OACvBtE,EAAY+K,EAAc/K,UAE1B+J,EAAgBhF,EAAU1qC,MAAM,KAAK,GAErC0oC,OAAU,EAsBd,OApBEA,EADEvE,GAAW/B,GACH,EAAEA,EAAQ,GAEVqN,GAAYrN,EAAQ6H,EAAQtE,EAAW+J,GAG7B,SAAlBA,GACFzF,EAAOzhC,KAAOkgC,EAAQ,GACtBuB,EAAO5Z,MAAQqY,EAAQ,IACI,UAAlBgH,GACTzF,EAAOzhC,KAAOkgC,EAAQ,GACtBuB,EAAO5Z,MAAQqY,EAAQ,IACI,QAAlBgH,GACTzF,EAAO5Z,MAAQqY,EAAQ,GACvBuB,EAAOzhC,KAAOkgC,EAAQ,IACK,WAAlBgH,IACTzF,EAAO5Z,MAAQqY,EAAQ,GACvBuB,EAAOzhC,KAAOkgC,EAAQ,IAGxB1tB,EAAKivB,OAASA,EACPjvB,GAkQLonB,OAAQ,GAoBVyO,gBAAiB,CAEfnhB,MAAO,IAEP3hB,SAAS,EAETnS,GAlRJ,SAAyBof,EAAMnd,GAC7B,IAAIqsC,EAAoBrsC,EAAQqsC,mBAAqBhE,EAAgBlrB,EAAKgtB,SAASiC,QAK/EjvB,EAAKgtB,SAASrC,YAAcuE,IAC9BA,EAAoBhE,EAAgBgE,IAMtC,IAAI4G,EAAgBxD,EAAyB,aACzCyD,EAAe/1B,EAAKgtB,SAASiC,OAAOltB,MACpCvU,EAAMuoC,EAAavoC,IACnB6nB,EAAO0gB,EAAa1gB,KACpB2gB,EAAYD,EAAaD,GAE7BC,EAAavoC,IAAM,GACnBuoC,EAAa1gB,KAAO,GACpB0gB,EAAaD,GAAiB,GAE9B,IAAI3G,EAAaH,EAAchvB,EAAKgtB,SAASiC,OAAQjvB,EAAKgtB,SAASrC,UAAW9nC,EAAQ0yB,QAAS2Z,EAAmBlvB,EAAK6xB,eAIvHkE,EAAavoC,IAAMA,EACnBuoC,EAAa1gB,KAAOA,EACpB0gB,EAAaD,GAAiBE,EAE9BnzC,EAAQssC,WAAaA,EAErB,IAAIza,EAAQ7xB,EAAQozC,SAChBhH,EAASjvB,EAAK0tB,QAAQuB,OAEtBt+B,EAAQ,CACViN,QAAS,SAAiB8xB,GACxB,IAAI9qC,EAAQqqC,EAAOS,GAInB,OAHIT,EAAOS,GAAaP,EAAWO,KAAe7sC,EAAQqzC,sBACxDtxC,EAAQnB,KAAKkvB,IAAIsc,EAAOS,GAAYP,EAAWO,KAE1C7vB,EAAe,GAAI6vB,EAAW9qC,IAEvCuxC,UAAW,SAAmBzG,GAC5B,IAAIsB,EAAyB,UAAdtB,EAAwB,OAAS,MAC5C9qC,EAAQqqC,EAAO+B,GAInB,OAHI/B,EAAOS,GAAaP,EAAWO,KAAe7sC,EAAQqzC,sBACxDtxC,EAAQnB,KAAK2yC,IAAInH,EAAO+B,GAAW7B,EAAWO,IAA4B,UAAdA,EAAwBT,EAAOhgB,MAAQggB,EAAO5d,UAErGxR,EAAe,GAAImxB,EAAUpsC,KAWxC,OAPA8vB,EAAM8c,SAAQ,SAAU9B,GACtB,IAAIxD,GAA+C,IAAxC,CAAC,OAAQ,OAAO7tC,QAAQqxC,GAAoB,UAAY,YACnET,EAAS1B,EAAS,GAAI0B,EAAQt+B,EAAMu7B,GAAMwD,OAG5C1vB,EAAK0tB,QAAQuB,OAASA,EAEfjvB,GA2NLi2B,SAAU,CAAC,OAAQ,QAAS,MAAO,UAOnC1gB,QAAS,EAMT2Z,kBAAmB,gBAYrBmH,aAAc,CAEZ3hB,MAAO,IAEP3hB,SAAS,EAETnS,GAlgBJ,SAAsBof,GACpB,IAAI01B,EAAgB11B,EAAK0tB,QACrBuB,EAASyG,EAAczG,OACvBtE,EAAY+K,EAAc/K,UAE1B+E,EAAY1vB,EAAK0vB,UAAU1qC,MAAM,KAAK,GACtCsxC,EAAQ7yC,KAAK6yC,MACbX,GAAuD,IAA1C,CAAC,MAAO,UAAUt3C,QAAQqxC,GACvCxD,EAAOyJ,EAAa,QAAU,SAC9BY,EAASZ,EAAa,OAAS,MAC/BzE,EAAcyE,EAAa,QAAU,SASzC,OAPI1G,EAAO/C,GAAQoK,EAAM3L,EAAU4L,MACjCv2B,EAAK0tB,QAAQuB,OAAOsH,GAAUD,EAAM3L,EAAU4L,IAAWtH,EAAOiC,IAE9DjC,EAAOsH,GAAUD,EAAM3L,EAAUuB,MACnClsB,EAAK0tB,QAAQuB,OAAOsH,GAAUD,EAAM3L,EAAUuB,KAGzClsB,IA4fPw2B,MAAO,CAEL9hB,MAAO,IAEP3hB,SAAS,EAETnS,GApxBJ,SAAeof,EAAMnd,GACnB,IAAI4zC,EAGJ,IAAK5C,GAAmB7zB,EAAKgtB,SAASqE,UAAW,QAAS,gBACxD,OAAOrxB,EAGT,IAAI02B,EAAe7zC,EAAQwnC,QAG3B,GAA4B,iBAAjBqM,GAIT,KAHAA,EAAe12B,EAAKgtB,SAASiC,OAAO0H,cAAcD,IAIhD,OAAO12B,OAKT,IAAKA,EAAKgtB,SAASiC,OAAO/oC,SAASwwC,GAEjC,OADA14B,QAAQC,KAAK,iEACN+B,EAIX,IAAI0vB,EAAY1vB,EAAK0vB,UAAU1qC,MAAM,KAAK,GACtC0wC,EAAgB11B,EAAK0tB,QACrBuB,EAASyG,EAAczG,OACvBtE,EAAY+K,EAAc/K,UAE1BgL,GAAuD,IAA1C,CAAC,OAAQ,SAASt3C,QAAQqxC,GAEvCntC,EAAMozC,EAAa,SAAW,QAC9BiB,EAAkBjB,EAAa,MAAQ,OACvCzJ,EAAO0K,EAAgB1xC,cACvB2xC,EAAUlB,EAAa,OAAS,MAChCY,EAASZ,EAAa,SAAW,QACjCmB,EAAmBzG,EAAcqG,GAAcn0C,GAQ/CooC,EAAU4L,GAAUO,EAAmB7H,EAAO/C,KAChDlsB,EAAK0tB,QAAQuB,OAAO/C,IAAS+C,EAAO/C,IAASvB,EAAU4L,GAAUO,IAG/DnM,EAAUuB,GAAQ4K,EAAmB7H,EAAOsH,KAC9Cv2B,EAAK0tB,QAAQuB,OAAO/C,IAASvB,EAAUuB,GAAQ4K,EAAmB7H,EAAOsH,IAE3Ev2B,EAAK0tB,QAAQuB,OAASxB,EAAcztB,EAAK0tB,QAAQuB,QAGjD,IAAI8H,EAASpM,EAAUuB,GAAQvB,EAAUpoC,GAAO,EAAIu0C,EAAmB,EAInE70B,EAAMmoB,EAAyBpqB,EAAKgtB,SAASiC,QAC7C+H,EAAmBvmB,WAAWxO,EAAI,SAAW20B,IAC7CK,EAAmBxmB,WAAWxO,EAAI,SAAW20B,EAAkB,UAC/DM,EAAYH,EAAS/2B,EAAK0tB,QAAQuB,OAAO/C,GAAQ8K,EAAmBC,EAQxE,OALAC,EAAYzzC,KAAKkvB,IAAIlvB,KAAK2yC,IAAInH,EAAO1sC,GAAOu0C,EAAkBI,GAAY,GAE1El3B,EAAK02B,aAAeA,EACpB12B,EAAK0tB,QAAQ8I,OAAmC32B,EAA1B42B,EAAsB,GAAwCvK,EAAMzoC,KAAK+sB,MAAM0mB,IAAar3B,EAAe42B,EAAqBI,EAAS,IAAKJ,GAE7Jz2B,GA8sBLqqB,QAAS,aAcXyH,KAAM,CAEJpd,MAAO,IAEP3hB,SAAS,EAETnS,GA5oBJ,SAAcof,EAAMnd,GAElB,GAAIsvC,EAAkBnyB,EAAKgtB,SAASqE,UAAW,SAC7C,OAAOrxB,EAGT,GAAIA,EAAK4xB,SAAW5xB,EAAK0vB,YAAc1vB,EAAK+xB,kBAE1C,OAAO/xB,EAGT,IAAImvB,EAAaH,EAAchvB,EAAKgtB,SAASiC,OAAQjvB,EAAKgtB,SAASrC,UAAW9nC,EAAQ0yB,QAAS1yB,EAAQqsC,kBAAmBlvB,EAAK6xB,eAE3HnC,EAAY1vB,EAAK0vB,UAAU1qC,MAAM,KAAK,GACtCmyC,EAAoBzG,EAAqBhB,GACzCQ,EAAYlwB,EAAK0vB,UAAU1qC,MAAM,KAAK,IAAM,GAE5CoyC,EAAY,GAEhB,OAAQv0C,EAAQw0C,UACd,KAAK7C,GACH4C,EAAY,CAAC1H,EAAWyH,GACxB,MACF,KAAK3C,GACH4C,EAAY9C,GAAU5E,GACtB,MACF,KAAK8E,GACH4C,EAAY9C,GAAU5E,GAAW,GACjC,MACF,QACE0H,EAAYv0C,EAAQw0C,SAyDxB,OAtDAD,EAAU5F,SAAQ,SAAUpb,EAAMxd,GAChC,GAAI82B,IAActZ,GAAQghB,EAAUr2C,SAAW6X,EAAQ,EACrD,OAAOoH,EAGT0vB,EAAY1vB,EAAK0vB,UAAU1qC,MAAM,KAAK,GACtCmyC,EAAoBzG,EAAqBhB,GAEzC,IAAIoB,EAAgB9wB,EAAK0tB,QAAQuB,OAC7BqI,EAAat3B,EAAK0tB,QAAQ/C,UAG1B2L,EAAQ7yC,KAAK6yC,MACbiB,EAA4B,SAAd7H,GAAwB4G,EAAMxF,EAAc7gB,OAASqmB,EAAMgB,EAAWjiB,OAAuB,UAAdqa,GAAyB4G,EAAMxF,EAAczb,MAAQihB,EAAMgB,EAAWrnB,QAAwB,QAAdyf,GAAuB4G,EAAMxF,EAAcvE,QAAU+J,EAAMgB,EAAW9pC,MAAsB,WAAdkiC,GAA0B4G,EAAMxF,EAActjC,KAAO8oC,EAAMgB,EAAW/K,QAEjUiL,EAAgBlB,EAAMxF,EAAczb,MAAQihB,EAAMnH,EAAW9Z,MAC7DoiB,EAAiBnB,EAAMxF,EAAc7gB,OAASqmB,EAAMnH,EAAWlf,OAC/DynB,EAAepB,EAAMxF,EAActjC,KAAO8oC,EAAMnH,EAAW3hC,KAC3DmqC,EAAkBrB,EAAMxF,EAAcvE,QAAU+J,EAAMnH,EAAW5C,QAEjEqL,EAAoC,SAAdlI,GAAwB8H,GAA+B,UAAd9H,GAAyB+H,GAAgC,QAAd/H,GAAuBgI,GAA8B,WAAdhI,GAA0BiI,EAG3KhC,GAAuD,IAA1C,CAAC,MAAO,UAAUt3C,QAAQqxC,GAGvCmI,IAA0Bh1C,EAAQi1C,iBAAmBnC,GAA4B,UAAdzF,GAAyBsH,GAAiB7B,GAA4B,QAAdzF,GAAuBuH,IAAmB9B,GAA4B,UAAdzF,GAAyBwH,IAAiB/B,GAA4B,QAAdzF,GAAuByH,GAGlQI,IAA8Bl1C,EAAQm1C,0BAA4BrC,GAA4B,UAAdzF,GAAyBuH,GAAkB9B,GAA4B,QAAdzF,GAAuBsH,IAAkB7B,GAA4B,UAAdzF,GAAyByH,IAAoBhC,GAA4B,QAAdzF,GAAuBwH,GAElRO,EAAmBJ,GAAyBE,GAE5CR,GAAeK,GAAuBK,KAExCj4B,EAAK4xB,SAAU,GAEX2F,GAAeK,KACjBlI,EAAY0H,EAAUx+B,EAAQ,IAG5Bq/B,IACF/H,EAvJR,SAA8BA,GAC5B,MAAkB,QAAdA,EACK,QACgB,UAAdA,EACF,MAEFA,EAiJWgI,CAAqBhI,IAGnClwB,EAAK0vB,UAAYA,GAAaQ,EAAY,IAAMA,EAAY,IAI5DlwB,EAAK0tB,QAAQuB,OAAS1B,EAAS,GAAIvtB,EAAK0tB,QAAQuB,OAAQ0B,EAAiB3wB,EAAKgtB,SAASiC,OAAQjvB,EAAK0tB,QAAQ/C,UAAW3qB,EAAK0vB,YAE5H1vB,EAAOoxB,EAAapxB,EAAKgtB,SAASqE,UAAWrxB,EAAM,YAGhDA,GA4jBLq3B,SAAU,OAKV9hB,QAAS,EAOT2Z,kBAAmB,WAQnB4I,gBAAgB,EAQhBE,yBAAyB,GAU3BG,MAAO,CAELzjB,MAAO,IAEP3hB,SAAS,EAETnS,GArQJ,SAAeof,GACb,IAAI0vB,EAAY1vB,EAAK0vB,UACjBgF,EAAgBhF,EAAU1qC,MAAM,KAAK,GACrC0wC,EAAgB11B,EAAK0tB,QACrBuB,EAASyG,EAAczG,OACvBtE,EAAY+K,EAAc/K,UAE1BoG,GAAwD,IAA9C,CAAC,OAAQ,SAAS1yC,QAAQq2C,GAEpC0D,GAA6D,IAA5C,CAAC,MAAO,QAAQ/5C,QAAQq2C,GAO7C,OALAzF,EAAO8B,EAAU,OAAS,OAASpG,EAAU+J,IAAkB0D,EAAiBnJ,EAAO8B,EAAU,QAAU,UAAY,GAEvH/wB,EAAK0vB,UAAYgB,EAAqBhB,GACtC1vB,EAAK0tB,QAAQuB,OAASxB,EAAcwB,GAE7BjvB,IAkQPmD,KAAM,CAEJuR,MAAO,IAEP3hB,SAAS,EAETnS,GA9TJ,SAAcof,GACZ,IAAK6zB,GAAmB7zB,EAAKgtB,SAASqE,UAAW,OAAQ,mBACvD,OAAOrxB,EAGT,IAAI2vB,EAAU3vB,EAAK0tB,QAAQ/C,UACvB0N,EAAQpqC,EAAK+R,EAAKgtB,SAASqE,WAAW,SAAU/E,GAClD,MAAyB,oBAAlBA,EAASxpC,QACfqsC,WAEH,GAAIQ,EAAQpD,OAAS8L,EAAM7qC,KAAOmiC,EAAQta,KAAOgjB,EAAMpoB,OAAS0f,EAAQniC,IAAM6qC,EAAM9L,QAAUoD,EAAQ1f,MAAQooB,EAAMhjB,KAAM,CAExH,IAAkB,IAAdrV,EAAKmD,KACP,OAAOnD,EAGTA,EAAKmD,MAAO,EACZnD,EAAK3Y,WAAW,uBAAyB,OACpC,CAEL,IAAkB,IAAd2Y,EAAKmD,KACP,OAAOnD,EAGTA,EAAKmD,MAAO,EACZnD,EAAK3Y,WAAW,wBAAyB,EAG3C,OAAO2Y,IAoTPs4B,aAAc,CAEZ5jB,MAAO,IAEP3hB,SAAS,EAETnS,GAtgCJ,SAAsBof,EAAMnd,GAC1B,IAAIytC,EAAIztC,EAAQytC,EACZE,EAAI3tC,EAAQ2tC,EACZvB,EAASjvB,EAAK0tB,QAAQuB,OAItBsJ,EAA8BtqC,EAAK+R,EAAKgtB,SAASqE,WAAW,SAAU/E,GACxE,MAAyB,eAAlBA,EAASxpC,QACf01C,qBACiCj1C,IAAhCg1C,GACFv6B,QAAQC,KAAK,iIAEf,IAAIu6B,OAAkDj1C,IAAhCg1C,EAA4CA,EAA8B11C,EAAQ21C,gBAEpGtQ,EAAegD,EAAgBlrB,EAAKgtB,SAASiC,QAC7CwJ,EAAmBtjB,EAAsB+S,GAGzClV,EAAS,CACX5C,SAAU6e,EAAO7e,UAGfsd,EA9DN,SAA2B1tB,EAAM04B,GAC/B,IAAIhD,EAAgB11B,EAAK0tB,QACrBuB,EAASyG,EAAczG,OACvBtE,EAAY+K,EAAc/K,UAC1Bna,EAAQ/sB,KAAK+sB,MACb8lB,EAAQ7yC,KAAK6yC,MAEbqC,EAAU,SAAiBj/B,GAC7B,OAAOA,GAGLk/B,EAAiBpoB,EAAMma,EAAU1b,OACjC4pB,EAAcroB,EAAMye,EAAOhgB,OAE3B0mB,GAA4D,IAA/C,CAAC,OAAQ,SAASt3C,QAAQ2hB,EAAK0vB,WAC5CoJ,GAA+C,IAAjC94B,EAAK0vB,UAAUrxC,QAAQ,KAIrC06C,EAAuBL,EAAwB/C,GAAcmD,GAH3CF,EAAiB,GAAMC,EAAc,EAGuCroB,EAAQ8lB,EAAjEqC,EACrCK,EAAqBN,EAAwBloB,EAAVmoB,EAEvC,MAAO,CACLtjB,KAAM0jB,EANWH,EAAiB,GAAM,GAAKC,EAAc,GAAM,IAMtBC,GAAeJ,EAAczJ,EAAO5Z,KAAO,EAAI4Z,EAAO5Z,MACjG7nB,IAAKwrC,EAAkB/J,EAAOzhC,KAC9B++B,OAAQyM,EAAkB/J,EAAO1C,QACjCtc,MAAO8oB,EAAoB9J,EAAOhf,QAoCtBgpB,CAAkBj5B,EAAMxiB,OAAO07C,iBAAmB,IAAMtF,IAElElH,EAAc,WAAN4D,EAAiB,MAAQ,SACjC3D,EAAc,UAAN6D,EAAgB,OAAS,QAKjC2I,EAAmB7G,EAAyB,aAW5Cjd,OAAO,EACP7nB,OAAM,EAqBV,GAhBIA,EAJU,WAAVk/B,EAG4B,SAA1BxE,EAAap+B,UACRo+B,EAAa2F,aAAeH,EAAQnB,QAEpCkM,EAAiBpnB,OAASqc,EAAQnB,OAGrCmB,EAAQlgC,IAIZ6nB,EAFU,UAAVsX,EAC4B,SAA1BzE,EAAap+B,UACPo+B,EAAa0F,YAAcF,EAAQzd,OAEnCwoB,EAAiBxpB,MAAQye,EAAQzd,MAGpCyd,EAAQrY,KAEbmjB,GAAmBW,EACrBnmB,EAAOmmB,GAAoB,eAAiB9jB,EAAO,OAAS7nB,EAAM,SAClEwlB,EAAO0Z,GAAS,EAChB1Z,EAAO2Z,GAAS,EAChB3Z,EAAO4f,WAAa,gBACf,CAEL,IAAIwG,EAAsB,WAAV1M,GAAsB,EAAI,EACtC2M,EAAuB,UAAV1M,GAAqB,EAAI,EAC1C3Z,EAAO0Z,GAASl/B,EAAM4rC,EACtBpmB,EAAO2Z,GAAStX,EAAOgkB,EACvBrmB,EAAO4f,WAAalG,EAAQ,KAAOC,EAIrC,IAAItlC,EAAa,CACf,cAAe2Y,EAAK0vB,WAQtB,OAJA1vB,EAAK3Y,WAAakmC,EAAS,GAAIlmC,EAAY2Y,EAAK3Y,YAChD2Y,EAAKgT,OAASua,EAAS,GAAIva,EAAQhT,EAAKgT,QACxChT,EAAK2xB,YAAcpE,EAAS,GAAIvtB,EAAK0tB,QAAQ8I,MAAOx2B,EAAK2xB,aAElD3xB,GAo7BLw4B,iBAAiB,EAMjBlI,EAAG,SAMHE,EAAG,SAkBL8I,WAAY,CAEV5kB,MAAO,IAEP3hB,SAAS,EAETnS,GAzpCJ,SAAoBof,GApBpB,IAAuBqqB,EAAShjC,EAoC9B,OAXAssC,EAAU3zB,EAAKgtB,SAASiC,OAAQjvB,EAAKgT,QAzBhBqX,EA6BPrqB,EAAKgtB,SAASiC,OA7BE5nC,EA6BM2Y,EAAK3Y,WA5BzCxJ,OAAO6N,KAAKrE,GAAYmqC,SAAQ,SAAUvxB,IAE1B,IADF5Y,EAAW4Y,GAErBoqB,EAAQnqC,aAAa+f,EAAM5Y,EAAW4Y,IAEtCoqB,EAAQ5+B,gBAAgBwU,MA0BxBD,EAAK02B,cAAgB74C,OAAO6N,KAAKsU,EAAK2xB,aAAa5wC,QACrD4yC,EAAU3zB,EAAK02B,aAAc12B,EAAK2xB,aAG7B3xB,GA2oCLu5B,OA9nCJ,SAA0B5O,EAAWsE,EAAQpsC,EAAS22C,EAAiB99B,GAErE,IAAIk1B,EAAmBT,EAAoBz0B,EAAOuzB,EAAQtE,EAAW9nC,EAAQgvC,eAKzEnC,EAAYD,EAAqB5sC,EAAQ6sC,UAAWkB,EAAkB3B,EAAQtE,EAAW9nC,EAAQwuC,UAAUS,KAAK5C,kBAAmBrsC,EAAQwuC,UAAUS,KAAKvc,SAQ9J,OANA0Z,EAAO/uC,aAAa,cAAewvC,GAInCiE,EAAU1E,EAAQ,CAAE7e,SAAUvtB,EAAQgvC,cAAgB,QAAU,aAEzDhvC,GAsnCL21C,qBAAiBj1C,KAuGjBk2C,GAAS,WASX,SAASA,EAAO9O,EAAWsE,GACzB,IAAIyK,EAAQj8C,KAERoF,EAAUd,UAAUhB,OAAS,QAAsBwC,IAAjBxB,UAAU,GAAmBA,UAAU,GAAK,GAClFgrC,EAAetvC,KAAMg8C,GAErBh8C,KAAKg2C,eAAiB,WACpB,OAAOtc,sBAAsBuiB,EAAMjI,SAIrCh0C,KAAKg0C,OAAS1H,EAAStsC,KAAKg0C,OAAOhZ,KAAKh7B,OAGxCA,KAAKoF,QAAU0qC,EAAS,GAAIkM,EAAOjE,SAAU3yC,GAG7CpF,KAAKie,MAAQ,CACXg2B,aAAa,EACbM,WAAW,EACXiB,cAAe,IAIjBx1C,KAAKktC,UAAYA,GAAaA,EAAU1pC,OAAS0pC,EAAU,GAAKA,EAChEltC,KAAKwxC,OAASA,GAAUA,EAAOhuC,OAASguC,EAAO,GAAKA,EAGpDxxC,KAAKoF,QAAQwuC,UAAY,GACzBxzC,OAAO6N,KAAK6hC,EAAS,GAAIkM,EAAOjE,SAASnE,UAAWxuC,EAAQwuC,YAAYG,SAAQ,SAAU1uC,GACxF42C,EAAM72C,QAAQwuC,UAAUvuC,GAAQyqC,EAAS,GAAIkM,EAAOjE,SAASnE,UAAUvuC,IAAS,GAAID,EAAQwuC,UAAYxuC,EAAQwuC,UAAUvuC,GAAQ,OAIpIrF,KAAK4zC,UAAYxzC,OAAO6N,KAAKjO,KAAKoF,QAAQwuC,WAAWxvC,KAAI,SAAUiB,GACjE,OAAOyqC,EAAS,CACdzqC,KAAMA,GACL42C,EAAM72C,QAAQwuC,UAAUvuC,OAG5BJ,MAAK,SAAUmE,EAAGC,GACjB,OAAOD,EAAE6tB,MAAQ5tB,EAAE4tB,SAOrBj3B,KAAK4zC,UAAUG,SAAQ,SAAUgI,GAC3BA,EAAgBzmC,SAAWjU,EAAW06C,EAAgBD,SACxDC,EAAgBD,OAAOG,EAAM/O,UAAW+O,EAAMzK,OAAQyK,EAAM72C,QAAS22C,EAAiBE,EAAMh+B,UAKhGje,KAAKg0C,SAEL,IAAI8B,EAAgB91C,KAAKoF,QAAQ0wC,cAC7BA,GAEF91C,KAAK+1C,uBAGP/1C,KAAKie,MAAM63B,cAAgBA,EAqD7B,OA9CArG,EAAYuM,EAAQ,CAAC,CACnB7tC,IAAK,SACLhH,MAAO,WACL,OAAO6sC,EAAO7yC,KAAKnB,QAEpB,CACDmO,IAAK,UACLhH,MAAO,WACL,OAAO+tC,EAAQ/zC,KAAKnB,QAErB,CACDmO,IAAK,uBACLhH,MAAO,WACL,OAAO4uC,EAAqB50C,KAAKnB,QAElC,CACDmO,IAAK,wBACLhH,MAAO,WACL,OAAOiuC,EAAsBj0C,KAAKnB,UA4B/Bg8C,EA7HI,GAqJbA,GAAOE,OAA2B,oBAAXn8C,OAAyBA,OAASN,QAAQ08C,YACjEH,GAAOrF,WAAaA,GACpBqF,GAAOjE,SAAWA;;;;;;2BC3iFCqE,EAASrQ,EAAGiQ,GAE7B,SAASK,EAAuB5vC,GAAK,OAAOA,GAAkB,iBAANA,GAAkB,YAAaA,EAAIA,EAAI,CAAE6vC,QAAW7vC,GAE5G,IAAI8vC,EAA0BF,EAAsBtQ,GAChDyQ,EAA+BH,EAAsBL,GAEzD,SAASS,EAAkBh3C,EAAQqmB,GACjC,IAAK,IAAI3pB,EAAI,EAAGA,EAAI2pB,EAAMxoB,OAAQnB,IAAK,CACrC,IAAIwtC,EAAa7jB,EAAM3pB,GACvBwtC,EAAWrkB,WAAaqkB,EAAWrkB,aAAc,EACjDqkB,EAAWttB,cAAe,EACtB,UAAWstB,IAAYA,EAAWnkB,UAAW,GACjDprB,OAAOgiB,eAAe3c,EAAQkqC,EAAWxhC,IAAKwhC,IAIlD,SAAS+M,EAAalN,EAAaI,EAAYC,GAG7C,OAFID,GAAY6M,EAAkBjN,EAAYjsC,UAAWqsC,GACrDC,GAAa4M,EAAkBjN,EAAaK,GACzCL,EAGT,SAASM,IAeP,OAdAA,EAAW1vC,OAAO2vC,QAAU,SAAUtqC,GACpC,IAAK,IAAItD,EAAI,EAAGA,EAAImC,UAAUhB,OAAQnB,IAAK,CACzC,IAAI4hB,EAASzf,UAAUnC,GAEvB,IAAK,IAAIgM,KAAO4V,EACV3jB,OAAOmD,UAAUvC,eAAeG,KAAK4iB,EAAQ5V,KAC/C1I,EAAO0I,GAAO4V,EAAO5V,IAK3B,OAAO1I,IAGO/E,MAAMV,KAAMsE,WAG9B,SAASq4C,EAAeC,EAAUC,GAChCD,EAASr5C,UAAYnD,OAAOypB,OAAOgzB,EAAWt5C,WAC9Cq5C,EAASr5C,UAAUE,YAAcm5C,EACjCA,EAASE,UAAYD,EAevB,IAAIE,EAAiB,gBACjBC,EAAU,IACVC,EAA0B,IAE9B,SAASn6C,EAAOxB,GACd,OAAIA,MAAAA,EACK,GAAKA,EAGP,GAAGR,SAASK,KAAKG,GAAKwL,MAAM,eAAe,GAAGrF,cAGvD,SAASy1C,IACP,MAAO,CACLjzB,SAAU8yB,EACVj0B,aAAci0B,EACdjzB,OAAQ,SAAgBtB,GACtB,GAAI+zB,EAAoB,QAAE/zB,EAAM/iB,QAAQsU,GAAG/Z,MACzC,OAAOwoB,EAAMgB,UAAU7a,QAAQjO,MAAMV,KAAMsE,aAQnD,SAAS64C,EAAsB1kB,GAC7B,IAAIwjB,EAAQj8C,KAERwsC,GAAS,EASb,OARA+P,EAAoB,QAAEv8C,MAAMsoB,IAAI80B,EAAKL,gBAAgB,WACnDvQ,GAAS,KAEX5sB,YAAW,WACJ4sB,GACH4Q,EAAKC,qBAAqBpB,KAE3BxjB,GACIz4B,KAGT,SAASs9C,IACPf,EAAoB,QAAEp5C,GAAGo6C,qBAAuBJ,EAChDZ,EAAoB,QAAE/zB,MAAMvJ,QAAQm+B,EAAKL,gBAAkBG,IAS7D,IAAIE,EAAO,CACTL,eAAgB,kBAChBS,OAAQ,SAAgBxlB,GACtB,GACEA,MAAahyB,KAAKC,SAAW+2C,SACtBp9C,SAASwN,eAAe4qB,IAEjC,OAAOA,GAETylB,uBAAwB,SAAgC7Q,GACtD,IAAI3pC,EAAW2pC,EAAQpqC,aAAa,eAEpC,IAAKS,GAAyB,MAAbA,EAAkB,CACjC,IAAIy6C,EAAW9Q,EAAQpqC,aAAa,QACpCS,EAAWy6C,GAAyB,MAAbA,EAAmBA,EAAS9R,OAAS,GAG9D,IACE,OAAOhsC,SAASs5C,cAAcj2C,GAAYA,EAAW,KACrD,MAAO6Z,GACP,OAAO,OAGX6gC,iCAAkC,SAA0C/Q,GAC1E,IAAKA,EACH,OAAO,EAIT,IAAIgR,EAAqBrB,EAAoB,QAAE3P,GAASpoB,IAAI,uBACxDq5B,EAAkBtB,EAAoB,QAAE3P,GAASpoB,IAAI,oBACrDs5B,EAA0B9qB,WAAW4qB,GACrCG,EAAuB/qB,WAAW6qB,GAEtC,OAAKC,GAA4BC,GAKjCH,EAAqBA,EAAmBr2C,MAAM,KAAK,GACnDs2C,EAAkBA,EAAgBt2C,MAAM,KAAK,IACrCyrB,WAAW4qB,GAAsB5qB,WAAW6qB,IAAoBZ,GAN/D,GAQXe,OAAQ,SAAgBpR,GACtB,OAAOA,EAAQ5Y,cAEjBqpB,qBAAsB,SAA8BzQ,GAClD2P,EAAoB,QAAE3P,GAAS1jB,QAAQ6zB,IAEzCkB,sBAAuB,WACrB,OAAOC,QAAQnB,IAEjBoB,UAAW,SAAmB78C,GAC5B,OAAQA,EAAI,IAAMA,GAAKC,UAEzB68C,gBAAiB,SAAyBC,EAAeC,EAAQC,GAC/D,IAAK,IAAI1R,KAAY0R,EACnB,GAAIn+C,OAAOmD,UAAUvC,eAAeG,KAAKo9C,EAAa1R,GAAW,CAC/D,IAAI2R,EAAgBD,EAAY1R,GAC5B1lC,EAAQm3C,EAAOzR,GACf4R,EAAYt3C,GAASi2C,EAAKe,UAAUh3C,GAAS,UAAYrE,EAAOqE,GAEpE,IAAK,IAAI4C,OAAOy0C,GAAe/wC,KAAKgxC,GAClC,MAAM,IAAI3+C,MAAMu+C,EAAcx8B,cAAdw8B,aAAoDxR,EAAW,oBAAwB4R,EAAvFJ,wBAAsIG,EAAgB,QAK9KE,eAAgB,SAAwB9R,GACtC,IAAKhtC,SAAS+P,gBAAgBgvC,aAC5B,OAAO,KAIT,GAAmC,mBAAxB/R,EAAQxoB,YAA4B,CAC7C,IAAIpP,EAAO43B,EAAQxoB,cACnB,OAAOpP,aAAgB4pC,WAAa5pC,EAAO,KAG7C,OAAI43B,aAAmBgS,WACdhS,EAIJA,EAAQhqC,WAINw6C,EAAKsB,eAAe9R,EAAQhqC,YAH1B,MAKXi8C,gBAAiB,WACf,QAAqC,IAA1BtC,EAAoB,QAC7B,MAAM,IAAIn9B,UAAU,kGAGtB,IAAIrc,EAAUw5C,EAAoB,QAAEp5C,GAAGK,OAAO+D,MAAM,KAAK,GAAGA,MAAM,KAC9Du3C,EAAW,EACXC,EAAU,EACVC,EAAW,EACXC,EAAW,EACXC,EAAW,EAEf,GAAIn8C,EAAQ,GAAKg8C,GAAWh8C,EAAQ,GAAKi8C,GAAYj8C,EAAQ,KAAO+7C,GAAY/7C,EAAQ,KAAOi8C,GAAYj8C,EAAQ,GAAKk8C,GAAYl8C,EAAQ,IAAMm8C,EAChJ,MAAM,IAAIp/C,MAAM,iFAItBs9C,EAAKyB,kBACLvB,IAQA,IAAI6B,EAAO,QACPC,EAAU,QACVC,EAAW,WACXC,EAAY,IAAMD,EAClBE,EAAe,YACfC,EAAqBjD,EAAoB,QAAEp5C,GAAGg8C,GAC9CM,EAAmB,yBACnBC,EAAc,QAAUJ,EACxBK,EAAe,SAAWL,EAC1BM,EAAuB,QAAUN,EAAYC,EAC7CM,EAAmB,QACnBC,EAAkB,OAClBC,EAAkB,OAOlBC,EAAqB,WACvB,SAASA,EAAMpT,GACb5sC,KAAKigD,SAAWrT,EAIlB,IAAIsT,EAASF,EAAMz8C,UAqGnB,OAlGA28C,EAAOC,MAAQ,SAAevT,GAC5B,IAAIwT,EAAcpgD,KAAKigD,SAEnBrT,IACFwT,EAAcpgD,KAAKqgD,gBAAgBzT,IAGnB5sC,KAAKsgD,mBAAmBF,GAE1Br0B,sBAIhB/rB,KAAKugD,eAAeH,IAGtBF,EAAOM,QAAU,WACfjE,EAAoB,QAAEr5B,WAAWljB,KAAKigD,SAAUZ,GAChDr/C,KAAKigD,SAAW,MAIlBC,EAAOG,gBAAkB,SAAyBzT,GAChD,IAAI3pC,EAAWm6C,EAAKK,uBAAuB7Q,GACvC74B,GAAS,EAUb,OARI9Q,IACF8Q,EAASnU,SAASs5C,cAAcj2C,IAG7B8Q,IACHA,EAASwoC,EAAoB,QAAE3P,GAAS1xB,QAAQ,IAAM2kC,GAAkB,IAGnE9rC,GAGTmsC,EAAOI,mBAAqB,SAA4B1T,GACtD,IAAI6T,EAAalE,EAAoB,QAAEpzB,MAAMu2B,GAE7C,OADAnD,EAAoB,QAAE3P,GAAS1jB,QAAQu3B,GAChCA,GAGTP,EAAOK,eAAiB,SAAwB3T,GAC9C,IAAIqP,EAAQj8C,KAIZ,GAFAu8C,EAAoB,QAAE3P,GAAS5N,YAAY+gB,GAEtCxD,EAAoB,QAAE3P,GAASvN,SAASygB,GAA7C,CAMA,IAAIlC,EAAqBR,EAAKO,iCAAiC/Q,GAC/D2P,EAAoB,QAAE3P,GAAStkB,IAAI80B,EAAKL,gBAAgB,SAAUv0B,GAChE,OAAOyzB,EAAMyE,gBAAgB9T,EAASpkB,MACrC+0B,qBAAqBK,QARtB59C,KAAK0gD,gBAAgB9T,IAWzBsT,EAAOQ,gBAAkB,SAAyB9T,GAChD2P,EAAoB,QAAE3P,GAAS3c,SAAS/G,QAAQy2B,GAAcjiC,UAIhEsiC,EAAMW,iBAAmB,SAA0BrC,GACjD,OAAOt+C,KAAKkE,MAAK,WACf,IAAI08C,EAAWrE,EAAoB,QAAEv8C,MACjCuiB,EAAOq+B,EAASr+B,KAAK88B,GAEpB98B,IACHA,EAAO,IAAIy9B,EAAMhgD,MACjB4gD,EAASr+B,KAAK88B,EAAU98B,IAGX,UAAX+7B,GACF/7B,EAAK+7B,GAAQt+C,UAKnBggD,EAAMa,eAAiB,SAAwBC,GAC7C,OAAO,SAAUt4B,GACXA,GACFA,EAAMS,iBAGR63B,EAAcX,MAAMngD,QAIxB08C,EAAasD,EAAO,KAAM,CAAC,CACzB7xC,IAAK,UACLxK,IAAK,WACH,OAAOy7C,MAIJY,EA3GgB,GAoHzBzD,EAAoB,QAAE38C,UAAUwoB,GAAGw3B,EAAsBH,EAAkBO,EAAMa,eAAe,IAAIb,IAOpGzD,EAAoB,QAAEp5C,GAAGg8C,GAAQa,EAAMW,iBACvCpE,EAAoB,QAAEp5C,GAAGg8C,GAAM3P,YAAcwQ,EAE7CzD,EAAoB,QAAEp5C,GAAGg8C,GAAMnT,WAAa,WAE1C,OADAuQ,EAAoB,QAAEp5C,GAAGg8C,GAAQK,EAC1BQ,EAAMW,kBASf,IAAII,EAAS,SACTC,EAAY,QACZC,EAAa,YACbC,EAAc,IAAMD,EACpBE,EAAiB,YACjBC,EAAuB7E,EAAoB,QAAEp5C,GAAG49C,GAChDM,EAAoB,SACpBC,EAAoB,MACpBC,EAAmB,QACnBC,EAA8B,0BAC9BC,EAAwB,0BACxBC,EAAuB,yBACvBC,EAAgC,+BAChCC,EAAiB,6BACjBC,EAAkB,UAClBC,EAAkB,OAClBC,EAAyB,QAAUb,EAAcC,EACjDa,EAA4B,QAAUd,EAAcC,EAAxB,QAAyDD,EAAcC,EACnGc,EAAsB,OAASf,EAAcC,EAO7Ce,EAAsB,WACxB,SAASA,EAAOtV,GACd5sC,KAAKigD,SAAWrT,EAChB5sC,KAAKmiD,0BAA2B,EAIlC,IAAIjC,EAASgC,EAAO3+C,UAkFpB,OA/EA28C,EAAOv6B,OAAS,WACd,IAAIy8B,GAAqB,EACrBC,GAAiB,EACjBjC,EAAc7D,EAAoB,QAAEv8C,KAAKigD,UAAU/kC,QAAQumC,GAAuB,GAEtF,GAAIrB,EAAa,CACf,IAAIxvC,EAAQ5Q,KAAKigD,SAAS/G,cAAc0I,GAExC,GAAIhxC,EAAO,CACT,GAAmB,UAAfA,EAAMjP,KACR,GAAIiP,EAAM2E,SAAWvV,KAAKigD,SAASqC,UAAU75C,SAAS44C,GACpDe,GAAqB,MAChB,CACL,IAAIltC,EAAgBkrC,EAAYlH,cAAc2I,GAE1C3sC,GACFqnC,EAAoB,QAAErnC,GAAe8pB,YAAYqiB,GAKnDe,IAEiB,aAAfxxC,EAAMjP,MAAsC,UAAfiP,EAAMjP,OACrCiP,EAAM2E,SAAWvV,KAAKigD,SAASqC,UAAU75C,SAAS44C,IAG/CrhD,KAAKmiD,0BACR5F,EAAoB,QAAE3rC,GAAOsY,QAAQ,WAIzCtY,EAAMqE,QACNotC,GAAiB,GAIfriD,KAAKigD,SAASsC,aAAa,aAAeviD,KAAKigD,SAASqC,UAAU75C,SAAS,cAC3E45C,GACFriD,KAAKigD,SAASx9C,aAAa,gBAAiBzC,KAAKigD,SAASqC,UAAU75C,SAAS44C,IAG3Ee,GACF7F,EAAoB,QAAEv8C,KAAKigD,UAAUhhB,YAAYoiB,KAKvDnB,EAAOM,QAAU,WACfjE,EAAoB,QAAEr5B,WAAWljB,KAAKigD,SAAUgB,GAChDjhD,KAAKigD,SAAW,MAIlBiC,EAAOvB,iBAAmB,SAA0BrC,EAAQkE,GAC1D,OAAOxiD,KAAKkE,MAAK,WACf,IAAI08C,EAAWrE,EAAoB,QAAEv8C,MACjCuiB,EAAOq+B,EAASr+B,KAAK0+B,GAEpB1+B,IACHA,EAAO,IAAI2/B,EAAOliD,MAClB4gD,EAASr+B,KAAK0+B,EAAY1+B,IAG5BA,EAAK4/B,yBAA2BK,EAEjB,WAAXlE,GACF/7B,EAAK+7B,SAKX5B,EAAawF,EAAQ,KAAM,CAAC,CAC1B/zC,IAAK,UACLxK,IAAK,WACH,OAAOq9C,MAIJkB,EAzFiB,GAkG1B3F,EAAoB,QAAE38C,UAAUwoB,GAAG25B,EAAwBP,GAA6B,SAAUh5B,GAChG,IAAI5S,EAAS4S,EAAM/iB,OACfg9C,EAAgB7sC,EAMpB,GAJK2mC,EAAoB,QAAE3mC,GAAQypB,SAASiiB,KAC1C1rC,EAAS2mC,EAAoB,QAAE3mC,GAAQsF,QAAQ4mC,GAAiB,KAG7DlsC,GAAUA,EAAO2sC,aAAa,aAAe3sC,EAAO0sC,UAAU75C,SAAS,YAC1E+f,EAAMS,qBACD,CACL,IAAIy5B,EAAW9sC,EAAOsjC,cAAc0I,GAEpC,GAAIc,IAAaA,EAASH,aAAa,aAAeG,EAASJ,UAAU75C,SAAS,aAGhF,YAFA+f,EAAMS,iBAKsB,UAA1Bw5B,EAAcE,SAA0C,UAAnB/sC,EAAO+sC,SAC9CT,EAAOvB,iBAAiBx/C,KAAKo7C,EAAoB,QAAE3mC,GAAS,SAAoC,UAA1B6sC,EAAcE,aAGvFv6B,GAAG45B,EAA2BR,GAA6B,SAAUh5B,GACtE,IAAI5S,EAAS2mC,EAAoB,QAAE/zB,EAAM/iB,QAAQyV,QAAQ4mC,GAAiB,GAC1EvF,EAAoB,QAAE3mC,GAAQqpB,YAAYsiB,EAAkB,eAAe9zC,KAAK+a,EAAM7mB,UAExF46C,EAAoB,QAAEx8C,QAAQqoB,GAAG65B,GAAqB,WAKpD,IAFA,IAAI70B,EAAU,GAAG9sB,MAAMa,KAAKvB,SAASkO,iBAAiB6zC,IAE7Cx/C,EAAI,EAAG2C,EAAMsoB,EAAQ9pB,OAAQnB,EAAI2C,EAAK3C,IAAK,CAClD,IAAIyT,EAASwX,EAAQjrB,GACjByO,EAAQgF,EAAOsjC,cAAc0I,GAE7BhxC,EAAM2E,SAAW3E,EAAM2xC,aAAa,WACtC3sC,EAAO0sC,UAAUjnC,IAAIgmC,GAErBzrC,EAAO0sC,UAAU5kC,OAAO2jC,GAO5B,IAAK,IAAI75C,EAAK,EAAGo7C,GAFjBx1B,EAAU,GAAG9sB,MAAMa,KAAKvB,SAASkO,iBAAiB4zC,KAElBp+C,OAAQkE,EAAKo7C,EAAMp7C,IAAM,CACvD,IAAIq7C,EAAUz1B,EAAQ5lB,GAEuB,SAAzCq7C,EAAQrgD,aAAa,gBACvBqgD,EAAQP,UAAUjnC,IAAIgmC,GAEtBwB,EAAQP,UAAU5kC,OAAO2jC,OAU/B9E,EAAoB,QAAEp5C,GAAG49C,GAAUmB,EAAOvB,iBAC1CpE,EAAoB,QAAEp5C,GAAG49C,GAAQvR,YAAc0S,EAE/C3F,EAAoB,QAAEp5C,GAAG49C,GAAQ/U,WAAa,WAE5C,OADAuQ,EAAoB,QAAEp5C,GAAG49C,GAAUK,EAC5Bc,EAAOvB,kBAShB,IAAImC,EAAS,WACTC,EAAY,QACZC,GAAa,cACbC,GAAc,IAAMD,GACpBE,GAAiB,YACjBC,GAAuB5G,EAAoB,QAAEp5C,GAAG2/C,GAChDM,GAAqB,GAErBC,GAAsB,GAEtBC,GAAyB,IAEzBC,GAAkB,GAClBC,GAAU,CACZ7pB,SAAU,IACV8pB,UAAU,EACVC,OAAO,EACPC,MAAO,QACPn8B,MAAM,EACNo8B,OAAO,GAELC,GAAc,CAChBlqB,SAAU,mBACV8pB,SAAU,UACVC,MAAO,mBACPC,MAAO,mBACPn8B,KAAM,UACNo8B,MAAO,WAELE,GAAiB,OACjBC,GAAiB,OACjBC,GAAiB,OACjBC,GAAkB,QAClBC,GAAc,QAAUjB,GACxBkB,GAAa,OAASlB,GACtBmB,GAAgB,UAAYnB,GAC5BoB,GAAmB,aAAepB,GAClCqB,GAAmB,aAAerB,GAClCsB,GAAmB,aAAetB,GAClCuB,GAAkB,YAAcvB,GAChCwB,GAAiB,WAAaxB,GAC9ByB,GAAoB,cAAgBzB,GACpC0B,GAAkB,YAAc1B,GAChC2B,GAAmB,YAAc3B,GACjC4B,GAAwB,OAAS5B,GAAcC,GAC/C4B,GAAyB,QAAU7B,GAAcC,GACjD6B,GAAsB,WACtBC,GAAsB,SACtBC,GAAmB,QACnBC,GAAmB,sBACnBC,GAAkB,qBAClBC,GAAkB,qBAClBC,GAAkB,qBAClBC,GAA2B,gBAC3BC,GAAoB,UACpBC,GAAuB,wBACvBC,GAAgB,iBAChBC,GAAoB,qBACpBC,GAAqB,2CACrBC,GAAsB,uBACtBC,GAAsB,gCACtBC,GAAqB,yBACrBC,GAAc,CAChBC,MAAO,QACPC,IAAK,OAQHC,GAAwB,WAC1B,SAASA,EAAStZ,EAAS0R,GACzBt+C,KAAKmmD,OAAS,KACdnmD,KAAKomD,UAAY,KACjBpmD,KAAKqmD,eAAiB,KACtBrmD,KAAKsmD,WAAY,EACjBtmD,KAAKumD,YAAa,EAClBvmD,KAAKwmD,aAAe,KACpBxmD,KAAKymD,YAAc,EACnBzmD,KAAK0mD,YAAc,EACnB1mD,KAAK2mD,QAAU3mD,KAAK4mD,WAAWtI,GAC/Bt+C,KAAKigD,SAAWrT,EAChB5sC,KAAK6mD,mBAAqB7mD,KAAKigD,SAAS/G,cAAc0M,IACtD5lD,KAAK8mD,gBAAkB,iBAAkBlnD,SAAS+P,iBAAmBu8B,UAAU6a,eAAiB,EAChG/mD,KAAKgnD,cAAgB9I,QAAQn+C,OAAOknD,cAAgBlnD,OAAOmnD,gBAE3DlnD,KAAKmnD,qBAIP,IAAIjH,EAASgG,EAAS3iD,UAyctB,OAtcA28C,EAAO3zC,KAAO,WACPvM,KAAKumD,YACRvmD,KAAKonD,OAAOtD,KAIhB5D,EAAOmH,gBAAkB,WACvB,IAAIzG,EAAWrE,EAAoB,QAAEv8C,KAAKigD,WAGrCrgD,SAAS65B,QAAUmnB,EAAS7mC,GAAG,aAA8C,WAA/B6mC,EAASp8B,IAAI,eAC9DxkB,KAAKuM,QAIT2zC,EAAOplC,KAAO,WACP9a,KAAKumD,YACRvmD,KAAKonD,OAAOrD,KAIhB7D,EAAOyD,MAAQ,SAAen7B,GACvBA,IACHxoB,KAAKsmD,WAAY,GAGftmD,KAAKigD,SAAS/G,cAAcyM,MAC9BvI,EAAKC,qBAAqBr9C,KAAKigD,UAC/BjgD,KAAKsnD,OAAM,IAGbC,cAAcvnD,KAAKomD,WACnBpmD,KAAKomD,UAAY,MAGnBlG,EAAOoH,MAAQ,SAAe9+B,GACvBA,IACHxoB,KAAKsmD,WAAY,GAGftmD,KAAKomD,YACPmB,cAAcvnD,KAAKomD,WACnBpmD,KAAKomD,UAAY,MAGfpmD,KAAK2mD,QAAQhtB,WAAa35B,KAAKsmD,YACjCtmD,KAAKomD,UAAYoB,aAAa5nD,SAAS6nD,gBAAkBznD,KAAKqnD,gBAAkBrnD,KAAKuM,MAAMyuB,KAAKh7B,MAAOA,KAAK2mD,QAAQhtB,YAIxHumB,EAAO/jB,GAAK,SAAYhhB,GACtB,IAAI8gC,EAAQj8C,KAEZA,KAAKqmD,eAAiBrmD,KAAKigD,SAAS/G,cAAcsM,IAElD,IAAIkC,EAAc1nD,KAAK2nD,cAAc3nD,KAAKqmD,gBAE1C,KAAIlrC,EAAQnb,KAAKmmD,OAAO7iD,OAAS,GAAK6X,EAAQ,GAI9C,GAAInb,KAAKumD,WACPhK,EAAoB,QAAEv8C,KAAKigD,UAAU33B,IAAI67B,IAAY,WACnD,OAAOlI,EAAM9f,GAAGhhB,UAFpB,CAOA,GAAIusC,IAAgBvsC,EAGlB,OAFAnb,KAAK2jD,aACL3jD,KAAKsnD,QAIP,IAAIM,EAAYzsC,EAAQusC,EAAc5D,GAAiBC,GAEvD/jD,KAAKonD,OAAOQ,EAAW5nD,KAAKmmD,OAAOhrC,MAGrC+kC,EAAOM,QAAU,WACfjE,EAAoB,QAAEv8C,KAAKigD,UAAUx3B,IAAIw6B,IACzC1G,EAAoB,QAAEr5B,WAAWljB,KAAKigD,SAAU+C,IAChDhjD,KAAKmmD,OAAS,KACdnmD,KAAK2mD,QAAU,KACf3mD,KAAKigD,SAAW,KAChBjgD,KAAKomD,UAAY,KACjBpmD,KAAKsmD,UAAY,KACjBtmD,KAAKumD,WAAa,KAClBvmD,KAAKqmD,eAAiB,KACtBrmD,KAAK6mD,mBAAqB,MAI5B3G,EAAO0G,WAAa,SAAoBtI,GAGtC,OAFAA,EAASxO,EAAS,GAAI0T,GAASlF,GAC/BlB,EAAKgB,gBAAgB0E,EAAQxE,EAAQuF,IAC9BvF,GAGT4B,EAAO2H,aAAe,WACpB,IAAIC,EAAY9hD,KAAK+hD,IAAI/nD,KAAK0mD,aAE9B,KAAIoB,GAAavE,IAAjB,CAIA,IAAIqE,EAAYE,EAAY9nD,KAAK0mD,YACjC1mD,KAAK0mD,YAAc,EAEfkB,EAAY,GACd5nD,KAAK8a,OAIH8sC,EAAY,GACd5nD,KAAKuM,SAIT2zC,EAAOiH,mBAAqB,WAC1B,IAAIa,EAAShoD,KAETA,KAAK2mD,QAAQlD,UACflH,EAAoB,QAAEv8C,KAAKigD,UAAU73B,GAAGg8B,IAAe,SAAU57B,GAC/D,OAAOw/B,EAAOC,SAASz/B,MAIA,UAAvBxoB,KAAK2mD,QAAQhD,OACfpH,EAAoB,QAAEv8C,KAAKigD,UAAU73B,GAAGi8B,IAAkB,SAAU77B,GAClE,OAAOw/B,EAAOrE,MAAMn7B,MACnBJ,GAAGk8B,IAAkB,SAAU97B,GAChC,OAAOw/B,EAAOV,MAAM9+B,MAIpBxoB,KAAK2mD,QAAQ/C,OACf5jD,KAAKkoD,2BAIThI,EAAOgI,wBAA0B,WAC/B,IAAIC,EAASnoD,KAEb,GAAKA,KAAK8mD,gBAAV,CAIA,IAAIhzC,EAAQ,SAAe0U,GACrB2/B,EAAOnB,eAAiBjB,GAAYv9B,EAAM+C,cAAcmC,YAAY7L,eACtEsmC,EAAO1B,YAAcj+B,EAAM+C,cAAc8B,QAC/B86B,EAAOnB,gBACjBmB,EAAO1B,YAAcj+B,EAAM+C,cAAcwC,QAAQ,GAAGV,UAIpD+6B,EAAO,SAAc5/B,GAEnBA,EAAM+C,cAAcwC,SAAWvF,EAAM+C,cAAcwC,QAAQzqB,OAAS,EACtE6kD,EAAOzB,YAAc,EAErByB,EAAOzB,YAAcl+B,EAAM+C,cAAcwC,QAAQ,GAAGV,QAAU86B,EAAO1B,aAIrEzhD,EAAM,SAAawjB,GACjB2/B,EAAOnB,eAAiBjB,GAAYv9B,EAAM+C,cAAcmC,YAAY7L,iBACtEsmC,EAAOzB,YAAcl+B,EAAM+C,cAAc8B,QAAU86B,EAAO1B,aAG5D0B,EAAON,eAEsB,UAAzBM,EAAOxB,QAAQhD,QAQjBwE,EAAOxE,QAEHwE,EAAO3B,cACTlpB,aAAa6qB,EAAO3B,cAGtB2B,EAAO3B,aAAe5mC,YAAW,SAAU4I,GACzC,OAAO2/B,EAAOb,MAAM9+B,KACnB86B,GAAyB6E,EAAOxB,QAAQhtB,YAI/C4iB,EAAoB,QAAEv8C,KAAKigD,SAASnyC,iBAAiB43C,KAAoBt9B,GAAGw8B,IAAkB,SAAUn4C,GACtG,OAAOA,EAAEwc,oBAGPjpB,KAAKgnD,eACPzK,EAAoB,QAAEv8C,KAAKigD,UAAU73B,GAAGs8B,IAAmB,SAAUl8B,GACnE,OAAO1U,EAAM0U,MAEf+zB,EAAoB,QAAEv8C,KAAKigD,UAAU73B,GAAGu8B,IAAiB,SAAUn8B,GACjE,OAAOxjB,EAAIwjB,MAGbxoB,KAAKigD,SAASqC,UAAUjnC,IAAIiqC,MAE5B/I,EAAoB,QAAEv8C,KAAKigD,UAAU73B,GAAGm8B,IAAkB,SAAU/7B,GAClE,OAAO1U,EAAM0U,MAEf+zB,EAAoB,QAAEv8C,KAAKigD,UAAU73B,GAAGo8B,IAAiB,SAAUh8B,GACjE,OAAO4/B,EAAK5/B,MAEd+zB,EAAoB,QAAEv8C,KAAKigD,UAAU73B,GAAGq8B,IAAgB,SAAUj8B,GAChE,OAAOxjB,EAAIwjB,SAKjB03B,EAAO+H,SAAW,SAAkBz/B,GAClC,IAAI,kBAAkB/a,KAAK+a,EAAM/iB,OAAOk9C,SAIxC,OAAQn6B,EAAMwF,OACZ,KAAKo1B,GACH56B,EAAMS,iBACNjpB,KAAK8a,OACL,MAEF,KAAKuoC,GACH76B,EAAMS,iBACNjpB,KAAKuM,SAKX2zC,EAAOyH,cAAgB,SAAuB/a,GAE5C,OADA5sC,KAAKmmD,OAASvZ,GAAWA,EAAQhqC,WAAa,GAAGtC,MAAMa,KAAKyrC,EAAQhqC,WAAWkL,iBAAiB23C,KAAkB,GAC3GzlD,KAAKmmD,OAAOvlD,QAAQgsC,IAG7BsT,EAAOmI,oBAAsB,SAA6BT,EAAW1yC,GACnE,IAAIozC,EAAkBV,IAAc9D,GAChCyE,EAAkBX,IAAc7D,GAEhC2D,EAAc1nD,KAAK2nD,cAAczyC,GAEjCszC,EAAgBxoD,KAAKmmD,OAAO7iD,OAAS,EAGzC,IAFoBilD,GAAmC,IAAhBb,GAAqBY,GAAmBZ,IAAgBc,KAEzExoD,KAAK2mD,QAAQn/B,KACjC,OAAOtS,EAGT,IACIuzC,GAAaf,GADLE,IAAc7D,IAAkB,EAAI,IACR/jD,KAAKmmD,OAAO7iD,OACpD,OAAsB,IAAfmlD,EAAmBzoD,KAAKmmD,OAAOnmD,KAAKmmD,OAAO7iD,OAAS,GAAKtD,KAAKmmD,OAAOsC,IAG9EvI,EAAOwI,mBAAqB,SAA4Bz8B,EAAe08B,GACrE,IAAIC,EAAc5oD,KAAK2nD,cAAc17B,GAEjC48B,EAAY7oD,KAAK2nD,cAAc3nD,KAAKigD,SAAS/G,cAAcsM,KAE3DsD,EAAavM,EAAoB,QAAEpzB,MAAM+6B,GAAa,CACxDj4B,cAAeA,EACf27B,UAAWe,EACXI,KAAMF,EACN1sB,GAAIysB,IAGN,OADArM,EAAoB,QAAEv8C,KAAKigD,UAAU/2B,QAAQ4/B,GACtCA,GAGT5I,EAAO8I,2BAA6B,SAAoCpc,GACtE,GAAI5sC,KAAK6mD,mBAAoB,CAC3B,IAAIoC,EAAa,GAAG3oD,MAAMa,KAAKnB,KAAK6mD,mBAAmB/4C,iBAAiBy3C,KACxEhJ,EAAoB,QAAE0M,GAAYjqB,YAAYgmB,IAE9C,IAAIkE,EAAgBlpD,KAAK6mD,mBAAmBjsC,SAAS5a,KAAK2nD,cAAc/a,IAEpEsc,GACF3M,EAAoB,QAAE2M,GAAevqB,SAASqmB,MAKpD9E,EAAOkH,OAAS,SAAgBQ,EAAWhb,GACzC,IAWIuc,EACAC,EACAT,EAbAU,EAASrpD,KAETkV,EAAgBlV,KAAKigD,SAAS/G,cAAcsM,IAE5C8D,EAAqBtpD,KAAK2nD,cAAczyC,GAExCq0C,EAAc3c,GAAW13B,GAAiBlV,KAAKqoD,oBAAoBT,EAAW1yC,GAE9Es0C,EAAmBxpD,KAAK2nD,cAAc4B,GAEtCE,EAAYvL,QAAQl+C,KAAKomD,WAe7B,GAVIwB,IAAc9D,IAChBqF,EAAuBhE,GACvBiE,EAAiBhE,GACjBuD,EAAqB3E,KAErBmF,EAAuBjE,GACvBkE,EAAiB/D,GACjBsD,EAAqB1E,IAGnBsF,GAAehN,EAAoB,QAAEgN,GAAalqB,SAAS2lB,IAC7DhlD,KAAKumD,YAAa,OAMpB,IAFiBvmD,KAAK0oD,mBAAmBa,EAAaZ,GAEvC58B,sBAIV7W,GAAkBq0C,EAAvB,CAKAvpD,KAAKumD,YAAa,EAEdkD,GACFzpD,KAAK2jD,QAGP3jD,KAAKgpD,2BAA2BO,GAEhC,IAAIG,EAAYnN,EAAoB,QAAEpzB,MAAMg7B,GAAY,CACtDl4B,cAAes9B,EACf3B,UAAWe,EACXI,KAAMO,EACNntB,GAAIqtB,IAGN,GAAIjN,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAAS4lB,IAAmB,CACnE1I,EAAoB,QAAEgN,GAAa5qB,SAASyqB,GAC5ChM,EAAKY,OAAOuL,GACZhN,EAAoB,QAAErnC,GAAeypB,SAASwqB,GAC9C5M,EAAoB,QAAEgN,GAAa5qB,SAASwqB,GAC5C,IAAIQ,EAAsB91B,SAAS01B,EAAY/mD,aAAa,iBAAkB,IAE1EmnD,GACF3pD,KAAK2mD,QAAQiD,gBAAkB5pD,KAAK2mD,QAAQiD,iBAAmB5pD,KAAK2mD,QAAQhtB,SAC5E35B,KAAK2mD,QAAQhtB,SAAWgwB,GAExB3pD,KAAK2mD,QAAQhtB,SAAW35B,KAAK2mD,QAAQiD,iBAAmB5pD,KAAK2mD,QAAQhtB,SAGvE,IAAIikB,EAAqBR,EAAKO,iCAAiCzoC,GAC/DqnC,EAAoB,QAAErnC,GAAeoT,IAAI80B,EAAKL,gBAAgB,WAC5DR,EAAoB,QAAEgN,GAAavqB,YAAYmqB,EAAuB,IAAMC,GAAgBzqB,SAASqmB,IACrGzI,EAAoB,QAAErnC,GAAe8pB,YAAYgmB,GAAsB,IAAMoE,EAAiB,IAAMD,GACpGE,EAAO9C,YAAa,EACpB3mC,YAAW,WACT,OAAO28B,EAAoB,QAAE8M,EAAOpJ,UAAU/2B,QAAQwgC,KACrD,MACFnM,qBAAqBK,QAExBrB,EAAoB,QAAErnC,GAAe8pB,YAAYgmB,IACjDzI,EAAoB,QAAEgN,GAAa5qB,SAASqmB,IAC5ChlD,KAAKumD,YAAa,EAClBhK,EAAoB,QAAEv8C,KAAKigD,UAAU/2B,QAAQwgC,GAG3CD,GACFzpD,KAAKsnD,UAKTpB,EAASvF,iBAAmB,SAA0BrC,GACpD,OAAOt+C,KAAKkE,MAAK,WACf,IAAIqe,EAAOg6B,EAAoB,QAAEv8C,MAAMuiB,KAAKygC,IAExC2D,EAAU7W,EAAS,GAAI0T,GAASjH,EAAoB,QAAEv8C,MAAMuiB,QAE1C,iBAAX+7B,IACTqI,EAAU7W,EAAS,GAAI6W,EAASrI,IAGlC,IAAIuL,EAA2B,iBAAXvL,EAAsBA,EAASqI,EAAQjD,MAO3D,GALKnhC,IACHA,EAAO,IAAI2jC,EAASlmD,KAAM2mD,GAC1BpK,EAAoB,QAAEv8C,MAAMuiB,KAAKygC,GAAYzgC,IAGzB,iBAAX+7B,EACT/7B,EAAK4Z,GAAGmiB,QACH,GAAsB,iBAAXuL,EAAqB,CACrC,QAA4B,IAAjBtnC,EAAKsnC,GACd,MAAM,IAAIzqC,UAAU,oBAAuByqC,EAAS,KAGtDtnC,EAAKsnC,UACIlD,EAAQhtB,UAAYgtB,EAAQmD,OACrCvnC,EAAKohC,QACLphC,EAAK+kC,aAKXpB,EAAS6D,qBAAuB,SAA8BvhC,GAC5D,IAAIvlB,EAAWm6C,EAAKK,uBAAuBz9C,MAE3C,GAAKiD,EAAL,CAIA,IAAIwC,EAAS82C,EAAoB,QAAEt5C,GAAU,GAE7C,GAAKwC,GAAW82C,EAAoB,QAAE92C,GAAQ45B,SAAS0lB,IAAvD,CAIA,IAAIzG,EAASxO,EAAS,GAAIyM,EAAoB,QAAE92C,GAAQ8c,OAAQg6B,EAAoB,QAAEv8C,MAAMuiB,QAExFynC,EAAahqD,KAAKwC,aAAa,iBAE/BwnD,IACF1L,EAAO3kB,UAAW,GAGpBusB,EAASvF,iBAAiBx/C,KAAKo7C,EAAoB,QAAE92C,GAAS64C,GAE1D0L,GACFzN,EAAoB,QAAE92C,GAAQ8c,KAAKygC,IAAY7mB,GAAG6tB,GAGpDxhC,EAAMS,oBAGRyzB,EAAawJ,EAAU,KAAM,CAAC,CAC5B/3C,IAAK,UACLxK,IAAK,WACH,OAAOo/C,IAER,CACD50C,IAAK,UACLxK,IAAK,WACH,OAAO6/C,OAIJ0C,EA7dmB,GAse5B3J,EAAoB,QAAE38C,UAAUwoB,GAAG08B,GAAwBe,GAAqBK,GAAS6D,sBACzFxN,EAAoB,QAAEx8C,QAAQqoB,GAAGy8B,IAAuB,WAGtD,IAFA,IAAIoF,EAAY,GAAG3pD,MAAMa,KAAKvB,SAASkO,iBAAiBg4C,KAE/C3jD,EAAI,EAAG2C,EAAMmlD,EAAU3mD,OAAQnB,EAAI2C,EAAK3C,IAAK,CACpD,IAAI+nD,EAAY3N,EAAoB,QAAE0N,EAAU9nD,IAEhD+jD,GAASvF,iBAAiBx/C,KAAK+oD,EAAWA,EAAU3nC,YASxDg6B,EAAoB,QAAEp5C,GAAG2/C,GAAUoD,GAASvF,iBAC5CpE,EAAoB,QAAEp5C,GAAG2/C,GAAQtT,YAAc0W,GAE/C3J,EAAoB,QAAEp5C,GAAG2/C,GAAQ9W,WAAa,WAE5C,OADAuQ,EAAoB,QAAEp5C,GAAG2/C,GAAUK,GAC5B+C,GAASvF,kBASlB,IAAIwJ,GAAS,WACTC,GAAY,QACZC,GAAa,cACbC,GAAc,IAAMD,GACpBE,GAAiB,YACjBC,GAAuBjO,EAAoB,QAAEp5C,GAAGgnD,IAChDM,GAAY,CACd9kC,QAAQ,EACR5R,OAAQ,IAEN22C,GAAgB,CAClB/kC,OAAQ,UACR5R,OAAQ,oBAEN42C,GAAa,OAASL,GACtBM,GAAc,QAAUN,GACxBO,GAAa,OAASP,GACtBQ,GAAe,SAAWR,GAC1BS,GAAyB,QAAUT,GAAcC,GACjDS,GAAoB,OACpBC,GAAsB,WACtBC,GAAwB,aACxBC,GAAuB,YACvBC,GAAkB,QAClBC,GAAmB,SACnBC,GAAmB,qBACnBC,GAAyB,2BAOzBC,GAAwB,WAC1B,SAASA,EAAS5e,EAAS0R,GACzBt+C,KAAKyrD,kBAAmB,EACxBzrD,KAAKigD,SAAWrT,EAChB5sC,KAAK2mD,QAAU3mD,KAAK4mD,WAAWtI,GAC/Bt+C,KAAK0rD,cAAgB,GAAGprD,MAAMa,KAAKvB,SAASkO,iBAAiB,mCAAwC8+B,EAAQv/B,GAAhD,6CAA8Gu/B,EAAQv/B,GAAK,OAGxL,IAFA,IAAIs+C,EAAa,GAAGrrD,MAAMa,KAAKvB,SAASkO,iBAAiBy9C,KAEhDppD,EAAI,EAAG2C,EAAM6mD,EAAWroD,OAAQnB,EAAI2C,EAAK3C,IAAK,CACrD,IAAIkC,EAAOsnD,EAAWxpD,GAClBc,EAAWm6C,EAAKK,uBAAuBp5C,GACvCunD,EAAgB,GAAGtrD,MAAMa,KAAKvB,SAASkO,iBAAiB7K,IAAWqN,QAAO,SAAUu7C,GACtF,OAAOA,IAAcjf,KAGN,OAAb3pC,GAAqB2oD,EAActoD,OAAS,IAC9CtD,KAAK8rD,UAAY7oD,EAEjBjD,KAAK0rD,cAAc/qD,KAAK0D,IAI5BrE,KAAK+rD,QAAU/rD,KAAK2mD,QAAQ5yC,OAAS/T,KAAKgsD,aAAe,KAEpDhsD,KAAK2mD,QAAQ5yC,QAChB/T,KAAKisD,0BAA0BjsD,KAAKigD,SAAUjgD,KAAK0rD,eAGjD1rD,KAAK2mD,QAAQhhC,QACf3lB,KAAK2lB,SAKT,IAAIu6B,EAASsL,EAASjoD,UA4OtB,OAzOA28C,EAAOv6B,OAAS,WACV42B,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAAS2rB,IAChDhrD,KAAK0lB,OAEL1lB,KAAKwlB,QAIT06B,EAAO16B,KAAO,WACZ,IAMI0mC,EACAC,EAPAlQ,EAAQj8C,KAEZ,KAAIA,KAAKyrD,kBAAoBlP,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAAS2rB,MAOvEhrD,KAAK+rD,SASgB,KARvBG,EAAU,GAAG5rD,MAAMa,KAAKnB,KAAK+rD,QAAQj+C,iBAAiBw9C,KAAmBh7C,QAAO,SAAUjM,GACxF,MAAoC,iBAAzB43C,EAAM0K,QAAQ5yC,OAChB1P,EAAK7B,aAAa,iBAAmBy5C,EAAM0K,QAAQ5yC,OAGrD1P,EAAKi+C,UAAU75C,SAASwiD,QAGrB3nD,SACV4oD,EAAU,MAIVA,IACFC,EAAc5P,EAAoB,QAAE2P,GAAS13C,IAAIxU,KAAK8rD,WAAWvpC,KAAK8nC,MAEnD8B,EAAYV,mBAHjC,CAQA,IAAIW,EAAa7P,EAAoB,QAAEpzB,MAAMwhC,IAG7C,GAFApO,EAAoB,QAAEv8C,KAAKigD,UAAU/2B,QAAQkjC,IAEzCA,EAAWrgC,qBAAf,CAIImgC,IACFV,EAAS7K,iBAAiBx/C,KAAKo7C,EAAoB,QAAE2P,GAAS13C,IAAIxU,KAAK8rD,WAAY,QAE9EK,GACH5P,EAAoB,QAAE2P,GAAS3pC,KAAK8nC,GAAY,OAIpD,IAAIj1B,EAAYp1B,KAAKqsD,gBAErB9P,EAAoB,QAAEv8C,KAAKigD,UAAUjhB,YAAYisB,IAAqBtsB,SAASusB,IAC/ElrD,KAAKigD,SAAS37B,MAAM8Q,GAAa,EAE7Bp1B,KAAK0rD,cAAcpoD,QACrBi5C,EAAoB,QAAEv8C,KAAK0rD,eAAe1sB,YAAYmsB,IAAsBp5C,KAAK,iBAAiB,GAGpG/R,KAAKssD,kBAAiB,GAEtB,IAAIrxB,EAAW,WACbshB,EAAoB,QAAEN,EAAMgE,UAAUjhB,YAAYksB,IAAuBvsB,SAASssB,GAAsB,IAAMD,IAC9G/O,EAAMgE,SAAS37B,MAAM8Q,GAAa,GAElC6mB,EAAMqQ,kBAAiB,GAEvB/P,EAAoB,QAAEN,EAAMgE,UAAU/2B,QAAQ0hC,KAI5C2B,EAAa,UADUn3B,EAAU,GAAGvT,cAAgBuT,EAAU90B,MAAM,IAEpEs9C,EAAqBR,EAAKO,iCAAiC39C,KAAKigD,UACpE1D,EAAoB,QAAEv8C,KAAKigD,UAAU33B,IAAI80B,EAAKL,eAAgB9hB,GAAUsiB,qBAAqBK,GAC7F59C,KAAKigD,SAAS37B,MAAM8Q,GAAap1B,KAAKigD,SAASsM,GAAc,QAG/DrM,EAAOx6B,KAAO,WACZ,IAAIsiC,EAAShoD,KAEb,IAAIA,KAAKyrD,kBAAqBlP,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAAS2rB,IAA5E,CAIA,IAAIoB,EAAa7P,EAAoB,QAAEpzB,MAAM0hC,IAG7C,GAFAtO,EAAoB,QAAEv8C,KAAKigD,UAAU/2B,QAAQkjC,IAEzCA,EAAWrgC,qBAAf,CAIA,IAAIqJ,EAAYp1B,KAAKqsD,gBAErBrsD,KAAKigD,SAAS37B,MAAM8Q,GAAap1B,KAAKigD,SAASvoB,wBAAwBtC,GAAa,KACpFgoB,EAAKY,OAAOh+C,KAAKigD,UACjB1D,EAAoB,QAAEv8C,KAAKigD,UAAUthB,SAASusB,IAAuBlsB,YAAYisB,GAAsB,IAAMD,IAC7G,IAAIwB,EAAqBxsD,KAAK0rD,cAAcpoD,OAE5C,GAAIkpD,EAAqB,EACvB,IAAK,IAAIrqD,EAAI,EAAGA,EAAIqqD,EAAoBrqD,IAAK,CAC3C,IAAI+mB,EAAUlpB,KAAK0rD,cAAcvpD,GAC7Bc,EAAWm6C,EAAKK,uBAAuBv0B,GAE1B,OAAbjmB,IACUs5C,EAAoB,QAAE,GAAGj8C,MAAMa,KAAKvB,SAASkO,iBAAiB7K,KAE/Do8B,SAAS2rB,KAClBzO,EAAoB,QAAErzB,GAASyV,SAASwsB,IAAsBp5C,KAAK,iBAAiB,IAM5F/R,KAAKssD,kBAAiB,GAEtB,IAAIrxB,EAAW,WACb+sB,EAAOsE,kBAAiB,GAExB/P,EAAoB,QAAEyL,EAAO/H,UAAUjhB,YAAYksB,IAAuBvsB,SAASssB,IAAqB/hC,QAAQ4hC,KAGlH9qD,KAAKigD,SAAS37B,MAAM8Q,GAAa,GACjC,IAAIwoB,EAAqBR,EAAKO,iCAAiC39C,KAAKigD,UACpE1D,EAAoB,QAAEv8C,KAAKigD,UAAU33B,IAAI80B,EAAKL,eAAgB9hB,GAAUsiB,qBAAqBK,MAG/FsC,EAAOoM,iBAAmB,SAA0BG,GAClDzsD,KAAKyrD,iBAAmBgB,GAG1BvM,EAAOM,QAAU,WACfjE,EAAoB,QAAEr5B,WAAWljB,KAAKigD,SAAUoK,IAChDrqD,KAAK2mD,QAAU,KACf3mD,KAAK+rD,QAAU,KACf/rD,KAAKigD,SAAW,KAChBjgD,KAAK0rD,cAAgB,KACrB1rD,KAAKyrD,iBAAmB,MAI1BvL,EAAO0G,WAAa,SAAoBtI,GAKtC,OAJAA,EAASxO,EAAS,GAAI2a,GAAWnM,IAC1B34B,OAASu4B,QAAQI,EAAO34B,QAE/By3B,EAAKgB,gBAAgB+L,GAAQ7L,EAAQoM,IAC9BpM,GAGT4B,EAAOmM,cAAgB,WAErB,OADe9P,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAAS+rB,IAC3CA,GAAkBC,IAGtCnL,EAAO8L,WAAa,WAClB,IAEIj4C,EAFAo0C,EAASnoD,KAITo9C,EAAKe,UAAUn+C,KAAK2mD,QAAQ5yC,SAC9BA,EAAS/T,KAAK2mD,QAAQ5yC,YAEoB,IAA/B/T,KAAK2mD,QAAQ5yC,OAAOvQ,SAC7BuQ,EAAS/T,KAAK2mD,QAAQ5yC,OAAO,KAG/BA,EAASnU,SAASs5C,cAAcl5C,KAAK2mD,QAAQ5yC,QAG/C,IAAI9Q,EAAW,yCAA8CjD,KAAK2mD,QAAQ5yC,OAAS,KAC/E6G,EAAW,GAAGta,MAAMa,KAAK4S,EAAOjG,iBAAiB7K,IAIrD,OAHAs5C,EAAoB,QAAE3hC,GAAU1W,MAAK,SAAU/B,EAAGyqC,GAChDub,EAAO8D,0BAA0BT,EAASkB,sBAAsB9f,GAAU,CAACA,OAEtE74B,GAGTmsC,EAAO+L,0BAA4B,SAAmCrf,EAAS+f,GAC7E,IAAIC,EAASrQ,EAAoB,QAAE3P,GAASvN,SAAS2rB,IAEjD2B,EAAarpD,QACfi5C,EAAoB,QAAEoQ,GAAc1tB,YAAYksB,IAAuByB,GAAQ76C,KAAK,gBAAiB66C,IAKzGpB,EAASkB,sBAAwB,SAA+B9f,GAC9D,IAAI3pC,EAAWm6C,EAAKK,uBAAuB7Q,GAC3C,OAAO3pC,EAAWrD,SAASs5C,cAAcj2C,GAAY,MAGvDuoD,EAAS7K,iBAAmB,SAA0BrC,GACpD,OAAOt+C,KAAKkE,MAAK,WACf,IAAI08C,EAAWrE,EAAoB,QAAEv8C,MACjCuiB,EAAOq+B,EAASr+B,KAAK8nC,IAErB1D,EAAU7W,EAAS,GAAI2a,GAAW7J,EAASr+B,OAA0B,iBAAX+7B,GAAuBA,EAASA,EAAS,IAWvG,IATK/7B,GAAQokC,EAAQhhC,QAA4B,iBAAX24B,GAAuB,YAAY7wC,KAAK6wC,KAC5EqI,EAAQhhC,QAAS,GAGdpD,IACHA,EAAO,IAAIipC,EAASxrD,KAAM2mD,GAC1B/F,EAASr+B,KAAK8nC,GAAY9nC,IAGN,iBAAX+7B,EAAqB,CAC9B,QAA4B,IAAjB/7B,EAAK+7B,GACd,MAAM,IAAIl/B,UAAU,oBAAuBk/B,EAAS,KAGtD/7B,EAAK+7B,UAKX5B,EAAa8O,EAAU,KAAM,CAAC,CAC5Br9C,IAAK,UACLxK,IAAK,WACH,OAAOymD,KAER,CACDj8C,IAAK,UACLxK,IAAK,WACH,OAAO8mD,OAIJe,EA9QmB,GAuR5BjP,EAAoB,QAAE38C,UAAUwoB,GAAG2iC,GAAwBQ,IAAwB,SAAU/iC,GAEvD,MAAhCA,EAAMsC,cAAc63B,SACtBn6B,EAAMS,iBAGR,IAAI4jC,EAAWtQ,EAAoB,QAAEv8C,MACjCiD,EAAWm6C,EAAKK,uBAAuBz9C,MACvCyS,EAAY,GAAGnS,MAAMa,KAAKvB,SAASkO,iBAAiB7K,IACxDs5C,EAAoB,QAAE9pC,GAAWvO,MAAK,WACpC,IAAI4oD,EAAUvQ,EAAoB,QAAEv8C,MAEhCs+C,EADOwO,EAAQvqC,KAAK8nC,IACJ,SAAWwC,EAAStqC,OAExCipC,GAAS7K,iBAAiBx/C,KAAK2rD,EAASxO,SAS5C/B,EAAoB,QAAEp5C,GAAGgnD,IAAUqB,GAAS7K,iBAC5CpE,EAAoB,QAAEp5C,GAAGgnD,IAAQ3a,YAAcgc,GAE/CjP,EAAoB,QAAEp5C,GAAGgnD,IAAQne,WAAa,WAE5C,OADAuQ,EAAoB,QAAEp5C,GAAGgnD,IAAUK,GAC5BgB,GAAS7K,kBASlB,IAAIoM,GAAS,WACTC,GAAY,QACZC,GAAa,cACbC,GAAc,IAAMD,GACpBE,GAAiB,YACjBC,GAAuB7Q,EAAoB,QAAEp5C,GAAG4pD,IAChDM,GAAiB,GAEjBC,GAAgB,GAEhBC,GAAc,EAEdC,GAAmB,GAEnBC,GAAqB,GAErBC,GAA2B,EAE3BC,GAAiB,IAAI5jD,OAAOyjD,GAAmB,IAAMC,GAAqB,IAAMJ,IAChFO,GAAe,OAASV,GACxBW,GAAiB,SAAWX,GAC5BY,GAAe,OAASZ,GACxBa,GAAgB,QAAUb,GAC1Bc,GAAc,QAAUd,GACxBe,GAAyB,QAAUf,GAAcC,GACjDe,GAAyB,UAAYhB,GAAcC,GACnDgB,GAAuB,QAAUjB,GAAcC,GAC/CiB,GAAsB,WACtBC,GAAoB,OACpBC,GAAoB,SACpBC,GAAuB,YACvBC,GAAsB,WACtBC,GAAuB,sBACvBC,GAA6B,kBAC7BC,GAAyB,2BACzBC,GAAsB,iBACtBC,GAAgB,iBAChBC,GAAsB,cACtBC,GAAyB,8DACzBC,GAAgB,YAChBC,GAAmB,UACnBC,GAAmB,eACnBC,GAAsB,aACtBC,GAAkB,cAClBC,GAAiB,aACjBC,GAAY,CACd3lB,OAAQ,EACR0K,MAAM,EACNkb,SAAU,eACVriB,UAAW,SACX3oB,QAAS,UACTirC,aAAc,MAEZC,GAAgB,CAClB9lB,OAAQ,2BACR0K,KAAM,UACNkb,SAAU,mBACVriB,UAAW,mBACX3oB,QAAS,SACTirC,aAAc,iBAQZE,GAAwB,WAC1B,SAASA,EAAS9iB,EAAS0R,GACzBt+C,KAAKigD,SAAWrT,EAChB5sC,KAAK2vD,QAAU,KACf3vD,KAAK2mD,QAAU3mD,KAAK4mD,WAAWtI,GAC/Bt+C,KAAK4vD,MAAQ5vD,KAAK6vD,kBAClB7vD,KAAK8vD,UAAY9vD,KAAK+vD,gBAEtB/vD,KAAKmnD,qBAIP,IAAIjH,EAASwP,EAASnsD,UA8YtB,OA3YA28C,EAAOv6B,OAAS,WACd,IAAI3lB,KAAKigD,SAAS7zC,WAAYmwC,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAAS+uB,IAA5E,CAIA,IAAI4B,EAAWzT,EAAoB,QAAEv8C,KAAK4vD,OAAOvwB,SAASgvB,IAE1DqB,EAASO,cAELD,GAIJhwD,KAAKwlB,MAAK,KAGZ06B,EAAO16B,KAAO,SAAc0qC,GAK1B,QAJkB,IAAdA,IACFA,GAAY,KAGVlwD,KAAKigD,SAAS7zC,UAAYmwC,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAAS+uB,KAAwB7R,EAAoB,QAAEv8C,KAAK4vD,OAAOvwB,SAASgvB,KAA/I,CAIA,IAAIpiC,EAAgB,CAClBA,cAAejsB,KAAKigD,UAElBkQ,EAAY5T,EAAoB,QAAEpzB,MAAM2kC,GAAc7hC,GAEtDlY,EAAS27C,EAASU,sBAAsBpwD,KAAKigD,UAIjD,GAFA1D,EAAoB,QAAExoC,GAAQmV,QAAQinC,IAElCA,EAAUpkC,qBAAd,CAKA,IAAK/rB,KAAK8vD,WAAaI,EAAW,CAKhC,QAA0C,IAA/B1T,EAAyB,QAClC,MAAM,IAAIp9B,UAAU,oEAGtB,IAAIixC,EAAmBrwD,KAAKigD,SAEG,WAA3BjgD,KAAK2mD,QAAQzZ,UACfmjB,EAAmBt8C,EACVqpC,EAAKe,UAAUn+C,KAAK2mD,QAAQzZ,aACrCmjB,EAAmBrwD,KAAK2mD,QAAQzZ,eAEa,IAAlCltC,KAAK2mD,QAAQzZ,UAAU1pC,SAChC6sD,EAAmBrwD,KAAK2mD,QAAQzZ,UAAU,KAOhB,iBAA1BltC,KAAK2mD,QAAQ4I,UACfhT,EAAoB,QAAExoC,GAAQ4qB,SAAS+vB,IAGzC1uD,KAAK2vD,QAAU,IAAInT,EAAyB,QAAE6T,EAAkBrwD,KAAK4vD,MAAO5vD,KAAKswD,oBAO/E,iBAAkB1wD,SAAS+P,iBAAyF,IAAtE4sC,EAAoB,QAAExoC,GAAQmH,QAAQ4zC,IAAqBxrD,QAC3Gi5C,EAAoB,QAAE38C,SAAS0lB,MAAM1K,WAAWwN,GAAG,YAAa,KAAMm0B,EAAoB,QAAEj2C,MAG9FtG,KAAKigD,SAAShrC,QAEdjV,KAAKigD,SAASx9C,aAAa,iBAAiB,GAE5C85C,EAAoB,QAAEv8C,KAAK4vD,OAAO3wB,YAAYovB,IAC9C9R,EAAoB,QAAExoC,GAAQkrB,YAAYovB,IAAmBnlC,QAAQqzB,EAAoB,QAAEpzB,MAAM4kC,GAAe9hC,OAGlHi0B,EAAOx6B,KAAO,WACZ,IAAI1lB,KAAKigD,SAAS7zC,WAAYmwC,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAAS+uB,KAAyB7R,EAAoB,QAAEv8C,KAAK4vD,OAAOvwB,SAASgvB,IAAhJ,CAIA,IAAIpiC,EAAgB,CAClBA,cAAejsB,KAAKigD,UAElBsQ,EAAYhU,EAAoB,QAAEpzB,MAAMykC,GAAc3hC,GAEtDlY,EAAS27C,EAASU,sBAAsBpwD,KAAKigD,UAEjD1D,EAAoB,QAAExoC,GAAQmV,QAAQqnC,GAElCA,EAAUxkC,uBAIV/rB,KAAK2vD,SACP3vD,KAAK2vD,QAAQza,UAGfqH,EAAoB,QAAEv8C,KAAK4vD,OAAO3wB,YAAYovB,IAC9C9R,EAAoB,QAAExoC,GAAQkrB,YAAYovB,IAAmBnlC,QAAQqzB,EAAoB,QAAEpzB,MAAM0kC,GAAgB5hC,OAGnHi0B,EAAOM,QAAU,WACfjE,EAAoB,QAAEr5B,WAAWljB,KAAKigD,SAAUgN,IAChD1Q,EAAoB,QAAEv8C,KAAKigD,UAAUx3B,IAAIykC,IACzCltD,KAAKigD,SAAW,KAChBjgD,KAAK4vD,MAAQ,KAEQ,OAAjB5vD,KAAK2vD,UACP3vD,KAAK2vD,QAAQza,UAEbl1C,KAAK2vD,QAAU,OAInBzP,EAAOlM,OAAS,WACdh0C,KAAK8vD,UAAY9vD,KAAK+vD,gBAED,OAAjB/vD,KAAK2vD,SACP3vD,KAAK2vD,QAAQ3Z,kBAKjBkK,EAAOiH,mBAAqB,WAC1B,IAAIlL,EAAQj8C,KAEZu8C,EAAoB,QAAEv8C,KAAKigD,UAAU73B,GAAG4lC,IAAa,SAAUxlC,GAC7DA,EAAMS,iBACNT,EAAMO,kBAENkzB,EAAMt2B,aAIVu6B,EAAO0G,WAAa,SAAoBtI,GAGtC,OAFAA,EAASxO,EAAS,GAAI9vC,KAAKyD,YAAY+/C,QAASjH,EAAoB,QAAEv8C,KAAKigD,UAAU19B,OAAQ+7B,GAC7FlB,EAAKgB,gBAAgB2O,GAAQzO,EAAQt+C,KAAKyD,YAAYogD,aAC/CvF,GAGT4B,EAAO2P,gBAAkB,WACvB,IAAK7vD,KAAK4vD,MAAO,CACf,IAAI77C,EAAS27C,EAASU,sBAAsBpwD,KAAKigD,UAE7ClsC,IACF/T,KAAK4vD,MAAQ77C,EAAOmlC,cAAc2V,KAItC,OAAO7uD,KAAK4vD,OAGd1P,EAAOsQ,cAAgB,WACrB,IAAIC,EAAkBlU,EAAoB,QAAEv8C,KAAKigD,SAASr9C,YACtDqvC,EAAYid,GAYhB,OAVIuB,EAAgBpxB,SAASivB,IAC3Brc,EAAYsK,EAAoB,QAAEv8C,KAAK4vD,OAAOvwB,SAASovB,IAAwBQ,GAAmBD,GACzFyB,EAAgBpxB,SAASkvB,IAClCtc,EAAYmd,GACHqB,EAAgBpxB,SAASmvB,IAClCvc,EAAYod,GACH9S,EAAoB,QAAEv8C,KAAK4vD,OAAOvwB,SAASovB,MACpDxc,EAAYkd,IAGPld,GAGTiO,EAAO6P,cAAgB,WACrB,OAAOxT,EAAoB,QAAEv8C,KAAKigD,UAAU/kC,QAAQ,WAAW5X,OAAS,GAG1E48C,EAAOwQ,WAAa,WAClB,IAAI1I,EAAShoD,KAET2pC,EAAS,GAWb,MATmC,mBAAxB3pC,KAAK2mD,QAAQhd,OACtBA,EAAOxmC,GAAK,SAAUof,GAEpB,OADAA,EAAK0tB,QAAUH,EAAS,GAAIvtB,EAAK0tB,QAAS+X,EAAOrB,QAAQhd,OAAOpnB,EAAK0tB,QAAS+X,EAAO/H,WAAa,IAC3F19B,GAGTonB,EAAOA,OAAS3pC,KAAK2mD,QAAQhd,OAGxBA,GAGTuW,EAAOoQ,iBAAmB,WACxB,IAAId,EAAe,CACjBvd,UAAWjyC,KAAKwwD,gBAChB5c,UAAW,CACTjK,OAAQ3pC,KAAK0wD,aACbrc,KAAM,CACJ/+B,QAAStV,KAAK2mD,QAAQtS,MAExB+D,gBAAiB,CACf3G,kBAAmBzxC,KAAK2mD,QAAQ4I,YAWtC,MAN6B,WAAzBvvD,KAAK2mD,QAAQpiC,UACfirC,EAAa5b,UAAUiI,WAAa,CAClCvmC,SAAS,IAINw6B,EAAS,GAAI0f,EAAcxvD,KAAK2mD,QAAQ6I,eAIjDE,EAAS/O,iBAAmB,SAA0BrC,GACpD,OAAOt+C,KAAKkE,MAAK,WACf,IAAIqe,EAAOg6B,EAAoB,QAAEv8C,MAAMuiB,KAAK0qC,IAS5C,GALK1qC,IACHA,EAAO,IAAImtC,EAAS1vD,KAHU,iBAAXs+C,EAAsBA,EAAS,MAIlD/B,EAAoB,QAAEv8C,MAAMuiB,KAAK0qC,GAAY1qC,IAGzB,iBAAX+7B,EAAqB,CAC9B,QAA4B,IAAjB/7B,EAAK+7B,GACd,MAAM,IAAIl/B,UAAU,oBAAuBk/B,EAAS,KAGtD/7B,EAAK+7B,UAKXoR,EAASO,YAAc,SAAqBznC,GAC1C,IAAIA,GAAUA,EAAMwF,QAAU0/B,KAA2C,UAAfllC,EAAM7mB,MAAoB6mB,EAAMwF,QAAUu/B,IAMpG,IAFA,IAAIoD,EAAU,GAAGrwD,MAAMa,KAAKvB,SAASkO,iBAAiB6gD,KAE7CxsD,EAAI,EAAG2C,EAAM6rD,EAAQrtD,OAAQnB,EAAI2C,EAAK3C,IAAK,CAClD,IAAI4R,EAAS27C,EAASU,sBAAsBO,EAAQxuD,IAEhDe,EAAUq5C,EAAoB,QAAEoU,EAAQxuD,IAAIogB,KAAK0qC,IACjDhhC,EAAgB,CAClBA,cAAe0kC,EAAQxuD,IAOzB,GAJIqmB,GAAwB,UAAfA,EAAM7mB,OACjBsqB,EAAc2kC,WAAapoC,GAGxBtlB,EAAL,CAIA,IAAI2tD,EAAe3tD,EAAQ0sD,MAE3B,GAAKrT,EAAoB,QAAExoC,GAAQsrB,SAASgvB,OAIxC7lC,IAAyB,UAAfA,EAAM7mB,MAAoB,kBAAkB8L,KAAK+a,EAAM/iB,OAAOk9C,UAA2B,UAAfn6B,EAAM7mB,MAAoB6mB,EAAMwF,QAAUu/B,KAAgBhR,EAAoB,QAAE9zC,SAASsL,EAAQyU,EAAM/iB,SAA/L,CAIA,IAAI8qD,EAAYhU,EAAoB,QAAEpzB,MAAMykC,GAAc3hC,GAC1DswB,EAAoB,QAAExoC,GAAQmV,QAAQqnC,GAElCA,EAAUxkC,uBAMV,iBAAkBnsB,SAAS+P,iBAC7B4sC,EAAoB,QAAE38C,SAAS0lB,MAAM1K,WAAW6N,IAAI,YAAa,KAAM8zB,EAAoB,QAAEj2C,MAG/FqqD,EAAQxuD,GAAGM,aAAa,gBAAiB,SAErCS,EAAQysD,SACVzsD,EAAQysD,QAAQza,UAGlBqH,EAAoB,QAAEsU,GAAc7xB,YAAYqvB,IAChD9R,EAAoB,QAAExoC,GAAQirB,YAAYqvB,IAAmBnlC,QAAQqzB,EAAoB,QAAEpzB,MAAM0kC,GAAgB5hC,SAIrHyjC,EAASU,sBAAwB,SAA+BxjB,GAC9D,IAAI74B,EACA9Q,EAAWm6C,EAAKK,uBAAuB7Q,GAM3C,OAJI3pC,IACF8Q,EAASnU,SAASs5C,cAAcj2C,IAG3B8Q,GAAU64B,EAAQhqC,YAI3B8sD,EAASoB,uBAAyB,SAAgCtoC,GAQhE,KAAI,kBAAkB/a,KAAK+a,EAAM/iB,OAAOk9C,SAAWn6B,EAAMwF,QAAUs/B,IAAiB9kC,EAAMwF,QAAUq/B,KAAmB7kC,EAAMwF,QAAUy/B,IAAsBjlC,EAAMwF,QAAUw/B,IAAoBjR,EAAoB,QAAE/zB,EAAM/iB,QAAQyV,QAAQ2zC,IAAevrD,SAAWqqD,GAAelgD,KAAK+a,EAAMwF,UAI7RhuB,KAAKoM,WAAYmwC,EAAoB,QAAEv8C,MAAMq/B,SAAS+uB,IAA1D,CAIA,IAAIr6C,EAAS27C,EAASU,sBAAsBpwD,MAExCgwD,EAAWzT,EAAoB,QAAExoC,GAAQsrB,SAASgvB,IAEtD,GAAK2B,GAAYxnC,EAAMwF,QAAUq/B,GAAjC,CAOA,GAHA7kC,EAAMS,iBACNT,EAAMO,mBAEDinC,GAAYxnC,EAAMwF,QAAUq/B,IAAkB7kC,EAAMwF,QAAUs/B,GAMjE,OALI9kC,EAAMwF,QAAUq/B,IAClB9Q,EAAoB,QAAExoC,EAAOmlC,cAAcyV,KAAyBzlC,QAAQ,cAG9EqzB,EAAoB,QAAEv8C,MAAMkpB,QAAQ,SAItC,IAAI6nC,EAAQ,GAAGzwD,MAAMa,KAAK4S,EAAOjG,iBAAiBihD,KAAyBz+C,QAAO,SAAU9O,GAC1F,OAAO+6C,EAAoB,QAAE/6C,GAAMuY,GAAG,eAGxC,GAAqB,IAAjBg3C,EAAMztD,OAAV,CAIA,IAAI6X,EAAQ41C,EAAMnwD,QAAQ4nB,EAAM/iB,QAE5B+iB,EAAMwF,QAAUw/B,IAAoBryC,EAAQ,GAE9CA,IAGEqN,EAAMwF,QAAUy/B,IAAsBtyC,EAAQ41C,EAAMztD,OAAS,GAE/D6X,IAGEA,EAAQ,IACVA,EAAQ,GAGV41C,EAAM51C,GAAOlG,YAGfynC,EAAagT,EAAU,KAAM,CAAC,CAC5BvhD,IAAK,UACLxK,IAAK,WACH,OAAOqpD,KAER,CACD7+C,IAAK,UACLxK,IAAK,WACH,OAAO2rD,KAER,CACDnhD,IAAK,cACLxK,IAAK,WACH,OAAO8rD,OAIJC,EA1ZmB,GAma5BnT,EAAoB,QAAE38C,UAAUwoB,GAAG8lC,GAAwBS,GAAwBe,GAASoB,wBAAwB1oC,GAAG8lC,GAAwBW,GAAea,GAASoB,wBAAwB1oC,GAAG6lC,GAAyB,IAAME,GAAsBuB,GAASO,aAAa7nC,GAAG6lC,GAAwBU,IAAwB,SAAUnmC,GACxUA,EAAMS,iBACNT,EAAMO,kBAEN2mC,GAAS/O,iBAAiBx/C,KAAKo7C,EAAoB,QAAEv8C,MAAO,aAC3DooB,GAAG6lC,GAAwBW,IAAqB,SAAUniD,GAC3DA,EAAEsc,qBAQJwzB,EAAoB,QAAEp5C,GAAG4pD,IAAU2C,GAAS/O,iBAC5CpE,EAAoB,QAAEp5C,GAAG4pD,IAAQvd,YAAckgB,GAE/CnT,EAAoB,QAAEp5C,GAAG4pD,IAAQ/gB,WAAa,WAE5C,OADAuQ,EAAoB,QAAEp5C,GAAG4pD,IAAUK,GAC5BsC,GAAS/O,kBASlB,IAAIqQ,GAAS,QACTC,GAAY,QACZC,GAAa,WACbC,GAAc,IAAMD,GACpBE,GAAiB,YACjBC,GAAuB9U,EAAoB,QAAEp5C,GAAG6tD,IAChDM,GAAmB,GAEnBC,GAAY,CACdC,UAAU,EACV/N,UAAU,EACVxuC,OAAO,EACPuQ,MAAM,GAEJisC,GAAgB,CAClBD,SAAU,mBACV/N,SAAU,UACVxuC,MAAO,UACPuQ,KAAM,WAEJksC,GAAe,OAASP,GACxBQ,GAAuB,gBAAkBR,GACzCS,GAAiB,SAAWT,GAC5BU,GAAe,OAASV,GACxBW,GAAgB,QAAUX,GAC1BY,GAAgB,UAAYZ,GAC5Ba,GAAe,SAAWb,GAC1Bc,GAAsB,gBAAkBd,GACxCe,GAAwB,kBAAoBf,GAC5CgB,GAAwB,kBAAoBhB,GAC5CiB,GAA0B,oBAAsBjB,GAChDkB,GAAyB,QAAUlB,GAAcC,GACjDkB,GAAwB,0BACxBC,GAAgC,0BAChCC,GAAsB,iBACtBC,GAAkB,aAClBC,GAAoB,OACpBC,GAAoB,OACpBC,GAAoB,eACpBC,GAAkB,gBAClBC,GAAsB,cACtBC,GAAyB,wBACzBC,GAAwB,yBACxBC,GAAyB,oDACzBC,GAA0B,cAO1BC,GAAqB,WACvB,SAASA,EAAMvmB,EAAS0R,GACtBt+C,KAAK2mD,QAAU3mD,KAAK4mD,WAAWtI,GAC/Bt+C,KAAKigD,SAAWrT,EAChB5sC,KAAKozD,QAAUxmB,EAAQsM,cAAc2Z,IACrC7yD,KAAKqzD,UAAY,KACjBrzD,KAAKszD,UAAW,EAChBtzD,KAAKuzD,oBAAqB,EAC1BvzD,KAAKwzD,sBAAuB,EAC5BxzD,KAAKyrD,kBAAmB,EACxBzrD,KAAKyzD,gBAAkB,EAIzB,IAAIvT,EAASiT,EAAM5vD,UA0enB,OAveA28C,EAAOv6B,OAAS,SAAgBsG,GAC9B,OAAOjsB,KAAKszD,SAAWtzD,KAAK0lB,OAAS1lB,KAAKwlB,KAAKyG,IAGjDi0B,EAAO16B,KAAO,SAAcyG,GAC1B,IAAIgwB,EAAQj8C,KAEZ,IAAIA,KAAKszD,WAAYtzD,KAAKyrD,iBAA1B,CAIIlP,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAASqzB,MAChD1yD,KAAKyrD,kBAAmB,GAG1B,IAAI0E,EAAY5T,EAAoB,QAAEpzB,MAAM0oC,GAAc,CACxD5lC,cAAeA,IAEjBswB,EAAoB,QAAEv8C,KAAKigD,UAAU/2B,QAAQinC,GAEzCnwD,KAAKszD,UAAYnD,EAAUpkC,uBAI/B/rB,KAAKszD,UAAW,EAEhBtzD,KAAK0zD,kBAEL1zD,KAAK2zD,gBAEL3zD,KAAK4zD,gBAEL5zD,KAAK6zD,kBAEL7zD,KAAK8zD,kBAELvX,EAAoB,QAAEv8C,KAAKigD,UAAU73B,GAAG6pC,GAAqBe,IAAuB,SAAUxqC,GAC5F,OAAOyzB,EAAMv2B,KAAK8C,MAEpB+zB,EAAoB,QAAEv8C,KAAKozD,SAAShrC,GAAGgqC,IAAyB,WAC9D7V,EAAoB,QAAEN,EAAMgE,UAAU33B,IAAI6pC,IAAuB,SAAU3pC,GACrE+zB,EAAoB,QAAE/zB,EAAM/iB,QAAQsU,GAAGkiC,EAAMgE,YAC/ChE,EAAMuX,sBAAuB,SAKnCxzD,KAAK+zD,eAAc,WACjB,OAAO9X,EAAM+X,aAAa/nC,SAI9Bi0B,EAAOx6B,KAAO,SAAc8C,GAC1B,IAAIw/B,EAAShoD,KAMb,GAJIwoB,GACFA,EAAMS,iBAGHjpB,KAAKszD,WAAYtzD,KAAKyrD,iBAA3B,CAIA,IAAI8E,EAAYhU,EAAoB,QAAEpzB,MAAMuoC,IAG5C,GAFAnV,EAAoB,QAAEv8C,KAAKigD,UAAU/2B,QAAQqnC,GAExCvwD,KAAKszD,WAAY/C,EAAUxkC,qBAAhC,CAIA/rB,KAAKszD,UAAW,EAChB,IAAIW,EAAa1X,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAASqzB,IAe/D,GAbIuB,IACFj0D,KAAKyrD,kBAAmB,GAG1BzrD,KAAK6zD,kBAEL7zD,KAAK8zD,kBAELvX,EAAoB,QAAE38C,UAAU6oB,IAAIspC,IACpCxV,EAAoB,QAAEv8C,KAAKigD,UAAUjhB,YAAY2zB,IACjDpW,EAAoB,QAAEv8C,KAAKigD,UAAUx3B,IAAIwpC,IACzC1V,EAAoB,QAAEv8C,KAAKozD,SAAS3qC,IAAI2pC,IAEpC6B,EAAY,CACd,IAAIrW,EAAqBR,EAAKO,iCAAiC39C,KAAKigD,UACpE1D,EAAoB,QAAEv8C,KAAKigD,UAAU33B,IAAI80B,EAAKL,gBAAgB,SAAUv0B,GACtE,OAAOw/B,EAAOkM,WAAW1rC,MACxB+0B,qBAAqBK,QAExB59C,KAAKk0D,gBAIThU,EAAOM,QAAU,WACf,CAACzgD,OAAQC,KAAKigD,SAAUjgD,KAAKozD,SAASrf,SAAQ,SAAUogB,GACtD,OAAO5X,EAAoB,QAAE4X,GAAa1rC,IAAI0oC,OAQhD5U,EAAoB,QAAE38C,UAAU6oB,IAAIspC,IACpCxV,EAAoB,QAAEr5B,WAAWljB,KAAKigD,SAAUiR,IAChDlxD,KAAK2mD,QAAU,KACf3mD,KAAKigD,SAAW,KAChBjgD,KAAKozD,QAAU,KACfpzD,KAAKqzD,UAAY,KACjBrzD,KAAKszD,SAAW,KAChBtzD,KAAKuzD,mBAAqB,KAC1BvzD,KAAKwzD,qBAAuB,KAC5BxzD,KAAKyrD,iBAAmB,KACxBzrD,KAAKyzD,gBAAkB,MAGzBvT,EAAOkU,aAAe,WACpBp0D,KAAK4zD,iBAIP1T,EAAO0G,WAAa,SAAoBtI,GAGtC,OAFAA,EAASxO,EAAS,GAAIyhB,GAAWjT,GACjClB,EAAKgB,gBAAgB4S,GAAQ1S,EAAQmT,IAC9BnT,GAGT4B,EAAOmU,2BAA6B,WAClC,IAAIlM,EAASnoD,KAEb,GAA8B,WAA1BA,KAAK2mD,QAAQ6K,SAAuB,CACtC,IAAI8C,EAAqB/X,EAAoB,QAAEpzB,MAAMwoC,IAGrD,GAFApV,EAAoB,QAAEv8C,KAAKigD,UAAU/2B,QAAQorC,GAEzCA,EAAmBvoC,qBACrB,OAGF,IAAIwoC,EAAqBv0D,KAAKigD,SAASuU,aAAe50D,SAAS+P,gBAAgBygC,aAE1EmkB,IACHv0D,KAAKigD,SAAS37B,MAAMuX,UAAY,UAGlC77B,KAAKigD,SAASqC,UAAUjnC,IAAIu3C,IAE5B,IAAI6B,EAA0BrX,EAAKO,iCAAiC39C,KAAKozD,SACzE7W,EAAoB,QAAEv8C,KAAKigD,UAAUx3B,IAAI20B,EAAKL,gBAC9CR,EAAoB,QAAEv8C,KAAKigD,UAAU33B,IAAI80B,EAAKL,gBAAgB,WAC5DoL,EAAOlI,SAASqC,UAAU5kC,OAAOk1C,IAE5B2B,GACHhY,EAAoB,QAAE4L,EAAOlI,UAAU33B,IAAI80B,EAAKL,gBAAgB,WAC9DoL,EAAOlI,SAAS37B,MAAMuX,UAAY,MACjC0hB,qBAAqB4K,EAAOlI,SAAUwU,MAE1ClX,qBAAqBkX,GAExBz0D,KAAKigD,SAAShrC,aAEdjV,KAAK0lB,QAITw6B,EAAO8T,aAAe,SAAsB/nC,GAC1C,IAAIo9B,EAASrpD,KAETi0D,EAAa1X,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAASqzB,IAC3DgC,EAAY10D,KAAKozD,QAAUpzD,KAAKozD,QAAQla,cAAc4Z,IAAuB,KAE5E9yD,KAAKigD,SAASr9C,YAAc5C,KAAKigD,SAASr9C,WAAWrB,WAAaysC,KAAK2mB,cAE1E/0D,SAAS0lB,KAAK3iB,YAAY3C,KAAKigD,UAGjCjgD,KAAKigD,SAAS37B,MAAMC,QAAU,QAE9BvkB,KAAKigD,SAASjyC,gBAAgB,eAE9BhO,KAAKigD,SAASx9C,aAAa,cAAc,GAEzCzC,KAAKigD,SAASx9C,aAAa,OAAQ,UAE/B85C,EAAoB,QAAEv8C,KAAKozD,SAAS/zB,SAASizB,KAA0BoC,EACzEA,EAAU77B,UAAY,EAEtB74B,KAAKigD,SAASpnB,UAAY,EAGxBo7B,GACF7W,EAAKY,OAAOh+C,KAAKigD,UAGnB1D,EAAoB,QAAEv8C,KAAKigD,UAAUthB,SAASg0B,IAE1C3yD,KAAK2mD,QAAQ1xC,OACfjV,KAAK40D,gBAGP,IAAIC,EAAatY,EAAoB,QAAEpzB,MAAM2oC,GAAe,CAC1D7lC,cAAeA,IAGb6oC,EAAqB,WACnBzL,EAAO1C,QAAQ1xC,OACjBo0C,EAAOpJ,SAAShrC,QAGlBo0C,EAAOoC,kBAAmB,EAC1BlP,EAAoB,QAAE8M,EAAOpJ,UAAU/2B,QAAQ2rC,IAGjD,GAAIZ,EAAY,CACd,IAAIrW,EAAqBR,EAAKO,iCAAiC39C,KAAKozD,SACpE7W,EAAoB,QAAEv8C,KAAKozD,SAAS9qC,IAAI80B,EAAKL,eAAgB+X,GAAoBvX,qBAAqBK,QAEtGkX,KAIJ5U,EAAO0U,cAAgB,WACrB,IAAIG,EAAS/0D,KAEbu8C,EAAoB,QAAE38C,UAAU6oB,IAAIspC,IACnC3pC,GAAG2pC,IAAe,SAAUvpC,GACvB5oB,WAAa4oB,EAAM/iB,QAAUsvD,EAAO9U,WAAaz3B,EAAM/iB,QAA8E,IAApE82C,EAAoB,QAAEwY,EAAO9U,UAAUtrC,IAAI6T,EAAM/iB,QAAQnC,QAC5HyxD,EAAO9U,SAAShrC,YAKtBirC,EAAO2T,gBAAkB,WACvB,IAAImB,EAASh1D,KAETA,KAAKszD,SACP/W,EAAoB,QAAEv8C,KAAKigD,UAAU73B,GAAG8pC,IAAuB,SAAU1pC,GACnEwsC,EAAOrO,QAAQlD,UAAYj7B,EAAMwF,QAAUsjC,IAC7C9oC,EAAMS,iBAEN+rC,EAAOtvC,QACGsvC,EAAOrO,QAAQlD,UAAYj7B,EAAMwF,QAAUsjC,IACrD0D,EAAOX,gCAGDr0D,KAAKszD,UACf/W,EAAoB,QAAEv8C,KAAKigD,UAAUx3B,IAAIypC,KAI7ChS,EAAO4T,gBAAkB,WACvB,IAAImB,EAASj1D,KAETA,KAAKszD,SACP/W,EAAoB,QAAEx8C,QAAQqoB,GAAG4pC,IAAc,SAAUxpC,GACvD,OAAOysC,EAAOb,aAAa5rC,MAG7B+zB,EAAoB,QAAEx8C,QAAQ0oB,IAAIupC,KAItC9R,EAAOgU,WAAa,WAClB,IAAIgB,EAASl1D,KAEbA,KAAKigD,SAAS37B,MAAMC,QAAU,OAE9BvkB,KAAKigD,SAASx9C,aAAa,eAAe,GAE1CzC,KAAKigD,SAASjyC,gBAAgB,cAE9BhO,KAAKigD,SAASjyC,gBAAgB,QAE9BhO,KAAKyrD,kBAAmB,EAExBzrD,KAAK+zD,eAAc,WACjBxX,EAAoB,QAAE38C,SAAS0lB,MAAM0Z,YAAYyzB,IAEjDyC,EAAOC,oBAEPD,EAAOE,kBAEP7Y,EAAoB,QAAE2Y,EAAOjV,UAAU/2B,QAAQ0oC,QAInD1R,EAAOmV,gBAAkB,WACnBr1D,KAAKqzD,YACP9W,EAAoB,QAAEv8C,KAAKqzD,WAAW31C,SACtC1d,KAAKqzD,UAAY,OAIrBnT,EAAO6T,cAAgB,SAAuB5vD,GAC5C,IAAImxD,EAASt1D,KAETo8B,EAAUmgB,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAASqzB,IAAqBA,GAAoB,GAErG,GAAI1yD,KAAKszD,UAAYtzD,KAAK2mD,QAAQ6K,SAAU,CA4B1C,GA3BAxxD,KAAKqzD,UAAYzzD,SAAS0C,cAAc,OACxCtC,KAAKqzD,UAAUnjD,UAAYsiD,GAEvBp2B,GACFp8B,KAAKqzD,UAAU/Q,UAAUjnC,IAAI+gB,GAG/BmgB,EAAoB,QAAEv8C,KAAKqzD,WAAW5iC,SAAS7wB,SAAS0lB,MACxDi3B,EAAoB,QAAEv8C,KAAKigD,UAAU73B,GAAG6pC,IAAqB,SAAUzpC,GACjE8sC,EAAO9B,qBACT8B,EAAO9B,sBAAuB,EAI5BhrC,EAAM/iB,SAAW+iB,EAAMsC,eAI3BwqC,EAAOjB,gCAGLj4B,GACFghB,EAAKY,OAAOh+C,KAAKqzD,WAGnB9W,EAAoB,QAAEv8C,KAAKqzD,WAAW10B,SAASg0B,KAE1CxuD,EACH,OAGF,IAAKi4B,EAEH,YADAj4B,IAIF,IAAIoxD,EAA6BnY,EAAKO,iCAAiC39C,KAAKqzD,WAC5E9W,EAAoB,QAAEv8C,KAAKqzD,WAAW/qC,IAAI80B,EAAKL,eAAgB54C,GAAUo5C,qBAAqBgY,QACzF,IAAKv1D,KAAKszD,UAAYtzD,KAAKqzD,UAAW,CAC3C9W,EAAoB,QAAEv8C,KAAKqzD,WAAWr0B,YAAY2zB,IAElD,IAAI6C,EAAiB,WACnBF,EAAOD,kBAEHlxD,GACFA,KAIJ,GAAIo4C,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAASqzB,IAAoB,CACpE,IAAI+C,EAA8BrY,EAAKO,iCAAiC39C,KAAKqzD,WAE7E9W,EAAoB,QAAEv8C,KAAKqzD,WAAW/qC,IAAI80B,EAAKL,eAAgByY,GAAgBjY,qBAAqBkY,QAEpGD,SAEOrxD,GACTA,KAQJ+7C,EAAO0T,cAAgB,WACrB,IAAIW,EAAqBv0D,KAAKigD,SAASuU,aAAe50D,SAAS+P,gBAAgBygC,cAE1EpwC,KAAKuzD,oBAAsBgB,IAC9Bv0D,KAAKigD,SAAS37B,MAAMoxC,YAAc11D,KAAKyzD,gBAAkB,MAGvDzzD,KAAKuzD,qBAAuBgB,IAC9Bv0D,KAAKigD,SAAS37B,MAAMqxC,aAAe31D,KAAKyzD,gBAAkB,OAI9DvT,EAAOiV,kBAAoB,WACzBn1D,KAAKigD,SAAS37B,MAAMoxC,YAAc,GAClC11D,KAAKigD,SAAS37B,MAAMqxC,aAAe,IAGrCzV,EAAOwT,gBAAkB,WACvB,IAAIrpB,EAAOzqC,SAAS0lB,KAAKoS,wBACzB13B,KAAKuzD,mBAAqBvtD,KAAK+sB,MAAMsX,EAAKzS,KAAOyS,EAAK7X,OAASzyB,OAAOmxC,WACtElxC,KAAKyzD,gBAAkBzzD,KAAK41D,sBAG9B1V,EAAOyT,cAAgB,WACrB,IAAIkC,EAAU71D,KAEd,GAAIA,KAAKuzD,mBAAoB,CAG3B,IAAIuC,EAAe,GAAGx1D,MAAMa,KAAKvB,SAASkO,iBAAiBmlD,KACvD8C,EAAgB,GAAGz1D,MAAMa,KAAKvB,SAASkO,iBAAiBolD,KAE5D3W,EAAoB,QAAEuZ,GAAc5xD,MAAK,SAAUiX,EAAOyxB,GACxD,IAAIopB,EAAgBppB,EAAQtoB,MAAMqxC,aAC9BM,EAAoB1Z,EAAoB,QAAE3P,GAASpoB,IAAI,iBAC3D+3B,EAAoB,QAAE3P,GAASrqB,KAAK,gBAAiByzC,GAAexxC,IAAI,gBAAiBwO,WAAWijC,GAAqBJ,EAAQpC,gBAAkB,SAGrJlX,EAAoB,QAAEwZ,GAAe7xD,MAAK,SAAUiX,EAAOyxB,GACzD,IAAIspB,EAAetpB,EAAQtoB,MAAM0uB,YAC7BmjB,EAAmB5Z,EAAoB,QAAE3P,GAASpoB,IAAI,gBAC1D+3B,EAAoB,QAAE3P,GAASrqB,KAAK,eAAgB2zC,GAAc1xC,IAAI,eAAgBwO,WAAWmjC,GAAoBN,EAAQpC,gBAAkB,SAGjJ,IAAIuC,EAAgBp2D,SAAS0lB,KAAKhB,MAAMqxC,aACpCM,EAAoB1Z,EAAoB,QAAE38C,SAAS0lB,MAAMd,IAAI,iBACjE+3B,EAAoB,QAAE38C,SAAS0lB,MAAM/C,KAAK,gBAAiByzC,GAAexxC,IAAI,gBAAiBwO,WAAWijC,GAAqBj2D,KAAKyzD,gBAAkB,MAGxJlX,EAAoB,QAAE38C,SAAS0lB,MAAMqZ,SAAS8zB,KAGhDvS,EAAOkV,gBAAkB,WAEvB,IAAIU,EAAe,GAAGx1D,MAAMa,KAAKvB,SAASkO,iBAAiBmlD,KAC3D1W,EAAoB,QAAEuZ,GAAc5xD,MAAK,SAAUiX,EAAOyxB,GACxD,IAAI9U,EAAUykB,EAAoB,QAAE3P,GAASrqB,KAAK,iBAClDg6B,EAAoB,QAAE3P,GAAS1pB,WAAW,iBAC1C0pB,EAAQtoB,MAAMqxC,aAAe79B,GAAoB,MAGnD,IAAIhmB,EAAW,GAAGxR,MAAMa,KAAKvB,SAASkO,iBAAiB,GAAKolD,KAC5D3W,EAAoB,QAAEzqC,GAAU5N,MAAK,SAAUiX,EAAOyxB,GACpD,IAAI/U,EAAS0kB,EAAoB,QAAE3P,GAASrqB,KAAK,qBAE3B,IAAXsV,GACT0kB,EAAoB,QAAE3P,GAASpoB,IAAI,eAAgBqT,GAAQ3U,WAAW,mBAI1E,IAAI4U,EAAUykB,EAAoB,QAAE38C,SAAS0lB,MAAM/C,KAAK,iBACxDg6B,EAAoB,QAAE38C,SAAS0lB,MAAMpC,WAAW,iBAChDtjB,SAAS0lB,KAAKhB,MAAMqxC,aAAe79B,GAAoB,IAGzDooB,EAAO0V,mBAAqB,WAE1B,IAAIQ,EAAYx2D,SAAS0C,cAAc,OACvC8zD,EAAUlmD,UAAYqiD,GACtB3yD,SAAS0lB,KAAK3iB,YAAYyzD,GAC1B,IAAIC,EAAiBD,EAAU1+B,wBAAwBlG,MAAQ4kC,EAAUjmB,YAEzE,OADAvwC,SAAS0lB,KAAKziB,YAAYuzD,GACnBC,GAITlD,EAAMxS,iBAAmB,SAA0BrC,EAAQryB,GACzD,OAAOjsB,KAAKkE,MAAK,WACf,IAAIqe,EAAOg6B,EAAoB,QAAEv8C,MAAMuiB,KAAK2uC,IAExCvK,EAAU7W,EAAS,GAAIyhB,GAAWhV,EAAoB,QAAEv8C,MAAMuiB,OAA0B,iBAAX+7B,GAAuBA,EAASA,EAAS,IAO1H,GALK/7B,IACHA,EAAO,IAAI4wC,EAAMnzD,KAAM2mD,GACvBpK,EAAoB,QAAEv8C,MAAMuiB,KAAK2uC,GAAY3uC,IAGzB,iBAAX+7B,EAAqB,CAC9B,QAA4B,IAAjB/7B,EAAK+7B,GACd,MAAM,IAAIl/B,UAAU,oBAAuBk/B,EAAS,KAGtD/7B,EAAK+7B,GAAQryB,QACJ06B,EAAQnhC,MACjBjD,EAAKiD,KAAKyG,OAKhBywB,EAAayW,EAAO,KAAM,CAAC,CACzBhlD,IAAK,UACLxK,IAAK,WACH,OAAOstD,KAER,CACD9iD,IAAK,UACLxK,IAAK,WACH,OAAO4tD,OAIJ4B,EAxfgB,GAigBzB5W,EAAoB,QAAE38C,UAAUwoB,GAAGiqC,GAAwBU,IAAwB,SAAUvqC,GAC3F,IAEI/iB,EAFA6wD,EAAUt2D,KAGViD,EAAWm6C,EAAKK,uBAAuBz9C,MAEvCiD,IACFwC,EAAS7F,SAASs5C,cAAcj2C,IAGlC,IAAIq7C,EAAS/B,EAAoB,QAAE92C,GAAQ8c,KAAK2uC,IAAc,SAAWphB,EAAS,GAAIyM,EAAoB,QAAE92C,GAAQ8c,OAAQg6B,EAAoB,QAAEv8C,MAAMuiB,QAEnI,MAAjBviB,KAAK2iD,SAAoC,SAAjB3iD,KAAK2iD,SAC/Bn6B,EAAMS,iBAGR,IAAI6jC,EAAUvQ,EAAoB,QAAE92C,GAAQ6iB,IAAIupC,IAAc,SAAU1B,GAClEA,EAAUpkC,sBAKd+gC,EAAQxkC,IAAIspC,IAAgB,WACtBrV,EAAoB,QAAE+Z,GAASv8C,GAAG,aACpCu8C,EAAQrhD,cAKdk+C,GAAMxS,iBAAiBx/C,KAAKo7C,EAAoB,QAAE92C,GAAS64C,EAAQt+C,SAQrEu8C,EAAoB,QAAEp5C,GAAG6tD,IAAUmC,GAAMxS,iBACzCpE,EAAoB,QAAEp5C,GAAG6tD,IAAQxhB,YAAc2jB,GAE/C5W,EAAoB,QAAEp5C,GAAG6tD,IAAQhlB,WAAa,WAE5C,OADAuQ,EAAoB,QAAEp5C,GAAG6tD,IAAUK,GAC5B8B,GAAMxS,kBASf,IAAI4V,GAAW,CAAC,aAAc,OAAQ,OAAQ,WAAY,WAAY,SAAU,MAAO,cAEnFC,GAAmB,CAErB,IAAK,CAAC,QAAS,MAAO,KAAM,OAAQ,OAHT,kBAI3BptD,EAAG,CAAC,SAAU,OAAQ,QAAS,OAC/BipC,KAAM,GACNhpC,EAAG,GACHotD,GAAI,GACJlwC,IAAK,GACLvkB,KAAM,GACN4jB,IAAK,GACL8wC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJ90D,EAAG,GACH+0D,IAAK,CAAC,MAAO,SAAU,MAAO,QAAS,QAAS,UAChDC,GAAI,GACJC,GAAI,GACJp+B,EAAG,GACHq+B,IAAK,GACLp2B,EAAG,GACHq2B,MAAO,GACPC,KAAM,GACNC,IAAK,GACLC,IAAK,GACLC,OAAQ,GACRC,EAAG,GACHC,GAAI,IAQFC,GAAmB,8DAOnBC,GAAmB,qIAEvB,SAASC,GAAiBhmD,EAAMimD,GAC9B,IAAIC,EAAWlmD,EAAK1F,SAAS5E,cAE7B,IAAgD,IAA5CuwD,EAAqBp3D,QAAQq3D,GAC/B,OAAoC,IAAhC1B,GAAS31D,QAAQq3D,IACZ/Z,QAAQnsC,EAAKS,UAAU1F,MAAM+qD,KAAqB9lD,EAAKS,UAAU1F,MAAMgrD,KAUlF,IAJA,IAAII,EAASF,EAAqB1nD,QAAO,SAAU6nD,GACjD,OAAOA,aAAqBpuD,UAGrB5H,EAAI,EAAG2C,EAAMozD,EAAO50D,OAAQnB,EAAI2C,EAAK3C,IAC5C,GAAI81D,EAASnrD,MAAMorD,EAAO/1D,IACxB,OAAO,EAIX,OAAO,EAGT,SAASi2D,GAAaC,EAAYC,EAAWC,GAC3C,GAA0B,IAAtBF,EAAW/0D,OACb,OAAO+0D,EAGT,GAAIE,GAAoC,mBAAfA,EACvB,OAAOA,EAAWF,GA0BpB,IAvBA,IACIG,GADY,IAAIz4D,OAAOygC,WACKC,gBAAgB43B,EAAY,aACxDI,EAAgBr4D,OAAO6N,KAAKqqD,GAC5BxmD,EAAW,GAAGxR,MAAMa,KAAKq3D,EAAgBlzC,KAAKxX,iBAAiB,MAE/D4qD,EAAQ,SAAev2D,EAAG2C,GAC5B,IAAI0J,EAAKsD,EAAS3P,GACdw2D,EAASnqD,EAAGnC,SAAS5E,cAEzB,IAA0D,IAAtDgxD,EAAc73D,QAAQ4N,EAAGnC,SAAS5E,eAEpC,OADA+G,EAAG5L,WAAWC,YAAY2L,GACnB,WAGT,IAAIoqD,EAAgB,GAAGt4D,MAAMa,KAAKqN,EAAG5E,YACjCivD,EAAwB,GAAGp4D,OAAO63D,EAAU,MAAQ,GAAIA,EAAUK,IAAW,IACjFC,EAAc7kB,SAAQ,SAAUhiC,GACzBgmD,GAAiBhmD,EAAM8mD,IAC1BrqD,EAAGR,gBAAgB+D,EAAK1F,cAKrBlK,EAAI,EAAG2C,EAAMgN,EAASxO,OAAQnB,EAAI2C,EAAK3C,IACnCu2D,EAAMv2D,GAKnB,OAAOq2D,EAAgBlzC,KAAKzU,UAS9B,IAAIioD,GAAS,UACTC,GAAY,QACZC,GAAa,aACbC,GAAc,IAAMD,GACpBE,GAAuB3c,EAAoB,QAAEp5C,GAAG21D,IAChDK,GAAe,aACfC,GAAqB,IAAIrvD,OAAO,UAAYovD,GAAe,OAAQ,KACnEE,GAAwB,CAAC,WAAY,YAAa,cAClDC,GAAgB,CAClBr/B,UAAW,UACXs/B,SAAU,SACVC,MAAO,4BACPtwC,QAAS,SACTiU,MAAO,kBACP3N,KAAM,UACNvsB,SAAU,mBACVgvC,UAAW,oBACXtI,OAAQ,2BACR1X,UAAW,2BACXwnC,kBAAmB,iBACnBlK,SAAU,mBACVmK,SAAU,UACVnB,WAAY,kBACZD,UAAW,SACX9I,aAAc,iBAEZmK,GAAgB,CAClBC,KAAM,OACNC,IAAK,MACLC,MAAO,QACPC,OAAQ,SACRC,KAAM,QAEJC,GAAY,CACdhgC,WAAW,EACXs/B,SAAU,uGACVrwC,QAAS,cACTswC,MAAO,GACPr8B,MAAO,EACP3N,MAAM,EACNvsB,UAAU,EACVgvC,UAAW,MACXtI,OAAQ,EACR1X,WAAW,EACXwnC,kBAAmB,OACnBlK,SAAU,eACVmK,UAAU,EACVnB,WAAY,KACZD,UAAW9B,GACXhH,aAAc,MAEZ0K,GAAmB,OACnBC,GAAkB,MAClBhxC,GAAQ,CACVixC,KAAM,OAASnB,GACfoB,OAAQ,SAAWpB,GACnBqB,KAAM,OAASrB,GACfsB,MAAO,QAAUtB,GACjBuB,SAAU,WAAavB,GACvBwB,MAAO,QAAUxB,GACjByB,QAAS,UAAYzB,GACrB0B,SAAU,WAAa1B,GACvB2B,WAAY,aAAe3B,GAC3B4B,WAAY,aAAe5B,IAEzB6B,GAAoB,OACpBC,GAAoB,OACpBC,GAAyB,iBACzBC,GAAiB,SACjBC,GAAgB,QAChBC,GAAgB,QAChBC,GAAgB,QAChBC,GAAiB,SAOjBC,GAAuB,WACzB,SAASA,EAAQ1uB,EAAS0R,GACxB,QAA0C,IAA/B9B,EAAyB,QAClC,MAAM,IAAIp9B,UAAU,mEAItBpf,KAAKu7D,YAAa,EAClBv7D,KAAKw7D,SAAW,EAChBx7D,KAAKy7D,YAAc,GACnBz7D,KAAK07D,eAAiB,GACtB17D,KAAK2vD,QAAU,KAEf3vD,KAAK4sC,QAAUA,EACf5sC,KAAKs+C,OAASt+C,KAAK4mD,WAAWtI,GAC9Bt+C,KAAK27D,IAAM,KAEX37D,KAAK47D,gBAIP,IAAI1b,EAASob,EAAQ/3D,UA8kBrB,OA3kBA28C,EAAO2b,OAAS,WACd77D,KAAKu7D,YAAa,GAGpBrb,EAAOviC,QAAU,WACf3d,KAAKu7D,YAAa,GAGpBrb,EAAO4b,cAAgB,WACrB97D,KAAKu7D,YAAcv7D,KAAKu7D,YAG1Brb,EAAOv6B,OAAS,SAAgB6C,GAC9B,GAAKxoB,KAAKu7D,WAIV,GAAI/yC,EAAO,CACT,IAAIuzC,EAAU/7D,KAAKyD,YAAY47C,SAC3Bn8C,EAAUq5C,EAAoB,QAAE/zB,EAAMsC,eAAevI,KAAKw5C,GAEzD74D,IACHA,EAAU,IAAIlD,KAAKyD,YAAY+kB,EAAMsC,cAAe9qB,KAAKg8D,sBACzDzf,EAAoB,QAAE/zB,EAAMsC,eAAevI,KAAKw5C,EAAS74D,IAG3DA,EAAQw4D,eAAe/vC,OAASzoB,EAAQw4D,eAAe/vC,MAEnDzoB,EAAQ+4D,uBACV/4D,EAAQg5D,OAAO,KAAMh5D,GAErBA,EAAQi5D,OAAO,KAAMj5D,OAElB,CACL,GAAIq5C,EAAoB,QAAEv8C,KAAKo8D,iBAAiB/8B,SAAS07B,IAGvD,YAFA/6D,KAAKm8D,OAAO,KAAMn8D,MAKpBA,KAAKk8D,OAAO,KAAMl8D,QAItBkgD,EAAOM,QAAU,WACfljB,aAAat9B,KAAKw7D,UAClBjf,EAAoB,QAAEr5B,WAAWljB,KAAK4sC,QAAS5sC,KAAKyD,YAAY47C,UAChE9C,EAAoB,QAAEv8C,KAAK4sC,SAASnkB,IAAIzoB,KAAKyD,YAAY67C,WACzD/C,EAAoB,QAAEv8C,KAAK4sC,SAAS1xB,QAAQ,UAAUuN,IAAI,gBAAiBzoB,KAAKq8D,mBAE5Er8D,KAAK27D,KACPpf,EAAoB,QAAEv8C,KAAK27D,KAAKj+C,SAGlC1d,KAAKu7D,WAAa,KAClBv7D,KAAKw7D,SAAW,KAChBx7D,KAAKy7D,YAAc,KACnBz7D,KAAK07D,eAAiB,KAElB17D,KAAK2vD,SACP3vD,KAAK2vD,QAAQza,UAGfl1C,KAAK2vD,QAAU,KACf3vD,KAAK4sC,QAAU,KACf5sC,KAAKs+C,OAAS,KACdt+C,KAAK27D,IAAM,MAGbzb,EAAO16B,KAAO,WACZ,IAAIy2B,EAAQj8C,KAEZ,GAA2D,SAAvDu8C,EAAoB,QAAEv8C,KAAK4sC,SAASpoB,IAAI,WAC1C,MAAM,IAAI1kB,MAAM,uCAGlB,IAAIqwD,EAAY5T,EAAoB,QAAEpzB,MAAMnpB,KAAKyD,YAAY0lB,MAAMmxC,MAEnE,GAAIt6D,KAAKs8D,iBAAmBt8D,KAAKu7D,WAAY,CAC3Chf,EAAoB,QAAEv8C,KAAK4sC,SAAS1jB,QAAQinC,GAC5C,IAAIoM,EAAanf,EAAKsB,eAAe1+C,KAAK4sC,SACtC4vB,EAAajgB,EAAoB,QAAE9zC,SAAwB,OAAf8zD,EAAsBA,EAAav8D,KAAK4sC,QAAQ1/B,cAAcyC,gBAAiB3P,KAAK4sC,SAEpI,GAAIujB,EAAUpkC,uBAAyBywC,EACrC,OAGF,IAAIb,EAAM37D,KAAKo8D,gBACXK,EAAQrf,EAAKI,OAAOx9C,KAAKyD,YAAY07C,MACzCwc,EAAIl5D,aAAa,KAAMg6D,GACvBz8D,KAAK4sC,QAAQnqC,aAAa,mBAAoBg6D,GAC9Cz8D,KAAK08D,aAED18D,KAAKs+C,OAAOrkB,WACdsiB,EAAoB,QAAEof,GAAKh9B,SAASm8B,IAGtC,IAAI7oB,EAA6C,mBAA1BjyC,KAAKs+C,OAAOrM,UAA2BjyC,KAAKs+C,OAAOrM,UAAU9wC,KAAKnB,KAAM27D,EAAK37D,KAAK4sC,SAAW5sC,KAAKs+C,OAAOrM,UAE5H0qB,EAAa38D,KAAK48D,eAAe3qB,GAErCjyC,KAAK68D,mBAAmBF,GAExB,IAAI1qC,EAAYjyB,KAAK88D,gBAErBvgB,EAAoB,QAAEof,GAAKp5C,KAAKviB,KAAKyD,YAAY47C,SAAUr/C,MAEtDu8C,EAAoB,QAAE9zC,SAASzI,KAAK4sC,QAAQ1/B,cAAcyC,gBAAiB3P,KAAK27D,MACnFpf,EAAoB,QAAEof,GAAKlrC,SAASwB,GAGtCsqB,EAAoB,QAAEv8C,KAAK4sC,SAAS1jB,QAAQlpB,KAAKyD,YAAY0lB,MAAMqxC,UACnEx6D,KAAK2vD,QAAU,IAAInT,EAAyB,QAAEx8C,KAAK4sC,QAAS+uB,EAAK37D,KAAKswD,iBAAiBqM,IACvFpgB,EAAoB,QAAEof,GAAKh9B,SAASo8B,IAKhC,iBAAkBn7D,SAAS+P,iBAC7B4sC,EAAoB,QAAE38C,SAAS0lB,MAAM1K,WAAWwN,GAAG,YAAa,KAAMm0B,EAAoB,QAAEj2C,MAG9F,IAAI20B,EAAW,WACTghB,EAAMqC,OAAOrkB,WACfgiB,EAAM8gB,iBAGR,IAAIC,EAAiB/gB,EAAMwf,YAC3Bxf,EAAMwf,YAAc,KACpBlf,EAAoB,QAAEN,EAAMrP,SAAS1jB,QAAQ+yB,EAAMx4C,YAAY0lB,MAAMoxC,OAEjEyC,IAAmB7C,IACrBle,EAAMkgB,OAAO,KAAMlgB,IAIvB,GAAIM,EAAoB,QAAEv8C,KAAK27D,KAAKt8B,SAASy7B,IAAoB,CAC/D,IAAIld,EAAqBR,EAAKO,iCAAiC39C,KAAK27D,KACpEpf,EAAoB,QAAEv8C,KAAK27D,KAAKrzC,IAAI80B,EAAKL,eAAgB9hB,GAAUsiB,qBAAqBK,QAExF3iB,MAKNilB,EAAOx6B,KAAO,SAAcvhB,GAC1B,IAAI6jD,EAAShoD,KAET27D,EAAM37D,KAAKo8D,gBACX7L,EAAYhU,EAAoB,QAAEpzB,MAAMnpB,KAAKyD,YAAY0lB,MAAMixC,MAE/Dn/B,EAAW,WACT+sB,EAAOyT,cAAgBvB,IAAoByB,EAAI/4D,YACjD+4D,EAAI/4D,WAAWC,YAAY84D,GAG7B3T,EAAOiV,iBAEPjV,EAAOpb,QAAQ5+B,gBAAgB,oBAE/BuuC,EAAoB,QAAEyL,EAAOpb,SAAS1jB,QAAQ8+B,EAAOvkD,YAAY0lB,MAAMkxC,QAEhD,OAAnBrS,EAAO2H,SACT3H,EAAO2H,QAAQza,UAGb/wC,GACFA,KAMJ,GAFAo4C,EAAoB,QAAEv8C,KAAK4sC,SAAS1jB,QAAQqnC,IAExCA,EAAUxkC,qBAAd,CAeA,GAXAwwB,EAAoB,QAAEof,GAAK38B,YAAY+7B,IAGnC,iBAAkBn7D,SAAS+P,iBAC7B4sC,EAAoB,QAAE38C,SAAS0lB,MAAM1K,WAAW6N,IAAI,YAAa,KAAM8zB,EAAoB,QAAEj2C,MAG/FtG,KAAK07D,eAAeN,KAAiB,EACrCp7D,KAAK07D,eAAeP,KAAiB,EACrCn7D,KAAK07D,eAAeR,KAAiB,EAEjC3e,EAAoB,QAAEv8C,KAAK27D,KAAKt8B,SAASy7B,IAAoB,CAC/D,IAAIld,EAAqBR,EAAKO,iCAAiCge,GAC/Dpf,EAAoB,QAAEof,GAAKrzC,IAAI80B,EAAKL,eAAgB9hB,GAAUsiB,qBAAqBK,QAEnF3iB,IAGFj7B,KAAKy7D,YAAc,KAGrBvb,EAAOlM,OAAS,WACO,OAAjBh0C,KAAK2vD,SACP3vD,KAAK2vD,QAAQ3Z,kBAKjBkK,EAAOoc,cAAgB,WACrB,OAAOpe,QAAQl+C,KAAKk9D,aAGtBhd,EAAO2c,mBAAqB,SAA4BF,GACtDpgB,EAAoB,QAAEv8C,KAAKo8D,iBAAiBz9B,SAASw6B,GAAe,IAAMwD,IAG5Ezc,EAAOkc,cAAgB,WAErB,OADAp8D,KAAK27D,IAAM37D,KAAK27D,KAAOpf,EAAoB,QAAEv8C,KAAKs+C,OAAOib,UAAU,GAC5Dv5D,KAAK27D,KAGdzb,EAAOwc,WAAa,WAClB,IAAIf,EAAM37D,KAAKo8D,gBACfp8D,KAAKm9D,kBAAkB5gB,EAAoB,QAAEof,EAAI7tD,iBAAiBktD,KAA0Bh7D,KAAKk9D,YACjG3gB,EAAoB,QAAEof,GAAK38B,YAAY87B,GAAoB,IAAMC,KAGnE7a,EAAOid,kBAAoB,SAA2Bvc,EAAU/kC,GACvC,iBAAZA,IAAyBA,EAAQta,WAAYsa,EAAQrY,OAa5DxD,KAAKs+C,OAAO9uB,MACVxvB,KAAKs+C,OAAOob,WACd79C,EAAUu8C,GAAav8C,EAAS7b,KAAKs+C,OAAOga,UAAWt4D,KAAKs+C,OAAOia,aAGrE3X,EAASpxB,KAAK3T,IAEd+kC,EAASr+C,KAAKsZ,GAlBV7b,KAAKs+C,OAAO9uB,KACT+sB,EAAoB,QAAE1gC,GAAS9H,SAASgG,GAAG6mC,IAC9CA,EAASlrC,QAAQwa,OAAOrU,GAG1B+kC,EAASr+C,KAAKg6C,EAAoB,QAAE1gC,GAAStZ,SAiBnD29C,EAAOgd,SAAW,WAChB,IAAI1D,EAAQx5D,KAAK4sC,QAAQpqC,aAAa,uBAMtC,OAJKg3D,IACHA,EAAqC,mBAAtBx5D,KAAKs+C,OAAOkb,MAAuBx5D,KAAKs+C,OAAOkb,MAAMr4D,KAAKnB,KAAK4sC,SAAW5sC,KAAKs+C,OAAOkb,OAGhGA,GAITtZ,EAAOoQ,iBAAmB,SAA0BqM,GAClD,IAAIxU,EAASnoD,KAyBb,OAAO8vC,EAAS,GAvBM,CACpBmC,UAAW0qB,EACX/oB,UAAW,CACTjK,OAAQ3pC,KAAK0wD,aACbrc,KAAM,CACJuF,SAAU55C,KAAKs+C,OAAOmb,mBAExB1gB,MAAO,CACLnM,QAASquB,IAEX7iB,gBAAiB,CACf3G,kBAAmBzxC,KAAKs+C,OAAOiR,WAGnC9a,SAAU,SAAkBlyB,GACtBA,EAAK+xB,oBAAsB/xB,EAAK0vB,WAClCkW,EAAOiV,6BAA6B76C,IAGxCiyB,SAAU,SAAkBjyB,GAC1B,OAAO4lC,EAAOiV,6BAA6B76C,KAGVviB,KAAKs+C,OAAOkR,eAGnDtP,EAAOwQ,WAAa,WAClB,IAAIrH,EAASrpD,KAET2pC,EAAS,GAWb,MATkC,mBAAvB3pC,KAAKs+C,OAAO3U,OACrBA,EAAOxmC,GAAK,SAAUof,GAEpB,OADAA,EAAK0tB,QAAUH,EAAS,GAAIvtB,EAAK0tB,QAASoZ,EAAO/K,OAAO3U,OAAOpnB,EAAK0tB,QAASoZ,EAAOzc,UAAY,IACzFrqB,GAGTonB,EAAOA,OAAS3pC,KAAKs+C,OAAO3U,OAGvBA,GAGTuW,EAAO4c,cAAgB,WACrB,OAA8B,IAA1B98D,KAAKs+C,OAAOrsB,UACPryB,SAAS0lB,KAGd83B,EAAKe,UAAUn+C,KAAKs+C,OAAOrsB,WACtBsqB,EAAoB,QAAEv8C,KAAKs+C,OAAOrsB,WAGpCsqB,EAAoB,QAAE38C,UAAU4Q,KAAKxQ,KAAKs+C,OAAOrsB,YAG1DiuB,EAAO0c,eAAiB,SAAwB3qB,GAC9C,OAAO0nB,GAAc1nB,EAAUpwB,gBAGjCq+B,EAAO0b,cAAgB,WACrB,IAAI7G,EAAS/0D,KAEEA,KAAKs+C,OAAOp1B,QAAQ3hB,MAAM,KAChCwsC,SAAQ,SAAU7qB,GACzB,GAAgB,UAAZA,EACFqzB,EAAoB,QAAEwY,EAAOnoB,SAASxkB,GAAG2sC,EAAOtxD,YAAY0lB,MAAMsxC,MAAO1F,EAAOzW,OAAOr7C,UAAU,SAAUulB,GACzG,OAAOusC,EAAOpvC,OAAO6C,WAElB,GAAIU,IAAYmyC,GAAgB,CACrC,IAAIgC,EAAUn0C,IAAYgyC,GAAgBnG,EAAOtxD,YAAY0lB,MAAMyxC,WAAa7F,EAAOtxD,YAAY0lB,MAAMuxC,QACrG4C,EAAWp0C,IAAYgyC,GAAgBnG,EAAOtxD,YAAY0lB,MAAM0xC,WAAa9F,EAAOtxD,YAAY0lB,MAAMwxC,SAC1Gpe,EAAoB,QAAEwY,EAAOnoB,SAASxkB,GAAGi1C,EAAStI,EAAOzW,OAAOr7C,UAAU,SAAUulB,GAClF,OAAOusC,EAAOmH,OAAO1zC,MACpBJ,GAAGk1C,EAAUvI,EAAOzW,OAAOr7C,UAAU,SAAUulB,GAChD,OAAOusC,EAAOoH,OAAO3zC,UAK3BxoB,KAAKq8D,kBAAoB,WACnBtH,EAAOnoB,SACTmoB,EAAOrvC,QAIX62B,EAAoB,QAAEv8C,KAAK4sC,SAAS1xB,QAAQ,UAAUkN,GAAG,gBAAiBpoB,KAAKq8D,mBAE3Er8D,KAAKs+C,OAAOr7C,SACdjD,KAAKs+C,OAASxO,EAAS,GAAI9vC,KAAKs+C,OAAQ,CACtCp1B,QAAS,SACTjmB,SAAU,KAGZjD,KAAKu9D,aAITrd,EAAOqd,UAAY,WACjB,IAAIC,SAAmBx9D,KAAK4sC,QAAQpqC,aAAa,wBAE7CxC,KAAK4sC,QAAQpqC,aAAa,UAA0B,WAAdg7D,KACxCx9D,KAAK4sC,QAAQnqC,aAAa,sBAAuBzC,KAAK4sC,QAAQpqC,aAAa,UAAY,IACvFxC,KAAK4sC,QAAQnqC,aAAa,QAAS,MAIvCy9C,EAAOgc,OAAS,SAAgB1zC,EAAOtlB,GACrC,IAAI64D,EAAU/7D,KAAKyD,YAAY47C,UAC/Bn8C,EAAUA,GAAWq5C,EAAoB,QAAE/zB,EAAMsC,eAAevI,KAAKw5C,MAGnE74D,EAAU,IAAIlD,KAAKyD,YAAY+kB,EAAMsC,cAAe9qB,KAAKg8D,sBACzDzf,EAAoB,QAAE/zB,EAAMsC,eAAevI,KAAKw5C,EAAS74D,IAGvDslB,IACFtlB,EAAQw4D,eAA8B,YAAflzC,EAAM7mB,KAAqBw5D,GAAgBD,KAAiB,GAGjF3e,EAAoB,QAAEr5C,EAAQk5D,iBAAiB/8B,SAAS07B,KAAsB73D,EAAQu4D,cAAgBvB,GACxGh3D,EAAQu4D,YAAcvB,IAIxB58B,aAAap6B,EAAQs4D,UACrBt4D,EAAQu4D,YAAcvB,GAEjBh3D,EAAQo7C,OAAOnhB,OAAUj6B,EAAQo7C,OAAOnhB,MAAM3X,KAKnDtiB,EAAQs4D,SAAW57C,YAAW,WACxB1c,EAAQu4D,cAAgBvB,IAC1Bh3D,EAAQsiB,SAETtiB,EAAQo7C,OAAOnhB,MAAM3X,MARtBtiB,EAAQsiB,SAWZ06B,EAAOic,OAAS,SAAgB3zC,EAAOtlB,GACrC,IAAI64D,EAAU/7D,KAAKyD,YAAY47C,UAC/Bn8C,EAAUA,GAAWq5C,EAAoB,QAAE/zB,EAAMsC,eAAevI,KAAKw5C,MAGnE74D,EAAU,IAAIlD,KAAKyD,YAAY+kB,EAAMsC,cAAe9qB,KAAKg8D,sBACzDzf,EAAoB,QAAE/zB,EAAMsC,eAAevI,KAAKw5C,EAAS74D,IAGvDslB,IACFtlB,EAAQw4D,eAA8B,aAAflzC,EAAM7mB,KAAsBw5D,GAAgBD,KAAiB,GAGlFh4D,EAAQ+4D,yBAIZ3+B,aAAap6B,EAAQs4D,UACrBt4D,EAAQu4D,YAActB,GAEjBj3D,EAAQo7C,OAAOnhB,OAAUj6B,EAAQo7C,OAAOnhB,MAAMzX,KAKnDxiB,EAAQs4D,SAAW57C,YAAW,WACxB1c,EAAQu4D,cAAgBtB,IAC1Bj3D,EAAQwiB,SAETxiB,EAAQo7C,OAAOnhB,MAAMzX,MARtBxiB,EAAQwiB,SAWZw6B,EAAO+b,qBAAuB,WAC5B,IAAK,IAAI/yC,KAAWlpB,KAAK07D,eACvB,GAAI17D,KAAK07D,eAAexyC,GACtB,OAAO,EAIX,OAAO,GAGTg3B,EAAO0G,WAAa,SAAoBtI,GACtC,IAAImf,EAAiBlhB,EAAoB,QAAEv8C,KAAK4sC,SAASrqB,OA6BzD,OA5BAniB,OAAO6N,KAAKwvD,GAAgB1pB,SAAQ,SAAUjxB,IACK,IAA7Cu2C,GAAsBz4D,QAAQkiB,WACzB26C,EAAe36C,MAKE,iBAF5Bw7B,EAASxO,EAAS,GAAI9vC,KAAKyD,YAAY+/C,QAASia,EAAkC,iBAAXnf,GAAuBA,EAASA,EAAS,KAE9FnhB,QAChBmhB,EAAOnhB,MAAQ,CACb3X,KAAM84B,EAAOnhB,MACbzX,KAAM44B,EAAOnhB,QAIW,iBAAjBmhB,EAAOkb,QAChBlb,EAAOkb,MAAQlb,EAAOkb,MAAM14D,YAGA,iBAAnBw9C,EAAOziC,UAChByiC,EAAOziC,QAAUyiC,EAAOziC,QAAQ/a,YAGlCs8C,EAAKgB,gBAAgB0a,GAAQxa,EAAQt+C,KAAKyD,YAAYogD,aAElDvF,EAAOob,WACTpb,EAAOib,SAAWnB,GAAa9Z,EAAOib,SAAUjb,EAAOga,UAAWha,EAAOia,aAGpEja,GAGT4B,EAAO8b,mBAAqB,WAC1B,IAAI1d,EAAS,GAEb,GAAIt+C,KAAKs+C,OACP,IAAK,IAAInwC,KAAOnO,KAAKs+C,OACft+C,KAAKyD,YAAY+/C,QAAQr1C,KAASnO,KAAKs+C,OAAOnwC,KAChDmwC,EAAOnwC,GAAOnO,KAAKs+C,OAAOnwC,IAKhC,OAAOmwC,GAGT4B,EAAO+c,eAAiB,WACtB,IAAIS,EAAOnhB,EAAoB,QAAEv8C,KAAKo8D,iBAClCuB,EAAWD,EAAK3rD,KAAK,SAASjF,MAAMssD,IAEvB,OAAbuE,GAAqBA,EAASr6D,QAChCo6D,EAAK1+B,YAAY2+B,EAAS9vD,KAAK,MAInCqyC,EAAOkd,6BAA+B,SAAsCQ,GAC1E59D,KAAK27D,IAAMiC,EAAWruB,SAASiC,OAE/BxxC,KAAKi9D,iBAELj9D,KAAK68D,mBAAmB78D,KAAK48D,eAAegB,EAAW3rB,aAGzDiO,EAAO6c,eAAiB,WACtB,IAAIpB,EAAM37D,KAAKo8D,gBACXyB,EAAsB79D,KAAKs+C,OAAOrkB,UAEE,OAApC0hC,EAAIn5D,aAAa,iBAIrB+5C,EAAoB,QAAEof,GAAK38B,YAAY87B,IACvC96D,KAAKs+C,OAAOrkB,WAAY,EACxBj6B,KAAK0lB,OACL1lB,KAAKwlB,OACLxlB,KAAKs+C,OAAOrkB,UAAY4jC,IAI1BvC,EAAQ3a,iBAAmB,SAA0BrC,GACnD,OAAOt+C,KAAKkE,MAAK,WACf,IAAI08C,EAAWrE,EAAoB,QAAEv8C,MACjCuiB,EAAOq+B,EAASr+B,KAAKy2C,IAErBrS,EAA4B,iBAAXrI,GAAuBA,EAE5C,IAAK/7B,IAAQ,eAAe9U,KAAK6wC,MAI5B/7B,IACHA,EAAO,IAAI+4C,EAAQt7D,KAAM2mD,GACzB/F,EAASr+B,KAAKy2C,GAAYz2C,IAGN,iBAAX+7B,GAAqB,CAC9B,QAA4B,IAAjB/7B,EAAK+7B,GACd,MAAM,IAAIl/B,UAAU,oBAAuBk/B,EAAS,KAGtD/7B,EAAK+7B,UAKX5B,EAAa4e,EAAS,KAAM,CAAC,CAC3BntD,IAAK,UACLxK,IAAK,WACH,OAAOo1D,KAER,CACD5qD,IAAK,UACLxK,IAAK,WACH,OAAOs2D,KAER,CACD9rD,IAAK,OACLxK,IAAK,WACH,OAAOm1D,KAER,CACD3qD,IAAK,WACLxK,IAAK,WACH,OAAOq1D,KAER,CACD7qD,IAAK,QACLxK,IAAK,WACH,OAAOwlB,KAER,CACDhb,IAAK,YACLxK,IAAK,WACH,OAAOs1D,KAER,CACD9qD,IAAK,cACLxK,IAAK,WACH,OAAO21D,OAIJgC,EAnmBkB,GA4mB3B/e,EAAoB,QAAEp5C,GAAG21D,IAAUwC,GAAQ3a,iBAC3CpE,EAAoB,QAAEp5C,GAAG21D,IAAQtpB,YAAc8rB,GAE/C/e,EAAoB,QAAEp5C,GAAG21D,IAAQ9sB,WAAa,WAE5C,OADAuQ,EAAoB,QAAEp5C,GAAG21D,IAAUI,GAC5BoC,GAAQ3a,kBASjB,IAAImd,GAAS,UACTC,GAAY,QACZC,GAAa,aACbC,GAAc,IAAMD,GACpBE,GAAuB3hB,EAAoB,QAAEp5C,GAAG26D,IAChDK,GAAiB,aACjBC,GAAuB,IAAIr0D,OAAO,UAAYo0D,GAAiB,OAAQ,KAEvEE,GAAYvuB,EAAS,GAAIwrB,GAAQ9X,QAAS,CAC5CvR,UAAW,QACX/oB,QAAS,QACTrN,QAAS,GACT09C,SAAU,wIAGR+E,GAAgBxuB,EAAS,GAAIwrB,GAAQzX,YAAa,CACpDhoC,QAAS,8BAGP0iD,GAAoB,OACpBC,GAAoB,OACpBC,GAAiB,kBACjBC,GAAmB,gBACnBC,GAAU,CACZvE,KAAM,OAAS6D,GACf5D,OAAQ,SAAW4D,GACnB3D,KAAM,OAAS2D,GACf1D,MAAO,QAAU0D,GACjBzD,SAAU,WAAayD,GACvBxD,MAAO,QAAUwD,GACjBvD,QAAS,UAAYuD,GACrBtD,SAAU,WAAasD,GACvBrD,WAAY,aAAeqD,GAC3BpD,WAAY,aAAeoD,IAQzBW,GAAuB,SAAUC,GAGnC,SAASD,IACP,OAAOC,EAASn+D,MAAMV,KAAMsE,YAActE,KAH5C28C,EAAeiiB,EAASC,GAMxB,IAAI3e,EAAS0e,EAAQr7D,UA6GrB,OA1GA28C,EAAOoc,cAAgB,WACrB,OAAOt8D,KAAKk9D,YAAcl9D,KAAK8+D,eAGjC5e,EAAO2c,mBAAqB,SAA4BF,GACtDpgB,EAAoB,QAAEv8C,KAAKo8D,iBAAiBz9B,SAASw/B,GAAiB,IAAMxB,IAG9Ezc,EAAOkc,cAAgB,WAErB,OADAp8D,KAAK27D,IAAM37D,KAAK27D,KAAOpf,EAAoB,QAAEv8C,KAAKs+C,OAAOib,UAAU,GAC5Dv5D,KAAK27D,KAGdzb,EAAOwc,WAAa,WAClB,IAAIgB,EAAOnhB,EAAoB,QAAEv8C,KAAKo8D,iBAEtCp8D,KAAKm9D,kBAAkBO,EAAKltD,KAAKiuD,IAAiBz+D,KAAKk9D,YAEvD,IAAIrhD,EAAU7b,KAAK8+D,cAEI,mBAAZjjD,IACTA,EAAUA,EAAQ1a,KAAKnB,KAAK4sC,UAG9B5sC,KAAKm9D,kBAAkBO,EAAKltD,KAAKkuD,IAAmB7iD,GACpD6hD,EAAK1+B,YAAYu/B,GAAoB,IAAMC,KAI7Cte,EAAO4e,YAAc,WACnB,OAAO9+D,KAAK4sC,QAAQpqC,aAAa,iBAAmBxC,KAAKs+C,OAAOziC,SAGlEqkC,EAAO+c,eAAiB,WACtB,IAAIS,EAAOnhB,EAAoB,QAAEv8C,KAAKo8D,iBAClCuB,EAAWD,EAAK3rD,KAAK,SAASjF,MAAMsxD,IAEvB,OAAbT,GAAqBA,EAASr6D,OAAS,GACzCo6D,EAAK1+B,YAAY2+B,EAAS9vD,KAAK,MAKnC+wD,EAAQje,iBAAmB,SAA0BrC,GACnD,OAAOt+C,KAAKkE,MAAK,WACf,IAAIqe,EAAOg6B,EAAoB,QAAEv8C,MAAMuiB,KAAKy7C,IAExCrX,EAA4B,iBAAXrI,EAAsBA,EAAS,KAEpD,IAAK/7B,IAAQ,eAAe9U,KAAK6wC,MAI5B/7B,IACHA,EAAO,IAAIq8C,EAAQ5+D,KAAM2mD,GACzBpK,EAAoB,QAAEv8C,MAAMuiB,KAAKy7C,GAAYz7C,IAGzB,iBAAX+7B,GAAqB,CAC9B,QAA4B,IAAjB/7B,EAAK+7B,GACd,MAAM,IAAIl/B,UAAU,oBAAuBk/B,EAAS,KAGtD/7B,EAAK+7B,UAKX5B,EAAakiB,EAAS,KAAM,CAAC,CAC3BzwD,IAAK,UAELxK,IAAK,WACH,OAAOo6D,KAER,CACD5vD,IAAK,UACLxK,IAAK,WACH,OAAO06D,KAER,CACDlwD,IAAK,OACLxK,IAAK,WACH,OAAOm6D,KAER,CACD3vD,IAAK,WACLxK,IAAK,WACH,OAAOq6D,KAER,CACD7vD,IAAK,QACLxK,IAAK,WACH,OAAOg7D,KAER,CACDxwD,IAAK,YACLxK,IAAK,WACH,OAAOs6D,KAER,CACD9vD,IAAK,cACLxK,IAAK,WACH,OAAO26D,OAIJM,EApHkB,CAqHzBtD,IAQF/e,EAAoB,QAAEp5C,GAAG26D,IAAUc,GAAQje,iBAC3CpE,EAAoB,QAAEp5C,GAAG26D,IAAQtuB,YAAcovB,GAE/CriB,EAAoB,QAAEp5C,GAAG26D,IAAQ9xB,WAAa,WAE5C,OADAuQ,EAAoB,QAAEp5C,GAAG26D,IAAUI,GAC5BU,GAAQje,kBASjB,IAAIoe,GAAS,YACTC,GAAY,QACZC,GAAa,eACbC,GAAc,IAAMD,GACpBE,GAAiB,YACjBC,GAAuB7iB,EAAoB,QAAEp5C,GAAG47D,IAChDM,GAAY,CACd11B,OAAQ,GACRntB,OAAQ,OACR/W,OAAQ,IAEN65D,GAAgB,CAClB31B,OAAQ,SACRntB,OAAQ,SACR/W,OAAQ,oBAEN85D,GAAiB,WAAaL,GAC9BM,GAAe,SAAWN,GAC1BO,GAAwB,OAASP,GAAcC,GAC/CO,GAA2B,gBAC3BC,GAAsB,SACtBC,GAAoB,sBACpBC,GAA0B,oBAC1BC,GAAqB,YACrBC,GAAqB,YACrBC,GAAsB,mBACtBC,GAAoB,YACpBC,GAA0B,iBAC1BC,GAA2B,mBAC3BC,GAAgB,SAChBC,GAAkB,WAOlBC,GAAyB,WAC3B,SAASA,EAAU1zB,EAAS0R,GAC1B,IAAIrC,EAAQj8C,KAEZA,KAAKigD,SAAWrT,EAChB5sC,KAAKugE,eAAqC,SAApB3zB,EAAQ+V,QAAqB5iD,OAAS6sC,EAC5D5sC,KAAK2mD,QAAU3mD,KAAK4mD,WAAWtI,GAC/Bt+C,KAAK8rD,UAAY9rD,KAAK2mD,QAAQlhD,OAAS,IAAMq6D,GAAqB,IAAO9/D,KAAK2mD,QAAQlhD,OAAS,IAAMu6D,GAAsB,IAAQhgE,KAAK2mD,QAAQlhD,OAAS,IAAMy6D,GAC/JlgE,KAAKwgE,SAAW,GAChBxgE,KAAKygE,SAAW,GAChBzgE,KAAK0gE,cAAgB,KACrB1gE,KAAK2gE,cAAgB,EACrBpkB,EAAoB,QAAEv8C,KAAKugE,gBAAgBn4C,GAAGo3C,IAAc,SAAUh3C,GACpE,OAAOyzB,EAAM2kB,SAASp4C,MAExBxoB,KAAK6gE,UAEL7gE,KAAK4gE,WAIP,IAAI1gB,EAASogB,EAAU/8D,UAmMvB,OAhMA28C,EAAO2gB,QAAU,WACf,IAAI7Y,EAAShoD,KAET8gE,EAAa9gE,KAAKugE,iBAAmBvgE,KAAKugE,eAAexgE,OAASqgE,GAAgBC,GAClFU,EAAuC,SAAxB/gE,KAAK2mD,QAAQnqC,OAAoBskD,EAAa9gE,KAAK2mD,QAAQnqC,OAC1EwkD,EAAaD,IAAiBV,GAAkBrgE,KAAKihE,gBAAkB,EAC3EjhE,KAAKwgE,SAAW,GAChBxgE,KAAKygE,SAAW,GAChBzgE,KAAK2gE,cAAgB3gE,KAAKkhE,mBACZ,GAAG5gE,MAAMa,KAAKvB,SAASkO,iBAAiB9N,KAAK8rD,YACnD1nD,KAAI,SAAUwoC,GACpB,IAAInnC,EACA07D,EAAiB/jB,EAAKK,uBAAuB7Q,GAMjD,GAJIu0B,IACF17D,EAAS7F,SAASs5C,cAAcioB,IAG9B17D,EAAQ,CACV,IAAI27D,EAAY37D,EAAOiyB,wBAEvB,GAAI0pC,EAAU5vC,OAAS4vC,EAAUxtC,OAE/B,MAAO,CAAC2oB,EAAoB,QAAE92C,GAAQs7D,KAAgBhxD,IAAMixD,EAAYG,GAI5E,OAAO,QACN7wD,QAAO,SAAU9O,GAClB,OAAOA,KACNyD,MAAK,SAAUmE,EAAGC,GACnB,OAAOD,EAAE,GAAKC,EAAE,MACf0qC,SAAQ,SAAUvyC,GACnBwmD,EAAOwY,SAAS7/D,KAAKa,EAAK,IAE1BwmD,EAAOyY,SAAS9/D,KAAKa,EAAK,QAI9B0+C,EAAOM,QAAU,WACfjE,EAAoB,QAAEr5B,WAAWljB,KAAKigD,SAAUgf,IAChD1iB,EAAoB,QAAEv8C,KAAKugE,gBAAgB93C,IAAIy2C,IAC/Cl/D,KAAKigD,SAAW,KAChBjgD,KAAKugE,eAAiB,KACtBvgE,KAAK2mD,QAAU,KACf3mD,KAAK8rD,UAAY,KACjB9rD,KAAKwgE,SAAW,KAChBxgE,KAAKygE,SAAW,KAChBzgE,KAAK0gE,cAAgB,KACrB1gE,KAAK2gE,cAAgB,MAIvBzgB,EAAO0G,WAAa,SAAoBtI,GAGtC,GAA6B,iBAF7BA,EAASxO,EAAS,GAAIuvB,GAA6B,iBAAX/gB,GAAuBA,EAASA,EAAS,KAE/D74C,QAAuB23C,EAAKe,UAAUG,EAAO74C,QAAS,CACtE,IAAI4H,EAAKkvC,EAAoB,QAAE+B,EAAO74C,QAAQsM,KAAK,MAE9C1E,IACHA,EAAK+vC,EAAKI,OAAOuhB,IACjBxiB,EAAoB,QAAE+B,EAAO74C,QAAQsM,KAAK,KAAM1E,IAGlDixC,EAAO74C,OAAS,IAAM4H,EAIxB,OADA+vC,EAAKgB,gBAAgB2gB,GAAQzgB,EAAQghB,IAC9BhhB,GAGT4B,EAAO+gB,cAAgB,WACrB,OAAOjhE,KAAKugE,iBAAmBxgE,OAASC,KAAKugE,eAAeh2B,YAAcvqC,KAAKugE,eAAe1nC,WAGhGqnB,EAAOghB,iBAAmB,WACxB,OAAOlhE,KAAKugE,eAAe/L,cAAgBxuD,KAAKkvB,IAAIt1B,SAAS0lB,KAAKkvC,aAAc50D,SAAS+P,gBAAgB6kD,eAG3GtU,EAAOmhB,iBAAmB,WACxB,OAAOrhE,KAAKugE,iBAAmBxgE,OAASA,OAAOoxC,YAAcnxC,KAAKugE,eAAe7oC,wBAAwB9D,QAG3GssB,EAAO0gB,SAAW,WAChB,IAAI/nC,EAAY74B,KAAKihE,gBAAkBjhE,KAAK2mD,QAAQhd,OAEhD6qB,EAAex0D,KAAKkhE,mBAEpBI,EAAYthE,KAAK2mD,QAAQhd,OAAS6qB,EAAex0D,KAAKqhE,mBAM1D,GAJIrhE,KAAK2gE,gBAAkBnM,GACzBx0D,KAAK6gE,UAGHhoC,GAAayoC,EAAjB,CACE,IAAI77D,EAASzF,KAAKygE,SAASzgE,KAAKygE,SAASn9D,OAAS,GAE9CtD,KAAK0gE,gBAAkBj7D,GACzBzF,KAAKuhE,UAAU97D,OAJnB,CAUA,GAAIzF,KAAK0gE,eAAiB7nC,EAAY74B,KAAKwgE,SAAS,IAAMxgE,KAAKwgE,SAAS,GAAK,EAK3E,OAJAxgE,KAAK0gE,cAAgB,UAErB1gE,KAAKwhE,SAKP,IAAK,IAAIr/D,EAAInC,KAAKwgE,SAASl9D,OAAQnB,KACZnC,KAAK0gE,gBAAkB1gE,KAAKygE,SAASt+D,IAAM02B,GAAa74B,KAAKwgE,SAASr+D,UAAuC,IAAzBnC,KAAKwgE,SAASr+D,EAAI,IAAsB02B,EAAY74B,KAAKwgE,SAASr+D,EAAI,KAG7KnC,KAAKuhE,UAAUvhE,KAAKygE,SAASt+D,MAKnC+9C,EAAOqhB,UAAY,SAAmB97D,GACpCzF,KAAK0gE,cAAgBj7D,EAErBzF,KAAKwhE,SAEL,IAAIC,EAAUzhE,KAAK8rD,UAAUvkD,MAAM,KAAKnD,KAAI,SAAUnB,GACpD,OAAOA,EAAW,iBAAoBwC,EAAS,MAASxC,EAAW,UAAawC,EAAS,QAGvFi8D,EAAQnlB,EAAoB,QAAE,GAAGj8C,MAAMa,KAAKvB,SAASkO,iBAAiB2zD,EAAQ5zD,KAAK,QAEnF6zD,EAAMriC,SAASqgC,KACjBgC,EAAMxmD,QAAQ+kD,IAAmBzvD,KAAK2vD,IAA0BxhC,SAASghC,IACzE+B,EAAM/iC,SAASghC,MAGf+B,EAAM/iC,SAASghC,IAGf+B,EAAMnmD,QAAQskD,IAAyB/kD,KAAKglD,GAAqB,KAAOE,IAAqBrhC,SAASghC,IAEtG+B,EAAMnmD,QAAQskD,IAAyB/kD,KAAKilD,IAAoBnlD,SAASklD,IAAoBnhC,SAASghC,KAGxGpjB,EAAoB,QAAEv8C,KAAKugE,gBAAgBr3C,QAAQq2C,GAAgB,CACjEtzC,cAAexmB,KAInBy6C,EAAOshB,OAAS,WACd,GAAGlhE,MAAMa,KAAKvB,SAASkO,iBAAiB9N,KAAK8rD,YAAYx7C,QAAO,SAAUrO,GACxE,OAAOA,EAAKqgD,UAAU75C,SAASk3D,OAC9B5rB,SAAQ,SAAU9xC,GACnB,OAAOA,EAAKqgD,UAAU5kC,OAAOiiD,QAKjCW,EAAU3f,iBAAmB,SAA0BrC,GACrD,OAAOt+C,KAAKkE,MAAK,WACf,IAAIqe,EAAOg6B,EAAoB,QAAEv8C,MAAMuiB,KAAK08C,IAS5C,GALK18C,IACHA,EAAO,IAAI+9C,EAAUtgE,KAHS,iBAAXs+C,GAAuBA,GAI1C/B,EAAoB,QAAEv8C,MAAMuiB,KAAK08C,GAAY18C,IAGzB,iBAAX+7B,EAAqB,CAC9B,QAA4B,IAAjB/7B,EAAK+7B,GACd,MAAM,IAAIl/B,UAAU,oBAAuBk/B,EAAS,KAGtD/7B,EAAK+7B,UAKX5B,EAAa4jB,EAAW,KAAM,CAAC,CAC7BnyD,IAAK,UACLxK,IAAK,WACH,OAAOq7D,KAER,CACD7wD,IAAK,UACLxK,IAAK,WACH,OAAO07D,OAIJiB,EAxNoB,GAiO7B/jB,EAAoB,QAAEx8C,QAAQqoB,GAAGq3C,IAAuB,WAItD,IAHA,IAAIkC,EAAa,GAAGrhE,MAAMa,KAAKvB,SAASkO,iBAAiB8xD,KAGhDz9D,EAFcw/D,EAAWr+D,OAEHnB,KAAM,CACnC,IAAIy/D,EAAOrlB,EAAoB,QAAEolB,EAAWx/D,IAE5Cm+D,GAAU3f,iBAAiBx/C,KAAKygE,EAAMA,EAAKr/C,YAS/Cg6B,EAAoB,QAAEp5C,GAAG47D,IAAUuB,GAAU3f,iBAC7CpE,EAAoB,QAAEp5C,GAAG47D,IAAQvvB,YAAc8wB,GAE/C/jB,EAAoB,QAAEp5C,GAAG47D,IAAQ/yB,WAAa,WAE5C,OADAuQ,EAAoB,QAAEp5C,GAAG47D,IAAUK,GAC5BkB,GAAU3f,kBASnB,IAAIkhB,GAAS,MACTC,GAAY,QACZC,GAAa,SACbC,GAAc,IAAMD,GACpBE,GAAiB,YACjBC,GAAuB3lB,EAAoB,QAAEp5C,GAAG0+D,IAChDM,GAAe,OAASH,GACxBI,GAAiB,SAAWJ,GAC5BK,GAAe,OAASL,GACxBM,GAAgB,QAAUN,GAC1BO,GAAyB,QAAUP,GAAcC,GACjDO,GAA2B,gBAC3BC,GAAsB,SACtBC,GAAwB,WACxBC,GAAoB,OACpBC,GAAoB,OACpBC,GAAsB,YACtBC,GAA4B,oBAC5BC,GAAoB,UACpBC,GAAqB,iBACrBC,GAAyB,kEACzBC,GAA6B,mBAC7BC,GAAiC,2BAOjCC,GAAmB,WACrB,SAASA,EAAIx2B,GACX5sC,KAAKigD,SAAWrT,EAIlB,IAAIsT,EAASkjB,EAAI7/D,UA6JjB,OA1JA28C,EAAO16B,KAAO,WACZ,IAAIy2B,EAAQj8C,KAEZ,KAAIA,KAAKigD,SAASr9C,YAAc5C,KAAKigD,SAASr9C,WAAWrB,WAAaysC,KAAK2mB,cAAgBpY,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAASojC,KAAwBlmB,EAAoB,QAAEv8C,KAAKigD,UAAU5gB,SAASqjC,KAA/M,CAIA,IAAIj9D,EACA49D,EACAC,EAAc/mB,EAAoB,QAAEv8C,KAAKigD,UAAU/kC,QAAQ4nD,IAA2B,GACtF7/D,EAAWm6C,EAAKK,uBAAuBz9C,KAAKigD,UAEhD,GAAIqjB,EAAa,CACf,IAAIC,EAAwC,OAAzBD,EAAYj3D,UAA8C,OAAzBi3D,EAAYj3D,SAAoB22D,GAAqBD,GAEzGM,GADAA,EAAW9mB,EAAoB,QAAE51C,UAAU41C,EAAoB,QAAE+mB,GAAa9yD,KAAK+yD,KAC/DF,EAAS//D,OAAS,GAGxC,IAAIitD,EAAYhU,EAAoB,QAAEpzB,MAAMg5C,GAAc,CACxDl2C,cAAejsB,KAAKigD,WAElBkQ,EAAY5T,EAAoB,QAAEpzB,MAAMk5C,GAAc,CACxDp2C,cAAeo3C,IASjB,GANIA,GACF9mB,EAAoB,QAAE8mB,GAAUn6C,QAAQqnC,GAG1ChU,EAAoB,QAAEv8C,KAAKigD,UAAU/2B,QAAQinC,IAEzCA,EAAUpkC,uBAAwBwkC,EAAUxkC,qBAAhD,CAII9oB,IACFwC,EAAS7F,SAASs5C,cAAcj2C,IAGlCjD,KAAKuhE,UAAUvhE,KAAKigD,SAAUqjB,GAE9B,IAAIroC,EAAW,WACb,IAAIuoC,EAAcjnB,EAAoB,QAAEpzB,MAAMi5C,GAAgB,CAC5Dn2C,cAAegwB,EAAMgE,WAEnB4U,EAAatY,EAAoB,QAAEpzB,MAAMm5C,GAAe,CAC1Dr2C,cAAeo3C,IAEjB9mB,EAAoB,QAAE8mB,GAAUn6C,QAAQs6C,GACxCjnB,EAAoB,QAAEN,EAAMgE,UAAU/2B,QAAQ2rC,IAG5CpvD,EACFzF,KAAKuhE,UAAU97D,EAAQA,EAAO7C,WAAYq4B,GAE1CA,OAIJilB,EAAOM,QAAU,WACfjE,EAAoB,QAAEr5B,WAAWljB,KAAKigD,SAAU8hB,IAChD/hE,KAAKigD,SAAW,MAIlBC,EAAOqhB,UAAY,SAAmB30B,EAAS3a,EAAW9tB,GACxD,IAAI6jD,EAAShoD,KAGT8iC,IADiB7Q,GAAqC,OAAvBA,EAAU5lB,UAA4C,OAAvB4lB,EAAU5lB,SAAiFkwC,EAAoB,QAAEtqB,GAAWrX,SAASmoD,IAAtGxmB,EAAoB,QAAEtqB,GAAWzhB,KAAKwyD,KAC3G,GACxBvW,EAAkBtoD,GAAY2+B,GAAUyZ,EAAoB,QAAEzZ,GAAQzD,SAASsjC,IAE/E1nC,EAAW,WACb,OAAO+sB,EAAOyb,oBAAoB72B,EAAS9J,EAAQ3+B,IAGrD,GAAI2+B,GAAU2pB,EAAiB,CAC7B,IAAI7O,EAAqBR,EAAKO,iCAAiC7a,GAC/DyZ,EAAoB,QAAEzZ,GAAQ9D,YAAY4jC,IAAmBt6C,IAAI80B,EAAKL,eAAgB9hB,GAAUsiB,qBAAqBK,QAErH3iB,KAIJilB,EAAOujB,oBAAsB,SAA6B72B,EAAS9J,EAAQ3+B,GACzE,GAAI2+B,EAAQ,CACVyZ,EAAoB,QAAEzZ,GAAQ9D,YAAYyjC,IAC1C,IAAIiB,EAAgBnnB,EAAoB,QAAEzZ,EAAOlgC,YAAY4N,KAAK2yD,IAAgC,GAE9FO,GACFnnB,EAAoB,QAAEmnB,GAAe1kC,YAAYyjC,IAGf,QAAhC3/B,EAAOtgC,aAAa,SACtBsgC,EAAOrgC,aAAa,iBAAiB,GAgBzC,GAZA85C,EAAoB,QAAE3P,GAASjO,SAAS8jC,IAEH,QAAjC71B,EAAQpqC,aAAa,SACvBoqC,EAAQnqC,aAAa,iBAAiB,GAGxC26C,EAAKY,OAAOpR,GAERA,EAAQ0V,UAAU75C,SAASk6D,KAC7B/1B,EAAQ0V,UAAUjnC,IAAIunD,IAGpBh2B,EAAQhqC,YAAc25C,EAAoB,QAAE3P,EAAQhqC,YAAYy8B,SAASmjC,IAA2B,CACtG,IAAImB,EAAkBpnB,EAAoB,QAAE3P,GAAS1xB,QAAQ2nD,IAAqB,GAElF,GAAIc,EAAiB,CACnB,IAAIC,EAAqB,GAAGtjE,MAAMa,KAAKwiE,EAAgB71D,iBAAiBo1D,KACxE3mB,EAAoB,QAAEqnB,GAAoBjlC,SAAS8jC,IAGrD71B,EAAQnqC,aAAa,iBAAiB,GAGpC0B,GACFA,KAKJi/D,EAAIziB,iBAAmB,SAA0BrC,GAC/C,OAAOt+C,KAAKkE,MAAK,WACf,IAAI2/D,EAAQtnB,EAAoB,QAAEv8C,MAC9BuiB,EAAOshD,EAAMthD,KAAKw/C,IAOtB,GALKx/C,IACHA,EAAO,IAAI6gD,EAAIpjE,MACf6jE,EAAMthD,KAAKw/C,GAAYx/C,IAGH,iBAAX+7B,EAAqB,CAC9B,QAA4B,IAAjB/7B,EAAK+7B,GACd,MAAM,IAAIl/B,UAAU,oBAAuBk/B,EAAS,KAGtD/7B,EAAK+7B,UAKX5B,EAAa0mB,EAAK,KAAM,CAAC,CACvBj1D,IAAK,UACLxK,IAAK,WACH,OAAOm+D,OAIJsB,EAnKc,GA4KvB7mB,EAAoB,QAAE38C,UAAUwoB,GAAGm6C,GAAwBU,IAAwB,SAAUz6C,GAC3FA,EAAMS,iBAENm6C,GAAIziB,iBAAiBx/C,KAAKo7C,EAAoB,QAAEv8C,MAAO,WAQzDu8C,EAAoB,QAAEp5C,GAAG0+D,IAAUuB,GAAIziB,iBACvCpE,EAAoB,QAAEp5C,GAAG0+D,IAAQryB,YAAc4zB,GAE/C7mB,EAAoB,QAAEp5C,GAAG0+D,IAAQ71B,WAAa,WAE5C,OADAuQ,EAAoB,QAAEp5C,GAAG0+D,IAAUK,GAC5BkB,GAAIziB,kBASb,IAAImjB,GAAS,QACTC,GAAY,QACZC,GAAa,WACbC,GAAc,IAAMD,GACpBE,GAAuB3nB,EAAoB,QAAEp5C,GAAG2gE,IAChDK,GAAwB,gBAAkBF,GAC1CG,GAAe,OAASH,GACxBI,GAAiB,SAAWJ,GAC5BK,GAAe,OAASL,GACxBM,GAAgB,QAAUN,GAC1BO,GAAoB,OACpBC,GAAkB,OAClBC,GAAoB,OACpBC,GAAqB,UACrBC,GAAgB,CAClB3qC,UAAW,UACX4qC,SAAU,UACV1nC,MAAO,UAEL2nC,GAAY,CACd7qC,WAAW,EACX4qC,UAAU,EACV1nC,MAAO,KAEL4nC,GAA0B,yBAO1BC,GAAqB,WACvB,SAASA,EAAMp4B,EAAS0R,GACtBt+C,KAAKigD,SAAWrT,EAChB5sC,KAAK2mD,QAAU3mD,KAAK4mD,WAAWtI,GAC/Bt+C,KAAKw7D,SAAW,KAEhBx7D,KAAK47D,gBAIP,IAAI1b,EAAS8kB,EAAMzhE,UA0JnB,OAvJA28C,EAAO16B,KAAO,WACZ,IAAIy2B,EAAQj8C,KAERmwD,EAAY5T,EAAoB,QAAEpzB,MAAMm7C,IAG5C,GAFA/nB,EAAoB,QAAEv8C,KAAKigD,UAAU/2B,QAAQinC,IAEzCA,EAAUpkC,qBAAd,CAIA/rB,KAAKilE,gBAEDjlE,KAAK2mD,QAAQ1sB,WACfj6B,KAAKigD,SAASqC,UAAUjnC,IAAImpD,IAG9B,IAAIvpC,EAAW,WACbghB,EAAMgE,SAASqC,UAAU5kC,OAAOinD,IAEhC1oB,EAAMgE,SAASqC,UAAUjnC,IAAIqpD,IAE7BnoB,EAAoB,QAAEN,EAAMgE,UAAU/2B,QAAQq7C,IAE1CtoB,EAAM0K,QAAQke,WAChB5oB,EAAMuf,SAAW57C,YAAW,WAC1Bq8B,EAAMv2B,SACLu2B,EAAM0K,QAAQxpB,SAUrB,GANAn9B,KAAKigD,SAASqC,UAAU5kC,OAAO+mD,IAE/BrnB,EAAKY,OAAOh+C,KAAKigD,UAEjBjgD,KAAKigD,SAASqC,UAAUjnC,IAAIspD,IAExB3kE,KAAK2mD,QAAQ1sB,UAAW,CAC1B,IAAI2jB,EAAqBR,EAAKO,iCAAiC39C,KAAKigD,UACpE1D,EAAoB,QAAEv8C,KAAKigD,UAAU33B,IAAI80B,EAAKL,eAAgB9hB,GAAUsiB,qBAAqBK,QAE7F3iB,MAIJilB,EAAOx6B,KAAO,WACZ,GAAK1lB,KAAKigD,SAASqC,UAAU75C,SAASi8D,IAAtC,CAIA,IAAInU,EAAYhU,EAAoB,QAAEpzB,MAAMi7C,IAC5C7nB,EAAoB,QAAEv8C,KAAKigD,UAAU/2B,QAAQqnC,GAEzCA,EAAUxkC,sBAId/rB,KAAKklE,WAGPhlB,EAAOM,QAAU,WACfxgD,KAAKilE,gBAEDjlE,KAAKigD,SAASqC,UAAU75C,SAASi8D,KACnC1kE,KAAKigD,SAASqC,UAAU5kC,OAAOgnD,IAGjCnoB,EAAoB,QAAEv8C,KAAKigD,UAAUx3B,IAAI07C,IACzC5nB,EAAoB,QAAEr5B,WAAWljB,KAAKigD,SAAU+jB,IAChDhkE,KAAKigD,SAAW,KAChBjgD,KAAK2mD,QAAU,MAIjBzG,EAAO0G,WAAa,SAAoBtI,GAGtC,OAFAA,EAASxO,EAAS,GAAIg1B,GAAWvoB,EAAoB,QAAEv8C,KAAKigD,UAAU19B,OAA0B,iBAAX+7B,GAAuBA,EAASA,EAAS,IAC9HlB,EAAKgB,gBAAgB0lB,GAAQxlB,EAAQt+C,KAAKyD,YAAYogD,aAC/CvF,GAGT4B,EAAO0b,cAAgB,WACrB,IAAI5T,EAAShoD,KAEbu8C,EAAoB,QAAEv8C,KAAKigD,UAAU73B,GAAG+7C,GAAuBY,IAAyB,WACtF,OAAO/c,EAAOtiC,WAIlBw6B,EAAOglB,OAAS,WACd,IAAI/c,EAASnoD,KAETi7B,EAAW,WACbktB,EAAOlI,SAASqC,UAAUjnC,IAAIopD,IAE9BloB,EAAoB,QAAE4L,EAAOlI,UAAU/2B,QAAQm7C,KAKjD,GAFArkE,KAAKigD,SAASqC,UAAU5kC,OAAOgnD,IAE3B1kE,KAAK2mD,QAAQ1sB,UAAW,CAC1B,IAAI2jB,EAAqBR,EAAKO,iCAAiC39C,KAAKigD,UACpE1D,EAAoB,QAAEv8C,KAAKigD,UAAU33B,IAAI80B,EAAKL,eAAgB9hB,GAAUsiB,qBAAqBK,QAE7F3iB,KAIJilB,EAAO+kB,cAAgB,WACrB3nC,aAAat9B,KAAKw7D,UAClBx7D,KAAKw7D,SAAW,MAIlBwJ,EAAMrkB,iBAAmB,SAA0BrC,GACjD,OAAOt+C,KAAKkE,MAAK,WACf,IAAI08C,EAAWrE,EAAoB,QAAEv8C,MACjCuiB,EAAOq+B,EAASr+B,KAAKyhD,IASzB,GALKzhD,IACHA,EAAO,IAAIyiD,EAAMhlE,KAHa,iBAAXs+C,GAAuBA,GAI1CsC,EAASr+B,KAAKyhD,GAAYzhD,IAGN,iBAAX+7B,EAAqB,CAC9B,QAA4B,IAAjB/7B,EAAK+7B,GACd,MAAM,IAAIl/B,UAAU,oBAAuBk/B,EAAS,KAGtD/7B,EAAK+7B,GAAQt+C,WAKnB08C,EAAasoB,EAAO,KAAM,CAAC,CACzB72D,IAAK,UACLxK,IAAK,WACH,OAAOogE,KAER,CACD51D,IAAK,cACLxK,IAAK,WACH,OAAOihE,KAER,CACDz2D,IAAK,UACLxK,IAAK,WACH,OAAOmhE,OAIJE,EApKgB,GA6KzBzoB,EAAoB,QAAEp5C,GAAG2gE,IAAUkB,GAAMrkB,iBACzCpE,EAAoB,QAAEp5C,GAAG2gE,IAAQt0B,YAAcw1B,GAE/CzoB,EAAoB,QAAEp5C,GAAG2gE,IAAQ93B,WAAa,WAE5C,OADAuQ,EAAoB,QAAEp5C,GAAG2gE,IAAUI,GAC5Bc,GAAMrkB,kBAGfvE,EAAQ4D,MAAQA,EAChB5D,EAAQ8F,OAASA,EACjB9F,EAAQ8J,SAAWA,GACnB9J,EAAQoP,SAAWA,GACnBpP,EAAQsT,SAAWA,GACnBtT,EAAQ+W,MAAQA,GAChB/W,EAAQwiB,QAAUA,GAClBxiB,EAAQ+oB,UAAY7E,GACpBlkB,EAAQgnB,IAAMA,GACdhnB,EAAQ4oB,MAAQA,GAChB5oB,EAAQkf,QAAUA,GAClBlf,EAAQgB,KAAOA,EAEfh9C,OAAOgiB,eAAeg6B,EAAS,aAAc,CAAEj1C,OAAO,IAxzISzH,CAAQ08C,EAASgpB,EAAmBC;;;;;;;;;yBCEnG,WAGA,IAAIv/D,EAUAw/D,EAAkB,sBAIlBC,EAAiB,4BAMjBC,EAAc,yBAgBdC,EAAwB,GACxBC,EAAoB,GACpBC,EAA0B,GAC1BC,EAAgB,IAChBC,EAAkB,IAiBlBC,EAAW,EAAA,EACXC,EAAmB,iBAEnBC,EAAM,IAGNC,EAAmB,WAKnBC,EAAY,CACd,CAAC,MAAON,GACR,CAAC,OAtCkB,GAuCnB,CAAC,UAtCsB,GAuCvB,CAAC,QArCmB,GAsCpB,CAAC,aAAcH,GACf,CAAC,OAjCkB,KAkCnB,CAAC,UAAWC,GACZ,CAAC,eAAgBC,GACjB,CAAC,QAASE,IAIRM,EAAU,qBACVC,EAAW,iBAEXC,EAAU,mBACVC,EAAU,gBAEVC,EAAW,iBACXC,EAAU,oBACVC,EAAS,6BACTC,EAAS,eACTC,EAAY,kBAEZC,EAAY,kBACZC,EAAa,mBAEbC,EAAY,kBACZC,EAAS,eACTC,EAAY,kBACZC,EAAY,kBAEZC,EAAa,mBAGbC,EAAiB,uBACjBC,EAAc,oBACdC,EAAa,wBACbC,EAAa,wBACbC,EAAU,qBACVC,EAAW,sBACXC,EAAW,sBACXC,EAAW,sBACXC,EAAkB,6BAClBC,EAAY,uBACZC,EAAY,uBAGZC,EAAuB,iBACvBC,EAAsB,qBACtBC,EAAwB,gCAGxBC,EAAgB,4BAChBC,EAAkB,WAClBC,EAAmBp+D,OAAOk+D,EAAclkD,QACxCqkD,EAAqBr+D,OAAOm+D,EAAgBnkD,QAG5CskD,EAAW,mBACXC,EAAa,kBACbC,EAAgB,mBAGhBC,GAAe,mDACfC,GAAgB,QAChBC,GAAa,mGAMbC,GAAe,sBACfC,GAAkB7+D,OAAO4+D,GAAa5kD,QAGtC8kD,GAAc,OAGdC,GAAe,KAGfC,GAAgB,4CAChBC,GAAgB,oCAChBC,GAAiB,QAGjBC,GAAc,4CAYdC,GAA6B,mBAG7BC,GAAe,WAMfC,GAAe,kCAGfC,GAAU,OAGVC,GAAa,qBAGbC,GAAa,aAGbC,GAAe,8BAGfC,GAAY,cAGZC,GAAW,mBAGXC,GAAU,8CAGVC,GAAY,OAGZC,GAAoB,yBAOpBC,GAAeC,gDACfC,GAAiB,kBACjBC,GAAe,4BAKfC,GAAe,4BACfC,GAAa,iBACbC,GAAeC,8OAGfC,GAAS,OACTC,GAAW,oBACXC,GAAU,IAAMJ,GAAe,IAC/BK,GAAU,IAAMX,GAAe,IAC/BY,GAAW,OACXC,GAAY,oBACZC,GAAU,IAAMX,GAAe,IAC/BY,GAAS,oBAAuBT,GAAeM,GAAWV,GAAiBC,GAAeC,GAAe,IACzGY,GAAS,2BAETC,GAAc,qBACdC,GAAa,kCACbC,GAAa,qCACbC,GAAU,IAAMhB,GAAe,IAI/BiB,GAAc,MAAQP,GAAU,IAAMC,GAAS,IAC/CO,GAAc,MAAQF,GAAU,IAAML,GAAS,IAC/CQ,GAAkB,gCAClBC,GAAkB,gCAClBC,GAZa,MAAQd,GAAU,IAAMK,GAAS,IAYtB,IACxBU,GAAW,oBAIXC,GAAQD,GAAWD,IAHP,gBAAwB,CAACR,GAAaC,GAAYC,IAAYr9D,KAAK,KAAO,IAAM49D,GAAWD,GAAW,MAIlHG,GAAU,MAAQ,CAACf,GAAWK,GAAYC,IAAYr9D,KAAK,KAAO,IAAM69D,GACxEE,GAAW,MAAQ,CAACZ,GAAcN,GAAU,IAAKA,GAASO,GAAYC,GAAYV,IAAU38D,KAAK,KAAO,IAGxGg+D,GAAS9hE,OAAOwgE,GAAQ,KAMxBuB,GAAc/hE,OAAO2gE,GAAS,KAG9BqB,GAAYhiE,OAAOghE,GAAS,MAAQA,GAAS,KAAOa,GAAWF,GAAO,KAGtEM,GAAgBjiE,OAAO,CACzBohE,GAAU,IAAMN,GAAU,IAAMS,GAAkB,MAAQ,CAACb,GAASU,GAAS,KAAKt9D,KAAK,KAAO,IAC9Fw9D,GAAc,IAAME,GAAkB,MAAQ,CAACd,GAASU,GAAUC,GAAa,KAAKv9D,KAAK,KAAO,IAChGs9D,GAAU,IAAMC,GAAc,IAAME,GACpCH,GAAU,IAAMI,GAtBD,mDADA,mDA0BfZ,GACAgB,IACA99D,KAAK,KAAM,KAGTo+D,GAAeliE,OAAO,0BAA+BggE,GAAeK,GAAa,KAGjF8B,GAAmB,qEAGnBC,GAAe,CACjB,QAAS,SAAU,WAAY,OAAQ,QAAS,eAAgB,eAChE,WAAY,YAAa,aAAc,aAAc,MAAO,OAAQ,SACpE,UAAW,SAAU,MAAO,SAAU,SAAU,YAAa,aAC7D,oBAAqB,cAAe,cAAe,UACnD,IAAK,eAAgB,WAAY,WAAY,cAI3CC,IAAmB,EAGnBC,GAAiB,GACrBA,GAAehF,GAAcgF,GAAe/E,GAC5C+E,GAAe9E,GAAW8E,GAAe7E,GACzC6E,GAAe5E,GAAY4E,GAAe3E,GAC1C2E,GAAe1E,GAAmB0E,GAAezE,GACjDyE,GAAexE,IAAa,EAC5BwE,GAAelG,GAAWkG,GAAejG,GACzCiG,GAAelF,GAAkBkF,GAAehG,GAChDgG,GAAejF,GAAeiF,GAAe/F,GAC7C+F,GAAe9F,GAAY8F,GAAe7F,GAC1C6F,GAAe3F,GAAU2F,GAAe1F,GACxC0F,GAAezF,GAAayF,GAAevF,GAC3CuF,GAAetF,GAAUsF,GAAerF,GACxCqF,GAAenF,IAAc,EAG7B,IAAIoF,GAAgB,GACpBA,GAAcnG,GAAWmG,GAAclG,GACvCkG,GAAcnF,GAAkBmF,GAAclF,GAC9CkF,GAAcjG,GAAWiG,GAAchG,GACvCgG,GAAcjF,GAAciF,GAAchF,GAC1CgF,GAAc/E,GAAW+E,GAAc9E,GACvC8E,GAAc7E,GAAY6E,GAAc5F,GACxC4F,GAAc3F,GAAa2F,GAAc1F,GACzC0F,GAAcxF,GAAawF,GAAcvF,GACzCuF,GAActF,GAAasF,GAAcrF,GACzCqF,GAAc5E,GAAY4E,GAAc3E,GACxC2E,GAAc1E,GAAa0E,GAAczE,IAAa,EACtDyE,GAAc/F,GAAY+F,GAAc9F,GACxC8F,GAAcpF,IAAc,EAG5B,IA4EIqF,GAAgB,CAClB,KAAM,KACN,IAAK,IACL,KAAM,IACN,KAAM,IACN,SAAU,QACV,SAAU,SAIRC,GAAiBx5C,WACjBy5C,GAAe54C,SAGf64C,GAA8B,iBAAVjtE,GAAsBA,GAAUA,EAAOW,SAAWA,QAAUX,EAGhFktE,GAA0B,iBAARryD,MAAoBA,MAAQA,KAAKla,SAAWA,QAAUka,KAGxEtF,GAAO03D,IAAcC,IAAYC,SAAS,cAATA,GAGjCC,GAA4CzwB,IAAYA,EAAQ76C,UAAY66C,EAG5E0wB,GAAaD,IAA4CltE,IAAWA,EAAO4B,UAAY5B,EAGvFotE,GAAgBD,IAAcA,GAAW1wB,UAAYywB,GAGrDG,GAAcD,IAAiBL,GAAWntD,QAG1C0tD,GAAY,WACd,IAEE,IAAI5kD,EAAQykD,IAAcA,GAAWI,SAAWJ,GAAWI,QAAQ,QAAQ7kD,MAE3E,OAAIA,GAKG2kD,IAAeA,GAAYG,SAAWH,GAAYG,QAAQ,QACjE,MAAO1gE,QAIP2gE,GAAoBH,IAAYA,GAASI,cACzCC,GAAaL,IAAYA,GAASM,OAClCC,GAAYP,IAAYA,GAASQ,MACjCC,GAAeT,IAAYA,GAASU,SACpCC,GAAYX,IAAYA,GAASY,MACjCC,GAAmBb,IAAYA,GAASc,aAc5C,SAASrtE,GAAMqd,EAAMiwD,EAAS55D,GAC5B,OAAQA,EAAK9Q,QACX,KAAK,EAAG,OAAOya,EAAK5c,KAAK6sE,GACzB,KAAK,EAAG,OAAOjwD,EAAK5c,KAAK6sE,EAAS55D,EAAK,IACvC,KAAK,EAAG,OAAO2J,EAAK5c,KAAK6sE,EAAS55D,EAAK,GAAIA,EAAK,IAChD,KAAK,EAAG,OAAO2J,EAAK5c,KAAK6sE,EAAS55D,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAE3D,OAAO2J,EAAKrd,MAAMstE,EAAS55D,GAa7B,SAAS65D,GAAgBztE,EAAOkjB,EAAQwqD,EAAUC,GAIhD,IAHA,IAAIhzD,GAAS,EACT7X,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,SAE9B6X,EAAQ7X,GAAQ,CACvB,IAAI6D,EAAQ3G,EAAM2a,GAClBuI,EAAOyqD,EAAahnE,EAAO+mE,EAAS/mE,GAAQ3G,GAE9C,OAAO2tE,EAYT,SAASC,GAAU5tE,EAAO0tE,GAIxB,IAHA,IAAI/yD,GAAS,EACT7X,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,SAE9B6X,EAAQ7X,IAC8B,IAAzC4qE,EAAS1tE,EAAM2a,GAAQA,EAAO3a,KAIpC,OAAOA,EAYT,SAAS6tE,GAAe7tE,EAAO0tE,GAG7B,IAFA,IAAI5qE,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OAEhCA,MAC0C,IAA3C4qE,EAAS1tE,EAAM8C,GAASA,EAAQ9C,KAItC,OAAOA,EAaT,SAAS8tE,GAAW9tE,EAAO+tE,GAIzB,IAHA,IAAIpzD,GAAS,EACT7X,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,SAE9B6X,EAAQ7X,GACf,IAAKirE,EAAU/tE,EAAM2a,GAAQA,EAAO3a,GAClC,OAAO,EAGX,OAAO,EAYT,SAASguE,GAAYhuE,EAAO+tE,GAM1B,IALA,IAAIpzD,GAAS,EACT7X,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACnCmrE,EAAW,EACXt7D,EAAS,KAEJgI,EAAQ7X,GAAQ,CACvB,IAAI6D,EAAQ3G,EAAM2a,GACdozD,EAAUpnE,EAAOgU,EAAO3a,KAC1B2S,EAAOs7D,KAActnE,GAGzB,OAAOgM,EAYT,SAASu7D,GAAcluE,EAAO2G,GAE5B,SADsB,MAAT3G,EAAgB,EAAIA,EAAM8C,SACpBqrE,GAAYnuE,EAAO2G,EAAO,IAAM,EAYrD,SAASynE,GAAkBpuE,EAAO2G,EAAO0nE,GAIvC,IAHA,IAAI1zD,GAAS,EACT7X,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,SAE9B6X,EAAQ7X,GACf,GAAIurE,EAAW1nE,EAAO3G,EAAM2a,IAC1B,OAAO,EAGX,OAAO,EAYT,SAAS2zD,GAAStuE,EAAO0tE,GAKvB,IAJA,IAAI/yD,GAAS,EACT7X,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACnC6P,EAASvN,MAAMtC,KAEV6X,EAAQ7X,GACf6P,EAAOgI,GAAS+yD,EAAS1tE,EAAM2a,GAAQA,EAAO3a,GAEhD,OAAO2S,EAWT,SAAS47D,GAAUvuE,EAAOilB,GAKxB,IAJA,IAAItK,GAAS,EACT7X,EAASmiB,EAAOniB,OAChBqmC,EAASnpC,EAAM8C,SAEV6X,EAAQ7X,GACf9C,EAAMmpC,EAASxuB,GAASsK,EAAOtK,GAEjC,OAAO3a,EAeT,SAASwuE,GAAYxuE,EAAO0tE,EAAUC,EAAac,GACjD,IAAI9zD,GAAS,EACT7X,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OAKvC,IAHI2rE,GAAa3rE,IACf6qE,EAAc3tE,IAAQ2a,MAEfA,EAAQ7X,GACf6qE,EAAcD,EAASC,EAAa3tE,EAAM2a,GAAQA,EAAO3a,GAE3D,OAAO2tE,EAeT,SAASe,GAAiB1uE,EAAO0tE,EAAUC,EAAac,GACtD,IAAI3rE,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OAIvC,IAHI2rE,GAAa3rE,IACf6qE,EAAc3tE,IAAQ8C,IAEjBA,KACL6qE,EAAcD,EAASC,EAAa3tE,EAAM8C,GAASA,EAAQ9C,GAE7D,OAAO2tE,EAaT,SAASgB,GAAU3uE,EAAO+tE,GAIxB,IAHA,IAAIpzD,GAAS,EACT7X,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,SAE9B6X,EAAQ7X,GACf,GAAIirE,EAAU/tE,EAAM2a,GAAQA,EAAO3a,GACjC,OAAO,EAGX,OAAO,EAUT,IAAI4uE,GAAYC,GAAa,UAmC7B,SAASC,GAAYlgD,EAAYm/C,EAAWgB,GAC1C,IAAIp8D,EAOJ,OANAo8D,EAASngD,GAAY,SAASjoB,EAAOgH,EAAKihB,GACxC,GAAIm/C,EAAUpnE,EAAOgH,EAAKihB,GAExB,OADAjc,EAAShF,GACF,KAGJgF,EAcT,SAASq8D,GAAchvE,EAAO+tE,EAAW1lB,EAAW4mB,GAIlD,IAHA,IAAInsE,EAAS9C,EAAM8C,OACf6X,EAAQ0tC,GAAa4mB,EAAY,GAAK,GAElCA,EAAYt0D,MAAYA,EAAQ7X,GACtC,GAAIirE,EAAU/tE,EAAM2a,GAAQA,EAAO3a,GACjC,OAAO2a,EAGX,OAAQ,EAYV,SAASwzD,GAAYnuE,EAAO2G,EAAO0hD,GACjC,OAAO1hD,GAAUA,EAidnB,SAAuB3G,EAAO2G,EAAO0hD,GACnC,IAAI1tC,EAAQ0tC,EAAY,EACpBvlD,EAAS9C,EAAM8C,OAEnB,OAAS6X,EAAQ7X,GACf,GAAI9C,EAAM2a,KAAWhU,EACnB,OAAOgU,EAGX,OAAQ,EAzdJu0D,CAAclvE,EAAO2G,EAAO0hD,GAC5B2mB,GAAchvE,EAAOmvE,GAAW9mB,GAatC,SAAS+mB,GAAgBpvE,EAAO2G,EAAO0hD,EAAWgmB,GAIhD,IAHA,IAAI1zD,EAAQ0tC,EAAY,EACpBvlD,EAAS9C,EAAM8C,SAEV6X,EAAQ7X,GACf,GAAIurE,EAAWruE,EAAM2a,GAAQhU,GAC3B,OAAOgU,EAGX,OAAQ,EAUV,SAASw0D,GAAUxoE,GACjB,OAAOA,GAAUA,EAYnB,SAAS0oE,GAASrvE,EAAO0tE,GACvB,IAAI5qE,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACvC,OAAOA,EAAUwsE,GAAQtvE,EAAO0tE,GAAY5qE,EAAU0iE,EAUxD,SAASqJ,GAAalhE,GACpB,OAAO,SAAS0O,GACd,OAAiB,MAAVA,EAAiB/W,EAAY+W,EAAO1O,IAW/C,SAAS4hE,GAAelzD,GACtB,OAAO,SAAS1O,GACd,OAAiB,MAAV0O,EAAiB/W,EAAY+W,EAAO1O,IAiB/C,SAAS6hE,GAAW5gD,EAAY8+C,EAAUC,EAAac,EAAWM,GAMhE,OALAA,EAASngD,GAAY,SAASjoB,EAAOgU,EAAOiU,GAC1C++C,EAAcc,GACTA,GAAY,EAAO9nE,GACpB+mE,EAASC,EAAahnE,EAAOgU,EAAOiU,MAEnC++C,EAgCT,SAAS2B,GAAQtvE,EAAO0tE,GAKtB,IAJA,IAAI/6D,EACAgI,GAAS,EACT7X,EAAS9C,EAAM8C,SAEV6X,EAAQ7X,GAAQ,CACvB,IAAIojC,EAAUwnC,EAAS1tE,EAAM2a,IACzBurB,IAAY5gC,IACdqN,EAASA,IAAWrN,EAAY4gC,EAAWvzB,EAASuzB,GAGxD,OAAOvzB,EAYT,SAAS88D,GAAUh2D,EAAGi0D,GAIpB,IAHA,IAAI/yD,GAAS,EACThI,EAASvN,MAAMqU,KAEVkB,EAAQlB,GACf9G,EAAOgI,GAAS+yD,EAAS/yD,GAE3B,OAAOhI,EAyBT,SAAS+8D,GAASnuD,GAChB,OAAOA,EACHA,EAAOzhB,MAAM,EAAG6vE,GAAgBpuD,GAAU,GAAG7b,QAAQ2iE,GAAa,IAClE9mD,EAUN,SAASquD,GAAUryD,GACjB,OAAO,SAAS5W,GACd,OAAO4W,EAAK5W,IAchB,SAASkpE,GAAWxzD,EAAQiP,GAC1B,OAAOgjD,GAAShjD,GAAO,SAAS3d,GAC9B,OAAO0O,EAAO1O,MAYlB,SAASmiE,GAASpiE,EAAOC,GACvB,OAAOD,EAAMyG,IAAIxG,GAYnB,SAASoiE,GAAgBC,EAAYC,GAInC,IAHA,IAAIt1D,GAAS,EACT7X,EAASktE,EAAWltE,SAEf6X,EAAQ7X,GAAUqrE,GAAY8B,EAAYD,EAAWr1D,GAAQ,IAAM,IAC5E,OAAOA,EAYT,SAASu1D,GAAcF,EAAYC,GAGjC,IAFA,IAAIt1D,EAAQq1D,EAAWltE,OAEhB6X,KAAWwzD,GAAY8B,EAAYD,EAAWr1D,GAAQ,IAAM,IACnE,OAAOA,EAWT,SAASw1D,GAAanwE,EAAOowE,GAI3B,IAHA,IAAIttE,EAAS9C,EAAM8C,OACf6P,EAAS,EAEN7P,KACD9C,EAAM8C,KAAYstE,KAClBz9D,EAGN,OAAOA,EAWT,IAAI09D,GAAed,GAjxBG,CAEpB,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAC1E,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAC1E,IAAQ,IAAM,IAAQ,IACtB,IAAQ,IAAM,IAAQ,IACtB,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IACtB,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAC1E,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAC1E,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IACnC,IAAQ,KAAM,IAAQ,KACtB,IAAQ,KAAM,IAAQ,KACtB,IAAQ,KAER,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,KAAM,IAAU,KAC1B,IAAU,KAAM,IAAU,KAC1B,IAAU,KAAM,IAAU,MAouBxBe,GAAiBf,GAhuBH,CAChB,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,UAouBP,SAASgB,GAAiBC,GACxB,MAAO,KAAOzE,GAAcyE,GAsB9B,SAASC,GAAWlvD,GAClB,OAAOkqD,GAAax+D,KAAKsU,GAsC3B,SAASmvD,GAAW9sE,GAClB,IAAI+W,GAAS,EACThI,EAASvN,MAAMxB,EAAI+sE,MAKvB,OAHA/sE,EAAI2vC,SAAQ,SAAS5sC,EAAOgH,GAC1BgF,IAASgI,GAAS,CAAChN,EAAKhH,MAEnBgM,EAWT,SAASi+D,GAAQrzD,EAAMw6B,GACrB,OAAO,SAASrxC,GACd,OAAO6W,EAAKw6B,EAAUrxC,KAa1B,SAASmqE,GAAe7wE,EAAOowE,GAM7B,IALA,IAAIz1D,GAAS,EACT7X,EAAS9C,EAAM8C,OACfmrE,EAAW,EACXt7D,EAAS,KAEJgI,EAAQ7X,GAAQ,CACvB,IAAI6D,EAAQ3G,EAAM2a,GACdhU,IAAUypE,GAAezpE,IAAUq+D,IACrChlE,EAAM2a,GAASqqD,EACfryD,EAAOs7D,KAActzD,GAGzB,OAAOhI,EAUT,SAASm+D,GAAWhvD,GAClB,IAAInH,GAAS,EACThI,EAASvN,MAAM0c,EAAI6uD,MAKvB,OAHA7uD,EAAIyxB,SAAQ,SAAS5sC,GACnBgM,IAASgI,GAAShU,KAEbgM,EAUT,SAASo+D,GAAWjvD,GAClB,IAAInH,GAAS,EACThI,EAASvN,MAAM0c,EAAI6uD,MAKvB,OAHA7uD,EAAIyxB,SAAQ,SAAS5sC,GACnBgM,IAASgI,GAAS,CAAChU,EAAOA,MAErBgM,EAoDT,SAASq+D,GAAWzvD,GAClB,OAAOkvD,GAAWlvD,GAiDpB,SAAqBA,GACnB,IAAI5O,EAAS44D,GAAU0F,UAAY,EACnC,KAAO1F,GAAUt+D,KAAKsU,MAClB5O,EAEJ,OAAOA,EArDHu+D,CAAY3vD,GACZqtD,GAAUrtD,GAUhB,SAAS4vD,GAAc5vD,GACrB,OAAOkvD,GAAWlvD,GAmDpB,SAAwBA,GACtB,OAAOA,EAAOjV,MAAMi/D,KAAc,GAnD9B6F,CAAe7vD,GA7kBrB,SAAsBA,GACpB,OAAOA,EAAOxa,MAAM,IA6kBhBsqE,CAAa9vD,GAWnB,SAASouD,GAAgBpuD,GAGvB,IAFA,IAAI5G,EAAQ4G,EAAOze,OAEZ6X,KAAW2tD,GAAar7D,KAAKsU,EAAOizB,OAAO75B,MAClD,OAAOA,EAUT,IAAI22D,GAAmB/B,GA38BH,CAClB,QAAS,IACT,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,QAAS,MA4gCX,IAs3eIjzD,YAt3eyBi1D,EAAa7uE,GAIxC,IA6BMif,EA7BFvc,IAHJ1C,EAAqB,MAAXA,EAAkB8R,GAAO8H,GAAEk1D,SAASh9D,GAAK5U,SAAU8C,EAAS4Z,GAAEm1D,KAAKj9D,GAAMm3D,MAG/DvmE,MAChB8C,GAAOxF,EAAQwF,KACf5I,GAAQoD,EAAQpD,MAChB8sE,GAAW1pE,EAAQ0pE,SACnB5mE,GAAO9C,EAAQ8C,KACf5F,GAAS8C,EAAQ9C,OACjB2J,GAAS7G,EAAQ6G,OACjB2B,GAASxI,EAAQwI,OACjB0T,GAAYlc,EAAQkc,UAGpB8yD,GAAatsE,GAAMrC,UACnB4uE,GAAYvF,GAASrpE,UACrB6uE,GAAchyE,GAAOmD,UAGrB8uE,GAAanvE,EAAQ,sBAGrBovE,GAAeH,GAAUrxE,SAGzBE,GAAiBoxE,GAAYpxE,eAG7BuxE,GAAY,EAGZC,IACErwD,EAAM,SAAShV,KAAKklE,IAAcA,GAAWpkE,MAAQokE,GAAWpkE,KAAKwkE,UAAY,KACvE,iBAAmBtwD,EAAO,GAQtCuwD,GAAuBN,GAAYtxE,SAGnC6xE,GAAmBL,GAAanxE,KAAKf,IAGrCwyE,GAAU59D,GAAK8H,EAGf+1D,GAAa9oE,GAAO,IACtBuoE,GAAanxE,KAAKH,IAAgBkF,QAAQyiE,GAAc,QACvDziE,QAAQ,yDAA0D,SAAW,KAI5E4sE,GAAS/F,GAAgB7pE,EAAQ4vE,OAAShtE,EAC1CuB,GAASnE,EAAQmE,OACjB0rE,GAAa7vE,EAAQ6vE,WACrBC,GAAcF,GAASA,GAAOE,YAAcltE,EAC5CmtE,GAAe7B,GAAQhxE,GAAOC,eAAgBD,IAC9C8yE,GAAe9yE,GAAOypB,OACtBspD,GAAuBf,GAAYe,qBACnCjuE,GAASgtE,GAAWhtE,OACpBkuE,GAAmB/rE,GAASA,GAAOgsE,mBAAqBvtE,EACxDwtE,GAAcjsE,GAASA,GAAOC,SAAWxB,EACzCytE,GAAiBlsE,GAASA,GAAOmsE,YAAc1tE,EAE/Csc,GAAkB,WACpB,IACE,IAAIrE,EAAO01D,GAAUrzE,GAAQ,kBAE7B,OADA2d,EAAK,GAAI,GAAI,IACNA,EACP,MAAOtR,QAIPinE,GAAkBxwE,EAAQo6B,eAAiBtoB,GAAKsoB,cAAgBp6B,EAAQo6B,aACxEq2C,GAASjrE,IAAQA,GAAKyjB,MAAQnX,GAAKtM,KAAKyjB,KAAOzjB,GAAKyjB,IACpDynD,GAAgB1wE,EAAQ0c,aAAe5K,GAAK4K,YAAc1c,EAAQ0c,WAGlEi0D,GAAa7tE,GAAK2vB,KAClBm+C,GAAc9tE,GAAK6yC,MACnBk7B,GAAmB3zE,GAAO4zE,sBAC1BC,GAAiBnB,GAASA,GAAOoB,SAAWpuE,EAC5CquE,GAAiBjxE,EAAQu0B,SACzB28C,GAAalC,GAAWrkE,KACxBwmE,GAAajD,GAAQhxE,GAAO6N,KAAM7N,IAClCk0E,GAAYtuE,GAAKkvB,IACjBq/C,GAAYvuE,GAAK2yC,IACjB67B,GAAY9rE,GAAKyjB,IACjBsoD,GAAiBvxE,EAAQ2wB,SACzB6gD,GAAe1uE,GAAKC,OACpB0uE,GAAgBzC,GAAWp2D,QAG3B84D,GAAWnB,GAAUvwE,EAAS,YAC9B2xE,GAAMpB,GAAUvwE,EAAS,OACzBqpC,GAAUknC,GAAUvwE,EAAS,WAC7B4xE,GAAMrB,GAAUvwE,EAAS,OACzB6xE,GAAUtB,GAAUvwE,EAAS,WAC7B8xE,GAAevB,GAAUrzE,GAAQ,UAGjC60E,GAAUF,IAAW,IAAIA,GAGzBG,GAAY,GAGZC,GAAqBC,GAASR,IAC9BS,GAAgBD,GAASP,IACzBS,GAAoBF,GAAS7oC,IAC7BgpC,GAAgBH,GAASN,IACzBU,GAAoBJ,GAASL,IAG7BU,GAAcpuE,GAASA,GAAO9D,UAAYuC,EAC1C4vE,GAAgBD,GAAcA,GAAYE,QAAU7vE,EACpD8vE,GAAiBH,GAAcA,GAAY30E,SAAWgF,EAyH1D,SAAS+vE,GAAO1uE,GACd,GAAI2uE,GAAa3uE,KAAWtB,GAAQsB,MAAYA,aAAiB4uE,IAAc,CAC7E,GAAI5uE,aAAiB6uE,GACnB,OAAO7uE,EAET,GAAInG,GAAeG,KAAKgG,EAAO,eAC7B,OAAO8uE,GAAa9uE,GAGxB,OAAO,IAAI6uE,GAAc7uE,GAW3B,IAAI+uE,GAAc,WAChB,SAASr5D,KACT,OAAO,SAAStW,GACd,IAAK4vE,GAAS5vE,GACZ,MAAO,GAET,GAAI2sE,GACF,OAAOA,GAAa3sE,GAEtBsW,EAAOtZ,UAAYgD,EACnB,IAAI4M,EAAS,IAAI0J,EAEjB,OADAA,EAAOtZ,UAAYuC,EACZqN,MASX,SAASijE,MAWT,SAASJ,GAAc7uE,EAAOkvE,GAC5Br2E,KAAKs2E,YAAcnvE,EACnBnH,KAAKu2E,YAAc,GACnBv2E,KAAKw2E,YAAcH,EACnBr2E,KAAKy2E,UAAY,EACjBz2E,KAAK02E,WAAa5wE,EAgFpB,SAASiwE,GAAY5uE,GACnBnH,KAAKs2E,YAAcnvE,EACnBnH,KAAKu2E,YAAc,GACnBv2E,KAAK22E,QAAU,EACf32E,KAAK42E,cAAe,EACpB52E,KAAK62E,cAAgB,GACrB72E,KAAK82E,cAAgB7Q,EACrBjmE,KAAK+2E,UAAY,GAgHnB,SAASC,GAAKC,GACZ,IAAI97D,GAAS,EACT7X,EAAoB,MAAX2zE,EAAkB,EAAIA,EAAQ3zE,OAG3C,IADAtD,KAAKk3E,UACI/7D,EAAQ7X,GAAQ,CACvB,IAAI6zE,EAAQF,EAAQ97D,GACpBnb,KAAKsiB,IAAI60D,EAAM,GAAIA,EAAM,KAiG7B,SAASC,GAAUH,GACjB,IAAI97D,GAAS,EACT7X,EAAoB,MAAX2zE,EAAkB,EAAIA,EAAQ3zE,OAG3C,IADAtD,KAAKk3E,UACI/7D,EAAQ7X,GAAQ,CACvB,IAAI6zE,EAAQF,EAAQ97D,GACpBnb,KAAKsiB,IAAI60D,EAAM,GAAIA,EAAM,KA8G7B,SAASE,GAASJ,GAChB,IAAI97D,GAAS,EACT7X,EAAoB,MAAX2zE,EAAkB,EAAIA,EAAQ3zE,OAG3C,IADAtD,KAAKk3E,UACI/7D,EAAQ7X,GAAQ,CACvB,IAAI6zE,EAAQF,EAAQ97D,GACpBnb,KAAKsiB,IAAI60D,EAAM,GAAIA,EAAM,KAiG7B,SAASG,GAAS7xD,GAChB,IAAItK,GAAS,EACT7X,EAAmB,MAAVmiB,EAAiB,EAAIA,EAAOniB,OAGzC,IADAtD,KAAKu3E,SAAW,IAAIF,KACXl8D,EAAQ7X,GACftD,KAAKqb,IAAIoK,EAAOtK,IA6CpB,SAASq8D,GAAMP,GACb,IAAI10D,EAAOviB,KAAKu3E,SAAW,IAAIH,GAAUH,GACzCj3E,KAAKmxE,KAAO5uD,EAAK4uD,KAqGnB,SAASsG,GAActwE,EAAOuwE,GAC5B,IAAIC,EAAQ9xE,GAAQsB,GAChBywE,GAASD,GAASE,GAAY1wE,GAC9B2wE,GAAUH,IAAUC,GAAS1D,GAAS/sE,GACtC4wE,GAAUJ,IAAUC,IAAUE,GAAU/J,GAAa5mE,GACrD6wE,EAAcL,GAASC,GAASE,GAAUC,EAC1C5kE,EAAS6kE,EAAc/H,GAAU9oE,EAAM7D,OAAQoI,IAAU,GACzDpI,EAAS6P,EAAO7P,OAEpB,IAAK,IAAI6K,KAAOhH,GACTuwE,IAAa12E,GAAeG,KAAKgG,EAAOgH,IACvC6pE,IAEQ,UAAP7pE,GAEC2pE,IAAkB,UAAP3pE,GAA0B,UAAPA,IAE9B4pE,IAAkB,UAAP5pE,GAA0B,cAAPA,GAA8B,cAAPA,IAEtD8pE,GAAQ9pE,EAAK7K,KAElB6P,EAAOxS,KAAKwN,GAGhB,OAAOgF,EAUT,SAAS+kE,GAAY13E,GACnB,IAAI8C,EAAS9C,EAAM8C,OACnB,OAAOA,EAAS9C,EAAM23E,GAAW,EAAG70E,EAAS,IAAMwC,EAWrD,SAASsyE,GAAgB53E,EAAOyZ,GAC9B,OAAOo+D,GAAYC,GAAU93E,GAAQ+3E,GAAUt+D,EAAG,EAAGzZ,EAAM8C,SAU7D,SAASk1E,GAAah4E,GACpB,OAAO63E,GAAYC,GAAU93E,IAY/B,SAASi4E,GAAiB57D,EAAQ1O,EAAKhH,IAChCA,IAAUrB,IAActB,GAAGqY,EAAO1O,GAAMhH,IACxCA,IAAUrB,KAAeqI,KAAO0O,KACnC67D,GAAgB77D,EAAQ1O,EAAKhH,GAcjC,SAASwxE,GAAY97D,EAAQ1O,EAAKhH,GAChC,IAAIyxE,EAAW/7D,EAAO1O,GAChBnN,GAAeG,KAAK0b,EAAQ1O,IAAQ3J,GAAGo0E,EAAUzxE,KAClDA,IAAUrB,GAAeqI,KAAO0O,IACnC67D,GAAgB77D,EAAQ1O,EAAKhH,GAYjC,SAAS0xE,GAAar4E,EAAO2N,GAE3B,IADA,IAAI7K,EAAS9C,EAAM8C,OACZA,KACL,GAAIkB,GAAGhE,EAAM8C,GAAQ,GAAI6K,GACvB,OAAO7K,EAGX,OAAQ,EAcV,SAASw1E,GAAe1pD,EAAY1L,EAAQwqD,EAAUC,GAIpD,OAHA4K,GAAS3pD,GAAY,SAASjoB,EAAOgH,EAAKihB,GACxC1L,EAAOyqD,EAAahnE,EAAO+mE,EAAS/mE,GAAQioB,MAEvC++C,EAYT,SAAS6K,GAAWn8D,EAAQkH,GAC1B,OAAOlH,GAAUo8D,GAAWl1D,EAAQ9V,GAAK8V,GAASlH,GAyBpD,SAAS67D,GAAgB77D,EAAQ1O,EAAKhH,GACzB,aAAPgH,GAAsBiU,GACxBA,GAAevF,EAAQ1O,EAAK,CAC1BkU,cAAgB,EAChBiJ,YAAc,EACdnkB,MAASA,EACTqkB,UAAY,IAGd3O,EAAO1O,GAAOhH,EAYlB,SAAS+xE,GAAOr8D,EAAQs8D,GAMtB,IALA,IAAIh+D,GAAS,EACT7X,EAAS61E,EAAM71E,OACf6P,EAASvN,GAAMtC,GACfoT,EAAiB,MAAVmG,IAEF1B,EAAQ7X,GACf6P,EAAOgI,GAASzE,EAAO5Q,EAAYnC,GAAIkZ,EAAQs8D,EAAMh+D,IAEvD,OAAOhI,EAYT,SAASolE,GAAUa,EAAQC,EAAOC,GAShC,OARIF,GAAWA,IACTE,IAAUxzE,IACZszE,EAASA,GAAUE,EAAQF,EAASE,GAElCD,IAAUvzE,IACZszE,EAASA,GAAUC,EAAQD,EAASC,IAGjCD,EAmBT,SAASG,GAAUpyE,EAAOqyE,EAASC,EAAYtrE,EAAK0O,EAAQyD,GAC1D,IAAInN,EACAumE,EArkFc,EAqkFLF,EACTG,EArkFc,EAqkFLH,EACTI,EArkFiB,EAqkFRJ,EAKb,GAHIC,IACFtmE,EAAS0J,EAAS48D,EAAWtyE,EAAOgH,EAAK0O,EAAQyD,GAASm5D,EAAWtyE,IAEnEgM,IAAWrN,EACb,OAAOqN,EAET,IAAKgjE,GAAShvE,GACZ,OAAOA,EAET,IAAIwwE,EAAQ9xE,GAAQsB,GACpB,GAAIwwE,GAEF,GADAxkE,EA68GJ,SAAwB3S,GACtB,IAAI8C,EAAS9C,EAAM8C,OACf6P,EAAS,IAAI3S,EAAMiD,YAAYH,GAG/BA,GAA6B,iBAAZ9C,EAAM,IAAkBQ,GAAeG,KAAKX,EAAO,WACtE2S,EAAOgI,MAAQ3a,EAAM2a,MACrBhI,EAAOvC,MAAQpQ,EAAMoQ,OAEvB,OAAOuC,EAt9GI0mE,CAAe1yE,IACnBuyE,EACH,OAAOpB,GAAUnxE,EAAOgM,OAErB,CACL,IAAIzC,EAAMopE,GAAO3yE,GACb4yE,EAASrpE,GAAO81D,GAAW91D,GAAO+1D,EAEtC,GAAIyN,GAAS/sE,GACX,OAAO6yE,GAAY7yE,EAAOuyE,GAE5B,GAAIhpE,GAAOk2D,GAAal2D,GAAOy1D,GAAY4T,IAAWl9D,GAEpD,GADA1J,EAAUwmE,GAAUI,EAAU,GAAKE,GAAgB9yE,IAC9CuyE,EACH,OAAOC,EA+nEf,SAAuB51D,EAAQlH,GAC7B,OAAOo8D,GAAWl1D,EAAQm2D,GAAan2D,GAASlH,GA/nEtCs9D,CAAchzE,EAnH1B,SAAsB0V,EAAQkH,GAC5B,OAAOlH,GAAUo8D,GAAWl1D,EAAQq2D,GAAOr2D,GAASlH,GAkHrBw9D,CAAalnE,EAAQhM,IAknEtD,SAAqB4c,EAAQlH,GAC3B,OAAOo8D,GAAWl1D,EAAQu2D,GAAWv2D,GAASlH,GAlnEpC09D,CAAYpzE,EAAO6xE,GAAW7lE,EAAQhM,QAEvC,CACL,IAAKmlE,GAAc57D,GACjB,OAAOmM,EAAS1V,EAAQ,GAE1BgM,EA49GN,SAAwB0J,EAAQnM,EAAKgpE,GACnC,IAAIlzE,EAAOqW,EAAOpZ,YAClB,OAAQiN,GACN,KAAKy2D,EACH,OAAOqT,GAAiB39D,GAE1B,KAAKwpD,EACL,KAAKC,EACH,OAAO,IAAI9/D,GAAMqW,GAEnB,KAAKuqD,EACH,OA5nDN,SAAuBqT,EAAUf,GAC/B,IAAIgB,EAAShB,EAASc,GAAiBC,EAASC,QAAUD,EAASC,OACnE,OAAO,IAAID,EAASh3E,YAAYi3E,EAAQD,EAASE,WAAYF,EAASG,YA0nD3DC,CAAch+D,EAAQ68D,GAE/B,KAAKrS,EAAY,KAAKC,EACtB,KAAKC,EAAS,KAAKC,EAAU,KAAKC,EAClC,KAAKC,EAAU,KAAKC,EAAiB,KAAKC,EAAW,KAAKC,EACxD,OAAOiT,GAAgBj+D,EAAQ68D,GAEjC,KAAKhT,EACH,OAAO,IAAIlgE,EAEb,KAAKmgE,EACL,KAAKK,EACH,OAAO,IAAIxgE,EAAKqW,GAElB,KAAKiqD,EACH,OA/nDN,SAAqBiU,GACnB,IAAI5nE,EAAS,IAAI4nE,EAAOt3E,YAAYs3E,EAAOh3D,OAAQulD,GAAQn8D,KAAK4tE,IAEhE,OADA5nE,EAAOs+D,UAAYsJ,EAAOtJ,UACnBt+D,EA4nDI6nE,CAAYn+D,GAErB,KAAKkqD,EACH,OAAO,IAAIvgE,EAEb,KAAKygE,EACH,OAxnDegU,EAwnDIp+D,EAvnDhB64D,GAAgBt1E,GAAOs1E,GAAcv0E,KAAK85E,IAAW,GAD9D,IAAqBA,EAp4DNC,CAAe/zE,EAAOuJ,EAAKgpE,IAIxCp5D,IAAUA,EAAQ,IAAIk3D,IACtB,IAAI2D,EAAU76D,EAAM3c,IAAIwD,GACxB,GAAIg0E,EACF,OAAOA,EAET76D,EAAMgC,IAAInb,EAAOgM,GAEb06D,GAAM1mE,GACRA,EAAM4sC,SAAQ,SAASqnC,GACrBjoE,EAAOkI,IAAIk+D,GAAU6B,EAAU5B,EAASC,EAAY2B,EAAUj0E,EAAOmZ,OAE9DmtD,GAAMtmE,IACfA,EAAM4sC,SAAQ,SAASqnC,EAAUjtE,GAC/BgF,EAAOmP,IAAInU,EAAKorE,GAAU6B,EAAU5B,EAASC,EAAYtrE,EAAKhH,EAAOmZ,OAIzE,IAIIwL,EAAQ6rD,EAAQ7xE,GAJL8zE,EACVD,EAAS0B,GAAeC,GACxB3B,EAASS,GAASnsE,IAEkB9G,GASzC,OARAinE,GAAUtiD,GAAS3kB,GAAO,SAASi0E,EAAUjtE,GACvC2d,IAEFsvD,EAAWj0E,EADXgH,EAAMitE,IAIRzC,GAAYxlE,EAAQhF,EAAKorE,GAAU6B,EAAU5B,EAASC,EAAYtrE,EAAKhH,EAAOmZ,OAEzEnN,EAyBT,SAASooE,GAAe1+D,EAAQkH,EAAQ+H,GACtC,IAAIxoB,EAASwoB,EAAMxoB,OACnB,GAAc,MAAVuZ,EACF,OAAQvZ,EAGV,IADAuZ,EAASzc,GAAOyc,GACTvZ,KAAU,CACf,IAAI6K,EAAM2d,EAAMxoB,GACZirE,EAAYxqD,EAAO5V,GACnBhH,EAAQ0V,EAAO1O,GAEnB,GAAKhH,IAAUrB,KAAeqI,KAAO0O,KAAa0xD,EAAUpnE,GAC1D,OAAO,EAGX,OAAO,EAaT,SAASq0E,GAAUz9D,EAAMgD,EAAM3M,GAC7B,GAAmB,mBAAR2J,EACT,MAAM,IAAIqB,GAAUkmD,GAEtB,OAAO1lD,IAAW,WAAa7B,EAAKrd,MAAMoF,EAAWsO,KAAU2M,GAcjE,SAAS06D,GAAej7E,EAAOilB,EAAQyoD,EAAUW,GAC/C,IAAI1zD,GAAS,EACTugE,EAAWhN,GACXiN,GAAW,EACXr4E,EAAS9C,EAAM8C,OACf6P,EAAS,GACTyoE,EAAen2D,EAAOniB,OAE1B,IAAKA,EACH,OAAO6P,EAEL+6D,IACFzoD,EAASqpD,GAASrpD,EAAQ2qD,GAAUlC,KAElCW,GACF6M,EAAW9M,GACX+M,GAAW,GAEJl2D,EAAOniB,QAtvFG,MAuvFjBo4E,EAAWpL,GACXqL,GAAW,EACXl2D,EAAS,IAAI6xD,GAAS7xD,IAExBo2D,EACA,OAAS1gE,EAAQ7X,GAAQ,CACvB,IAAI6D,EAAQ3G,EAAM2a,GACdoW,EAAuB,MAAZ28C,EAAmB/mE,EAAQ+mE,EAAS/mE,GAGnD,GADAA,EAAS0nE,GAAwB,IAAV1nE,EAAeA,EAAQ,EAC1Cw0E,GAAYpqD,GAAaA,EAAU,CAErC,IADA,IAAIuqD,EAAcF,EACXE,KACL,GAAIr2D,EAAOq2D,KAAiBvqD,EAC1B,SAASsqD,EAGb1oE,EAAOxS,KAAKwG,QAEJu0E,EAASj2D,EAAQ8L,EAAUs9C,IACnC17D,EAAOxS,KAAKwG,GAGhB,OAAOgM,EAjkCT0iE,GAAOkG,iBAAmB,CAQxBxwE,OAAU88D,EAQV2T,SAAY1T,EAQZ2T,YAAe1T,EAQf2T,SAAY,GAQZC,QAAW,CAQTr/D,EAAK+4D,KAKTA,GAAOtyE,UAAY6yE,GAAW7yE,UAC9BsyE,GAAOtyE,UAAUE,YAAcoyE,GAE/BG,GAAczyE,UAAY2yE,GAAWE,GAAW7yE,WAChDyyE,GAAczyE,UAAUE,YAAcuyE,GAsHtCD,GAAYxyE,UAAY2yE,GAAWE,GAAW7yE,WAC9CwyE,GAAYxyE,UAAUE,YAAcsyE,GAoGpCiB,GAAKzzE,UAAU2zE,MAvEf,WACEl3E,KAAKu3E,SAAWvC,GAAeA,GAAa,MAAQ,GACpDh1E,KAAKmxE,KAAO,GAsEd6F,GAAKzzE,UAAkB,OAzDvB,SAAoB4K,GAClB,IAAIgF,EAASnT,KAAK2U,IAAIxG,WAAenO,KAAKu3E,SAASppE,GAEnD,OADAnO,KAAKmxE,MAAQh+D,EAAS,EAAI,EACnBA,GAuDT6jE,GAAKzzE,UAAUI,IA3Cf,SAAiBwK,GACf,IAAIoU,EAAOviB,KAAKu3E,SAChB,GAAIvC,GAAc,CAChB,IAAI7hE,EAASoP,EAAKpU,GAClB,OAAOgF,IAAWoyD,EAAiBz/D,EAAYqN,EAEjD,OAAOnS,GAAeG,KAAKohB,EAAMpU,GAAOoU,EAAKpU,GAAOrI,GAsCtDkxE,GAAKzzE,UAAUoR,IA1Bf,SAAiBxG,GACf,IAAIoU,EAAOviB,KAAKu3E,SAChB,OAAOvC,GAAgBzyD,EAAKpU,KAASrI,EAAa9E,GAAeG,KAAKohB,EAAMpU,IAyB9E6oE,GAAKzzE,UAAU+e,IAZf,SAAiBnU,EAAKhH,GACpB,IAAIob,EAAOviB,KAAKu3E,SAGhB,OAFAv3E,KAAKmxE,MAAQnxE,KAAK2U,IAAIxG,GAAO,EAAI,EACjCoU,EAAKpU,GAAQ6mE,IAAgB7tE,IAAUrB,EAAay/D,EAAiBp+D,EAC9DnH,MAyHTo3E,GAAU7zE,UAAU2zE,MApFpB,WACEl3E,KAAKu3E,SAAW,GAChBv3E,KAAKmxE,KAAO,GAmFdiG,GAAU7zE,UAAkB,OAvE5B,SAAyB4K,GACvB,IAAIoU,EAAOviB,KAAKu3E,SACZp8D,EAAQ09D,GAAat2D,EAAMpU,GAE/B,QAAIgN,EAAQ,KAIRA,GADYoH,EAAKjf,OAAS,EAE5Bif,EAAKjZ,MAELpE,GAAO/D,KAAKohB,EAAMpH,EAAO,KAEzBnb,KAAKmxE,MACA,IA0DTiG,GAAU7zE,UAAUI,IA9CpB,SAAsBwK,GACpB,IAAIoU,EAAOviB,KAAKu3E,SACZp8D,EAAQ09D,GAAat2D,EAAMpU,GAE/B,OAAOgN,EAAQ,EAAIrV,EAAYyc,EAAKpH,GAAO,IA2C7Ci8D,GAAU7zE,UAAUoR,IA/BpB,SAAsBxG,GACpB,OAAO0qE,GAAa74E,KAAKu3E,SAAUppE,IAAQ,GA+B7CipE,GAAU7zE,UAAU+e,IAlBpB,SAAsBnU,EAAKhH,GACzB,IAAIob,EAAOviB,KAAKu3E,SACZp8D,EAAQ09D,GAAat2D,EAAMpU,GAQ/B,OANIgN,EAAQ,KACRnb,KAAKmxE,KACP5uD,EAAK5hB,KAAK,CAACwN,EAAKhH,KAEhBob,EAAKpH,GAAO,GAAKhU,EAEZnH,MA2GTq3E,GAAS9zE,UAAU2zE,MAtEnB,WACEl3E,KAAKmxE,KAAO,EACZnxE,KAAKu3E,SAAW,CACdziE,KAAQ,IAAIkiE,GACZ5yE,IAAO,IAAKywE,IAAOuC,IACnBr1D,OAAU,IAAIi1D,KAkElBK,GAAS9zE,UAAkB,OArD3B,SAAwB4K,GACtB,IAAIgF,EAASipE,GAAWp8E,KAAMmO,GAAa,OAAEA,GAE7C,OADAnO,KAAKmxE,MAAQh+D,EAAS,EAAI,EACnBA,GAmDTkkE,GAAS9zE,UAAUI,IAvCnB,SAAqBwK,GACnB,OAAOiuE,GAAWp8E,KAAMmO,GAAKxK,IAAIwK,IAuCnCkpE,GAAS9zE,UAAUoR,IA3BnB,SAAqBxG,GACnB,OAAOiuE,GAAWp8E,KAAMmO,GAAKwG,IAAIxG,IA2BnCkpE,GAAS9zE,UAAU+e,IAdnB,SAAqBnU,EAAKhH,GACxB,IAAIob,EAAO65D,GAAWp8E,KAAMmO,GACxBgjE,EAAO5uD,EAAK4uD,KAIhB,OAFA5uD,EAAKD,IAAInU,EAAKhH,GACdnH,KAAKmxE,MAAQ5uD,EAAK4uD,MAAQA,EAAO,EAAI,EAC9BnxE,MA2DTs3E,GAAS/zE,UAAU8X,IAAMi8D,GAAS/zE,UAAU5C,KAnB5C,SAAqBwG,GAEnB,OADAnH,KAAKu3E,SAASj1D,IAAInb,EAAOo+D,GAClBvlE,MAkBTs3E,GAAS/zE,UAAUoR,IANnB,SAAqBxN,GACnB,OAAOnH,KAAKu3E,SAAS5iE,IAAIxN,IAuG3BqwE,GAAMj0E,UAAU2zE,MA3EhB,WACEl3E,KAAKu3E,SAAW,IAAIH,GACpBp3E,KAAKmxE,KAAO,GA0EdqG,GAAMj0E,UAAkB,OA9DxB,SAAqB4K,GACnB,IAAIoU,EAAOviB,KAAKu3E,SACZpkE,EAASoP,EAAa,OAAEpU,GAG5B,OADAnO,KAAKmxE,KAAO5uD,EAAK4uD,KACVh+D,GA0DTqkE,GAAMj0E,UAAUI,IA9ChB,SAAkBwK,GAChB,OAAOnO,KAAKu3E,SAAS5zE,IAAIwK,IA8C3BqpE,GAAMj0E,UAAUoR,IAlChB,SAAkBxG,GAChB,OAAOnO,KAAKu3E,SAAS5iE,IAAIxG,IAkC3BqpE,GAAMj0E,UAAU+e,IArBhB,SAAkBnU,EAAKhH,GACrB,IAAIob,EAAOviB,KAAKu3E,SAChB,GAAIh1D,aAAgB60D,GAAW,CAC7B,IAAIiF,EAAQ95D,EAAKg1D,SACjB,IAAK1C,IAAQwH,EAAM/4E,OAASg5E,IAG1B,OAFAD,EAAM17E,KAAK,CAACwN,EAAKhH,IACjBnH,KAAKmxE,OAAS5uD,EAAK4uD,KACZnxE,KAETuiB,EAAOviB,KAAKu3E,SAAW,IAAIF,GAASgF,GAItC,OAFA95D,EAAKD,IAAInU,EAAKhH,GACdnH,KAAKmxE,KAAO5uD,EAAK4uD,KACVnxE,MAscT,IAAI+4E,GAAWwD,GAAeC,IAU1BC,GAAgBF,GAAeG,IAAiB,GAWpD,SAASC,GAAUvtD,EAAYm/C,GAC7B,IAAIp7D,GAAS,EAKb,OAJA4lE,GAAS3pD,GAAY,SAASjoB,EAAOgU,EAAOiU,GAE1C,OADAjc,IAAWo7D,EAAUpnE,EAAOgU,EAAOiU,MAG9Bjc,EAaT,SAASypE,GAAap8E,EAAO0tE,EAAUW,GAIrC,IAHA,IAAI1zD,GAAS,EACT7X,EAAS9C,EAAM8C,SAEV6X,EAAQ7X,GAAQ,CACvB,IAAI6D,EAAQ3G,EAAM2a,GACdurB,EAAUwnC,EAAS/mE,GAEvB,GAAe,MAAXu/B,IAAoBnV,IAAazrB,EAC5B4gC,GAAYA,IAAYm2C,GAASn2C,GAClCmoC,EAAWnoC,EAASnV,IAE1B,IAAIA,EAAWmV,EACXvzB,EAAShM,EAGjB,OAAOgM,EAuCT,SAAS2pE,GAAW1tD,EAAYm/C,GAC9B,IAAIp7D,EAAS,GAMb,OALA4lE,GAAS3pD,GAAY,SAASjoB,EAAOgU,EAAOiU,GACtCm/C,EAAUpnE,EAAOgU,EAAOiU,IAC1Bjc,EAAOxS,KAAKwG,MAGTgM,EAcT,SAAS4pE,GAAYv8E,EAAOwe,EAAOuvD,EAAWyO,EAAU7pE,GACtD,IAAIgI,GAAS,EACT7X,EAAS9C,EAAM8C,OAKnB,IAHAirE,IAAcA,EAAY0O,IAC1B9pE,IAAWA,EAAS,MAEXgI,EAAQ7X,GAAQ,CACvB,IAAI6D,EAAQ3G,EAAM2a,GACd6D,EAAQ,GAAKuvD,EAAUpnE,GACrB6X,EAAQ,EAEV+9D,GAAY51E,EAAO6X,EAAQ,EAAGuvD,EAAWyO,EAAU7pE,GAEnD47D,GAAU57D,EAAQhM,GAEV61E,IACV7pE,EAAOA,EAAO7P,QAAU6D,GAG5B,OAAOgM,EAcT,IAAI+pE,GAAUC,KAYVC,GAAeD,IAAc,GAUjC,SAASX,GAAW3/D,EAAQqxD,GAC1B,OAAOrxD,GAAUqgE,GAAQrgE,EAAQqxD,EAAUjgE,IAW7C,SAASyuE,GAAgB7/D,EAAQqxD,GAC/B,OAAOrxD,GAAUugE,GAAavgE,EAAQqxD,EAAUjgE,IAYlD,SAASovE,GAAcxgE,EAAQiP,GAC7B,OAAO0iD,GAAY1iD,GAAO,SAAS3d,GACjC,OAAO9M,GAAWwb,EAAO1O,OAY7B,SAASmvE,GAAQzgE,EAAQ0gE,GAMvB,IAHA,IAAIpiE,EAAQ,EACR7X,GAHJi6E,EAAOC,GAASD,EAAM1gE,IAGJvZ,OAED,MAAVuZ,GAAkB1B,EAAQ7X,GAC/BuZ,EAASA,EAAO4gE,GAAMF,EAAKpiE,OAE7B,OAAQA,GAASA,GAAS7X,EAAUuZ,EAAS/W,EAc/C,SAAS43E,GAAe7gE,EAAQ8gE,EAAUC,GACxC,IAAIzqE,EAASwqE,EAAS9gE,GACtB,OAAOhX,GAAQgX,GAAU1J,EAAS47D,GAAU57D,EAAQyqE,EAAY/gE,IAUlE,SAASghE,GAAW12E,GAClB,OAAa,MAATA,EACKA,IAAUrB,EAn7FJ,qBARL,gBA67FFytE,IAAkBA,MAAkBnzE,GAAO+G,GA23FrD,SAAmBA,GACjB,IAAI22E,EAAQ98E,GAAeG,KAAKgG,EAAOosE,IACnC7iE,EAAMvJ,EAAMosE,IAEhB,IACEpsE,EAAMosE,IAAkBztE,EACxB,IAAIi4E,GAAW,EACf,MAAOtxE,IAET,IAAI0G,EAASu/D,GAAqBvxE,KAAKgG,GACnC42E,IACED,EACF32E,EAAMosE,IAAkB7iE,SAEjBvJ,EAAMosE,KAGjB,OAAOpgE,EA34FH6qE,CAAU72E,GA+5GhB,SAAwBA,GACtB,OAAOurE,GAAqBvxE,KAAKgG,GA/5G7B82E,CAAe92E,GAYrB,SAAS+2E,GAAO/2E,EAAOg3E,GACrB,OAAOh3E,EAAQg3E,EAWjB,SAASC,GAAQvhE,EAAQ1O,GACvB,OAAiB,MAAV0O,GAAkB7b,GAAeG,KAAK0b,EAAQ1O,GAWvD,SAASkwE,GAAUxhE,EAAQ1O,GACzB,OAAiB,MAAV0O,GAAkB1O,KAAO/N,GAAOyc,GA0BzC,SAASyhE,GAAiBC,EAAQrQ,EAAUW,GAS1C,IARA,IAAI6M,EAAW7M,EAAaD,GAAoBF,GAC5CprE,EAASi7E,EAAO,GAAGj7E,OACnBk7E,EAAYD,EAAOj7E,OACnBm7E,EAAWD,EACXE,EAAS94E,GAAM44E,GACfG,EAAYC,EAAAA,EACZzrE,EAAS,GAENsrE,KAAY,CACjB,IAAIj+E,EAAQ+9E,EAAOE,GACfA,GAAYvQ,IACd1tE,EAAQsuE,GAAStuE,EAAO4vE,GAAUlC,KAEpCyQ,EAAYpK,GAAU/zE,EAAM8C,OAAQq7E,GACpCD,EAAOD,IAAa5P,IAAeX,GAAa5qE,GAAU,KAAO9C,EAAM8C,QAAU,KAC7E,IAAIg0E,GAASmH,GAAYj+E,GACzBsF,EAENtF,EAAQ+9E,EAAO,GAEf,IAAIpjE,GAAS,EACT0jE,EAAOH,EAAO,GAElB7C,EACA,OAAS1gE,EAAQ7X,GAAU6P,EAAO7P,OAASq7E,GAAW,CACpD,IAAIx3E,EAAQ3G,EAAM2a,GACdoW,EAAW28C,EAAWA,EAAS/mE,GAASA,EAG5C,GADAA,EAAS0nE,GAAwB,IAAV1nE,EAAeA,EAAQ,IACxC03E,EACEvO,GAASuO,EAAMttD,GACfmqD,EAASvoE,EAAQoe,EAAUs9C,IAC5B,CAEL,IADA4P,EAAWD,IACFC,GAAU,CACjB,IAAIvwE,EAAQwwE,EAAOD,GACnB,KAAMvwE,EACEoiE,GAASpiE,EAAOqjB,GAChBmqD,EAAS6C,EAAOE,GAAWltD,EAAUs9C,IAE3C,SAASgN,EAGTgD,GACFA,EAAKl+E,KAAK4wB,GAEZpe,EAAOxS,KAAKwG,IAGhB,OAAOgM,EA+BT,SAAS2rE,GAAWjiE,EAAQ0gE,EAAMnpE,GAGhC,IAAI2J,EAAiB,OADrBlB,EAAS9I,GAAO8I,EADhB0gE,EAAOC,GAASD,EAAM1gE,KAEMA,EAASA,EAAO4gE,GAAMh5E,GAAK84E,KACvD,OAAe,MAARx/D,EAAejY,EAAYpF,GAAMqd,EAAMlB,EAAQzI,GAUxD,SAAS2qE,GAAgB53E,GACvB,OAAO2uE,GAAa3uE,IAAU02E,GAAW12E,IAAUg/D,EAuCrD,SAAS6Y,GAAY73E,EAAOg3E,EAAO3E,EAASC,EAAYn5D,GACtD,OAAInZ,IAAUg3E,IAGD,MAATh3E,GAA0B,MAATg3E,IAAmBrI,GAAa3uE,KAAW2uE,GAAaqI,GACpEh3E,GAAUA,GAASg3E,GAAUA,EAmBxC,SAAyBthE,EAAQshE,EAAO3E,EAASC,EAAYwF,EAAW3+D,GACtE,IAAI4+D,EAAWr5E,GAAQgX,GACnBsiE,EAAWt5E,GAAQs4E,GACnBiB,EAASF,EAAW9Y,EAAW0T,GAAOj9D,GACtCwiE,EAASF,EAAW/Y,EAAW0T,GAAOqE,GAKtCmB,GAHJF,EAASA,GAAUjZ,EAAUS,EAAYwY,IAGhBxY,EACrB2Y,GAHJF,EAASA,GAAUlZ,EAAUS,EAAYyY,IAGhBzY,EACrB4Y,EAAYJ,GAAUC,EAE1B,GAAIG,GAAatL,GAASr3D,GAAS,CACjC,IAAKq3D,GAASiK,GACZ,OAAO,EAETe,GAAW,EACXI,GAAW,EAEb,GAAIE,IAAcF,EAEhB,OADAh/D,IAAUA,EAAQ,IAAIk3D,IACd0H,GAAYnR,GAAalxD,GAC7B4iE,GAAY5iE,EAAQshE,EAAO3E,EAASC,EAAYwF,EAAW3+D,GA81EnE,SAAoBzD,EAAQshE,EAAOztE,EAAK8oE,EAASC,EAAYwF,EAAW3+D,GACtE,OAAQ5P,GACN,KAAK02D,EACH,GAAKvqD,EAAO+9D,YAAcuD,EAAMvD,YAC3B/9D,EAAO89D,YAAcwD,EAAMxD,WAC9B,OAAO,EAET99D,EAASA,EAAO69D,OAChByD,EAAQA,EAAMzD,OAEhB,KAAKvT,EACH,QAAKtqD,EAAO+9D,YAAcuD,EAAMvD,aAC3BqE,EAAU,IAAIlM,GAAWl2D,GAAS,IAAIk2D,GAAWoL,KAKxD,KAAK9X,EACL,KAAKC,EACL,KAAKK,EAGH,OAAOniE,IAAIqY,GAASshE,GAEtB,KAAK5X,EACH,OAAO1pD,EAAOxX,MAAQ84E,EAAM94E,MAAQwX,EAAO4D,SAAW09D,EAAM19D,QAE9D,KAAKqmD,EACL,KAAKE,EAIH,OAAOnqD,GAAWshE,EAAQ,GAE5B,KAAKzX,EACH,IAAIgZ,EAAUxO,GAEhB,KAAKnK,EACH,IAAI4Y,EAxnLe,EAwnLHnG,EAGhB,GAFAkG,IAAYA,EAAUpO,IAElBz0D,EAAOs0D,MAAQgN,EAAMhN,OAASwO,EAChC,OAAO,EAGT,IAAIxE,EAAU76D,EAAM3c,IAAIkZ,GACxB,GAAIs+D,EACF,OAAOA,GAAWgD,EAEpB3E,GAloLqB,EAqoLrBl5D,EAAMgC,IAAIzF,EAAQshE,GAClB,IAAIhrE,EAASssE,GAAYC,EAAQ7iE,GAAS6iE,EAAQvB,GAAQ3E,EAASC,EAAYwF,EAAW3+D,GAE1F,OADAA,EAAc,OAAEzD,GACT1J,EAET,KAAK8zD,EACH,GAAIyO,GACF,OAAOA,GAAcv0E,KAAK0b,IAAW64D,GAAcv0E,KAAKg9E,GAG9D,OAAO,EA35EDyB,CAAW/iE,EAAQshE,EAAOiB,EAAQ5F,EAASC,EAAYwF,EAAW3+D,GAExE,KAvvGuB,EAuvGjBk5D,GAAiC,CACrC,IAAIqG,EAAeP,GAAYt+E,GAAeG,KAAK0b,EAAQ,eACvDijE,EAAeP,GAAYv+E,GAAeG,KAAKg9E,EAAO,eAE1D,GAAI0B,GAAgBC,EAAc,CAChC,IAAIC,EAAeF,EAAehjE,EAAO1V,QAAU0V,EAC/CmjE,EAAeF,EAAe3B,EAAMh3E,QAAUg3E,EAGlD,OADA79D,IAAUA,EAAQ,IAAIk3D,IACfyH,EAAUc,EAAcC,EAAcxG,EAASC,EAAYn5D,IAGtE,IAAKk/D,EACH,OAAO,EAGT,OADAl/D,IAAUA,EAAQ,IAAIk3D,IA05ExB,SAAsB36D,EAAQshE,EAAO3E,EAASC,EAAYwF,EAAW3+D,GACnE,IAAIq/D,EAjqLmB,EAiqLPnG,EACZyG,EAAW3E,GAAWz+D,GACtBqjE,EAAYD,EAAS38E,OAErBk7E,EADWlD,GAAW6C,GACD76E,OAEzB,GAAI48E,GAAa1B,IAAcmB,EAC7B,OAAO,EAET,IAAIxkE,EAAQ+kE,EACZ,KAAO/kE,KAAS,CACd,IAAIhN,EAAM8xE,EAAS9kE,GACnB,KAAMwkE,EAAYxxE,KAAOgwE,EAAQn9E,GAAeG,KAAKg9E,EAAOhwE,IAC1D,OAAO,EAIX,IAAIgyE,EAAa7/D,EAAM3c,IAAIkZ,GACvBujE,EAAa9/D,EAAM3c,IAAIw6E,GAC3B,GAAIgC,GAAcC,EAChB,OAAOD,GAAchC,GAASiC,GAAcvjE,EAE9C,IAAI1J,GAAS,EACbmN,EAAMgC,IAAIzF,EAAQshE,GAClB79D,EAAMgC,IAAI67D,EAAOthE,GAEjB,IAAIwjE,EAAWV,EACf,OAASxkE,EAAQ+kE,GAAW,CAE1B,IAAItH,EAAW/7D,EADf1O,EAAM8xE,EAAS9kE,IAEXmlE,EAAWnC,EAAMhwE,GAErB,GAAIsrE,EACF,IAAI8G,EAAWZ,EACXlG,EAAW6G,EAAU1H,EAAUzqE,EAAKgwE,EAAOthE,EAAQyD,GACnDm5D,EAAWb,EAAU0H,EAAUnyE,EAAK0O,EAAQshE,EAAO79D,GAGzD,KAAMigE,IAAaz6E,EACV8yE,IAAa0H,GAAYrB,EAAUrG,EAAU0H,EAAU9G,EAASC,EAAYn5D,GAC7EigE,GACD,CACLptE,GAAS,EACT,MAEFktE,IAAaA,EAAkB,eAAPlyE,GAE1B,GAAIgF,IAAWktE,EAAU,CACvB,IAAIG,EAAU3jE,EAAOpZ,YACjBg9E,EAAUtC,EAAM16E,YAGhB+8E,GAAWC,KACV,gBAAiB5jE,MAAU,gBAAiBshE,IACzB,mBAAXqC,GAAyBA,aAAmBA,GACjC,mBAAXC,GAAyBA,aAAmBA,IACvDttE,GAAS,GAKb,OAFAmN,EAAc,OAAEzD,GAChByD,EAAc,OAAE69D,GACThrE,EAv9EAutE,CAAa7jE,EAAQshE,EAAO3E,EAASC,EAAYwF,EAAW3+D,GA3D5DqgE,CAAgBx5E,EAAOg3E,EAAO3E,EAASC,EAAYuF,GAAa1+D,IAmFzE,SAASsgE,GAAY/jE,EAAQkH,EAAQ88D,EAAWpH,GAC9C,IAAIt+D,EAAQ0lE,EAAUv9E,OAClBA,EAAS6X,EACT2lE,GAAgBrH,EAEpB,GAAc,MAAV58D,EACF,OAAQvZ,EAGV,IADAuZ,EAASzc,GAAOyc,GACT1B,KAAS,CACd,IAAIoH,EAAOs+D,EAAU1lE,GACrB,GAAK2lE,GAAgBv+D,EAAK,GAClBA,EAAK,KAAO1F,EAAO0F,EAAK,MACtBA,EAAK,KAAM1F,GAEnB,OAAO,EAGX,OAAS1B,EAAQ7X,GAAQ,CAEvB,IAAI6K,GADJoU,EAAOs+D,EAAU1lE,IACF,GACXy9D,EAAW/7D,EAAO1O,GAClB4yE,EAAWx+D,EAAK,GAEpB,GAAIu+D,GAAgBv+D,EAAK,IACvB,GAAIq2D,IAAa9yE,KAAeqI,KAAO0O,GACrC,OAAO,MAEJ,CACL,IAAIyD,EAAQ,IAAIk3D,GAChB,GAAIiC,EACF,IAAItmE,EAASsmE,EAAWb,EAAUmI,EAAU5yE,EAAK0O,EAAQkH,EAAQzD,GAEnE,KAAMnN,IAAWrN,EACTk5E,GAAY+B,EAAUnI,EAAUoI,EAA+CvH,EAAYn5D,GAC3FnN,GAEN,OAAO,GAIb,OAAO,EAWT,SAAS8tE,GAAa95E,GACpB,SAAKgvE,GAAShvE,KA05FE4W,EA15FiB5W,EA25FxBqrE,IAAeA,MAAcz0D,MAx5FxB1c,GAAW8F,GAAS0rE,GAAapJ,IAChCh8D,KAAK2nE,GAASjuE,IAs5F/B,IAAkB4W,EA12FlB,SAASmjE,GAAa/5E,GAGpB,MAAoB,mBAATA,EACFA,EAEI,MAATA,EACKg6E,GAEW,iBAATh6E,EACFtB,GAAQsB,GACXi6E,GAAoBj6E,EAAM,GAAIA,EAAM,IACpCk6E,GAAYl6E,GAEX0lC,GAAS1lC,GAUlB,SAASm6E,GAASzkE,GAChB,IAAK0kE,GAAY1kE,GACf,OAAOw3D,GAAWx3D,GAEpB,IAAI1J,EAAS,GACb,IAAK,IAAIhF,KAAO/N,GAAOyc,GACjB7b,GAAeG,KAAK0b,EAAQ1O,IAAe,eAAPA,GACtCgF,EAAOxS,KAAKwN,GAGhB,OAAOgF,EAUT,SAASquE,GAAW3kE,GAClB,IAAKs5D,GAASt5D,GACZ,OA09FJ,SAAsBA,GACpB,IAAI1J,EAAS,GACb,GAAc,MAAV0J,EACF,IAAK,IAAI1O,KAAO/N,GAAOyc,GACrB1J,EAAOxS,KAAKwN,GAGhB,OAAOgF,EAj+FEsuE,CAAa5kE,GAEtB,IAAI6kE,EAAUH,GAAY1kE,GACtB1J,EAAS,GAEb,IAAK,IAAIhF,KAAO0O,GACD,eAAP1O,IAAyBuzE,GAAY1gF,GAAeG,KAAK0b,EAAQ1O,KACrEgF,EAAOxS,KAAKwN,GAGhB,OAAOgF,EAYT,SAASwuE,GAAOx6E,EAAOg3E,GACrB,OAAOh3E,EAAQg3E,EAWjB,SAASyD,GAAQxyD,EAAY8+C,GAC3B,IAAI/yD,GAAS,EACThI,EAAS9P,GAAY+rB,GAAcxpB,GAAMwpB,EAAW9rB,QAAU,GAKlE,OAHAy1E,GAAS3pD,GAAY,SAASjoB,EAAOgH,EAAKihB,GACxCjc,IAASgI,GAAS+yD,EAAS/mE,EAAOgH,EAAKihB,MAElCjc,EAUT,SAASkuE,GAAYt9D,GACnB,IAAI88D,EAAYgB,GAAa99D,GAC7B,OAAwB,GAApB88D,EAAUv9E,QAAeu9E,EAAU,GAAG,GACjCiB,GAAwBjB,EAAU,GAAG,GAAIA,EAAU,GAAG,IAExD,SAAShkE,GACd,OAAOA,IAAWkH,GAAU68D,GAAY/jE,EAAQkH,EAAQ88D,IAY5D,SAASO,GAAoB7D,EAAMwD,GACjC,OAAIgB,GAAMxE,IAASyE,GAAmBjB,GAC7Be,GAAwBrE,GAAMF,GAAOwD,GAEvC,SAASlkE,GACd,IAAI+7D,EAAWj1E,GAAIkZ,EAAQ0gE,GAC3B,OAAQ3E,IAAa9yE,GAAa8yE,IAAamI,EAC3CkB,GAAMplE,EAAQ0gE,GACdyB,GAAY+B,EAAUnI,EAAUoI,IAexC,SAASkB,GAAUrlE,EAAQkH,EAAQo+D,EAAU1I,EAAYn5D,GACnDzD,IAAWkH,GAGfm5D,GAAQn5D,GAAQ,SAASg9D,EAAU5yE,GAEjC,GADAmS,IAAUA,EAAQ,IAAIk3D,IAClBrB,GAAS4K,IA+BjB,SAAuBlkE,EAAQkH,EAAQ5V,EAAKg0E,EAAUC,EAAW3I,EAAYn5D,GAC3E,IAAIs4D,EAAWyJ,GAAQxlE,EAAQ1O,GAC3B4yE,EAAWsB,GAAQt+D,EAAQ5V,GAC3BgtE,EAAU76D,EAAM3c,IAAIo9E,GAExB,GAAI5F,EAEF,YADA1C,GAAiB57D,EAAQ1O,EAAKgtE,GAGhC,IAAImH,EAAW7I,EACXA,EAAWb,EAAUmI,EAAW5yE,EAAM,GAAK0O,EAAQkH,EAAQzD,GAC3Dxa,EAEA61E,EAAW2G,IAAax8E,EAE5B,GAAI61E,EAAU,CACZ,IAAIhE,EAAQ9xE,GAAQk7E,GAChBjJ,GAAUH,GAASzD,GAAS6M,GAC5BwB,GAAW5K,IAAUG,GAAU/J,GAAagT,GAEhDuB,EAAWvB,EACPpJ,GAASG,GAAUyK,EACjB18E,GAAQ+yE,GACV0J,EAAW1J,EAEJ4J,GAAkB5J,GACzB0J,EAAWhK,GAAUM,GAEdd,GACP6D,GAAW,EACX2G,EAAWtI,GAAY+G,GAAU,IAE1BwB,GACP5G,GAAW,EACX2G,EAAWxH,GAAgBiG,GAAU,IAGrCuB,EAAW,GAGN38E,GAAco7E,IAAalJ,GAAYkJ,IAC9CuB,EAAW1J,EACPf,GAAYe,GACd0J,EAAWG,GAAc7J,GAEjBzC,GAASyC,KAAav3E,GAAWu3E,KACzC0J,EAAWrI,GAAgB8G,KAI7BpF,GAAW,EAGXA,IAEFr7D,EAAMgC,IAAIy+D,EAAUuB,GACpBF,EAAUE,EAAUvB,EAAUoB,EAAU1I,EAAYn5D,GACpDA,EAAc,OAAEygE,IAElBtI,GAAiB57D,EAAQ1O,EAAKm0E,GAzF1BI,CAAc7lE,EAAQkH,EAAQ5V,EAAKg0E,EAAUD,GAAWzI,EAAYn5D,OAEjE,CACH,IAAIgiE,EAAW7I,EACXA,EAAW4I,GAAQxlE,EAAQ1O,GAAM4yE,EAAW5yE,EAAM,GAAK0O,EAAQkH,EAAQzD,GACvExa,EAEAw8E,IAAax8E,IACfw8E,EAAWvB,GAEbtI,GAAiB57D,EAAQ1O,EAAKm0E,MAE/BlI,IAwFL,SAASuI,GAAQniF,EAAOyZ,GACtB,IAAI3W,EAAS9C,EAAM8C,OACnB,GAAKA,EAIL,OAAO20E,GADPh+D,GAAKA,EAAI,EAAI3W,EAAS,EACJA,GAAU9C,EAAMyZ,GAAKnU,EAYzC,SAAS88E,GAAYxzD,EAAYyzD,EAAWC,GAExCD,EADEA,EAAUv/E,OACAwrE,GAAS+T,GAAW,SAAS3U,GACvC,OAAIroE,GAAQqoE,GACH,SAAS/mE,GACd,OAAOm2E,GAAQn2E,EAA2B,IAApB+mE,EAAS5qE,OAAe4qE,EAAS,GAAKA,IAGzDA,KAGG,CAACiT,IAGf,IAAIhmE,GAAS,EAUb,OATA0nE,EAAY/T,GAAS+T,EAAWzS,GAAU2S,OAnxF9C,SAAoBviF,EAAOwiF,GACzB,IAAI1/E,EAAS9C,EAAM8C,OAGnB,IADA9C,EAAMyE,KAAK+9E,GACJ1/E,KACL9C,EAAM8C,GAAU9C,EAAM8C,GAAQ6D,MAEhC,OAAO3G,EAqxFEyiF,CAPMrB,GAAQxyD,GAAY,SAASjoB,EAAOgH,EAAKihB,GAIpD,MAAO,CAAE8zD,SAHMpU,GAAS+T,GAAW,SAAS3U,GAC1C,OAAOA,EAAS/mE,MAEagU,QAAWA,EAAOhU,MAASA,OAGlC,SAAS0V,EAAQshE,GACzC,OA04BJ,SAAyBthE,EAAQshE,EAAO2E,GACtC,IAAI3nE,GAAS,EACTgoE,EAActmE,EAAOqmE,SACrBE,EAAcjF,EAAM+E,SACpB5/E,EAAS6/E,EAAY7/E,OACrB+/E,EAAeP,EAAOx/E,OAE1B,OAAS6X,EAAQ7X,GAAQ,CACvB,IAAI6P,EAASmwE,GAAiBH,EAAYhoE,GAAQioE,EAAYjoE,IAC9D,GAAIhI,EACF,OAAIgI,GAASkoE,EACJlwE,EAGFA,GAAmB,QADd2vE,EAAO3nE,IACiB,EAAI,GAU5C,OAAO0B,EAAO1B,MAAQgjE,EAAMhjE,MAl6BnBooE,CAAgB1mE,EAAQshE,EAAO2E,MA4B1C,SAASU,GAAW3mE,EAAQs8D,EAAO5K,GAKjC,IAJA,IAAIpzD,GAAS,EACT7X,EAAS61E,EAAM71E,OACf6P,EAAS,KAEJgI,EAAQ7X,GAAQ,CACvB,IAAIi6E,EAAOpE,EAAMh+D,GACbhU,EAAQm2E,GAAQzgE,EAAQ0gE,GAExBhP,EAAUpnE,EAAOo2E,IACnBkG,GAAQtwE,EAAQqqE,GAASD,EAAM1gE,GAAS1V,GAG5C,OAAOgM,EA2BT,SAASuwE,GAAYljF,EAAOilB,EAAQyoD,EAAUW,GAC5C,IAAIjuE,EAAUiuE,EAAae,GAAkBjB,GACzCxzD,GAAS,EACT7X,EAASmiB,EAAOniB,OAChBu7E,EAAOr+E,EAQX,IANIA,IAAUilB,IACZA,EAAS6yD,GAAU7yD,IAEjByoD,IACF2Q,EAAO/P,GAAStuE,EAAO4vE,GAAUlC,OAE1B/yD,EAAQ7X,GAKf,IAJA,IAAIulD,EAAY,EACZ1hD,EAAQse,EAAOtK,GACfoW,EAAW28C,EAAWA,EAAS/mE,GAASA,GAEpC0hD,EAAYjoD,EAAQi+E,EAAMttD,EAAUs3B,EAAWgmB,KAAgB,GACjEgQ,IAASr+E,GACX0E,GAAO/D,KAAK09E,EAAMh2B,EAAW,GAE/B3jD,GAAO/D,KAAKX,EAAOqoD,EAAW,GAGlC,OAAOroD,EAYT,SAASmjF,GAAWnjF,EAAOojF,GAIzB,IAHA,IAAItgF,EAAS9C,EAAQojF,EAAQtgF,OAAS,EAClCmuE,EAAYnuE,EAAS,EAElBA,KAAU,CACf,IAAI6X,EAAQyoE,EAAQtgF,GACpB,GAAIA,GAAUmuE,GAAat2D,IAAUkoD,EAAU,CAC7C,IAAIA,EAAWloD,EACX88D,GAAQ98D,GACVjW,GAAO/D,KAAKX,EAAO2a,EAAO,GAE1B0oE,GAAUrjF,EAAO2a,IAIvB,OAAO3a,EAYT,SAAS23E,GAAWkB,EAAOC,GACzB,OAAOD,EAAQvF,GAAYY,MAAkB4E,EAAQD,EAAQ,IAkC/D,SAASyK,GAAW/hE,EAAQ9H,GAC1B,IAAI9G,EAAS,GACb,IAAK4O,GAAU9H,EAAI,GAAKA,EAAI8rD,EAC1B,OAAO5yD,EAIT,GACM8G,EAAI,IACN9G,GAAU4O,IAEZ9H,EAAI65D,GAAY75D,EAAI,MAElB8H,GAAUA,SAEL9H,GAET,OAAO9G,EAWT,SAAS4wE,GAAShmE,EAAMjK,GACtB,OAAOkwE,GAAYC,GAASlmE,EAAMjK,EAAOqtE,IAAWpjE,EAAO,IAU7D,SAASmmE,GAAW90D,GAClB,OAAO8oD,GAAYzyD,GAAO2J,IAW5B,SAAS+0D,GAAe/0D,EAAYnV,GAClC,IAAIzZ,EAAQilB,GAAO2J,GACnB,OAAOipD,GAAY73E,EAAO+3E,GAAUt+D,EAAG,EAAGzZ,EAAM8C,SAalD,SAASmgF,GAAQ5mE,EAAQ0gE,EAAMp2E,EAAOsyE,GACpC,IAAKtD,GAASt5D,GACZ,OAAOA,EAST,IALA,IAAI1B,GAAS,EACT7X,GAHJi6E,EAAOC,GAASD,EAAM1gE,IAGJvZ,OACdmuE,EAAYnuE,EAAS,EACrB8gF,EAASvnE,EAEI,MAAVunE,KAAoBjpE,EAAQ7X,GAAQ,CACzC,IAAI6K,EAAMsvE,GAAMF,EAAKpiE,IACjBmnE,EAAWn7E,EAEf,GAAY,cAARgH,GAA+B,gBAARA,GAAiC,cAARA,EAClD,OAAO0O,EAGT,GAAI1B,GAASs2D,EAAW,CACtB,IAAImH,EAAWwL,EAAOj2E,IACtBm0E,EAAW7I,EAAaA,EAAWb,EAAUzqE,EAAKi2E,GAAUt+E,KAC3CA,IACfw8E,EAAWnM,GAASyC,GAChBA,EACCX,GAAQsF,EAAKpiE,EAAQ,IAAM,GAAK,IAGzCw9D,GAAYyL,EAAQj2E,EAAKm0E,GACzB8B,EAASA,EAAOj2E,GAElB,OAAO0O,EAWT,IAAIwnE,GAAepP,GAAqB,SAASl3D,EAAMwE,GAErD,OADA0yD,GAAQ3yD,IAAIvE,EAAMwE,GACXxE,GAFoBojE,GAazBmD,GAAmBliE,GAA4B,SAASrE,EAAMgE,GAChE,OAAOK,GAAerE,EAAM,WAAY,CACtCsE,cAAgB,EAChBiJ,YAAc,EACdnkB,MAASo9E,GAASxiE,GAClByJ,UAAY,KALwB21D,GAgBxC,SAASqD,GAAYp1D,GACnB,OAAOipD,GAAY5yD,GAAO2J,IAY5B,SAASq1D,GAAUjkF,EAAOsT,EAAO9O,GAC/B,IAAImW,GAAS,EACT7X,EAAS9C,EAAM8C,OAEfwQ,EAAQ,IACVA,GAASA,EAAQxQ,EAAS,EAAKA,EAASwQ,IAE1C9O,EAAMA,EAAM1B,EAASA,EAAS0B,GACpB,IACRA,GAAO1B,GAETA,EAASwQ,EAAQ9O,EAAM,EAAMA,EAAM8O,IAAW,EAC9CA,KAAW,EAGX,IADA,IAAIX,EAASvN,GAAMtC,KACV6X,EAAQ7X,GACf6P,EAAOgI,GAAS3a,EAAM2a,EAAQrH,GAEhC,OAAOX,EAYT,SAASuxE,GAASt1D,EAAYm/C,GAC5B,IAAIp7D,EAMJ,OAJA4lE,GAAS3pD,GAAY,SAASjoB,EAAOgU,EAAOiU,GAE1C,QADAjc,EAASo7D,EAAUpnE,EAAOgU,EAAOiU,SAG1Bjc,EAeX,SAASwxE,GAAgBnkF,EAAO2G,EAAOy9E,GACrC,IAAIC,EAAM,EACNp5E,EAAgB,MAATjL,EAAgBqkF,EAAMrkF,EAAM8C,OAEvC,GAAoB,iBAAT6D,GAAqBA,GAAUA,GAASsE,GAn/H3Bw6D,WAm/H0D,CAChF,KAAO4e,EAAMp5E,GAAM,CACjB,IAAIq5E,EAAOD,EAAMp5E,IAAU,EACvB8lB,EAAW/wB,EAAMskF,GAEJ,OAAbvzD,IAAsBsrD,GAAStrD,KAC9BqzD,EAAcrzD,GAAYpqB,EAAUoqB,EAAWpqB,GAClD09E,EAAMC,EAAM,EAEZr5E,EAAOq5E,EAGX,OAAOr5E,EAET,OAAOs5E,GAAkBvkF,EAAO2G,EAAOg6E,GAAUyD,GAgBnD,SAASG,GAAkBvkF,EAAO2G,EAAO+mE,EAAU0W,GACjD,IAAIC,EAAM,EACNp5E,EAAgB,MAATjL,EAAgB,EAAIA,EAAM8C,OACrC,GAAa,IAATmI,EACF,OAAO,EAST,IALA,IAAIu5E,GADJ79E,EAAQ+mE,EAAS/mE,KACQA,EACrB89E,EAAsB,OAAV99E,EACZ+9E,EAAcrI,GAAS11E,GACvBg+E,EAAiBh+E,IAAUrB,EAExB++E,EAAMp5E,GAAM,CACjB,IAAIq5E,EAAMhR,IAAa+Q,EAAMp5E,GAAQ,GACjC8lB,EAAW28C,EAAS1tE,EAAMskF,IAC1BM,EAAe7zD,IAAazrB,EAC5Bu/E,EAAyB,OAAb9zD,EACZ+zD,EAAiB/zD,GAAaA,EAC9Bg0D,EAAc1I,GAAStrD,GAE3B,GAAIyzD,EACF,IAAIQ,EAASZ,GAAcU,OAE3BE,EADSL,EACAG,IAAmBV,GAAcQ,GACjCH,EACAK,GAAkBF,IAAiBR,IAAeS,GAClDH,EACAI,GAAkBF,IAAiBC,IAAcT,IAAeW,IAChEF,IAAaE,IAGbX,EAAcrzD,GAAYpqB,EAAUoqB,EAAWpqB,GAEtDq+E,EACFX,EAAMC,EAAM,EAEZr5E,EAAOq5E,EAGX,OAAOvQ,GAAU9oE,EA1jICw6D,YAskIpB,SAASwf,GAAejlF,EAAO0tE,GAM7B,IALA,IAAI/yD,GAAS,EACT7X,EAAS9C,EAAM8C,OACfmrE,EAAW,EACXt7D,EAAS,KAEJgI,EAAQ7X,GAAQ,CACvB,IAAI6D,EAAQ3G,EAAM2a,GACdoW,EAAW28C,EAAWA,EAAS/mE,GAASA,EAE5C,IAAKgU,IAAU3W,GAAG+sB,EAAUstD,GAAO,CACjC,IAAIA,EAAOttD,EACXpe,EAAOs7D,KAAwB,IAAVtnE,EAAc,EAAIA,GAG3C,OAAOgM,EAWT,SAASuyE,GAAav+E,GACpB,MAAoB,iBAATA,EACFA,EAEL01E,GAAS11E,GACJ6+D,GAED7+D,EAWV,SAASw+E,GAAax+E,GAEpB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAItB,GAAQsB,GAEV,OAAO2nE,GAAS3nE,EAAOw+E,IAAgB,GAEzC,GAAI9I,GAAS11E,GACX,OAAOyuE,GAAiBA,GAAez0E,KAAKgG,GAAS,GAEvD,IAAIgM,EAAUhM,EAAQ,GACtB,MAAkB,KAAVgM,GAAkB,EAAIhM,IAAU,EAAA,EAAa,KAAOgM,EAY9D,SAASyyE,GAASplF,EAAO0tE,EAAUW,GACjC,IAAI1zD,GAAS,EACTugE,EAAWhN,GACXprE,EAAS9C,EAAM8C,OACfq4E,GAAW,EACXxoE,EAAS,GACT0rE,EAAO1rE,EAEX,GAAI07D,EACF8M,GAAW,EACXD,EAAW9M,QAER,GAAItrE,GAjtIU,IAitIkB,CACnC,IAAIgf,EAAM4rD,EAAW,KAAO2X,GAAUrlF,GACtC,GAAI8hB,EACF,OAAOgvD,GAAWhvD,GAEpBq5D,GAAW,EACXD,EAAWpL,GACXuO,EAAO,IAAIvH,QAGXuH,EAAO3Q,EAAW,GAAK/6D,EAEzB0oE,EACA,OAAS1gE,EAAQ7X,GAAQ,CACvB,IAAI6D,EAAQ3G,EAAM2a,GACdoW,EAAW28C,EAAWA,EAAS/mE,GAASA,EAG5C,GADAA,EAAS0nE,GAAwB,IAAV1nE,EAAeA,EAAQ,EAC1Cw0E,GAAYpqD,GAAaA,EAAU,CAErC,IADA,IAAIu0D,EAAYjH,EAAKv7E,OACdwiF,KACL,GAAIjH,EAAKiH,KAAev0D,EACtB,SAASsqD,EAGT3N,GACF2Q,EAAKl+E,KAAK4wB,GAEZpe,EAAOxS,KAAKwG,QAEJu0E,EAASmD,EAAMttD,EAAUs9C,KAC7BgQ,IAAS1rE,GACX0rE,EAAKl+E,KAAK4wB,GAEZpe,EAAOxS,KAAKwG,IAGhB,OAAOgM,EAWT,SAAS0wE,GAAUhnE,EAAQ0gE,GAGzB,OAAiB,OADjB1gE,EAAS9I,GAAO8I,EADhB0gE,EAAOC,GAASD,EAAM1gE,aAEUA,EAAO4gE,GAAMh5E,GAAK84E,KAapD,SAASwI,GAAWlpE,EAAQ0gE,EAAMyI,EAASvM,GACzC,OAAOgK,GAAQ5mE,EAAQ0gE,EAAMyI,EAAQ1I,GAAQzgE,EAAQ0gE,IAAQ9D,GAc/D,SAASwM,GAAUzlF,EAAO+tE,EAAW2X,EAAQzW,GAI3C,IAHA,IAAInsE,EAAS9C,EAAM8C,OACf6X,EAAQs0D,EAAYnsE,GAAU,GAE1BmsE,EAAYt0D,MAAYA,EAAQ7X,IACtCirE,EAAU/tE,EAAM2a,GAAQA,EAAO3a,KAEjC,OAAO0lF,EACHzB,GAAUjkF,EAAQivE,EAAY,EAAIt0D,EAASs0D,EAAYt0D,EAAQ,EAAI7X,GACnEmhF,GAAUjkF,EAAQivE,EAAYt0D,EAAQ,EAAI,EAAKs0D,EAAYnsE,EAAS6X,GAa1E,SAASgrE,GAAiBh/E,EAAOi/E,GAC/B,IAAIjzE,EAAShM,EAIb,OAHIgM,aAAkB4iE,KACpB5iE,EAASA,EAAOhM,SAEX6nE,GAAYoX,GAAS,SAASjzE,EAAQ02C,GAC3C,OAAOA,EAAO9rC,KAAKrd,MAAMmpD,EAAOmkB,QAASe,GAAU,CAAC57D,GAAS02C,EAAOz1C,SACnEjB,GAaL,SAASkzE,GAAQ9H,EAAQrQ,EAAUW,GACjC,IAAIvrE,EAASi7E,EAAOj7E,OACpB,GAAIA,EAAS,EACX,OAAOA,EAASsiF,GAASrH,EAAO,IAAM,GAKxC,IAHA,IAAIpjE,GAAS,EACThI,EAASvN,GAAMtC,KAEV6X,EAAQ7X,GAIf,IAHA,IAAI9C,EAAQ+9E,EAAOpjE,GACfsjE,GAAY,IAEPA,EAAWn7E,GACdm7E,GAAYtjE,IACdhI,EAAOgI,GAASsgE,GAAetoE,EAAOgI,IAAU3a,EAAO+9E,EAAOE,GAAWvQ,EAAUW,IAIzF,OAAO+W,GAAS7I,GAAY5pE,EAAQ,GAAI+6D,EAAUW,GAYpD,SAASyX,GAAcx6D,EAAOrG,EAAQ8gE,GAMpC,IALA,IAAIprE,GAAS,EACT7X,EAASwoB,EAAMxoB,OACfkjF,EAAa/gE,EAAOniB,OACpB6P,EAAS,KAEJgI,EAAQ7X,GAAQ,CACvB,IAAI6D,EAAQgU,EAAQqrE,EAAa/gE,EAAOtK,GAASrV,EACjDygF,EAAWpzE,EAAQ2Y,EAAM3Q,GAAQhU,GAEnC,OAAOgM,EAUT,SAASszE,GAAoBt/E,GAC3B,OAAOq7E,GAAkBr7E,GAASA,EAAQ,GAU5C,SAASu/E,GAAav/E,GACpB,MAAuB,mBAATA,EAAsBA,EAAQg6E,GAW9C,SAAS3D,GAASr2E,EAAO0V,GACvB,OAAIhX,GAAQsB,GACHA,EAEF46E,GAAM56E,EAAO0V,GAAU,CAAC1V,GAASw/E,GAAa7lF,GAASqG,IAYhE,IAAIy/E,GAAW7C,GAWf,SAAS8C,GAAUrmF,EAAOsT,EAAO9O,GAC/B,IAAI1B,EAAS9C,EAAM8C,OAEnB,OADA0B,EAAMA,IAAQc,EAAYxC,EAAS0B,GAC1B8O,GAAS9O,GAAO1B,EAAU9C,EAAQikF,GAAUjkF,EAAOsT,EAAO9O,GASrE,IAAIs4B,GAAeo2C,IAAmB,SAASrmE,GAC7C,OAAO2H,GAAKsoB,aAAajwB,IAW3B,SAAS2sE,GAAYU,EAAQhB,GAC3B,GAAIA,EACF,OAAOgB,EAAOp6E,QAEhB,IAAIgD,EAASo3E,EAAOp3E,OAChB6P,EAAS6/D,GAAcA,GAAY1vE,GAAU,IAAIo3E,EAAOj3E,YAAYH,GAGxE,OADAo3E,EAAOp1E,KAAK6N,GACLA,EAUT,SAASqnE,GAAiBsM,GACxB,IAAI3zE,EAAS,IAAI2zE,EAAYrjF,YAAYqjF,EAAYlM,YAErD,OADA,IAAI7H,GAAW5/D,GAAQmP,IAAI,IAAIywD,GAAW+T,IACnC3zE,EAgDT,SAAS2nE,GAAgBiM,EAAYrN,GACnC,IAAIgB,EAAShB,EAASc,GAAiBuM,EAAWrM,QAAUqM,EAAWrM,OACvE,OAAO,IAAIqM,EAAWtjF,YAAYi3E,EAAQqM,EAAWpM,WAAYoM,EAAWzjF,QAW9E,SAASggF,GAAiBn8E,EAAOg3E,GAC/B,GAAIh3E,IAAUg3E,EAAO,CACnB,IAAI6I,EAAe7/E,IAAUrB,EACzBm/E,EAAsB,OAAV99E,EACZ8/E,EAAiB9/E,GAAUA,EAC3B+9E,EAAcrI,GAAS11E,GAEvBi+E,EAAejH,IAAUr4E,EACzBu/E,EAAsB,OAAVlH,EACZmH,EAAiBnH,GAAUA,EAC3BoH,EAAc1I,GAASsB,GAE3B,IAAMkH,IAAcE,IAAgBL,GAAe/9E,EAAQg3E,GACtD+G,GAAeE,GAAgBE,IAAmBD,IAAcE,GAChEN,GAAaG,GAAgBE,IAC5B0B,GAAgB1B,IACjB2B,EACH,OAAO,EAET,IAAMhC,IAAcC,IAAgBK,GAAep+E,EAAQg3E,GACtDoH,GAAeyB,GAAgBC,IAAmBhC,IAAcC,GAChEG,GAAa2B,GAAgBC,IAC5B7B,GAAgB6B,IACjB3B,EACH,OAAQ,EAGZ,OAAO,EAuDT,SAAS4B,GAAY9yE,EAAM+yE,EAAUC,EAASC,GAU5C,IATA,IAAIC,GAAa,EACbC,EAAanzE,EAAK9Q,OAClBkkF,EAAgBJ,EAAQ9jF,OACxBmkF,GAAa,EACbC,EAAaP,EAAS7jF,OACtBqkF,EAAcrT,GAAUiT,EAAaC,EAAe,GACpDr0E,EAASvN,GAAM8hF,EAAaC,GAC5BC,GAAeP,IAEVI,EAAYC,GACnBv0E,EAAOs0E,GAAaN,EAASM,GAE/B,OAASH,EAAYE,IACfI,GAAeN,EAAYC,KAC7Bp0E,EAAOi0E,EAAQE,IAAclzE,EAAKkzE,IAGtC,KAAOK,KACLx0E,EAAOs0E,KAAerzE,EAAKkzE,KAE7B,OAAOn0E,EAcT,SAAS00E,GAAiBzzE,EAAM+yE,EAAUC,EAASC,GAWjD,IAVA,IAAIC,GAAa,EACbC,EAAanzE,EAAK9Q,OAClBwkF,GAAgB,EAChBN,EAAgBJ,EAAQ9jF,OACxBykF,GAAc,EACdC,EAAcb,EAAS7jF,OACvBqkF,EAAcrT,GAAUiT,EAAaC,EAAe,GACpDr0E,EAASvN,GAAM+hF,EAAcK,GAC7BJ,GAAeP,IAEVC,EAAYK,GACnBx0E,EAAOm0E,GAAalzE,EAAKkzE,GAG3B,IADA,IAAI39C,EAAS29C,IACJS,EAAaC,GACpB70E,EAAOw2B,EAASo+C,GAAcZ,EAASY,GAEzC,OAASD,EAAeN,IAClBI,GAAeN,EAAYC,KAC7Bp0E,EAAOw2B,EAASy9C,EAAQU,IAAiB1zE,EAAKkzE,MAGlD,OAAOn0E,EAWT,SAASmlE,GAAUv0D,EAAQvjB,GACzB,IAAI2a,GAAS,EACT7X,EAASygB,EAAOzgB,OAGpB,IADA9C,IAAUA,EAAQoF,GAAMtC,MACf6X,EAAQ7X,GACf9C,EAAM2a,GAAS4I,EAAO5I,GAExB,OAAO3a,EAaT,SAASy4E,GAAWl1D,EAAQ+H,EAAOjP,EAAQ48D,GACzC,IAAIwO,GAASprE,EACbA,IAAWA,EAAS,IAKpB,IAHA,IAAI1B,GAAS,EACT7X,EAASwoB,EAAMxoB,SAEV6X,EAAQ7X,GAAQ,CACvB,IAAI6K,EAAM2d,EAAM3Q,GAEZmnE,EAAW7I,EACXA,EAAW58D,EAAO1O,GAAM4V,EAAO5V,GAAMA,EAAK0O,EAAQkH,GAClDje,EAEAw8E,IAAax8E,IACfw8E,EAAWv+D,EAAO5V,IAEhB85E,EACFvP,GAAgB77D,EAAQ1O,EAAKm0E,GAE7B3J,GAAY97D,EAAQ1O,EAAKm0E,GAG7B,OAAOzlE,EAmCT,SAASqrE,GAAiBxkE,EAAQykE,GAChC,OAAO,SAAS/4D,EAAY8+C,GAC1B,IAAInwD,EAAOlY,GAAQupB,GAAc6+C,GAAkB6K,GAC/C3K,EAAcga,EAAcA,IAAgB,GAEhD,OAAOpqE,EAAKqR,EAAY1L,EAAQq/D,GAAY7U,EAAU,GAAIC,IAW9D,SAASia,GAAeC,GACtB,OAAOtE,IAAS,SAASlnE,EAAQyrE,GAC/B,IAAIntE,GAAS,EACT7X,EAASglF,EAAQhlF,OACjBm2E,EAAan2E,EAAS,EAAIglF,EAAQhlF,EAAS,GAAKwC,EAChDyiF,EAAQjlF,EAAS,EAAIglF,EAAQ,GAAKxiF,EAWtC,IATA2zE,EAAc4O,EAAS/kF,OAAS,GAA0B,mBAAdm2E,GACvCn2E,IAAUm2E,GACX3zE,EAEAyiF,GAASC,GAAeF,EAAQ,GAAIA,EAAQ,GAAIC,KAClD9O,EAAan2E,EAAS,EAAIwC,EAAY2zE,EACtCn2E,EAAS,GAEXuZ,EAASzc,GAAOyc,KACP1B,EAAQ7X,GAAQ,CACvB,IAAIygB,EAASukE,EAAQntE,GACjB4I,GACFskE,EAASxrE,EAAQkH,EAAQ5I,EAAOs+D,GAGpC,OAAO58D,KAYX,SAAS0/D,GAAehN,EAAUE,GAChC,OAAO,SAASrgD,EAAY8+C,GAC1B,GAAkB,MAAd9+C,EACF,OAAOA,EAET,IAAK/rB,GAAY+rB,GACf,OAAOmgD,EAASngD,EAAY8+C,GAM9B,IAJA,IAAI5qE,EAAS8rB,EAAW9rB,OACpB6X,EAAQs0D,EAAYnsE,GAAU,EAC9BmlF,EAAWroF,GAAOgvB,IAEdqgD,EAAYt0D,MAAYA,EAAQ7X,KACa,IAA/C4qE,EAASua,EAASttE,GAAQA,EAAOstE,KAIvC,OAAOr5D,GAWX,SAAS+tD,GAAc1N,GACrB,OAAO,SAAS5yD,EAAQqxD,EAAUyP,GAMhC,IALA,IAAIxiE,GAAS,EACTstE,EAAWroF,GAAOyc,GAClBiP,EAAQ6xD,EAAS9gE,GACjBvZ,EAASwoB,EAAMxoB,OAEZA,KAAU,CACf,IAAI6K,EAAM2d,EAAM2jD,EAAYnsE,IAAW6X,GACvC,IAA+C,IAA3C+yD,EAASua,EAASt6E,GAAMA,EAAKs6E,GAC/B,MAGJ,OAAO5rE,GAgCX,SAAS6rE,GAAgBC,GACvB,OAAO,SAAS5mE,GAGd,IAAIyuD,EAAaS,GAFjBlvD,EAASjhB,GAASihB,IAGd4vD,GAAc5vD,GACdjc,EAEAkrE,EAAMR,EACNA,EAAW,GACXzuD,EAAOizB,OAAO,GAEd4zC,EAAWpY,EACXqW,GAAUrW,EAAY,GAAG3iE,KAAK,IAC9BkU,EAAOzhB,MAAM,GAEjB,OAAO0wE,EAAI2X,KAAgBC,GAW/B,SAASC,GAAiB1kF,GACxB,OAAO,SAAS4d,GACd,OAAOitD,GAAY8Z,GAAMC,GAAOhnE,GAAQ7b,QAAQ2lE,GAAQ,KAAM1nE,EAAU,KAY5E,SAAS6kF,GAAWxiF,GAClB,OAAO,WAIL,IAAI4N,EAAO9P,UACX,OAAQ8P,EAAK9Q,QACX,KAAK,EAAG,OAAO,IAAIkD,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAK4N,EAAK,IAC7B,KAAK,EAAG,OAAO,IAAI5N,EAAK4N,EAAK,GAAIA,EAAK,IACtC,KAAK,EAAG,OAAO,IAAI5N,EAAK4N,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC/C,KAAK,EAAG,OAAO,IAAI5N,EAAK4N,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACxD,KAAK,EAAG,OAAO,IAAI5N,EAAK4N,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACjE,KAAK,EAAG,OAAO,IAAI5N,EAAK4N,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC1E,KAAK,EAAG,OAAO,IAAI5N,EAAK4N,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAErF,IAAI60E,EAAc/S,GAAW1vE,EAAKjD,WAC9B4P,EAAS3M,EAAK9F,MAAMuoF,EAAa70E,GAIrC,OAAO+hE,GAAShjE,GAAUA,EAAS81E,GAgDvC,SAASC,GAAWC,GAClB,OAAO,SAAS/5D,EAAYm/C,EAAW1lB,GACrC,IAAI4/B,EAAWroF,GAAOgvB,GACtB,IAAK/rB,GAAY+rB,GAAa,CAC5B,IAAI8+C,EAAW6U,GAAYxU,EAAW,GACtCn/C,EAAanhB,GAAKmhB,GAClBm/C,EAAY,SAASpgE,GAAO,OAAO+/D,EAASua,EAASt6E,GAAMA,EAAKs6E,IAElE,IAAIttE,EAAQguE,EAAc/5D,EAAYm/C,EAAW1lB,GACjD,OAAO1tC,GAAS,EAAIstE,EAASva,EAAW9+C,EAAWjU,GAASA,GAASrV,GAWzE,SAASsjF,GAAW3Z,GAClB,OAAO4Z,IAAS,SAASC,GACvB,IAAIhmF,EAASgmF,EAAMhmF,OACf6X,EAAQ7X,EACRimF,EAASvT,GAAczyE,UAAUimF,KAKrC,IAHI/Z,GACF6Z,EAAMxtE,UAEDX,KAAS,CACd,IAAI4C,EAAOurE,EAAMnuE,GACjB,GAAmB,mBAAR4C,EACT,MAAM,IAAIqB,GAAUkmD,GAEtB,GAAIikB,IAAWE,GAAgC,WAArBC,GAAY3rE,GACpC,IAAI0rE,EAAU,IAAIzT,GAAc,IAAI,GAIxC,IADA76D,EAAQsuE,EAAUtuE,EAAQ7X,IACjB6X,EAAQ7X,GAAQ,CAGvB,IAAIynC,EAAW2+C,GAFf3rE,EAAOurE,EAAMnuE,IAGToH,EAAmB,WAAZwoB,EAAwB9nB,GAAQlF,GAAQjY,EAMjD2jF,EAJElnE,GAAQonE,GAAWpnE,EAAK,UACtBA,EAAK,KACJA,EAAK,GAAGjf,QAAqB,GAAXif,EAAK,GAElBknE,EAAQC,GAAYnnE,EAAK,KAAK7hB,MAAM+oF,EAASlnE,EAAK,IAElC,GAAfxE,EAAKza,QAAeqmF,GAAW5rE,GACtC0rE,EAAQ1+C,KACR0+C,EAAQD,KAAKzrE,GAGrB,OAAO,WACL,IAAI3J,EAAO9P,UACP6C,EAAQiN,EAAK,GAEjB,GAAIq1E,GAA0B,GAAfr1E,EAAK9Q,QAAeuC,GAAQsB,GACzC,OAAOsiF,EAAQG,MAAMziF,GAAOA,QAK9B,IAHA,IAAIgU,EAAQ,EACRhI,EAAS7P,EAASgmF,EAAMnuE,GAAOza,MAAMV,KAAMoU,GAAQjN,IAE9CgU,EAAQ7X,GACf6P,EAASm2E,EAAMnuE,GAAOha,KAAKnB,KAAMmT,GAEnC,OAAOA,MAwBb,SAAS02E,GAAa9rE,EAAMy7D,EAASxL,EAASmZ,EAAUC,EAAS0C,EAAeC,EAAcC,EAAQC,EAAKC,GACzG,IAAIC,EAAQ3Q,EAAU5T,EAClBwkB,EA5iKa,EA4iKJ5Q,EACT6Q,EA5iKiB,EA4iKL7Q,EACZ6N,KAAY7N,EACZ8Q,EAtiKa,IAsiKJ9Q,EACThzE,EAAO6jF,EAAYvkF,EAAYkjF,GAAWjrE,GA6C9C,OA3CA,SAAS0rE,IAKP,IAJA,IAAInmF,EAASgB,UAAUhB,OACnB8Q,EAAOxO,GAAMtC,GACb6X,EAAQ7X,EAEL6X,KACL/G,EAAK+G,GAAS7W,UAAU6W,GAE1B,GAAIksE,EACF,IAAIzW,EAAc2Z,GAAUd,GACxBe,EAAe7Z,GAAav8D,EAAMw8D,GASxC,GAPIuW,IACF/yE,EAAO8yE,GAAY9yE,EAAM+yE,EAAUC,EAASC,IAE1CyC,IACF11E,EAAOyzE,GAAiBzzE,EAAM01E,EAAeC,EAAc1C,IAE7D/jF,GAAUknF,EACNnD,GAAa/jF,EAAS4mF,EAAO,CAC/B,IAAIO,EAAapZ,GAAej9D,EAAMw8D,GACtC,OAAO8Z,GACL3sE,EAAMy7D,EAASqQ,GAAcJ,EAAQ7Y,YAAa5C,EAClD55D,EAAMq2E,EAAYT,EAAQC,EAAKC,EAAQ5mF,GAG3C,IAAI2lF,EAAcmB,EAASpc,EAAUhuE,KACjCmD,EAAKknF,EAAYpB,EAAYlrE,GAAQA,EAczC,OAZAza,EAAS8Q,EAAK9Q,OACV0mF,EACF51E,EAAOu2E,GAAQv2E,EAAM41E,GACZM,GAAUhnF,EAAS,GAC5B8Q,EAAK0H,UAEHquE,GAASF,EAAM3mF,IACjB8Q,EAAK9Q,OAAS2mF,GAEZjqF,MAAQA,OAASgV,IAAQhV,gBAAgBypF,IAC3CtmF,EAAKqD,GAAQwiF,GAAW7lF,IAEnBA,EAAGzC,MAAMuoF,EAAa70E,IAajC,SAASw2E,GAAelnE,EAAQmnE,GAC9B,OAAO,SAAShuE,EAAQqxD,GACtB,OAh/DJ,SAAsBrxD,EAAQ6G,EAAQwqD,EAAUC,GAI9C,OAHAqO,GAAW3/D,GAAQ,SAAS1V,EAAOgH,EAAK0O,GACtC6G,EAAOyqD,EAAaD,EAAS/mE,GAAQgH,EAAK0O,MAErCsxD,EA4+DE2c,CAAajuE,EAAQ6G,EAAQmnE,EAAW3c,GAAW,KAY9D,SAAS6c,GAAoB93E,EAAUwG,GACrC,OAAO,SAAStS,EAAOg3E,GACrB,IAAIhrE,EACJ,GAAIhM,IAAUrB,GAAaq4E,IAAUr4E,EACnC,OAAO2T,EAKT,GAHItS,IAAUrB,IACZqN,EAAShM,GAEPg3E,IAAUr4E,EAAW,CACvB,GAAIqN,IAAWrN,EACb,OAAOq4E,EAEW,iBAATh3E,GAAqC,iBAATg3E,GACrCh3E,EAAQw+E,GAAax+E,GACrBg3E,EAAQwH,GAAaxH,KAErBh3E,EAAQu+E,GAAav+E,GACrBg3E,EAAQuH,GAAavH,IAEvBhrE,EAASF,EAAS9L,EAAOg3E,GAE3B,OAAOhrE,GAWX,SAAS63E,GAAWC,GAClB,OAAO5B,IAAS,SAASxG,GAEvB,OADAA,EAAY/T,GAAS+T,EAAWzS,GAAU2S,OACnCgB,IAAS,SAAS3vE,GACvB,IAAI45D,EAAUhuE,KACd,OAAOirF,EAAUpI,GAAW,SAAS3U,GACnC,OAAOxtE,GAAMwtE,EAAUF,EAAS55D,YAexC,SAAS82E,GAAc5nF,EAAQ6nF,GAG7B,IAAIC,GAFJD,EAAQA,IAAUrlF,EAAY,IAAM6/E,GAAawF,IAEzB7nF,OACxB,GAAI8nF,EAAc,EAChB,OAAOA,EAActH,GAAWqH,EAAO7nF,GAAU6nF,EAEnD,IAAIh4E,EAAS2wE,GAAWqH,EAAOtX,GAAWvwE,EAASkuE,GAAW2Z,KAC9D,OAAOla,GAAWka,GACdtE,GAAUlV,GAAcx+D,GAAS,EAAG7P,GAAQuK,KAAK,IACjDsF,EAAO7S,MAAM,EAAGgD,GA6CtB,SAAS6qC,GAAYshC,GACnB,OAAO,SAAS37D,EAAO9O,EAAK2zB,GAa1B,OAZIA,GAAuB,iBAARA,GAAoB6vD,GAAe10E,EAAO9O,EAAK2zB,KAChE3zB,EAAM2zB,EAAO7yB,GAGfgO,EAAQu3E,GAASv3E,GACb9O,IAAQc,GACVd,EAAM8O,EACNA,EAAQ,GAER9O,EAAMqmF,GAASrmF,GA57CrB,SAAmB8O,EAAO9O,EAAK2zB,EAAM82C,GAKnC,IAJA,IAAIt0D,GAAS,EACT7X,EAASgxE,GAAUT,IAAY7uE,EAAM8O,IAAU6kB,GAAQ,IAAK,GAC5DxlB,EAASvN,GAAMtC,GAEZA,KACL6P,EAAOs8D,EAAYnsE,IAAW6X,GAASrH,EACvCA,GAAS6kB,EAEX,OAAOxlB,EAs7CEm4E,CAAUx3E,EAAO9O,EADxB2zB,EAAOA,IAAS7yB,EAAagO,EAAQ9O,EAAM,GAAK,EAAKqmF,GAAS1yD,GAC3B82C,IAWvC,SAAS8b,GAA0Bt4E,GACjC,OAAO,SAAS9L,EAAOg3E,GAKrB,MAJsB,iBAATh3E,GAAqC,iBAATg3E,IACvCh3E,EAAQqkF,GAASrkF,GACjBg3E,EAAQqN,GAASrN,IAEZlrE,EAAS9L,EAAOg3E,IAqB3B,SAASuM,GAAc3sE,EAAMy7D,EAASiS,EAAU7a,EAAa5C,EAASmZ,EAAUC,EAAS4C,EAAQC,EAAKC,GACpG,IAAIwB,EArxKc,EAqxKJlS,EAMdA,GAAYkS,EAAUhmB,EAAoBC,EA5xKlB,GA6xKxB6T,KAAakS,EAAU/lB,EAA0BD,MAG/C8T,IAAW,GAEb,IAAImS,EAAU,CACZ5tE,EAAMy7D,EAASxL,EAVC0d,EAAUvE,EAAWrhF,EAFtB4lF,EAAUtE,EAAUthF,EAGd4lF,EAAU5lF,EAAYqhF,EAFvBuE,EAAU5lF,EAAYshF,EAYzB4C,EAAQC,EAAKC,GAG5B/2E,EAASs4E,EAAS/qF,MAAMoF,EAAW6lF,GAKvC,OAJIhC,GAAW5rE,IACb6tE,GAAQz4E,EAAQw4E,GAElBx4E,EAAOy9D,YAAcA,EACdib,GAAgB14E,EAAQ4K,EAAMy7D,GAUvC,SAASsS,GAAYnD,GACnB,IAAI5qE,EAAO/X,GAAK2iF,GAChB,OAAO,SAASvP,EAAQ2S,GAGtB,GAFA3S,EAASoS,GAASpS,IAClB2S,EAAyB,MAAbA,EAAoB,EAAIxX,GAAUyX,GAAUD,GAAY,OACnD5X,GAAeiF,GAAS,CAGvC,IAAI6S,GAAQnrF,GAASs4E,GAAU,KAAK7xE,MAAM,KAI1C,SADA0kF,GAAQnrF,GAFIid,EAAKkuE,EAAK,GAAK,MAAQA,EAAK,GAAKF,KAEnB,KAAKxkF,MAAM,MACvB,GAAK,MAAQ0kF,EAAK,GAAKF,IAEvC,OAAOhuE,EAAKq7D,IAWhB,IAAIyM,GAAc/Q,IAAQ,EAAIxD,GAAW,IAAIwD,GAAI,GAAG,KAAK,IAAOhP,EAAmB,SAASrgD,GAC1F,OAAO,IAAIqvD,GAAIrvD,IAD2Dnf,GAW5E,SAAS4lF,GAAcvO,GACrB,OAAO,SAAS9gE,GACd,IAAInM,EAAMopE,GAAOj9D,GACjB,OAAInM,GAAOg2D,EACFwK,GAAWr0D,GAEhBnM,GAAOq2D,EACFwK,GAAW10D,GAn6I1B,SAAqBA,EAAQiP,GAC3B,OAAOgjD,GAAShjD,GAAO,SAAS3d,GAC9B,MAAO,CAACA,EAAK0O,EAAO1O,OAm6IXg+E,CAAYtvE,EAAQ8gE,EAAS9gE,KA6BxC,SAASuvE,GAAWruE,EAAMy7D,EAASxL,EAASmZ,EAAUC,EAAS4C,EAAQC,EAAKC,GAC1E,IAAIG,EAl4KiB,EAk4KL7Q,EAChB,IAAK6Q,GAA4B,mBAARtsE,EACvB,MAAM,IAAIqB,GAAUkmD,GAEtB,IAAIhiE,EAAS6jF,EAAWA,EAAS7jF,OAAS,EAS1C,GARKA,IACHk2E,IAAW,GACX2N,EAAWC,EAAUthF,GAEvBmkF,EAAMA,IAAQnkF,EAAYmkF,EAAM3V,GAAU0X,GAAU/B,GAAM,GAC1DC,EAAQA,IAAUpkF,EAAYokF,EAAQ8B,GAAU9B,GAChD5mF,GAAU8jF,EAAUA,EAAQ9jF,OAAS,EAEjCk2E,EAAU7T,EAAyB,CACrC,IAAImkB,EAAgB3C,EAChB4C,EAAe3C,EAEnBD,EAAWC,EAAUthF,EAEvB,IAAIyc,EAAO8nE,EAAYvkF,EAAYmd,GAAQlF,GAEvC4tE,EAAU,CACZ5tE,EAAMy7D,EAASxL,EAASmZ,EAAUC,EAAS0C,EAAeC,EAC1DC,EAAQC,EAAKC,GAkBf,GAfI3nE,GA26BN,SAAmBA,EAAMwB,GACvB,IAAIy1D,EAAUj3D,EAAK,GACf8pE,EAAatoE,EAAO,GACpBuoE,EAAa9S,EAAU6S,EACvB1Q,EAAW2Q,MAEXC,EACAF,GAAczmB,GA50MA,GA40MmB4T,GACjC6S,GAAczmB,GAAmB4T,GAAW3T,GAAqBtjD,EAAK,GAAGjf,QAAUygB,EAAO,SAC1FsoE,GAAqDtoE,EAAO,GAAGzgB,QAAUygB,EAAO,IA90MlE,GA80M0Ey1D,EAG5F,IAAMmC,IAAY4Q,EAChB,OAAOhqE,EAr1MQ,EAw1Mb8pE,IACF9pE,EAAK,GAAKwB,EAAO,GAEjBuoE,GA31Me,EA21MD9S,EAA2B,EAz1MnB,GA41MxB,IAAIryE,EAAQ4c,EAAO,GACnB,GAAI5c,EAAO,CACT,IAAIggF,EAAW5kE,EAAK,GACpBA,EAAK,GAAK4kE,EAAWD,GAAYC,EAAUhgF,EAAO4c,EAAO,IAAM5c,EAC/Dob,EAAK,GAAK4kE,EAAW9V,GAAe9uD,EAAK,GAAIijD,GAAezhD,EAAO,IAGrE5c,EAAQ4c,EAAO,MAEbojE,EAAW5kE,EAAK,GAChBA,EAAK,GAAK4kE,EAAWU,GAAiBV,EAAUhgF,EAAO4c,EAAO,IAAM5c,EACpEob,EAAK,GAAK4kE,EAAW9V,GAAe9uD,EAAK,GAAIijD,GAAezhD,EAAO,KAGrE5c,EAAQ4c,EAAO,MAEbxB,EAAK,GAAKpb,GAGRklF,EAAazmB,IACfrjD,EAAK,GAAgB,MAAXA,EAAK,GAAawB,EAAO,GAAKwwD,GAAUhyD,EAAK,GAAIwB,EAAO,KAGrD,MAAXxB,EAAK,KACPA,EAAK,GAAKwB,EAAO,IAGnBxB,EAAK,GAAKwB,EAAO,GACjBxB,EAAK,GAAK+pE,EA59BRE,CAAUb,EAASppE,GAErBxE,EAAO4tE,EAAQ,GACfnS,EAAUmS,EAAQ,GAClB3d,EAAU2d,EAAQ,GAClBxE,EAAWwE,EAAQ,GACnBvE,EAAUuE,EAAQ,KAClBzB,EAAQyB,EAAQ,GAAKA,EAAQ,KAAO7lF,EAC/BukF,EAAY,EAAItsE,EAAKza,OACtBgxE,GAAUqX,EAAQ,GAAKroF,EAAQ,QAErBk2E,IACZA,IAAW,IAERA,GA56KY,GA46KDA,EAGdrmE,EA56KgB,GA26KPqmE,GAA8BA,GAAW/T,EApgBtD,SAAqB1nD,EAAMy7D,EAAS0Q,GAClC,IAAI1jF,EAAOwiF,GAAWjrE,GAwBtB,OAtBA,SAAS0rE,IAMP,IALA,IAAInmF,EAASgB,UAAUhB,OACnB8Q,EAAOxO,GAAMtC,GACb6X,EAAQ7X,EACRstE,EAAc2Z,GAAUd,GAErBtuE,KACL/G,EAAK+G,GAAS7W,UAAU6W,GAE1B,IAAIisE,EAAW9jF,EAAS,GAAK8Q,EAAK,KAAOw8D,GAAex8D,EAAK9Q,EAAS,KAAOstE,EACzE,GACAS,GAAej9D,EAAMw8D,GAGzB,OADAttE,GAAU8jF,EAAQ9jF,QACL4mF,EACJQ,GACL3sE,EAAMy7D,EAASqQ,GAAcJ,EAAQ7Y,YAAa9qE,EAClDsO,EAAMgzE,EAASthF,EAAWA,EAAWokF,EAAQ5mF,GAG1C5C,GADGV,MAAQA,OAASgV,IAAQhV,gBAAgBypF,EAAWjjF,EAAOuX,EACpD/d,KAAMoU,IA8edq4E,CAAY1uE,EAAMy7D,EAAS0Q,GAC1B1Q,GAAW9T,OAAqB8T,GAAqD4N,EAAQ9jF,OAG9FumF,GAAanpF,MAAMoF,EAAW6lF,GA9O3C,SAAuB5tE,EAAMy7D,EAASxL,EAASmZ,GAC7C,IAAIiD,EAtsKa,EAssKJ5Q,EACThzE,EAAOwiF,GAAWjrE,GAkBtB,OAhBA,SAAS0rE,IAQP,IAPA,IAAInC,GAAa,EACbC,EAAajjF,UAAUhB,OACvBmkF,GAAa,EACbC,EAAaP,EAAS7jF,OACtB8Q,EAAOxO,GAAM8hF,EAAaH,GAC1BpkF,EAAMnD,MAAQA,OAASgV,IAAQhV,gBAAgBypF,EAAWjjF,EAAOuX,IAE5D0pE,EAAYC,GACnBtzE,EAAKqzE,GAAaN,EAASM,GAE7B,KAAOF,KACLnzE,EAAKqzE,KAAenjF,YAAYgjF,GAElC,OAAO5mF,GAAMyC,EAAIinF,EAASpc,EAAUhuE,KAAMoU,IA0NjCs4E,CAAc3uE,EAAMy7D,EAASxL,EAASmZ,QAJ/C,IAAIh0E,EAhmBR,SAAoB4K,EAAMy7D,EAASxL,GACjC,IAAIoc,EA90Ja,EA80JJ5Q,EACThzE,EAAOwiF,GAAWjrE,GAMtB,OAJA,SAAS0rE,IAEP,OADUzpF,MAAQA,OAASgV,IAAQhV,gBAAgBypF,EAAWjjF,EAAOuX,GAC3Drd,MAAM0pF,EAASpc,EAAUhuE,KAAMsE,YA0lB5BqoF,CAAW5uE,EAAMy7D,EAASxL,GASzC,OAAO6d,IADMtpE,EAAO8hE,GAAcuH,IACJz4E,EAAQw4E,GAAU5tE,EAAMy7D,GAexD,SAASoT,GAAuBhU,EAAUmI,EAAU5yE,EAAK0O,GACvD,OAAI+7D,IAAa9yE,GACZtB,GAAGo0E,EAAUxG,GAAYjkE,MAAUnN,GAAeG,KAAK0b,EAAQ1O,GAC3D4yE,EAEFnI,EAiBT,SAASiU,GAAoBjU,EAAUmI,EAAU5yE,EAAK0O,EAAQkH,EAAQzD,GAOpE,OANI61D,GAASyC,IAAazC,GAAS4K,KAEjCzgE,EAAMgC,IAAIy+D,EAAUnI,GACpBsJ,GAAUtJ,EAAUmI,EAAUj7E,EAAW+mF,GAAqBvsE,GAC9DA,EAAc,OAAEygE,IAEXnI,EAYT,SAASkU,GAAgB3lF,GACvB,OAAOxB,GAAcwB,GAASrB,EAAYqB,EAgB5C,SAASs4E,GAAYj/E,EAAO29E,EAAO3E,EAASC,EAAYwF,EAAW3+D,GACjE,IAAIq/D,EApgLmB,EAogLPnG,EACZuT,EAAYvsF,EAAM8C,OAClBk7E,EAAYL,EAAM76E,OAEtB,GAAIypF,GAAavO,KAAemB,GAAanB,EAAYuO,GACvD,OAAO,EAGT,IAAIC,EAAa1sE,EAAM3c,IAAInD,GACvB4/E,EAAa9/D,EAAM3c,IAAIw6E,GAC3B,GAAI6O,GAAc5M,EAChB,OAAO4M,GAAc7O,GAASiC,GAAc5/E,EAE9C,IAAI2a,GAAS,EACThI,GAAS,EACT0rE,EAlhLqB,EAkhLbrF,EAAoC,IAAIlC,GAAWxxE,EAM/D,IAJAwa,EAAMgC,IAAI9hB,EAAO29E,GACjB79D,EAAMgC,IAAI67D,EAAO39E,KAGR2a,EAAQ4xE,GAAW,CAC1B,IAAIE,EAAWzsF,EAAM2a,GACjBmlE,EAAWnC,EAAMhjE,GAErB,GAAIs+D,EACF,IAAI8G,EAAWZ,EACXlG,EAAW6G,EAAU2M,EAAU9xE,EAAOgjE,EAAO39E,EAAO8f,GACpDm5D,EAAWwT,EAAU3M,EAAUnlE,EAAO3a,EAAO29E,EAAO79D,GAE1D,GAAIigE,IAAaz6E,EAAW,CAC1B,GAAIy6E,EACF,SAEFptE,GAAS,EACT,MAGF,GAAI0rE,GACF,IAAK1P,GAAUgP,GAAO,SAASmC,EAAU7B,GACnC,IAAKnO,GAASuO,EAAMJ,KACfwO,IAAa3M,GAAYrB,EAAUgO,EAAU3M,EAAU9G,EAASC,EAAYn5D,IAC/E,OAAOu+D,EAAKl+E,KAAK89E,MAEjB,CACNtrE,GAAS,EACT,YAEG,GACD85E,IAAa3M,IACXrB,EAAUgO,EAAU3M,EAAU9G,EAASC,EAAYn5D,GACpD,CACLnN,GAAS,EACT,OAKJ,OAFAmN,EAAc,OAAE9f,GAChB8f,EAAc,OAAE69D,GACThrE,EA0KT,SAASk2E,GAAStrE,GAChB,OAAOimE,GAAYC,GAASlmE,EAAMjY,EAAWonF,IAAUnvE,EAAO,IAUhE,SAASu9D,GAAWz+D,GAClB,OAAO6gE,GAAe7gE,EAAQ5O,GAAMqsE,IAWtC,SAASe,GAAax+D,GACpB,OAAO6gE,GAAe7gE,EAAQu9D,GAAQF,IAUxC,IAAIj3D,GAAWgyD,GAAiB,SAASl3D,GACvC,OAAOk3D,GAAQtxE,IAAIoa,IADIzX,GAWzB,SAASojF,GAAY3rE,GAKnB,IAJA,IAAI5K,EAAU4K,EAAK1Y,KAAO,GACtB7E,EAAQ00E,GAAU/hE,GAClB7P,EAAStC,GAAeG,KAAK+zE,GAAW/hE,GAAU3S,EAAM8C,OAAS,EAE9DA,KAAU,CACf,IAAIif,EAAO/hB,EAAM8C,GACb6pF,EAAY5qE,EAAKxE,KACrB,GAAiB,MAAbovE,GAAqBA,GAAapvE,EACpC,OAAOwE,EAAKld,KAGhB,OAAO8N,EAUT,SAASo3E,GAAUxsE,GAEjB,OADa/c,GAAeG,KAAK00E,GAAQ,eAAiBA,GAAS93D,GACrD6yD,YAchB,SAASmS,KACP,IAAI5vE,EAAS0iE,GAAO3H,UAAYA,GAEhC,OADA/6D,EAASA,IAAW+6D,GAAWgT,GAAe/tE,EACvC7O,UAAUhB,OAAS6P,EAAO7O,UAAU,GAAIA,UAAU,IAAM6O,EAWjE,SAASipE,GAAWh4E,EAAK+J,GACvB,IAgYiBhH,EACbxF,EAjYA4gB,EAAOne,EAAImzE,SACf,OAiYgB,WADZ51E,SADawF,EA/XAgH,KAiYmB,UAARxM,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAVwF,EACU,OAAVA,GAlYDob,EAAmB,iBAAPpU,EAAkB,SAAW,QACzCoU,EAAKne,IAUX,SAASy9E,GAAahlE,GAIpB,IAHA,IAAI1J,EAASlF,GAAK4O,GACdvZ,EAAS6P,EAAO7P,OAEbA,KAAU,CACf,IAAI6K,EAAMgF,EAAO7P,GACb6D,EAAQ0V,EAAO1O,GAEnBgF,EAAO7P,GAAU,CAAC6K,EAAKhH,EAAO66E,GAAmB76E,IAEnD,OAAOgM,EAWT,SAASsgE,GAAU52D,EAAQ1O,GACzB,IAAIhH,EAlxJR,SAAkB0V,EAAQ1O,GACxB,OAAiB,MAAV0O,EAAiB/W,EAAY+W,EAAO1O,GAixJ7Bi/E,CAASvwE,EAAQ1O,GAC7B,OAAO8yE,GAAa95E,GAASA,EAAQrB,EAqCvC,IAAIw0E,GAAcvG,GAA+B,SAASl3D,GACxD,OAAc,MAAVA,EACK,IAETA,EAASzc,GAAOyc,GACT2xD,GAAYuF,GAAiBl3D,IAAS,SAASo+D,GACpD,OAAO9H,GAAqBhyE,KAAK0b,EAAQo+D,QANRoS,GAiBjCnT,GAAgBnG,GAA+B,SAASl3D,GAE1D,IADA,IAAI1J,EAAS,GACN0J,GACLkyD,GAAU57D,EAAQmnE,GAAWz9D,IAC7BA,EAASo2D,GAAap2D,GAExB,OAAO1J,GAN8Bk6E,GAgBnCvT,GAAS+D,GA2Eb,SAASyP,GAAQzwE,EAAQ0gE,EAAMgQ,GAO7B,IAJA,IAAIpyE,GAAS,EACT7X,GAHJi6E,EAAOC,GAASD,EAAM1gE,IAGJvZ,OACd6P,GAAS,IAEJgI,EAAQ7X,GAAQ,CACvB,IAAI6K,EAAMsvE,GAAMF,EAAKpiE,IACrB,KAAMhI,EAAmB,MAAV0J,GAAkB0wE,EAAQ1wE,EAAQ1O,IAC/C,MAEF0O,EAASA,EAAO1O,GAElB,OAAIgF,KAAYgI,GAAS7X,EAChB6P,KAET7P,EAAmB,MAAVuZ,EAAiB,EAAIA,EAAOvZ,SAClBkqF,GAASlqF,IAAW20E,GAAQ9pE,EAAK7K,KACjDuC,GAAQgX,IAAWg7D,GAAYh7D,IA6BpC,SAASo9D,GAAgBp9D,GACvB,MAAqC,mBAAtBA,EAAOpZ,aAA8B89E,GAAY1kE,GAE5D,GADAq5D,GAAWjD,GAAap2D,IA8E9B,SAASogE,GAAc91E,GACrB,OAAOtB,GAAQsB,IAAU0wE,GAAY1wE,OAChCisE,IAAoBjsE,GAASA,EAAMisE,KAW1C,SAAS6E,GAAQ9wE,EAAO7D,GACtB,IAAI3B,SAAcwF,EAGlB,SAFA7D,EAAmB,MAAVA,EAAiByiE,EAAmBziE,KAGlC,UAAR3B,GACU,UAARA,GAAoBgoE,GAASl8D,KAAKtG,KAChCA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQ7D,EAajD,SAASklF,GAAerhF,EAAOgU,EAAO0B,GACpC,IAAKs5D,GAASt5D,GACZ,OAAO,EAET,IAAIlb,SAAcwZ,EAClB,SAAY,UAARxZ,EACK0B,GAAYwZ,IAAWo7D,GAAQ98D,EAAO0B,EAAOvZ,QACrC,UAAR3B,GAAoBwZ,KAAS0B,IAE7BrY,GAAGqY,EAAO1B,GAAQhU,GAa7B,SAAS46E,GAAM56E,EAAO0V,GACpB,GAAIhX,GAAQsB,GACV,OAAO,EAET,IAAIxF,SAAcwF,EAClB,QAAY,UAARxF,GAA4B,UAARA,GAA4B,WAARA,GAC/B,MAATwF,IAAiB01E,GAAS11E,MAGvBshE,GAAch7D,KAAKtG,KAAWqhE,GAAa/6D,KAAKtG,IAC1C,MAAV0V,GAAkB1V,KAAS/G,GAAOyc,IAyBvC,SAAS8sE,GAAW5rE,GAClB,IAAIgtB,EAAW2+C,GAAY3rE,GACvBogE,EAAQtI,GAAO9qC,GAEnB,GAAoB,mBAATozC,KAAyBpzC,KAAYgrC,GAAYxyE,WAC1D,OAAO,EAET,GAAIwa,IAASogE,EACX,OAAO,EAET,IAAI57D,EAAOU,GAAQk7D,GACnB,QAAS57D,GAAQxE,IAASwE,EAAK,IA7S5BqyD,IAAYkF,GAAO,IAAIlF,GAAS,IAAI6Y,YAAY,MAAQrmB,GACxDyN,IAAOiF,GAAO,IAAIjF,KAAQnO,GAC1Bn6B,IAAWutC,GAAOvtC,GAAQlwB,YAAcwqD,GACxCiO,IAAOgF,GAAO,IAAIhF,KAAQ/N,GAC1BgO,IAAW+E,GAAO,IAAI/E,KAAY7N,KACrC4S,GAAS,SAAS3yE,GAChB,IAAIgM,EAAS0qE,GAAW12E,GACpBX,EAAO2M,GAAUyzD,EAAYz/D,EAAM1D,YAAcqC,EACjD4nF,EAAalnF,EAAO4uE,GAAS5uE,GAAQ,GAEzC,GAAIknF,EACF,OAAQA,GACN,KAAKvY,GAAoB,OAAO/N,EAChC,KAAKiO,GAAe,OAAO3O,EAC3B,KAAK4O,GAAmB,OAAOzO,EAC/B,KAAK0O,GAAe,OAAOxO,EAC3B,KAAKyO,GAAmB,OAAOtO,EAGnC,OAAO/zD,IA+SX,IAAIw6E,GAAatb,GAAahxE,GAAausF,GAS3C,SAASrM,GAAYp6E,GACnB,IAAIX,EAAOW,GAASA,EAAM1D,YAG1B,OAAO0D,KAFqB,mBAARX,GAAsBA,EAAKjD,WAAc6uE,IAa/D,SAAS4P,GAAmB76E,GAC1B,OAAOA,GAAUA,IAAUgvE,GAAShvE,GAYtC,SAAS26E,GAAwB3zE,EAAK4yE,GACpC,OAAO,SAASlkE,GACd,OAAc,MAAVA,IAGGA,EAAO1O,KAAS4yE,IACpBA,IAAaj7E,GAAcqI,KAAO/N,GAAOyc,MAsIhD,SAASonE,GAASlmE,EAAMjK,EAAOykC,GAE7B,OADAzkC,EAAQwgE,GAAUxgE,IAAUhO,EAAaiY,EAAKza,OAAS,EAAKwQ,EAAO,GAC5D,WAML,IALA,IAAIM,EAAO9P,UACP6W,GAAS,EACT7X,EAASgxE,GAAUlgE,EAAK9Q,OAASwQ,EAAO,GACxCtT,EAAQoF,GAAMtC,KAET6X,EAAQ7X,GACf9C,EAAM2a,GAAS/G,EAAKN,EAAQqH,GAE9BA,GAAS,EAET,IADA,IAAI0yE,EAAYjoF,GAAMkO,EAAQ,KACrBqH,EAAQrH,GACf+5E,EAAU1yE,GAAS/G,EAAK+G,GAG1B,OADA0yE,EAAU/5E,GAASykC,EAAU/3C,GACtBE,GAAMqd,EAAM/d,KAAM6tF,IAY7B,SAAS95E,GAAO8I,EAAQ0gE,GACtB,OAAOA,EAAKj6E,OAAS,EAAIuZ,EAASygE,GAAQzgE,EAAQ4nE,GAAUlH,EAAM,GAAI,IAaxE,SAASoN,GAAQnqF,EAAOojF,GAKtB,IAJA,IAAImJ,EAAYvsF,EAAM8C,OAClBA,EAASixE,GAAUqP,EAAQtgF,OAAQypF,GACnCe,EAAWxV,GAAU93E,GAElB8C,KAAU,CACf,IAAI6X,EAAQyoE,EAAQtgF,GACpB9C,EAAM8C,GAAU20E,GAAQ98D,EAAO4xE,GAAae,EAAS3yE,GAASrV,EAEhE,OAAOtF,EAWT,SAAS6hF,GAAQxlE,EAAQ1O,GACvB,IAAY,gBAARA,GAAgD,mBAAhB0O,EAAO1O,KAIhC,aAAPA,EAIJ,OAAO0O,EAAO1O,GAiBhB,IAAIy9E,GAAUmC,GAAS1J,IAUnBzkE,GAAag0D,IAAiB,SAAS71D,EAAMgD,GAC/C,OAAO/L,GAAK4K,WAAW7B,EAAMgD,IAW3BijE,GAAc+J,GAASzJ,IAY3B,SAASuH,GAAgBpC,EAASv8C,EAAWssC,GAC3C,IAAIz1D,EAAUmpB,EAAY,GAC1B,OAAO82C,GAAYyF,EA1brB,SAA2B1lE,EAAQiqE,GACjC,IAAI1qF,EAAS0qF,EAAQ1qF,OACrB,IAAKA,EACH,OAAOygB,EAET,IAAI0tD,EAAYnuE,EAAS,EAGzB,OAFA0qF,EAAQvc,IAAcnuE,EAAS,EAAI,KAAO,IAAM0qF,EAAQvc,GACxDuc,EAAUA,EAAQngF,KAAKvK,EAAS,EAAI,KAAO,KACpCygB,EAAO7d,QAAQ6iE,GAAe,uBAAyBilB,EAAU,UAkb5CC,CAAkBlqE,EAqHhD,SAA2BiqE,EAASxU,GAOlC,OANApL,GAAUlI,GAAW,SAAS+lB,GAC5B,IAAI9kF,EAAQ,KAAO8kF,EAAK,GACnBzS,EAAUyS,EAAK,KAAQvd,GAAcsf,EAAS7mF,IACjD6mF,EAAQrtF,KAAKwG,MAGV6mF,EAAQ/oF,OA5HuCipF,CAtjBxD,SAAwBnqE,GACtB,IAAIjX,EAAQiX,EAAOjX,MAAMk8D,IACzB,OAAOl8D,EAAQA,EAAM,GAAGvF,MAAM0hE,IAAkB,GAojBwBklB,CAAepqE,GAASy1D,KAYlG,SAASuU,GAAShwE,GAChB,IAAI6F,EAAQ,EACRwqE,EAAa,EAEjB,OAAO,WACL,IAAIC,EAAQ7Z,KACRx0D,EApiNK,IAoiNmBquE,EAAQD,GAGpC,GADAA,EAAaC,EACTruE,EAAY,GACd,KAAM4D,GAziNE,IA0iNN,OAAOtf,UAAU,QAGnBsf,EAAQ,EAEV,OAAO7F,EAAKrd,MAAMoF,EAAWxB,YAYjC,SAAS+zE,GAAY73E,EAAO2wE,GAC1B,IAAIh2D,GAAS,EACT7X,EAAS9C,EAAM8C,OACfmuE,EAAYnuE,EAAS,EAGzB,IADA6tE,EAAOA,IAASrrE,EAAYxC,EAAS6tE,IAC5Bh2D,EAAQg2D,GAAM,CACrB,IAAImd,EAAOnW,GAAWh9D,EAAOs2D,GACzBtqE,EAAQ3G,EAAM8tF,GAElB9tF,EAAM8tF,GAAQ9tF,EAAM2a,GACpB3a,EAAM2a,GAAShU,EAGjB,OADA3G,EAAM8C,OAAS6tE,EACR3wE,EAUT,IAAImmF,GAvTJ,SAAuB5oE,GACrB,IAAI5K,EAASo7E,GAAQxwE,GAAM,SAAS5P,GAIlC,OAh0MiB,MA6zMbD,EAAMijE,MACRjjE,EAAMgpE,QAED/oE,KAGLD,EAAQiF,EAAOjF,MACnB,OAAOiF,EA8SUq7E,EAAc,SAASzsE,GACxC,IAAI5O,EAAS,GAOb,OAN6B,KAAzB4O,EAAO/V,WAAW,IACpBmH,EAAOxS,KAAK,IAEdohB,EAAO7b,QAAQwiE,IAAY,SAAS57D,EAAOssE,EAAQqV,EAAOC,GACxDv7E,EAAOxS,KAAK8tF,EAAQC,EAAUxoF,QAAQkjE,GAAc,MAASgQ,GAAUtsE,MAElEqG,KAUT,SAASsqE,GAAMt2E,GACb,GAAoB,iBAATA,GAAqB01E,GAAS11E,GACvC,OAAOA,EAET,IAAIgM,EAAUhM,EAAQ,GACtB,MAAkB,KAAVgM,GAAkB,EAAIhM,IAAU,EAAA,EAAa,KAAOgM,EAU9D,SAASiiE,GAASr3D,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAOu0D,GAAanxE,KAAK4c,GACzB,MAAOtR,IACT,IACE,OAAQsR,EAAO,GACf,MAAOtR,KAEX,MAAO,GA4BT,SAASwpE,GAAawT,GACpB,GAAIA,aAAmB1T,GACrB,OAAO0T,EAAQjkF,QAEjB,IAAI2N,EAAS,IAAI6iE,GAAcyT,EAAQnT,YAAamT,EAAQjT,WAI5D,OAHArjE,EAAOojE,YAAc+B,GAAUmR,EAAQlT,aACvCpjE,EAAOsjE,UAAagT,EAAQhT,UAC5BtjE,EAAOujE,WAAa+S,EAAQ/S,WACrBvjE,EAsIT,IAAIw7E,GAAa5K,IAAS,SAASvjF,EAAOilB,GACxC,OAAO+8D,GAAkBhiF,GACrBi7E,GAAej7E,EAAOu8E,GAAYt3D,EAAQ,EAAG+8D,IAAmB,IAChE,MA6BFoM,GAAe7K,IAAS,SAASvjF,EAAOilB,GAC1C,IAAIyoD,EAAWzpE,GAAKghB,GAIpB,OAHI+8D,GAAkBtU,KACpBA,EAAWpoE,GAEN08E,GAAkBhiF,GACrBi7E,GAAej7E,EAAOu8E,GAAYt3D,EAAQ,EAAG+8D,IAAmB,GAAOO,GAAY7U,EAAU,IAC7F,MA0BF2gB,GAAiB9K,IAAS,SAASvjF,EAAOilB,GAC5C,IAAIopD,EAAapqE,GAAKghB,GAItB,OAHI+8D,GAAkB3T,KACpBA,EAAa/oE,GAER08E,GAAkBhiF,GACrBi7E,GAAej7E,EAAOu8E,GAAYt3D,EAAQ,EAAG+8D,IAAmB,GAAO18E,EAAW+oE,GAClF,MAsON,SAAS/6B,GAAUtzC,EAAO+tE,EAAW1lB,GACnC,IAAIvlD,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAI6X,EAAqB,MAAb0tC,EAAoB,EAAImjC,GAAUnjC,GAI9C,OAHI1tC,EAAQ,IACVA,EAAQm5D,GAAUhxE,EAAS6X,EAAO,IAE7Bq0D,GAAchvE,EAAOuiF,GAAYxU,EAAW,GAAIpzD,GAsCzD,SAAS2zE,GAActuF,EAAO+tE,EAAW1lB,GACvC,IAAIvlD,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAI6X,EAAQ7X,EAAS,EAOrB,OANIulD,IAAc/iD,IAChBqV,EAAQ6wE,GAAUnjC,GAClB1tC,EAAQ0tC,EAAY,EAChByrB,GAAUhxE,EAAS6X,EAAO,GAC1Bo5D,GAAUp5D,EAAO7X,EAAS,IAEzBksE,GAAchvE,EAAOuiF,GAAYxU,EAAW,GAAIpzD,GAAO,GAiBhE,SAAS+xE,GAAQ1sF,GAEf,OADsB,MAATA,EAAgB,EAAIA,EAAM8C,QACvBy5E,GAAYv8E,EAAO,GAAK,GAgG1C,SAASkC,GAAKlC,GACZ,OAAQA,GAASA,EAAM8C,OAAU9C,EAAM,GAAKsF,EA0E9C,IAAIipF,GAAehL,IAAS,SAASxF,GACnC,IAAIpnE,EAAS23D,GAASyP,EAAQkI,IAC9B,OAAQtvE,EAAO7T,QAAU6T,EAAO,KAAOonE,EAAO,GAC1CD,GAAiBnnE,GACjB,MA0BF63E,GAAiBjL,IAAS,SAASxF,GACrC,IAAIrQ,EAAWzpE,GAAK85E,GAChBpnE,EAAS23D,GAASyP,EAAQkI,IAO9B,OALIvY,IAAazpE,GAAK0S,GACpB+2D,EAAWpoE,EAEXqR,EAAO7N,MAED6N,EAAO7T,QAAU6T,EAAO,KAAOonE,EAAO,GAC1CD,GAAiBnnE,EAAQ4rE,GAAY7U,EAAU,IAC/C,MAwBF+gB,GAAmBlL,IAAS,SAASxF,GACvC,IAAI1P,EAAapqE,GAAK85E,GAClBpnE,EAAS23D,GAASyP,EAAQkI,IAM9B,OAJA5X,EAAkC,mBAAdA,EAA2BA,EAAa/oE,IAE1DqR,EAAO7N,MAED6N,EAAO7T,QAAU6T,EAAO,KAAOonE,EAAO,GAC1CD,GAAiBnnE,EAAQrR,EAAW+oE,GACpC,MAoCN,SAASpqE,GAAKjE,GACZ,IAAI8C,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACvC,OAAOA,EAAS9C,EAAM8C,EAAS,GAAKwC,EAuFtC,IAAIopF,GAAOnL,GAASoL,IAsBpB,SAASA,GAAQ3uF,EAAOilB,GACtB,OAAQjlB,GAASA,EAAM8C,QAAUmiB,GAAUA,EAAOniB,OAC9CogF,GAAYljF,EAAOilB,GACnBjlB,EAqFN,IAAI4uF,GAAS/F,IAAS,SAAS7oF,EAAOojF,GACpC,IAAItgF,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACnC6P,EAAS+lE,GAAO14E,EAAOojF,GAM3B,OAJAD,GAAWnjF,EAAOsuE,GAAS8U,GAAS,SAASzoE,GAC3C,OAAO88D,GAAQ98D,EAAO7X,IAAW6X,EAAQA,KACxClW,KAAKq+E,KAEDnwE,KA2ET,SAAS2I,GAAQtb,GACf,OAAgB,MAATA,EAAgBA,EAAQm0E,GAAcxzE,KAAKX,GAkapD,IAAI6uF,GAAQtL,IAAS,SAASxF,GAC5B,OAAOqH,GAAS7I,GAAYwB,EAAQ,EAAGiE,IAAmB,OA0BxD8M,GAAUvL,IAAS,SAASxF,GAC9B,IAAIrQ,EAAWzpE,GAAK85E,GAIpB,OAHIiE,GAAkBtU,KACpBA,EAAWpoE,GAEN8/E,GAAS7I,GAAYwB,EAAQ,EAAGiE,IAAmB,GAAOO,GAAY7U,EAAU,OAwBrFqhB,GAAYxL,IAAS,SAASxF,GAChC,IAAI1P,EAAapqE,GAAK85E,GAEtB,OADA1P,EAAkC,mBAAdA,EAA2BA,EAAa/oE,EACrD8/E,GAAS7I,GAAYwB,EAAQ,EAAGiE,IAAmB,GAAO18E,EAAW+oE,MAgG9E,SAAS2gB,GAAMhvF,GACb,IAAMA,IAASA,EAAM8C,OACnB,MAAO,GAET,IAAIA,EAAS,EAOb,OANA9C,EAAQguE,GAAYhuE,GAAO,SAASivF,GAClC,GAAIjN,GAAkBiN,GAEpB,OADAnsF,EAASgxE,GAAUmb,EAAMnsF,OAAQA,IAC1B,KAGJ2sE,GAAU3sE,GAAQ,SAAS6X,GAChC,OAAO2zD,GAAStuE,EAAO6uE,GAAal0D,OAyBxC,SAASu0E,GAAUlvF,EAAO0tE,GACxB,IAAM1tE,IAASA,EAAM8C,OACnB,MAAO,GAET,IAAI6P,EAASq8E,GAAMhvF,GACnB,OAAgB,MAAZ0tE,EACK/6D,EAEF27D,GAAS37D,GAAQ,SAASs8E,GAC/B,OAAO/uF,GAAMwtE,EAAUpoE,EAAW2pF,MAwBtC,IAAIE,GAAU5L,IAAS,SAASvjF,EAAOilB,GACrC,OAAO+8D,GAAkBhiF,GACrBi7E,GAAej7E,EAAOilB,GACtB,MAqBFmqE,GAAM7L,IAAS,SAASxF,GAC1B,OAAO8H,GAAQ7X,GAAY+P,EAAQiE,QA0BjCqN,GAAQ9L,IAAS,SAASxF,GAC5B,IAAIrQ,EAAWzpE,GAAK85E,GAIpB,OAHIiE,GAAkBtU,KACpBA,EAAWpoE,GAENugF,GAAQ7X,GAAY+P,EAAQiE,IAAoBO,GAAY7U,EAAU,OAwB3E4hB,GAAU/L,IAAS,SAASxF,GAC9B,IAAI1P,EAAapqE,GAAK85E,GAEtB,OADA1P,EAAkC,mBAAdA,EAA2BA,EAAa/oE,EACrDugF,GAAQ7X,GAAY+P,EAAQiE,IAAoB18E,EAAW+oE,MAmBhEkhB,GAAMhM,GAASyL,IA6DnB,IAAIQ,GAAUjM,IAAS,SAASxF,GAC9B,IAAIj7E,EAASi7E,EAAOj7E,OAChB4qE,EAAW5qE,EAAS,EAAIi7E,EAAOj7E,EAAS,GAAKwC,EAGjD,OADAooE,EAA8B,mBAAZA,GAA0BqQ,EAAOj1E,MAAO4kE,GAAYpoE,EAC/D4pF,GAAUnR,EAAQrQ,MAkC3B,SAAS+hB,GAAM9oF,GACb,IAAIgM,EAAS0iE,GAAO1uE,GAEpB,OADAgM,EAAOqjE,WAAY,EACZrjE,EAsDT,SAASq2E,GAAKriF,EAAO+oF,GACnB,OAAOA,EAAY/oF,GAmBrB,IAAIgpF,GAAY9G,IAAS,SAASlQ,GAChC,IAAI71E,EAAS61E,EAAM71E,OACfwQ,EAAQxQ,EAAS61E,EAAM,GAAK,EAC5BhyE,EAAQnH,KAAKs2E,YACb4Z,EAAc,SAASrzE,GAAU,OAAOq8D,GAAOr8D,EAAQs8D,IAE3D,QAAI71E,EAAS,GAAKtD,KAAKu2E,YAAYjzE,SAC7B6D,aAAiB4uE,IAAiBkC,GAAQnkE,KAGhD3M,EAAQA,EAAM7G,MAAMwT,GAAQA,GAASxQ,EAAS,EAAI,KAC5CizE,YAAY51E,KAAK,CACrBod,KAAQyrE,GACRp1E,KAAQ,CAAC87E,GACTliB,QAAWloE,IAEN,IAAIkwE,GAAc7uE,EAAOnH,KAAKw2E,WAAWgT,MAAK,SAAShpF,GAI5D,OAHI8C,IAAW9C,EAAM8C,QACnB9C,EAAMG,KAAKmF,GAENtF,MAZAR,KAAKwpF,KAAK0G,MA+PrB,IAAIE,GAAUlI,IAAiB,SAAS/0E,EAAQhM,EAAOgH,GACjDnN,GAAeG,KAAKgS,EAAQhF,KAC5BgF,EAAOhF,GAETuqE,GAAgBvlE,EAAQhF,EAAK,MAuIjC,IAAIqC,GAAO04E,GAAWp1C,IAqBlBu8C,GAAWnH,GAAW4F,IA2G1B,SAAS/6C,GAAQ3kB,EAAY8+C,GAE3B,OADWroE,GAAQupB,GAAcg/C,GAAY2K,IACjC3pD,EAAY2zD,GAAY7U,EAAU,IAuBhD,SAASoiB,GAAalhE,EAAY8+C,GAEhC,OADWroE,GAAQupB,GAAci/C,GAAiBoO,IACtCrtD,EAAY2zD,GAAY7U,EAAU,IA0BhD,IAAIqiB,GAAUrI,IAAiB,SAAS/0E,EAAQhM,EAAOgH,GACjDnN,GAAeG,KAAKgS,EAAQhF,GAC9BgF,EAAOhF,GAAKxN,KAAKwG,GAEjBuxE,GAAgBvlE,EAAQhF,EAAK,CAAChH,OAsElC,IAAIqpF,GAAYzM,IAAS,SAAS30D,EAAYmuD,EAAMnpE,GAClD,IAAI+G,GAAS,EACT4+D,EAAwB,mBAARwD,EAChBpqE,EAAS9P,GAAY+rB,GAAcxpB,GAAMwpB,EAAW9rB,QAAU,GAKlE,OAHAy1E,GAAS3pD,GAAY,SAASjoB,GAC5BgM,IAASgI,GAAS4+D,EAASr5E,GAAM68E,EAAMp2E,EAAOiN,GAAQ0qE,GAAW33E,EAAOo2E,EAAMnpE,MAEzEjB,KA+BLs9E,GAAQvI,IAAiB,SAAS/0E,EAAQhM,EAAOgH,GACnDuqE,GAAgBvlE,EAAQhF,EAAKhH,MA6C/B,SAAS/C,GAAIgrB,EAAY8+C,GAEvB,OADWroE,GAAQupB,GAAc0/C,GAAW8S,IAChCxyD,EAAY2zD,GAAY7U,EAAU,IAkFhD,IAAIwiB,GAAYxI,IAAiB,SAAS/0E,EAAQhM,EAAOgH,GACvDgF,EAAOhF,EAAM,EAAI,GAAGxN,KAAKwG,MACxB,WAAa,MAAO,CAAC,GAAI,OAmS5B,IAAIwpF,GAAS5M,IAAS,SAAS30D,EAAYyzD,GACzC,GAAkB,MAAdzzD,EACF,MAAO,GAET,IAAI9rB,EAASu/E,EAAUv/E,OAMvB,OALIA,EAAS,GAAKklF,GAAep5D,EAAYyzD,EAAU,GAAIA,EAAU,IACnEA,EAAY,GACHv/E,EAAS,GAAKklF,GAAe3F,EAAU,GAAIA,EAAU,GAAIA,EAAU,MAC5EA,EAAY,CAACA,EAAU,KAElBD,GAAYxzD,EAAY2tD,GAAY8F,EAAW,GAAI,OAqBxD12D,GAAMwnD,IAAU,WAClB,OAAO3+D,GAAKtM,KAAKyjB,OA0DnB,SAAS89D,GAAIlsE,EAAM9D,EAAGsuE,GAGpB,OAFAtuE,EAAIsuE,EAAQziF,EAAYmU,EACxBA,EAAK8D,GAAa,MAAL9D,EAAa8D,EAAKza,OAAS2W,EACjCmyE,GAAWruE,EAAM6nD,EAAe9/D,EAAWA,EAAWA,EAAWA,EAAWmU,GAoBrF,SAASoW,GAAOpW,EAAG8D,GACjB,IAAI5K,EACJ,GAAmB,mBAAR4K,EACT,MAAM,IAAIqB,GAAUkmD,GAGtB,OADArrD,EAAI+xE,GAAU/xE,GACP,WAOL,QANMA,EAAI,IACR9G,EAAS4K,EAAKrd,MAAMV,KAAMsE,YAExB2V,GAAK,IACP8D,EAAOjY,GAEFqN,GAuCX,IAAI6nB,GAAO+oD,IAAS,SAAShmE,EAAMiwD,EAASmZ,GAC1C,IAAI3N,EAv4Ta,EAw4TjB,GAAI2N,EAAS7jF,OAAQ,CACnB,IAAI8jF,EAAU/V,GAAe8V,EAAUoD,GAAUvvD,KACjDw+C,GAAW9T,EAEb,OAAO0mB,GAAWruE,EAAMy7D,EAASxL,EAASmZ,EAAUC,MAgDlDwJ,GAAU7M,IAAS,SAASlnE,EAAQ1O,EAAKg5E,GAC3C,IAAI3N,EAAUqX,EACd,GAAI1J,EAAS7jF,OAAQ,CACnB,IAAI8jF,EAAU/V,GAAe8V,EAAUoD,GAAUqG,KACjDpX,GAAW9T,EAEb,OAAO0mB,GAAWj+E,EAAKqrE,EAAS38D,EAAQsqE,EAAUC,MAsJpD,SAAS96C,GAASvuB,EAAMgD,EAAM3b,GAC5B,IAAI0rF,EACAC,EACAC,EACA79E,EACA89E,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTzI,GAAW,EAEf,GAAmB,mBAAR7qE,EACT,MAAM,IAAIqB,GAAUkmD,GAUtB,SAASgsB,EAAWl0D,GAClB,IAAIhpB,EAAO08E,EACP9iB,EAAU+iB,EAKd,OAHAD,EAAWC,EAAWjrF,EACtBqrF,EAAiB/zD,EACjBjqB,EAAS4K,EAAKrd,MAAMstE,EAAS55D,GAI/B,SAASm9E,EAAYn0D,GAMnB,OAJA+zD,EAAiB/zD,EAEjB6zD,EAAUrxE,GAAW4xE,EAAczwE,GAE5BqwE,EAAUE,EAAWl0D,GAAQjqB,EAatC,SAASs+E,EAAar0D,GACpB,IAAIs0D,EAAoBt0D,EAAO8zD,EAM/B,OAAQA,IAAiBprF,GAAc4rF,GAAqB3wE,GACzD2wE,EAAoB,GAAOL,GANJj0D,EAAO+zD,GAM8BH,EAGjE,SAASQ,IACP,IAAIp0D,EAAOjR,KACX,GAAIslE,EAAar0D,GACf,OAAOu0D,EAAav0D,GAGtB6zD,EAAUrxE,GAAW4xE,EA3BvB,SAAuBp0D,GACrB,IAEIw0D,EAAc7wE,GAFMqc,EAAO8zD,GAI/B,OAAOG,EACH9c,GAAUqd,EAAaZ,GAJD5zD,EAAO+zD,IAK7BS,EAoB+BC,CAAcz0D,IAGnD,SAASu0D,EAAav0D,GAKpB,OAJA6zD,EAAUnrF,EAIN8iF,GAAYkI,EACPQ,EAAWl0D,IAEpB0zD,EAAWC,EAAWjrF,EACfqN,GAeT,SAAS2+E,IACP,IAAI10D,EAAOjR,KACP4lE,EAAaN,EAAar0D,GAM9B,GAJA0zD,EAAWxsF,UACXysF,EAAW/wF,KACXkxF,EAAe9zD,EAEX20D,EAAY,CACd,GAAId,IAAYnrF,EACd,OAAOyrF,EAAYL,GAErB,GAAIG,EAIF,OAFA/zD,GAAa2zD,GACbA,EAAUrxE,GAAW4xE,EAAczwE,GAC5BuwE,EAAWJ,GAMtB,OAHID,IAAYnrF,IACdmrF,EAAUrxE,GAAW4xE,EAAczwE,IAE9B5N,EAIT,OA3GA4N,EAAOyqE,GAASzqE,IAAS,EACrBo1D,GAAS/wE,KACXgsF,IAAYhsF,EAAQgsF,QAEpBJ,GADAK,EAAS,YAAajsF,GACHkvE,GAAUkX,GAASpmF,EAAQ4rF,UAAY,EAAGjwE,GAAQiwE,EACrEpI,EAAW,aAAcxjF,IAAYA,EAAQwjF,SAAWA,GAoG1DkJ,EAAUE,OApCV,WACMf,IAAYnrF,GACdw3B,GAAa2zD,GAEfE,EAAiB,EACjBL,EAAWI,EAAeH,EAAWE,EAAUnrF,GAgCjDgsF,EAAUG,MA7BV,WACE,OAAOhB,IAAYnrF,EAAYqN,EAASw+E,EAAaxlE,OA6BhD2lE,EAqBT,IAAIjuE,GAAQkgE,IAAS,SAAShmE,EAAM3J,GAClC,OAAOonE,GAAUz9D,EAAM,EAAG3J,MAsBxB+oB,GAAQ4mD,IAAS,SAAShmE,EAAMgD,EAAM3M,GACxC,OAAOonE,GAAUz9D,EAAMytE,GAASzqE,IAAS,EAAG3M,MAqE9C,SAASm6E,GAAQxwE,EAAMm0E,GACrB,GAAmB,mBAARn0E,GAAmC,MAAZm0E,GAAuC,mBAAZA,EAC3D,MAAM,IAAI9yE,GAAUkmD,GAEtB,IAAI6sB,EAAW,WACb,IAAI/9E,EAAO9P,UACP6J,EAAM+jF,EAAWA,EAASxxF,MAAMV,KAAMoU,GAAQA,EAAK,GACnDlG,EAAQikF,EAASjkF,MAErB,GAAIA,EAAMyG,IAAIxG,GACZ,OAAOD,EAAMvK,IAAIwK,GAEnB,IAAIgF,EAAS4K,EAAKrd,MAAMV,KAAMoU,GAE9B,OADA+9E,EAASjkF,MAAQA,EAAMoU,IAAInU,EAAKgF,IAAWjF,EACpCiF,GAGT,OADAg/E,EAASjkF,MAAQ,IAAKqgF,GAAQ6D,OAAS/a,IAChC8a,EA0BT,SAASE,GAAO9jB,GACd,GAAwB,mBAAbA,EACT,MAAM,IAAInvD,GAAUkmD,GAEtB,OAAO,WACL,IAAIlxD,EAAO9P,UACX,OAAQ8P,EAAK9Q,QACX,KAAK,EAAG,OAAQirE,EAAUptE,KAAKnB,MAC/B,KAAK,EAAG,OAAQuuE,EAAUptE,KAAKnB,KAAMoU,EAAK,IAC1C,KAAK,EAAG,OAAQm6D,EAAUptE,KAAKnB,KAAMoU,EAAK,GAAIA,EAAK,IACnD,KAAK,EAAG,OAAQm6D,EAAUptE,KAAKnB,KAAMoU,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAE9D,OAAQm6D,EAAU7tE,MAAMV,KAAMoU,IAlClCm6E,GAAQ6D,MAAQ/a,GA2FhB,IAAIib,GAAW1L,IAAS,SAAS7oE,EAAMw0E,GAKrC,IAAIC,GAJJD,EAAmC,GAArBA,EAAWjvF,QAAeuC,GAAQ0sF,EAAW,IACvDzjB,GAASyjB,EAAW,GAAIniB,GAAU2S,OAClCjU,GAASiO,GAAYwV,EAAY,GAAIniB,GAAU2S,QAEtBz/E,OAC7B,OAAOygF,IAAS,SAAS3vE,GAIvB,IAHA,IAAI+G,GAAS,EACT7X,EAASixE,GAAUngE,EAAK9Q,OAAQkvF,KAE3Br3E,EAAQ7X,GACf8Q,EAAK+G,GAASo3E,EAAWp3E,GAAOha,KAAKnB,KAAMoU,EAAK+G,IAElD,OAAOza,GAAMqd,EAAM/d,KAAMoU,SAqCzBq+E,GAAU1O,IAAS,SAAShmE,EAAMopE,GACpC,IAAIC,EAAU/V,GAAe8V,EAAUoD,GAAUkI,KACjD,OAAOrG,GAAWruE,EAAM2nD,EAAmB5/D,EAAWqhF,EAAUC,MAmC9DsL,GAAe3O,IAAS,SAAShmE,EAAMopE,GACzC,IAAIC,EAAU/V,GAAe8V,EAAUoD,GAAUmI,KACjD,OAAOtG,GAAWruE,EAAM4nD,EAAyB7/D,EAAWqhF,EAAUC,MAyBpEuL,GAAQtJ,IAAS,SAAStrE,EAAM6lE,GAClC,OAAOwI,GAAWruE,EAAM8nD,EAAiB//D,EAAWA,EAAWA,EAAW89E,MAia5E,SAASp/E,GAAG2C,EAAOg3E,GACjB,OAAOh3E,IAAUg3E,GAAUh3E,GAAUA,GAASg3E,GAAUA,EA0B1D,IAAIpoE,GAAKw1E,GAA0BrN,IAyB/B0U,GAAMrH,IAA0B,SAASpkF,EAAOg3E,GAClD,OAAOh3E,GAASg3E,KAqBdtG,GAAckH,GAAgB,WAAa,OAAOz6E,UAApB,IAAsCy6E,GAAkB,SAAS53E,GACjG,OAAO2uE,GAAa3uE,IAAUnG,GAAeG,KAAKgG,EAAO,YACtDgsE,GAAqBhyE,KAAKgG,EAAO,WA0BlCtB,GAAUD,GAAMC,QAmBhBwnE,GAAgBD,GAAoBgD,GAAUhD,IA75PlD,SAA2BjmE,GACzB,OAAO2uE,GAAa3uE,IAAU02E,GAAW12E,IAAUggE,GAu7PrD,SAAS9jE,GAAY8D,GACnB,OAAgB,MAATA,GAAiBqmF,GAASrmF,EAAM7D,UAAYjC,GAAW8F,GA4BhE,SAASq7E,GAAkBr7E,GACzB,OAAO2uE,GAAa3uE,IAAU9D,GAAY8D,GA0C5C,IAAI+sE,GAAWD,IAAkB2Z,GAmB7BrgB,GAASD,GAAa8C,GAAU9C,IAxgQpC,SAAoBnmE,GAClB,OAAO2uE,GAAa3uE,IAAU02E,GAAW12E,IAAUm/D,GA+qQrD,SAASusB,GAAQ1rF,GACf,IAAK2uE,GAAa3uE,GAChB,OAAO,EAET,IAAIuJ,EAAMmtE,GAAW12E,GACrB,OAAOuJ,GAAO61D,GA9yWF,yBA8yWc71D,GACC,iBAAjBvJ,EAAMsZ,SAA4C,iBAAdtZ,EAAM9B,OAAqBM,GAAcwB,GAkDzF,SAAS9F,GAAW8F,GAClB,IAAKgvE,GAAShvE,GACZ,OAAO,EAIT,IAAIuJ,EAAMmtE,GAAW12E,GACrB,OAAOuJ,GAAO81D,GAAW91D,GAAO+1D,GA32WrB,0BA22W+B/1D,GA/1W/B,kBA+1WkDA,EA6B/D,SAASoiF,GAAU3rF,GACjB,MAAuB,iBAATA,GAAqBA,GAAS6kF,GAAU7kF,GA6BxD,SAASqmF,GAASrmF,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GAAS4+D,EA4B7C,SAASoQ,GAAShvE,GAChB,IAAIxF,SAAcwF,EAClB,OAAgB,MAATA,IAA0B,UAARxF,GAA4B,YAARA,GA2B/C,SAASm0E,GAAa3uE,GACpB,OAAgB,MAATA,GAAiC,iBAATA,EAoBjC,IAAIsmE,GAAQD,GAAY4C,GAAU5C,IA5xQlC,SAAmBrmE,GACjB,OAAO2uE,GAAa3uE,IAAU2yE,GAAO3yE,IAAUu/D,GA6+QjD,SAASqsB,GAAS5rF,GAChB,MAAuB,iBAATA,GACX2uE,GAAa3uE,IAAU02E,GAAW12E,IAAUw/D,EA+BjD,SAAShhE,GAAcwB,GACrB,IAAK2uE,GAAa3uE,IAAU02E,GAAW12E,IAAUy/D,EAC/C,OAAO,EAET,IAAIrgE,EAAQ0sE,GAAa9rE,GACzB,GAAc,OAAVZ,EACF,OAAO,EAET,IAAIC,EAAOxF,GAAeG,KAAKoF,EAAO,gBAAkBA,EAAM9C,YAC9D,MAAsB,mBAAR+C,GAAsBA,aAAgBA,GAClD8rE,GAAanxE,KAAKqF,IAASmsE,GAoB/B,IAAIhF,GAAWD,GAAe0C,GAAU1C,IA59QxC,SAAsBvmE,GACpB,OAAO2uE,GAAa3uE,IAAU02E,GAAW12E,IAAU2/D,GA6gRrD,IAAI+G,GAAQD,GAAYwC,GAAUxC,IAngRlC,SAAmBzmE,GACjB,OAAO2uE,GAAa3uE,IAAU2yE,GAAO3yE,IAAU4/D,GAqhRjD,SAASisB,GAAS7rF,GAChB,MAAuB,iBAATA,IACVtB,GAAQsB,IAAU2uE,GAAa3uE,IAAU02E,GAAW12E,IAAU6/D,EAoBpE,SAAS6V,GAAS11E,GAChB,MAAuB,iBAATA,GACX2uE,GAAa3uE,IAAU02E,GAAW12E,IAAU8/D,EAoBjD,IAAI8G,GAAeD,GAAmBsC,GAAUtC,IAvjRhD,SAA0B3mE,GACxB,OAAO2uE,GAAa3uE,IAClBqmF,GAASrmF,EAAM7D,WAAa+oE,GAAewR,GAAW12E,KA6oR1D,IAAI2O,GAAKy1E,GAA0B5J,IAyB/BsR,GAAM1H,IAA0B,SAASpkF,EAAOg3E,GAClD,OAAOh3E,GAASg3E,KA0BlB,SAASz6E,GAAQyD,GACf,IAAKA,EACH,MAAO,GAET,GAAI9D,GAAY8D,GACd,OAAO6rF,GAAS7rF,GAASwqE,GAAcxqE,GAASmxE,GAAUnxE,GAE5D,GAAImsE,IAAensE,EAAMmsE,IACvB,OAv8VN,SAAyBhsE,GAIvB,IAHA,IAAIib,EACApP,EAAS,KAEJoP,EAAOjb,EAASiF,QAAQ1D,MAC/BsK,EAAOxS,KAAK4hB,EAAKpb,OAEnB,OAAOgM,EAg8VI+/E,CAAgB/rF,EAAMmsE,OAE/B,IAAI5iE,EAAMopE,GAAO3yE,GAGjB,OAFWuJ,GAAOg2D,EAASwK,GAAcxgE,GAAOq2D,EAASuK,GAAa7rD,IAE1Dte,GA0Bd,SAASkkF,GAASlkF,GAChB,OAAKA,GAGLA,EAAQqkF,GAASrkF,MACH2+D,GAAY3+D,KAAU,EAAA,EAxkYtB,uBAykYAA,EAAQ,GAAK,EAAI,GAGxBA,GAAUA,EAAQA,EAAQ,EAPd,IAAVA,EAAcA,EAAQ,EAoCjC,SAAS6kF,GAAU7kF,GACjB,IAAIgM,EAASk4E,GAASlkF,GAClBgsF,EAAYhgF,EAAS,EAEzB,OAAOA,GAAWA,EAAUggF,EAAYhgF,EAASggF,EAAYhgF,EAAU,EA8BzE,SAASigF,GAASjsF,GAChB,OAAOA,EAAQoxE,GAAUyT,GAAU7kF,GAAQ,EAAG8+D,GAAoB,EA0BpE,SAASulB,GAASrkF,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAI01E,GAAS11E,GACX,OAAO6+D,EAET,GAAImQ,GAAShvE,GAAQ,CACnB,IAAIg3E,EAAgC,mBAAjBh3E,EAAMwuE,QAAwBxuE,EAAMwuE,UAAYxuE,EACnEA,EAAQgvE,GAASgI,GAAUA,EAAQ,GAAMA,EAE3C,GAAoB,iBAATh3E,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQ+oE,GAAS/oE,GACjB,IAAIksF,EAAW7pB,GAAW/7D,KAAKtG,GAC/B,OAAQksF,GAAY3pB,GAAUj8D,KAAKtG,GAC/BslE,GAAatlE,EAAM7G,MAAM,GAAI+yF,EAAW,EAAI,GAC3C9pB,GAAW97D,KAAKtG,GAAS6+D,GAAO7+D,EA2BvC,SAASs7E,GAAct7E,GACrB,OAAO8xE,GAAW9xE,EAAOizE,GAAOjzE,IAsDlC,SAASrG,GAASqG,GAChB,OAAgB,MAATA,EAAgB,GAAKw+E,GAAax+E,GAqC3C,IAAI4oC,GAASq4C,IAAe,SAASvrE,EAAQkH,GAC3C,GAAIw9D,GAAYx9D,IAAW1gB,GAAY0gB,GACrCk1D,GAAWl1D,EAAQ9V,GAAK8V,GAASlH,QAGnC,IAAK,IAAI1O,KAAO4V,EACV/iB,GAAeG,KAAK4iB,EAAQ5V,IAC9BwqE,GAAY97D,EAAQ1O,EAAK4V,EAAO5V,OAoClCmlF,GAAWlL,IAAe,SAASvrE,EAAQkH,GAC7Ck1D,GAAWl1D,EAAQq2D,GAAOr2D,GAASlH,MAgCjC02E,GAAenL,IAAe,SAASvrE,EAAQkH,EAAQo+D,EAAU1I,GACnER,GAAWl1D,EAAQq2D,GAAOr2D,GAASlH,EAAQ48D,MA+BzC+Z,GAAapL,IAAe,SAASvrE,EAAQkH,EAAQo+D,EAAU1I,GACjER,GAAWl1D,EAAQ9V,GAAK8V,GAASlH,EAAQ48D,MAoBvCga,GAAKpK,GAASnQ,IA8DlB,IAAIlH,GAAW+R,IAAS,SAASlnE,EAAQyrE,GACvCzrE,EAASzc,GAAOyc,GAEhB,IAAI1B,GAAS,EACT7X,EAASglF,EAAQhlF,OACjBilF,EAAQjlF,EAAS,EAAIglF,EAAQ,GAAKxiF,EAMtC,IAJIyiF,GAASC,GAAeF,EAAQ,GAAIA,EAAQ,GAAIC,KAClDjlF,EAAS,KAGF6X,EAAQ7X,GAMf,IALA,IAAIygB,EAASukE,EAAQntE,GACjB2Q,EAAQsuD,GAAOr2D,GACf2vE,GAAc,EACdC,EAAc7nE,EAAMxoB,SAEfowF,EAAaC,GAAa,CACjC,IAAIxlF,EAAM2d,EAAM4nE,GACZvsF,EAAQ0V,EAAO1O,IAEfhH,IAAUrB,GACTtB,GAAG2C,EAAOirE,GAAYjkE,MAAUnN,GAAeG,KAAK0b,EAAQ1O,MAC/D0O,EAAO1O,GAAO4V,EAAO5V,IAK3B,OAAO0O,KAsBL+2E,GAAe7P,IAAS,SAAS3vE,GAEnC,OADAA,EAAKzT,KAAKmF,EAAW+mF,IACdnsF,GAAMmzF,GAAW/tF,EAAWsO,MAgSrC,SAASzQ,GAAIkZ,EAAQ0gE,EAAM9jE,GACzB,IAAItG,EAAmB,MAAV0J,EAAiB/W,EAAYw3E,GAAQzgE,EAAQ0gE,GAC1D,OAAOpqE,IAAWrN,EAAY2T,EAAetG,EA4D/C,SAAS8uE,GAAMplE,EAAQ0gE,GACrB,OAAiB,MAAV1gE,GAAkBywE,GAAQzwE,EAAQ0gE,EAAMc,IAqBjD,IAAIt3E,GAAS6jF,IAAe,SAASz3E,EAAQhM,EAAOgH,GACrC,MAAThH,GACyB,mBAAlBA,EAAMrG,WACfqG,EAAQurE,GAAqBvxE,KAAKgG,IAGpCgM,EAAOhM,GAASgH,IACfo2E,GAASpD,KA4BR2S,GAAWlJ,IAAe,SAASz3E,EAAQhM,EAAOgH,GACvC,MAAThH,GACyB,mBAAlBA,EAAMrG,WACfqG,EAAQurE,GAAqBvxE,KAAKgG,IAGhCnG,GAAeG,KAAKgS,EAAQhM,GAC9BgM,EAAOhM,GAAOxG,KAAKwN,GAEnBgF,EAAOhM,GAAS,CAACgH,KAElB40E,IAoBCgR,GAAShQ,GAASjF,IA8BtB,SAAS7wE,GAAK4O,GACZ,OAAOxZ,GAAYwZ,GAAU46D,GAAc56D,GAAUykE,GAASzkE,GA0BhE,SAASu9D,GAAOv9D,GACd,OAAOxZ,GAAYwZ,GAAU46D,GAAc56D,GAAQ,GAAQ2kE,GAAW3kE,GAuGxE,IAAI7Y,GAAQokF,IAAe,SAASvrE,EAAQkH,EAAQo+D,GAClDD,GAAUrlE,EAAQkH,EAAQo+D,MAkCxB0R,GAAYzL,IAAe,SAASvrE,EAAQkH,EAAQo+D,EAAU1I,GAChEyI,GAAUrlE,EAAQkH,EAAQo+D,EAAU1I,MAuBlCua,GAAO3K,IAAS,SAASxsE,EAAQs8D,GACnC,IAAIhmE,EAAS,GACb,GAAc,MAAV0J,EACF,OAAO1J,EAET,IAAIumE,GAAS,EACbP,EAAQrK,GAASqK,GAAO,SAASoE,GAG/B,OAFAA,EAAOC,GAASD,EAAM1gE,GACtB68D,IAAWA,EAAS6D,EAAKj6E,OAAS,GAC3Bi6E,KAETtE,GAAWp8D,EAAQw+D,GAAax+D,GAAS1J,GACrCumE,IACFvmE,EAASomE,GAAUpmE,EAAQ8gF,EAAwDnH,KAGrF,IADA,IAAIxpF,EAAS61E,EAAM71E,OACZA,KACLugF,GAAU1wE,EAAQgmE,EAAM71E,IAE1B,OAAO6P,KA4CT,IAAI8+D,GAAOoX,IAAS,SAASxsE,EAAQs8D,GACnC,OAAiB,MAAVt8D,EAAiB,GAnmT1B,SAAkBA,EAAQs8D,GACxB,OAAOqK,GAAW3mE,EAAQs8D,GAAO,SAAShyE,EAAOo2E,GAC/C,OAAO0E,GAAMplE,EAAQ0gE,MAimTM2W,CAASr3E,EAAQs8D,MAqBhD,SAASgb,GAAOt3E,EAAQ0xD,GACtB,GAAc,MAAV1xD,EACF,MAAO,GAET,IAAIiP,EAAQgjD,GAASuM,GAAax+D,IAAS,SAAS2F,GAClD,MAAO,CAACA,MAGV,OADA+rD,EAAYwU,GAAYxU,GACjBiV,GAAW3mE,EAAQiP,GAAO,SAAS3kB,EAAOo2E,GAC/C,OAAOhP,EAAUpnE,EAAOo2E,EAAK,OA4IjC,IAAI6W,GAAUlI,GAAcj+E,IA0BxBomF,GAAYnI,GAAc9R,IA4K9B,SAAS30D,GAAO5I,GACd,OAAiB,MAAVA,EAAiB,GAAKwzD,GAAWxzD,EAAQ5O,GAAK4O,IAkNvD,IAAIiF,GAAY+mE,IAAiB,SAAS11E,EAAQmhF,EAAMn5E,GAEtD,OADAm5E,EAAOA,EAAK7sF,cACL0L,GAAUgI,EAAQo5E,GAAWD,GAAQA,MAkB9C,SAASC,GAAWxyE,GAClB,OAAOyyE,GAAW1zF,GAASihB,GAAQta,eAqBrC,SAASshF,GAAOhnE,GAEd,OADAA,EAASjhB,GAASihB,KACDA,EAAO7b,QAAQ0jE,GAASiH,IAAc3qE,QAAQ4lE,GAAa,IAsH9E,IAAI2oB,GAAY5L,IAAiB,SAAS11E,EAAQmhF,EAAMn5E,GACtD,OAAOhI,GAAUgI,EAAQ,IAAM,IAAMm5E,EAAK7sF,iBAuBxCitF,GAAY7L,IAAiB,SAAS11E,EAAQmhF,EAAMn5E,GACtD,OAAOhI,GAAUgI,EAAQ,IAAM,IAAMm5E,EAAK7sF,iBAoBxCktF,GAAajM,GAAgB,eA0NjC,IAAIkM,GAAY/L,IAAiB,SAAS11E,EAAQmhF,EAAMn5E,GACtD,OAAOhI,GAAUgI,EAAQ,IAAM,IAAMm5E,EAAK7sF,iBAgE5C,IAAIotF,GAAYhM,IAAiB,SAAS11E,EAAQmhF,EAAMn5E,GACtD,OAAOhI,GAAUgI,EAAQ,IAAM,IAAMq5E,GAAWF,MAsiBlD,IAAIQ,GAAYjM,IAAiB,SAAS11E,EAAQmhF,EAAMn5E,GACtD,OAAOhI,GAAUgI,EAAQ,IAAM,IAAMm5E,EAAKzyE,iBAoBxC2yE,GAAa9L,GAAgB,eAqBjC,SAASI,GAAM/mE,EAAQ/O,EAASu1E,GAI9B,OAHAxmE,EAASjhB,GAASihB,IAClB/O,EAAUu1E,EAAQziF,EAAYkN,KAEdlN,EArybpB,SAAwBic,GACtB,OAAOmqD,GAAiBz+D,KAAKsU,GAqyblBgzE,CAAehzE,GA1jb5B,SAAsBA,GACpB,OAAOA,EAAOjV,MAAMk/D,KAAkB,GAyjbFgpB,CAAajzE,GAzrcnD,SAAoBA,GAClB,OAAOA,EAAOjV,MAAMo8D,KAAgB,GAwrcuB+rB,CAAWlzE,GAE7DA,EAAOjV,MAAMkG,IAAY,GA2BlC,IAAIkiF,GAAUnR,IAAS,SAAShmE,EAAM3J,GACpC,IACE,OAAO1T,GAAMqd,EAAMjY,EAAWsO,GAC9B,MAAO3H,GACP,OAAOomF,GAAQpmF,GAAKA,EAAI,IAAI3M,GAAM2M,OA8BlC0oF,GAAU9L,IAAS,SAASxsE,EAAQu4E,GAKtC,OAJAhnB,GAAUgnB,GAAa,SAASjnF,GAC9BA,EAAMsvE,GAAMtvE,GACZuqE,GAAgB77D,EAAQ1O,EAAK6sB,GAAKne,EAAO1O,GAAM0O,OAE1CA,KAqGT,SAAS0nE,GAASp9E,GAChB,OAAO,WACL,OAAOA,GAkDX,IAAIkuF,GAAOjM,KAuBPkM,GAAYlM,IAAW,GAkB3B,SAASjI,GAASh6E,GAChB,OAAOA,EA6CT,SAAS+mE,GAASnwD,GAChB,OAAOmjE,GAA4B,mBAARnjE,EAAqBA,EAAOw7D,GAAUx7D,EAjte/C,IAwzepB,IAAIvB,GAASunE,IAAS,SAASxG,EAAMnpE,GACnC,OAAO,SAASyI,GACd,OAAOiiE,GAAWjiE,EAAQ0gE,EAAMnpE,OA2BhCmhF,GAAWxR,IAAS,SAASlnE,EAAQzI,GACvC,OAAO,SAASmpE,GACd,OAAOuB,GAAWjiE,EAAQ0gE,EAAMnpE,OAwCpC,SAASohF,GAAM34E,EAAQkH,EAAQ3e,GAC7B,IAAI0mB,EAAQ7d,GAAK8V,GACbqxE,EAAc/X,GAAct5D,EAAQ+H,GAEzB,MAAX1mB,GACE+wE,GAASpyD,KAAYqxE,EAAY9xF,SAAWwoB,EAAMxoB,UACtD8B,EAAU2e,EACVA,EAASlH,EACTA,EAAS7c,KACTo1F,EAAc/X,GAAct5D,EAAQ9V,GAAK8V,KAE3C,IAAIksE,IAAU9Z,GAAS/wE,IAAY,UAAWA,IAAcA,EAAQ6qF,OAChElW,EAAS14E,GAAWwb,GAqBxB,OAnBAuxD,GAAUgnB,GAAa,SAASzM,GAC9B,IAAI5qE,EAAOgG,EAAO4kE,GAClB9rE,EAAO8rE,GAAc5qE,EACjBg8D,IACFl9D,EAAOtZ,UAAUolF,GAAc,WAC7B,IAAItS,EAAWr2E,KAAKw2E,UACpB,GAAIyZ,GAAS5Z,EAAU,CACrB,IAAIljE,EAAS0J,EAAO7c,KAAKs2E,aACrB8P,EAAUjzE,EAAOojE,YAAc+B,GAAUt4E,KAAKu2E,aAIlD,OAFA6P,EAAQzlF,KAAK,CAAEod,KAAQA,EAAM3J,KAAQ9P,UAAW0pE,QAAWnxD,IAC3D1J,EAAOqjE,UAAYH,EACZljE,EAET,OAAO4K,EAAKrd,MAAMmc,EAAQkyD,GAAU,CAAC/uE,KAAKmH,SAAU7C,iBAKnDuY,EAmCT,SAASvW,MAiDT,IAAImvF,GAAOzK,GAAWlc,IA8BlB4mB,GAAY1K,GAAW1c,IAiCvBqnB,GAAW3K,GAAW7b,IAwB1B,SAAStiC,GAAS0wC,GAChB,OAAOwE,GAAMxE,GAAQlO,GAAaoO,GAAMF,IAh3X1C,SAA0BA,GACxB,OAAO,SAAS1gE,GACd,OAAOygE,GAAQzgE,EAAQ0gE,IA82XwBqY,CAAiBrY,GAuEpE,IAAIrvC,GAAQC,KAsCR0nD,GAAa1nD,IAAY,GAoB7B,SAASk/C,KACP,MAAO,GAgBT,SAASO,KACP,OAAO,EA+JT,IAAIvyE,GAAM0vE,IAAoB,SAAS+K,EAAQC,GAC7C,OAAOD,EAASC,IACf,GAuBCpgE,GAAOm2D,GAAY,QAiBnBkK,GAASjL,IAAoB,SAASkL,EAAUC,GAClD,OAAOD,EAAWC,IACjB,GAuBCr9C,GAAQizC,GAAY,SAwKxB,IAgaM/nE,GAhaFoyE,GAAWpL,IAAoB,SAASqL,EAAYC,GACtD,OAAOD,EAAaC,IACnB,GAuBCtjE,GAAQ+4D,GAAY,SAiBpB72D,GAAW81D,IAAoB,SAASuL,EAASC,GACnD,OAAOD,EAAUC,IAChB,GAgmBH,OA1iBA1gB,GAAOvlD,MAp6MP,SAAerW,EAAG8D,GAChB,GAAmB,mBAARA,EACT,MAAM,IAAIqB,GAAUkmD,GAGtB,OADArrD,EAAI+xE,GAAU/xE,GACP,WACL,KAAMA,EAAI,EACR,OAAO8D,EAAKrd,MAAMV,KAAMsE,aA85M9BuxE,GAAOoU,IAAMA,GACbpU,GAAO9lC,OAASA,GAChB8lC,GAAOyd,SAAWA,GAClBzd,GAAO0d,aAAeA,GACtB1d,GAAO2d,WAAaA,GACpB3d,GAAO4d,GAAKA,GACZ5d,GAAOxlD,OAASA,GAChBwlD,GAAO76C,KAAOA,GACd66C,GAAOsf,QAAUA,GACjBtf,GAAO+a,QAAUA,GACjB/a,GAAO2gB,UAl8KP,WACE,IAAKlyF,UAAUhB,OACb,MAAO,GAET,IAAI6D,EAAQ7C,UAAU,GACtB,OAAOuB,GAAQsB,GAASA,EAAQ,CAACA,IA87KnC0uE,GAAOoa,MAAQA,GACfpa,GAAO4gB,MApgTP,SAAej2F,EAAO2wE,EAAMoX,GAExBpX,GADGoX,EAAQC,GAAehoF,EAAO2wE,EAAMoX,GAASpX,IAASrrE,GAClD,EAEAwuE,GAAU0X,GAAU7a,GAAO,GAEpC,IAAI7tE,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACvC,IAAKA,GAAU6tE,EAAO,EACpB,MAAO,GAMT,IAJA,IAAIh2D,EAAQ,EACRszD,EAAW,EACXt7D,EAASvN,GAAMiuE,GAAWvwE,EAAS6tE,IAEhCh2D,EAAQ7X,GACb6P,EAAOs7D,KAAcgW,GAAUjkF,EAAO2a,EAAQA,GAASg2D,GAEzD,OAAOh+D,GAo/ST0iE,GAAO6gB,QAl+SP,SAAiBl2F,GAMf,IALA,IAAI2a,GAAS,EACT7X,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACnCmrE,EAAW,EACXt7D,EAAS,KAEJgI,EAAQ7X,GAAQ,CACvB,IAAI6D,EAAQ3G,EAAM2a,GACdhU,IACFgM,EAAOs7D,KAActnE,GAGzB,OAAOgM,GAu9ST0iE,GAAOp1E,OA97SP,WACE,IAAI6C,EAASgB,UAAUhB,OACvB,IAAKA,EACH,MAAO,GAMT,IAJA,IAAI8Q,EAAOxO,GAAMtC,EAAS,GACtB9C,EAAQ8D,UAAU,GAClB6W,EAAQ7X,EAEL6X,KACL/G,EAAK+G,EAAQ,GAAK7W,UAAU6W,GAE9B,OAAO4zD,GAAUlpE,GAAQrF,GAAS83E,GAAU93E,GAAS,CAACA,GAAQu8E,GAAY3oE,EAAM,KAm7SlFyhE,GAAO8gB,KA3tCP,SAActa,GACZ,IAAI/4E,EAAkB,MAAT+4E,EAAgB,EAAIA,EAAM/4E,OACnCunF,EAAa9H,KASjB,OAPA1G,EAAS/4E,EAAcwrE,GAASuN,GAAO,SAAS4P,GAC9C,GAAsB,mBAAXA,EAAK,GACd,MAAM,IAAI7sE,GAAUkmD,GAEtB,MAAO,CAACulB,EAAWoB,EAAK,IAAKA,EAAK,OAJlB,GAOXlI,IAAS,SAAS3vE,GAEvB,IADA,IAAI+G,GAAS,IACJA,EAAQ7X,GAAQ,CACvB,IAAI2oF,EAAO5P,EAAMlhE,GACjB,GAAIza,GAAMurF,EAAK,GAAIjsF,KAAMoU,GACvB,OAAO1T,GAAMurF,EAAK,GAAIjsF,KAAMoU,QA4sCpCyhE,GAAO+gB,SA9qCP,SAAkB7yE,GAChB,OAz5YF,SAAsBA,GACpB,IAAI+H,EAAQ7d,GAAK8V,GACjB,OAAO,SAASlH,GACd,OAAO0+D,GAAe1+D,EAAQkH,EAAQ+H,IAs5YjC+qE,CAAatd,GAAUx1D,EA/ieZ,KA6tgBpB8xD,GAAO0O,SAAWA,GAClB1O,GAAOua,QAAUA,GACjBva,GAAOhsD,OAtuHP,SAAgBtmB,EAAW62B,GACzB,IAAIjnB,EAAS+iE,GAAW3yE,GACxB,OAAqB,MAAd62B,EAAqBjnB,EAAS6lE,GAAW7lE,EAAQinB,IAquH1Dy7C,GAAOihB,MAzuMP,SAASA,EAAM/4E,EAAMmsE,EAAO3B,GAE1B,IAAIp1E,EAASi5E,GAAWruE,EA7+TN,EA6+T6BjY,EAAWA,EAAWA,EAAWA,EAAWA,EAD3FokF,EAAQ3B,EAAQziF,EAAYokF,GAG5B,OADA/2E,EAAOy9D,YAAckmB,EAAMlmB,YACpBz9D,GAsuMT0iE,GAAOkhB,WA7rMP,SAASA,EAAWh5E,EAAMmsE,EAAO3B,GAE/B,IAAIp1E,EAASi5E,GAAWruE,EAAM0nD,EAAuB3/D,EAAWA,EAAWA,EAAWA,EAAWA,EADjGokF,EAAQ3B,EAAQziF,EAAYokF,GAG5B,OADA/2E,EAAOy9D,YAAcmmB,EAAWnmB,YACzBz9D,GA0rMT0iE,GAAOvpC,SAAWA,GAClBupC,GAAO7D,SAAWA,GAClB6D,GAAO+d,aAAeA,GACtB/d,GAAOhyD,MAAQA,GACfgyD,GAAO14C,MAAQA,GACf04C,GAAO8Y,WAAaA,GACpB9Y,GAAO+Y,aAAeA,GACtB/Y,GAAOgZ,eAAiBA,GACxBhZ,GAAOmhB,KAt0SP,SAAcx2F,EAAOyZ,EAAGsuE,GACtB,IAAIjlF,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACvC,OAAKA,EAIEmhF,GAAUjkF,GADjByZ,EAAKsuE,GAAStuE,IAAMnU,EAAa,EAAIkmF,GAAU/xE,IACnB,EAAI,EAAIA,EAAG3W,GAH9B,IAo0SXuyE,GAAOohB,UArySP,SAAmBz2F,EAAOyZ,EAAGsuE,GAC3B,IAAIjlF,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACvC,OAAKA,EAKEmhF,GAAUjkF,EAAO,GADxByZ,EAAI3W,GADJ2W,EAAKsuE,GAAStuE,IAAMnU,EAAa,EAAIkmF,GAAU/xE,KAEhB,EAAI,EAAIA,GAJ9B,IAmySX47D,GAAOqhB,eAzvSP,SAAwB12F,EAAO+tE,GAC7B,OAAQ/tE,GAASA,EAAM8C,OACnB2iF,GAAUzlF,EAAOuiF,GAAYxU,EAAW,IAAI,GAAM,GAClD,IAuvSNsH,GAAOshB,UAjtSP,SAAmB32F,EAAO+tE,GACxB,OAAQ/tE,GAASA,EAAM8C,OACnB2iF,GAAUzlF,EAAOuiF,GAAYxU,EAAW,IAAI,GAC5C,IA+sSNsH,GAAOuhB,KA/qSP,SAAc52F,EAAO2G,EAAO2M,EAAO9O,GACjC,IAAI1B,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACvC,OAAKA,GAGDwQ,GAAyB,iBAATA,GAAqB00E,GAAehoF,EAAO2G,EAAO2M,KACpEA,EAAQ,EACR9O,EAAM1B,GAzvIV,SAAkB9C,EAAO2G,EAAO2M,EAAO9O,GACrC,IAAI1B,EAAS9C,EAAM8C,OAWnB,KATAwQ,EAAQk4E,GAAUl4E,IACN,IACVA,GAASA,EAAQxQ,EAAS,EAAKA,EAASwQ,IAE1C9O,EAAOA,IAAQc,GAAad,EAAM1B,EAAUA,EAAS0oF,GAAUhnF,IACrD,IACRA,GAAO1B,GAET0B,EAAM8O,EAAQ9O,EAAM,EAAIouF,GAASpuF,GAC1B8O,EAAQ9O,GACbxE,EAAMsT,KAAW3M,EAEnB,OAAO3G,EA4uIA62F,CAAS72F,EAAO2G,EAAO2M,EAAO9O,IAN5B,IA6qSX6wE,GAAOvlE,OA3vOP,SAAgB8e,EAAYm/C,GAE1B,OADW1oE,GAAQupB,GAAco/C,GAAcsO,IACnC1tD,EAAY2zD,GAAYxU,EAAW,KA0vOjDsH,GAAOyhB,QAvqOP,SAAiBloE,EAAY8+C,GAC3B,OAAO6O,GAAY34E,GAAIgrB,EAAY8+C,GAAW,IAuqOhD2H,GAAO0hB,YAhpOP,SAAqBnoE,EAAY8+C,GAC/B,OAAO6O,GAAY34E,GAAIgrB,EAAY8+C,GAAWpI,IAgpOhD+P,GAAO2hB,aAxnOP,SAAsBpoE,EAAY8+C,EAAUlvD,GAE1C,OADAA,EAAQA,IAAUlZ,EAAY,EAAIkmF,GAAUhtE,GACrC+9D,GAAY34E,GAAIgrB,EAAY8+C,GAAWlvD,IAunOhD62D,GAAOqX,QAAUA,GACjBrX,GAAO4hB,YAviSP,SAAqBj3F,GAEnB,OADsB,MAATA,EAAgB,EAAIA,EAAM8C,QACvBy5E,GAAYv8E,EAAOslE,GAAY,IAsiSjD+P,GAAO6hB,aA/gSP,SAAsBl3F,EAAOwe,GAE3B,OADsB,MAATxe,EAAgB,EAAIA,EAAM8C,QAKhCy5E,GAAYv8E,EADnBwe,EAAQA,IAAUlZ,EAAY,EAAIkmF,GAAUhtE,IAFnC,IA6gSX62D,GAAOxhC,KAz9LP,SAAct2B,GACZ,OAAOquE,GAAWruE,EA5wUD,MAqugBnB83D,GAAOwf,KAAOA,GACdxf,GAAOyf,UAAYA,GACnBzf,GAAO8hB,UA3/RP,SAAmBtb,GAKjB,IAJA,IAAIlhE,GAAS,EACT7X,EAAkB,MAAT+4E,EAAgB,EAAIA,EAAM/4E,OACnC6P,EAAS,KAEJgI,EAAQ7X,GAAQ,CACvB,IAAI2oF,EAAO5P,EAAMlhE,GACjBhI,EAAO84E,EAAK,IAAMA,EAAK,GAEzB,OAAO94E,GAm/RT0iE,GAAO+hB,UA38GP,SAAmB/6E,GACjB,OAAiB,MAAVA,EAAiB,GAAKwgE,GAAcxgE,EAAQ5O,GAAK4O,KA28G1Dg5D,GAAOgiB,YAj7GP,SAAqBh7E,GACnB,OAAiB,MAAVA,EAAiB,GAAKwgE,GAAcxgE,EAAQu9D,GAAOv9D,KAi7G5Dg5D,GAAO0a,QAAUA,GACjB1a,GAAO7wD,QA56RP,SAAiBxkB,GAEf,OADsB,MAATA,EAAgB,EAAIA,EAAM8C,QACvBmhF,GAAUjkF,EAAO,GAAI,GAAK,IA26R5Cq1E,GAAOkZ,aAAeA,GACtBlZ,GAAOmZ,eAAiBA,GACxBnZ,GAAOoZ,iBAAmBA,GAC1BpZ,GAAO9uE,OAASA,GAChB8uE,GAAOie,SAAWA,GAClBje,GAAO2a,UAAYA,GACnB3a,GAAO3H,SAAWA,GAClB2H,GAAO4a,MAAQA,GACf5a,GAAO5nE,KAAOA,GACd4nE,GAAOuE,OAASA,GAChBvE,GAAOzxE,IAAMA,GACbyxE,GAAOiiB,QA1rGP,SAAiBj7E,EAAQqxD,GACvB,IAAI/6D,EAAS,GAMb,OALA+6D,EAAW6U,GAAY7U,EAAU,GAEjCsO,GAAW3/D,GAAQ,SAAS1V,EAAOgH,EAAK0O,GACtC67D,GAAgBvlE,EAAQ+6D,EAAS/mE,EAAOgH,EAAK0O,GAAS1V,MAEjDgM,GAorGT0iE,GAAOkiB,UArpGP,SAAmBl7E,EAAQqxD,GACzB,IAAI/6D,EAAS,GAMb,OALA+6D,EAAW6U,GAAY7U,EAAU,GAEjCsO,GAAW3/D,GAAQ,SAAS1V,EAAOgH,EAAK0O,GACtC67D,GAAgBvlE,EAAQhF,EAAK+/D,EAAS/mE,EAAOgH,EAAK0O,OAE7C1J,GA+oGT0iE,GAAO7uE,QAphCP,SAAiB+c,GACf,OAAOs9D,GAAY9H,GAAUx1D,EAxveX,KA4wgBpB8xD,GAAOmiB,gBAh/BP,SAAyBza,EAAMwD,GAC7B,OAAOK,GAAoB7D,EAAMhE,GAAUwH,EA7xezB,KA6wgBpBlL,GAAO0Y,QAAUA,GACjB1Y,GAAO7xE,MAAQA,GACf6xE,GAAOge,UAAYA,GACnBhe,GAAOr5D,OAASA,GAChBq5D,GAAO0f,SAAWA,GAClB1f,GAAO2f,MAAQA,GACf3f,GAAOwc,OAASA,GAChBxc,GAAOoiB,OAzzBP,SAAgBh+E,GAEd,OADAA,EAAI+xE,GAAU/xE,GACP8pE,IAAS,SAAS3vE,GACvB,OAAOuuE,GAAQvuE,EAAM6F,OAuzBzB47D,GAAOme,KAAOA,GACdne,GAAOqiB,OAnhGP,SAAgBr7E,EAAQ0xD,GACtB,OAAO4lB,GAAOt3E,EAAQw1E,GAAOtP,GAAYxU,MAmhG3CsH,GAAOr4D,KA73LP,SAAcO,GACZ,OAAOsS,GAAO,EAAGtS,IA63LnB83D,GAAOsiB,QAr4NP,SAAiB/oE,EAAYyzD,EAAWC,EAAQyF,GAC9C,OAAkB,MAAdn5D,EACK,IAEJvpB,GAAQg9E,KACXA,EAAyB,MAAbA,EAAoB,GAAK,CAACA,IAGnCh9E,GADLi9E,EAASyF,EAAQziF,EAAYg9E,KAE3BA,EAAmB,MAAVA,EAAiB,GAAK,CAACA,IAE3BF,GAAYxzD,EAAYyzD,EAAWC,KA23N5CjN,GAAO4f,KAAOA,GACd5f,GAAOyc,SAAWA,GAClBzc,GAAO6f,UAAYA,GACnB7f,GAAO8f,SAAWA,GAClB9f,GAAO4c,QAAUA,GACjB5c,GAAO6c,aAAeA,GACtB7c,GAAO6a,UAAYA,GACnB7a,GAAO5D,KAAOA,GACd4D,GAAOse,OAASA,GAChBte,GAAOhpC,SAAWA,GAClBgpC,GAAOuiB,WA/rBP,SAAoBv7E,GAClB,OAAO,SAAS0gE,GACd,OAAiB,MAAV1gE,EAAiB/W,EAAYw3E,GAAQzgE,EAAQ0gE,KA8rBxD1H,GAAOqZ,KAAOA,GACdrZ,GAAOsZ,QAAUA,GACjBtZ,GAAOwiB,UApsRP,SAAmB73F,EAAOilB,EAAQyoD,GAChC,OAAQ1tE,GAASA,EAAM8C,QAAUmiB,GAAUA,EAAOniB,OAC9CogF,GAAYljF,EAAOilB,EAAQs9D,GAAY7U,EAAU,IACjD1tE,GAksRNq1E,GAAOyiB,YAxqRP,SAAqB93F,EAAOilB,EAAQopD,GAClC,OAAQruE,GAASA,EAAM8C,QAAUmiB,GAAUA,EAAOniB,OAC9CogF,GAAYljF,EAAOilB,EAAQ3f,EAAW+oE,GACtCruE,GAsqRNq1E,GAAOuZ,OAASA,GAChBvZ,GAAO3nC,MAAQA,GACf2nC,GAAOggB,WAAaA,GACpBhgB,GAAO8c,MAAQA,GACf9c,GAAOv5D,OAxvNP,SAAgB8S,EAAYm/C,GAE1B,OADW1oE,GAAQupB,GAAco/C,GAAcsO,IACnC1tD,EAAYijE,GAAOtP,GAAYxU,EAAW,MAuvNxDsH,GAAOn4D,OAzmRP,SAAgBld,EAAO+tE,GACrB,IAAIp7D,EAAS,GACb,IAAM3S,IAASA,EAAM8C,OACnB,OAAO6P,EAET,IAAIgI,GAAS,EACTyoE,EAAU,GACVtgF,EAAS9C,EAAM8C,OAGnB,IADAirE,EAAYwU,GAAYxU,EAAW,KAC1BpzD,EAAQ7X,GAAQ,CACvB,IAAI6D,EAAQ3G,EAAM2a,GACdozD,EAAUpnE,EAAOgU,EAAO3a,KAC1B2S,EAAOxS,KAAKwG,GACZy8E,EAAQjjF,KAAKwa,IAIjB,OADAwoE,GAAWnjF,EAAOojF,GACXzwE,GAwlRT0iE,GAAO0iB,KAluLP,SAAcx6E,EAAMjK,GAClB,GAAmB,mBAARiK,EACT,MAAM,IAAIqB,GAAUkmD,GAGtB,OAAOye,GAAShmE,EADhBjK,EAAQA,IAAUhO,EAAYgO,EAAQk4E,GAAUl4E,KA+tLlD+hE,GAAO/5D,QAAUA,GACjB+5D,GAAO2iB,WAhtNP,SAAoBppE,EAAYnV,EAAGsuE,GAOjC,OALEtuE,GADGsuE,EAAQC,GAAep5D,EAAYnV,EAAGsuE,GAAStuE,IAAMnU,GACpD,EAEAkmF,GAAU/xE,IAELpU,GAAQupB,GAAcgpD,GAAkB+L,IACvC/0D,EAAYnV,IA0sN1B47D,GAAOvzD,IAv6FP,SAAazF,EAAQ0gE,EAAMp2E,GACzB,OAAiB,MAAV0V,EAAiBA,EAAS4mE,GAAQ5mE,EAAQ0gE,EAAMp2E,IAu6FzD0uE,GAAO4iB,QA54FP,SAAiB57E,EAAQ0gE,EAAMp2E,EAAOsyE,GAEpC,OADAA,EAAkC,mBAAdA,EAA2BA,EAAa3zE,EAC3C,MAAV+W,EAAiBA,EAAS4mE,GAAQ5mE,EAAQ0gE,EAAMp2E,EAAOsyE,IA24FhE5D,GAAO6iB,QA1rNP,SAAiBtpE,GAEf,OADWvpB,GAAQupB,GAAcopD,GAAegM,IACpCp1D,IAyrNdymD,GAAOv1E,MAhjRP,SAAeE,EAAOsT,EAAO9O,GAC3B,IAAI1B,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACvC,OAAKA,GAGD0B,GAAqB,iBAAPA,GAAmBwjF,GAAehoF,EAAOsT,EAAO9O,IAChE8O,EAAQ,EACR9O,EAAM1B,IAGNwQ,EAAiB,MAATA,EAAgB,EAAIk4E,GAAUl4E,GACtC9O,EAAMA,IAAQc,EAAYxC,EAAS0oF,GAAUhnF,IAExCy/E,GAAUjkF,EAAOsT,EAAO9O,IAVtB,IA8iRX6wE,GAAO8a,OAASA,GAChB9a,GAAO8iB,WAx3QP,SAAoBn4F,GAClB,OAAQA,GAASA,EAAM8C,OACnBmiF,GAAejlF,GACf,IAs3QNq1E,GAAO+iB,aAn2QP,SAAsBp4F,EAAO0tE,GAC3B,OAAQ1tE,GAASA,EAAM8C,OACnBmiF,GAAejlF,EAAOuiF,GAAY7U,EAAU,IAC5C,IAi2QN2H,GAAOtuE,MA5hEP,SAAewa,EAAQ82E,EAAWC,GAKhC,OAJIA,GAAyB,iBAATA,GAAqBtQ,GAAezmE,EAAQ82E,EAAWC,KACzED,EAAYC,EAAQhzF,IAEtBgzF,EAAQA,IAAUhzF,EAAYmgE,EAAmB6yB,IAAU,IAI3D/2E,EAASjhB,GAASihB,MAEQ,iBAAb82E,GACO,MAAbA,IAAsBlrB,GAASkrB,OAEpCA,EAAYlT,GAAakT,KACP5nB,GAAWlvD,GACpB8kE,GAAUlV,GAAc5vD,GAAS,EAAG+2E,GAGxC/2E,EAAOxa,MAAMsxF,EAAWC,GAZtB,IAuhEXjjB,GAAOkjB,OAnsLP,SAAgBh7E,EAAMjK,GACpB,GAAmB,mBAARiK,EACT,MAAM,IAAIqB,GAAUkmD,GAGtB,OADAxxD,EAAiB,MAATA,EAAgB,EAAIwgE,GAAU0X,GAAUl4E,GAAQ,GACjDiwE,IAAS,SAAS3vE,GACvB,IAAI5T,EAAQ4T,EAAKN,GACb+5E,EAAYhH,GAAUzyE,EAAM,EAAGN,GAKnC,OAHItT,GACFuuE,GAAU8e,EAAWrtF,GAEhBE,GAAMqd,EAAM/d,KAAM6tF,OAwrL7BhY,GAAOmjB,KAl1QP,SAAcx4F,GACZ,IAAI8C,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACvC,OAAOA,EAASmhF,GAAUjkF,EAAO,EAAG8C,GAAU,IAi1QhDuyE,GAAOojB,KArzQP,SAAcz4F,EAAOyZ,EAAGsuE,GACtB,OAAM/nF,GAASA,EAAM8C,OAIdmhF,GAAUjkF,EAAO,GADxByZ,EAAKsuE,GAAStuE,IAAMnU,EAAa,EAAIkmF,GAAU/xE,IAChB,EAAI,EAAIA,GAH9B,IAozQX47D,GAAOqjB,UArxQP,SAAmB14F,EAAOyZ,EAAGsuE,GAC3B,IAAIjlF,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACvC,OAAKA,EAKEmhF,GAAUjkF,GADjByZ,EAAI3W,GADJ2W,EAAKsuE,GAAStuE,IAAMnU,EAAa,EAAIkmF,GAAU/xE,KAEnB,EAAI,EAAIA,EAAG3W,GAJ9B,IAmxQXuyE,GAAOsjB,eAzuQP,SAAwB34F,EAAO+tE,GAC7B,OAAQ/tE,GAASA,EAAM8C,OACnB2iF,GAAUzlF,EAAOuiF,GAAYxU,EAAW,IAAI,GAAO,GACnD,IAuuQNsH,GAAOujB,UAjsQP,SAAmB54F,EAAO+tE,GACxB,OAAQ/tE,GAASA,EAAM8C,OACnB2iF,GAAUzlF,EAAOuiF,GAAYxU,EAAW,IACxC,IA+rQNsH,GAAOwjB,IApuPP,SAAalyF,EAAO+oF,GAElB,OADAA,EAAY/oF,GACLA,GAmuPT0uE,GAAOyjB,SA9oLP,SAAkBv7E,EAAMgD,EAAM3b,GAC5B,IAAIgsF,GAAU,EACVxI,GAAW,EAEf,GAAmB,mBAAR7qE,EACT,MAAM,IAAIqB,GAAUkmD,GAMtB,OAJI6Q,GAAS/wE,KACXgsF,EAAU,YAAahsF,IAAYA,EAAQgsF,QAAUA,EACrDxI,EAAW,aAAcxjF,IAAYA,EAAQwjF,SAAWA,GAEnDt8C,GAASvuB,EAAMgD,EAAM,CAC1BqwE,QAAWA,EACXJ,QAAWjwE,EACX6nE,SAAYA,KAioLhB/S,GAAO2T,KAAOA,GACd3T,GAAOnyE,QAAUA,GACjBmyE,GAAOue,QAAUA,GACjBve,GAAOwe,UAAYA,GACnBxe,GAAO0jB,OArfP,SAAgBpyF,GACd,OAAItB,GAAQsB,GACH2nE,GAAS3nE,EAAOs2E,IAElBZ,GAAS11E,GAAS,CAACA,GAASmxE,GAAUqO,GAAa7lF,GAASqG,MAkfrE0uE,GAAO4M,cAAgBA,GACvB5M,GAAOt9B,UA10FP,SAAmB17B,EAAQqxD,EAAUC,GACnC,IAAIwJ,EAAQ9xE,GAAQgX,GAChB28E,EAAY7hB,GAASzD,GAASr3D,IAAWkxD,GAAalxD,GAG1D,GADAqxD,EAAW6U,GAAY7U,EAAU,GACd,MAAfC,EAAqB,CACvB,IAAI3nE,EAAOqW,GAAUA,EAAOpZ,YAE1B0qE,EADEqrB,EACY7hB,EAAQ,IAAInxE,EAAO,GAE1B2vE,GAASt5D,IACFxb,GAAWmF,GAAQ0vE,GAAWjD,GAAap2D,IAG3C,GAMlB,OAHC28E,EAAYprB,GAAYoO,IAAY3/D,GAAQ,SAAS1V,EAAOgU,EAAO0B,GAClE,OAAOqxD,EAASC,EAAahnE,EAAOgU,EAAO0B,MAEtCsxD,GAuzFT0H,GAAO4jB,MArnLP,SAAe17E,GACb,OAAOksE,GAAIlsE,EAAM,IAqnLnB83D,GAAOwZ,MAAQA,GACfxZ,GAAOyZ,QAAUA,GACjBzZ,GAAO0Z,UAAYA,GACnB1Z,GAAO6jB,KAzmQP,SAAcl5F,GACZ,OAAQA,GAASA,EAAM8C,OAAUsiF,GAASplF,GAAS,IAymQrDq1E,GAAO8jB,OA/kQP,SAAgBn5F,EAAO0tE,GACrB,OAAQ1tE,GAASA,EAAM8C,OAAUsiF,GAASplF,EAAOuiF,GAAY7U,EAAU,IAAM,IA+kQ/E2H,GAAO+jB,SAxjQP,SAAkBp5F,EAAOquE,GAEvB,OADAA,EAAkC,mBAAdA,EAA2BA,EAAa/oE,EACpDtF,GAASA,EAAM8C,OAAUsiF,GAASplF,EAAOsF,EAAW+oE,GAAc,IAujQ5EgH,GAAOgkB,MAhyFP,SAAeh9E,EAAQ0gE,GACrB,OAAiB,MAAV1gE,GAAwBgnE,GAAUhnE,EAAQ0gE,IAgyFnD1H,GAAO2Z,MAAQA,GACf3Z,GAAO6Z,UAAYA,GACnB7Z,GAAO7hC,OApwFP,SAAgBn3B,EAAQ0gE,EAAMyI,GAC5B,OAAiB,MAAVnpE,EAAiBA,EAASkpE,GAAWlpE,EAAQ0gE,EAAMmJ,GAAaV,KAowFzEnQ,GAAOikB,WAzuFP,SAAoBj9E,EAAQ0gE,EAAMyI,EAASvM,GAEzC,OADAA,EAAkC,mBAAdA,EAA2BA,EAAa3zE,EAC3C,MAAV+W,EAAiBA,EAASkpE,GAAWlpE,EAAQ0gE,EAAMmJ,GAAaV,GAAUvM,IAwuFnF5D,GAAOpwD,OAASA,GAChBowD,GAAOkkB,SAhrFP,SAAkBl9E,GAChB,OAAiB,MAAVA,EAAiB,GAAKwzD,GAAWxzD,EAAQu9D,GAAOv9D,KAgrFzDg5D,GAAO8Z,QAAUA,GACjB9Z,GAAOiT,MAAQA,GACfjT,GAAOruD,KA3mLP,SAAcrgB,EAAOsiF,GACnB,OAAOgJ,GAAQ/L,GAAa+C,GAAUtiF,IA2mLxC0uE,GAAO+Z,IAAMA,GACb/Z,GAAOga,MAAQA,GACfha,GAAOia,QAAUA,GACjBja,GAAOka,IAAMA,GACbla,GAAOmkB,UAj3PP,SAAmBluE,EAAOrG,GACxB,OAAO6gE,GAAcx6D,GAAS,GAAIrG,GAAU,GAAIkzD,KAi3PlD9C,GAAOokB,cA/1PP,SAAuBnuE,EAAOrG,GAC5B,OAAO6gE,GAAcx6D,GAAS,GAAIrG,GAAU,GAAIg+D,KA+1PlD5N,GAAOma,QAAUA,GAGjBna,GAAOoB,QAAUmd,GACjBve,GAAOqkB,UAAY7F,GACnBxe,GAAO1wE,OAASmuF,GAChBzd,GAAOskB,WAAa5G,GAGpBiC,GAAM3f,GAAQA,IAKdA,GAAOx6D,IAAMA,GACbw6D,GAAOqf,QAAUA,GACjBrf,GAAO/zD,UAAYA,GACnB+zD,GAAO0e,WAAaA,GACpB1e,GAAOlgD,KAAOA,GACdkgD,GAAOukB,MAprFP,SAAehhB,EAAQC,EAAOC,GAa5B,OAZIA,IAAUxzE,IACZwzE,EAAQD,EACRA,EAAQvzE,GAENwzE,IAAUxzE,IAEZwzE,GADAA,EAAQkS,GAASlS,KACCA,EAAQA,EAAQ,GAEhCD,IAAUvzE,IAEZuzE,GADAA,EAAQmS,GAASnS,KACCA,EAAQA,EAAQ,GAE7Bd,GAAUiT,GAASpS,GAASC,EAAOC,IAwqF5CzD,GAAOrwE,MA7jLP,SAAe2B,GACb,OAAOoyE,GAAUpyE,EArzVI,IAk3gBvB0uE,GAAOwkB,UApgLP,SAAmBlzF,GACjB,OAAOoyE,GAAUpyE,EAAO8sF,IAogL1Bpe,GAAOykB,cAr+KP,SAAuBnzF,EAAOsyE,GAE5B,OAAOF,GAAUpyE,EAAO8sF,EADxBxa,EAAkC,mBAAdA,EAA2BA,EAAa3zE,IAq+K9D+vE,GAAO0kB,UA7hLP,SAAmBpzF,EAAOsyE,GAExB,OAAOF,GAAUpyE,EAz1VI,EAw1VrBsyE,EAAkC,mBAAdA,EAA2BA,EAAa3zE,IA6hL9D+vE,GAAO2kB,WA18KP,SAAoB39E,EAAQkH,GAC1B,OAAiB,MAAVA,GAAkBw3D,GAAe1+D,EAAQkH,EAAQ9V,GAAK8V,KA08K/D8xD,GAAOkT,OAASA,GAChBlT,GAAO4kB,UA1xCP,SAAmBtzF,EAAOsS,GACxB,OAAiB,MAATtS,GAAiBA,GAAUA,EAASsS,EAAetS,GA0xC7D0uE,GAAOmgB,OAASA,GAChBngB,GAAO6kB,SAz9EP,SAAkB34E,EAAQtc,EAAQktB,GAChC5Q,EAASjhB,GAASihB,GAClBtc,EAASkgF,GAAalgF,GAEtB,IAAInC,EAASye,EAAOze,OAKhB0B,EAJJ2tB,EAAWA,IAAa7sB,EACpBxC,EACAi1E,GAAUyT,GAAUr5D,GAAW,EAAGrvB,GAItC,OADAqvB,GAAYltB,EAAOnC,SACA,GAAKye,EAAOzhB,MAAMqyB,EAAU3tB,IAAQS,GA+8EzDowE,GAAOrxE,GAAKA,GACZqxE,GAAOtqE,OAj7EP,SAAgBwW,GAEd,OADAA,EAASjhB,GAASihB,KACAqmD,EAAmB36D,KAAKsU,GACtCA,EAAO7b,QAAQgiE,EAAiB4I,IAChC/uD,GA86EN8zD,GAAO8kB,aA55EP,SAAsB54E,GAEpB,OADAA,EAASjhB,GAASihB,KACA6mD,GAAgBn7D,KAAKsU,GACnCA,EAAO7b,QAAQyiE,GAAc,QAC7B5mD,GAy5EN8zD,GAAO+kB,MA57OP,SAAexrE,EAAYm/C,EAAWga,GACpC,IAAIxqE,EAAOlY,GAAQupB,GAAck/C,GAAaqO,GAI9C,OAHI4L,GAASC,GAAep5D,EAAYm/C,EAAWga,KACjDha,EAAYzoE,GAEPiY,EAAKqR,EAAY2zD,GAAYxU,EAAW,KAw7OjDsH,GAAOrlE,KAAOA,GACdqlE,GAAO/hC,UAAYA,GACnB+hC,GAAOglB,QArxHP,SAAiBh+E,EAAQ0xD,GACvB,OAAOe,GAAYzyD,EAAQkmE,GAAYxU,EAAW,GAAIiO,KAqxHxD3G,GAAOwa,SAAWA,GAClBxa,GAAOiZ,cAAgBA,GACvBjZ,GAAOilB,YAjvHP,SAAqBj+E,EAAQ0xD,GAC3B,OAAOe,GAAYzyD,EAAQkmE,GAAYxU,EAAW,GAAImO,KAivHxD7G,GAAOh9B,MAAQA,GACfg9B,GAAO9hC,QAAUA,GACjB8hC,GAAOya,aAAeA,GACtBza,GAAOklB,MArtHP,SAAel+E,EAAQqxD,GACrB,OAAiB,MAAVrxD,EACHA,EACAqgE,GAAQrgE,EAAQkmE,GAAY7U,EAAU,GAAIkM,KAmtHhDvE,GAAOmlB,WAtrHP,SAAoBn+E,EAAQqxD,GAC1B,OAAiB,MAAVrxD,EACHA,EACAugE,GAAavgE,EAAQkmE,GAAY7U,EAAU,GAAIkM,KAorHrDvE,GAAOolB,OArpHP,SAAgBp+E,EAAQqxD,GACtB,OAAOrxD,GAAU2/D,GAAW3/D,EAAQkmE,GAAY7U,EAAU,KAqpH5D2H,GAAOqlB,YAxnHP,SAAqBr+E,EAAQqxD,GAC3B,OAAOrxD,GAAU6/D,GAAgB7/D,EAAQkmE,GAAY7U,EAAU,KAwnHjE2H,GAAOlyE,IAAMA,GACbkyE,GAAO9/D,GAAKA,GACZ8/D,GAAO+c,IAAMA,GACb/c,GAAOlhE,IAzgHP,SAAakI,EAAQ0gE,GACnB,OAAiB,MAAV1gE,GAAkBywE,GAAQzwE,EAAQ0gE,EAAMa,KAygHjDvI,GAAOoM,MAAQA,GACfpM,GAAOnzE,KAAOA,GACdmzE,GAAOsL,SAAWA,GAClBtL,GAAO6F,SA5pOP,SAAkBtsD,EAAYjoB,EAAO0hD,EAAW0/B,GAC9Cn5D,EAAa/rB,GAAY+rB,GAAcA,EAAa3J,GAAO2J,GAC3Dy5B,EAAaA,IAAc0/B,EAASyD,GAAUnjC,GAAa,EAE3D,IAAIvlD,EAAS8rB,EAAW9rB,OAIxB,OAHIulD,EAAY,IACdA,EAAYyrB,GAAUhxE,EAASulD,EAAW,IAErCmqC,GAAS5jE,GACXy5B,GAAavlD,GAAU8rB,EAAWxuB,QAAQuG,EAAO0hD,IAAc,IAC7DvlD,GAAUqrE,GAAYv/C,EAAYjoB,EAAO0hD,IAAc,GAmpOhEgtB,GAAOj1E,QA9lSP,SAAiBJ,EAAO2G,EAAO0hD,GAC7B,IAAIvlD,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAI6X,EAAqB,MAAb0tC,EAAoB,EAAImjC,GAAUnjC,GAI9C,OAHI1tC,EAAQ,IACVA,EAAQm5D,GAAUhxE,EAAS6X,EAAO,IAE7BwzD,GAAYnuE,EAAO2G,EAAOgU,IAslSnC06D,GAAOslB,QAlqFP,SAAiB/hB,EAAQtlE,EAAO9O,GAS9B,OARA8O,EAAQu3E,GAASv3E,GACb9O,IAAQc,GACVd,EAAM8O,EACNA,EAAQ,GAER9O,EAAMqmF,GAASrmF,GArsVnB,SAAqBo0E,EAAQtlE,EAAO9O,GAClC,OAAOo0E,GAAU7E,GAAUzgE,EAAO9O,IAAQo0E,EAAS9E,GAAUxgE,EAAO9O,GAusV7Do2F,CADPhiB,EAASoS,GAASpS,GACStlE,EAAO9O,IA0pFpC6wE,GAAOke,OAASA,GAChBle,GAAOgC,YAAcA,GACrBhC,GAAOhwE,QAAUA,GACjBgwE,GAAOxI,cAAgBA,GACvBwI,GAAOxyE,YAAcA,GACrBwyE,GAAO2M,kBAAoBA,GAC3B3M,GAAOwlB,UAtwKP,SAAmBl0F,GACjB,OAAiB,IAAVA,IAA4B,IAAVA,GACtB2uE,GAAa3uE,IAAU02E,GAAW12E,IAAUk/D,GAqwKjDwP,GAAO3B,SAAWA,GAClB2B,GAAOtI,OAASA,GAChBsI,GAAO13B,UA7sKP,SAAmBh3C,GACjB,OAAO2uE,GAAa3uE,IAA6B,IAAnBA,EAAM5F,WAAmBoE,GAAcwB,IA6sKvE0uE,GAAOylB,QAzqKP,SAAiBn0F,GACf,GAAa,MAATA,EACF,OAAO,EAET,GAAI9D,GAAY8D,KACXtB,GAAQsB,IAA0B,iBAATA,GAA4C,mBAAhBA,EAAMjC,QAC1DgvE,GAAS/sE,IAAU4mE,GAAa5mE,IAAU0wE,GAAY1wE,IAC1D,OAAQA,EAAM7D,OAEhB,IAAIoN,EAAMopE,GAAO3yE,GACjB,GAAIuJ,GAAOg2D,GAAUh2D,GAAOq2D,EAC1B,OAAQ5/D,EAAMgqE,KAEhB,GAAIoQ,GAAYp6E,GACd,OAAQm6E,GAASn6E,GAAO7D,OAE1B,IAAK,IAAI6K,KAAOhH,EACd,GAAInG,GAAeG,KAAKgG,EAAOgH,GAC7B,OAAO,EAGX,OAAO,GAqpKT0nE,GAAO0lB,QAtnKP,SAAiBp0F,EAAOg3E,GACtB,OAAOa,GAAY73E,EAAOg3E,IAsnK5BtI,GAAO2lB,YAnlKP,SAAqBr0F,EAAOg3E,EAAO1E,GAEjC,IAAItmE,GADJsmE,EAAkC,mBAAdA,EAA2BA,EAAa3zE,GAClC2zE,EAAWtyE,EAAOg3E,GAASr4E,EACrD,OAAOqN,IAAWrN,EAAYk5E,GAAY73E,EAAOg3E,EAAOr4E,EAAW2zE,KAAgBtmE,GAilKrF0iE,GAAOgd,QAAUA,GACjBhd,GAAOp+C,SA1hKP,SAAkBtwB,GAChB,MAAuB,iBAATA,GAAqBgtE,GAAehtE,IA0hKpD0uE,GAAOx0E,WAAaA,GACpBw0E,GAAOid,UAAYA,GACnBjd,GAAO2X,SAAWA,GAClB3X,GAAOpI,MAAQA,GACfoI,GAAO4lB,QA11JP,SAAiB5+E,EAAQkH,GACvB,OAAOlH,IAAWkH,GAAU68D,GAAY/jE,EAAQkH,EAAQ89D,GAAa99D,KA01JvE8xD,GAAO6lB,YAvzJP,SAAqB7+E,EAAQkH,EAAQ01D,GAEnC,OADAA,EAAkC,mBAAdA,EAA2BA,EAAa3zE,EACrD86E,GAAY/jE,EAAQkH,EAAQ89D,GAAa99D,GAAS01D,IAszJ3D5D,GAAOlqC,MAvxJP,SAAexkC,GAIb,OAAO4rF,GAAS5rF,IAAUA,IAAUA,GAoxJtC0uE,GAAO8lB,SAvvJP,SAAkBx0F,GAChB,GAAIwmF,GAAWxmF,GACb,MAAM,IAAIrH,GAtsXM,mEAwsXlB,OAAOmhF,GAAa95E,IAovJtB0uE,GAAO+lB,MAxsJP,SAAez0F,GACb,OAAgB,MAATA,GAwsJT0uE,GAAOgmB,OAjuJP,SAAgB10F,GACd,OAAiB,OAAVA,GAiuJT0uE,GAAOkd,SAAWA,GAClBld,GAAOM,SAAWA,GAClBN,GAAOC,aAAeA,GACtBD,GAAOlwE,cAAgBA,GACvBkwE,GAAOlI,SAAWA,GAClBkI,GAAOimB,cArlJP,SAAuB30F,GACrB,OAAO2rF,GAAU3rF,IAAUA,IAAS,kBAAqBA,GAAS4+D,GAqlJpE8P,GAAOhI,MAAQA,GACfgI,GAAOmd,SAAWA,GAClBnd,GAAOgH,SAAWA,GAClBhH,GAAO9H,aAAeA,GACtB8H,GAAOkmB,YAn/IP,SAAqB50F,GACnB,OAAOA,IAAUrB,GAm/InB+vE,GAAOmmB,UA/9IP,SAAmB70F,GACjB,OAAO2uE,GAAa3uE,IAAU2yE,GAAO3yE,IAAU+/D,GA+9IjD2O,GAAOomB,UA38IP,SAAmB90F,GACjB,OAAO2uE,GAAa3uE,IAn6XP,oBAm6XiB02E,GAAW12E,IA28I3C0uE,GAAOhoE,KAz/RP,SAAcrN,EAAOq4F,GACnB,OAAgB,MAATr4F,EAAgB,GAAK4zE,GAAWjzE,KAAKX,EAAOq4F,IAy/RrDhjB,GAAO4e,UAAYA,GACnB5e,GAAOpxE,KAAOA,GACdoxE,GAAOqmB,YAh9RP,SAAqB17F,EAAO2G,EAAO0hD,GACjC,IAAIvlD,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAI6X,EAAQ7X,EAKZ,OAJIulD,IAAc/iD,IAEhBqV,GADAA,EAAQ6wE,GAAUnjC,IACF,EAAIyrB,GAAUhxE,EAAS6X,EAAO,GAAKo5D,GAAUp5D,EAAO7X,EAAS,IAExE6D,GAAUA,EArvMrB,SAA2B3G,EAAO2G,EAAO0hD,GAEvC,IADA,IAAI1tC,EAAQ0tC,EAAY,EACjB1tC,KACL,GAAI3a,EAAM2a,KAAWhU,EACnB,OAAOgU,EAGX,OAAOA,EA+uMDghF,CAAkB37F,EAAO2G,EAAOgU,GAChCq0D,GAAchvE,EAAOmvE,GAAWx0D,GAAO,IAq8R7C06D,GAAO6e,UAAYA,GACnB7e,GAAO8e,WAAaA,GACpB9e,GAAO//D,GAAKA,GACZ+/D,GAAOod,IAAMA,GACbpd,GAAO3gD,IAhfP,SAAa10B,GACX,OAAQA,GAASA,EAAM8C,OACnBs5E,GAAap8E,EAAO2gF,GAAUjD,IAC9Bp4E,GA8eN+vE,GAAOumB,MApdP,SAAe57F,EAAO0tE,GACpB,OAAQ1tE,GAASA,EAAM8C,OACnBs5E,GAAap8E,EAAOuiF,GAAY7U,EAAU,GAAIgQ,IAC9Cp4E,GAkdN+vE,GAAOwmB,KAjcP,SAAc77F,GACZ,OAAOqvE,GAASrvE,EAAO2gF,KAiczBtL,GAAOymB,OAvaP,SAAgB97F,EAAO0tE,GACrB,OAAO2B,GAASrvE,EAAOuiF,GAAY7U,EAAU,KAua/C2H,GAAOl9B,IAlZP,SAAan4C,GACX,OAAQA,GAASA,EAAM8C,OACnBs5E,GAAap8E,EAAO2gF,GAAUQ,IAC9B77E,GAgZN+vE,GAAO0mB,MAtXP,SAAe/7F,EAAO0tE,GACpB,OAAQ1tE,GAASA,EAAM8C,OACnBs5E,GAAap8E,EAAOuiF,GAAY7U,EAAU,GAAIyT,IAC9C77E,GAoXN+vE,GAAOwX,UAAYA,GACnBxX,GAAO+X,UAAYA,GACnB/X,GAAO2mB,WAztBP,WACE,MAAO,IAytBT3mB,GAAO4mB,WAzsBP,WACE,MAAO,IAysBT5mB,GAAO6mB,SAzrBP,WACE,OAAO,GAyrBT7mB,GAAOsgB,SAAWA,GAClBtgB,GAAO8mB,IA77RP,SAAan8F,EAAOyZ,GAClB,OAAQzZ,GAASA,EAAM8C,OAAUq/E,GAAQniF,EAAOwrF,GAAU/xE,IAAMnU,GA67RlE+vE,GAAO7pC,WAliCP,WAIE,OAHIh3B,GAAK8H,IAAM9c,OACbgV,GAAK8H,EAAI81D,IAEJ5yE,MA+hCT61E,GAAOvvE,KAAOA,GACduvE,GAAO1pD,IAAMA,GACb0pD,GAAO+mB,IAj5EP,SAAa76E,EAAQze,EAAQ6nF,GAC3BppE,EAASjhB,GAASihB,GAGlB,IAAI86E,GAFJv5F,EAAS0oF,GAAU1oF,IAEMkuE,GAAWzvD,GAAU,EAC9C,IAAKze,GAAUu5F,GAAav5F,EAC1B,OAAOye,EAET,IAAI+iE,GAAOxhF,EAASu5F,GAAa,EACjC,OACE3R,GAAcpX,GAAYgR,GAAMqG,GAChCppE,EACAmpE,GAAcrX,GAAWiR,GAAMqG,IAs4EnCtV,GAAOinB,OA32EP,SAAgB/6E,EAAQze,EAAQ6nF,GAC9BppE,EAASjhB,GAASihB,GAGlB,IAAI86E,GAFJv5F,EAAS0oF,GAAU1oF,IAEMkuE,GAAWzvD,GAAU,EAC9C,OAAQze,GAAUu5F,EAAYv5F,EACzBye,EAASmpE,GAAc5nF,EAASu5F,EAAW1R,GAC5CppE,GAq2EN8zD,GAAOknB,SA30EP,SAAkBh7E,EAAQze,EAAQ6nF,GAChCppE,EAASjhB,GAASihB,GAGlB,IAAI86E,GAFJv5F,EAAS0oF,GAAU1oF,IAEMkuE,GAAWzvD,GAAU,EAC9C,OAAQze,GAAUu5F,EAAYv5F,EACzB4nF,GAAc5nF,EAASu5F,EAAW1R,GAASppE,EAC5CA,GAq0EN8zD,GAAOhiD,SA1yEP,SAAkB9R,EAAQi7E,EAAOzU,GAM/B,OALIA,GAAkB,MAATyU,EACXA,EAAQ,EACCA,IACTA,GAASA,GAEJvoB,GAAe3zE,GAASihB,GAAQ7b,QAAQ2iE,GAAa,IAAKm0B,GAAS,IAqyE5EnnB,GAAO5vE,OA1rFP,SAAgBozE,EAAOC,EAAO2jB,GA2B5B,GA1BIA,GAA+B,kBAAZA,GAAyBzU,GAAenP,EAAOC,EAAO2jB,KAC3E3jB,EAAQ2jB,EAAWn3F,GAEjBm3F,IAAan3F,IACK,kBAATwzE,GACT2jB,EAAW3jB,EACXA,EAAQxzE,GAEe,kBAATuzE,IACd4jB,EAAW5jB,EACXA,EAAQvzE,IAGRuzE,IAAUvzE,GAAawzE,IAAUxzE,GACnCuzE,EAAQ,EACRC,EAAQ,IAGRD,EAAQgS,GAAShS,GACbC,IAAUxzE,GACZwzE,EAAQD,EACRA,EAAQ,GAERC,EAAQ+R,GAAS/R,IAGjBD,EAAQC,EAAO,CACjB,IAAI9hE,EAAO6hE,EACXA,EAAQC,EACRA,EAAQ9hE,EAEV,GAAIylF,GAAY5jB,EAAQ,GAAKC,EAAQ,EAAG,CACtC,IAAIgV,EAAO5Z,KACX,OAAOH,GAAU8E,EAASiV,GAAQhV,EAAQD,EAAQ7M,GAAe,QAAU8hB,EAAO,IAAIhrF,OAAS,KAAOg2E,GAExG,OAAOnB,GAAWkB,EAAOC,IAupF3BzD,GAAOl+B,OA5+NP,SAAgBvoB,EAAY8+C,EAAUC,GACpC,IAAIpwD,EAAOlY,GAAQupB,GAAc4/C,GAAcgB,GAC3Cf,EAAY3qE,UAAUhB,OAAS,EAEnC,OAAOya,EAAKqR,EAAY2zD,GAAY7U,EAAU,GAAIC,EAAac,EAAW8J,KAy+N5ElD,GAAOqnB,YAh9NP,SAAqB9tE,EAAY8+C,EAAUC,GACzC,IAAIpwD,EAAOlY,GAAQupB,GAAc8/C,GAAmBc,GAChDf,EAAY3qE,UAAUhB,OAAS,EAEnC,OAAOya,EAAKqR,EAAY2zD,GAAY7U,EAAU,GAAIC,EAAac,EAAWwN,KA68N5E5G,GAAOsnB,OA/wEP,SAAgBp7E,EAAQ9H,EAAGsuE,GAMzB,OAJEtuE,GADGsuE,EAAQC,GAAezmE,EAAQ9H,EAAGsuE,GAAStuE,IAAMnU,GAChD,EAEAkmF,GAAU/xE,GAET6pE,GAAWhjF,GAASihB,GAAS9H,IA0wEtC47D,GAAO3vE,QApvEP,WACE,IAAIkO,EAAO9P,UACPyd,EAASjhB,GAASsT,EAAK,IAE3B,OAAOA,EAAK9Q,OAAS,EAAIye,EAASA,EAAO7b,QAAQkO,EAAK,GAAIA,EAAK,KAivEjEyhE,GAAO1iE,OAtoGP,SAAgB0J,EAAQ0gE,EAAM9jE,GAG5B,IAAI0B,GAAS,EACT7X,GAHJi6E,EAAOC,GAASD,EAAM1gE,IAGJvZ,OAOlB,IAJKA,IACHA,EAAS,EACTuZ,EAAS/W,KAEFqV,EAAQ7X,GAAQ,CACvB,IAAI6D,EAAkB,MAAV0V,EAAiB/W,EAAY+W,EAAO4gE,GAAMF,EAAKpiE,KACvDhU,IAAUrB,IACZqV,EAAQ7X,EACR6D,EAAQsS,GAEVoD,EAASxb,GAAW8F,GAASA,EAAMhG,KAAK0b,GAAU1V,EAEpD,OAAO0V,GAonGTg5D,GAAO9iD,MAAQA,GACf8iD,GAAO9D,aAAeA,EACtB8D,GAAOunB,OA15NP,SAAgBhuE,GAEd,OADWvpB,GAAQupB,GAAc8oD,GAAcgM,IACnC90D,IAy5NdymD,GAAO1E,KA/0NP,SAAc/hD,GACZ,GAAkB,MAAdA,EACF,OAAO,EAET,GAAI/rB,GAAY+rB,GACd,OAAO4jE,GAAS5jE,GAAcoiD,GAAWpiD,GAAcA,EAAW9rB,OAEpE,IAAIoN,EAAMopE,GAAO1qD,GACjB,OAAI1e,GAAOg2D,GAAUh2D,GAAOq2D,EACnB33C,EAAW+hD,KAEbmQ,GAASlyD,GAAY9rB,QAq0N9BuyE,GAAO+e,UAAYA,GACnB/e,GAAOjhC,KA/xNP,SAAcxlB,EAAYm/C,EAAWga,GACnC,IAAIxqE,EAAOlY,GAAQupB,GAAc+/C,GAAYuV,GAI7C,OAHI6D,GAASC,GAAep5D,EAAYm/C,EAAWga,KACjDha,EAAYzoE,GAEPiY,EAAKqR,EAAY2zD,GAAYxU,EAAW,KA2xNjDsH,GAAOwnB,YAhsRP,SAAqB78F,EAAO2G,GAC1B,OAAOw9E,GAAgBnkF,EAAO2G,IAgsRhC0uE,GAAOynB,cApqRP,SAAuB98F,EAAO2G,EAAO+mE,GACnC,OAAO6W,GAAkBvkF,EAAO2G,EAAO47E,GAAY7U,EAAU,KAoqR/D2H,GAAO0nB,cAjpRP,SAAuB/8F,EAAO2G,GAC5B,IAAI7D,EAAkB,MAAT9C,EAAgB,EAAIA,EAAM8C,OACvC,GAAIA,EAAQ,CACV,IAAI6X,EAAQwpE,GAAgBnkF,EAAO2G,GACnC,GAAIgU,EAAQ7X,GAAUkB,GAAGhE,EAAM2a,GAAQhU,GACrC,OAAOgU,EAGX,OAAQ,GA0oRV06D,GAAO2nB,gBArnRP,SAAyBh9F,EAAO2G,GAC9B,OAAOw9E,GAAgBnkF,EAAO2G,GAAO,IAqnRvC0uE,GAAO4nB,kBAzlRP,SAA2Bj9F,EAAO2G,EAAO+mE,GACvC,OAAO6W,GAAkBvkF,EAAO2G,EAAO47E,GAAY7U,EAAU,IAAI,IAylRnE2H,GAAO6nB,kBAtkRP,SAA2Bl9F,EAAO2G,GAEhC,GADsB,MAAT3G,EAAgB,EAAIA,EAAM8C,OAC3B,CACV,IAAI6X,EAAQwpE,GAAgBnkF,EAAO2G,GAAO,GAAQ,EAClD,GAAI3C,GAAGhE,EAAM2a,GAAQhU,GACnB,OAAOgU,EAGX,OAAQ,GA+jRV06D,GAAOgf,UAAYA,GACnBhf,GAAO8nB,WA3oEP,SAAoB57E,EAAQtc,EAAQktB,GAOlC,OANA5Q,EAASjhB,GAASihB,GAClB4Q,EAAuB,MAAZA,EACP,EACA4lD,GAAUyT,GAAUr5D,GAAW,EAAG5Q,EAAOze,QAE7CmC,EAASkgF,GAAalgF,GACfsc,EAAOzhB,MAAMqyB,EAAUA,EAAWltB,EAAOnC,SAAWmC,GAqoE7DowE,GAAO5gD,SAAWA,GAClB4gD,GAAO+nB,IAzUP,SAAap9F,GACX,OAAQA,GAASA,EAAM8C,OACnBwsE,GAAQtvE,EAAO2gF,IACf,GAuUNtL,GAAOgoB,MA7SP,SAAer9F,EAAO0tE,GACpB,OAAQ1tE,GAASA,EAAM8C,OACnBwsE,GAAQtvE,EAAOuiF,GAAY7U,EAAU,IACrC,GA2SN2H,GAAOtc,SA7hEP,SAAkBx3C,EAAQ3c,EAASmjF,GAIjC,IAAI3kD,EAAWiyC,GAAOkG,iBAElBwM,GAASC,GAAezmE,EAAQ3c,EAASmjF,KAC3CnjF,EAAUU,GAEZic,EAASjhB,GAASihB,GAClB3c,EAAUmuF,GAAa,GAAInuF,EAASw+B,EAAUgpD,IAE9C,IAIIkR,EACAC,EALA5hB,EAAUoX,GAAa,GAAInuF,EAAQ+2E,QAASv4C,EAASu4C,QAASyQ,IAC9DoR,EAAc/vF,GAAKkuE,GACnB8hB,EAAgB5tB,GAAW8L,EAAS6hB,GAIpC7iF,EAAQ,EACR8gE,EAAc72E,EAAQ62E,aAAepS,GACrC9lD,EAAS,WAGTm6E,EAAen0F,IAChB3E,EAAQmG,QAAUs+D,IAAW9lD,OAAS,IACvCk4D,EAAYl4D,OAAS,KACpBk4D,IAAgB1T,EAAgBc,GAAeQ,IAAW9lD,OAAS,KACnE3e,EAAQ42E,UAAYnS,IAAW9lD,OAAS,KACzC,KAMEo6E,EAAY,kBACbn9F,GAAeG,KAAKiE,EAAS,cACzBA,EAAQ+4F,UAAY,IAAIj4F,QAAQ,MAAO,KACvC,6BAA+BkmE,GAAmB,KACnD,KAENrqD,EAAO7b,QAAQg4F,GAAc,SAASpxF,EAAOsxF,EAAaC,EAAkBC,EAAiBC,EAAe50D,GAsB1G,OArBA00D,IAAqBA,EAAmBC,GAGxCv6E,GAAUhC,EAAOzhB,MAAM6a,EAAOwuB,GAAQzjC,QAAQ4jE,GAAmBiH,IAG7DqtB,IACFN,GAAa,EACb/5E,GAAU,YAAcq6E,EAAc,UAEpCG,IACFR,GAAe,EACfh6E,GAAU,OAASw6E,EAAgB,eAEjCF,IACFt6E,GAAU,iBAAmBs6E,EAAmB,+BAElDljF,EAAQwuB,EAAS78B,EAAMxJ,OAIhBwJ,KAGTiX,GAAU,OAIV,IAAIm4D,EAAWl7E,GAAeG,KAAKiE,EAAS,aAAeA,EAAQ82E,SACnE,GAAKA,GAKA,GAAI/S,GAA2B17D,KAAKyuE,GACvC,MAAM,IAAIp8E,GA3idmB,2DAsid7BikB,EAAS,iBAAmBA,EAAS,QASvCA,GAAUg6E,EAAeh6E,EAAO7d,QAAQ4hE,EAAsB,IAAM/jD,GACjE7d,QAAQ6hE,EAAqB,MAC7B7hE,QAAQ8hE,EAAuB,OAGlCjkD,EAAS,aAAem4D,GAAY,OAAS,SAC1CA,EACG,GACA,wBAEJ,qBACC4hB,EACI,mBACA,KAEJC,EACG,uFAEA,OAEJh6E,EACA,gBAEF,IAAI5Q,EAAS+hF,IAAQ,WACnB,OAAOtoB,GAASoxB,EAAaG,EAAY,UAAYp6E,GAClDrjB,MAAMoF,EAAWm4F,MAMtB,GADA9qF,EAAO4Q,OAASA,EACZ8uE,GAAQ1/E,GACV,MAAMA,EAER,OAAOA,GA46DT0iE,GAAO2oB,MApsBP,SAAevkF,EAAGi0D,GAEhB,IADAj0D,EAAI+xE,GAAU/xE,IACN,GAAKA,EAAI8rD,EACf,MAAO,GAET,IAAI5qD,EAAQ8qD,EACR3iE,EAASixE,GAAUt6D,EAAGgsD,GAE1BiI,EAAW6U,GAAY7U,GACvBj0D,GAAKgsD,EAGL,IADA,IAAI9yD,EAAS88D,GAAU3sE,EAAQ4qE,KACtB/yD,EAAQlB,GACfi0D,EAAS/yD,GAEX,OAAOhI,GAsrBT0iE,GAAOwV,SAAWA,GAClBxV,GAAOmW,UAAYA,GACnBnW,GAAOud,SAAWA,GAClBvd,GAAO4oB,QAx5DP,SAAiBt3F,GACf,OAAOrG,GAASqG,GAAOM,eAw5DzBouE,GAAO2V,SAAWA,GAClB3V,GAAO6oB,cApuIP,SAAuBv3F,GACrB,OAAOA,EACHoxE,GAAUyT,GAAU7kF,IAAQ,iBAAmB4+D,GACpC,IAAV5+D,EAAcA,EAAQ,GAkuI7B0uE,GAAO/0E,SAAWA,GAClB+0E,GAAO8oB,QAn4DP,SAAiBx3F,GACf,OAAOrG,GAASqG,GAAO0a,eAm4DzBg0D,GAAOjqC,KA12DP,SAAc7pB,EAAQopE,EAAO5C,GAE3B,IADAxmE,EAASjhB,GAASihB,MACHwmE,GAAS4C,IAAUrlF,GAChC,OAAOoqE,GAASnuD,GAElB,IAAKA,KAAYopE,EAAQxF,GAAawF,IACpC,OAAOppE,EAET,IAAIyuD,EAAamB,GAAc5vD,GAC3B0uD,EAAakB,GAAcwZ,GAI/B,OAAOtE,GAAUrW,EAHLD,GAAgBC,EAAYC,GAC9BC,GAAcF,EAAYC,GAAc,GAET5iE,KAAK,KA81DhDgoE,GAAO+oB,QAx0DP,SAAiB78E,EAAQopE,EAAO5C,GAE9B,IADAxmE,EAASjhB,GAASihB,MACHwmE,GAAS4C,IAAUrlF,GAChC,OAAOic,EAAOzhB,MAAM,EAAG6vE,GAAgBpuD,GAAU,GAEnD,IAAKA,KAAYopE,EAAQxF,GAAawF,IACpC,OAAOppE,EAET,IAAIyuD,EAAamB,GAAc5vD,GAG/B,OAAO8kE,GAAUrW,EAAY,EAFnBE,GAAcF,EAAYmB,GAAcwZ,IAAU,GAEvBt9E,KAAK,KA8zD5CgoE,GAAOgpB,UAxyDP,SAAmB98E,EAAQopE,EAAO5C,GAEhC,IADAxmE,EAASjhB,GAASihB,MACHwmE,GAAS4C,IAAUrlF,GAChC,OAAOic,EAAO7b,QAAQ2iE,GAAa,IAErC,IAAK9mD,KAAYopE,EAAQxF,GAAawF,IACpC,OAAOppE,EAET,IAAIyuD,EAAamB,GAAc5vD,GAG/B,OAAO8kE,GAAUrW,EAFLD,GAAgBC,EAAYmB,GAAcwZ,KAElBt9E,KAAK,KA8xD3CgoE,GAAO/7D,SAtvDP,SAAkBiI,EAAQ3c,GACxB,IAAI9B,EAnvdmB,GAovdnBw7F,EAnvdqB,MAqvdzB,GAAI3oB,GAAS/wE,GAAU,CACrB,IAAIyzF,EAAY,cAAezzF,EAAUA,EAAQyzF,UAAYA,EAC7Dv1F,EAAS,WAAY8B,EAAU4mF,GAAU5mF,EAAQ9B,QAAUA,EAC3Dw7F,EAAW,aAAc15F,EAAUugF,GAAavgF,EAAQ05F,UAAYA,EAItE,IAAIjC,GAFJ96E,EAASjhB,GAASihB,IAEKze,OACvB,GAAI2tE,GAAWlvD,GAAS,CACtB,IAAIyuD,EAAamB,GAAc5vD,GAC/B86E,EAAYrsB,EAAWltE,OAEzB,GAAIA,GAAUu5F,EACZ,OAAO96E,EAET,IAAI/c,EAAM1B,EAASkuE,GAAWstB,GAC9B,GAAI95F,EAAM,EACR,OAAO85F,EAET,IAAI3rF,EAASq9D,EACTqW,GAAUrW,EAAY,EAAGxrE,GAAK6I,KAAK,IACnCkU,EAAOzhB,MAAM,EAAG0E,GAEpB,GAAI6zF,IAAc/yF,EAChB,OAAOqN,EAAS2rF,EAKlB,GAHItuB,IACFxrE,GAAQmO,EAAO7P,OAAS0B,GAEtB2oE,GAASkrB,IACX,GAAI92E,EAAOzhB,MAAM0E,GAAKsyC,OAAOuhD,GAAY,CACvC,IAAI/rF,EACAiyF,EAAY5rF,EAMhB,IAJK0lF,EAAUp5F,SACbo5F,EAAY9uF,GAAO8uF,EAAU90E,OAAQjjB,GAASwoE,GAAQn8D,KAAK0rF,IAAc,MAE3EA,EAAUpnB,UAAY,EACd3kE,EAAQ+rF,EAAU1rF,KAAK4xF,IAC7B,IAAIC,EAASlyF,EAAMqO,MAErBhI,EAASA,EAAO7S,MAAM,EAAG0+F,IAAWl5F,EAAYd,EAAMg6F,SAEnD,GAAIj9E,EAAOnhB,QAAQ+kF,GAAakT,GAAY7zF,IAAQA,EAAK,CAC9D,IAAImW,EAAQhI,EAAO+oF,YAAYrD,GAC3B19E,GAAS,IACXhI,EAASA,EAAO7S,MAAM,EAAG6a,IAG7B,OAAOhI,EAAS2rF,GAksDlBjpB,GAAOopB,SA5qDP,SAAkBl9E,GAEhB,OADAA,EAASjhB,GAASihB,KACAomD,EAAiB16D,KAAKsU,GACpCA,EAAO7b,QAAQ+hE,EAAe6J,IAC9B/vD,GAyqDN8zD,GAAOqpB,SAvpBP,SAAkBlnE,GAChB,IAAI3qB,IAAOklE,GACX,OAAOzxE,GAASk3B,GAAU3qB,GAspB5BwoE,GAAOif,UAAYA,GACnBjf,GAAO2e,WAAaA,GAGpB3e,GAAO3xE,KAAO6vC,GACd8hC,GAAOspB,UAAY7O,GACnBza,GAAOtxE,MAAQ7B,GAEf8yF,GAAM3f,IACA9xD,GAAS,GACby4D,GAAW3G,IAAQ,SAAS93D,EAAM4qE,GAC3B3nF,GAAeG,KAAK00E,GAAOtyE,UAAWolF,KACzC5kE,GAAO4kE,GAAc5qE,MAGlBgG,IACH,CAAEksE,OAAS,IAWjBpa,GAAOz2B,QA/ihBK,UAkjhBZgvB,GAAU,CAAC,OAAQ,UAAW,QAAS,aAAc,UAAW,iBAAiB,SAASua,GACxF9S,GAAO8S,GAAY/X,YAAciF,MAInCzH,GAAU,CAAC,OAAQ,SAAS,SAASua,EAAYxtE,GAC/C46D,GAAYxyE,UAAUolF,GAAc,SAAS1uE,GAC3CA,EAAIA,IAAMnU,EAAY,EAAIwuE,GAAU0X,GAAU/xE,GAAI,GAElD,IAAI9G,EAAUnT,KAAK42E,eAAiBz7D,EAChC,IAAI46D,GAAY/1E,MAChBA,KAAKwF,QAUT,OARI2N,EAAOyjE,aACTzjE,EAAO2jE,cAAgBvC,GAAUt6D,EAAG9G,EAAO2jE,eAE3C3jE,EAAO4jE,UAAUp2E,KAAK,CACpBwwE,KAAQoD,GAAUt6D,EAAGgsD,GACrBtkE,KAAQgnF,GAAcx1E,EAAOwjE,QAAU,EAAI,QAAU,MAGlDxjE,GAGT4iE,GAAYxyE,UAAUolF,EAAa,SAAW,SAAS1uE,GACrD,OAAOja,KAAK8b,UAAU6sE,GAAY1uE,GAAG6B,cAKzCsyD,GAAU,CAAC,SAAU,MAAO,cAAc,SAASua,EAAYxtE,GAC7D,IAAIxZ,EAAOwZ,EAAQ,EACfikF,EAjihBe,GAiihBJz9F,GA/hhBG,GA+hhByBA,EAE3Co0E,GAAYxyE,UAAUolF,GAAc,SAASza,GAC3C,IAAI/6D,EAASnT,KAAKwF,QAMlB,OALA2N,EAAO0jE,cAAcl2E,KAAK,CACxButE,SAAY6U,GAAY7U,EAAU,GAClCvsE,KAAQA,IAEVwR,EAAOyjE,aAAezjE,EAAOyjE,cAAgBwoB,EACtCjsF,MAKXi7D,GAAU,CAAC,OAAQ,SAAS,SAASua,EAAYxtE,GAC/C,IAAIkkF,EAAW,QAAUlkF,EAAQ,QAAU,IAE3C46D,GAAYxyE,UAAUolF,GAAc,WAClC,OAAO3oF,KAAKq/F,GAAU,GAAGl4F,QAAQ,OAKrCinE,GAAU,CAAC,UAAW,SAAS,SAASua,EAAYxtE,GAClD,IAAImkF,EAAW,QAAUnkF,EAAQ,GAAK,SAEtC46D,GAAYxyE,UAAUolF,GAAc,WAClC,OAAO3oF,KAAK42E,aAAe,IAAIb,GAAY/1E,MAAQA,KAAKs/F,GAAU,OAItEvpB,GAAYxyE,UAAUmzF,QAAU,WAC9B,OAAO12F,KAAKsQ,OAAO6wE,KAGrBpL,GAAYxyE,UAAUiN,KAAO,SAAS+9D,GACpC,OAAOvuE,KAAKsQ,OAAOi+D,GAAW7rE,QAGhCqzE,GAAYxyE,UAAU8sF,SAAW,SAAS9hB,GACxC,OAAOvuE,KAAK8b,UAAUtL,KAAK+9D,IAG7BwH,GAAYxyE,UAAUitF,UAAYzM,IAAS,SAASxG,EAAMnpE,GACxD,MAAmB,mBAARmpE,EACF,IAAIxH,GAAY/1E,MAElBA,KAAKoE,KAAI,SAAS+C,GACvB,OAAO23E,GAAW33E,EAAOo2E,EAAMnpE,SAInC2hE,GAAYxyE,UAAU+Y,OAAS,SAASiyD,GACtC,OAAOvuE,KAAKsQ,OAAO+hF,GAAOtP,GAAYxU,MAGxCwH,GAAYxyE,UAAUjD,MAAQ,SAASwT,EAAO9O,GAC5C8O,EAAQk4E,GAAUl4E,GAElB,IAAIX,EAASnT,KACb,OAAImT,EAAOyjE,eAAiB9iE,EAAQ,GAAK9O,EAAM,GACtC,IAAI+wE,GAAY5iE,IAErBW,EAAQ,EACVX,EAASA,EAAO+lF,WAAWplF,GAClBA,IACTX,EAASA,EAAO6jF,KAAKljF,IAEnB9O,IAAQc,IAEVqN,GADAnO,EAAMgnF,GAAUhnF,IACD,EAAImO,EAAO8jF,WAAWjyF,GAAOmO,EAAO8lF,KAAKj0F,EAAM8O,IAEzDX,IAGT4iE,GAAYxyE,UAAU41F,eAAiB,SAAS5qB,GAC9C,OAAOvuE,KAAK8b,UAAUs9E,UAAU7qB,GAAWzyD,WAG7Ci6D,GAAYxyE,UAAUG,QAAU,WAC9B,OAAO1D,KAAKi5F,KAAKhzB,IAInBuW,GAAWzG,GAAYxyE,WAAW,SAASwa,EAAM4qE,GAC/C,IAAI4W,EAAgB,qCAAqC9xF,KAAKk7E,GAC1D6W,EAAU,kBAAkB/xF,KAAKk7E,GACjC8W,EAAa5pB,GAAO2pB,EAAW,QAAwB,QAAd7W,EAAuB,QAAU,IAAOA,GACjF+W,EAAeF,GAAW,QAAQ/xF,KAAKk7E,GAEtC8W,IAGL5pB,GAAOtyE,UAAUolF,GAAc,WAC7B,IAAIxhF,EAAQnH,KAAKs2E,YACbliE,EAAOorF,EAAU,CAAC,GAAKl7F,UACvBq7F,EAASx4F,aAAiB4uE,GAC1B7H,EAAW95D,EAAK,GAChBwrF,EAAUD,GAAU95F,GAAQsB,GAE5B+oF,EAAc,SAAS/oF,GACzB,IAAIgM,EAASssF,EAAW/+F,MAAMm1E,GAAQ9G,GAAU,CAAC5nE,GAAQiN,IACzD,OAAQorF,GAAWnpB,EAAYljE,EAAO,GAAKA,GAGzCysF,GAAWL,GAAoC,mBAAZrxB,GAA6C,GAAnBA,EAAS5qE,SAExEq8F,EAASC,GAAU,GAErB,IAAIvpB,EAAWr2E,KAAKw2E,UAChBqpB,IAAa7/F,KAAKu2E,YAAYjzE,OAC9Bw8F,EAAcJ,IAAiBrpB,EAC/B0pB,EAAWJ,IAAWE,EAE1B,IAAKH,GAAgBE,EAAS,CAC5Bz4F,EAAQ44F,EAAW54F,EAAQ,IAAI4uE,GAAY/1E,MAC3C,IAAImT,EAAS4K,EAAKrd,MAAMyG,EAAOiN,GAE/B,OADAjB,EAAOojE,YAAY51E,KAAK,CAAEod,KAAQyrE,GAAMp1E,KAAQ,CAAC87E,GAAcliB,QAAWloE,IACnE,IAAIkwE,GAAc7iE,EAAQkjE,GAEnC,OAAIypB,GAAeC,EACVhiF,EAAKrd,MAAMV,KAAMoU,IAE1BjB,EAASnT,KAAKwpF,KAAK0G,GACZ4P,EAAeN,EAAUrsF,EAAOhM,QAAQ,GAAKgM,EAAOhM,QAAWgM,QAK1Ei7D,GAAU,CAAC,MAAO,OAAQ,QAAS,OAAQ,SAAU,YAAY,SAASua,GACxE,IAAI5qE,EAAOm0D,GAAWyW,GAClBqX,EAAY,0BAA0BvyF,KAAKk7E,GAAc,MAAQ,OACjE+W,EAAe,kBAAkBjyF,KAAKk7E,GAE1C9S,GAAOtyE,UAAUolF,GAAc,WAC7B,IAAIv0E,EAAO9P,UACX,GAAIo7F,IAAiB1/F,KAAKw2E,UAAW,CACnC,IAAIrvE,EAAQnH,KAAKmH,QACjB,OAAO4W,EAAKrd,MAAMmF,GAAQsB,GAASA,EAAQ,GAAIiN,GAEjD,OAAOpU,KAAKggG,IAAW,SAAS74F,GAC9B,OAAO4W,EAAKrd,MAAMmF,GAAQsB,GAASA,EAAQ,GAAIiN,UAMrDooE,GAAWzG,GAAYxyE,WAAW,SAASwa,EAAM4qE,GAC/C,IAAI8W,EAAa5pB,GAAO8S,GACxB,GAAI8W,EAAY,CACd,IAAItxF,EAAMsxF,EAAWp6F,KAAO,GACvBrE,GAAeG,KAAK+zE,GAAW/mE,KAClC+mE,GAAU/mE,GAAO,IAEnB+mE,GAAU/mE,GAAKxN,KAAK,CAAE0E,KAAQsjF,EAAY5qE,KAAQ0hF,QAItDvqB,GAAU2U,GAAa/jF,EAlthBA,GAkthB+BT,MAAQ,CAAC,CAC7DA,KAAQ,UACR0Y,KAAQjY,IAIViwE,GAAYxyE,UAAUiC,MAh9dtB,WACE,IAAI2N,EAAS,IAAI4iE,GAAY/1E,KAAKs2E,aAOlC,OANAnjE,EAAOojE,YAAc+B,GAAUt4E,KAAKu2E,aACpCpjE,EAAOwjE,QAAU32E,KAAK22E,QACtBxjE,EAAOyjE,aAAe52E,KAAK42E,aAC3BzjE,EAAO0jE,cAAgByB,GAAUt4E,KAAK62E,eACtC1jE,EAAO2jE,cAAgB92E,KAAK82E,cAC5B3jE,EAAO4jE,UAAYuB,GAAUt4E,KAAK+2E,WAC3B5jE,GAy8dT4iE,GAAYxyE,UAAUuY,QA97dtB,WACE,GAAI9b,KAAK42E,aAAc,CACrB,IAAIzjE,EAAS,IAAI4iE,GAAY/1E,MAC7BmT,EAAOwjE,SAAW,EAClBxjE,EAAOyjE,cAAe,OAEtBzjE,EAASnT,KAAKwF,SACPmxE,UAAY,EAErB,OAAOxjE,GAs7dT4iE,GAAYxyE,UAAU4D,MA36dtB,WACE,IAAI3G,EAAQR,KAAKs2E,YAAYnvE,QACzBmF,EAAMtM,KAAK22E,QACXgB,EAAQ9xE,GAAQrF,GAChBy/F,EAAU3zF,EAAM,EAChBygF,EAAYpV,EAAQn3E,EAAM8C,OAAS,EACnC0pB,EA8pIN,SAAiBlZ,EAAO9O,EAAKutF,GAC3B,IAAIp3E,GAAS,EACT7X,EAASivF,EAAWjvF,OAExB,OAAS6X,EAAQ7X,GAAQ,CACvB,IAAIif,EAAOgwE,EAAWp3E,GAClBg2D,EAAO5uD,EAAK4uD,KAEhB,OAAQ5uD,EAAK5gB,MACX,IAAK,OAAamS,GAASq9D,EAAM,MACjC,IAAK,YAAansE,GAAOmsE,EAAM,MAC/B,IAAK,OAAansE,EAAMuvE,GAAUvvE,EAAK8O,EAAQq9D,GAAO,MACtD,IAAK,YAAar9D,EAAQwgE,GAAUxgE,EAAO9O,EAAMmsE,IAGrD,MAAO,CAAEr9D,MAASA,EAAO9O,IAAOA,GA7qIrBk7F,CAAQ,EAAGnT,EAAW/sF,KAAK+2E,WAClCjjE,EAAQkZ,EAAKlZ,MACb9O,EAAMgoB,EAAKhoB,IACX1B,EAAS0B,EAAM8O,EACfqH,EAAQ8kF,EAAUj7F,EAAO8O,EAAQ,EACjC+uE,EAAY7iF,KAAK62E,cACjBspB,EAAatd,EAAUv/E,OACvBmrE,EAAW,EACX2xB,EAAY7rB,GAAUjxE,EAAQtD,KAAK82E,eAEvC,IAAKa,IAAWsoB,GAAWlT,GAAazpF,GAAU88F,GAAa98F,EAC7D,OAAO6iF,GAAiB3lF,EAAOR,KAAKu2E,aAEtC,IAAIpjE,EAAS,GAEb0oE,EACA,KAAOv4E,KAAYmrE,EAAW2xB,GAAW,CAMvC,IAHA,IAAIC,GAAa,EACbl5F,EAAQ3G,EAHZ2a,GAAS7O,KAKA+zF,EAAYF,GAAY,CAC/B,IAAI59E,EAAOsgE,EAAUwd,GACjBnyB,EAAW3rD,EAAK2rD,SAChBvsE,EAAO4gB,EAAK5gB,KACZ4vB,EAAW28C,EAAS/mE,GAExB,GA7zDY,GA6zDRxF,EACFwF,EAAQoqB,OACH,IAAKA,EAAU,CACpB,GAj0Da,GAi0DT5vB,EACF,SAASk6E,EAET,MAAMA,GAIZ1oE,EAAOs7D,KAActnE,EAEvB,OAAOgM,GAg4dT0iE,GAAOtyE,UAAUkwF,GAAKtD,GACtBta,GAAOtyE,UAAU0sF,MA1iQjB,WACE,OAAOA,GAAMjwF,OA0iQf61E,GAAOtyE,UAAU+8F,OA7gQjB,WACE,OAAO,IAAItqB,GAAch2E,KAAKmH,QAASnH,KAAKw2E,YA6gQ9CX,GAAOtyE,UAAUgJ,KAp/PjB,WACMvM,KAAK02E,aAAe5wE,IACtB9F,KAAK02E,WAAahzE,GAAQ1D,KAAKmH,UAEjC,IAAI0B,EAAO7I,KAAKy2E,WAAaz2E,KAAK02E,WAAWpzE,OAG7C,MAAO,CAAEuF,KAAQA,EAAM1B,MAFX0B,EAAO/C,EAAY9F,KAAK02E,WAAW12E,KAAKy2E,eAg/PtDZ,GAAOtyE,UAAUqmF,MA77PjB,SAAsBziF,GAIpB,IAHA,IAAIgM,EACAY,EAAS/T,KAEN+T,aAAkBqiE,IAAY,CACnC,IAAI5wE,EAAQywE,GAAaliE,GACzBvO,EAAMixE,UAAY,EAClBjxE,EAAMkxE,WAAa5wE,EACfqN,EACFkwD,EAASiT,YAAc9wE,EAEvB2N,EAAS3N,EAEX,IAAI69D,EAAW79D,EACfuO,EAASA,EAAOuiE,YAGlB,OADAjT,EAASiT,YAAcnvE,EAChBgM,GA66PT0iE,GAAOtyE,UAAUuY,QAt5PjB,WACE,IAAI3U,EAAQnH,KAAKs2E,YACjB,GAAInvE,aAAiB4uE,GAAa,CAChC,IAAIwqB,EAAUp5F,EAUd,OATInH,KAAKu2E,YAAYjzE,SACnBi9F,EAAU,IAAIxqB,GAAY/1E,QAE5BugG,EAAUA,EAAQzkF,WACVy6D,YAAY51E,KAAK,CACvBod,KAAQyrE,GACRp1E,KAAQ,CAAC0H,IACTkyD,QAAWloE,IAEN,IAAIkwE,GAAcuqB,EAASvgG,KAAKw2E,WAEzC,OAAOx2E,KAAKwpF,KAAK1tE,KAw4PnB+5D,GAAOtyE,UAAUi9F,OAAS3qB,GAAOtyE,UAAUoyE,QAAUE,GAAOtyE,UAAU4D,MAv3PtE,WACE,OAAOg/E,GAAiBnmF,KAAKs2E,YAAat2E,KAAKu2E,cAy3PjDV,GAAOtyE,UAAUgB,MAAQsxE,GAAOtyE,UAAUb,KAEtC4wE,KACFuC,GAAOtyE,UAAU+vE,IAj+PnB,WACE,OAAOtzE,OAk+PF61E,GAMD9D,GAiBCjF,KAENA,GAAW1wB,QAAUt/B,IAAGA,EAAIA,GAE7B+vD,GAAY/vD,EAAIA,IAIhB9H,GAAK8H,EAAIA,KAEX3b,KAAKnB,MCtzhBP,GADsBJ,SAASs5C,cAAc,mBAC1B,CACf,MAAMunD,EAAa7gG,SAASkO,iBAAiB,gBAC7C,GAAI2yF,EACA,IAAK,IAAI17F,EAAI,EAAGA,EAAI07F,EAAWn9F,OAAQyB,IAAK,CACxC,MAAM27F,EAAaD,EAAW17F,GACxB47F,EAAeD,EAAWxnD,cAAc,iBAQ9C,SAAS0nD,KACAF,EAAWp+C,UAAU75C,SAAS,QAI/Bi4F,EAAWp8E,MAAMsP,OAAS,GAAG8sE,EAAWlsC,iBAHxCksC,EAAWp8E,MAAMsP,OAAS,GAT9B+sE,IACAC,KACAD,EAAa3wF,iBAAiB,SAAS,KACnC0wF,EAAWp+C,UAAU38B,OAAO,QAC5Bi7E,UAepB,GAAIhhG,SAASs5C,cAAc,uBAAwB,CAE/C,MAAM2nD,EAAmB,GAAGvgG,MAAMa,KAAKvB,SAASkO,iBAAiB,qDAkBjE,SAASgzF,GAAeC,EAAW,GAAIxrF,GAAU,GAG7C,IAAIyrF,EAAqBH,EAAiBvwF,QAAO9O,GAAQA,EAAK+T,UAASnR,KAAI5C,GAAQA,EAAK2F,QACpFoO,EACAyrF,EAAmBrgG,KAAKogG,GAGxBC,EAAqBA,EAAmB1wF,QAAOuiC,GAAKA,IAAMkuD,IAG9DC,EAAqBtH,QAAKsH,GAiElC,SAAwB7yF,EAAKhH,GACzB,GAAI85F,QAAQC,aAAc,CACtB,MAAMC,EAAe,IAAIC,gBAAgB,IACzCD,EAAa7+E,IAAInU,EAAKhH,GACtB,MAAMk6F,EAASthG,OAAOgV,SAASouB,SAAW,KAAOpjC,OAAOgV,SAAS0wB,KAAO1lC,OAAOgV,SAASusF,SAAW,IAAMH,EAAargG,WACtHf,OAAOkhG,QAAQC,aAAa,CAAE3jB,KAAM8jB,GAAU,GAAIA,IApElDE,CAAe,MAAOP,EAAmBnzF,KAAK,MAE9CgzF,EAAiB9sD,SAAQvyC,IACrBA,EAAK+T,QAAUyrF,EAAmBtlB,SAASl6E,EAAK2F,UAGpDq6F,GAAYR,GAchB,SAASQ,GAAYC,EAAa,IAC9B,IAAI5jD,EAAkB,IACL,GAAGv9C,MAAMa,KAAKvB,SAASkO,iBAAiB,2CAChDimC,SAAQ/a,IACb,MAAM+nE,EAAW/nE,EAAE0oE,QAAkB,SAC/Bl8E,EAA6B,IAAtBi8E,EAAWn+F,QAAgBm+F,EAAW/lB,SAASqlB,IAGhE,SAAyBn0D,EAASpnB,GAAO,GACjCA,EAEIonB,EAAQ0V,UAAU75C,SAAS,uBAAyBmkC,EAAQ0V,UAAU75C,SAAS,sBAC3Eo1C,EAAkB,IAClBA,GAAmB,KAEvBjR,EAAQtoB,MAAMu5B,gBAAkBA,EAAkB,IAClDjR,EAAQ0V,UAAU5kC,OAAO,qBACzBkvB,EAAQ0V,UAAUjnC,IAAI,sBACtBqe,uBAAsB,KAClBkT,EAAQ0V,UAAU5kC,OAAO,0BAI7BkvB,EAAQtoB,MAAMu5B,gBAAkB,GAK/BjR,EAAQ0V,UAAU75C,SAAS,wBAC5BmkC,EAAQtoB,MAAMu5B,gBAAkB,GAChCjR,EAAQ0V,UAAUjnC,IAAI,sBACtBuE,WAAW+hF,EAAS,MAG5B,SAASA,IACD/0D,EAAQ0V,UAAU75C,SAAS,wBAC3BmkC,EAAQ0V,UAAUjnC,IAAI,qBACtBuxB,EAAQ0V,UAAU5kC,OAAO,wBA/BjCkjF,CAAgB5nE,EAAEsY,cAAe9rB,MAvDzCq7E,EAAiB9sD,SAAQvyC,IACrBA,EAAKwO,iBAAiB,UAAU,KAAQ8wF,GAAet/F,EAAK2F,MAAO3F,EAAK+T,eAG5E3V,SAASkO,iBAAiB,yCAAyCimC,SAAQvyC,GAAQA,EAAKwO,iBAAiB,SAAUvD,IAC/GA,EAAEwc,iBACF43E,EAAiB9sD,SAAQvyC,IACrBA,EAAK+T,SAAU,KAEnBurF,KAEAlhG,SAASgiG,cAAc,IAAIC,YAAY,eAAgB,CAAEn1E,OAAQ,iBA0BrE,WACI,MAAMo1E,EA8Dd,SAA4Bz8F,EAAM49B,EAAMljC,OAAOgV,SAASK,MACpD/P,EAAOA,EAAKa,QAAQ,UAAW,QAC/B,IAA6DU,EAAjD,IAAImD,OAAO,OAAS1E,EAAO,qBAAsC8H,KAAK81B,GAClF,OAAKr8B,EAEAA,EAAQ,GAENm7F,mBAAmBn7F,EAAQ,GAAGV,QAAQ,MAAO,MADzC,GAFA,KAlEO87F,CAAmB,OACjC,GAAIF,GAASA,EAAMx+F,OAAQ,CACvB,MAAM09F,EAAqBc,EAAMv6F,MAAM,KAEvCs5F,EAAiB9sD,SAAQvyC,IACrBA,EAAK+T,QAAUyrF,EAAmBtlB,SAASl6E,EAAK2F,UAGpDq6F,GAAYR,IAhCpBiB,IC7CJ,WACI,MAAMC,EAAetiG,SAASs5C,cAAc,qBACtCipD,EAAcviG,SAASs5C,cAAc,iBACrCkpD,EAAexiG,SAASs5C,cAAc,uBAE5CipD,EAAY79E,MAAMsP,OAAS,OAC3B,MAAMyuE,EAAiBF,EAAY/xD,aACnC+xD,EAAY79E,MAAMsP,OAAS,IAC3BsuE,EAAalyF,iBAAiB,SAAS,KAC/BmyF,EAAY7/C,UAAU75C,SAAS,kBAC/B05F,EAAY7/C,UAAU5kC,OAAO,iBAC7B0kF,EAAa9/C,UAAU5kC,OAAO,cAC9BykF,EAAY79E,MAAMsP,OAAS,MAG3BuuE,EAAY7/C,UAAUjnC,IAAI,iBAC1B+mF,EAAa9/C,UAAUjnC,IAAI,cAC3B8mF,EAAY79E,MAAMsP,OAAS,GAAGyuE,UA+C1CC,GA3CA,WACI,MAAMC,EAAc3iG,SAASs5C,cAAc,qBACrCspD,EAAe5iG,SAASs5C,cAAc,sBACtCupD,EAAa7iG,SAASs5C,cAAc,gBAC1CqpD,EAAYvyF,iBAAiB,SAAS,KAC9ByyF,EAAWngD,UAAU75C,SAAS,oBAC9Bg6F,EAAWngD,UAAU5kC,OAAO,oBAG5B+kF,EAAWngD,UAAUjnC,IAAI,oBAqCrC,WACI,MAAMqnF,EAAkB3iG,OAAO4iG,QACzBr9E,EAAO1lB,SAAS0lB,KACtBA,EAAKhB,MAAMqO,SAAW,QACtBrN,EAAKhB,MAAMvU,IAAM,IAAI2yF,MACrBp9E,EAAKo8E,QAAgB,OAAIgB,EAAgB5hG,WAxCrC8hG,MAEJJ,EAAaxyF,iBAAiB,SAAS,KAC/ByyF,EAAWngD,UAAU75C,SAAS,oBAC9Bg6F,EAAWngD,UAAU5kC,OAAO,oBAG5B+kF,EAAWngD,UAAUjnC,IAAI,oBAmCrC,WACI,MAAMiK,EAAO1lB,SAAS0lB,KAChBo9E,EAAkB1vE,WAAW1N,EAAKo8E,QAAgB,QACxDp8E,EAAKhB,MAAMqO,SAAW,GACtBrN,EAAKhB,MAAMvU,IAAM,GACjBhQ,OAAO4qC,SAAS,EAAG+3D,GAtCfG,MAwBRC,GArBA,WACI,MAAMC,EAAqBnjG,SAASs5C,cAAc,0BAC5C8pD,EAA6BpjG,SAASs5C,cAAc,oCAE1D8pD,EAA2B1+E,MAAMsP,OAAS,OAC1C,MAAMyuE,EAAiBW,EAA2B5yD,aAClD4yD,EAA2B1+E,MAAMsP,OAAS,IAC1CmvE,EAAmB/yF,iBAAiB,SAAS,KACrCgzF,EAA2B1gD,UAAU75C,SAAS,kBAC9Cs6F,EAAmBzgD,UAAU5kC,OAAO,iBACpCslF,EAA2B1gD,UAAU5kC,OAAO,iBAC5CslF,EAA2B1+E,MAAMsP,OAAS,MAG1CmvE,EAAmBzgD,UAAUjnC,IAAI,iBACjC2nF,EAA2B1gD,UAAUjnC,IAAI,iBACzC2nF,EAA2B1+E,MAAMsP,OAAS,GAAGyuE,UAMzDY,GCjEA,MAAMC,GAAWtjG,SAASkO,iBAAiB,iBACrCq1F,GAAUvjG,SAASs5C,cAAc,mBACvC,IAAK,IAAI13C,KAAQ0hG,GAAU,CACvB,MACME,EAAgB,UADT5hG,EAAKkgG,QAAgB,eAGlClgG,EAAKwO,iBAAiB,SAAUvD,IAC5BA,EAAEwc,iBACFrpB,SAAS0lB,KAAKg9B,UAAU38B,OAAOy9E,MAGnCD,GAAQnzF,iBAAiB,SAAS,KAC9BpQ,SAAS0lB,KAAKg9B,UAAU5kC,OAAO0lF,MAWvCxjG,SAASoQ,iBAAiB,eAR1B,SAAoBvD,GAChB,MAAM22F,EAAgB,UAAU32F,EAAEigB,eAClC9sB,SAAS0lB,KAAKg9B,UAAUjnC,IAAI+nF,MAOhCxjG,SAASoQ,iBAAiB,gBAL1B,SAAqBvD,GACjB,MAAM22F,EAAgB,UAAU32F,EAAEigB,eAClC9sB,SAAS0lB,KAAKg9B,UAAU5kC,OAAO0lF,uBCLjC,IAUSr3D,EAEHs3D,EAPA1jG,WAKGosC,EALsBq5B,EAOzBi+B,EAAQtjG,OAAOsjG,OAAS,IAE5BA,EAAS,WAEL,IAAIC,EAAc,EAElB,SAASD,EAAMz2D,EAAShJ,GAEpB,IAAc2/D,EAAVzmF,EAAI9c,KAER8c,EAAEk1D,SAAW,CACTwxB,eAAe,EACfC,gBAAgB,EAChBC,aAAc33D,EAAEa,GAChB+2D,WAAY53D,EAAEa,GACdg3D,QAAQ,EACRC,SAAU,KACVC,UAAW,mFACXC,UAAW,2EACXC,UAAU,EACVC,cAAe,IACfC,YAAY,EACZC,cAAe,OACfC,QAAS,OACTC,aAAc,SAASC,EAAQniG,GAC3B,OAAO4pC,EAAE,4BAA4BxpC,KAAKJ,EAAI,IAElDoiG,MAAM,EACNC,UAAW,aACXC,WAAW,EACXxuE,OAAQ,SACRyuE,aAAc,IACdC,MAAM,EACNC,eAAe,EACfC,eAAe,EACfC,UAAU,EACVC,aAAc,EACdC,SAAU,WACVC,aAAa,EACbC,cAAc,EACdC,cAAc,EACdC,kBAAkB,EAClBC,UAAW,SACXC,WAAY,KACZC,KAAM,EACNC,KAAK,EACL9hD,MAAO,GACP+hD,aAAc,EACdC,aAAc,EACdC,eAAgB,EAChB5pE,MAAO,IACP6pE,OAAO,EACPC,cAAc,EACdC,WAAW,EACXC,eAAgB,EAChBC,QAAQ,EACRC,cAAc,EACdC,eAAe,EACfC,UAAU,EACVC,iBAAiB,EACjBC,gBAAgB,EAChBjvE,OAAQ,KAGZta,EAAEwpF,SAAW,CACTC,WAAW,EACXC,UAAU,EACVC,cAAe,KACfC,iBAAkB,EAClBC,YAAa,KACbC,aAAc,EACdh/C,UAAW,EACXi/C,MAAO,KACPC,UAAW,KACXC,WAAY,KACZC,UAAW,EACXC,WAAY,KACZC,WAAY,KACZC,WAAW,EACXC,WAAY,KACZC,WAAY,KACZC,YAAa,KACbC,QAAS,KACTC,SAAS,EACTC,YAAa,EACbC,UAAW,KACXC,SAAS,EACTC,MAAO,KACPC,YAAa,GACbC,mBAAmB,EACnBC,WAAW,GAGfh8D,EAAE5mC,OAAO2X,EAAGA,EAAEwpF,UAEdxpF,EAAEkrF,iBAAmB,KACrBlrF,EAAEmrF,SAAW,KACbnrF,EAAEorF,SAAW,KACbprF,EAAEqrF,YAAc,GAChBrrF,EAAEsrF,mBAAqB,GACvBtrF,EAAEurF,gBAAiB,EACnBvrF,EAAEwrF,UAAW,EACbxrF,EAAEyrF,aAAc,EAChBzrF,EAAE2c,OAAS,SACX3c,EAAE0rF,QAAS,EACX1rF,EAAE2rF,aAAe,KACjB3rF,EAAEuoF,UAAY,KACdvoF,EAAE4rF,SAAW,EACb5rF,EAAE6rF,aAAc,EAChB7rF,EAAE8rF,QAAU78D,EAAEa,GACd9vB,EAAE+rF,aAAe,KACjB/rF,EAAEgsF,cAAgB,KAClBhsF,EAAEisF,eAAiB,KACnBjsF,EAAEksF,iBAAmB,mBACrBlsF,EAAEmsF,YAAc,EAChBnsF,EAAEosF,YAAc,KAEhB3F,EAAex3D,EAAEa,GAASrqB,KAAK,UAAY,GAE3CzF,EAAE1X,QAAU2mC,EAAE5mC,OAAO,GAAI2X,EAAEk1D,SAAUpuC,EAAU2/D,GAE/CzmF,EAAE8pF,aAAe9pF,EAAE1X,QAAQ2/F,aAE3BjoF,EAAEksB,iBAAmBlsB,EAAE1X,aAEW,IAAvBxF,SAASupG,WAChBrsF,EAAE2c,OAAS,YACX3c,EAAEksF,iBAAmB,4BACmB,IAA1BppG,SAASwpG,eACvBtsF,EAAE2c,OAAS,eACX3c,EAAEksF,iBAAmB,0BAGzBlsF,EAAEusF,SAAWt9D,EAAET,MAAMxuB,EAAEusF,SAAUvsF,GACjCA,EAAEwsF,cAAgBv9D,EAAET,MAAMxuB,EAAEwsF,cAAexsF,GAC3CA,EAAEysF,iBAAmBx9D,EAAET,MAAMxuB,EAAEysF,iBAAkBzsF,GACjDA,EAAE0sF,YAAcz9D,EAAET,MAAMxuB,EAAE0sF,YAAa1sF,GACvCA,EAAE2sF,aAAe19D,EAAET,MAAMxuB,EAAE2sF,aAAc3sF,GACzCA,EAAE4sF,cAAgB39D,EAAET,MAAMxuB,EAAE4sF,cAAe5sF,GAC3CA,EAAE6sF,YAAc59D,EAAET,MAAMxuB,EAAE6sF,YAAa7sF,GACvCA,EAAE8sF,aAAe79D,EAAET,MAAMxuB,EAAE8sF,aAAc9sF,GACzCA,EAAE+sF,YAAc99D,EAAET,MAAMxuB,EAAE+sF,YAAa/sF,GACvCA,EAAEgtF,WAAa/9D,EAAET,MAAMxuB,EAAEgtF,WAAYhtF,GAErCA,EAAEwmF,YAAcA,IAKhBxmF,EAAEitF,SAAW,4BAGbjtF,EAAEktF,sBACFltF,EAAE1Z,MAAK,GAIX,OAAOigG,MAIL9/F,UAAU0mG,YAAc,WAClBjqG,KAENsnG,YAAY92F,KAAK,iBAAiBuB,KAAK,CACrC,cAAe,UAChBvB,KAAK,4BAA4BuB,KAAK,CACrCysB,SAAY,OAKpB6kE,EAAM9/F,UAAU2mG,SAAW7G,EAAM9/F,UAAU4mG,SAAW,SAASC,EAAQjvF,EAAOkvF,GAE1E,IAAIvtF,EAAI9c,KAER,GAAsB,oBAClBqqG,EAAYlvF,EACZA,EAAQ,UACL,GAAIA,EAAQ,GAAMA,GAAS2B,EAAEsqF,WAChC,OAAO,EAGXtqF,EAAEwtF,SAEoB,mBACJ,IAAVnvF,GAAoC,IAArB2B,EAAEyqF,QAAQjkG,OACzByoC,EAAEq+D,GAAQ35E,SAAS3T,EAAEwqF,aACd+C,EACPt+D,EAAEq+D,GAAQh6E,aAAatT,EAAEyqF,QAAQ/iG,GAAG2W,IAEpC4wB,EAAEq+D,GAAQz5E,YAAY7T,EAAEyqF,QAAQ/iG,GAAG2W,KAGrB,IAAdkvF,EACAt+D,EAAEq+D,GAAQ15E,UAAU5T,EAAEwqF,aAEtBv7D,EAAEq+D,GAAQ35E,SAAS3T,EAAEwqF,aAI7BxqF,EAAEyqF,QAAUzqF,EAAEwqF,YAAY1sF,SAAS5a,KAAKoF,QAAQs+C,OAEhD5mC,EAAEwqF,YAAY1sF,SAAS5a,KAAKoF,QAAQs+C,OAAOzzB,SAE3CnT,EAAEwqF,YAAYp3E,OAAOpT,EAAEyqF,SAEvBzqF,EAAEyqF,QAAQrjG,MAAK,SAASiX,EAAOyxB,GAC3Bb,EAAEa,GAAS76B,KAAK,mBAAoBoJ,MAGxC2B,EAAE+rF,aAAe/rF,EAAEyqF,QAEnBzqF,EAAEytF,UAINlH,EAAM9/F,UAAUinG,cAAgB,WAC5B,IAAI1tF,EAAI9c,KACR,GAA+B,IAA3B8c,EAAE1X,QAAQsgG,eAAmD,IAA7B5oF,EAAE1X,QAAQq+F,iBAAkD,IAAvB3mF,EAAE1X,QAAQ+gG,SAAoB,CACnG,IAAIsE,EAAe3tF,EAAEyqF,QAAQ/iG,GAAGsY,EAAE8pF,cAAc8D,aAAY,GAC5D5tF,EAAE8qF,MAAMxrE,QAAQ,CACZxI,OAAQ62E,GACT3tF,EAAE1X,QAAQ22B,SAIrBsnE,EAAM9/F,UAAUonG,aAAe,SAASC,EAAYzmG,GAEhD,IAAI0mG,EAAY,GACZ/tF,EAAI9c,KAER8c,EAAE0tF,iBAEoB,IAAlB1tF,EAAE1X,QAAQogG,MAAuC,IAAvB1oF,EAAE1X,QAAQ+gG,WACpCyE,GAAcA,IAEU,IAAxB9tF,EAAEgrF,mBACyB,IAAvBhrF,EAAE1X,QAAQ+gG,SACVrpF,EAAEwqF,YAAYlrE,QAAQ,CAClBxE,KAAMgzE,GACP9tF,EAAE1X,QAAQ22B,MAAOjf,EAAE1X,QAAQ6wB,OAAQ9xB,GAEtC2Y,EAAEwqF,YAAYlrE,QAAQ,CAClBrsB,IAAK66F,GACN9tF,EAAE1X,QAAQ22B,MAAOjf,EAAE1X,QAAQ6wB,OAAQ9xB,IAKjB,IAArB2Y,EAAEurF,iBACoB,IAAlBvrF,EAAE1X,QAAQogG,MACV1oF,EAAE6pF,aAAgB7pF,EAAa,aAEnCivB,EAAE,CACE++D,UAAWhuF,EAAE6pF,cACdvqE,QAAQ,CACP0uE,UAAWF,GACZ,CACCnyE,SAAU3b,EAAE1X,QAAQ22B,MACpB9F,OAAQnZ,EAAE1X,QAAQ6wB,OAClB0C,KAAM,SAASxM,GACXA,EAAMnmB,KAAK2vB,KAAKxJ,IACW,IAAvBrP,EAAE1X,QAAQ+gG,UACV0E,EAAU/tF,EAAEmrF,UAAY,aACpB97E,EAAM,WACVrP,EAAEwqF,YAAY9iF,IAAIqmF,KAElBA,EAAU/tF,EAAEmrF,UAAY,iBACpB97E,EAAM,MACVrP,EAAEwqF,YAAY9iF,IAAIqmF,KAG1B5vE,SAAU,WACF92B,GACAA,EAAShD,YAOrB2b,EAAE8jF,kBACFgK,EAAa5kG,KAAK2vB,KAAKi1E,IAEI,IAAvB9tF,EAAE1X,QAAQ+gG,SACV0E,EAAU/tF,EAAEmrF,UAAY,eAAiB2C,EAAa,gBAEtDC,EAAU/tF,EAAEmrF,UAAY,mBAAqB2C,EAAa,WAE9D9tF,EAAEwqF,YAAY9iF,IAAIqmF,GAEd1mG,GACAyb,YAAW,WAEP9C,EAAEiuF,oBAEF5mG,EAAShD,SACV2b,EAAE1X,QAAQ22B,SAS7BsnE,EAAM9/F,UAAUynG,aAAe,WAE3B,IAAIluF,EAAI9c,KACJ6jG,EAAW/mF,EAAE1X,QAAQy+F,SAMzB,OAJKA,GAAyB,OAAbA,IACbA,EAAW93D,EAAE83D,GAAUrvF,IAAIsI,EAAE8rF,UAG1B/E,GAIXR,EAAM9/F,UAAUsgG,SAAW,SAAS1oF,GAEhC,IACI0oF,EADI7jG,KACSgrG,eAEC,OAAbnH,GAAyC,iBAAbA,GAC7BA,EAAS3/F,MAAK,WACV,IAAIuB,EAASsmC,EAAE/rC,MAAMirG,MAAM,YACvBxlG,EAAOsiG,WACPtiG,EAAOylG,aAAa/vF,GAAO,OAO3CkoF,EAAM9/F,UAAUq9F,gBAAkB,SAASl9C,GAEvC,IAAI5mC,EAAI9c,KACJi0D,EAAa,IAEM,IAAnBn3C,EAAE1X,QAAQu/F,KACV1wC,EAAWn3C,EAAEisF,gBAAkBjsF,EAAEgsF,cAAgB,IAAMhsF,EAAE1X,QAAQ22B,MAAQ,MAAQjf,EAAE1X,QAAQg/F,QAE3FnwC,EAAWn3C,EAAEisF,gBAAkB,WAAajsF,EAAE1X,QAAQ22B,MAAQ,MAAQjf,EAAE1X,QAAQg/F,SAG7D,IAAnBtnF,EAAE1X,QAAQu/F,KACV7nF,EAAEwqF,YAAY9iF,IAAIyvC,GAElBn3C,EAAEyqF,QAAQ/iG,GAAGk/C,GAAOl/B,IAAIyvC,IAKhCovC,EAAM9/F,UAAU8lG,SAAW,WAEvB,IAAIvsF,EAAI9c,KAER8c,EAAEwsF,gBAEGxsF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,eAC1B5oF,EAAE2pF,cAAgBj/C,YAAa1qC,EAAEysF,iBAAkBzsF,EAAE1X,QAAQ6+F,iBAKrEZ,EAAM9/F,UAAU+lG,cAAgB,WAE5B,IAAIxsF,EAAI9c,KAEJ8c,EAAE2pF,eACFl/C,cAAczqC,EAAE2pF,gBAKxBpD,EAAM9/F,UAAUgmG,iBAAmB,WAE/B,IAAIzsF,EAAI9c,KACJmrG,EAAUruF,EAAE8pF,aAAe9pF,EAAE1X,QAAQugG,eAEnC7oF,EAAE0rF,QAAW1rF,EAAEyrF,aAAgBzrF,EAAEwrF,YAEP,IAAvBxrF,EAAE1X,QAAQ0/F,WAEU,IAAhBhoF,EAAE8qC,WAAqB9qC,EAAE8pF,aAAe,IAAU9pF,EAAEsqF,WAAa,EAClEtqF,EAAE8qC,UAAY,EAGQ,IAAhB9qC,EAAE8qC,YAERujD,EAAUruF,EAAE8pF,aAAe9pF,EAAE1X,QAAQugG,eAEhC7oF,EAAE8pF,aAAe,GAAM,IACxB9pF,EAAE8qC,UAAY,KAO1B9qC,EAAEouF,aAAcC,KAMxB9H,EAAM9/F,UAAU6nG,YAAc,WAE1B,IAAItuF,EAAI9c,MAEiB,IAArB8c,EAAE1X,QAAQw+F,SAEV9mF,EAAEoqF,WAAan7D,EAAEjvB,EAAE1X,QAAQ0+F,WAAWnlE,SAAS,eAC/C7hB,EAAEmqF,WAAal7D,EAAEjvB,EAAE1X,QAAQ2+F,WAAWplE,SAAS,eAE3C7hB,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,cAEzB5oF,EAAEoqF,WAAWloE,YAAY,gBAAgBrB,WAAW,wBACpD7gB,EAAEmqF,WAAWjoE,YAAY,gBAAgBrB,WAAW,wBAEhD7gB,EAAEitF,SAASt8F,KAAKqP,EAAE1X,QAAQ0+F,YAC1BhnF,EAAEoqF,WAAWx2E,UAAU5T,EAAE1X,QAAQs+F,cAGjC5mF,EAAEitF,SAASt8F,KAAKqP,EAAE1X,QAAQ2+F,YAC1BjnF,EAAEmqF,WAAWx2E,SAAS3T,EAAE1X,QAAQs+F,eAGT,IAAvB5mF,EAAE1X,QAAQ0/F,UACVhoF,EAAEoqF,WACGvoE,SAAS,kBACT5sB,KAAK,gBAAiB,SAK/B+K,EAAEoqF,WAAW7rF,IAAKyB,EAAEmqF,YAEftoE,SAAS,gBACT5sB,KAAK,CACF,gBAAiB,OACjBysB,SAAY,SAShC6kE,EAAM9/F,UAAU8nG,UAAY,WAExB,IACIlpG,EAAGmpG,EADHxuF,EAAI9c,KAGR,IAAuB,IAAnB8c,EAAE1X,QAAQm/F,MAAiBznF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,aAAc,CAMlE,IAJA5oF,EAAE8rF,QAAQjqE,SAAS,gBAEnB2sE,EAAMv/D,EAAE,UAAUpN,SAAS7hB,EAAE1X,QAAQo/F,WAEhCriG,EAAI,EAAGA,GAAK2a,EAAEyuF,cAAeppG,GAAK,EACnCmpG,EAAIp7E,OAAO6b,EAAE,UAAU7b,OAAOpT,EAAE1X,QAAQi/F,aAAaljG,KAAKnB,KAAM8c,EAAG3a,KAGvE2a,EAAE+pF,MAAQyE,EAAI76E,SAAS3T,EAAE1X,QAAQu+F,YAEjC7mF,EAAE+pF,MAAMr2F,KAAK,MAAMjM,QAAQo6B,SAAS,kBAM5C0kE,EAAM9/F,UAAUioG,SAAW,WAEvB,IAAI1uF,EAAI9c,KAER8c,EAAEyqF,QACEzqF,EAAE8rF,QACGhuF,SAAUkC,EAAE1X,QAAQs+C,MAAQ,uBAC5B/kB,SAAS,eAElB7hB,EAAEsqF,WAAatqF,EAAEyqF,QAAQjkG,OAEzBwZ,EAAEyqF,QAAQrjG,MAAK,SAASiX,EAAOyxB,GAC3Bb,EAAEa,GACG76B,KAAK,mBAAoBoJ,GACzBoH,KAAK,kBAAmBwpB,EAAEa,GAAS76B,KAAK,UAAY,OAG7D+K,EAAE8rF,QAAQjqE,SAAS,gBAEnB7hB,EAAEwqF,YAAgC,IAAjBxqF,EAAEsqF,WACfr7D,EAAE,8BAA8Btb,SAAS3T,EAAE8rF,SAC3C9rF,EAAEyqF,QAAQtgE,QAAQ,8BAA8BlzB,SAEpD+I,EAAE8qF,MAAQ9qF,EAAEwqF,YAAY9/E,KACpB,6BAA6BzT,SACjC+I,EAAEwqF,YAAY9iF,IAAI,UAAW,IAEA,IAAzB1H,EAAE1X,QAAQ8+F,aAAkD,IAA3BpnF,EAAE1X,QAAQygG,eAC3C/oF,EAAE1X,QAAQugG,eAAiB,GAG/B55D,EAAE,iBAAkBjvB,EAAE8rF,SAASp0F,IAAI,SAASmqB,SAAS,iBAErD7hB,EAAE2uF,gBAEF3uF,EAAEsuF,cAEFtuF,EAAEuuF,YAEFvuF,EAAE4uF,aAGF5uF,EAAE6uF,gBAA0C,iBAAnB7uF,EAAE8pF,aAA4B9pF,EAAE8pF,aAAe,IAE5C,IAAxB9pF,EAAE1X,QAAQq/F,WACV3nF,EAAE8qF,MAAMjpE,SAAS,cAKzB0kE,EAAM9/F,UAAUqoG,UAAY,WAExB,IAAcxiG,EAAGC,EAAGwiG,EAAGC,EAAWC,EAAaC,EAAeC,EAA1DnvF,EAAI9c,KAKR,GAHA8rG,EAAYlsG,SAASomB,yBACrBgmF,EAAiBlvF,EAAE8rF,QAAQhuF,WAExBkC,EAAE1X,QAAQmgG,KAAO,EAAG,CAOnB,IALA0G,EAAmBnvF,EAAE1X,QAAQqgG,aAAe3oF,EAAE1X,QAAQmgG,KACtDwG,EAAc/lG,KAAK2vB,KACfq2E,EAAe1oG,OAAS2oG,GAGxB7iG,EAAI,EAAGA,EAAI2iG,EAAa3iG,IAAI,CAC5B,IAAIs6C,EAAQ9jD,SAAS0C,cAAc,OACnC,IAAI+G,EAAI,EAAGA,EAAIyT,EAAE1X,QAAQmgG,KAAMl8F,IAAK,CAChC,IAAI6iG,EAAMtsG,SAAS0C,cAAc,OACjC,IAAIupG,EAAI,EAAGA,EAAI/uF,EAAE1X,QAAQqgG,aAAcoG,IAAK,CACxC,IAAIpmG,EAAU2D,EAAI6iG,GAAqB5iG,EAAIyT,EAAE1X,QAAQqgG,aAAgBoG,GACjEG,EAAeroG,IAAI8B,IACnBymG,EAAIvpG,YAAYqpG,EAAeroG,IAAI8B,IAG3Ci+C,EAAM/gD,YAAYupG,GAEtBJ,EAAUnpG,YAAY+gD,GAG1B5mC,EAAE8rF,QAAQlzF,QAAQwa,OAAO47E,GACzBhvF,EAAE8rF,QAAQhuF,WAAWA,WAAWA,WAC3B4J,IAAI,CACDgN,MAAS,IAAM1U,EAAE1X,QAAQqgG,aAAgB,IACzClhF,QAAW,mBAO3B8+E,EAAM9/F,UAAU4oG,gBAAkB,SAASnnF,EAASonF,GAEhD,IACIC,EAAYC,EAAkBC,EAD9BzvF,EAAI9c,KAC0CwsG,GAAoB,EAClEC,EAAc3vF,EAAE8rF,QAAQp3E,QACxBy3E,EAAclpG,OAAOmxC,YAAcnF,EAAEhsC,QAAQyxB,QAUjD,GARoB,WAAhB1U,EAAEuoF,UACFkH,EAAiBtD,EACM,WAAhBnsF,EAAEuoF,UACTkH,EAAiBE,EACM,QAAhB3vF,EAAEuoF,YACTkH,EAAiBvmG,KAAK2yC,IAAIswD,EAAawD,IAGtC3vF,EAAE1X,QAAQkgG,YACXxoF,EAAE1X,QAAQkgG,WAAWhiG,QACI,OAAzBwZ,EAAE1X,QAAQkgG,WAAqB,CAI/B,IAAK+G,KAFLC,EAAmB,KAEAxvF,EAAEqrF,YACbrrF,EAAEqrF,YAAYnnG,eAAeqrG,MACU,IAAnCvvF,EAAEksB,iBAAiBi8D,YACfsH,EAAiBzvF,EAAEqrF,YAAYkE,KAC/BC,EAAmBxvF,EAAEqrF,YAAYkE,IAGjCE,EAAiBzvF,EAAEqrF,YAAYkE,KAC/BC,EAAmBxvF,EAAEqrF,YAAYkE,KAMxB,OAArBC,EAC2B,OAAvBxvF,EAAEkrF,kBACEsE,IAAqBxvF,EAAEkrF,kBAAoBoE,KAC3CtvF,EAAEkrF,iBACEsE,EAC2C,YAA3CxvF,EAAEsrF,mBAAmBkE,GACrBxvF,EAAE4vF,QAAQJ,IAEVxvF,EAAE1X,QAAU2mC,EAAE5mC,OAAO,GAAI2X,EAAEksB,iBACvBlsB,EAAEsrF,mBACEkE,KACQ,IAAZtnF,IACAlI,EAAE8pF,aAAe9pF,EAAE1X,QAAQ2/F,cAE/BjoF,EAAE+jD,QAAQ77C,IAEdwnF,EAAoBF,IAGxBxvF,EAAEkrF,iBAAmBsE,EAC0B,YAA3CxvF,EAAEsrF,mBAAmBkE,GACrBxvF,EAAE4vF,QAAQJ,IAEVxvF,EAAE1X,QAAU2mC,EAAE5mC,OAAO,GAAI2X,EAAEksB,iBACvBlsB,EAAEsrF,mBACEkE,KACQ,IAAZtnF,IACAlI,EAAE8pF,aAAe9pF,EAAE1X,QAAQ2/F,cAE/BjoF,EAAE+jD,QAAQ77C,IAEdwnF,EAAoBF,GAGG,OAAvBxvF,EAAEkrF,mBACFlrF,EAAEkrF,iBAAmB,KACrBlrF,EAAE1X,QAAU0X,EAAEksB,kBACE,IAAZhkB,IACAlI,EAAE8pF,aAAe9pF,EAAE1X,QAAQ2/F,cAE/BjoF,EAAE+jD,QAAQ77C,GACVwnF,EAAoBF,GAKvBtnF,IAAiC,IAAtBwnF,GACZ1vF,EAAE8rF,QAAQ1/E,QAAQ,aAAc,CAACpM,EAAG0vF,MAMhDnJ,EAAM9/F,UAAUimG,YAAc,SAAShhF,EAAOmkF,GAE1C,IAEIC,EAAanF,EAFb3qF,EAAI9c,KACJ8sD,EAAU/gB,EAAEvjB,EAAMsC,eAgBtB,OAZGgiC,EAAQ/yC,GAAG,MACVyO,EAAMS,iBAIN6jC,EAAQ/yC,GAAG,QACX+yC,EAAUA,EAAQ5xC,QAAQ,OAI9B0xF,EADgB9vF,EAAEsqF,WAAatqF,EAAE1X,QAAQugG,gBAAmB,EAC/B,GAAK7oF,EAAEsqF,WAAatqF,EAAE8pF,cAAgB9pF,EAAE1X,QAAQugG,eAErEn9E,EAAMjG,KAAK9B,SAEf,IAAK,WACDgnF,EAA8B,IAAhBmF,EAAoB9vF,EAAE1X,QAAQugG,eAAiB7oF,EAAE1X,QAAQsgG,aAAekH,EAClF9vF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,cACzB5oF,EAAEouF,aAAapuF,EAAE8pF,aAAea,GAAa,EAAOkF,GAExD,MAEJ,IAAK,OACDlF,EAA8B,IAAhBmF,EAAoB9vF,EAAE1X,QAAQugG,eAAiBiH,EACzD9vF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,cACzB5oF,EAAEouF,aAAapuF,EAAE8pF,aAAea,GAAa,EAAOkF,GAExD,MAEJ,IAAK,QACD,IAAIxxF,EAA6B,IAArBqN,EAAMjG,KAAKpH,MAAc,EACjCqN,EAAMjG,KAAKpH,OAAS2xC,EAAQ3xC,QAAU2B,EAAE1X,QAAQugG,eAEpD7oF,EAAEouF,aAAapuF,EAAE+vF,eAAe1xF,IAAQ,EAAOwxF,GAC/C7/C,EAAQlyC,WAAWsO,QAAQ,SAC3B,MAEJ,QACI,SAKZm6E,EAAM9/F,UAAUspG,eAAiB,SAAS1xF,GAEtC,IACI2xF,EAAYC,EAIhB,GADAA,EAAgB,EACZ5xF,GAFJ2xF,EAHQ9sG,KAGOgtG,uBAEQF,EAAWxpG,OAAS,GACvC6X,EAAQ2xF,EAAWA,EAAWxpG,OAAS,QAEvC,IAAK,IAAI2W,KAAK6yF,EAAY,CACtB,GAAI3xF,EAAQ2xF,EAAW7yF,GAAI,CACvBkB,EAAQ4xF,EACR,MAEJA,EAAgBD,EAAW7yF,GAInC,OAAOkB,GAGXkoF,EAAM9/F,UAAU0pG,cAAgB,WAE5B,IAAInwF,EAAI9c,KAEJ8c,EAAE1X,QAAQm/F,MAAoB,OAAZznF,EAAE+pF,QAEpB96D,EAAE,KAAMjvB,EAAE+pF,OACLp+E,IAAI,cAAe3L,EAAE0sF,aACrB/gF,IAAI,mBAAoBsjB,EAAET,MAAMxuB,EAAEowF,UAAWpwF,GAAG,IAChD2L,IAAI,mBAAoBsjB,EAAET,MAAMxuB,EAAEowF,UAAWpwF,GAAG,KAErB,IAA5BA,EAAE1X,QAAQo+F,eACV1mF,EAAE+pF,MAAMp+E,IAAI,gBAAiB3L,EAAEgtF,aAIvChtF,EAAE8rF,QAAQngF,IAAI,2BAEW,IAArB3L,EAAE1X,QAAQw+F,QAAmB9mF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,eACtD5oF,EAAEoqF,YAAcpqF,EAAEoqF,WAAWz+E,IAAI,cAAe3L,EAAE0sF,aAClD1sF,EAAEmqF,YAAcnqF,EAAEmqF,WAAWx+E,IAAI,cAAe3L,EAAE0sF,cAElB,IAA5B1sF,EAAE1X,QAAQo+F,gBACV1mF,EAAEoqF,YAAcpqF,EAAEoqF,WAAWz+E,IAAI,gBAAiB3L,EAAEgtF,YACpDhtF,EAAEmqF,YAAcnqF,EAAEmqF,WAAWx+E,IAAI,gBAAiB3L,EAAEgtF,cAI5DhtF,EAAE8qF,MAAMn/E,IAAI,mCAAoC3L,EAAE8sF,cAClD9sF,EAAE8qF,MAAMn/E,IAAI,kCAAmC3L,EAAE8sF,cACjD9sF,EAAE8qF,MAAMn/E,IAAI,+BAAgC3L,EAAE8sF,cAC9C9sF,EAAE8qF,MAAMn/E,IAAI,qCAAsC3L,EAAE8sF,cAEpD9sF,EAAE8qF,MAAMn/E,IAAI,cAAe3L,EAAE2sF,cAE7B19D,EAAEnsC,UAAU6oB,IAAI3L,EAAEksF,iBAAkBlsF,EAAE8X,YAEtC9X,EAAEqwF,sBAE8B,IAA5BrwF,EAAE1X,QAAQo+F,eACV1mF,EAAE8qF,MAAMn/E,IAAI,gBAAiB3L,EAAEgtF,aAGH,IAA5BhtF,EAAE1X,QAAQw/F,eACV74D,EAAEjvB,EAAEwqF,aAAa1sF,WAAW6N,IAAI,cAAe3L,EAAE4sF,eAGrD39D,EAAEhsC,QAAQ0oB,IAAI,iCAAmC3L,EAAEwmF,YAAaxmF,EAAEswF,mBAElErhE,EAAEhsC,QAAQ0oB,IAAI,sBAAwB3L,EAAEwmF,YAAaxmF,EAAEuwF,QAEvDthE,EAAE,oBAAqBjvB,EAAEwqF,aAAa7+E,IAAI,YAAa3L,EAAEmM,gBAEzD8iB,EAAEhsC,QAAQ0oB,IAAI,oBAAsB3L,EAAEwmF,YAAaxmF,EAAE6sF,cAIzDtG,EAAM9/F,UAAU4pG,mBAAqB,WAEjC,IAAIrwF,EAAI9c,KAER8c,EAAE8qF,MAAMn/E,IAAI,mBAAoBsjB,EAAET,MAAMxuB,EAAEowF,UAAWpwF,GAAG,IACxDA,EAAE8qF,MAAMn/E,IAAI,mBAAoBsjB,EAAET,MAAMxuB,EAAEowF,UAAWpwF,GAAG,KAI5DumF,EAAM9/F,UAAU+pG,YAAc,WAE1B,IAActB,EAAVlvF,EAAI9c,KAEL8c,EAAE1X,QAAQmgG,KAAO,KAChByG,EAAiBlvF,EAAEyqF,QAAQ3sF,WAAWA,YACvB+iB,WAAW,SAC1B7gB,EAAE8rF,QAAQlzF,QAAQwa,OAAO87E,KAKjC3I,EAAM9/F,UAAUkmG,aAAe,SAASjhF,IAId,IAFdxoB,KAEF2oG,cACFngF,EAAMQ,2BACNR,EAAMO,kBACNP,EAAMS,mBAKdo6E,EAAM9/F,UAAU2xC,QAAU,SAAS2rB,GAE/B,IAAI/jD,EAAI9c,KAER8c,EAAEwsF,gBAEFxsF,EAAE+qF,YAAc,GAEhB/qF,EAAEmwF,gBAEFlhE,EAAE,gBAAiBjvB,EAAE8rF,SAAS34E,SAE1BnT,EAAE+pF,OACF/pF,EAAE+pF,MAAMnpF,SAGPZ,EAAEoqF,YAAcpqF,EAAEoqF,WAAW5jG,SAE9BwZ,EAAEoqF,WACGloE,YAAY,2CACZrB,WAAW,sCACXnZ,IAAI,UAAU,IAEd1H,EAAEitF,SAASt8F,KAAMqP,EAAE1X,QAAQ0+F,YAC5BhnF,EAAEoqF,WAAWxpF,UAIhBZ,EAAEmqF,YAAcnqF,EAAEmqF,WAAW3jG,SAE9BwZ,EAAEmqF,WACGjoE,YAAY,2CACZrB,WAAW,sCACXnZ,IAAI,UAAU,IAEd1H,EAAEitF,SAASt8F,KAAMqP,EAAE1X,QAAQ2+F,YAC5BjnF,EAAEmqF,WAAWvpF,UAKjBZ,EAAEyqF,UAEFzqF,EAAEyqF,QACGvoE,YAAY,qEACZrB,WAAW,eACXA,WAAW,oBACXz5B,MAAK,WACF6nC,EAAE/rC,MAAM+R,KAAK,QAASg6B,EAAE/rC,MAAMuiB,KAAK,uBAG3CzF,EAAEwqF,YAAY1sF,SAAS5a,KAAKoF,QAAQs+C,OAAOzzB,SAE3CnT,EAAEwqF,YAAYr3E,SAEdnT,EAAE8qF,MAAM33E,SAERnT,EAAE8rF,QAAQ14E,OAAOpT,EAAEyqF,UAGvBzqF,EAAEwwF,cAEFxwF,EAAE8rF,QAAQ5pE,YAAY,gBACtBliB,EAAE8rF,QAAQ5pE,YAAY,qBACtBliB,EAAE8rF,QAAQ5pE,YAAY,gBAEtBliB,EAAEirF,WAAY,EAEVlnC,GACA/jD,EAAE8rF,QAAQ1/E,QAAQ,UAAW,CAACpM,KAKtCumF,EAAM9/F,UAAUwnG,kBAAoB,SAASrnD,GAEzC,IAAI5mC,EAAI9c,KACJi0D,EAAa,GAEjBA,EAAWn3C,EAAEisF,gBAAkB,IAER,IAAnBjsF,EAAE1X,QAAQu/F,KACV7nF,EAAEwqF,YAAY9iF,IAAIyvC,GAElBn3C,EAAEyqF,QAAQ/iG,GAAGk/C,GAAOl/B,IAAIyvC,IAKhCovC,EAAM9/F,UAAUgqG,UAAY,SAASvjD,EAAY7lD,GAE7C,IAAI2Y,EAAI9c,MAEiB,IAArB8c,EAAEurF,gBAEFvrF,EAAEyqF,QAAQ/iG,GAAGwlD,GAAYxlC,IAAI,CACzB4S,OAAQta,EAAE1X,QAAQgyB,SAGtBta,EAAEyqF,QAAQ/iG,GAAGwlD,GAAY5tB,QAAQ,CAC7BjG,QAAS,GACVrZ,EAAE1X,QAAQ22B,MAAOjf,EAAE1X,QAAQ6wB,OAAQ9xB,KAItC2Y,EAAE8jF,gBAAgB52C,GAElBltC,EAAEyqF,QAAQ/iG,GAAGwlD,GAAYxlC,IAAI,CACzB2R,QAAS,EACTiB,OAAQta,EAAE1X,QAAQgyB,SAGlBjzB,GACAyb,YAAW,WAEP9C,EAAEiuF,kBAAkB/gD,GAEpB7lD,EAAShD,SACV2b,EAAE1X,QAAQ22B,SAOzBsnE,EAAM9/F,UAAUiqG,aAAe,SAASxjD,GAEpC,IAAIltC,EAAI9c,MAEiB,IAArB8c,EAAEurF,eAEFvrF,EAAEyqF,QAAQ/iG,GAAGwlD,GAAY5tB,QAAQ,CAC7BjG,QAAS,EACTiB,OAAQta,EAAE1X,QAAQgyB,OAAS,GAC5Bta,EAAE1X,QAAQ22B,MAAOjf,EAAE1X,QAAQ6wB,SAI9BnZ,EAAE8jF,gBAAgB52C,GAElBltC,EAAEyqF,QAAQ/iG,GAAGwlD,GAAYxlC,IAAI,CACzB2R,QAAS,EACTiB,OAAQta,EAAE1X,QAAQgyB,OAAS,MAOvCisE,EAAM9/F,UAAUkqG,aAAepK,EAAM9/F,UAAUmqG,YAAc,SAASp9F,GAElE,IAAIwM,EAAI9c,KAEO,OAAXsQ,IAEAwM,EAAE+rF,aAAe/rF,EAAEyqF,QAEnBzqF,EAAEwtF,SAEFxtF,EAAEwqF,YAAY1sF,SAAS5a,KAAKoF,QAAQs+C,OAAOzzB,SAE3CnT,EAAE+rF,aAAav4F,OAAOA,GAAQmgB,SAAS3T,EAAEwqF,aAEzCxqF,EAAEytF,WAMVlH,EAAM9/F,UAAUoqG,aAAe,WAE3B,IAAI7wF,EAAI9c,KAGR8c,EAAE8rF,QACGngF,IAAI,0BACJL,GACG,cACA,KACA,SAASI,GACL,IAAIolF,EAAM7hE,EAAE/rC,MAEZ4f,YAAW,WACH9C,EAAE1X,QAAQ+/F,cACNyI,EAAI7zF,GAAG,YACP+C,EAAEwrF,UAAW,EACbxrF,EAAEusF,cAGX,MAETjhF,GACE,aACA,KACA,SAASI,GACKujB,EAAE/rC,MAGR8c,EAAE1X,QAAQ+/F,eACVroF,EAAEwrF,UAAW,EACbxrF,EAAEusF,gBAMtBhG,EAAM9/F,UAAUsqG,WAAaxK,EAAM9/F,UAAUuqG,kBAAoB,WAG7D,OADQ9tG,KACC4mG,cAIbvD,EAAM9/F,UAAUgoG,YAAc,WAE1B,IAAIzuF,EAAI9c,KAEJ+tG,EAAa,EACbj3D,EAAU,EACVk3D,EAAW,EAEf,IAA2B,IAAvBlxF,EAAE1X,QAAQ0/F,SACV,GAAIhoF,EAAEsqF,YAActqF,EAAE1X,QAAQsgG,eACvBsI,OAEH,KAAOD,EAAajxF,EAAEsqF,cAChB4G,EACFD,EAAaj3D,EAAUh6B,EAAE1X,QAAQugG,eACjC7uD,GAAWh6B,EAAE1X,QAAQugG,gBAAkB7oF,EAAE1X,QAAQsgG,aAAe5oF,EAAE1X,QAAQugG,eAAiB7oF,EAAE1X,QAAQsgG,kBAG1G,IAA6B,IAAzB5oF,EAAE1X,QAAQ8+F,WACjB8J,EAAWlxF,EAAEsqF,gBACV,GAAItqF,EAAE1X,QAAQy+F,SAGjB,KAAOkK,EAAajxF,EAAEsqF,cAChB4G,EACFD,EAAaj3D,EAAUh6B,EAAE1X,QAAQugG,eACjC7uD,GAAWh6B,EAAE1X,QAAQugG,gBAAkB7oF,EAAE1X,QAAQsgG,aAAe5oF,EAAE1X,QAAQugG,eAAiB7oF,EAAE1X,QAAQsgG,kBALzGsI,EAAW,EAAIhoG,KAAK2vB,MAAM7Y,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,cAAgB5oF,EAAE1X,QAAQugG,gBASjF,OAAOqI,EAAW,GAItB3K,EAAM9/F,UAAU0qG,QAAU,SAASjkD,GAE/B,IACI4gD,EACAsD,EAEAC,EACAC,EALAtxF,EAAI9c,KAGJquG,EAAiB,EAkGrB,OA9FAvxF,EAAE2qF,YAAc,EAChByG,EAAiBpxF,EAAEyqF,QAAQhjG,QAAQmmG,aAAY,IAEpB,IAAvB5tF,EAAE1X,QAAQ0/F,UACNhoF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,eACzB5oF,EAAE2qF,YAAe3qF,EAAEuqF,WAAavqF,EAAE1X,QAAQsgG,cAAiB,EAC3D0I,GAAQ,GAEmB,IAAvBtxF,EAAE1X,QAAQ+gG,WAA8C,IAAzBrpF,EAAE1X,QAAQ8+F,aACV,IAA3BpnF,EAAE1X,QAAQsgG,aACV0I,GAAQ,IAC0B,IAA3BtxF,EAAE1X,QAAQsgG,eACjB0I,GAAQ,IAGhBC,EAAkBH,EAAiBpxF,EAAE1X,QAAQsgG,aAAgB0I,GAE7DtxF,EAAEsqF,WAAatqF,EAAE1X,QAAQugG,gBAAmB,GACxC37C,EAAaltC,EAAE1X,QAAQugG,eAAiB7oF,EAAEsqF,YAActqF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,eAC7E17C,EAAaltC,EAAEsqF,YACftqF,EAAE2qF,aAAgB3qF,EAAE1X,QAAQsgG,cAAgB17C,EAAaltC,EAAEsqF,aAAetqF,EAAEuqF,YAAe,EAC3FgH,GAAmBvxF,EAAE1X,QAAQsgG,cAAgB17C,EAAaltC,EAAEsqF,aAAe8G,GAAmB,IAE9FpxF,EAAE2qF,YAAgB3qF,EAAEsqF,WAAatqF,EAAE1X,QAAQugG,eAAkB7oF,EAAEuqF,YAAe,EAC9EgH,EAAmBvxF,EAAEsqF,WAAatqF,EAAE1X,QAAQugG,eAAkBuI,GAAmB,KAKzFlkD,EAAaltC,EAAE1X,QAAQsgG,aAAe5oF,EAAEsqF,aACxCtqF,EAAE2qF,aAAgBz9C,EAAaltC,EAAE1X,QAAQsgG,aAAgB5oF,EAAEsqF,YAActqF,EAAEuqF,WAC3EgH,GAAmBrkD,EAAaltC,EAAE1X,QAAQsgG,aAAgB5oF,EAAEsqF,YAAc8G,GAI9EpxF,EAAEsqF,YAActqF,EAAE1X,QAAQsgG,eAC1B5oF,EAAE2qF,YAAc,EAChB4G,EAAiB,IAGQ,IAAzBvxF,EAAE1X,QAAQ8+F,YAAuBpnF,EAAEsqF,YAActqF,EAAE1X,QAAQsgG,aAC3D5oF,EAAE2qF,YAAgB3qF,EAAEuqF,WAAarhG,KAAK6yC,MAAM/7B,EAAE1X,QAAQsgG,cAAiB,EAAO5oF,EAAEuqF,WAAavqF,EAAEsqF,WAAc,GAC7E,IAAzBtqF,EAAE1X,QAAQ8+F,aAA8C,IAAvBpnF,EAAE1X,QAAQ0/F,SAClDhoF,EAAE2qF,aAAe3qF,EAAEuqF,WAAarhG,KAAK6yC,MAAM/7B,EAAE1X,QAAQsgG,aAAe,GAAK5oF,EAAEuqF,YAC3C,IAAzBvqF,EAAE1X,QAAQ8+F,aACjBpnF,EAAE2qF,YAAc,EAChB3qF,EAAE2qF,aAAe3qF,EAAEuqF,WAAarhG,KAAK6yC,MAAM/7B,EAAE1X,QAAQsgG,aAAe,IAIpEkF,GADuB,IAAvB9tF,EAAE1X,QAAQ+gG,SACKn8C,EAAaltC,EAAEuqF,YAAe,EAAKvqF,EAAE2qF,YAErCz9C,EAAakkD,GAAmB,EAAKG,GAGxB,IAA5BvxF,EAAE1X,QAAQ8gG,gBAGNiI,EADArxF,EAAEsqF,YAActqF,EAAE1X,QAAQsgG,eAAuC,IAAvB5oF,EAAE1X,QAAQ0/F,SACtChoF,EAAEwqF,YAAY1sF,SAAS,gBAAgBpW,GAAGwlD,GAE1CltC,EAAEwqF,YAAY1sF,SAAS,gBAAgBpW,GAAGwlD,EAAaltC,EAAE1X,QAAQsgG,cAK3EkF,GAFc,IAAlB9tF,EAAE1X,QAAQogG,IACN2I,EAAY,IAC8E,GAA5ErxF,EAAEwqF,YAAY91E,QAAU28E,EAAY,GAAGG,WAAaH,EAAY38E,SAEhE,EAGL28E,EAAY,IAAkC,EAA7BA,EAAY,GAAGG,WAAkB,GAGtC,IAAzBxxF,EAAE1X,QAAQ8+F,aAENiK,EADArxF,EAAEsqF,YAActqF,EAAE1X,QAAQsgG,eAAuC,IAAvB5oF,EAAE1X,QAAQ0/F,SACtChoF,EAAEwqF,YAAY1sF,SAAS,gBAAgBpW,GAAGwlD,GAE1CltC,EAAEwqF,YAAY1sF,SAAS,gBAAgBpW,GAAGwlD,EAAaltC,EAAE1X,QAAQsgG,aAAe,GAK1FkF,GAFc,IAAlB9tF,EAAE1X,QAAQogG,IACN2I,EAAY,IAC8E,GAA5ErxF,EAAEwqF,YAAY91E,QAAU28E,EAAY,GAAGG,WAAaH,EAAY38E,SAEhE,EAGL28E,EAAY,IAAkC,EAA7BA,EAAY,GAAGG,WAAkB,EAGnE1D,IAAe9tF,EAAE8qF,MAAMp2E,QAAU28E,EAAYI,cAAgB,IAI9D3D,GAIXvH,EAAM9/F,UAAUirG,UAAYnL,EAAM9/F,UAAUkrG,eAAiB,SAASroF,GAIlE,OAFQpmB,KAECoF,QAAQghB,IAIrBi9E,EAAM9/F,UAAUypG,oBAAsB,WAElC,IAII93E,EAJApY,EAAI9c,KACJ+tG,EAAa,EACbj3D,EAAU,EACV8sC,EAAU,GAWd,KAR2B,IAAvB9mE,EAAE1X,QAAQ0/F,SACV5vE,EAAMpY,EAAEsqF,YAER2G,GAAyC,EAA5BjxF,EAAE1X,QAAQugG,eACvB7uD,GAAsC,EAA5Bh6B,EAAE1X,QAAQugG,eACpBzwE,EAAqB,EAAfpY,EAAEsqF,YAGL2G,EAAa74E,GAChB0uD,EAAQjjF,KAAKotG,GACbA,EAAaj3D,EAAUh6B,EAAE1X,QAAQugG,eACjC7uD,GAAWh6B,EAAE1X,QAAQugG,gBAAkB7oF,EAAE1X,QAAQsgG,aAAe5oF,EAAE1X,QAAQugG,eAAiB7oF,EAAE1X,QAAQsgG,aAGzG,OAAO9hB,GAIXyf,EAAM9/F,UAAUmrG,SAAW,WAEvB,OAAO1uG,MAIXqjG,EAAM9/F,UAAUorG,cAAgB,WAE5B,IACqBC,EAAaC,EAAaC,EAD3ChyF,EAAI9c,KAMR,OAHA8uG,GAAwC,IAAzBhyF,EAAE1X,QAAQ8+F,WAAsBl+F,KAAK6yC,MAAM/7B,EAAE8qF,MAAMp2E,QAAU,GAAK,EACjFq9E,GAA8B,EAAf/xF,EAAE4qF,UAAkBoH,GAEJ,IAA3BhyF,EAAE1X,QAAQygG,cAEV/oF,EAAEwqF,YAAY92F,KAAK,gBAAgBtM,MAAK,SAASiX,EAAOuoC,GAEpD,IAAIqrD,EAAiBtH,EASrB,GARAsH,EAAkBhjE,EAAE2X,GAAO6qD,aAC3B9G,EAAc/jD,EAAM4qD,YACS,IAAzBxxF,EAAE1X,QAAQ8+F,aACVuD,GAAgBsH,EAAkB,GAKlCF,EAFiBpH,IAIjB,OADAmH,EAAclrD,GACP,KAIG19C,KAAK+hD,IAAIhc,EAAE6iE,GAAa78F,KAAK,oBAAsB+K,EAAE8pF,eAAiB,GAKjF9pF,EAAE1X,QAAQugG,gBAKzBtC,EAAM9/F,UAAUyrG,KAAO3L,EAAM9/F,UAAU0rG,UAAY,SAASvrD,EAAOipD,GAEvD3sG,KAENwpG,YAAY,CACVjnF,KAAM,CACF9B,QAAS,QACTtF,MAAO0Y,SAAS6vB,KAErBipD,IAIPtJ,EAAM9/F,UAAUH,KAAO,SAAS8rG,GAE5B,IAAIpyF,EAAI9c,KAEH+rC,EAAEjvB,EAAE8rF,SAASvpE,SAAS,uBAEvB0M,EAAEjvB,EAAE8rF,SAASjqE,SAAS,qBAEtB7hB,EAAE8uF,YACF9uF,EAAE0uF,WACF1uF,EAAEqyF,WACFryF,EAAEsyF,YACFtyF,EAAEuyF,aACFvyF,EAAEwyF,mBACFxyF,EAAEyyF,eACFzyF,EAAE4uF,aACF5uF,EAAEqvF,iBAAgB,GAClBrvF,EAAE6wF,gBAIFuB,GACApyF,EAAE8rF,QAAQ1/E,QAAQ,OAAQ,CAACpM,KAGC,IAA5BA,EAAE1X,QAAQo+F,eACV1mF,EAAE0yF,UAGD1yF,EAAE1X,QAAQ4+F,WAEXlnF,EAAE0rF,QAAS,EACX1rF,EAAEusF,aAMVhG,EAAM9/F,UAAUisG,QAAU,WACtB,IAAI1yF,EAAI9c,KACAyvG,EAAezpG,KAAK2vB,KAAK7Y,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,cAClDgK,EAAoB5yF,EAAEkwF,sBAAsB18F,QAAO,SAASlO,GACxD,OAAQA,GAAO,GAAOA,EAAM0a,EAAEsqF,cAG1CtqF,EAAEyqF,QAAQlsF,IAAIyB,EAAEwqF,YAAY92F,KAAK,kBAAkBuB,KAAK,CACpD,cAAe,OACfysB,SAAY,OACbhuB,KAAK,4BAA4BuB,KAAK,CACrCysB,SAAY,OAGA,OAAZ1hB,EAAE+pF,QACF/pF,EAAEyqF,QAAQ/yF,IAAIsI,EAAEwqF,YAAY92F,KAAK,kBAAkBtM,MAAK,SAAS/B,GAC7D,IAAIwtG,EAAoBD,EAAkB9uG,QAAQuB,GAQlD,GANA4pC,EAAE/rC,MAAM+R,KAAK,CACT69F,KAAQ,WACRviG,GAAM,cAAgByP,EAAEwmF,YAAcnhG,EACtCq8B,UAAa,KAGU,IAAvBmxE,EAA0B,CAC3B,IAAIE,EAAoB,sBAAwB/yF,EAAEwmF,YAAcqM,EAC5D5jE,EAAE,IAAM8jE,GAAmBvsG,QAC7ByoC,EAAE/rC,MAAM+R,KAAK,CACT,mBAAoB89F,QAMjC/yF,EAAE+pF,MAAM90F,KAAK,OAAQ,WAAWvB,KAAK,MAAMtM,MAAK,SAAS/B,GACrD,IAAI2tG,EAAmBJ,EAAkBvtG,GAEzC4pC,EAAE/rC,MAAM+R,KAAK,CACT69F,KAAQ,iBAGZ7jE,EAAE/rC,MAAMwQ,KAAK,UAAUjM,QAAQwN,KAAK,CAChC69F,KAAQ,MACRviG,GAAM,sBAAwByP,EAAEwmF,YAAcnhG,EAC9C,gBAAiB,cAAgB2a,EAAEwmF,YAAcwM,EACjD,aAAe3tG,EAAI,EAAK,OAASstG,EACjC,gBAAiB,KACjBjxE,SAAY,UAGjBh6B,GAAGsY,EAAE8pF,cAAcp2F,KAAK,UAAUuB,KAAK,CACtC,gBAAiB,OACjBysB,SAAY,MACbx5B,OAGP,IAAK,IAAI7C,EAAE2a,EAAE8pF,aAAc1xE,EAAI/yB,EAAE2a,EAAE1X,QAAQsgG,aAAcvjG,EAAI+yB,EAAK/yB,IAC5D2a,EAAE1X,QAAQy/F,cACZ/nF,EAAEyqF,QAAQ/iG,GAAGrC,GAAG4P,KAAK,CAACysB,SAAY,MAElC1hB,EAAEyqF,QAAQ/iG,GAAGrC,GAAGw7B,WAAW,YAI/B7gB,EAAEmtF,eAIN5G,EAAM9/F,UAAUwsG,gBAAkB,WAE9B,IAAIjzF,EAAI9c,MAEiB,IAArB8c,EAAE1X,QAAQw+F,QAAmB9mF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,eACtD5oF,EAAEoqF,WACEz+E,IAAI,eACJL,GAAG,cAAe,CACd3H,QAAS,YACX3D,EAAE0sF,aACR1sF,EAAEmqF,WACEx+E,IAAI,eACJL,GAAG,cAAe,CACd3H,QAAS,QACX3D,EAAE0sF,cAEwB,IAA5B1sF,EAAE1X,QAAQo+F,gBACV1mF,EAAEoqF,WAAW9+E,GAAG,gBAAiBtL,EAAEgtF,YACnChtF,EAAEmqF,WAAW7+E,GAAG,gBAAiBtL,EAAEgtF,eAM/CzG,EAAM9/F,UAAUysG,cAAgB,WAE5B,IAAIlzF,EAAI9c,MAEe,IAAnB8c,EAAE1X,QAAQm/F,MAAiBznF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,eACpD35D,EAAE,KAAMjvB,EAAE+pF,OAAOz+E,GAAG,cAAe,CAC/B3H,QAAS,SACV3D,EAAE0sF,cAE2B,IAA5B1sF,EAAE1X,QAAQo+F,eACV1mF,EAAE+pF,MAAMz+E,GAAG,gBAAiBtL,EAAEgtF,cAIf,IAAnBhtF,EAAE1X,QAAQm/F,OAAgD,IAA/BznF,EAAE1X,QAAQggG,kBAA6BtoF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,cAE3F35D,EAAE,KAAMjvB,EAAE+pF,OACLz+E,GAAG,mBAAoB2jB,EAAET,MAAMxuB,EAAEowF,UAAWpwF,GAAG,IAC/CsL,GAAG,mBAAoB2jB,EAAET,MAAMxuB,EAAEowF,UAAWpwF,GAAG,KAM5DumF,EAAM9/F,UAAU0sG,gBAAkB,WAE9B,IAAInzF,EAAI9c,KAEH8c,EAAE1X,QAAQ8/F,eAEXpoF,EAAE8qF,MAAMx/E,GAAG,mBAAoB2jB,EAAET,MAAMxuB,EAAEowF,UAAWpwF,GAAG,IACvDA,EAAE8qF,MAAMx/E,GAAG,mBAAoB2jB,EAAET,MAAMxuB,EAAEowF,UAAWpwF,GAAG,MAM/DumF,EAAM9/F,UAAU+rG,iBAAmB,WAE/B,IAAIxyF,EAAI9c,KAER8c,EAAEizF,kBAEFjzF,EAAEkzF,gBACFlzF,EAAEmzF,kBAEFnzF,EAAE8qF,MAAMx/E,GAAG,mCAAoC,CAC3CyhC,OAAQ,SACT/sC,EAAE8sF,cACL9sF,EAAE8qF,MAAMx/E,GAAG,kCAAmC,CAC1CyhC,OAAQ,QACT/sC,EAAE8sF,cACL9sF,EAAE8qF,MAAMx/E,GAAG,+BAAgC,CACvCyhC,OAAQ,OACT/sC,EAAE8sF,cACL9sF,EAAE8qF,MAAMx/E,GAAG,qCAAsC,CAC7CyhC,OAAQ,OACT/sC,EAAE8sF,cAEL9sF,EAAE8qF,MAAMx/E,GAAG,cAAetL,EAAE2sF,cAE5B19D,EAAEnsC,UAAUwoB,GAAGtL,EAAEksF,iBAAkBj9D,EAAET,MAAMxuB,EAAE8X,WAAY9X,KAEzB,IAA5BA,EAAE1X,QAAQo+F,eACV1mF,EAAE8qF,MAAMx/E,GAAG,gBAAiBtL,EAAEgtF,aAGF,IAA5BhtF,EAAE1X,QAAQw/F,eACV74D,EAAEjvB,EAAEwqF,aAAa1sF,WAAWwN,GAAG,cAAetL,EAAE4sF,eAGpD39D,EAAEhsC,QAAQqoB,GAAG,iCAAmCtL,EAAEwmF,YAAav3D,EAAET,MAAMxuB,EAAEswF,kBAAmBtwF,IAE5FivB,EAAEhsC,QAAQqoB,GAAG,sBAAwBtL,EAAEwmF,YAAav3D,EAAET,MAAMxuB,EAAEuwF,OAAQvwF,IAEtEivB,EAAE,oBAAqBjvB,EAAEwqF,aAAal/E,GAAG,YAAatL,EAAEmM,gBAExD8iB,EAAEhsC,QAAQqoB,GAAG,oBAAsBtL,EAAEwmF,YAAaxmF,EAAE6sF,aACpD59D,EAAEjvB,EAAE6sF,cAIRtG,EAAM9/F,UAAU2sG,OAAS,WAErB,IAAIpzF,EAAI9c,MAEiB,IAArB8c,EAAE1X,QAAQw+F,QAAmB9mF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,eAEtD5oF,EAAEoqF,WAAW1hF,OACb1I,EAAEmqF,WAAWzhF,SAIM,IAAnB1I,EAAE1X,QAAQm/F,MAAiBznF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,cAEpD5oF,EAAE+pF,MAAMrhF,QAMhB69E,EAAM9/F,UAAUumG,WAAa,SAASthF,GAElC,IAAI1L,EAAI9c,KAEJwoB,EAAM/iB,OAAOk9C,QAAQ71C,MAAM,2BACL,KAAlB0b,EAAM2E,UAA8C,IAA5BrQ,EAAE1X,QAAQo+F,cAClC1mF,EAAE0sF,YAAY,CACVjnF,KAAM,CACF9B,SAA2B,IAAlB3D,EAAE1X,QAAQogG,IAAe,OAAU,cAG3B,KAAlBh9E,EAAM2E,UAA8C,IAA5BrQ,EAAE1X,QAAQo+F,eACzC1mF,EAAE0sF,YAAY,CACVjnF,KAAM,CACF9B,SAA2B,IAAlB3D,EAAE1X,QAAQogG,IAAe,WAAa,YAQnEnC,EAAM9/F,UAAUyhG,SAAW,WAEvB,IACImL,EAAuBC,EAAYC,EADnCvzF,EAAI9c,KAGR,SAASswG,EAAWC,GAEhBxkE,EAAE,iBAAkBwkE,GAAarsG,MAAK,WAElC,IAAIkS,EAAQ21B,EAAE/rC,MACVwwG,EAAczkE,EAAE/rC,MAAM+R,KAAK,aAC3B0+F,EAAc1kE,EAAE/rC,MAAM+R,KAAK,eAC3B2+F,EAAc3kE,EAAE/rC,MAAM+R,KAAK,eAAiB+K,EAAE8rF,QAAQ72F,KAAK,cAC3D4+F,EAAc/wG,SAAS0C,cAAc,OAEzCquG,EAAY3oE,OAAS,WAEjB5xB,EACKgmB,QAAQ,CAAEjG,QAAS,GAAK,KAAK,WAEtBs6E,IACAr6F,EACKrE,KAAK,SAAU0+F,GAEhBC,GACAt6F,EACKrE,KAAK,QAAS2+F,IAI3Bt6F,EACKrE,KAAK,MAAOy+F,GACZp0E,QAAQ,CAAEjG,QAAS,GAAK,KAAK,WAC1B/f,EACKunB,WAAW,oCACXqB,YAAY,oBAEzBliB,EAAE8rF,QAAQ1/E,QAAQ,aAAc,CAACpM,EAAG1G,EAAOo6F,QAKvDG,EAAY1oE,QAAU,WAElB7xB,EACKunB,WAAY,aACZqB,YAAa,iBACbL,SAAU,wBAEf7hB,EAAE8rF,QAAQ1/E,QAAQ,gBAAiB,CAAEpM,EAAG1G,EAAOo6F,KAInDG,EAAY/uG,IAAM4uG,KAyB1B,IAnB6B,IAAzB1zF,EAAE1X,QAAQ8+F,YACiB,IAAvBpnF,EAAE1X,QAAQ0/F,SAEVuL,GADAD,EAAatzF,EAAE8pF,cAAgB9pF,EAAE1X,QAAQsgG,aAAe,EAAI,IACpC5oF,EAAE1X,QAAQsgG,aAAe,GAEjD0K,EAAapqG,KAAKkvB,IAAI,EAAGpY,EAAE8pF,cAAgB9pF,EAAE1X,QAAQsgG,aAAe,EAAI,IACxE2K,EAAgBvzF,EAAE1X,QAAQsgG,aAAe,EAAI,EAAlC,EAAuC5oF,EAAE8pF,eAGxDwJ,EAAatzF,EAAE1X,QAAQ0/F,SAAWhoF,EAAE1X,QAAQsgG,aAAe5oF,EAAE8pF,aAAe9pF,EAAE8pF,aAC9EyJ,EAAWrqG,KAAK2vB,KAAKy6E,EAAatzF,EAAE1X,QAAQsgG,eACrB,IAAnB5oF,EAAE1X,QAAQu/F,OACNyL,EAAa,GAAGA,IAChBC,GAAYvzF,EAAEsqF,YAAYiJ,MAItCF,EAAYrzF,EAAE8rF,QAAQp4F,KAAK,gBAAgBlQ,MAAM8vG,EAAYC,GAElC,gBAAvBvzF,EAAE1X,QAAQ4/F,SAKV,IAJA,IAAI4L,EAAYR,EAAa,EACzBS,EAAYR,EACZ9I,EAAUzqF,EAAE8rF,QAAQp4F,KAAK,gBAEpBrO,EAAI,EAAGA,EAAI2a,EAAE1X,QAAQugG,eAAgBxjG,IACtCyuG,EAAY,IAAGA,EAAY9zF,EAAEsqF,WAAa,GAE9C+I,GADAA,EAAYA,EAAU90F,IAAIksF,EAAQ/iG,GAAGosG,KACfv1F,IAAIksF,EAAQ/iG,GAAGqsG,IACrCD,IACAC,IAIRP,EAAWH,GAEPrzF,EAAEsqF,YAActqF,EAAE1X,QAAQsgG,aAE1B4K,EADaxzF,EAAE8rF,QAAQp4F,KAAK,iBAG5BsM,EAAE8pF,cAAgB9pF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,aAE3C4K,EADaxzF,EAAE8rF,QAAQp4F,KAAK,iBAAiBlQ,MAAM,EAAGwc,EAAE1X,QAAQsgG,eAEtC,IAAnB5oF,EAAE8pF,cAET0J,EADaxzF,EAAE8rF,QAAQp4F,KAAK,iBAAiBlQ,OAAgC,EAA1Bwc,EAAE1X,QAAQsgG,gBAMrErC,EAAM9/F,UAAU8rG,WAAa,WAEzB,IAAIvyF,EAAI9c,KAER8c,EAAE6sF,cAEF7sF,EAAEwqF,YAAY9iF,IAAI,CACd2R,QAAS,IAGbrZ,EAAE8rF,QAAQ5pE,YAAY,iBAEtBliB,EAAEozF,SAEyB,gBAAvBpzF,EAAE1X,QAAQ4/F,UACVloF,EAAEg0F,uBAKVzN,EAAM9/F,UAAUgJ,KAAO82F,EAAM9/F,UAAUwtG,UAAY,WAEvC/wG,KAENwpG,YAAY,CACVjnF,KAAM,CACF9B,QAAS,WAMrB4iF,EAAM9/F,UAAU6pG,kBAAoB,WAEhC,IAAItwF,EAAI9c,KAER8c,EAAEqvF,kBACFrvF,EAAE6sF,eAINtG,EAAM9/F,UAAUogD,MAAQ0/C,EAAM9/F,UAAUytG,WAAa,WAEjD,IAAIl0F,EAAI9c,KAER8c,EAAEwsF,gBACFxsF,EAAE0rF,QAAS,GAIfnF,EAAM9/F,UAAU0tG,KAAO5N,EAAM9/F,UAAU2tG,UAAY,WAE/C,IAAIp0F,EAAI9c,KAER8c,EAAEusF,WACFvsF,EAAE1X,QAAQ4+F,UAAW,EACrBlnF,EAAE0rF,QAAS,EACX1rF,EAAEwrF,UAAW,EACbxrF,EAAEyrF,aAAc,GAIpBlF,EAAM9/F,UAAU4tG,UAAY,SAASh2F,GAEjC,IAAI2B,EAAI9c,KAEH8c,EAAEirF,YAEHjrF,EAAE8rF,QAAQ1/E,QAAQ,cAAe,CAACpM,EAAG3B,IAErC2B,EAAEypF,WAAY,EAEVzpF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,cACzB5oF,EAAE6sF,cAGN7sF,EAAE4qF,UAAY,KAET5qF,EAAE1X,QAAQ4+F,UACXlnF,EAAEusF,YAG0B,IAA5BvsF,EAAE1X,QAAQo+F,gBACV1mF,EAAE0yF,UAEE1yF,EAAE1X,QAAQy/F,eACU94D,EAAEjvB,EAAEyqF,QAAQ5jG,IAAImZ,EAAE8pF,eACxB70F,KAAK,WAAY,GAAGkD,WAQlDouF,EAAM9/F,UAAUuX,KAAOuoF,EAAM9/F,UAAU6tG,UAAY,WAEvCpxG,KAENwpG,YAAY,CACVjnF,KAAM,CACF9B,QAAS,eAMrB4iF,EAAM9/F,UAAU0lB,eAAiB,SAAST,GAEtCA,EAAMS,kBAIVo6E,EAAM9/F,UAAUutG,oBAAsB,SAAUO,GAE5CA,EAAWA,GAAY,EAEvB,IAEIj7F,EACAo6F,EACAC,EACAC,EACAC,EANA7zF,EAAI9c,KACJsxG,EAAcvlE,EAAG,iBAAkBjvB,EAAE8rF,SAOpC0I,EAAYhuG,QAEb8S,EAAQk7F,EAAY/sG,QACpBisG,EAAcp6F,EAAMrE,KAAK,aACzB0+F,EAAcr6F,EAAMrE,KAAK,eACzB2+F,EAAct6F,EAAMrE,KAAK,eAAiB+K,EAAE8rF,QAAQ72F,KAAK,eACzD4+F,EAAc/wG,SAAS0C,cAAc,QAEzB0lC,OAAS,WAEbyoE,IACAr6F,EACKrE,KAAK,SAAU0+F,GAEhBC,GACAt6F,EACKrE,KAAK,QAAS2+F,IAI3Bt6F,EACKrE,KAAM,MAAOy+F,GACb7yE,WAAW,oCACXqB,YAAY,kBAEiB,IAA7BliB,EAAE1X,QAAQq+F,gBACX3mF,EAAE6sF,cAGN7sF,EAAE8rF,QAAQ1/E,QAAQ,aAAc,CAAEpM,EAAG1G,EAAOo6F,IAC5C1zF,EAAEg0F,uBAINH,EAAY1oE,QAAU,WAEbopE,EAAW,EAOZzxF,YAAY,WACR9C,EAAEg0F,oBAAqBO,EAAW,KACnC,MAIHj7F,EACKunB,WAAY,aACZqB,YAAa,iBACbL,SAAU,wBAEf7hB,EAAE8rF,QAAQ1/E,QAAQ,gBAAiB,CAAEpM,EAAG1G,EAAOo6F,IAE/C1zF,EAAEg0F,wBAMVH,EAAY/uG,IAAM4uG,GAIlB1zF,EAAE8rF,QAAQ1/E,QAAQ,kBAAmB,CAAEpM,KAM/CumF,EAAM9/F,UAAUs9D,QAAU,SAAU0wC,GAEhC,IAAc3K,EAAc4K,EAAxB10F,EAAI9c,KAERwxG,EAAmB10F,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,cAIvC5oF,EAAE1X,QAAQ0/F,UAAchoF,EAAE8pF,aAAe4K,IAC1C10F,EAAE8pF,aAAe4K,GAIhB10F,EAAEsqF,YAActqF,EAAE1X,QAAQsgG,eAC3B5oF,EAAE8pF,aAAe,GAIrBA,EAAe9pF,EAAE8pF,aAEjB9pF,EAAEo4B,SAAQ,GAEVnJ,EAAE5mC,OAAO2X,EAAGA,EAAEwpF,SAAU,CAAEM,aAAcA,IAExC9pF,EAAE1Z,OAEGmuG,GAEDz0F,EAAE0sF,YAAY,CACVjnF,KAAM,CACF9B,QAAS,QACTtF,MAAOyrF,KAEZ,IAMXvD,EAAM9/F,UAAUymG,oBAAsB,WAElC,IAAcqC,EAAYoF,EAAmBx2F,EAAzC6B,EAAI9c,KACJ0xG,EAAqB50F,EAAE1X,QAAQkgG,YAAc,KAEjD,GAAoC,UAA/Bv5D,EAAEpqC,KAAK+vG,IAAmCA,EAAmBpuG,OAAS,CAIvE,IAAM+oG,KAFNvvF,EAAEuoF,UAAYvoF,EAAE1X,QAAQigG,WAAa,SAEjBqM,EAIhB,GAFAz2F,EAAI6B,EAAEqrF,YAAY7kG,OAAO,EAErBouG,EAAmB1wG,eAAeqrG,GAAa,CAK/C,IAJAoF,EAAoBC,EAAmBrF,GAAYA,WAI5CpxF,GAAK,GACJ6B,EAAEqrF,YAAYltF,IAAM6B,EAAEqrF,YAAYltF,KAAOw2F,GACzC30F,EAAEqrF,YAAYjjG,OAAO+V,EAAE,GAE3BA,IAGJ6B,EAAEqrF,YAAYxnG,KAAK8wG,GACnB30F,EAAEsrF,mBAAmBqJ,GAAqBC,EAAmBrF,GAAYzoE,SAMjF9mB,EAAEqrF,YAAYljG,MAAK,SAASmE,EAAGC,GAC3B,OAASyT,EAAE1X,oBAAwBgE,EAAEC,EAAIA,EAAED,OAOvDi6F,EAAM9/F,UAAUgnG,OAAS,WAErB,IAAIztF,EAAI9c,KAER8c,EAAEyqF,QACEzqF,EAAEwqF,YACG1sF,SAASkC,EAAE1X,QAAQs+C,OACnB/kB,SAAS,eAElB7hB,EAAEsqF,WAAatqF,EAAEyqF,QAAQjkG,OAErBwZ,EAAE8pF,cAAgB9pF,EAAEsqF,YAAiC,IAAnBtqF,EAAE8pF,eACpC9pF,EAAE8pF,aAAe9pF,EAAE8pF,aAAe9pF,EAAE1X,QAAQugG,gBAG5C7oF,EAAEsqF,YAActqF,EAAE1X,QAAQsgG,eAC1B5oF,EAAE8pF,aAAe,GAGrB9pF,EAAEktF,sBAEFltF,EAAEqyF,WACFryF,EAAE2uF,gBACF3uF,EAAEsuF,cACFtuF,EAAEyyF,eACFzyF,EAAEizF,kBACFjzF,EAAEuuF,YACFvuF,EAAE4uF,aACF5uF,EAAEkzF,gBACFlzF,EAAEqwF,qBACFrwF,EAAEmzF,kBAEFnzF,EAAEqvF,iBAAgB,GAAO,IAEO,IAA5BrvF,EAAE1X,QAAQw/F,eACV74D,EAAEjvB,EAAEwqF,aAAa1sF,WAAWwN,GAAG,cAAetL,EAAE4sF,eAGpD5sF,EAAE6uF,gBAA0C,iBAAnB7uF,EAAE8pF,aAA4B9pF,EAAE8pF,aAAe,GAExE9pF,EAAE6sF,cACF7sF,EAAE6wF,eAEF7wF,EAAE0rF,QAAU1rF,EAAE1X,QAAQ4+F,SACtBlnF,EAAEusF,WAEFvsF,EAAE8rF,QAAQ1/E,QAAQ,SAAU,CAACpM,KAIjCumF,EAAM9/F,UAAU8pG,OAAS,WAErB,IAAIvwF,EAAI9c,KAEJ+rC,EAAEhsC,QAAQyxB,UAAY1U,EAAEmsF,cACxB3rE,aAAaxgB,EAAE60F,aACf70F,EAAE60F,YAAc5xG,OAAO6f,YAAW,WAC9B9C,EAAEmsF,YAAcl9D,EAAEhsC,QAAQyxB,QAC1B1U,EAAEqvF,kBACGrvF,EAAEirF,WAAcjrF,EAAE6sF,gBACxB,MAIXtG,EAAM9/F,UAAUquG,YAAcvO,EAAM9/F,UAAUsuG,YAAc,SAAS12F,EAAO22F,EAAcC,GAEtF,IAAIj1F,EAAI9c,KASR,GALImb,EAFkB,qBAEO,KADzB22F,EAAe32F,GACiB,EAAI2B,EAAEsqF,WAAa,GAE1B,IAAjB0K,IAA0B32F,EAAQA,EAG1C2B,EAAEsqF,WAAa,GAAKjsF,EAAQ,GAAKA,EAAQ2B,EAAEsqF,WAAa,EACxD,OAAO,EAGXtqF,EAAEwtF,UAEgB,IAAdyH,EACAj1F,EAAEwqF,YAAY1sF,WAAW8C,SAEzBZ,EAAEwqF,YAAY1sF,SAAS5a,KAAKoF,QAAQs+C,OAAOl/C,GAAG2W,GAAOuC,SAGzDZ,EAAEyqF,QAAUzqF,EAAEwqF,YAAY1sF,SAAS5a,KAAKoF,QAAQs+C,OAEhD5mC,EAAEwqF,YAAY1sF,SAAS5a,KAAKoF,QAAQs+C,OAAOzzB,SAE3CnT,EAAEwqF,YAAYp3E,OAAOpT,EAAEyqF,SAEvBzqF,EAAE+rF,aAAe/rF,EAAEyqF,QAEnBzqF,EAAEytF,UAINlH,EAAM9/F,UAAUyuG,OAAS,SAASr/E,GAE9B,IAEIkgB,EAAGE,EAFHj2B,EAAI9c,KACJiyG,EAAgB,IAGE,IAAlBn1F,EAAE1X,QAAQogG,MACV7yE,GAAYA,GAEhBkgB,EAAsB,QAAlB/1B,EAAE2rF,aAAyBziG,KAAK2vB,KAAKhD,GAAY,KAAO,MAC5DogB,EAAsB,OAAlBj2B,EAAE2rF,aAAwBziG,KAAK2vB,KAAKhD,GAAY,KAAO,MAE3Ds/E,EAAcn1F,EAAE2rF,cAAgB91E,GAEJ,IAAxB7V,EAAEgrF,kBACFhrF,EAAEwqF,YAAY9iF,IAAIytF,IAElBA,EAAgB,IACS,IAArBn1F,EAAEurF,gBACF4J,EAAcn1F,EAAEmrF,UAAY,aAAep1D,EAAI,KAAOE,EAAI,IAC1Dj2B,EAAEwqF,YAAY9iF,IAAIytF,KAElBA,EAAcn1F,EAAEmrF,UAAY,eAAiBp1D,EAAI,KAAOE,EAAI,SAC5Dj2B,EAAEwqF,YAAY9iF,IAAIytF,MAM9B5O,EAAM9/F,UAAU2uG,cAAgB,WAE5B,IAAIp1F,EAAI9c,MAEmB,IAAvB8c,EAAE1X,QAAQ+gG,UACmB,IAAzBrpF,EAAE1X,QAAQ8+F,YACVpnF,EAAE8qF,MAAMpjF,IAAI,CACRsT,QAAU,OAAShb,EAAE1X,QAAQ++F,iBAIrCrnF,EAAE8qF,MAAMh0E,OAAO9W,EAAEyqF,QAAQhjG,QAAQmmG,aAAY,GAAQ5tF,EAAE1X,QAAQsgG,eAClC,IAAzB5oF,EAAE1X,QAAQ8+F,YACVpnF,EAAE8qF,MAAMpjF,IAAI,CACRsT,QAAUhb,EAAE1X,QAAQ++F,cAAgB,UAKhDrnF,EAAEgqF,UAAYhqF,EAAE8qF,MAAMp2E,QACtB1U,EAAEiqF,WAAajqF,EAAE8qF,MAAMh0E,UAGI,IAAvB9W,EAAE1X,QAAQ+gG,WAAkD,IAA5BrpF,EAAE1X,QAAQ8gG,eAC1CppF,EAAEuqF,WAAarhG,KAAK2vB,KAAK7Y,EAAEgqF,UAAYhqF,EAAE1X,QAAQsgG,cACjD5oF,EAAEwqF,YAAY91E,MAAMxrB,KAAK2vB,KAAM7Y,EAAEuqF,WAAavqF,EAAEwqF,YAAY1sF,SAAS,gBAAgBtX,WAElD,IAA5BwZ,EAAE1X,QAAQ8gG,cACjBppF,EAAEwqF,YAAY91E,MAAM,IAAO1U,EAAEsqF,aAE7BtqF,EAAEuqF,WAAarhG,KAAK2vB,KAAK7Y,EAAEgqF,WAC3BhqF,EAAEwqF,YAAY1zE,OAAO5tB,KAAK2vB,KAAM7Y,EAAEyqF,QAAQhjG,QAAQmmG,aAAY,GAAQ5tF,EAAEwqF,YAAY1sF,SAAS,gBAAgBtX,UAGjH,IAAIqmC,EAAS7sB,EAAEyqF,QAAQhjG,QAAQgqG,YAAW,GAAQzxF,EAAEyqF,QAAQhjG,QAAQitB,SACpC,IAA5B1U,EAAE1X,QAAQ8gG,eAAyBppF,EAAEwqF,YAAY1sF,SAAS,gBAAgB4W,MAAM1U,EAAEuqF,WAAa19D,IAIvG05D,EAAM9/F,UAAU4uG,QAAU,WAEtB,IACIvH,EADA9tF,EAAI9c,KAGR8c,EAAEyqF,QAAQrjG,MAAK,SAASiX,EAAOyxB,GAC3Bg+D,EAAc9tF,EAAEuqF,WAAalsF,GAAU,GACjB,IAAlB2B,EAAE1X,QAAQogG,IACVz5D,EAAEa,GAASpoB,IAAI,CACXmO,SAAU,WACVH,MAAOo4E,EACP76F,IAAK,EACLqnB,OAAQta,EAAE1X,QAAQgyB,OAAS,EAC3BjB,QAAS,IAGb4V,EAAEa,GAASpoB,IAAI,CACXmO,SAAU,WACViF,KAAMgzE,EACN76F,IAAK,EACLqnB,OAAQta,EAAE1X,QAAQgyB,OAAS,EAC3BjB,QAAS,OAKrBrZ,EAAEyqF,QAAQ/iG,GAAGsY,EAAE8pF,cAAcpiF,IAAI,CAC7B4S,OAAQta,EAAE1X,QAAQgyB,OAAS,EAC3BjB,QAAS,KAKjBktE,EAAM9/F,UAAU6uG,UAAY,WAExB,IAAIt1F,EAAI9c,KAER,GAA+B,IAA3B8c,EAAE1X,QAAQsgG,eAAmD,IAA7B5oF,EAAE1X,QAAQq+F,iBAAkD,IAAvB3mF,EAAE1X,QAAQ+gG,SAAoB,CACnG,IAAIsE,EAAe3tF,EAAEyqF,QAAQ/iG,GAAGsY,EAAE8pF,cAAc8D,aAAY,GAC5D5tF,EAAE8qF,MAAMpjF,IAAI,SAAUimF,KAK9BpH,EAAM9/F,UAAU8uG,UAChBhP,EAAM9/F,UAAU+uG,eAAiB,WAe7B,IAAcr3F,EAAGzZ,EAAM4kB,EAAQjf,EAAwBxF,EAAnDmb,EAAI9c,KAA8B6gE,GAAU,EA0BhD,GAxB+B,WAA3B90B,EAAEpqC,KAAM2C,UAAU,KAElB8hB,EAAU9hB,UAAU,GACpBu8D,EAAUv8D,UAAU,GACpB3C,EAAO,YAE4B,WAA3BoqC,EAAEpqC,KAAM2C,UAAU,MAE1B8hB,EAAU9hB,UAAU,GACpB6C,EAAQ7C,UAAU,GAClBu8D,EAAUv8D,UAAU,GAEE,eAAjBA,UAAU,IAAkD,UAA3BynC,EAAEpqC,KAAM2C,UAAU,IAEpD3C,EAAO,kBAEyB,IAAjB2C,UAAU,KAEzB3C,EAAO,WAMD,WAATA,EAEDmb,EAAE1X,QAAQghB,GAAUjf,OAGjB,GAAc,aAATxF,EAERoqC,EAAE7nC,KAAMkiB,GAAS,SAAU4V,EAAK55B,GAE5B0a,EAAE1X,QAAQ42B,GAAO55B,UAKlB,GAAc,eAATT,EAER,IAAMH,KAAQ2F,EAEV,GAAuC,UAAnC4kC,EAAEpqC,KAAMmb,EAAE1X,QAAQkgG,YAElBxoF,EAAE1X,QAAQkgG,WAAa,CAAEn+F,EAAM3F,QAE5B,CAKH,IAHAyZ,EAAI6B,EAAE1X,QAAQkgG,WAAWhiG,OAAO,EAGzB2X,GAAK,GAEJ6B,EAAE1X,QAAQkgG,WAAWrqF,GAAGoxF,aAAellG,EAAM3F,GAAM6qG,YAEnDvvF,EAAE1X,QAAQkgG,WAAWpgG,OAAO+V,EAAE,GAIlCA,IAIJ6B,EAAE1X,QAAQkgG,WAAW3kG,KAAMwG,EAAM3F,IAQxCq/D,IAED/jD,EAAEwtF,SACFxtF,EAAEytF,WAMVlH,EAAM9/F,UAAUomG,YAAc,WAE1B,IAAI7sF,EAAI9c,KAER8c,EAAEo1F,gBAEFp1F,EAAEs1F,aAEqB,IAAnBt1F,EAAE1X,QAAQu/F,KACV7nF,EAAEk1F,OAAOl1F,EAAEmxF,QAAQnxF,EAAE8pF,eAErB9pF,EAAEq1F,UAGNr1F,EAAE8rF,QAAQ1/E,QAAQ,cAAe,CAACpM,KAItCumF,EAAM9/F,UAAU4rG,SAAW,WAEvB,IAAIryF,EAAI9c,KACJuyG,EAAY3yG,SAAS0lB,KAAKhB,MAE9BxH,EAAE2rF,cAAsC,IAAvB3rF,EAAE1X,QAAQ+gG,SAAoB,MAAQ,OAEhC,QAAnBrpF,EAAE2rF,aACF3rF,EAAE8rF,QAAQjqE,SAAS,kBAEnB7hB,EAAE8rF,QAAQ5pE,YAAY,uBAGSl5B,IAA/BysG,EAAUC,uBACkB1sG,IAA5BysG,EAAUE,oBACiB3sG,IAA3BysG,EAAUG,eACe,IAArB51F,EAAE1X,QAAQ4gG,SACVlpF,EAAEurF,gBAAiB,GAItBvrF,EAAE1X,QAAQu/F,OACsB,iBAArB7nF,EAAE1X,QAAQgyB,OACdta,EAAE1X,QAAQgyB,OAAS,IACnBta,EAAE1X,QAAQgyB,OAAS,GAGvBta,EAAE1X,QAAQgyB,OAASta,EAAEk1D,SAAS56C,aAITtxB,IAAzBysG,EAAUI,aACV71F,EAAEmrF,SAAW,aACbnrF,EAAEgsF,cAAgB,eAClBhsF,EAAEisF,eAAiB,mBACmBjjG,IAAlCysG,EAAUK,0BAAqE9sG,IAAhCysG,EAAUM,oBAAiC/1F,EAAEmrF,UAAW,SAEhFniG,IAA3BysG,EAAUO,eACVh2F,EAAEmrF,SAAW,eACbnrF,EAAEgsF,cAAgB,iBAClBhsF,EAAEisF,eAAiB,qBACmBjjG,IAAlCysG,EAAUK,0BAAkE9sG,IAA7BysG,EAAUQ,iBAA8Bj2F,EAAEmrF,UAAW,SAE1EniG,IAA9BysG,EAAUS,kBACVl2F,EAAEmrF,SAAW,kBACbnrF,EAAEgsF,cAAgB,oBAClBhsF,EAAEisF,eAAiB,wBACmBjjG,IAAlCysG,EAAUK,0BAAqE9sG,IAAhCysG,EAAUM,oBAAiC/1F,EAAEmrF,UAAW,SAEjFniG,IAA1BysG,EAAUU,cACVn2F,EAAEmrF,SAAW,cACbnrF,EAAEgsF,cAAgB,gBAClBhsF,EAAEisF,eAAiB,oBACWjjG,IAA1BysG,EAAUU,cAA2Bn2F,EAAEmrF,UAAW,SAE9BniG,IAAxBysG,EAAUh6D,YAA0C,IAAfz7B,EAAEmrF,WACvCnrF,EAAEmrF,SAAW,YACbnrF,EAAEgsF,cAAgB,YAClBhsF,EAAEisF,eAAiB,cAEvBjsF,EAAEgrF,kBAAoBhrF,EAAE1X,QAAQ6gG,cAAgC,OAAfnpF,EAAEmrF,WAAoC,IAAfnrF,EAAEmrF,UAI9E5E,EAAM9/F,UAAUooG,gBAAkB,SAASxwF,GAEvC,IACI2zF,EAAcoE,EAAWtG,EAAazZ,EADtCr2E,EAAI9c,KAYR,GATAkzG,EAAYp2F,EAAE8rF,QACTp4F,KAAK,gBACLwuB,YAAY,2CACZjtB,KAAK,cAAe,QAEzB+K,EAAEyqF,QACG/iG,GAAG2W,GACHwjB,SAAS,kBAEe,IAAzB7hB,EAAE1X,QAAQ8+F,WAAqB,CAE/B,IAAIiP,EAAWr2F,EAAE1X,QAAQsgG,aAAe,GAAM,EAAI,EAAI,EAEtDoJ,EAAe9oG,KAAK6yC,MAAM/7B,EAAE1X,QAAQsgG,aAAe,IAExB,IAAvB5oF,EAAE1X,QAAQ0/F,WAEN3pF,GAAS2zF,GAAgB3zF,GAAU2B,EAAEsqF,WAAa,EAAK0H,EACvDhyF,EAAEyqF,QACGjnG,MAAM6a,EAAQ2zF,EAAeqE,EAAUh4F,EAAQ2zF,EAAe,GAC9DnwE,SAAS,gBACT5sB,KAAK,cAAe,UAIzB66F,EAAc9vF,EAAE1X,QAAQsgG,aAAevqF,EACvC+3F,EACK5yG,MAAMssG,EAAckC,EAAe,EAAIqE,EAAUvG,EAAckC,EAAe,GAC9EnwE,SAAS,gBACT5sB,KAAK,cAAe,UAIf,IAAVoJ,EAEA+3F,EACK1uG,GAAG0uG,EAAU5vG,OAAS,EAAIwZ,EAAE1X,QAAQsgG,cACpC/mE,SAAS,gBAEPxjB,IAAU2B,EAAEsqF,WAAa,GAEhC8L,EACK1uG,GAAGsY,EAAE1X,QAAQsgG,cACb/mE,SAAS,iBAMtB7hB,EAAEyqF,QACG/iG,GAAG2W,GACHwjB,SAAS,qBAIVxjB,GAAS,GAAKA,GAAU2B,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,aAEjD5oF,EAAEyqF,QACGjnG,MAAM6a,EAAOA,EAAQ2B,EAAE1X,QAAQsgG,cAC/B/mE,SAAS,gBACT5sB,KAAK,cAAe,SAElBmhG,EAAU5vG,QAAUwZ,EAAE1X,QAAQsgG,aAErCwN,EACKv0E,SAAS,gBACT5sB,KAAK,cAAe,UAIzBohF,EAAYr2E,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,aACrCkH,GAAqC,IAAvB9vF,EAAE1X,QAAQ0/F,SAAoBhoF,EAAE1X,QAAQsgG,aAAevqF,EAAQA,EAEzE2B,EAAE1X,QAAQsgG,cAAgB5oF,EAAE1X,QAAQugG,gBAAmB7oF,EAAEsqF,WAAajsF,EAAS2B,EAAE1X,QAAQsgG,aAEzFwN,EACK5yG,MAAMssG,GAAe9vF,EAAE1X,QAAQsgG,aAAevS,GAAYyZ,EAAczZ,GACxEx0D,SAAS,gBACT5sB,KAAK,cAAe,SAIzBmhG,EACK5yG,MAAMssG,EAAaA,EAAc9vF,EAAE1X,QAAQsgG,cAC3C/mE,SAAS,gBACT5sB,KAAK,cAAe,UAQV,aAAvB+K,EAAE1X,QAAQ4/F,UAAkD,gBAAvBloF,EAAE1X,QAAQ4/F,UAC/CloF,EAAEkoF,YAIV3B,EAAM9/F,UAAUkoG,cAAgB,WAE5B,IACItpG,EAAG6nD,EAAYopD,EADft2F,EAAI9c,KAOR,IAJuB,IAAnB8c,EAAE1X,QAAQu/F,OACV7nF,EAAE1X,QAAQ8+F,YAAa,IAGA,IAAvBpnF,EAAE1X,QAAQ0/F,WAAwC,IAAnBhoF,EAAE1X,QAAQu/F,OAEzC36C,EAAa,KAETltC,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,cAAc,CAQvC,IALI0N,GADyB,IAAzBt2F,EAAE1X,QAAQ8+F,WACMpnF,EAAE1X,QAAQsgG,aAAe,EAEzB5oF,EAAE1X,QAAQsgG,aAGzBvjG,EAAI2a,EAAEsqF,WAAYjlG,EAAK2a,EAAEsqF,WACtBgM,EAAgBjxG,GAAK,EACzB6nD,EAAa7nD,EAAI,EACjB4pC,EAAEjvB,EAAEyqF,QAAQv9C,IAAaxkD,OAAM,GAAMuM,KAAK,KAAM,IAC3CA,KAAK,mBAAoBi4C,EAAaltC,EAAEsqF,YACxC12E,UAAU5T,EAAEwqF,aAAa3oE,SAAS,gBAE3C,IAAKx8B,EAAI,EAAGA,EAAIixG,EAAiBt2F,EAAEsqF,WAAYjlG,GAAK,EAChD6nD,EAAa7nD,EACb4pC,EAAEjvB,EAAEyqF,QAAQv9C,IAAaxkD,OAAM,GAAMuM,KAAK,KAAM,IAC3CA,KAAK,mBAAoBi4C,EAAaltC,EAAEsqF,YACxC32E,SAAS3T,EAAEwqF,aAAa3oE,SAAS,gBAE1C7hB,EAAEwqF,YAAY92F,KAAK,iBAAiBA,KAAK,QAAQtM,MAAK,WAClD6nC,EAAE/rC,MAAM+R,KAAK,KAAM,SASnCsxF,EAAM9/F,UAAU2pG,UAAY,SAAUvnF,GAElC,IAAI7I,EAAI9c,KAEH2lB,GACD7I,EAAEusF,WAENvsF,EAAEyrF,YAAc5iF,GAIpB09E,EAAM9/F,UAAUmmG,cAAgB,SAASlhF,GAErC,IAAI1L,EAAI9c,KAEJqzG,EACAtnE,EAAEvjB,EAAM/iB,QAAQsU,GAAG,gBACfgyB,EAAEvjB,EAAM/iB,QACRsmC,EAAEvjB,EAAM/iB,QAAQ8V,QAAQ,gBAE5BJ,EAAQ0Y,SAASw/E,EAActhG,KAAK,qBAEnCoJ,IAAOA,EAAQ,GAEhB2B,EAAEsqF,YAActqF,EAAE1X,QAAQsgG,aAE1B5oF,EAAEouF,aAAa/vF,GAAO,GAAO,GAKjC2B,EAAEouF,aAAa/vF,IAInBkoF,EAAM9/F,UAAU2nG,aAAe,SAAS/vF,EAAOm4F,EAAM3G,GAEjD,IAAIwB,EAAaoF,EAAWC,EAAUC,EACxBC,EADmC9I,EAAa,KAC1D9tF,EAAI9c,KAIR,GAFAszG,EAAOA,IAAQ,KAEK,IAAhBx2F,EAAEypF,YAAmD,IAA7BzpF,EAAE1X,QAAQihG,iBAIf,IAAnBvpF,EAAE1X,QAAQu/F,MAAiB7nF,EAAE8pF,eAAiBzrF,GAclD,IAVa,IAATm4F,GACAx2F,EAAE+mF,SAAS1oF,GAGfgzF,EAAchzF,EACdyvF,EAAa9tF,EAAEmxF,QAAQE,GACvBsF,EAAY32F,EAAEmxF,QAAQnxF,EAAE8pF,cAExB9pF,EAAE6pF,YAA8B,OAAhB7pF,EAAE4qF,UAAqB+L,EAAY32F,EAAE4qF,WAE1B,IAAvB5qF,EAAE1X,QAAQ0/F,WAA+C,IAAzBhoF,EAAE1X,QAAQ8+F,aAAyB/oF,EAAQ,GAAKA,EAAQ2B,EAAEyuF,cAAgBzuF,EAAE1X,QAAQugG,iBAC7F,IAAnB7oF,EAAE1X,QAAQu/F,OACVwJ,EAAcrxF,EAAE8pF,cACI,IAAhB+F,GAAwB7vF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,aACjD5oF,EAAE6tF,aAAa8I,GAAW,WACtB32F,EAAEq0F,UAAUhD,MAGhBrxF,EAAEq0F,UAAUhD,SAIjB,IAA2B,IAAvBrxF,EAAE1X,QAAQ0/F,WAA+C,IAAzBhoF,EAAE1X,QAAQ8+F,aAAwB/oF,EAAQ,GAAKA,EAAS2B,EAAEsqF,WAAatqF,EAAE1X,QAAQugG,iBACjG,IAAnB7oF,EAAE1X,QAAQu/F,OACVwJ,EAAcrxF,EAAE8pF,cACI,IAAhB+F,GAAwB7vF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,aACjD5oF,EAAE6tF,aAAa8I,GAAW,WACtB32F,EAAEq0F,UAAUhD,MAGhBrxF,EAAEq0F,UAAUhD,QARjB,CAyDP,GA3CKrxF,EAAE1X,QAAQ4+F,UACXz8C,cAAczqC,EAAE2pF,eAKZ8M,EAFJpF,EAAc,EACVrxF,EAAEsqF,WAAatqF,EAAE1X,QAAQugG,gBAAmB,EAChC7oF,EAAEsqF,WAActqF,EAAEsqF,WAAatqF,EAAE1X,QAAQugG,eAEzC7oF,EAAEsqF,WAAa+G,EAExBA,GAAerxF,EAAEsqF,WACpBtqF,EAAEsqF,WAAatqF,EAAE1X,QAAQugG,gBAAmB,EAChC,EAEAwI,EAAcrxF,EAAEsqF,WAGpB+G,EAGhBrxF,EAAEypF,WAAY,EAEdzpF,EAAE8rF,QAAQ1/E,QAAQ,eAAgB,CAACpM,EAAGA,EAAE8pF,aAAc2M,IAEtDC,EAAW12F,EAAE8pF,aACb9pF,EAAE8pF,aAAe2M,EAEjBz2F,EAAE6uF,gBAAgB7uF,EAAE8pF,cAEf9pF,EAAE1X,QAAQy+F,WAGX6P,GADAA,EAAY52F,EAAEkuF,gBACQC,MAAM,aAEb7D,YAAcsM,EAAUtuG,QAAQsgG,cAC3CgO,EAAU/H,gBAAgB7uF,EAAE8pF,cAKpC9pF,EAAE4uF,aACF5uF,EAAEyyF,gBAEqB,IAAnBzyF,EAAE1X,QAAQu/F,KAaV,OAZoB,IAAhBgI,GAEA7vF,EAAE0wF,aAAagG,GAEf12F,EAAEywF,UAAUgG,GAAW,WACnBz2F,EAAEq0F,UAAUoC,OAIhBz2F,EAAEq0F,UAAUoC,QAEhBz2F,EAAE0tF,iBAIc,IAAhBmC,GAAwB7vF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,aACjD5oF,EAAE6tF,aAAaC,GAAY,WACvB9tF,EAAEq0F,UAAUoC,MAGhBz2F,EAAEq0F,UAAUoC,KAKpBlQ,EAAM9/F,UAAU6rG,UAAY,WAExB,IAAItyF,EAAI9c,MAEiB,IAArB8c,EAAE1X,QAAQw+F,QAAmB9mF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,eAEtD5oF,EAAEoqF,WAAWxhF,OACb5I,EAAEmqF,WAAWvhF,SAIM,IAAnB5I,EAAE1X,QAAQm/F,MAAiBznF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,cAEpD5oF,EAAE+pF,MAAMnhF,OAIZ5I,EAAE8rF,QAAQjqE,SAAS,kBAIvB0kE,EAAM9/F,UAAUowG,eAAiB,WAE7B,IAAIC,EAAOC,EAAOC,EAAGC,EAAYj3F,EAAI9c,KAWrC,OATA4zG,EAAQ92F,EAAE+qF,YAAYmM,OAASl3F,EAAE+qF,YAAYoM,KAC7CJ,EAAQ/2F,EAAE+qF,YAAYqM,OAASp3F,EAAE+qF,YAAYsM,KAC7CL,EAAI9tG,KAAKouG,MAAMP,EAAOD,IAEtBG,EAAa/tG,KAAK+sB,MAAU,IAAJ+gF,EAAU9tG,KAAKmzB,KACtB,IACb46E,EAAa,IAAM/tG,KAAK+hD,IAAIgsD,IAG3BA,GAAc,IAAQA,GAAc,GAGpCA,GAAc,KAASA,GAAc,KAFZ,IAAlBj3F,EAAE1X,QAAQogG,IAAgB,OAAS,QAK1CuO,GAAc,KAASA,GAAc,KACZ,IAAlBj3F,EAAE1X,QAAQogG,IAAgB,QAAU,QAEd,IAA9B1oF,EAAE1X,QAAQghG,gBACL2N,GAAc,IAAQA,GAAc,IAC9B,OAEA,KAIR,YAIX1Q,EAAM9/F,UAAU8wG,SAAW,SAAS7rF,GAEhC,IACI4+E,EACAx/C,EAFA9qC,EAAI9c,KAOR,GAHA8c,EAAE0pF,UAAW,EACb1pF,EAAE6qF,SAAU,EAER7qF,EAAEqqF,UAEF,OADArqF,EAAEqqF,WAAY,GACP,EAMX,GAHArqF,EAAEyrF,aAAc,EAChBzrF,EAAE6rF,cAAgB7rF,EAAE+qF,YAAYyM,YAAc,SAElBxuG,IAAvBgX,EAAE+qF,YAAYoM,KACf,OAAO,EAOX,IAJ+B,IAA1Bn3F,EAAE+qF,YAAY0M,SACfz3F,EAAE8rF,QAAQ1/E,QAAQ,OAAQ,CAACpM,EAAGA,EAAE62F,mBAG/B72F,EAAE+qF,YAAYyM,aAAex3F,EAAE+qF,YAAY2M,SAAW,CAIvD,OAFA5sD,EAAY9qC,EAAE62F,kBAIV,IAAK,OACL,IAAK,OAEDvM,EACItqF,EAAE1X,QAAQygG,aACN/oF,EAAE+vF,eAAgB/vF,EAAE8pF,aAAe9pF,EAAE6xF,iBACrC7xF,EAAE8pF,aAAe9pF,EAAE6xF,gBAE3B7xF,EAAE4pF,iBAAmB,EAErB,MAEJ,IAAK,QACL,IAAK,KAEDU,EACItqF,EAAE1X,QAAQygG,aACN/oF,EAAE+vF,eAAgB/vF,EAAE8pF,aAAe9pF,EAAE6xF,iBACrC7xF,EAAE8pF,aAAe9pF,EAAE6xF,gBAE3B7xF,EAAE4pF,iBAAmB,EASZ,YAAb9+C,IAEA9qC,EAAEouF,aAAc9D,GAChBtqF,EAAE+qF,YAAc,GAChB/qF,EAAE8rF,QAAQ1/E,QAAQ,QAAS,CAACpM,EAAG8qC,UAM9B9qC,EAAE+qF,YAAYmM,SAAWl3F,EAAE+qF,YAAYoM,OAExCn3F,EAAEouF,aAAcpuF,EAAE8pF,cAClB9pF,EAAE+qF,YAAc,KAQ5BxE,EAAM9/F,UAAUqmG,aAAe,SAASphF,GAEpC,IAAI1L,EAAI9c,KAER,MAAyB,IAApB8c,EAAE1X,QAAQwgG,OAAqB,eAAgBhmG,WAAgC,IAApBkd,EAAE1X,QAAQwgG,QAEvC,IAAxB9oF,EAAE1X,QAAQq/F,YAAwD,IAAjCj8E,EAAM7mB,KAAKf,QAAQ,UAe/D,OAXAkc,EAAE+qF,YAAY4M,YAAcjsF,EAAM+C,oBAAiDzlB,IAAhC0iB,EAAM+C,cAAcwC,QACnEvF,EAAM+C,cAAcwC,QAAQzqB,OAAS,EAEzCwZ,EAAE+qF,YAAY2M,SAAW13F,EAAEgqF,UAAYhqF,EAAE1X,QACpC2gG,gBAE6B,IAA9BjpF,EAAE1X,QAAQghG,kBACVtpF,EAAE+qF,YAAY2M,SAAW13F,EAAEiqF,WAAajqF,EAAE1X,QACrC2gG,gBAGDv9E,EAAMjG,KAAKsnC,QAEf,IAAK,QACD/sC,EAAE43F,WAAWlsF,GACb,MAEJ,IAAK,OACD1L,EAAE63F,UAAUnsF,GACZ,MAEJ,IAAK,MACD1L,EAAEu3F,SAAS7rF,KAOvB66E,EAAM9/F,UAAUoxG,UAAY,SAASnsF,OAI7BshB,EAAS6pE,EAAgBW,EAAaM,EAAgB7mF,EAAS8mF,EAF/D/3F,EAAI9c,KAMR,OAFA+tB,OAAkCjoB,IAAxB0iB,EAAM+C,cAA8B/C,EAAM+C,cAAcwC,QAAU,QAEvEjR,EAAE0pF,UAAY1pF,EAAEqqF,WAAap5E,GAA8B,IAAnBA,EAAQzqB,UAIrDwmC,EAAUhtB,EAAEmxF,QAAQnxF,EAAE8pF,cAEtB9pF,EAAE+qF,YAAYoM,UAAmBnuG,IAAZioB,EAAwBA,EAAQ,GAAGlB,MAAQrE,EAAM6E,QACtEvQ,EAAE+qF,YAAYsM,UAAmBruG,IAAZioB,EAAwBA,EAAQ,GAAGjB,MAAQtE,EAAM8E,QAEtExQ,EAAE+qF,YAAYyM,YAActuG,KAAK+sB,MAAM/sB,KAAK8uG,KACxC9uG,KAAK+uG,IAAIj4F,EAAE+qF,YAAYoM,KAAOn3F,EAAE+qF,YAAYmM,OAAQ,KAExDa,EAAsB7uG,KAAK+sB,MAAM/sB,KAAK8uG,KAClC9uG,KAAK+uG,IAAIj4F,EAAE+qF,YAAYsM,KAAOr3F,EAAE+qF,YAAYqM,OAAQ,MAEnDp3F,EAAE1X,QAAQghG,kBAAoBtpF,EAAE6qF,SAAWkN,EAAsB,GAClE/3F,EAAEqqF,WAAY,GACP,KAGuB,IAA9BrqF,EAAE1X,QAAQghG,kBACVtpF,EAAE+qF,YAAYyM,YAAcO,GAGhClB,EAAiB72F,EAAE62F,sBAES7tG,IAAxB0iB,EAAM+C,eAA+BzO,EAAE+qF,YAAYyM,YAAc,IACjEx3F,EAAE6qF,SAAU,EACZn/E,EAAMS,kBAGV2rF,IAAoC,IAAlB93F,EAAE1X,QAAQogG,IAAgB,GAAK,IAAM1oF,EAAE+qF,YAAYoM,KAAOn3F,EAAE+qF,YAAYmM,OAAS,GAAK,IACtE,IAA9Bl3F,EAAE1X,QAAQghG,kBACVwO,EAAiB93F,EAAE+qF,YAAYsM,KAAOr3F,EAAE+qF,YAAYqM,OAAS,GAAK,GAItEI,EAAcx3F,EAAE+qF,YAAYyM,YAE5Bx3F,EAAE+qF,YAAY0M,SAAU,GAEG,IAAvBz3F,EAAE1X,QAAQ0/F,WACc,IAAnBhoF,EAAE8pF,cAAyC,UAAnB+M,GAAgC72F,EAAE8pF,cAAgB9pF,EAAEyuF,eAAoC,SAAnBoI,KAC9FW,EAAcx3F,EAAE+qF,YAAYyM,YAAcx3F,EAAE1X,QAAQs/F,aACpD5nF,EAAE+qF,YAAY0M,SAAU,IAIL,IAAvBz3F,EAAE1X,QAAQ+gG,SACVrpF,EAAE4qF,UAAY59D,EAAUwqE,EAAcM,EAEtC93F,EAAE4qF,UAAY59D,EAAWwqE,GAAex3F,EAAE8qF,MAAMh0E,SAAW9W,EAAEgqF,WAAc8N,GAE7C,IAA9B93F,EAAE1X,QAAQghG,kBACVtpF,EAAE4qF,UAAY59D,EAAUwqE,EAAcM,IAGnB,IAAnB93F,EAAE1X,QAAQu/F,OAAyC,IAAxB7nF,EAAE1X,QAAQ0gG,aAIrB,IAAhBhpF,EAAEypF,WACFzpF,EAAE4qF,UAAY,MACP,QAGX5qF,EAAEk1F,OAAOl1F,EAAE4qF,eAIfrE,EAAM9/F,UAAUmxG,WAAa,SAASlsF,GAElC,IACIuF,EADAjR,EAAI9c,KAKR,GAFA8c,EAAEyrF,aAAc,EAEkB,IAA9BzrF,EAAE+qF,YAAY4M,aAAqB33F,EAAEsqF,YAActqF,EAAE1X,QAAQsgG,aAE7D,OADA5oF,EAAE+qF,YAAc,IACT,OAGiB/hG,IAAxB0iB,EAAM+C,oBAA+DzlB,IAAhC0iB,EAAM+C,cAAcwC,UACzDA,EAAUvF,EAAM+C,cAAcwC,QAAQ,IAG1CjR,EAAE+qF,YAAYmM,OAASl3F,EAAE+qF,YAAYoM,UAAmBnuG,IAAZioB,EAAwBA,EAAQlB,MAAQrE,EAAM6E,QAC1FvQ,EAAE+qF,YAAYqM,OAASp3F,EAAE+qF,YAAYsM,UAAmBruG,IAAZioB,EAAwBA,EAAQjB,MAAQtE,EAAM8E,QAE1FxQ,EAAE0pF,UAAW,GAIjBnD,EAAM9/F,UAAUyxG,eAAiB3R,EAAM9/F,UAAU0xG,cAAgB,WAE7D,IAAIn4F,EAAI9c,KAEe,OAAnB8c,EAAE+rF,eAEF/rF,EAAEwtF,SAEFxtF,EAAEwqF,YAAY1sF,SAAS5a,KAAKoF,QAAQs+C,OAAOzzB,SAE3CnT,EAAE+rF,aAAap4E,SAAS3T,EAAEwqF,aAE1BxqF,EAAEytF,WAMVlH,EAAM9/F,UAAU+mG,OAAS,WAErB,IAAIxtF,EAAI9c,KAER+rC,EAAE,gBAAiBjvB,EAAE8rF,SAASlrF,SAE1BZ,EAAE+pF,OACF/pF,EAAE+pF,MAAMnpF,SAGRZ,EAAEoqF,YAAcpqF,EAAEitF,SAASt8F,KAAKqP,EAAE1X,QAAQ0+F,YAC1ChnF,EAAEoqF,WAAWxpF,SAGbZ,EAAEmqF,YAAcnqF,EAAEitF,SAASt8F,KAAKqP,EAAE1X,QAAQ2+F,YAC1CjnF,EAAEmqF,WAAWvpF,SAGjBZ,EAAEyqF,QACGvoE,YAAY,wDACZjtB,KAAK,cAAe,QACpByS,IAAI,QAAS,KAItB6+E,EAAM9/F,UAAUmpG,QAAU,SAASwI,GAE/B,IAAIp4F,EAAI9c,KACR8c,EAAE8rF,QAAQ1/E,QAAQ,UAAW,CAACpM,EAAGo4F,IACjCp4F,EAAEo4B,WAINmuD,EAAM9/F,UAAUgsG,aAAe,eAEvBzyF,EAAI9c,KAGOgG,KAAK6yC,MAAM/7B,EAAE1X,QAAQsgG,aAAe,IAEzB,IAArB5oF,EAAE1X,QAAQw+F,QACX9mF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,eACxB5oF,EAAE1X,QAAQ0/F,WAEXhoF,EAAEoqF,WAAWloE,YAAY,kBAAkBjtB,KAAK,gBAAiB,SACjE+K,EAAEmqF,WAAWjoE,YAAY,kBAAkBjtB,KAAK,gBAAiB,SAE1C,IAAnB+K,EAAE8pF,cAEF9pF,EAAEoqF,WAAWvoE,SAAS,kBAAkB5sB,KAAK,gBAAiB,QAC9D+K,EAAEmqF,WAAWjoE,YAAY,kBAAkBjtB,KAAK,gBAAiB,WAE1D+K,EAAE8pF,cAAgB9pF,EAAEsqF,WAAatqF,EAAE1X,QAAQsgG,eAAyC,IAAzB5oF,EAAE1X,QAAQ8+F,YAKrEpnF,EAAE8pF,cAAgB9pF,EAAEsqF,WAAa,IAA8B,IAAzBtqF,EAAE1X,QAAQ8+F,cAHvDpnF,EAAEmqF,WAAWtoE,SAAS,kBAAkB5sB,KAAK,gBAAiB,QAC9D+K,EAAEoqF,WAAWloE,YAAY,kBAAkBjtB,KAAK,gBAAiB,YAa7EsxF,EAAM9/F,UAAUmoG,WAAa,WAEzB,IAAI5uF,EAAI9c,KAEQ,OAAZ8c,EAAE+pF,QAEF/pF,EAAE+pF,MACGr2F,KAAK,MACDwuB,YAAY,gBACZh6B,MAET8X,EAAE+pF,MACGr2F,KAAK,MACLhM,GAAGwB,KAAK6yC,MAAM/7B,EAAE8pF,aAAe9pF,EAAE1X,QAAQugG,iBACzChnE,SAAS,kBAMtB0kE,EAAM9/F,UAAUqxB,WAAa,WAEzB,IAAI9X,EAAI9c,KAEH8c,EAAE1X,QAAQ4+F,WAENpkG,SAASkd,EAAE2c,QAEZ3c,EAAEyrF,aAAc,EAIhBzrF,EAAEyrF,aAAc,SAQ5Bx8D,EAAE5oC,GAAG8nG,MAAQ,WACT,IAII9oG,EACA4B,EALA+Y,EAAI9c,KACJg8B,EAAM13B,UAAU,GAChB8P,EAAOxO,MAAMrC,UAAUjD,MAAMa,KAAKmD,UAAW,GAC7C2W,EAAI6B,EAAExZ,OAGV,IAAKnB,EAAI,EAAGA,EAAI8Y,EAAG9Y,IAKf,GAJkB,iBAAP65B,QAAiC,IAAPA,EACjClf,EAAE3a,GAAG8oG,MAAQ,IAAI5H,EAAMvmF,EAAE3a,GAAI65B,GAE7Bj4B,EAAM+Y,EAAE3a,GAAG8oG,MAAMjvE,GAAKt7B,MAAMoc,EAAE3a,GAAG8oG,MAAO72F,QAC1B,IAAPrQ,EAAoB,OAAOA,EAE1C,OAAO+Y,QCt9Ff,MAAMq4F,GAAgBv1G,SAASs5C,cAAc,mBAC7C,GAAIi8D,GAAe,CACf,MAAMC,EAAUD,GAAcj8D,cAAc,2BAC5CnN,EAAEqpE,GAASnK,MAAM,CACbnG,UAAU,EACVY,aAAc,EACdC,eAAgB,EAChB/B,QAAQ,EACRE,UAAW/3D,EAAE,wCACbg4D,UAAWh4D,EAAE,wCACby3D,eAAe,EACfiB,WAAW,EACXF,MAAM,EACNJ,cAAe,EACfa,SAAU,gBACX58E,GAAG,gBAAgB,SAAUI,EAAOyiF,EAAOrE,EAAciK,GAExD,MAEMrvG,EAFUypG,EAAM1D,QAAQsJ,GAET33D,cAAc,kBAI3C,IAAqC32C,EAAAA,EAHDf,EAAKkgG,QAAe,MAItC9hG,SAASs5C,cAAc,4BAC/B5mC,YAAc/P,KC1BxB,MAAM4gG,GAAUvjG,SAASs5C,cAAc,qBACjCm8D,GAAWlS,GAAQjqD,cAAc,2BACjCo8D,GAAenS,GAAQjqD,cAAc,2BACfiqD,GAAQjqD,cAAc,iCAClD,MAAMq8D,GAAgBpS,GAAQjqD,cAAc,2BAyB5C,SAASs8D,GAAavyE,EAAKu2B,EAAOi8C,EAAQC,EAAMC,EAASC,EAAe,IAcpE,GAXAN,GAAazkG,UAAY,GAGzB0kG,GAAc1kG,UAAY,GACtB2oD,IACA+7C,GAAc1kG,WAAa,MAAM2oD,SACjCk8C,GAAQC,IACRJ,GAAc1kG,WAAa,WAAW6kG,oDAAuDC,aAC7FF,IACAF,GAAc1kG,WAAa,8CAA8C4kG,SAEjD,IAAxBG,EAAatyG,OAAc,CAC3B,MAAM4zD,EAAMt3D,SAAS0C,cAAc,OACnC40D,EAAIt1D,IAAMqhC,EACVqyE,GAAaplF,OAAOgnC,OAEnB,CACD,MAAM2+C,EAAQj2G,SAAS0C,cAAc,SACrCuzG,EAAMC,UAAW,EACjBF,EAAa7hE,SAASnyC,IAClB,MAAMmiB,EAASnkB,SAAS0C,cAAc,UACtCyhB,EAAOniB,IAAMA,EAAIqhC,IACjBlf,EAAOpiB,KAAOC,EAAIujC,SAClB0wE,EAAM3lF,OAAOnM,MAEjBuxF,GAAaplF,OAAO2lF,GACpBA,EAAM5E,OAGVrxG,SAAS0lB,KAAKg9B,UAAU38B,OAAO,0BAvDnC/lB,SAASoQ,iBAAiB,SAAUvD,IAChC,MACMspG,EADStpG,EAAEhH,OACcyV,QAAQ,mBACnC66F,IACAP,GAAaO,EAAgBrU,QAAa,IAAGqU,EAAgBrU,QAAe,MAAGqU,EAAgBrU,QAAgB,OAAGqU,EAAgBrU,QAAc,KAAGqU,EAAgBrU,QAAiB,SACpLnhF,QAAQy1F,IAAID,EAAgBrU,QAAiB,aAGrD2T,GAASrlG,iBAAiB,SAAUvD,IAChC7M,SAAS0lB,KAAKg9B,UAAU38B,OAAO,0BAC/B2vF,GAAazkG,UAAY,MAE7BsyF,GAAQnzF,iBAAiB,SAAUvD,IAC3BA,EAAEhH,SAAW09F,KAGjBvjG,SAAS0lB,KAAKg9B,UAAU38B,OAAO,0BAC/B2vF,GAAazkG,UAAY,OAG7BjR,SAASoQ,iBAAiB,iBAAkBvD,IACxC+oG,GAAa/oG,EAAEigB,OAAOuW,IAAKx2B,EAAEigB,OAAO8sC,MAAO/sD,EAAEigB,OAAO+oF,OAAQhpG,EAAEigB,OAAOgpF,KAAMjpG,EAAEigB,OAAOipF,YC1BjF,MAAMM,GACTxyG,cACIzD,KAAKk2G,SAAW,GAIhBl2G,KAAKm2G,IAAM,KACPn2G,KAAK6gE,UACE7gE,KAAKk2G,UAKhBl2G,KAAKk3E,MAAQ,KACTk/B,aAAaC,WAAWJ,GAAYK,YAKxCt2G,KAAK6gE,QAAU,KACX,MAAM01C,EAAaH,aAAaI,QAAQP,GAAYK,WAEhDt2G,KAAKk2G,SADHK,EACcxzF,KAAKC,MAAMuzF,GAGf,IAKpBv2G,KAAKy2G,MAAQ,KACTL,aAAaM,QAAQT,GAAYK,UAAWvzF,KAAK4zF,UAAU32G,KAAKk2G,WAChEl2G,KAAK6gE,WAKT7gE,KAAK42G,SAAYC,GACN72G,KAAKk2G,SAASthE,MAAM/B,GAAMA,EAAExlC,KAAOwpG,IAK9C72G,KAAK82G,KAAQv0F,IACJviB,KAAK42G,SAASr0F,EAAKlV,MACpBrN,KAAKk2G,SAASv1G,KAAK4hB,GACnBviB,KAAKy2G,UAMbz2G,KAAK2lB,OAAS,CAACpD,EAAMw0F,MACA,IAAbA,EACA/2G,KAAK82G,KAAKv0F,IAEQ,IAAbw0F,GAIA/2G,KAAK42G,SAASr0F,EAAKlV,IAHxBrN,KAAKg3G,OAAOz0F,EAAKlV,IAIbrN,KAAK82G,KAAKv0F,IAUtBviB,KAAKg3G,OAAUH,IACP72G,KAAK42G,SAASC,KACd72G,KAAKk2G,SAAWl2G,KAAKk2G,SAAS5lG,QAAQuiC,GAAMA,EAAExlC,KAAOwpG,IACrD72G,KAAKy2G,UAGbz2G,KAAK6gE,WAGbo1C,GAAYK,UAAY,+BAExB,MAAMW,GAAc,IAAIhB,GAsBxB,SAASiB,KACL,MAAMC,EAAgBv3G,SAASs5C,cAAc,mBACvCpC,EAAUl3C,SAASs5C,cAAc,iCACjCk+D,EAASH,GAAYd,MAAM7yG,OAC3B4X,EAAU47B,EAAQ57B,QAAQ,YAChCk8F,EAAS,EAAID,EAAc70D,UAAUjnC,IAAI,sBAAwB87F,EAAc70D,UAAU5kC,OAAO,sBAChGxC,EAAQue,OAAoB,IAAX29E,EACjBtgE,EAAQxkC,YAAc8kG,EAAOt2G,WAEjC,SAASu2G,KACLz3G,SAASkO,iBAAiB,sBAAsBimC,SAASvyC,IACrD,MAAM+gB,EAAOQ,KAAKC,MAAMxhB,EAAKkgG,QAAoB,YACjDlgG,EAAK8gD,UAAU38B,OAAO,QAASsxF,GAAYL,SAASr0F,EAAKlV,QAjCjE6pG,KACAG,KAGAz3G,SAASoQ,iBAAiB,uBAAuB,KAE7CqnG,KAEAH,QAIJt3G,SAASkO,iBAAiB,sBAAsBimC,SAASvyC,IACrD,MAAM+gB,EAAOQ,KAAKC,MAAMxhB,EAAKkgG,QAAoB,YACjDlgG,EAAKwO,iBAAiB,SAAS,KAC3BinG,GAAYtxF,OAAOpD,GAEnB3iB,SAASgiG,cAAc,IAAIC,YAAY,8BCtG/C,MAAMyV,GAAe,IAAIrB,GAEnBhkF,GAAYryB,SAASs5C,cAAc,8BA8CzC,SAASq+D,KACL,MAAMtlF,EAAYryB,SAASs5C,cAAc,sBACrCjnB,IACAA,EAAUphB,UAAY,GACtBymG,GAAanB,MAAMpiE,SAAQ,CAAC83D,EAAG1pG,KAC3B8vB,EAAUtvB,YAItB,SAA+B4f,EAAMpH,GACjC,MAAMsuE,EAAU7pF,SAAS0C,cAAc,OACvCmnF,EAAQv5E,UAAY,oBACpBu5E,EAAQ54E,UAAY,6HAGI0R,EAAKi1F,6tBAgC7B,OAlFJ,SAA0BvlF,EAAWwlF,EAAQt8F,GAEzC,IAAIvK,EAAQhR,SAAS0C,cAAc,SACnCsO,EAAM6oB,QAAS,EACf7oB,EAAMvL,KAAO,mBAAmB8V,UAChCvK,EAAMvD,GAAK,mBAAmB8N,UAC9BvK,EAAMzJ,MAAQswG,EAAOpyG,KACrB4sB,EAAUtvB,YAAYiO,GAEtBA,EAAQhR,SAAS0C,cAAc,SAC/BsO,EAAM6oB,QAAS,EACf7oB,EAAMvL,KAAO,mBAAmB8V,iBAChCvK,EAAMvD,GAAK,mBAAmB8N,iBAC9BvK,EAAMzJ,MAAQswG,EAAOC,YACrBzlF,EAAUtvB,YAAYiO,GAEtB,MAAM+mG,EAAW/3G,SAAS0C,cAAc,OACxCq1G,EAASznG,UAAY,oDACrBynG,EAAS9mG,UAAY,wJAKrBD,EAAQhR,SAAS0C,cAAc,SAC/BsO,EAAM6oB,QAAS,EACf7oB,EAAMjP,KAAO,SACbiP,EAAM+nC,IAAM,IACZ/nC,EAAM+nB,KAAO,IACb/nB,EAAMV,UAAY,eAClBU,EAAMvL,KAAO,mBAAmB8V,cAChCvK,EAAMvD,GAAK,mBAAmB8N,cAC9BvK,EAAMzJ,MAAQ,IACdwwG,EAASh1G,YAAYiO,GACrBqhB,EAAUtvB,YAAYg1G,GA+BtBC,CADanuB,EAAQvwC,cAAc,2BACZ32B,EAAMpH,GAE7BsuE,EAAQvwC,cAAc,8BAA8Bz2C,aAAa,MAAO8f,EAAKld,MAC7EokF,EAAQvwC,cAAc,gBAAgB5mC,YAAciQ,EAAKld,KAGzDokF,EAAQz5E,iBAAiB,iBAAiB,KAClCy5E,EAAQnnC,UAAU75C,SAAS,YAC3B6uG,GAAaN,OAAOz0F,EAAKlV,IAEzBzN,SAASgiG,cAAc,IAAIC,YAAY,4BAI/CpY,EAAQvwC,cAAc,6BAA6BlpC,iBAAiB,SAAUvD,IAC1EA,EAAEwc,iBACFwgE,EAAQnnC,UAAUjnC,IAAI,aAEnBouE,EA1CuBouB,CAAsBhM,EAAG1pG,QA4C3D,SAAS21G,KACL,MAAMC,EAAQn4G,SAASs5C,cAAc,mBAC/BxjC,EAAQ9V,SAASs5C,cAAc,4BACjC6+D,IACAA,EAAMz1D,UAAU38B,OAAO,SAAwC,IAA9B2xF,GAAanB,MAAM7yG,QACpDoS,EAAM4sC,UAAU38B,OAAO,SAAU2xF,GAAanB,MAAM7yG,OAAS,IAnGjE2uB,KACAslF,KACAO,KACAl4G,SAASoQ,iBAAiB,uBAAuB,KAC7CiiB,GAAUphB,UAAY,GAEtB0mG,KACAO,SAgGJ/iG,SAASuiC,OAAOqmD,WAAW,oBAC3B2Z,GAAapgC,QAEbt3E,SAASgiG,cAAc,IAAIC,YAAY,yBC9G3C,MAAM9wC,GAAQnxD,SAASkO,iBAAiB,4BAClCkqG,GAAOp4G,SAASs5C,cAAc,qDAC9B++D,GAAOr4G,SAASs5C,cAAc,qDACpC,GAAI6X,GAAMztD,OAAQ,CACd,MAAMq2B,EAAW,EAEjBo3B,GAAMhd,SAAQvyC,GAAQA,EAAKwO,iBAAiB,gBAAgB,KACpDxO,EAAK8gD,UAAU75C,SAAS,mBAExBjH,EAAK8vC,cAAcxjC,iBAAiB,UAAUimC,SAAQvyC,IAC9CA,EAAK8gD,UAAU75C,SAAS,kBACxBjH,EAAK8gD,UAAU5kC,OAAO,oBAG9Blc,EAAK8gD,UAAU5kC,OAAO,iBACtBlc,EAAK8gD,UAAUjnC,IAAI,uBAI3BmsC,aAAY,KACRqpD,GAAUmH,IACVnH,GAAUoH,MACA,IAAXt+E,GAEP,SAASk3E,GAAUqH,GACf,MAAMC,EAAS,GAAG73G,MAAMa,KAAK+2G,EAAapqG,iBAAiB,WACrDsqG,EAAeF,EAAah/D,cAAc,wBAChD,IAAIm/D,EAAeF,EAAOv3G,QAAQw3G,GAElCC,GAAgB,EACZA,GAAgBF,EAAO70G,SACvB+0G,EAAe,GAGnBF,EAAOE,GAAc/1D,UAAUjnC,IAAI,iBClCvC,IAAIkO,GAAE,IAAIA,GAAE,CAACnlB,IAAI,SAASmlB,EAAEuqF,GAAG,IAAI75F,EAAE,GAAG,OAAO65F,EAAEvqF,EAAEnlB,KAAI,SAASmlB,EAAE+uF,GAAG,OAAOr+F,EAAEkB,MAAMm9F,EAAExE,EAAE3yG,KAAK8Y,EAAEsP,MAAKA,EAAEjpB,SAASi4G,aAAa,SAAShvF,EAAEuqF,GAAG,OAAOvqF,EAAEuqF,GAAG,EAAEvqF,EAAEuqF,EAAE,EAAE,GAAGlW,IAAI,SAASr0E,EAAEuqF,GAAG,IAAI75F,EAAE,GAAG,OAAOsP,EAAEouB,OAAOm8D,EAAE,SAASvqF,EAAE+uF,EAAE7rG,GAAG,OAAOwN,EAAEkB,MAAM1O,EAAE8c,EAAEuqF,EAAE3yG,KAAK8Y,EAAEq+F,IAAI,SAAS/uF,EAAEuqF,GAAG,OAAOvqF,EAAEuqF,GAAG,IAAI5+E,IAAI,SAAS4+E,EAAE75F,GAAG,OAAOjU,KAAKkvB,IAAIx0B,MAAM,KAAKuZ,EAAEsP,GAAEnlB,IAAI0vG,EAAE75F,GAAG65F,KAAK,IAAIA,GAAE,WAA+B,SAASrnG,EAAE8c,EAAEtP,EAAEq+F,GAAG,OAAO/uF,GAAG,KAAMtP,GAAhD,GAAsDq+F,EAAE,SAASn2G,EAAEonB,GAAG,IAAIuqF,EAAE,GAAG75F,GAAE,EAAG,SAASq+F,IAAIxE,EAAE7uG,KAAKskB,GAAGtP,GAAE,EAAG,MAAM,CAACtZ,KAAK,SAAS4oB,GAAGuqF,EAAEnzG,KAAK4oB,GAAGtP,GAAE,GAAIu+F,KAAK,SAASjvF,GAAG,OAAOtP,GAAGq+F,SAAI,IAAS/uF,IAAIA,EAAEuqF,EAAExwG,OAAO,GAAGwwG,EAAEvqF,IAAIjgB,IAAI,WAAW,OAAO2Q,GAAGq+F,IAAIxE,EAAExqG,OAAO6nE,KAAK,WAAW,OAAO2iC,EAAExwG,QAAQc,IAAI,SAASmlB,GAAG,OAAOuqF,EAAE1vG,IAAImlB,IAAIkvF,MAAM,WAAW,OAAOx+F,GAAGq+F,IAAIxE,IAAI,SAASn8C,EAAEpuC,EAAEuqF,EAAE75F,EAAEq+F,EAAE7rG,EAAEtK,EAAEw1D,GAAG33D,KAAK04G,GAAGnvF,EAAEvpB,KAAK24G,GAAG7E,EAAE9zG,KAAK44G,GAAG3+F,EAAEja,KAAK64G,GAAGP,EAAEt4G,KAAK84G,GAAGrsG,EAAEzM,KAAK+4G,GAAG52G,EAAEnC,KAAKg5G,MAAMrhD,EAAE,SAASvuD,IAAIpJ,KAAKi5G,OAAO,IAAI92G,GAAE,SAAS2xG,EAAE75F,GAAG,OAAOsP,GAAEgvF,aAAazE,EAAEoF,KAAKt1F,QAAQkwF,EAAEoF,KAAKC,SAASl/F,EAAEi/F,KAAKt1F,QAAQ3J,EAAEi/F,KAAKC,aAAY,SAASl4E,EAAE6yE,EAAE75F,GAAG,GAAGA,EAAE2J,QAAQ,CAAC,IAAI00F,EAAEr+F,EAAE0+F,GAAG1+F,EAAEy+F,GAAG,EAAEv2G,EAAE8X,EAAE4+F,GAAG5+F,EAAE2+F,GAAG,EAAEjhD,EAAEpuC,GAAE2L,IAAI,CAACojF,EAAEn2G,EAAE8X,EAAE8+F,GAAG9+F,EAAE6+F,GAAG,IAAI,GAAG,GAAG7+F,EAAE2J,QAAQ,MAAM,CAAC3J,EAAE3U,QAAQ,IAAI8D,EAAE63B,EAAEm4E,EAAEvN,EAAEwN,EAAE,EAAEp9F,EAAE,GAAGhB,EAAE,GAAG,GAAG08C,GAAG2gD,EAAE,IAAIlvG,EAAE6Q,EAAEy+F,GAAGtvG,GAAG6Q,EAAE0+F,GAAGvvG,IAAI,CAAC,IAAIyiG,EAAE,EAAE5qE,EAAEhnB,EAAE2+F,GAAG33E,GAAGhnB,EAAE4+F,GAAG53E,IAAI,IAAIm4E,EAAEn/F,EAAE6+F,GAAGM,GAAGn/F,EAAE8+F,GAAGK,IAAIvN,GAAGiI,EAAErnG,EAAErD,EAAE63B,EAAEm4E,KAAK,EAAEn9F,EAAE7S,GAAGiwG,GAAGxN,OAAO,GAAGl0C,GAAGx1D,EAAE,IAAIiH,EAAE6Q,EAAE2+F,GAAGxvG,GAAG6Q,EAAE4+F,GAAGzvG,IAAI,CAAC,IAAIyiG,EAAE,EAAE5qE,EAAEhnB,EAAEy+F,GAAGz3E,GAAGhnB,EAAE0+F,GAAG13E,IAAI,IAAIm4E,EAAEn/F,EAAE6+F,GAAGM,GAAGn/F,EAAE8+F,GAAGK,IAAIvN,GAAGiI,EAAErnG,EAAEw0B,EAAE73B,EAAEgwG,KAAK,EAAEn9F,EAAE7S,GAAGiwG,GAAGxN,OAAO,IAAIziG,EAAE6Q,EAAE6+F,GAAG1vG,GAAG6Q,EAAE8+F,GAAG3vG,IAAI,CAAC,IAAIyiG,EAAE,EAAE5qE,EAAEhnB,EAAEy+F,GAAGz3E,GAAGhnB,EAAE0+F,GAAG13E,IAAI,IAAIm4E,EAAEn/F,EAAE2+F,GAAGQ,GAAGn/F,EAAE4+F,GAAGO,IAAIvN,GAAGiI,EAAErnG,EAAEw0B,EAAEm4E,EAAEhwG,KAAK,EAAE6S,EAAE7S,GAAGiwG,GAAGxN,EAAE,OAAO5vF,EAAE83B,SAAQ,SAASxqB,EAAEuqF,GAAG74F,EAAE64F,GAAGuF,EAAE9vF,KAAI,SAASA,GAAG,IAAIuqF,EAAEwE,EAAE7rG,EAAEtK,EAAEw1D,EAAE12B,EAAE1X,EAAE,IAAI6vF,EAAE7vF,EAAE,IAAIsiF,EAAE,EAAE,IAAIziG,EAAE6Q,EAAEgnB,GAAG73B,GAAG6Q,EAAEm/F,GAAGhwG,IAAI,GAAG6S,EAAE7S,GAAGiwG,EAAE,EAAE,CAAC,IAAI5sG,EAAEwN,EAAE3U,OAAOnD,EAAE8X,EAAE3U,OAAOqyD,GAAGm8C,EAAE1qG,EAAE6Q,EAAEgnB,MAAMq3E,EAAEr+F,EAAEm/F,GAAGhwG,GAAGpD,KAAK2yC,IAAI1+B,EAAEm/F,GAAG,KAAKhwG,EAAEkvG,EAAE,IAAItyG,KAAKkvB,IAAIjb,EAAEgnB,MAAM73B,EAAE,EAAE0qG,EAAE,KAAK73F,EAAE07C,IAAIA,IAAI,IAAIk0C,EAAE5wF,EAAE08C,IAAIk0C,GAAG5vF,EAAE07C,EAAE,IAAIk0C,EAAE5wF,IAAI08C,GAAG,OAAOlrD,EAAE2sG,GAAGzhD,EAAEx1D,EAAE8+B,GAAGx0B,EAAE2sG,GAAG,EAAE,CAAC3sG,EAAEtK,IAAnQ,CAAwQw1D,GAAG2gD,EAAE,IAAI3gD,GAAGx1D,EAAE,IAAI,MAAM,OAAOw1D,EAAEp0D,UAAU,CAAC41G,OAAO,SAAS5vF,GAAG,OAAOvpB,KAAKs5G,UAAU/vF,IAAIvpB,KAAKs5G,SAASt5G,KAAK24G,GAAG34G,KAAK04G,GAAG,IAAI14G,KAAK64G,GAAG74G,KAAK44G,GAAG,IAAI54G,KAAK+4G,GAAG/4G,KAAK84G,GAAG,IAAI94G,KAAKs5G,SAAS11F,MAAM,SAAS2F,GAAG,IAAIuqF,EAAE9zG,KAAKg5G,MAAM,IAAIh5G,KAAKu5G,YAAYhwF,EAAE,CAAC,IAAItP,EAAEq+F,EAAEn2G,EAAEw1D,EAAE,EAAE,IAAI19C,EAAEja,KAAK04G,GAAGz+F,GAAGja,KAAK24G,GAAG1+F,IAAI,IAAIq+F,EAAEt4G,KAAK44G,GAAGN,GAAGt4G,KAAK64G,GAAGP,IAAI,IAAIn2G,EAAEnC,KAAK84G,GAAG32G,GAAGnC,KAAK+4G,GAAG52G,IAAIw1D,GAAGm8C,EAAErnG,EAAEwN,EAAEq+F,EAAEn2G,KAAK,EAAEnC,KAAKw5G,OAAO7hD,EAAE33D,KAAKu5G,YAAW,EAAG,OAAOv5G,KAAKw5G,QAAQl0G,KAAK,WAAW,OAAO,IAAIqyD,EAAE33D,KAAK04G,GAAG14G,KAAK24G,GAAG34G,KAAK44G,GAAG54G,KAAK64G,GAAG74G,KAAK84G,GAAG94G,KAAK+4G,GAAG/4G,KAAKg5G,QAAQS,IAAI,SAASlwF,GAAG,IAAItP,EAAEja,KAAKg5G,MAAM,IAAIh5G,KAAK05G,MAAMnwF,EAAE,CAAC,IAAI+uF,EAAEn2G,EAAEw1D,EAAEvuD,EAAE63B,EAAE,EAAW4qE,EAAE,EAAEwN,EAAE,EAAEp9F,EAAE,EAAE,IAAI9Z,EAAEnC,KAAK04G,GAAGv2G,GAAGnC,KAAK24G,GAAGx2G,IAAI,IAAIw1D,EAAE33D,KAAK44G,GAAGjhD,GAAG33D,KAAK64G,GAAGlhD,IAAI,IAAIvuD,EAAEpJ,KAAK84G,GAAG1vG,GAAGpJ,KAAK+4G,GAAG3vG,IAAI63B,GAAGq3E,EAAEr+F,EAAExN,EAAEtK,EAAEw1D,EAAEvuD,KAAK,EAAEyiG,GAAGyM,GAAGn2G,EAAE,IAAtI,EAA4Ik3G,GAAGf,GAAG3gD,EAAE,IAApJ,EAA0J17C,GAAGq8F,GAAGlvG,EAAE,IAAlK,EAAwKpJ,KAAK05G,KAAKz4E,EAAE,IAAI4qE,EAAE5qE,MAAMo4E,EAAEp4E,MAAMhlB,EAAEglB,IAAI,IAA9M,GAAqNjhC,KAAK04G,GAAG14G,KAAK24G,GAAG,GAAG,MAAxO,GAAiP34G,KAAK44G,GAAG54G,KAAK64G,GAAG,GAAG,MAApQ,GAA6Q74G,KAAK84G,GAAG94G,KAAK+4G,GAAG,GAAG,IAAI,OAAO/4G,KAAK05G,MAAMjxG,SAAS,SAAS8gB,GAAG,IAAIuqF,EAAEvqF,EAAE,IAAluE,EAAwuE,OAAOowF,KAAKpwF,EAAE,IAAtvE,EAA4vEqwF,KAAKrwF,EAAE,IAAnwE,EAAywEuqF,GAAG9zG,KAAK04G,IAAI5E,GAAG9zG,KAAK24G,IAAIgB,MAAM35G,KAAK44G,IAAIe,MAAM35G,KAAK64G,IAAIe,MAAM55G,KAAK84G,IAAIc,MAAM55G,KAAK+4G,KAAK3vG,EAAE7F,UAAU,CAAC5C,KAAK,SAAS4oB,GAAGvpB,KAAKi5G,OAAOt4G,KAAK,CAACu4G,KAAK3vF,EAAEswF,MAAMtwF,EAAEkwF,SAASK,QAAQ,WAAW,OAAO95G,KAAKi5G,OAAO70G,KAAI,SAASmlB,GAAG,OAAOA,EAAEswF,UAAS1oC,KAAK,WAAW,OAAOnxE,KAAKi5G,OAAO9nC,QAAQ/sE,IAAI,SAASmlB,GAAG,IAAI,IAAIuqF,EAAE9zG,KAAKi5G,OAAOh/F,EAAE,EAAEA,EAAE65F,EAAE3iC,OAAOl3D,IAAI,GAAG65F,EAAE0E,KAAKv+F,GAAGi/F,KAAKzwG,SAAS8gB,GAAG,OAAOuqF,EAAE0E,KAAKv+F,GAAG4/F,MAAM,OAAO75G,KAAK+5G,QAAQxwF,IAAIwwF,QAAQ,SAASxwF,GAAG,IAAI,IAAIuqF,EAAE75F,EAAEq+F,EAAE7rG,EAAEzM,KAAKi5G,OAAO92G,EAAE,EAAEA,EAAEsK,EAAE0kE,OAAOhvE,MAAM8X,EAAEjU,KAAK8uG,KAAK9uG,KAAK+uG,IAAIxrF,EAAE,GAAG9c,EAAE+rG,KAAKr2G,GAAG03G,MAAM,GAAG,GAAG7zG,KAAK+uG,IAAIxrF,EAAE,GAAG9c,EAAE+rG,KAAKr2G,GAAG03G,MAAM,GAAG,GAAG7zG,KAAK+uG,IAAIxrF,EAAE,GAAG9c,EAAE+rG,KAAKr2G,GAAG03G,MAAM,GAAG,KAAK/F,QAAG,IAASA,KAAKA,EAAE75F,EAAEq+F,EAAE7rG,EAAE+rG,KAAKr2G,GAAG03G,OAAO,OAAOvB,GAAG0B,QAAQ,WAAW,IAAIlG,EAAE9zG,KAAKi5G,OAAOnF,EAAE7uG,MAAK,SAAS6uG,EAAE75F,GAAG,OAAOsP,GAAEgvF,aAAahvF,GAAEq0E,IAAIkW,EAAE+F,OAAOtwF,GAAEq0E,IAAI3jF,EAAE4/F,WAAU,IAAI5/F,EAAE65F,EAAE,GAAG+F,MAAM5/F,EAAE,GAAG,GAAGA,EAAE,GAAG,GAAGA,EAAE,GAAG,IAAI65F,EAAE,GAAG+F,MAAM,CAAC,EAAE,EAAE,IAAI,IAAIvB,EAAExE,EAAExwG,OAAO,EAAEmJ,EAAEqnG,EAAEwE,GAAGuB,MAAMptG,EAAE,GAAG,KAAKA,EAAE,GAAG,KAAKA,EAAE,GAAG,MAAMqnG,EAAEwE,GAAGuB,MAAM,CAAC,IAAI,IAAI,QAAQ,CAACI,SAAS,SAASb,EAAEvN,GAAG,IAAIuN,EAAE91G,QAAQuoG,EAAE,GAAGA,EAAE,IAAI,OAAM,EAAG,IAAIwN,EAAE,SAAS9vF,GAAG,IAAI+uF,EAAEn2G,EAAE,IAAIyD,MAAM,OAAQ,OAAO2jB,EAAEwqB,SAAQ,SAASxqB,GAAG+uF,EAAE7rG,EAAE8c,EAAE,IAAjyG,EAAuyGA,EAAE,IAAzyG,EAA+yGA,EAAE,IAAjzG,GAAwzGpnB,EAAEm2G,IAAIn2G,EAAEm2G,IAAI,GAAG,KAAIn2G,EAAnH,CAAsHi3G,GAAGC,EAAEtlE,SAAQ,eAAc,IAAI93B,EAAE,SAASsN,EAAEuqF,GAAG,IAAIwE,EAAE7rG,EAAEtK,EAAEiH,EAAE,IAAI63B,EAAE,EAAEm4E,EAAE,IAAIvN,EAAE,EAAEwN,EAAE,IAAIp9F,EAAE,EAAE,OAAOsN,EAAEwqB,SAAQ,SAASxqB,IAAI+uF,EAAE/uF,EAAE,IAAv8G,GAA88GngB,EAAEA,EAAEkvG,EAAEA,EAAEr3E,IAAIA,EAAEq3E,IAAI7rG,EAAE8c,EAAE,IAAp+G,GAA2+G6vF,EAAEA,EAAE3sG,EAAEA,EAAEo/F,IAAIA,EAAEp/F,IAAItK,EAAEonB,EAAE,IAAjgH,GAAwgH8vF,EAAEA,EAAEl3G,EAAEA,EAAE8Z,IAAIA,EAAE9Z,MAAK,IAAIw1D,EAAEvuD,EAAE63B,EAAEm4E,EAAEvN,EAAEwN,EAAEp9F,EAAE63F,GAA9L,CAAkMsF,EAAEC,GAAGp+F,EAAE,IAAI9Y,GAAE,SAAS2xG,EAAE75F,GAAG,OAAOsP,GAAEgvF,aAAazE,EAAElwF,QAAQ3J,EAAE2J,YAAW,SAASs2F,EAAE3wF,EAAEuqF,GAAG,IAAI,IAAI75F,EAAExN,EAAE8c,EAAE4nD,OAAOhvE,EAAE,EAAEA,EAA5pH,KAAiqH,CAAC,GAAGsK,GAAGqnG,EAAE,OAAO,GAAG3xG,IAAprH,IAA0rH,OAAO,IAAI8X,EAAEsP,EAAEjgB,OAAOsa,QAAQ,CAAC,IAAI+zC,EAAE12B,EAAEo4E,EAAEp/F,GAAG7Q,EAAEuuD,EAAE,GAAGyhD,EAAEzhD,EAAE,GAAG,IAAIvuD,EAAE,OAAOmgB,EAAE5oB,KAAKyI,GAAGgwG,IAAI7vF,EAAE5oB,KAAKy4G,GAAG3sG,UAAU8c,EAAE5oB,KAAKsZ,GAAG9X,KAAK8Y,EAAEta,KAAKsb,GAAGi+F,EAAEj/F,EAAE,IAAI4wF,GAAG,IAAI,IAAI7yE,EAAE,IAAI72B,GAAE,SAAS2xG,EAAE75F,GAAG,OAAOsP,GAAEgvF,aAAazE,EAAElwF,QAAQkwF,EAAEqF,SAASl/F,EAAE2J,QAAQ3J,EAAEk/F,aAAYl+F,EAAEk2D,QAAQn4C,EAAEr4B,KAAKsa,EAAE3R,OAAO4wG,EAAElhF,EAAE6yE,GAAG,IAAI,IAAIxiG,EAAE,IAAID,EAAE4vB,EAAEm4C,QAAQ9nE,EAAE1I,KAAKq4B,EAAE1vB,OAAO,OAAOD,IAArhI,GAA4hI4wG,SAAShgG,GAAE,SAASsP,GAAGvpB,KAAKm6G,OAAOv6G,SAAS0C,cAAc,UAAUtC,KAAKkD,QAAQlD,KAAKm6G,OAAOC,WAAW,MAAMp6G,KAAKwxB,MAAMxxB,KAAKm6G,OAAO3oF,MAAMjI,EAAE8wF,aAAar6G,KAAK4zB,OAAO5zB,KAAKm6G,OAAOvmF,OAAOrK,EAAE+wF,cAAct6G,KAAKkD,QAAQq3G,UAAUhxF,EAAE,EAAE,EAAEvpB,KAAKwxB,MAAMxxB,KAAK4zB,SAAS3Z,GAAE1W,UAAUi3G,aAAa,WAAW,OAAOx6G,KAAKkD,QAAQs3G,aAAa,EAAE,EAAEx6G,KAAKwxB,MAAMxxB,KAAK4zB,SAAS,IAAI0kF,GAAE,aAAaA,GAAE/0G,UAAUk3G,SAAS,SAASlxF,EAAEuqF,GAAG,YAAO,IAASA,IAAIA,EAAE,IAAI9zG,KAAK06G,WAAWnxF,EAAE,EAAEuqF,GAAG,IAAIwE,GAAE/0G,UAAUm3G,WAAW,SAASnxF,EAAE+uF,EAAE7rG,GAAG,IAAItK,EAAE,SAASonB,GAAG,IAAIuqF,EAAEvqF,EAAEoxF,WAAW1gG,EAAEsP,EAAEqxF,QAAQ,QAAG,IAAS9G,GAAG+G,OAAO/nB,UAAUghB,GAAG,CAAC,GAAG,IAAIA,EAAE,MAAM,IAAIh0G,MAAM,oGAAoGg0G,EAAE9tG,KAAKkvB,IAAI4+E,EAAE,GAAGA,EAAE9tG,KAAK2yC,IAAIm7D,EAAE,SAASA,EAAE,GAAG,YAAO,IAAS75F,IAAI4gG,OAAO/nB,UAAU74E,IAAIA,EAAE,KAAKA,EAAE,IAAI,CAAC0gG,WAAW7G,EAAE8G,QAAQ3gG,GAAnU,CAAuU,CAAC0gG,WAAWrC,EAAEsC,QAAQnuG,IAAIkrD,EAAE,IAAI19C,GAAEsP,GAAGngB,EAAE,SAASmgB,EAAEuqF,EAAE75F,GAAG,IAAI,IAAIq+F,EAAE/uF,EAAE9c,EAAE,GAAGtK,EAAE,EAAEw1D,OAAE,EAAOvuD,OAAE,EAAO63B,OAAE,EAAOm4E,OAAE,EAAOvN,OAAE,EAAO1pG,EAAE2xG,EAAE3xG,GAAG8X,EAAE7Q,EAAEkvG,EAAE,GAAG3gD,EAAE,EAAEx1D,IAAI8+B,EAAEq3E,EAAE3gD,EAAE,GAAGyhD,EAAEd,EAAE3gD,EAAE,SAAI,KAAUk0C,EAAEyM,EAAE3gD,EAAE,KAAKk0C,GAAG,OAAOziG,EAAE,KAAK63B,EAAE,KAAKm4E,EAAE,KAAK3sG,EAAE9L,KAAK,CAACyI,EAAE63B,EAAEm4E,KAAK,OAAO3sG,EAAzM,CAA4MkrD,EAAE6iD,eAAej4F,KAAKo1C,EAAEnmC,MAAMmmC,EAAE/jC,OAAOzxB,EAAEy4G,SAAS35E,EAAE6yE,GAAE1qG,EAAEjH,EAAEw4G,YAAY,OAAO15E,EAAEA,EAAE64E,UAAU,MAAMxB,GAAE/0G,UAAUu3G,gBAAgB,SAASvxF,EAAEuqF,EAAE75F,GAAG,IAAIq+F,EAAEt4G,KAAKyM,EAAE7M,SAAS0C,cAAc,OAAOmK,EAAEuD,iBAAiB,QAAO,WAAW,IAAI7N,EAAEm2G,EAAEoC,WAAWjuG,EAAE,EAAEwN,GAAG65F,EAAE3xG,EAAE,GAAGonB,MAAK9c,EAAE7K,IAAI2nB,GAAG+uF,GAAE/0G,UAAUi3G,aAAa,SAASjxF,EAAEuqF,GAAG,IAAI75F,EAAE,IAAIutB,eAAevtB,EAAE4tB,KAAK,MAAMte,GAAE,GAAItP,EAAEouB,aAAa,cAAcpuB,EAAE+tB,OAAO,WAAW,GAAG,KAAKhoC,KAAKolC,OAAO,CAAC,IAAI7b,EAAE,IAAIwpD,WAAW/yE,KAAKmmC,UAAUhkC,EAAEonB,EAAEjmB,OAAO,IAAI,IAAI2W,EAAE,IAAIrU,MAAMzD,GAAGm2G,EAAE,EAAEA,EAAE/uF,EAAEjmB,OAAOg1G,IAAIr+F,EAAEq+F,GAAG5sG,OAAOC,aAAa4d,EAAE+uF,IAAI,IAAI7rG,EAAEwN,EAAEpM,KAAK,IAAI8pD,EAAE53D,OAAOg7G,KAAKtuG,GAAGqnG,EAAE,yBAAyBn8C,KAAK19C,EAAE8rB,QAAQuyE,GAAE/0G,UAAUy3G,cAAc,SAASzxF,EAAEuqF,EAAE75F,GAAG,IAAIq+F,EAAEt4G,KAAKA,KAAKw6G,aAAajxF,GAAE,SAASA,GAAG,IAAI9c,EAAE7M,SAAS0C,cAAc,OAAOmK,EAAEuD,iBAAiB,QAAO,WAAW,IAAIuZ,EAAE+uF,EAAEoC,WAAWjuG,EAAE,EAAEwN,GAAG65F,EAAEvqF,EAAE,GAAGvpB,SAAQyM,EAAE7K,IAAI2nB,MCYtuM,SAAS7oB,GAAMc,EAAM4U,GACjB,GAAoB,IAAhBA,EAAMob,OAAgC,IAAjBpb,EAAMwd,SAAiBxd,EAAM6kB,SAClD,OACJ,MAAMggF,EAAa,IAAIC,IAChBpH,EAAGoG,EAAG7wG,GAAK4xG,EAAWR,SAASrkG,GAChC+kG,EAGV,SAAqBrH,EAAGoG,EAAG7wG,GAEvB,OADkB,IAAJyqG,EAAgB,IAAJoG,EAAgB,IAAJ7wG,GAAY,KACnC,IAAO,QAAU,QALf+xG,CAAYtH,EAAGoG,EAAG7wG,GACnC7H,EAAK8gD,UAAU38B,OAAO,4BAA0C,UAAbw1F,GCDvD,SAASE,GAAoBzuE,GAEzB,IAAI5Y,EAAe,EACf4Y,EAAQ0V,UAAU75C,SAAS,cAC3BsjC,EAAEa,GAAS0uE,SAAS,QAChB1uE,EAAQ0V,UAAU75C,SAAS,yBAC3BurB,EAAe,KAGvB,IAsCYxlB,EACR67B,EAAmCvR,EAAwED,EAC3GiY,GAxCA/gC,IAAEA,IAuCFs6B,GADQ77B,EAtCSo+B,GAuCPlV,wBAAyBoB,EAAa/4B,OAAOyqC,aAAe5qC,SAAS+P,gBAAgBmpB,WAAYD,EAAY94B,OAAOwqC,aAAe3qC,SAAS+P,gBAAgBkpB,UACtKiY,EAAY9d,WAAWjzB,OAAOmxB,iBAAiB1iB,GAAIsiC,UAAU5qC,QAAQ,KAAM,KACxE,CACH6J,IAAKs6B,EAAKt6B,IAAM8oB,EAAYiY,EAC5BlZ,KAAMyS,EAAKzS,KAAOkB,IA1CtB,MAAMyiF,EAASxrG,EAAMikB,EAmCdkY,UAAUG,UAAUv/B,MAAM,gBAhC7B/M,OAAO4qC,SAAS,EAAG4wE,GAGnBx7G,OAAO4qC,SAAS,CAAE56B,IAAKwrG,EAAQ3hE,SAAU,WDhC1Bh6C,SAASkO,iBAAiB,kBAClCimC,SAAQvyC,IAEnB,MAAM4U,EAAQ5U,EAAK03C,cAAc,0BAC7B9iC,EAAM6kB,UACNv6B,GAAMc,EAAM4U,GAEhBA,EAAMpG,iBAAiB,QAAQ,KAC3BtP,GAAMc,EAAM4U,SETpBrW,OAAOy7G,KAAOz7G,OAAOy7G,MAAQ,GAC7Bz7G,OAAOy7G,KAAKC,QAAU,QACtB17G,OAAOy7G,KAAKE,qBAAsB,EAClC,WACI,IAAIC,EAAK/7G,SAAS0C,cAAc,UAChCq5G,EAAGh6G,KAAO,kBACVg6G,EAAGt4E,OAAQ,EACXs4E,EAAG/5G,KAAO,UAAYhC,SAASmV,SAASouB,SAAW,WAAa,WAAa,kCAC7E,IAAIlC,EAAIrhC,SAAS0N,qBAAqB,UAAU,GAChD2zB,EAAEr+B,WAAWwtB,aAAaurF,EAAI16E,GANlC,GDiCArhC,SAASkO,iBAAiB,wBAAwBimC,SAASvlC,IACvDA,EAAGwB,iBAAiB,SAAUvD,IAC1B,IAAI2I,EAAO3I,EAAEqe,cAActoB,aAAa,QACd,IAAtB4S,EAAKxU,QAAQ,MAAcwU,EAAK9R,OAAS,IACzCmJ,EAAEwc,iBACFoyF,GAAoBz7G,SAASs5C,cAAc9jC,WAKvD,MAAMN,GAAO/U,OAAOgV,SAASD,KACvBA,IAAQA,GAAKxR,OAAS,GACxByoC,EAAEhsC,QAAQqoB,GAAG,QAAQ,WACjBizF,GAAoBz7G,SAASs5C,cAAcpkC,KAKnD,WACI,IAAI8mG,EAAM77G,OAAOgV,SAASjU,WAC1B,GAAI86G,EAAIh7G,QAAQ,KAAO,EAAG,CACtB,IAAIi7G,EAAYD,EAAI7c,UAAU,EAAG6c,EAAIh7G,QAAQ,MAC7Cb,OAAOkhG,QAAQC,aAAa,GAAIthG,SAAS45D,MAAOqiD,IAPhDC"}