PageSourceSearch

https://brand.softbankselection.jp/client_info/SBCS/view/userweb/j…?timestamp=1790815876458

js softbankselection.jp collected 2026-10-02 03:06:28 UTC 381,532 bytes, 11,247 lines download raw bytes

vendor: 5,301 bytes, lines 1-194
1/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */
2/*!
3 * jQuery JavaScript Library v3.4.1
4 * https://jquery.com/
5 *
6 * Includes Sizzle.js
7 * https://sizzlejs.com/
8 *
9 * Copyright JS Foundation and other contributors
10 * Released under the MIT license
11 * https://jquery.org/license
12 *
13 * Date: 2019-05-01T21:04Z
14 */
15( function( global, factory ) {
16
17	"use strict";
18
19	if ( typeof module === "object" && typeof module.exports === "object" ) {
20
21		// For CommonJS and CommonJS-like environments where a proper `window`
22		// is present, execute the factory and get jQuery.
23		// For environments that do not have a `window` with a `document`
24		// (such as Node.js), expose a factory as module.exports.
25		// This accentuates the need for the creation of a real `window`.
26		// e.g. var jQuery = require("jquery")(window);
27		// See ticket #14549 for more info.
28		module.exports = global.document ?
29			factory( global, true ) :
30			function( w ) {
31				if ( !w.document ) {
32					throw new Error( "jQuery requires a window with a document" );
33				}
34				return factory( w );
35			};
36	} else {
37		factory( global );
38	}
39
40// Pass this if window is not defined yet
41} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
42
43// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
44// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
45// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
46// enough that all such attempts are guarded in a try block.
47"use strict";
48
49var arr = [];
50
51var document = window.document;
52
53var getProto = Object.getPrototypeOf;
54
55var slice = arr.slice;
56
57var concat = arr.concat;
58
59var push = arr.push;
60
61var indexOf = arr.indexOf;
62
63var class2type = {};
64
65var toString = class2type.toString;
66
67var hasOwn = class2type.hasOwnProperty;
68
69var fnToString = hasOwn.toString;
70
71var ObjectFunctionString = fnToString.call( Object );
72
73var support = {};
74
75var isFunction = function isFunction( obj ) {
76
77      // Support: Chrome <=57, Firefox <=52
78      // In some browsers, typeof returns "function" for HTML <object> elements
79      // (i.e., `typeof document.createElement( "object" ) === "function"`).
80      // We don't want to classify *any* DOM node as a function.
81      return typeof obj === "function" && typeof obj.nodeType !== "number";
82  };
83
84
85var isWindow = function isWindow( obj ) {
86		return obj != null && obj === obj.window;
87	};
88
89
90
91
92	var preservedScriptAttributes = {
93		type: true,
94		src: true,
95		nonce: true,
96		noModule: true
97	};
98
99	function DOMEval( code, node, doc ) {
100		doc = doc || document;
101
102		var i, val,
103			script = doc.createElement( "script" );
104
105		script.text = code;
106		if ( node ) {
107			for ( i in preservedScriptAttributes ) {
108
109				// Support: Firefox 64+, Edge 18+
110				// Some browsers don't support the "nonce" property on scripts.
111				// On the other hand, just using `getAttribute` is not enough as
112				// the `nonce` attribute is reset to an empty string whenever it
113				// becomes browsing-context connected.
114				// See https://github.com/whatwg/html/issues/2369
115				// See https://html.spec.whatwg.org/#nonce-attributes
116				// The `node.getAttribute` check was added for the sake of
117				// `jQuery.globalEval` so that it can fake a nonce-containing node
118				// via an object.
119				val = node[ i ] || node.getAttribute && node.getAttribute( i );
120				if ( val ) {
121					script.setAttribute( i, val );
122				}
123			}
124		}
125		doc.head.appendChild( script ).parentNode.removeChild( script );
126	}
127
128
129function toType( obj ) {
130	if ( obj == null ) {
131		return obj + "";
132	}
133
134	// Support: Android <=2.3 only (functionish RegExp)
135	return typeof obj === "object" || typeof obj === "function" ?
136		class2type[ toString.call( obj ) ] || "object" :
137		typeof obj;
138}
139/* global Symbol */
140// Defining this global in .eslintrc.json would create a danger of using the global
141// unguarded in another place, it seems safer to define global only for this module
142
143
144
145var
146	version = "3.4.1",
147
148	// Define a local copy of jQuery
149	jQuery = function( selector, context ) {
150
151		// The jQuery object is actually just the init constructor 'enhanced'
152		// Need init if jQuery is called (just allow error to be thrown if not included)
153		return new jQuery.fn.init( selector, context );
154	},
155
156	// Support: Android <=4.0 only
157	// Make sure we trim BOM and NBSP
158	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
159
160jQuery.fn = jQuery.prototype = {
161
162	// The current version of jQuery being used
163	jquery: version,
164
165	constructor: jQuery,
166
167	// The default length of a jQuery object is 0
168	length: 0,
169
170	toArray: function() {
171		return slice.call( this );
172	},
173
174	// Get the Nth element in the matched element set OR
175	// Get the whole matched element set as a clean array
176	get: function( num ) {
177
178		// Return all the elements in a clean array
179		if ( num == null ) {
180			return slice.call( this );
181		}
182
183		// Return just the one element from the set
184		return num < 0 ? this[ num + this.length ] : this[ num ];
185	},
186
187	// Take an array of elements and push it onto the stack
188	// (returning the new matched element set)
189	pushStack: function( elems ) {
190
191		// Build a new jQuery matched element set
192		var ret = jQuery.merge( this.constructor(), elems );
193
194		// Add the old object onto the stack (as a reference)
vendor: 4,276 bytes, lines 195-386
195		ret.prevObject = this;
196
197		// Return the newly-formed element set
198		return ret;
199	},
200
201	// Execute a callback for every element in the matched set.
202	each: function( callback ) {
203		return jQuery.each( this, callback );
204	},
205
206	map: function( callback ) {
207		return this.pushStack( jQuery.map( this, function( elem, i ) {
208			return callback.call( elem, i, elem );
209		} ) );
210	},
211
212	slice: function() {
213		return this.pushStack( slice.apply( this, arguments ) );
214	},
215
216	first: function() {
217		return this.eq( 0 );
218	},
219
220	last: function() {
221		return this.eq( -1 );
222	},
223
224	eq: function( i ) {
225		var len = this.length,
226			j = +i + ( i < 0 ? len : 0 );
227		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
228	},
229
230	end: function() {
231		return this.prevObject || this.constructor();
232	},
233
234	// For internal use only.
235	// Behaves like an Array's method, not like a jQuery method.
236	push: push,
237	sort: arr.sort,
238	splice: arr.splice
239};
240
241jQuery.extend = jQuery.fn.extend = function() {
242	var options, name, src, copy, copyIsArray, clone,
243		target = arguments[ 0 ] || {},
244		i = 1,
245		length = arguments.length,
246		deep = false;
247
248	// Handle a deep copy situation
249	if ( typeof target === "boolean" ) {
250		deep = target;
251
252		// Skip the boolean and the target
253		target = arguments[ i ] || {};
254		i++;
255	}
256
257	// Handle case when target is a string or something (possible in deep copy)
258	if ( typeof target !== "object" && !isFunction( target ) ) {
259		target = {};
260	}
261
262	// Extend jQuery itself if only one argument is passed
263	if ( i === length ) {
264		target = this;
265		i--;
266	}
267
268	for ( ; i < length; i++ ) {
269
270		// Only deal with non-null/undefined values
271		if ( ( options = arguments[ i ] ) != null ) {
272
273			// Extend the base object
274			for ( name in options ) {
275				copy = options[ name ];
276
277				// Prevent Object.prototype pollution
278				// Prevent never-ending loop
279				if ( name === "__proto__" || target === copy ) {
280					continue;
281				}
282
283				// Recurse if we're merging plain objects or arrays
284				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
285					( copyIsArray = Array.isArray( copy ) ) ) ) {
286					src = target[ name ];
287
288					// Ensure proper type for the source value
289					if ( copyIsArray && !Array.isArray( src ) ) {
290						clone = [];
291					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
292						clone = {};
293					} else {
294						clone = src;
295					}
296					copyIsArray = false;
297
298					// Never move original objects, clone them
299					target[ name ] = jQuery.extend( deep, clone, copy );
300
301				// Don't bring in undefined values
302				} else if ( copy !== undefined ) {
303					target[ name ] = copy;
304				}
305			}
306		}
307	}
308
309	// Return the modified object
310	return target;
311};
312
313jQuery.extend( {
314
315	// Unique for each copy of jQuery on the page
316	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
317
318	// Assume jQuery is ready without the ready module
319	isReady: true,
320
321	error: function( msg ) {
322		throw new Error( msg );
323	},
324
325	noop: function() {},
326
327	isPlainObject: function( obj ) {
328		var proto, Ctor;
329
330		// Detect obvious negatives
331		// Use toString instead of jQuery.type to catch host objects
332		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
333			return false;
334		}
335
336		proto = getProto( obj );
337
338		// Objects with no prototype (e.g., `Object.create( null )`) are plain
339		if ( !proto ) {
340			return true;
341		}
342
343		// Objects with prototype are plain iff they were constructed by a global Object function
344		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
345		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
346	},
347
348	isEmptyObject: function( obj ) {
349		var name;
350
351		for ( name in obj ) {
352			return false;
353		}
354		return true;
355	},
356
357	// Evaluates a script in a global context
358	globalEval: function( code, options ) {
359		DOMEval( code, { nonce: options && options.nonce } );
360	},
361
362	each: function( obj, callback ) {
363		var length, i = 0;
364
365		if ( isArrayLike( obj ) ) {
366			length = obj.length;
367			for ( ; i < length; i++ ) {
368				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
369					break;
370				}
371			}
372		} else {
373			for ( i in obj ) {
374				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
375					break;
376				}
377			}
378		}
379
380		return obj;
381	},
382
383	// Support: Android <=4.0 only
384	trim: function( text ) {
385		return text == null ?
386			"" :
vendor: 5,066 bytes, lines 387-604
387			( text + "" ).replace( rtrim, "" );
388	},
389
390	// results is for internal usage only
391	makeArray: function( arr, results ) {
392		var ret = results || [];
393
394		if ( arr != null ) {
395			if ( isArrayLike( Object( arr ) ) ) {
396				jQuery.merge( ret,
397					typeof arr === "string" ?
398					[ arr ] : arr
399				);
400			} else {
401				push.call( ret, arr );
402			}
403		}
404
405		return ret;
406	},
407
408	inArray: function( elem, arr, i ) {
409		return arr == null ? -1 : indexOf.call( arr, elem, i );
410	},
411
412	// Support: Android <=4.0 only, PhantomJS 1 only
413	// push.apply(_, arraylike) throws on ancient WebKit
414	merge: function( first, second ) {
415		var len = +second.length,
416			j = 0,
417			i = first.length;
418
419		for ( ; j < len; j++ ) {
420			first[ i++ ] = second[ j ];
421		}
422
423		first.length = i;
424
425		return first;
426	},
427
428	grep: function( elems, callback, invert ) {
429		var callbackInverse,
430			matches = [],
431			i = 0,
432			length = elems.length,
433			callbackExpect = !invert;
434
435		// Go through the array, only saving the items
436		// that pass the validator function
437		for ( ; i < length; i++ ) {
438			callbackInverse = !callback( elems[ i ], i );
439			if ( callbackInverse !== callbackExpect ) {
440				matches.push( elems[ i ] );
441			}
442		}
443
444		return matches;
445	},
446
447	// arg is for internal usage only
448	map: function( elems, callback, arg ) {
449		var length, value,
450			i = 0,
451			ret = [];
452
453		// Go through the array, translating each of the items to their new values
454		if ( isArrayLike( elems ) ) {
455			length = elems.length;
456			for ( ; i < length; i++ ) {
457				value = callback( elems[ i ], i, arg );
458
459				if ( value != null ) {
460					ret.push( value );
461				}
462			}
463
464		// Go through every key on the object,
465		} else {
466			for ( i in elems ) {
467				value = callback( elems[ i ], i, arg );
468
469				if ( value != null ) {
470					ret.push( value );
471				}
472			}
473		}
474
475		// Flatten any nested arrays
476		return concat.apply( [], ret );
477	},
478
479	// A global GUID counter for objects
480	guid: 1,
481
482	// jQuery.support is not used in Core but other projects attach their
483	// properties to it so it needs to exist.
484	support: support
485} );
486
487if ( typeof Symbol === "function" ) {
488	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
489}
490
491// Populate the class2type map
492jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
493function( i, name ) {
494	class2type[ "[object " + name + "]" ] = name.toLowerCase();
495} );
496
497function isArrayLike( obj ) {
498
499	// Support: real iOS 8.2 only (not reproducible in simulator)
500	// `in` check used to prevent JIT error (gh-2145)
501	// hasOwn isn't used here due to false negatives
502	// regarding Nodelist length in IE
503	var length = !!obj && "length" in obj && obj.length,
504		type = toType( obj );
505
506	if ( isFunction( obj ) || isWindow( obj ) ) {
507		return false;
508	}
509
510	return type === "array" || length === 0 ||
511		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
512}
513var Sizzle =
514/*!
515 * Sizzle CSS Selector Engine v2.3.4
516 * https://sizzlejs.com/
517 *
518 * Copyright JS Foundation and other contributors
519 * Released under the MIT license
520 * https://js.foundation/
521 *
522 * Date: 2019-04-08
523 */
524(function( window ) {
525
526var i,
527	support,
528	Expr,
529	getText,
530	isXML,
531	tokenize,
532	compile,
533	select,
534	outermostContext,
535	sortInput,
536	hasDuplicate,
537
538	// Local document vars
539	setDocument,
540	document,
541	docElem,
542	documentIsHTML,
543	rbuggyQSA,
544	rbuggyMatches,
545	matches,
546	contains,
547
548	// Instance-specific data
549	expando = "sizzle" + 1 * new Date(),
550	preferredDoc = window.document,
551	dirruns = 0,
552	done = 0,
553	classCache = createCache(),
554	tokenCache = createCache(),
555	compilerCache = createCache(),
556	nonnativeSelectorCache = createCache(),
557	sortOrder = function( a, b ) {
558		if ( a === b ) {
559			hasDuplicate = true;
560		}
561		return 0;
562	},
563
564	// Instance methods
565	hasOwn = ({}).hasOwnProperty,
566	arr = [],
567	pop = arr.pop,
568	push_native = arr.push,
569	push = arr.push,
570	slice = arr.slice,
571	// Use a stripped-down indexOf as it's faster than native
572	// https://jsperf.com/thor-indexof-vs-for/5
573	indexOf = function( list, elem ) {
574		var i = 0,
575			len = list.length;
576		for ( ; i < len; i++ ) {
577			if ( list[i] === elem ) {
578				return i;
579			}
580		}
581		return -1;
582	},
583
584	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
585
586	// Regular expressions
587
588	// http://www.w3.org/TR/css3-selectors/#whitespace
589	whitespace = "[\\x20\\t\\r\\n\\f]",
590
591	// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
592	identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
593
594	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
595	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
596		// Operator (capture 2)
597		"*([*^$|!~]?=)" + whitespace +
598		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
599		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
600		"*\\]",
601
602	pseudos = ":(" + identifier + ")(?:\\((" +
603		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
604		// 1. quoted (capture 3; capture 4 or capture 5)
vendor: 4,396 bytes, lines 605-738
605		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
606		// 2. simple (capture 6)
607		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
608		// 3. anything else (capture 2)
609		".*" +
610		")\\)|)",
611
612	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
613	rwhitespace = new RegExp( whitespace + "+", "g" ),
614	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
615
616	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
617	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
618	rdescend = new RegExp( whitespace + "|>" ),
619
620	rpseudo = new RegExp( pseudos ),
621	ridentifier = new RegExp( "^" + identifier + "$" ),
622
623	matchExpr = {
624		"ID": new RegExp( "^#(" + identifier + ")" ),
625		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
626		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
627		"ATTR": new RegExp( "^" + attributes ),
628		"PSEUDO": new RegExp( "^" + pseudos ),
629		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
630			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
631			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
632		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
633		// For use in libraries implementing .is()
634		// We use this for POS matching in `select`
635		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
636			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
637	},
638
639	rhtml = /HTML$/i,
640	rinputs = /^(?:input|select|textarea|button)$/i,
641	rheader = /^h\d$/i,
642
643	rnative = /^[^{]+\{\s*\[native \w/,
644
645	// Easily-parseable/retrievable ID or TAG or CLASS selectors
646	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
647
648	rsibling = /[+~]/,
649
650	// CSS escapes
651	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
652	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
653	funescape = function( _, escaped, escapedWhitespace ) {
654		var high = "0x" + escaped - 0x10000;
655		// NaN means non-codepoint
656		// Support: Firefox<24
657		// Workaround erroneous numeric interpretation of +"0x"
658		return high !== high || escapedWhitespace ?
659			escaped :
660			high < 0 ?
661				// BMP codepoint
662				String.fromCharCode( high + 0x10000 ) :
663				// Supplemental Plane codepoint (surrogate pair)
664				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
665	},
666
667	// CSS string/identifier serialization
668	// https://drafts.csswg.org/cssom/#common-serializing-idioms
669	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
670	fcssescape = function( ch, asCodePoint ) {
671		if ( asCodePoint ) {
672
673			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
674			if ( ch === "\0" ) {
675				return "\uFFFD";
676			}
677
678			// Control characters and (dependent upon position) numbers get escaped as code points
679			return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
680		}
681
682		// Other potentially-special ASCII characters get backslash-escaped
683		return "\\" + ch;
684	},
685
686	// Used for iframes
687	// See setDocument()
688	// Removing the function wrapper causes a "Permission Denied"
689	// error in IE
690	unloadHandler = function() {
691		setDocument();
692	},
693
694	inDisabledFieldset = addCombinator(
695		function( elem ) {
696			return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
697		},
698		{ dir: "parentNode", next: "legend" }
699	);
700
701// Optimize for push.apply( _, NodeList )
702try {
703	push.apply(
704		(arr = slice.call( preferredDoc.childNodes )),
705		preferredDoc.childNodes
706	);
707	// Support: Android<4.0
708	// Detect silently failing push.apply
709	arr[ preferredDoc.childNodes.length ].nodeType;
710} catch ( e ) {
711	push = { apply: arr.length ?
712
713		// Leverage slice if possible
714		function( target, els ) {
715			push_native.apply( target, slice.call(els) );
716		} :
717
718		// Support: IE<9
719		// Otherwise append directly
720		function( target, els ) {
721			var j = target.length,
722				i = 0;
723			// Can't trust NodeList.length
724			while ( (target[j++] = els[i++]) ) {}
725			target.length = j - 1;
726		}
727	};
728}
729
730function Sizzle( selector, context, results, seed ) {
731	var m, i, elem, nid, match, groups, newSelector,
732		newContext = context && context.ownerDocument,
733
734		// nodeType defaults to 9, since context defaults to document
735		nodeType = context ? context.nodeType : 9;
736
737	results = results || [];
738
vendor: 4,664 bytes, lines 739-905
739	// Return early from calls with invalid selector or context
740	if ( typeof selector !== "string" || !selector ||
741		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
742
743		return results;
744	}
745
746	// Try to shortcut find operations (as opposed to filters) in HTML documents
747	if ( !seed ) {
748
749		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
750			setDocument( context );
751		}
752		context = context || document;
753
754		if ( documentIsHTML ) {
755
756			// If the selector is sufficiently simple, try using a "get*By*" DOM method
757			// (excepting DocumentFragment context, where the methods don't exist)
758			if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
759
760				// ID selector
761				if ( (m = match[1]) ) {
762
763					// Document context
764					if ( nodeType === 9 ) {
765						if ( (elem = context.getElementById( m )) ) {
766
767							// Support: IE, Opera, Webkit
768							// TODO: identify versions
769							// getElementById can match elements by name instead of ID
770							if ( elem.id === m ) {
771								results.push( elem );
772								return results;
773							}
774						} else {
775							return results;
776						}
777
778					// Element context
779					} else {
780
781						// Support: IE, Opera, Webkit
782						// TODO: identify versions
783						// getElementById can match elements by name instead of ID
784						if ( newContext && (elem = newContext.getElementById( m )) &&
785							contains( context, elem ) &&
786							elem.id === m ) {
787
788							results.push( elem );
789							return results;
790						}
791					}
792
793				// Type selector
794				} else if ( match[2] ) {
795					push.apply( results, context.getElementsByTagName( selector ) );
796					return results;
797
798				// Class selector
799				} else if ( (m = match[3]) && support.getElementsByClassName &&
800					context.getElementsByClassName ) {
801
802					push.apply( results, context.getElementsByClassName( m ) );
803					return results;
804				}
805			}
806
807			// Take advantage of querySelectorAll
808			if ( support.qsa &&
809				!nonnativeSelectorCache[ selector + " " ] &&
810				(!rbuggyQSA || !rbuggyQSA.test( selector )) &&
811
812				// Support: IE 8 only
813				// Exclude object elements
814				(nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) {
815
816				newSelector = selector;
817				newContext = context;
818
819				// qSA considers elements outside a scoping root when evaluating child or
820				// descendant combinators, which is not what we want.
821				// In such cases, we work around the behavior by prefixing every selector in the
822				// list with an ID selector referencing the scope context.
823				// Thanks to Andrew Dupont for this technique.
824				if ( nodeType === 1 && rdescend.test( selector ) ) {
825
826					// Capture the context ID, setting it first if necessary
827					if ( (nid = context.getAttribute( "id" )) ) {
828						nid = nid.replace( rcssescape, fcssescape );
829					} else {
830						context.setAttribute( "id", (nid = expando) );
831					}
832
833					// Prefix every selector in the list
834					groups = tokenize( selector );
835					i = groups.length;
836					while ( i-- ) {
837						groups[i] = "#" + nid + " " + toSelector( groups[i] );
838					}
839					newSelector = groups.join( "," );
840
841					// Expand context for sibling selectors
842					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
843						context;
844				}
845
846				try {
847					push.apply( results,
848						newContext.querySelectorAll( newSelector )
849					);
850					return results;
851				} catch ( qsaError ) {
852					nonnativeSelectorCache( selector, true );
853				} finally {
854					if ( nid === expando ) {
855						context.removeAttribute( "id" );
856					}
857				}
858			}
859		}
860	}
861
862	// All others
863	return select( selector.replace( rtrim, "$1" ), context, results, seed );
864}
865
866/**
867 * Create key-value caches of limited size
868 * @returns {function(string, object)} Returns the Object data after storing it on itself with
869 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
870 *	deleting the oldest entry
871 */
872function createCache() {
873	var keys = [];
874
875	function cache( key, value ) {
876		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
877		if ( keys.push( key + " " ) > Expr.cacheLength ) {
878			// Only keep the most recent entries
879			delete cache[ keys.shift() ];
880		}
881		return (cache[ key + " " ] = value);
882	}
883	return cache;
884}
885
886/**
887 * Mark a function for special use by Sizzle
888 * @param {Function} fn The function to mark
889 */
890function markFunction( fn ) {
891	fn[ expando ] = true;
892	return fn;
893}
894
895/**
896 * Support testing using an element
897 * @param {Function} fn Passed the created element and returns a boolean result
898 */
899function assert( fn ) {
900	var el = document.createElement("fieldset");
901
902	try {
903		return !!fn( el );
904	} catch (e) {
905		return false;
vendor: 10,862 bytes, lines 906-1272
906	} finally {
907		// Remove from its parent by default
908		if ( el.parentNode ) {
909			el.parentNode.removeChild( el );
910		}
911		// release memory in IE
912		el = null;
913	}
914}
915
916/**
917 * Adds the same handler for all of the specified attrs
918 * @param {String} attrs Pipe-separated list of attributes
919 * @param {Function} handler The method that will be applied
920 */
921function addHandle( attrs, handler ) {
922	var arr = attrs.split("|"),
923		i = arr.length;
924
925	while ( i-- ) {
926		Expr.attrHandle[ arr[i] ] = handler;
927	}
928}
929
930/**
931 * Checks document order of two siblings
932 * @param {Element} a
933 * @param {Element} b
934 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
935 */
936function siblingCheck( a, b ) {
937	var cur = b && a,
938		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
939			a.sourceIndex - b.sourceIndex;
940
941	// Use IE sourceIndex if available on both nodes
942	if ( diff ) {
943		return diff;
944	}
945
946	// Check if b follows a
947	if ( cur ) {
948		while ( (cur = cur.nextSibling) ) {
949			if ( cur === b ) {
950				return -1;
951			}
952		}
953	}
954
955	return a ? 1 : -1;
956}
957
958/**
959 * Returns a function to use in pseudos for input types
960 * @param {String} type
961 */
962function createInputPseudo( type ) {
963	return function( elem ) {
964		var name = elem.nodeName.toLowerCase();
965		return name === "input" && elem.type === type;
966	};
967}
968
969/**
970 * Returns a function to use in pseudos for buttons
971 * @param {String} type
972 */
973function createButtonPseudo( type ) {
974	return function( elem ) {
975		var name = elem.nodeName.toLowerCase();
976		return (name === "input" || name === "button") && elem.type === type;
977	};
978}
979
980/**
981 * Returns a function to use in pseudos for :enabled/:disabled
982 * @param {Boolean} disabled true for :disabled; false for :enabled
983 */
984function createDisabledPseudo( disabled ) {
985
986	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
987	return function( elem ) {
988
989		// Only certain elements can match :enabled or :disabled
990		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
991		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
992		if ( "form" in elem ) {
993
994			// Check for inherited disabledness on relevant non-disabled elements:
995			// * listed form-associated elements in a disabled fieldset
996			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
997			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
998			// * option elements in a disabled optgroup
999			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
1000			// All such elements have a "form" property.
1001			if ( elem.parentNode && elem.disabled === false ) {
1002
1003				// Option elements defer to a parent optgroup if present
1004				if ( "label" in elem ) {
1005					if ( "label" in elem.parentNode ) {
1006						return elem.parentNode.disabled === disabled;
1007					} else {
1008						return elem.disabled === disabled;
1009					}
1010				}
1011
1012				// Support: IE 6 - 11
1013				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
1014				return elem.isDisabled === disabled ||
1015
1016					// Where there is no isDisabled, check manually
1017					/* jshint -W018 */
1018					elem.isDisabled !== !disabled &&
1019						inDisabledFieldset( elem ) === disabled;
1020			}
1021
1022			return elem.disabled === disabled;
1023
1024		// Try to winnow out elements that can't be disabled before trusting the disabled property.
1025		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
1026		// even exist on them, let alone have a boolean value.
1027		} else if ( "label" in elem ) {
1028			return elem.disabled === disabled;
1029		}
1030
1031		// Remaining elements are neither :enabled nor :disabled
1032		return false;
1033	};
1034}
1035
1036/**
1037 * Returns a function to use in pseudos for positionals
1038 * @param {Function} fn
1039 */
1040function createPositionalPseudo( fn ) {
1041	return markFunction(function( argument ) {
1042		argument = +argument;
1043		return markFunction(function( seed, matches ) {
1044			var j,
1045				matchIndexes = fn( [], seed.length, argument ),
1046				i = matchIndexes.length;
1047
1048			// Match elements found at the specified indexes
1049			while ( i-- ) {
1050				if ( seed[ (j = matchIndexes[i]) ] ) {
1051					seed[j] = !(matches[j] = seed[j]);
1052				}
1053			}
1054		});
1055	});
1056}
1057
1058/**
1059 * Checks a node for validity as a Sizzle context
1060 * @param {Element|Object=} context
1061 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
1062 */
1063function testContext( context ) {
1064	return context && typeof context.getElementsByTagName !== "undefined" && context;
1065}
1066
1067// Expose support vars for convenience
1068support = Sizzle.support = {};
1069
1070/**
1071 * Detects XML nodes
1072 * @param {Element|Object} elem An element or a document
1073 * @returns {Boolean} True iff elem is a non-HTML XML node
1074 */
1075isXML = Sizzle.isXML = function( elem ) {
1076	var namespace = elem.namespaceURI,
1077		docElem = (elem.ownerDocument || elem).documentElement;
1078
1079	// Support: IE <=8
1080	// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
1081	// https://bugs.jquery.com/ticket/4833
1082	return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
1083};
1084
1085/**
1086 * Sets document-related variables once based on the current document
1087 * @param {Element|Object} [doc] An element or document object to use to set the document
1088 * @returns {Object} Returns the current document
1089 */
1090setDocument = Sizzle.setDocument = function( node ) {
1091	var hasCompare, subWindow,
1092		doc = node ? node.ownerDocument || node : preferredDoc;
1093
1094	// Return early if doc is invalid or already selected
1095	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
1096		return document;
1097	}
1098
1099	// Update global variables
1100	document = doc;
1101	docElem = document.documentElement;
1102	documentIsHTML = !isXML( document );
1103
1104	// Support: IE 9-11, Edge
1105	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
1106	if ( preferredDoc !== document &&
1107		(subWindow = document.defaultView) && subWindow.top !== subWindow ) {
1108
1109		// Support: IE 11, Edge
1110		if ( subWindow.addEventListener ) {
1111			subWindow.addEventListener( "unload", unloadHandler, false );
1112
1113		// Support: IE 9 - 10 only
1114		} else if ( subWindow.attachEvent ) {
1115			subWindow.attachEvent( "onunload", unloadHandler );
1116		}
1117	}
1118
1119	/* Attributes
1120	---------------------------------------------------------------------- */
1121
1122	// Support: IE<8
1123	// Verify that getAttribute really returns attributes and not properties
1124	// (excepting IE8 booleans)
1125	support.attributes = assert(function( el ) {
1126		el.className = "i";
1127		return !el.getAttribute("className");
1128	});
1129
1130	/* getElement(s)By*
1131	---------------------------------------------------------------------- */
1132
1133	// Check if getElementsByTagName("*") returns only elements
1134	support.getElementsByTagName = assert(function( el ) {
1135		el.appendChild( document.createComment("") );
1136		return !el.getElementsByTagName("*").length;
1137	});
1138
1139	// Support: IE<9
1140	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
1141
1142	// Support: IE<10
1143	// Check if getElementById returns elements by name
1144	// The broken getElementById methods don't pick up programmatically-set names,
1145	// so use a roundabout getElementsByName test
1146	support.getById = assert(function( el ) {
1147		docElem.appendChild( el ).id = expando;
1148		return !document.getElementsByName || !document.getElementsByName( expando ).length;
1149	});
1150
1151	// ID filter and find
1152	if ( support.getById ) {
1153		Expr.filter["ID"] = function( id ) {
1154			var attrId = id.replace( runescape, funescape );
1155			return function( elem ) {
1156				return elem.getAttribute("id") === attrId;
1157			};
1158		};
1159		Expr.find["ID"] = function( id, context ) {
1160			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1161				var elem = context.getElementById( id );
1162				return elem ? [ elem ] : [];
1163			}
1164		};
1165	} else {
1166		Expr.filter["ID"] =  function( id ) {
1167			var attrId = id.replace( runescape, funescape );
1168			return function( elem ) {
1169				var node = typeof elem.getAttributeNode !== "undefined" &&
1170					elem.getAttributeNode("id");
1171				return node && node.value === attrId;
1172			};
1173		};
1174
1175		// Support: IE 6 - 7 only
1176		// getElementById is not reliable as a find shortcut
1177		Expr.find["ID"] = function( id, context ) {
1178			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
1179				var node, i, elems,
1180					elem = context.getElementById( id );
1181
1182				if ( elem ) {
1183
1184					// Verify the id attribute
1185					node = elem.getAttributeNode("id");
1186					if ( node && node.value === id ) {
1187						return [ elem ];
1188					}
1189
1190					// Fall back on getElementsByName
1191					elems = context.getElementsByName( id );
1192					i = 0;
1193					while ( (elem = elems[i++]) ) {
1194						node = elem.getAttributeNode("id");
1195						if ( node && node.value === id ) {
1196							return [ elem ];
1197						}
1198					}
1199				}
1200
1201				return [];
1202			}
1203		};
1204	}
1205
1206	// Tag
1207	Expr.find["TAG"] = support.getElementsByTagName ?
1208		function( tag, context ) {
1209			if ( typeof context.getElementsByTagName !== "undefined" ) {
1210				return context.getElementsByTagName( tag );
1211
1212			// DocumentFragment nodes don't have gEBTN
1213			} else if ( support.qsa ) {
1214				return context.querySelectorAll( tag );
1215			}
1216		} :
1217
1218		function( tag, context ) {
1219			var elem,
1220				tmp = [],
1221				i = 0,
1222				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
1223				results = context.getElementsByTagName( tag );
1224
1225			// Filter out possible comments
1226			if ( tag === "*" ) {
1227				while ( (elem = results[i++]) ) {
1228					if ( elem.nodeType === 1 ) {
1229						tmp.push( elem );
1230					}
1231				}
1232
1233				return tmp;
1234			}
1235			return results;
1236		};
1237
1238	// Class
1239	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
1240		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
1241			return context.getElementsByClassName( className );
1242		}
1243	};
1244
1245	/* QSA/matchesSelector
1246	---------------------------------------------------------------------- */
1247
1248	// QSA and matchesSelector support
1249
1250	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
1251	rbuggyMatches = [];
1252
1253	// qSa(:focus) reports false when true (Chrome 21)
1254	// We allow this because of a bug in IE8/9 that throws an error
1255	// whenever `document.activeElement` is accessed on an iframe
1256	// So, we allow :focus to pass through QSA all the time to avoid the IE error
1257	// See https://bugs.jquery.com/ticket/13378
1258	rbuggyQSA = [];
1259
1260	if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
1261		// Build QSA regex
1262		// Regex strategy adopted from Diego Perini
1263		assert(function( el ) {
1264			// Select is set to empty string on purpose
1265			// This is to test IE's treatment of not explicitly
1266			// setting a boolean content attribute,
1267			// since its presence should be enough
1268			// https://bugs.jquery.com/ticket/12359
1269			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
1270				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
1271				"<option selected=''></option></select>";
1272
vendor: 8,268 bytes, lines 1273-1557
1273			// Support: IE8, Opera 11-12.16
1274			// Nothing should be selected when empty strings follow ^= or $= or *=
1275			// The test attribute must be unknown in Opera but "safe" for WinRT
1276			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
1277			if ( el.querySelectorAll("[msallowcapture^='']").length ) {
1278				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
1279			}
1280
1281			// Support: IE8
1282			// Boolean attributes and "value" are not treated correctly
1283			if ( !el.querySelectorAll("[selected]").length ) {
1284				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
1285			}
1286
1287			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
1288			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
1289				rbuggyQSA.push("~=");
1290			}
1291
1292			// Webkit/Opera - :checked should return selected option elements
1293			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
1294			// IE8 throws error here and will not see later tests
1295			if ( !el.querySelectorAll(":checked").length ) {
1296				rbuggyQSA.push(":checked");
1297			}
1298
1299			// Support: Safari 8+, iOS 8+
1300			// https://bugs.webkit.org/show_bug.cgi?id=136851
1301			// In-page `selector#id sibling-combinator selector` fails
1302			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
1303				rbuggyQSA.push(".#.+[+~]");
1304			}
1305		});
1306
1307		assert(function( el ) {
1308			el.innerHTML = "<a href='' disabled='disabled'></a>" +
1309				"<select disabled='disabled'><option/></select>";
1310
1311			// Support: Windows 8 Native Apps
1312			// The type and name attributes are restricted during .innerHTML assignment
1313			var input = document.createElement("input");
1314			input.setAttribute( "type", "hidden" );
1315			el.appendChild( input ).setAttribute( "name", "D" );
1316
1317			// Support: IE8
1318			// Enforce case-sensitivity of name attribute
1319			if ( el.querySelectorAll("[name=d]").length ) {
1320				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
1321			}
1322
1323			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
1324			// IE8 throws error here and will not see later tests
1325			if ( el.querySelectorAll(":enabled").length !== 2 ) {
1326				rbuggyQSA.push( ":enabled", ":disabled" );
1327			}
1328
1329			// Support: IE9-11+
1330			// IE's :disabled selector does not pick up the children of disabled fieldsets
1331			docElem.appendChild( el ).disabled = true;
1332			if ( el.querySelectorAll(":disabled").length !== 2 ) {
1333				rbuggyQSA.push( ":enabled", ":disabled" );
1334			}
1335
1336			// Opera 10-11 does not throw on post-comma invalid pseudos
1337			el.querySelectorAll("*,:x");
1338			rbuggyQSA.push(",.*:");
1339		});
1340	}
1341
1342	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
1343		docElem.webkitMatchesSelector ||
1344		docElem.mozMatchesSelector ||
1345		docElem.oMatchesSelector ||
1346		docElem.msMatchesSelector) )) ) {
1347
1348		assert(function( el ) {
1349			// Check to see if it's possible to do matchesSelector
1350			// on a disconnected node (IE 9)
1351			support.disconnectedMatch = matches.call( el, "*" );
1352
1353			// This should fail with an exception
1354			// Gecko does not error, returns false instead
1355			matches.call( el, "[s!='']:x" );
1356			rbuggyMatches.push( "!=", pseudos );
1357		});
1358	}
1359
1360	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
1361	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
1362
1363	/* Contains
1364	---------------------------------------------------------------------- */
1365	hasCompare = rnative.test( docElem.compareDocumentPosition );
1366
1367	// Element contains another
1368	// Purposefully self-exclusive
1369	// As in, an element does not contain itself
1370	contains = hasCompare || rnative.test( docElem.contains ) ?
1371		function( a, b ) {
1372			var adown = a.nodeType === 9 ? a.documentElement : a,
1373				bup = b && b.parentNode;
1374			return a === bup || !!( bup && bup.nodeType === 1 && (
1375				adown.contains ?
1376					adown.contains( bup ) :
1377					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
1378			));
1379		} :
1380		function( a, b ) {
1381			if ( b ) {
1382				while ( (b = b.parentNode) ) {
1383					if ( b === a ) {
1384						return true;
1385					}
1386				}
1387			}
1388			return false;
1389		};
1390
1391	/* Sorting
1392	---------------------------------------------------------------------- */
1393
1394	// Document order sorting
1395	sortOrder = hasCompare ?
1396	function( a, b ) {
1397
1398		// Flag for duplicate removal
1399		if ( a === b ) {
1400			hasDuplicate = true;
1401			return 0;
1402		}
1403
1404		// Sort on method existence if only one input has compareDocumentPosition
1405		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
1406		if ( compare ) {
1407			return compare;
1408		}
1409
1410		// Calculate position if both inputs belong to the same document
1411		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
1412			a.compareDocumentPosition( b ) :
1413
1414			// Otherwise we know they are disconnected
1415			1;
1416
1417		// Disconnected nodes
1418		if ( compare & 1 ||
1419			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
1420
1421			// Choose the first element that is related to our preferred document
1422			if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
1423				return -1;
1424			}
1425			if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
1426				return 1;
1427			}
1428
1429			// Maintain original order
1430			return sortInput ?
1431				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
1432				0;
1433		}
1434
1435		return compare & 4 ? -1 : 1;
1436	} :
1437	function( a, b ) {
1438		// Exit early if the nodes are identical
1439		if ( a === b ) {
1440			hasDuplicate = true;
1441			return 0;
1442		}
1443
1444		var cur,
1445			i = 0,
1446			aup = a.parentNode,
1447			bup = b.parentNode,
1448			ap = [ a ],
1449			bp = [ b ];
1450
1451		// Parentless nodes are either documents or disconnected
1452		if ( !aup || !bup ) {
1453			return a === document ? -1 :
1454				b === document ? 1 :
1455				aup ? -1 :
1456				bup ? 1 :
1457				sortInput ?
1458				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
1459				0;
1460
1461		// If the nodes are siblings, we can do a quick check
1462		} else if ( aup === bup ) {
1463			return siblingCheck( a, b );
1464		}
1465
1466		// Otherwise we need full lists of their ancestors for comparison
1467		cur = a;
1468		while ( (cur = cur.parentNode) ) {
1469			ap.unshift( cur );
1470		}
1471		cur = b;
1472		while ( (cur = cur.parentNode) ) {
1473			bp.unshift( cur );
1474		}
1475
1476		// Walk down the tree looking for a discrepancy
1477		while ( ap[i] === bp[i] ) {
1478			i++;
1479		}
1480
1481		return i ?
1482			// Do a sibling check if the nodes have a common ancestor
1483			siblingCheck( ap[i], bp[i] ) :
1484
1485			// Otherwise nodes in our document sort first
1486			ap[i] === preferredDoc ? -1 :
1487			bp[i] === preferredDoc ? 1 :
1488			0;
1489	};
1490
1491	return document;
1492};
1493
1494Sizzle.matches = function( expr, elements ) {
1495	return Sizzle( expr, null, null, elements );
1496};
1497
1498Sizzle.matchesSelector = function( elem, expr ) {
1499	// Set document vars if needed
1500	if ( ( elem.ownerDocument || elem ) !== document ) {
1501		setDocument( elem );
1502	}
1503
1504	if ( support.matchesSelector && documentIsHTML &&
1505		!nonnativeSelectorCache[ expr + " " ] &&
1506		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
1507		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
1508
1509		try {
1510			var ret = matches.call( elem, expr );
1511
1512			// IE 9's matchesSelector returns false on disconnected nodes
1513			if ( ret || support.disconnectedMatch ||
1514					// As well, disconnected nodes are said to be in a document
1515					// fragment in IE 9
1516					elem.document && elem.document.nodeType !== 11 ) {
1517				return ret;
1518			}
1519		} catch (e) {
1520			nonnativeSelectorCache( expr, true );
1521		}
1522	}
1523
1524	return Sizzle( expr, document, null, [ elem ] ).length > 0;
1525};
1526
1527Sizzle.contains = function( context, elem ) {
1528	// Set document vars if needed
1529	if ( ( context.ownerDocument || context ) !== document ) {
1530		setDocument( context );
1531	}
1532	return contains( context, elem );
1533};
1534
1535Sizzle.attr = function( elem, name ) {
1536	// Set document vars if needed
1537	if ( ( elem.ownerDocument || elem ) !== document ) {
1538		setDocument( elem );
1539	}
1540
1541	var fn = Expr.attrHandle[ name.toLowerCase() ],
1542		// Don't get fooled by Object.prototype properties (jQuery #13807)
1543		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
1544			fn( elem, name, !documentIsHTML ) :
1545			undefined;
1546
1547	return val !== undefined ?
1548		val :
1549		support.attributes || !documentIsHTML ?
1550			elem.getAttribute( name ) :
1551			(val = elem.getAttributeNode(name)) && val.specified ?
1552				val.value :
1553				null;
1554};
1555
1556Sizzle.escape = function( sel ) {
1557	return (sel + "").replace( rcssescape, fcssescape )
vendor: 11,991 bytes, lines 1557-1980
1557;
1558};
1559
1560Sizzle.error = function( msg ) {
1561	throw new Error( "Syntax error, unrecognized expression: " + msg );
1562};
1563
1564/**
1565 * Document sorting and removing duplicates
1566 * @param {ArrayLike} results
1567 */
1568Sizzle.uniqueSort = function( results ) {
1569	var elem,
1570		duplicates = [],
1571		j = 0,
1572		i = 0;
1573
1574	// Unless we *know* we can detect duplicates, assume their presence
1575	hasDuplicate = !support.detectDuplicates;
1576	sortInput = !support.sortStable && results.slice( 0 );
1577	results.sort( sortOrder );
1578
1579	if ( hasDuplicate ) {
1580		while ( (elem = results[i++]) ) {
1581			if ( elem === results[ i ] ) {
1582				j = duplicates.push( i );
1583			}
1584		}
1585		while ( j-- ) {
1586			results.splice( duplicates[ j ], 1 );
1587		}
1588	}
1589
1590	// Clear input after sorting to release objects
1591	// See https://github.com/jquery/sizzle/pull/225
1592	sortInput = null;
1593
1594	return results;
1595};
1596
1597/**
1598 * Utility function for retrieving the text value of an array of DOM nodes
1599 * @param {Array|Element} elem
1600 */
1601getText = Sizzle.getText = function( elem ) {
1602	var node,
1603		ret = "",
1604		i = 0,
1605		nodeType = elem.nodeType;
1606
1607	if ( !nodeType ) {
1608		// If no nodeType, this is expected to be an array
1609		while ( (node = elem[i++]) ) {
1610			// Do not traverse comment nodes
1611			ret += getText( node );
1612		}
1613	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
1614		// Use textContent for elements
1615		// innerText usage removed for consistency of new lines (jQuery #11153)
1616		if ( typeof elem.textContent === "string" ) {
1617			return elem.textContent;
1618		} else {
1619			// Traverse its children
1620			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
1621				ret += getText( elem );
1622			}
1623		}
1624	} else if ( nodeType === 3 || nodeType === 4 ) {
1625		return elem.nodeValue;
1626	}
1627	// Do not include comment or processing instruction nodes
1628
1629	return ret;
1630};
1631
1632Expr = Sizzle.selectors = {
1633
1634	// Can be adjusted by the user
1635	cacheLength: 50,
1636
1637	createPseudo: markFunction,
1638
1639	match: matchExpr,
1640
1641	attrHandle: {},
1642
1643	find: {},
1644
1645	relative: {
1646		">": { dir: "parentNode", first: true },
1647		" ": { dir: "parentNode" },
1648		"+": { dir: "previousSibling", first: true },
1649		"~": { dir: "previousSibling" }
1650	},
1651
1652	preFilter: {
1653		"ATTR": function( match ) {
1654			match[1] = match[1].replace( runescape, funescape );
1655
1656			// Move the given value to match[3] whether quoted or unquoted
1657			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
1658
1659			if ( match[2] === "~=" ) {
1660				match[3] = " " + match[3] + " ";
1661			}
1662
1663			return match.slice( 0, 4 );
1664		},
1665
1666		"CHILD": function( match ) {
1667			/* matches from matchExpr["CHILD"]
1668				1 type (only|nth|...)
1669				2 what (child|of-type)
1670				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
1671				4 xn-component of xn+y argument ([+-]?\d*n|)
1672				5 sign of xn-component
1673				6 x of xn-component
1674				7 sign of y-component
1675				8 y of y-component
1676			*/
1677			match[1] = match[1].toLowerCase();
1678
1679			if ( match[1].slice( 0, 3 ) === "nth" ) {
1680				// nth-* requires argument
1681				if ( !match[3] ) {
1682					Sizzle.error( match[0] );
1683				}
1684
1685				// numeric x and y parameters for Expr.filter.CHILD
1686				// remember that false/true cast respectively to 0/1
1687				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
1688				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
1689
1690			// other types prohibit arguments
1691			} else if ( match[3] ) {
1692				Sizzle.error( match[0] );
1693			}
1694
1695			return match;
1696		},
1697
1698		"PSEUDO": function( match ) {
1699			var excess,
1700				unquoted = !match[6] && match[2];
1701
1702			if ( matchExpr["CHILD"].test( match[0] ) ) {
1703				return null;
1704			}
1705
1706			// Accept quoted arguments as-is
1707			if ( match[3] ) {
1708				match[2] = match[4] || match[5] || "";
1709
1710			// Strip excess characters from unquoted arguments
1711			} else if ( unquoted && rpseudo.test( unquoted ) &&
1712				// Get excess from tokenize (recursively)
1713				(excess = tokenize( unquoted, true )) &&
1714				// advance to the next closing parenthesis
1715				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
1716
1717				// excess is a negative index
1718				match[0] = match[0].slice( 0, excess );
1719				match[2] = unquoted.slice( 0, excess );
1720			}
1721
1722			// Return only captures needed by the pseudo filter method (type and argument)
1723			return match.slice( 0, 3 );
1724		}
1725	},
1726
1727	filter: {
1728
1729		"TAG": function( nodeNameSelector ) {
1730			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
1731			return nodeNameSelector === "*" ?
1732				function() { return true; } :
1733				function( elem ) {
1734					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
1735				};
1736		},
1737
1738		"CLASS": function( className ) {
1739			var pattern = classCache[ className + " " ];
1740
1741			return pattern ||
1742				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
1743				classCache( className, function( elem ) {
1744					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
1745				});
1746		},
1747
1748		"ATTR": function( name, operator, check ) {
1749			return function( elem ) {
1750				var result = Sizzle.attr( elem, name );
1751
1752				if ( result == null ) {
1753					return operator === "!=";
1754				}
1755				if ( !operator ) {
1756					return true;
1757				}
1758
1759				result += "";
1760
1761				return operator === "=" ? result === check :
1762					operator === "!=" ? result !== check :
1763					operator === "^=" ? check && result.indexOf( check ) === 0 :
1764					operator === "*=" ? check && result.indexOf( check ) > -1 :
1765					operator === "$=" ? check && result.slice( -check.length ) === check :
1766					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
1767					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
1768					false;
1769			};
1770		},
1771
1772		"CHILD": function( type, what, argument, first, last ) {
1773			var simple = type.slice( 0, 3 ) !== "nth",
1774				forward = type.slice( -4 ) !== "last",
1775				ofType = what === "of-type";
1776
1777			return first === 1 && last === 0 ?
1778
1779				// Shortcut for :nth-*(n)
1780				function( elem ) {
1781					return !!elem.parentNode;
1782				} :
1783
1784				function( elem, context, xml ) {
1785					var cache, uniqueCache, outerCache, node, nodeIndex, start,
1786						dir = simple !== forward ? "nextSibling" : "previousSibling",
1787						parent = elem.parentNode,
1788						name = ofType && elem.nodeName.toLowerCase(),
1789						useCache = !xml && !ofType,
1790						diff = false;
1791
1792					if ( parent ) {
1793
1794						// :(first|last|only)-(child|of-type)
1795						if ( simple ) {
1796							while ( dir ) {
1797								node = elem;
1798								while ( (node = node[ dir ]) ) {
1799									if ( ofType ?
1800										node.nodeName.toLowerCase() === name :
1801										node.nodeType === 1 ) {
1802
1803										return false;
1804									}
1805								}
1806								// Reverse direction for :only-* (if we haven't yet done so)
1807								start = dir = type === "only" && !start && "nextSibling";
1808							}
1809							return true;
1810						}
1811
1812						start = [ forward ? parent.firstChild : parent.lastChild ];
1813
1814						// non-xml :nth-child(...) stores cache data on `parent`
1815						if ( forward && useCache ) {
1816
1817							// Seek `elem` from a previously-cached index
1818
1819							// ...in a gzip-friendly way
1820							node = parent;
1821							outerCache = node[ expando ] || (node[ expando ] = {});
1822
1823							// Support: IE <9 only
1824							// Defend against cloned attroperties (jQuery gh-1709)
1825							uniqueCache = outerCache[ node.uniqueID ] ||
1826								(outerCache[ node.uniqueID ] = {});
1827
1828							cache = uniqueCache[ type ] || [];
1829							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
1830							diff = nodeIndex && cache[ 2 ];
1831							node = nodeIndex && parent.childNodes[ nodeIndex ];
1832
1833							while ( (node = ++nodeIndex && node && node[ dir ] ||
1834
1835								// Fallback to seeking `elem` from the start
1836								(diff = nodeIndex = 0) || start.pop()) ) {
1837
1838								// When found, cache indexes on `parent` and break
1839								if ( node.nodeType === 1 && ++diff && node === elem ) {
1840									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
1841									break;
1842								}
1843							}
1844
1845						} else {
1846							// Use previously-cached element index if available
1847							if ( useCache ) {
1848								// ...in a gzip-friendly way
1849								node = elem;
1850								outerCache = node[ expando ] || (node[ expando ] = {});
1851
1852								// Support: IE <9 only
1853								// Defend against cloned attroperties (jQuery gh-1709)
1854								uniqueCache = outerCache[ node.uniqueID ] ||
1855									(outerCache[ node.uniqueID ] = {});
1856
1857								cache = uniqueCache[ type ] || [];
1858								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
1859								diff = nodeIndex;
1860							}
1861
1862							// xml :nth-child(...)
1863							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
1864							if ( diff === false ) {
1865								// Use the same loop as above to seek `elem` from the start
1866								while ( (node = ++nodeIndex && node && node[ dir ] ||
1867									(diff = nodeIndex = 0) || start.pop()) ) {
1868
1869									if ( ( ofType ?
1870										node.nodeName.toLowerCase() === name :
1871										node.nodeType === 1 ) &&
1872										++diff ) {
1873
1874										// Cache the index of each encountered element
1875										if ( useCache ) {
1876											outerCache = node[ expando ] || (node[ expando ] = {});
1877
1878											// Support: IE <9 only
1879											// Defend against cloned attroperties (jQuery gh-1709)
1880											uniqueCache = outerCache[ node.uniqueID ] ||
1881												(outerCache[ node.uniqueID ] = {});
1882
1883											uniqueCache[ type ] = [ dirruns, diff ];
1884										}
1885
1886										if ( node === elem ) {
1887											break;
1888										}
1889									}
1890								}
1891							}
1892						}
1893
1894						// Incorporate the offset, then check against cycle size
1895						diff -= last;
1896						return diff === first || ( diff % first === 0 && diff / first >= 0 );
1897					}
1898				};
1899		},
1900
1901		"PSEUDO": function( pseudo, argument ) {
1902			// pseudo-class names are case-insensitive
1903			// http://www.w3.org/TR/selectors/#pseudo-classes
1904			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
1905			// Remember that setFilters inherits from pseudos
1906			var args,
1907				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
1908					Sizzle.error( "unsupported pseudo: " + pseudo );
1909
1910			// The user may use createPseudo to indicate that
1911			// arguments are needed to create the filter function
1912			// just as Sizzle does
1913			if ( fn[ expando ] ) {
1914				return fn( argument );
1915			}
1916
1917			// But maintain support for old signatures
1918			if ( fn.length > 1 ) {
1919				args = [ pseudo, pseudo, "", argument ];
1920				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
1921					markFunction(function( seed, matches ) {
1922						var idx,
1923							matched = fn( seed, argument ),
1924							i = matched.length;
1925						while ( i-- ) {
1926							idx = indexOf( seed, matched[i] );
1927							seed[ idx ] = !( matches[ idx ] = matched[i] );
1928						}
1929					}) :
1930					function( elem ) {
1931						return fn( elem, 0, args );
1932					};
1933			}
1934
1935			return fn;
1936		}
1937	},
1938
1939	pseudos: {
1940		// Potentially complex pseudos
1941		"not": markFunction(function( selector ) {
1942			// Trim the selector passed to compile
1943			// to avoid treating leading and trailing
1944			// spaces as combinators
1945			var input = [],
1946				results = [],
1947				matcher = compile( selector.replace( rtrim, "$1" ) );
1948
1949			return matcher[ expando ] ?
1950				markFunction(function( seed, matches, context, xml ) {
1951					var elem,
1952						unmatched = matcher( seed, null, xml, [] ),
1953						i = seed.length;
1954
1955					// Match elements unmatched by `matcher`
1956					while ( i-- ) {
1957						if ( (elem = unmatched[i]) ) {
1958							seed[i] = !(matches[i] = elem);
1959						}
1960					}
1961				}) :
1962				function( elem, context, xml ) {
1963					input[0] = elem;
1964					matcher( input, null, xml, results );
1965					// Don't keep the element (issue #299)
1966					input[0] = null;
1967					return !results.pop();
1968				};
1969		}),
1970
1971		"has": markFunction(function( selector ) {
1972			return function( elem ) {
1973				return Sizzle( selector, elem ).length > 0;
1974			};
1975		}),
1976
1977		"contains": markFunction(function( text ) {
1978			text = text.replace( runescape, funescape );
1979			return function( elem ) {
1980				return ( elem.textContent || 
vendor: 1,115 bytes, lines 1980-2008
1980getText( elem ) ).indexOf( text ) > -1;
1981			};
1982		}),
1983
1984		// "Whether an element is represented by a :lang() selector
1985		// is based solely on the element's language value
1986		// being equal to the identifier C,
1987		// or beginning with the identifier C immediately followed by "-".
1988		// The matching of C against the element's language value is performed case-insensitively.
1989		// The identifier C does not have to be a valid language name."
1990		// http://www.w3.org/TR/selectors/#lang-pseudo
1991		"lang": markFunction( function( lang ) {
1992			// lang value must be a valid identifier
1993			if ( !ridentifier.test(lang || "") ) {
1994				Sizzle.error( "unsupported lang: " + lang );
1995			}
1996			lang = lang.replace( runescape, funescape ).toLowerCase();
1997			return function( elem ) {
1998				var elemLang;
1999				do {
2000					if ( (elemLang = documentIsHTML ?
2001						elem.lang :
2002						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
2003
2004						elemLang = elemLang.toLowerCase();
2005						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
2006					}
2007				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
2008				return false;
vendor: 3,169 bytes, lines 2009-2123
2009			};
2010		}),
2011
2012		// Miscellaneous
2013		"target": function( elem ) {
2014			var hash = window.location && window.location.hash;
2015			return hash && hash.slice( 1 ) === elem.id;
2016		},
2017
2018		"root": function( elem ) {
2019			return elem === docElem;
2020		},
2021
2022		"focus": function( elem ) {
2023			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
2024		},
2025
2026		// Boolean properties
2027		"enabled": createDisabledPseudo( false ),
2028		"disabled": createDisabledPseudo( true ),
2029
2030		"checked": function( elem ) {
2031			// In CSS3, :checked should return both checked and selected elements
2032			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
2033			var nodeName = elem.nodeName.toLowerCase();
2034			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
2035		},
2036
2037		"selected": function( elem ) {
2038			// Accessing this property makes selected-by-default
2039			// options in Safari work properly
2040			if ( elem.parentNode ) {
2041				elem.parentNode.selectedIndex;
2042			}
2043
2044			return elem.selected === true;
2045		},
2046
2047		// Contents
2048		"empty": function( elem ) {
2049			// http://www.w3.org/TR/selectors/#empty-pseudo
2050			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
2051			//   but not by others (comment: 8; processing instruction: 7; etc.)
2052			// nodeType < 6 works because attributes (2) do not appear as children
2053			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
2054				if ( elem.nodeType < 6 ) {
2055					return false;
2056				}
2057			}
2058			return true;
2059		},
2060
2061		"parent": function( elem ) {
2062			return !Expr.pseudos["empty"]( elem );
2063		},
2064
2065		// Element/input types
2066		"header": function( elem ) {
2067			return rheader.test( elem.nodeName );
2068		},
2069
2070		"input": function( elem ) {
2071			return rinputs.test( elem.nodeName );
2072		},
2073
2074		"button": function( elem ) {
2075			var name = elem.nodeName.toLowerCase();
2076			return name === "input" && elem.type === "button" || name === "button";
2077		},
2078
2079		"text": function( elem ) {
2080			var attr;
2081			return elem.nodeName.toLowerCase() === "input" &&
2082				elem.type === "text" &&
2083
2084				// Support: IE<8
2085				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
2086				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
2087		},
2088
2089		// Position-in-collection
2090		"first": createPositionalPseudo(function() {
2091			return [ 0 ];
2092		}),
2093
2094		"last": createPositionalPseudo(function( matchIndexes, length ) {
2095			return [ length - 1 ];
2096		}),
2097
2098		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
2099			return [ argument < 0 ? argument + length : argument ];
2100		}),
2101
2102		"even": createPositionalPseudo(function( matchIndexes, length ) {
2103			var i = 0;
2104			for ( ; i < length; i += 2 ) {
2105				matchIndexes.push( i );
2106			}
2107			return matchIndexes;
2108		}),
2109
2110		"odd": createPositionalPseudo(function( matchIndexes, length ) {
2111			var i = 1;
2112			for ( ; i < length; i += 2 ) {
2113				matchIndexes.push( i );
2114			}
2115			return matchIndexes;
2116		}),
2117
2118		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
2119			var i = argument < 0 ?
2120				argument + length :
2121				argument > length ?
2122					length :
2123					
vendor: 20,845 bytes, lines 2123-2884
2123argument;
2124			for ( ; --i >= 0; ) {
2125				matchIndexes.push( i );
2126			}
2127			return matchIndexes;
2128		}),
2129
2130		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
2131			var i = argument < 0 ? argument + length : argument;
2132			for ( ; ++i < length; ) {
2133				matchIndexes.push( i );
2134			}
2135			return matchIndexes;
2136		})
2137	}
2138};
2139
2140Expr.pseudos["nth"] = Expr.pseudos["eq"];
2141
2142// Add button/input type pseudos
2143for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
2144	Expr.pseudos[ i ] = createInputPseudo( i );
2145}
2146for ( i in { submit: true, reset: true } ) {
2147	Expr.pseudos[ i ] = createButtonPseudo( i );
2148}
2149
2150// Easy API for creating new setFilters
2151function setFilters() {}
2152setFilters.prototype = Expr.filters = Expr.pseudos;
2153Expr.setFilters = new setFilters();
2154
2155tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
2156	var matched, match, tokens, type,
2157		soFar, groups, preFilters,
2158		cached = tokenCache[ selector + " " ];
2159
2160	if ( cached ) {
2161		return parseOnly ? 0 : cached.slice( 0 );
2162	}
2163
2164	soFar = selector;
2165	groups = [];
2166	preFilters = Expr.preFilter;
2167
2168	while ( soFar ) {
2169
2170		// Comma and first run
2171		if ( !matched || (match = rcomma.exec( soFar )) ) {
2172			if ( match ) {
2173				// Don't consume trailing commas as valid
2174				soFar = soFar.slice( match[0].length ) || soFar;
2175			}
2176			groups.push( (tokens = []) );
2177		}
2178
2179		matched = false;
2180
2181		// Combinators
2182		if ( (match = rcombinators.exec( soFar )) ) {
2183			matched = match.shift();
2184			tokens.push({
2185				value: matched,
2186				// Cast descendant combinators to space
2187				type: match[0].replace( rtrim, " " )
2188			});
2189			soFar = soFar.slice( matched.length );
2190		}
2191
2192		// Filters
2193		for ( type in Expr.filter ) {
2194			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
2195				(match = preFilters[ type ]( match ))) ) {
2196				matched = match.shift();
2197				tokens.push({
2198					value: matched,
2199					type: type,
2200					matches: match
2201				});
2202				soFar = soFar.slice( matched.length );
2203			}
2204		}
2205
2206		if ( !matched ) {
2207			break;
2208		}
2209	}
2210
2211	// Return the length of the invalid excess
2212	// if we're just parsing
2213	// Otherwise, throw an error or return tokens
2214	return parseOnly ?
2215		soFar.length :
2216		soFar ?
2217			Sizzle.error( selector ) :
2218			// Cache the tokens
2219			tokenCache( selector, groups ).slice( 0 );
2220};
2221
2222function toSelector( tokens ) {
2223	var i = 0,
2224		len = tokens.length,
2225		selector = "";
2226	for ( ; i < len; i++ ) {
2227		selector += tokens[i].value;
2228	}
2229	return selector;
2230}
2231
2232function addCombinator( matcher, combinator, base ) {
2233	var dir = combinator.dir,
2234		skip = combinator.next,
2235		key = skip || dir,
2236		checkNonElements = base && key === "parentNode",
2237		doneName = done++;
2238
2239	return combinator.first ?
2240		// Check against closest ancestor/preceding element
2241		function( elem, context, xml ) {
2242			while ( (elem = elem[ dir ]) ) {
2243				if ( elem.nodeType === 1 || checkNonElements ) {
2244					return matcher( elem, context, xml );
2245				}
2246			}
2247			return false;
2248		} :
2249
2250		// Check against all ancestor/preceding elements
2251		function( elem, context, xml ) {
2252			var oldCache, uniqueCache, outerCache,
2253				newCache = [ dirruns, doneName ];
2254
2255			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
2256			if ( xml ) {
2257				while ( (elem = elem[ dir ]) ) {
2258					if ( elem.nodeType === 1 || checkNonElements ) {
2259						if ( matcher( elem, context, xml ) ) {
2260							return true;
2261						}
2262					}
2263				}
2264			} else {
2265				while ( (elem = elem[ dir ]) ) {
2266					if ( elem.nodeType === 1 || checkNonElements ) {
2267						outerCache = elem[ expando ] || (elem[ expando ] = {});
2268
2269						// Support: IE <9 only
2270						// Defend against cloned attroperties (jQuery gh-1709)
2271						uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
2272
2273						if ( skip && skip === elem.nodeName.toLowerCase() ) {
2274							elem = elem[ dir ] || elem;
2275						} else if ( (oldCache = uniqueCache[ key ]) &&
2276							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
2277
2278							// Assign to newCache so results back-propagate to previous elements
2279							return (newCache[ 2 ] = oldCache[ 2 ]);
2280						} else {
2281							// Reuse newcache so results back-propagate to previous elements
2282							uniqueCache[ key ] = newCache;
2283
2284							// A match means we're done; a fail means we have to keep checking
2285							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
2286								return true;
2287							}
2288						}
2289					}
2290				}
2291			}
2292			return false;
2293		};
2294}
2295
2296function elementMatcher( matchers ) {
2297	return matchers.length > 1 ?
2298		function( elem, context, xml ) {
2299			var i = matchers.length;
2300			while ( i-- ) {
2301				if ( !matchers[i]( elem, context, xml ) ) {
2302					return false;
2303				}
2304			}
2305			return true;
2306		} :
2307		matchers[0];
2308}
2309
2310function multipleContexts( selector, contexts, results ) {
2311	var i = 0,
2312		len = contexts.length;
2313	for ( ; i < len; i++ ) {
2314		Sizzle( selector, contexts[i], results );
2315	}
2316	return results;
2317}
2318
2319function condense( unmatched, map, filter, context, xml ) {
2320	var elem,
2321		newUnmatched = [],
2322		i = 0,
2323		len = unmatched.length,
2324		mapped = map != null;
2325
2326	for ( ; i < len; i++ ) {
2327		if ( (elem = unmatched[i]) ) {
2328			if ( !filter || filter( elem, context, xml ) ) {
2329				newUnmatched.push( elem );
2330				if ( mapped ) {
2331					map.push( i );
2332				}
2333			}
2334		}
2335	}
2336
2337	return newUnmatched;
2338}
2339
2340function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
2341	if ( postFilter && !postFilter[ expando ] ) {
2342		postFilter = setMatcher( postFilter );
2343	}
2344	if ( postFinder && !postFinder[ expando ] ) {
2345		postFinder = setMatcher( postFinder, postSelector );
2346	}
2347	return markFunction(function( seed, results, context, xml ) {
2348		var temp, i, elem,
2349			preMap = [],
2350			postMap = [],
2351			preexisting = results.length,
2352
2353			// Get initial elements from seed or context
2354			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
2355
2356			// Prefilter to get matcher input, preserving a map for seed-results synchronization
2357			matcherIn = preFilter && ( seed || !selector ) ?
2358				condense( elems, preMap, preFilter, context, xml ) :
2359				elems,
2360
2361			matcherOut = matcher ?
2362				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
2363				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
2364
2365					// ...intermediate processing is necessary
2366					[] :
2367
2368					// ...otherwise use results directly
2369					results :
2370				matcherIn;
2371
2372		// Find primary matches
2373		if ( matcher ) {
2374			matcher( matcherIn, matcherOut, context, xml );
2375		}
2376
2377		// Apply postFilter
2378		if ( postFilter ) {
2379			temp = condense( matcherOut, postMap );
2380			postFilter( temp, [], context, xml );
2381
2382			// Un-match failing elements by moving them back to matcherIn
2383			i = temp.length;
2384			while ( i-- ) {
2385				if ( (elem = temp[i]) ) {
2386					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
2387				}
2388			}
2389		}
2390
2391		if ( seed ) {
2392			if ( postFinder || preFilter ) {
2393				if ( postFinder ) {
2394					// Get the final matcherOut by condensing this intermediate into postFinder contexts
2395					temp = [];
2396					i = matcherOut.length;
2397					while ( i-- ) {
2398						if ( (elem = matcherOut[i]) ) {
2399							// Restore matcherIn since elem is not yet a final match
2400							temp.push( (matcherIn[i] = elem) );
2401						}
2402					}
2403					postFinder( null, (matcherOut = []), temp, xml );
2404				}
2405
2406				// Move matched elements from seed to results to keep them synchronized
2407				i = matcherOut.length;
2408				while ( i-- ) {
2409					if ( (elem = matcherOut[i]) &&
2410						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
2411
2412						seed[temp] = !(results[temp] = elem);
2413					}
2414				}
2415			}
2416
2417		// Add elements to results, through postFinder if defined
2418		} else {
2419			matcherOut = condense(
2420				matcherOut === results ?
2421					matcherOut.splice( preexisting, matcherOut.length ) :
2422					matcherOut
2423			);
2424			if ( postFinder ) {
2425				postFinder( null, results, matcherOut, xml );
2426			} else {
2427				push.apply( results, matcherOut );
2428			}
2429		}
2430	});
2431}
2432
2433function matcherFromTokens( tokens ) {
2434	var checkContext, matcher, j,
2435		len = tokens.length,
2436		leadingRelative = Expr.relative[ tokens[0].type ],
2437		implicitRelative = leadingRelative || Expr.relative[" "],
2438		i = leadingRelative ? 1 : 0,
2439
2440		// The foundational matcher ensures that elements are reachable from top-level context(s)
2441		matchContext = addCombinator( function( elem ) {
2442			return elem === checkContext;
2443		}, implicitRelative, true ),
2444		matchAnyContext = addCombinator( function( elem ) {
2445			return indexOf( checkContext, elem ) > -1;
2446		}, implicitRelative, true ),
2447		matchers = [ function( elem, context, xml ) {
2448			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
2449				(checkContext = context).nodeType ?
2450					matchContext( elem, context, xml ) :
2451					matchAnyContext( elem, context, xml ) );
2452			// Avoid hanging onto element (issue #299)
2453			checkContext = null;
2454			return ret;
2455		} ];
2456
2457	for ( ; i < len; i++ ) {
2458		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
2459			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
2460		} else {
2461			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
2462
2463			// Return special upon seeing a positional matcher
2464			if ( matcher[ expando ] ) {
2465				// Find the next relative operator (if any) for proper handling
2466				j = ++i;
2467				for ( ; j < len; j++ ) {
2468					if ( Expr.relative[ tokens[j].type ] ) {
2469						break;
2470					}
2471				}
2472				return setMatcher(
2473					i > 1 && elementMatcher( matchers ),
2474					i > 1 && toSelector(
2475						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
2476						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
2477					).replace( rtrim, "$1" ),
2478					matcher,
2479					i < j && matcherFromTokens( tokens.slice( i, j ) ),
2480					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
2481					j < len && toSelector( tokens )
2482				);
2483			}
2484			matchers.push( matcher );
2485		}
2486	}
2487
2488	return elementMatcher( matchers );
2489}
2490
2491function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
2492	var bySet = setMatchers.length > 0,
2493		byElement = elementMatchers.length > 0,
2494		superMatcher = function( seed, context, xml, results, outermost ) {
2495			var elem, j, matcher,
2496				matchedCount = 0,
2497				i = "0",
2498				unmatched = seed && [],
2499				setMatched = [],
2500				contextBackup = outermostContext,
2501				// We must always have either seed elements or outermost context
2502				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
2503				// Use integer dirruns iff this is the outermost matcher
2504				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
2505				len = elems.length;
2506
2507			if ( outermost ) {
2508				outermostContext = context === document || context || outermost;
2509			}
2510
2511			// Add elements passing elementMatchers directly to results
2512			// Support: IE<9, Safari
2513			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
2514			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
2515				if ( byElement && elem ) {
2516					j = 0;
2517					if ( !context && elem.ownerDocument !== document ) {
2518						setDocument( elem );
2519						xml = !documentIsHTML;
2520					}
2521					while ( (matcher = elementMatchers[j++]) ) {
2522						if ( matcher( elem, context || document, xml) ) {
2523							results.push( elem );
2524							break;
2525						}
2526					}
2527					if ( outermost ) {
2528						dirruns = dirrunsUnique;
2529					}
2530				}
2531
2532				// Track unmatched elements for set filters
2533				if ( bySet ) {
2534					// They will have gone through all possible matchers
2535					if ( (elem = !matcher && elem) ) {
2536						matchedCount--;
2537					}
2538
2539					// Lengthen the array for every element, matched or not
2540					if ( seed ) {
2541						unmatched.push( elem );
2542					}
2543				}
2544			}
2545
2546			// `i` is now the count of elements visited above, and adding it to `matchedCount`
2547			// makes the latter nonnegative.
2548			matchedCount += i;
2549
2550			// Apply set filters to unmatched elements
2551			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
2552			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
2553			// no element matchers and no seed.
2554			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
2555			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
2556			// numerically zero.
2557			if ( bySet && i !== matchedCount ) {
2558				j = 0;
2559				while ( (matcher = setMatchers[j++]) ) {
2560					matcher( unmatched, setMatched, context, xml );
2561				}
2562
2563				if ( seed ) {
2564					// Reintegrate element matches to eliminate the need for sorting
2565					if ( matchedCount > 0 ) {
2566						while ( i-- ) {
2567							if ( !(unmatched[i] || setMatched[i]) ) {
2568								setMatched[i] = pop.call( results );
2569							}
2570						}
2571					}
2572
2573					// Discard index placeholder values to get only actual matches
2574					setMatched = condense( setMatched );
2575				}
2576
2577				// Add matches to results
2578				push.apply( results, setMatched );
2579
2580				// Seedless set matches succeeding multiple successful matchers stipulate sorting
2581				if ( outermost && !seed && setMatched.length > 0 &&
2582					( matchedCount + setMatchers.length ) > 1 ) {
2583
2584					Sizzle.uniqueSort( results );
2585				}
2586			}
2587
2588			// Override manipulation of globals by nested matchers
2589			if ( outermost ) {
2590				dirruns = dirrunsUnique;
2591				outermostContext = contextBackup;
2592			}
2593
2594			return unmatched;
2595		};
2596
2597	return bySet ?
2598		markFunction( superMatcher ) :
2599		superMatcher;
2600}
2601
2602compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
2603	var i,
2604		setMatchers = [],
2605		elementMatchers = [],
2606		cached = compilerCache[ selector + " " ];
2607
2608	if ( !cached ) {
2609		// Generate a function of recursive functions that can be used to check each element
2610		if ( !match ) {
2611			match = tokenize( selector );
2612		}
2613		i = match.length;
2614		while ( i-- ) {
2615			cached = matcherFromTokens( match[i] );
2616			if ( cached[ expando ] ) {
2617				setMatchers.push( cached );
2618			} else {
2619				elementMatchers.push( cached );
2620			}
2621		}
2622
2623		// Cache the compiled function
2624		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
2625
2626		// Save selector and tokenization
2627		cached.selector = selector;
2628	}
2629	return cached;
2630};
2631
2632/**
2633 * A low-level selection function that works with Sizzle's compiled
2634 *  selector functions
2635 * @param {String|Function} selector A selector or a pre-compiled
2636 *  selector function built with Sizzle.compile
2637 * @param {Element} context
2638 * @param {Array} [results]
2639 * @param {Array} [seed] A set of elements to match against
2640 */
2641select = Sizzle.select = function( selector, context, results, seed ) {
2642	var i, tokens, token, type, find,
2643		compiled = typeof selector === "function" && selector,
2644		match = !seed && tokenize( (selector = compiled.selector || selector) );
2645
2646	results = results || [];
2647
2648	// Try to minimize operations if there is only one selector in the list and no seed
2649	// (the latter of which guarantees us context)
2650	if ( match.length === 1 ) {
2651
2652		// Reduce context if the leading compound selector is an ID
2653		tokens = match[0] = match[0].slice( 0 );
2654		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
2655				context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
2656
2657			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
2658			if ( !context ) {
2659				return results;
2660
2661			// Precompiled matchers will still verify ancestry, so step up a level
2662			} else if ( compiled ) {
2663				context = context.parentNode;
2664			}
2665
2666			selector = selector.slice( tokens.shift().value.length );
2667		}
2668
2669		// Fetch a seed set for right-to-left matching
2670		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
2671		while ( i-- ) {
2672			token = tokens[i];
2673
2674			// Abort if we hit a combinator
2675			if ( Expr.relative[ (type = token.type) ] ) {
2676				break;
2677			}
2678			if ( (find = Expr.find[ type ]) ) {
2679				// Search, expanding context for leading sibling combinators
2680				if ( (seed = find(
2681					token.matches[0].replace( runescape, funescape ),
2682					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
2683				)) ) {
2684
2685					// If seed is empty or no tokens remain, we can return early
2686					tokens.splice( i, 1 );
2687					selector = seed.length && toSelector( tokens );
2688					if ( !selector ) {
2689						push.apply( results, seed );
2690						return results;
2691					}
2692
2693					break;
2694				}
2695			}
2696		}
2697	}
2698
2699	// Compile and execute a filtering function if one is not provided
2700	// Provide `match` to avoid retokenization if we modified the selector above
2701	( compiled || compile( selector, match ) )(
2702		seed,
2703		context,
2704		!documentIsHTML,
2705		results,
2706		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
2707	);
2708	return results;
2709};
2710
2711// One-time assignments
2712
2713// Sort stability
2714support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
2715
2716// Support: Chrome 14-35+
2717// Always assume duplicates if they aren't passed to the comparison function
2718support.detectDuplicates = !!hasDuplicate;
2719
2720// Initialize against the default document
2721setDocument();
2722
2723// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
2724// Detached nodes confoundingly follow *each other*
2725support.sortDetached = assert(function( el ) {
2726	// Should return 1, but returns 4 (following)
2727	return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
2728});
2729
2730// Support: IE<8
2731// Prevent attribute/property "interpolation"
2732// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
2733if ( !assert(function( el ) {
2734	el.innerHTML = "<a href='#'></a>";
2735	return el.firstChild.getAttribute("href") === "#" ;
2736}) ) {
2737	addHandle( "type|href|height|width", function( elem, name, isXML ) {
2738		if ( !isXML ) {
2739			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
2740		}
2741	});
2742}
2743
2744// Support: IE<9
2745// Use defaultValue in place of getAttribute("value")
2746if ( !support.attributes || !assert(function( el ) {
2747	el.innerHTML = "<input/>";
2748	el.firstChild.setAttribute( "value", "" );
2749	return el.firstChild.getAttribute( "value" ) === "";
2750}) ) {
2751	addHandle( "value", function( elem, name, isXML ) {
2752		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
2753			return elem.defaultValue;
2754		}
2755	});
2756}
2757
2758// Support: IE<9
2759// Use getAttributeNode to fetch booleans when getAttribute lies
2760if ( !assert(function( el ) {
2761	return el.getAttribute("disabled") == null;
2762}) ) {
2763	addHandle( booleans, function( elem, name, isXML ) {
2764		var val;
2765		if ( !isXML ) {
2766			return elem[ name ] === true ? name.toLowerCase() :
2767					(val = elem.getAttributeNode( name )) && val.specified ?
2768					val.value :
2769				null;
2770		}
2771	});
2772}
2773
2774return Sizzle;
2775
2776})( window );
2777
2778
2779
2780jQuery.find = Sizzle;
2781jQuery.expr = Sizzle.selectors;
2782
2783// Deprecated
2784jQuery.expr[ ":" ] = jQuery.expr.pseudos;
2785jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
2786jQuery.text = Sizzle.getText;
2787jQuery.isXMLDoc = Sizzle.isXML;
2788jQuery.contains = Sizzle.contains;
2789jQuery.escapeSelector = Sizzle.escape;
2790
2791
2792
2793
2794var dir = function( elem, dir, until ) {
2795	var matched = [],
2796		truncate = until !== undefined;
2797
2798	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
2799		if ( elem.nodeType === 1 ) {
2800			if ( truncate && jQuery( elem ).is( until ) ) {
2801				break;
2802			}
2803			matched.push( elem );
2804		}
2805	}
2806	return matched;
2807};
2808
2809
2810var siblings = function( n, elem ) {
2811	var matched = [];
2812
2813	for ( ; n; n = n.nextSibling ) {
2814		if ( n.nodeType === 1 && n !== elem ) {
2815			matched.push( n );
2816		}
2817	}
2818
2819	return matched;
2820};
2821
2822
2823var rneedsContext = jQuery.expr.match.needsContext;
2824
2825
2826
2827function nodeName( elem, name ) {
2828
2829  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
2830
2831};
2832var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
2833
2834
2835
2836// Implement the identical functionality for filter and not
2837function winnow( elements, qualifier, not ) {
2838	if ( isFunction( qualifier ) ) {
2839		return jQuery.grep( elements, function( elem, i ) {
2840			return !!qualifier.call( elem, i, elem ) !== not;
2841		} );
2842	}
2843
2844	// Single element
2845	if ( qualifier.nodeType ) {
2846		return jQuery.grep( elements, function( elem ) {
2847			return ( elem === qualifier ) !== not;
2848		} );
2849	}
2850
2851	// Arraylike of elements (jQuery, arguments, Array)
2852	if ( typeof qualifier !== "string" ) {
2853		return jQuery.grep( elements, function( elem ) {
2854			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
2855		} );
2856	}
2857
2858	// Filtered directly for both simple and complex selectors
2859	return jQuery.filter( qualifier, elements, not );
2860}
2861
2862jQuery.filter = function( expr, elems, not ) {
2863	var elem = elems[ 0 ];
2864
2865	if ( not ) {
2866		expr = ":not(" + expr + ")";
2867	}
2868
2869	if ( elems.length === 1 && elem.nodeType === 1 ) {
2870		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
2871	}
2872
2873	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
2874		return elem.nodeType === 1;
2875	} ) );
2876};
2877
2878jQuery.fn.extend( {
2879	find: function( selector ) {
2880		var i, ret,
2881			len = this.length,
2882			self = this;
2883
2884		if ( typeof selector !== "string" ) {
vendor: 6,536 bytes, lines 2885-3145
2885			return this.pushStack( jQuery( selector ).filter( function() {
2886				for ( i = 0; i < len; i++ ) {
2887					if ( jQuery.contains( self[ i ], this ) ) {
2888						return true;
2889					}
2890				}
2891			} ) );
2892		}
2893
2894		ret = this.pushStack( [] );
2895
2896		for ( i = 0; i < len; i++ ) {
2897			jQuery.find( selector, self[ i ], ret );
2898		}
2899
2900		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
2901	},
2902	filter: function( selector ) {
2903		return this.pushStack( winnow( this, selector || [], false ) );
2904	},
2905	not: function( selector ) {
2906		return this.pushStack( winnow( this, selector || [], true ) );
2907	},
2908	is: function( selector ) {
2909		return !!winnow(
2910			this,
2911
2912			// If this is a positional/relative selector, check membership in the returned set
2913			// so $("p:first").is("p:last") won't return true for a doc with two "p".
2914			typeof selector === "string" && rneedsContext.test( selector ) ?
2915				jQuery( selector ) :
2916				selector || [],
2917			false
2918		).length;
2919	}
2920} );
2921
2922
2923// Initialize a jQuery object
2924
2925
2926// A central reference to the root jQuery(document)
2927var rootjQuery,
2928
2929	// A simple way to check for HTML strings
2930	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
2931	// Strict HTML recognition (#11290: must start with <)
2932	// Shortcut simple #id case for speed
2933	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
2934
2935	init = jQuery.fn.init = function( selector, context, root ) {
2936		var match, elem;
2937
2938		// HANDLE: $(""), $(null), $(undefined), $(false)
2939		if ( !selector ) {
2940			return this;
2941		}
2942
2943		// Method init() accepts an alternate rootjQuery
2944		// so migrate can support jQuery.sub (gh-2101)
2945		root = root || rootjQuery;
2946
2947		// Handle HTML strings
2948		if ( typeof selector === "string" ) {
2949			if ( selector[ 0 ] === "<" &&
2950				selector[ selector.length - 1 ] === ">" &&
2951				selector.length >= 3 ) {
2952
2953				// Assume that strings that start and end with <> are HTML and skip the regex check
2954				match = [ null, selector, null ];
2955
2956			} else {
2957				match = rquickExpr.exec( selector );
2958			}
2959
2960			// Match html or make sure no context is specified for #id
2961			if ( match && ( match[ 1 ] || !context ) ) {
2962
2963				// HANDLE: $(html) -> $(array)
2964				if ( match[ 1 ] ) {
2965					context = context instanceof jQuery ? context[ 0 ] : context;
2966
2967					// Option to run scripts is true for back-compat
2968					// Intentionally let the error be thrown if parseHTML is not present
2969					jQuery.merge( this, jQuery.parseHTML(
2970						match[ 1 ],
2971						context && context.nodeType ? context.ownerDocument || context : document,
2972						true
2973					) );
2974
2975					// HANDLE: $(html, props)
2976					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
2977						for ( match in context ) {
2978
2979							// Properties of context are called as methods if possible
2980							if ( isFunction( this[ match ] ) ) {
2981								this[ match ]( context[ match ] );
2982
2983							// ...and otherwise set as attributes
2984							} else {
2985								this.attr( match, context[ match ] );
2986							}
2987						}
2988					}
2989
2990					return this;
2991
2992				// HANDLE: $(#id)
2993				} else {
2994					elem = document.getElementById( match[ 2 ] );
2995
2996					if ( elem ) {
2997
2998						// Inject the element directly into the jQuery object
2999						this[ 0 ] = elem;
3000						this.length = 1;
3001					}
3002					return this;
3003				}
3004
3005			// HANDLE: $(expr, $(...))
3006			} else if ( !context || context.jquery ) {
3007				return ( context || root ).find( selector );
3008
3009			// HANDLE: $(expr, context)
3010			// (which is just equivalent to: $(context).find(expr)
3011			} else {
3012				return this.constructor( context ).find( selector );
3013			}
3014
3015		// HANDLE: $(DOMElement)
3016		} else if ( selector.nodeType ) {
3017			this[ 0 ] = selector;
3018			this.length = 1;
3019			return this;
3020
3021		// HANDLE: $(function)
3022		// Shortcut for document ready
3023		} else if ( isFunction( selector ) ) {
3024			return root.ready !== undefined ?
3025				root.ready( selector ) :
3026
3027				// Execute immediately if ready is not present
3028				selector( jQuery );
3029		}
3030
3031		return jQuery.makeArray( selector, this );
3032	};
3033
3034// Give the init function the jQuery prototype for later instantiation
3035init.prototype = jQuery.fn;
3036
3037// Initialize central reference
3038rootjQuery = jQuery( document );
3039
3040
3041var rparentsprev = /^(?:parents|prev(?:Until|All))/,
3042
3043	// Methods guaranteed to produce a unique set when starting from a unique set
3044	guaranteedUnique = {
3045		children: true,
3046		contents: true,
3047		next: true,
3048		prev: true
3049	};
3050
3051jQuery.fn.extend( {
3052	has: function( target ) {
3053		var targets = jQuery( target, this ),
3054			l = targets.length;
3055
3056		return this.filter( function() {
3057			var i = 0;
3058			for ( ; i < l; i++ ) {
3059				if ( jQuery.contains( this, targets[ i ] ) ) {
3060					return true;
3061				}
3062			}
3063		} );
3064	},
3065
3066	closest: function( selectors, context ) {
3067		var cur,
3068			i = 0,
3069			l = this.length,
3070			matched = [],
3071			targets = typeof selectors !== "string" && jQuery( selectors );
3072
3073		// Positional selectors never match, since there's no _selection_ context
3074		if ( !rneedsContext.test( selectors ) ) {
3075			for ( ; i < l; i++ ) {
3076				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
3077
3078					// Always skip document fragments
3079					if ( cur.nodeType < 11 && ( targets ?
3080						targets.index( cur ) > -1 :
3081
3082						// Don't pass non-elements to Sizzle
3083						cur.nodeType === 1 &&
3084							jQuery.find.matchesSelector( cur, selectors ) ) ) {
3085
3086						matched.push( cur );
3087						break;
3088					}
3089				}
3090			}
3091		}
3092
3093		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
3094	},
3095
3096	// Determine the position of an element within the set
3097	index: function( elem ) {
3098
3099		// No argument, return index in parent
3100		if ( !elem ) {
3101			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
3102		}
3103
3104		// Index in selector
3105		if ( typeof elem === "string" ) {
3106			return indexOf.call( jQuery( elem ), this[ 0 ] );
3107		}
3108
3109		// Locate the position of the desired element
3110		return indexOf.call( this,
3111
3112			// If it receives a jQuery object, the first element is used
3113			elem.jquery ? elem[ 0 ] : elem
3114		);
3115	},
3116
3117	add: function( selector, context ) {
3118		return this.pushStack(
3119			jQuery.uniqueSort(
3120				jQuery.merge( this.get(), jQuery( selector, context ) )
3121			)
3122		);
3123	},
3124
3125	addBack: function( selector ) {
3126		return this.add( selector == null ?
3127			this.prevObject : this.prevObject.filter( selector )
3128		);
3129	}
3130} );
3131
3132function sibling( cur, dir ) {
3133	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
3134	return cur;
3135}
3136
3137jQuery.each( {
3138	parent: function( elem ) {
3139		var parent = elem.parentNode;
3140		return parent && parent.nodeType !== 11 ? parent : null;
3141	},
3142	parents: function( elem ) {
3143		return dir( elem, "parentNode" );
3144	},
3145	parentsUntil: function( elem, 
3145i, until ) {
3146		return dir( elem, "parentNode", until );
3147	},
3148	next: function( elem ) {
3149		return sibling( elem, "nextSibling" );
3150	},
3151	prev: function( elem ) {
3152		return sibling( elem, "previousSibling" );
3153	},
3154	nextAll: function( elem ) {
3155		return dir( elem, "nextSibling" );
3156	},
3157	prevAll: function( elem ) {
3158		return dir( elem, "previousSibling" );
3159	},
3160	nextUntil: function( elem, i, until ) {
3161		return dir( elem, "nextSibling", until );
3162	},
3163	prevUntil: function( elem, i, until ) {
3164		return dir( elem, "previousSibling", until );
3165	},
3166	siblings: function( elem ) {
3167		return siblings( ( elem.parentNode || {} ).firstChild, elem );
3168	},
3169	children: function( elem ) {
3170		return siblings( elem.firstChild );
3171	},
3172	contents: function( elem ) {
3173		if ( typeof elem.contentDocument !== "undefined" ) {
vendor: 8,211 bytes, lines 3173-3507
3173
3174			return elem.contentDocument;
3175		}
3176
3177		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
3178		// Treat the template element as a regular one in browsers that
3179		// don't support it.
3180		if ( nodeName( elem, "template" ) ) {
3181			elem = elem.content || elem;
3182		}
3183
3184		return jQuery.merge( [], elem.childNodes );
3185	}
3186}, function( name, fn ) {
3187	jQuery.fn[ name ] = function( until, selector ) {
3188		var matched = jQuery.map( this, fn, until );
3189
3190		if ( name.slice( -5 ) !== "Until" ) {
3191			selector = until;
3192		}
3193
3194		if ( selector && typeof selector === "string" ) {
3195			matched = jQuery.filter( selector, matched );
3196		}
3197
3198		if ( this.length > 1 ) {
3199
3200			// Remove duplicates
3201			if ( !guaranteedUnique[ name ] ) {
3202				jQuery.uniqueSort( matched );
3203			}
3204
3205			// Reverse order for parents* and prev-derivatives
3206			if ( rparentsprev.test( name ) ) {
3207				matched.reverse();
3208			}
3209		}
3210
3211		return this.pushStack( matched );
3212	};
3213} );
3214var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
3215
3216
3217
3218// Convert String-formatted options into Object-formatted ones
3219function createOptions( options ) {
3220	var object = {};
3221	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
3222		object[ flag ] = true;
3223	} );
3224	return object;
3225}
3226
3227/*
3228 * Create a callback list using the following parameters:
3229 *
3230 *	options: an optional list of space-separated options that will change how
3231 *			the callback list behaves or a more traditional option object
3232 *
3233 * By default a callback list will act like an event callback list and can be
3234 * "fired" multiple times.
3235 *
3236 * Possible options:
3237 *
3238 *	once:			will ensure the callback list can only be fired once (like a Deferred)
3239 *
3240 *	memory:			will keep track of previous values and will call any callback added
3241 *					after the list has been fired right away with the latest "memorized"
3242 *					values (like a Deferred)
3243 *
3244 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
3245 *
3246 *	stopOnFalse:	interrupt callings when a callback returns false
3247 *
3248 */
3249jQuery.Callbacks = function( options ) {
3250
3251	// Convert options from String-formatted to Object-formatted if needed
3252	// (we check in cache first)
3253	options = typeof options === "string" ?
3254		createOptions( options ) :
3255		jQuery.extend( {}, options );
3256
3257	var // Flag to know if list is currently firing
3258		firing,
3259
3260		// Last fire value for non-forgettable lists
3261		memory,
3262
3263		// Flag to know if list was already fired
3264		fired,
3265
3266		// Flag to prevent firing
3267		locked,
3268
3269		// Actual callback list
3270		list = [],
3271
3272		// Queue of execution data for repeatable lists
3273		queue = [],
3274
3275		// Index of currently firing callback (modified by add/remove as needed)
3276		firingIndex = -1,
3277
3278		// Fire callbacks
3279		fire = function() {
3280
3281			// Enforce single-firing
3282			locked = locked || options.once;
3283
3284			// Execute callbacks for all pending executions,
3285			// respecting firingIndex overrides and runtime changes
3286			fired = firing = true;
3287			for ( ; queue.length; firingIndex = -1 ) {
3288				memory = queue.shift();
3289				while ( ++firingIndex < list.length ) {
3290
3291					// Run callback and check for early termination
3292					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
3293						options.stopOnFalse ) {
3294
3295						// Jump to end and forget the data so .add doesn't re-fire
3296						firingIndex = list.length;
3297						memory = false;
3298					}
3299				}
3300			}
3301
3302			// Forget the data if we're done with it
3303			if ( !options.memory ) {
3304				memory = false;
3305			}
3306
3307			firing = false;
3308
3309			// Clean up if we're done firing for good
3310			if ( locked ) {
3311
3312				// Keep an empty list if we have data for future add calls
3313				if ( memory ) {
3314					list = [];
3315
3316				// Otherwise, this object is spent
3317				} else {
3318					list = "";
3319				}
3320			}
3321		},
3322
3323		// Actual Callbacks object
3324		self = {
3325
3326			// Add a callback or a collection of callbacks to the list
3327			add: function() {
3328				if ( list ) {
3329
3330					// If we have memory from a past run, we should fire after adding
3331					if ( memory && !firing ) {
3332						firingIndex = list.length - 1;
3333						queue.push( memory );
3334					}
3335
3336					( function add( args ) {
3337						jQuery.each( args, function( _, arg ) {
3338							if ( isFunction( arg ) ) {
3339								if ( !options.unique || !self.has( arg ) ) {
3340									list.push( arg );
3341								}
3342							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
3343
3344								// Inspect recursively
3345								add( arg );
3346							}
3347						} );
3348					} )( arguments );
3349
3350					if ( memory && !firing ) {
3351						fire();
3352					}
3353				}
3354				return this;
3355			},
3356
3357			// Remove a callback from the list
3358			remove: function() {
3359				jQuery.each( arguments, function( _, arg ) {
3360					var index;
3361					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
3362						list.splice( index, 1 );
3363
3364						// Handle firing indexes
3365						if ( index <= firingIndex ) {
3366							firingIndex--;
3367						}
3368					}
3369				} );
3370				return this;
3371			},
3372
3373			// Check if a given callback is in the list.
3374			// If no argument is given, return whether or not list has callbacks attached.
3375			has: function( fn ) {
3376				return fn ?
3377					jQuery.inArray( fn, list ) > -1 :
3378					list.length > 0;
3379			},
3380
3381			// Remove all callbacks from the list
3382			empty: function() {
3383				if ( list ) {
3384					list = [];
3385				}
3386				return this;
3387			},
3388
3389			// Disable .fire and .add
3390			// Abort any current/pending executions
3391			// Clear all callbacks and values
3392			disable: function() {
3393				locked = queue = [];
3394				list = memory = "";
3395				return this;
3396			},
3397			disabled: function() {
3398				return !list;
3399			},
3400
3401			// Disable .fire
3402			// Also disable .add unless we have memory (since it would have no effect)
3403			// Abort any pending executions
3404			lock: function() {
3405				locked = queue = [];
3406				if ( !memory && !firing ) {
3407					list = memory = "";
3408				}
3409				return this;
3410			},
3411			locked: function() {
3412				return !!locked;
3413			},
3414
3415			// Call all callbacks with the given context and arguments
3416			fireWith: function( context, args ) {
3417				if ( !locked ) {
3418					args = args || [];
3419					args = [ context, args.slice ? args.slice() : args ];
3420					queue.push( args );
3421					if ( !firing ) {
3422						fire();
3423					}
3424				}
3425				return this;
3426			},
3427
3428			// Call all the callbacks with the given arguments
3429			fire: function() {
3430				self.fireWith( this, arguments );
3431				return this;
3432			},
3433
3434			// To know if the callbacks have already been called at least once
3435			fired: function() {
3436				return !!fired;
3437			}
3438		};
3439
3440	return self;
3441};
3442
3443
3444function Identity( v ) {
3445	return v;
3446}
3447function Thrower( ex ) {
3448	throw ex;
3449}
3450
3451function adoptValue( value, resolve, reject, noValue ) {
3452	var method;
3453
3454	try {
3455
3456		// Check for promise aspect first to privilege synchronous behavior
3457		if ( value && isFunction( ( method = value.promise ) ) ) {
3458			method.call( value ).done( resolve ).fail( reject );
3459
3460		// Other thenables
3461		} else if ( value && isFunction( ( method = value.then ) ) ) {
3462			method.call( value, resolve, reject );
3463
3464		// Other non-thenables
3465		} else {
3466
3467			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
3468			// * false: [ value ].slice( 0 ) => resolve( value )
3469			// * true: [ value ].slice( 1 ) => resolve()
3470			resolve.apply( undefined, [ value ].slice( noValue ) );
3471		}
3472
3473	// For Promises/A+, convert exceptions into rejections
3474	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
3475	// Deferred#then to conditionally suppress rejection.
3476	} catch ( value ) {
3477
3478		// Support: Android 4.0 only
3479		// Strict mode functions invoked without .call/.apply get global-object context
3480		reject.apply( undefined, [ value ] );
3481	}
3482}
3483
3484jQuery.extend( {
3485
3486	Deferred: function( func ) {
3487		var tuples = [
3488
3489				// action, add listener, callbacks,
3490				// ... .then handlers, argument index, [final state]
3491				[ "notify", "progress", jQuery.Callbacks( "memory" ),
3492					jQuery.Callbacks( "memory" ), 2 ],
3493				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
3494					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
3495				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
3496					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
3497			],
3498			state = "pending",
3499			promise = {
3500				state: function() {
3501					return state;
3502				},
3503				always: function() {
3504					deferred.done( arguments ).fail( arguments );
3505					return this;
3506				},
3507				"catch": function( fn ) {
vendor: 15,167 bytes, lines 3508-4099
3508					return promise.then( null, fn );
3509				},
3510
3511				// Keep pipe for back-compat
3512				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
3513					var fns = arguments;
3514
3515					return jQuery.Deferred( function( newDefer ) {
3516						jQuery.each( tuples, function( i, tuple ) {
3517
3518							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
3519							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
3520
3521							// deferred.progress(function() { bind to newDefer or newDefer.notify })
3522							// deferred.done(function() { bind to newDefer or newDefer.resolve })
3523							// deferred.fail(function() { bind to newDefer or newDefer.reject })
3524							deferred[ tuple[ 1 ] ]( function() {
3525								var returned = fn && fn.apply( this, arguments );
3526								if ( returned && isFunction( returned.promise ) ) {
3527									returned.promise()
3528										.progress( newDefer.notify )
3529										.done( newDefer.resolve )
3530										.fail( newDefer.reject );
3531								} else {
3532									newDefer[ tuple[ 0 ] + "With" ](
3533										this,
3534										fn ? [ returned ] : arguments
3535									);
3536								}
3537							} );
3538						} );
3539						fns = null;
3540					} ).promise();
3541				},
3542				then: function( onFulfilled, onRejected, onProgress ) {
3543					var maxDepth = 0;
3544					function resolve( depth, deferred, handler, special ) {
3545						return function() {
3546							var that = this,
3547								args = arguments,
3548								mightThrow = function() {
3549									var returned, then;
3550
3551									// Support: Promises/A+ section 2.3.3.3.3
3552									// https://promisesaplus.com/#point-59
3553									// Ignore double-resolution attempts
3554									if ( depth < maxDepth ) {
3555										return;
3556									}
3557
3558									returned = handler.apply( that, args );
3559
3560									// Support: Promises/A+ section 2.3.1
3561									// https://promisesaplus.com/#point-48
3562									if ( returned === deferred.promise() ) {
3563										throw new TypeError( "Thenable self-resolution" );
3564									}
3565
3566									// Support: Promises/A+ sections 2.3.3.1, 3.5
3567									// https://promisesaplus.com/#point-54
3568									// https://promisesaplus.com/#point-75
3569									// Retrieve `then` only once
3570									then = returned &&
3571
3572										// Support: Promises/A+ section 2.3.4
3573										// https://promisesaplus.com/#point-64
3574										// Only check objects and functions for thenability
3575										( typeof returned === "object" ||
3576											typeof returned === "function" ) &&
3577										returned.then;
3578
3579									// Handle a returned thenable
3580									if ( isFunction( then ) ) {
3581
3582										// Special processors (notify) just wait for resolution
3583										if ( special ) {
3584											then.call(
3585												returned,
3586												resolve( maxDepth, deferred, Identity, special ),
3587												resolve( maxDepth, deferred, Thrower, special )
3588											);
3589
3590										// Normal processors (resolve) also hook into progress
3591										} else {
3592
3593											// ...and disregard older resolution values
3594											maxDepth++;
3595
3596											then.call(
3597												returned,
3598												resolve( maxDepth, deferred, Identity, special ),
3599												resolve( maxDepth, deferred, Thrower, special ),
3600												resolve( maxDepth, deferred, Identity,
3601													deferred.notifyWith )
3602											);
3603										}
3604
3605									// Handle all other returned values
3606									} else {
3607
3608										// Only substitute handlers pass on context
3609										// and multiple values (non-spec behavior)
3610										if ( handler !== Identity ) {
3611											that = undefined;
3612											args = [ returned ];
3613										}
3614
3615										// Process the value(s)
3616										// Default process is resolve
3617										( special || deferred.resolveWith )( that, args );
3618									}
3619								},
3620
3621								// Only normal processors (resolve) catch and reject exceptions
3622								process = special ?
3623									mightThrow :
3624									function() {
3625										try {
3626											mightThrow();
3627										} catch ( e ) {
3628
3629											if ( jQuery.Deferred.exceptionHook ) {
3630												jQuery.Deferred.exceptionHook( e,
3631													process.stackTrace );
3632											}
3633
3634											// Support: Promises/A+ section 2.3.3.3.4.1
3635											// https://promisesaplus.com/#point-61
3636											// Ignore post-resolution exceptions
3637											if ( depth + 1 >= maxDepth ) {
3638
3639												// Only substitute handlers pass on context
3640												// and multiple values (non-spec behavior)
3641												if ( handler !== Thrower ) {
3642													that = undefined;
3643													args = [ e ];
3644												}
3645
3646												deferred.rejectWith( that, args );
3647											}
3648										}
3649									};
3650
3651							// Support: Promises/A+ section 2.3.3.3.1
3652							// https://promisesaplus.com/#point-57
3653							// Re-resolve promises immediately to dodge false rejection from
3654							// subsequent errors
3655							if ( depth ) {
3656								process();
3657							} else {
3658
3659								// Call an optional hook to record the stack, in case of exception
3660								// since it's otherwise lost when execution goes async
3661								if ( jQuery.Deferred.getStackHook ) {
3662									process.stackTrace = jQuery.Deferred.getStackHook();
3663								}
3664								window.setTimeout( process );
3665							}
3666						};
3667					}
3668
3669					return jQuery.Deferred( function( newDefer ) {
3670
3671						// progress_handlers.add( ... )
3672						tuples[ 0 ][ 3 ].add(
3673							resolve(
3674								0,
3675								newDefer,
3676								isFunction( onProgress ) ?
3677									onProgress :
3678									Identity,
3679								newDefer.notifyWith
3680							)
3681						);
3682
3683						// fulfilled_handlers.add( ... )
3684						tuples[ 1 ][ 3 ].add(
3685							resolve(
3686								0,
3687								newDefer,
3688								isFunction( onFulfilled ) ?
3689									onFulfilled :
3690									Identity
3691							)
3692						);
3693
3694						// rejected_handlers.add( ... )
3695						tuples[ 2 ][ 3 ].add(
3696							resolve(
3697								0,
3698								newDefer,
3699								isFunction( onRejected ) ?
3700									onRejected :
3701									Thrower
3702							)
3703						);
3704					} ).promise();
3705				},
3706
3707				// Get a promise for this deferred
3708				// If obj is provided, the promise aspect is added to the object
3709				promise: function( obj ) {
3710					return obj != null ? jQuery.extend( obj, promise ) : promise;
3711				}
3712			},
3713			deferred = {};
3714
3715		// Add list-specific methods
3716		jQuery.each( tuples, function( i, tuple ) {
3717			var list = tuple[ 2 ],
3718				stateString = tuple[ 5 ];
3719
3720			// promise.progress = list.add
3721			// promise.done = list.add
3722			// promise.fail = list.add
3723			promise[ tuple[ 1 ] ] = list.add;
3724
3725			// Handle state
3726			if ( stateString ) {
3727				list.add(
3728					function() {
3729
3730						// state = "resolved" (i.e., fulfilled)
3731						// state = "rejected"
3732						state = stateString;
3733					},
3734
3735					// rejected_callbacks.disable
3736					// fulfilled_callbacks.disable
3737					tuples[ 3 - i ][ 2 ].disable,
3738
3739					// rejected_handlers.disable
3740					// fulfilled_handlers.disable
3741					tuples[ 3 - i ][ 3 ].disable,
3742
3743					// progress_callbacks.lock
3744					tuples[ 0 ][ 2 ].lock,
3745
3746					// progress_handlers.lock
3747					tuples[ 0 ][ 3 ].lock
3748				);
3749			}
3750
3751			// progress_handlers.fire
3752			// fulfilled_handlers.fire
3753			// rejected_handlers.fire
3754			list.add( tuple[ 3 ].fire );
3755
3756			// deferred.notify = function() { deferred.notifyWith(...) }
3757			// deferred.resolve = function() { deferred.resolveWith(...) }
3758			// deferred.reject = function() { deferred.rejectWith(...) }
3759			deferred[ tuple[ 0 ] ] = function() {
3760				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
3761				return this;
3762			};
3763
3764			// deferred.notifyWith = list.fireWith
3765			// deferred.resolveWith = list.fireWith
3766			// deferred.rejectWith = list.fireWith
3767			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
3768		} );
3769
3770		// Make the deferred a promise
3771		promise.promise( deferred );
3772
3773		// Call given func if any
3774		if ( func ) {
3775			func.call( deferred, deferred );
3776		}
3777
3778		// All done!
3779		return deferred;
3780	},
3781
3782	// Deferred helper
3783	when: function( singleValue ) {
3784		var
3785
3786			// count of uncompleted subordinates
3787			remaining = arguments.length,
3788
3789			// count of unprocessed arguments
3790			i = remaining,
3791
3792			// subordinate fulfillment data
3793			resolveContexts = Array( i ),
3794			resolveValues = slice.call( arguments ),
3795
3796			// the master Deferred
3797			master = jQuery.Deferred(),
3798
3799			// subordinate callback factory
3800			updateFunc = function( i ) {
3801				return function( value ) {
3802					resolveContexts[ i ] = this;
3803					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
3804					if ( !( --remaining ) ) {
3805						master.resolveWith( resolveContexts, resolveValues );
3806					}
3807				};
3808			};
3809
3810		// Single- and empty arguments are adopted like Promise.resolve
3811		if ( remaining <= 1 ) {
3812			adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
3813				!remaining );
3814
3815			// Use .then() to unwrap secondary thenables (cf. gh-3000)
3816			if ( master.state() === "pending" ||
3817				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
3818
3819				return master.then();
3820			}
3821		}
3822
3823		// Multiple arguments are aggregated like Promise.all array elements
3824		while ( i-- ) {
3825			adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
3826		}
3827
3828		return master.promise();
3829	}
3830} );
3831
3832
3833// These usually indicate a programmer mistake during development,
3834// warn about them ASAP rather than swallowing them by default.
3835var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
3836
3837jQuery.Deferred.exceptionHook = function( error, stack ) {
3838
3839	// Support: IE 8 - 9 only
3840	// Console exists when dev tools are open, which can happen at any time
3841	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
3842		window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
3843	}
3844};
3845
3846
3847
3848
3849jQuery.readyException = function( error ) {
3850	window.setTimeout( function() {
3851		throw error;
3852	} );
3853};
3854
3855
3856
3857
3858// The deferred used on DOM ready
3859var readyList = jQuery.Deferred();
3860
3861jQuery.fn.ready = function( fn ) {
3862
3863	readyList
3864		.then( fn )
3865
3866		// Wrap jQuery.readyException in a function so that the lookup
3867		// happens at the time of error handling instead of callback
3868		// registration.
3869		.catch( function( error ) {
3870			jQuery.readyException( error );
3871		} );
3872
3873	return this;
3874};
3875
3876jQuery.extend( {
3877
3878	// Is the DOM ready to be used? Set to true once it occurs.
3879	isReady: false,
3880
3881	// A counter to track how many items to wait for before
3882	// the ready event fires. See #6781
3883	readyWait: 1,
3884
3885	// Handle when the DOM is ready
3886	ready: function( wait ) {
3887
3888		// Abort if there are pending holds or we're already ready
3889		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
3890			return;
3891		}
3892
3893		// Remember that the DOM is ready
3894		jQuery.isReady = true;
3895
3896		// If a normal DOM Ready event fired, decrement, and wait if need be
3897		if ( wait !== true && --jQuery.readyWait > 0 ) {
3898			return;
3899		}
3900
3901		// If there are functions bound, to execute
3902		readyList.resolveWith( document, [ jQuery ] );
3903	}
3904} );
3905
3906jQuery.ready.then = readyList.then;
3907
3908// The ready event handler and self cleanup method
3909function completed() {
3910	document.removeEventListener( "DOMContentLoaded", completed );
3911	window.removeEventListener( "load", completed );
3912	jQuery.ready();
3913}
3914
3915// Catch cases where $(document).ready() is called
3916// after the browser event has already occurred.
3917// Support: IE <=9 - 10 only
3918// Older IE sometimes signals "interactive" too soon
3919if ( document.readyState === "complete" ||
3920	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
3921
3922	// Handle it asynchronously to allow scripts the opportunity to delay ready
3923	window.setTimeout( jQuery.ready );
3924
3925} else {
3926
3927	// Use the handy event callback
3928	document.addEventListener( "DOMContentLoaded", completed );
3929
3930	// A fallback to window.onload, that will always work
3931	window.addEventListener( "load", completed );
3932}
3933
3934
3935
3936
3937// Multifunctional method to get and set values of a collection
3938// The value/s can optionally be executed if it's a function
3939var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
3940	var i = 0,
3941		len = elems.length,
3942		bulk = key == null;
3943
3944	// Sets many values
3945	if ( toType( key ) === "object" ) {
3946		chainable = true;
3947		for ( i in key ) {
3948			access( elems, fn, i, key[ i ], true, emptyGet, raw );
3949		}
3950
3951	// Sets one value
3952	} else if ( value !== undefined ) {
3953		chainable = true;
3954
3955		if ( !isFunction( value ) ) {
3956			raw = true;
3957		}
3958
3959		if ( bulk ) {
3960
3961			// Bulk operations run against the entire set
3962			if ( raw ) {
3963				fn.call( elems, value );
3964				fn = null;
3965
3966			// ...except when executing function values
3967			} else {
3968				bulk = fn;
3969				fn = function( elem, key, value ) {
3970					return bulk.call( jQuery( elem ), value );
3971				};
3972			}
3973		}
3974
3975		if ( fn ) {
3976			for ( ; i < len; i++ ) {
3977				fn(
3978					elems[ i ], key, raw ?
3979					value :
3980					value.call( elems[ i ], i, fn( elems[ i ], key ) )
3981				);
3982			}
3983		}
3984	}
3985
3986	if ( chainable ) {
3987		return elems;
3988	}
3989
3990	// Gets
3991	if ( bulk ) {
3992		return fn.call( elems );
3993	}
3994
3995	return len ? fn( elems[ 0 ], key ) : emptyGet;
3996};
3997
3998
3999// Matches dashed string for camelizing
4000var rmsPrefix = /^-ms-/,
4001	rdashAlpha = /-([a-z])/g;
4002
4003// Used by camelCase as callback to replace()
4004function fcamelCase( all, letter ) {
4005	return letter.toUpperCase();
4006}
4007
4008// Convert dashed to camelCase; used by the css and data modules
4009// Support: IE <=9 - 11, Edge 12 - 15
4010// Microsoft forgot to hump their vendor prefix (#9572)
4011function camelCase( string ) {
4012	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
4013}
4014var acceptData = function( owner ) {
4015
4016	// Accepts only:
4017	//  - Node
4018	//    - Node.ELEMENT_NODE
4019	//    - Node.DOCUMENT_NODE
4020	//  - Object
4021	//    - Any
4022	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
4023};
4024
4025
4026
4027
4028function Data() {
4029	this.expando = jQuery.expando + Data.uid++;
4030}
4031
4032Data.uid = 1;
4033
4034Data.prototype = {
4035
4036	cache: function( owner ) {
4037
4038		// Check if the owner object already has a cache
4039		var value = owner[ this.expando ];
4040
4041		// If not, create one
4042		if ( !value ) {
4043			value = {};
4044
4045			// We can accept data for non-element nodes in modern browsers,
4046			// but we should not, see #8335.
4047			// Always return an empty object.
4048			if ( acceptData( owner ) ) {
4049
4050				// If it is a node unlikely to be stringify-ed or looped over
4051				// use plain assignment
4052				if ( owner.nodeType ) {
4053					owner[ this.expando ] = value;
4054
4055				// Otherwise secure it in a non-enumerable property
4056				// configurable must be true to allow the property to be
4057				// deleted when data is removed
4058				} else {
4059					Object.defineProperty( owner, this.expando, {
4060						value: value,
4061						configurable: true
4062					} );
4063				}
4064			}
4065		}
4066
4067		return value;
4068	},
4069	set: function( owner, data, value ) {
4070		var prop,
4071			cache = this.cache( owner );
4072
4073		// Handle: [ owner, key, value ] args
4074		// Always use camelCase key (gh-2257)
4075		if ( typeof data === "string" ) {
4076			cache[ camelCase( data ) ] = value;
4077
4078		// Handle: [ owner, { properties } ] args
4079		} else {
4080
4081			// Copy the properties one-by-one to the cache object
4082			for ( prop in data ) {
4083				cache[ camelCase( prop ) ] = data[ prop ];
4084			}
4085		}
4086		return cache;
4087	},
4088	get: function( owner, key ) {
4089		return key === undefined ?
4090			this.cache( owner ) :
4091
4092			// Always use camelCase key (gh-2257)
4093			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
4094	},
4095	access: function( owner, key, value ) {
4096
4097		// In cases where either:
4098		//
4099		//   1. No key was specified
vendor: 10,628 bytes, lines 4100-4531
4100		//   2. A string key was specified, but no value provided
4101		//
4102		// Take the "read" path and allow the get method to determine
4103		// which value to return, respectively either:
4104		//
4105		//   1. The entire cache object
4106		//   2. The data stored at the key
4107		//
4108		if ( key === undefined ||
4109				( ( key && typeof key === "string" ) && value === undefined ) ) {
4110
4111			return this.get( owner, key );
4112		}
4113
4114		// When the key is not a string, or both a key and value
4115		// are specified, set or extend (existing objects) with either:
4116		//
4117		//   1. An object of properties
4118		//   2. A key and value
4119		//
4120		this.set( owner, key, value );
4121
4122		// Since the "set" path can have two possible entry points
4123		// return the expected data based on which path was taken[*]
4124		return value !== undefined ? value : key;
4125	},
4126	remove: function( owner, key ) {
4127		var i,
4128			cache = owner[ this.expando ];
4129
4130		if ( cache === undefined ) {
4131			return;
4132		}
4133
4134		if ( key !== undefined ) {
4135
4136			// Support array or space separated string of keys
4137			if ( Array.isArray( key ) ) {
4138
4139				// If key is an array of keys...
4140				// We always set camelCase keys, so remove that.
4141				key = key.map( camelCase );
4142			} else {
4143				key = camelCase( key );
4144
4145				// If a key with the spaces exists, use it.
4146				// Otherwise, create an array by matching non-whitespace
4147				key = key in cache ?
4148					[ key ] :
4149					( key.match( rnothtmlwhite ) || [] );
4150			}
4151
4152			i = key.length;
4153
4154			while ( i-- ) {
4155				delete cache[ key[ i ] ];
4156			}
4157		}
4158
4159		// Remove the expando if there's no more data
4160		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
4161
4162			// Support: Chrome <=35 - 45
4163			// Webkit & Blink performance suffers when deleting properties
4164			// from DOM nodes, so set to undefined instead
4165			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
4166			if ( owner.nodeType ) {
4167				owner[ this.expando ] = undefined;
4168			} else {
4169				delete owner[ this.expando ];
4170			}
4171		}
4172	},
4173	hasData: function( owner ) {
4174		var cache = owner[ this.expando ];
4175		return cache !== undefined && !jQuery.isEmptyObject( cache );
4176	}
4177};
4178var dataPriv = new Data();
4179
4180var dataUser = new Data();
4181
4182
4183
4184//	Implementation Summary
4185//
4186//	1. Enforce API surface and semantic compatibility with 1.9.x branch
4187//	2. Improve the module's maintainability by reducing the storage
4188//		paths to a single mechanism.
4189//	3. Use the same single mechanism to support "private" and "user" data.
4190//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
4191//	5. Avoid exposing implementation details on user objects (eg. expando properties)
4192//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
4193
4194var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
4195	rmultiDash = /[A-Z]/g;
4196
4197function getData( data ) {
4198	if ( data === "true" ) {
4199		return true;
4200	}
4201
4202	if ( data === "false" ) {
4203		return false;
4204	}
4205
4206	if ( data === "null" ) {
4207		return null;
4208	}
4209
4210	// Only convert to a number if it doesn't change the string
4211	if ( data === +data + "" ) {
4212		return +data;
4213	}
4214
4215	if ( rbrace.test( data ) ) {
4216		return JSON.parse( data );
4217	}
4218
4219	return data;
4220}
4221
4222function dataAttr( elem, key, data ) {
4223	var name;
4224
4225	// If nothing was found internally, try to fetch any
4226	// data from the HTML5 data-* attribute
4227	if ( data === undefined && elem.nodeType === 1 ) {
4228		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
4229		data = elem.getAttribute( name );
4230
4231		if ( typeof data === "string" ) {
4232			try {
4233				data = getData( data );
4234			} catch ( e ) {}
4235
4236			// Make sure we set the data so it isn't changed later
4237			dataUser.set( elem, key, data );
4238		} else {
4239			data = undefined;
4240		}
4241	}
4242	return data;
4243}
4244
4245jQuery.extend( {
4246	hasData: function( elem ) {
4247		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
4248	},
4249
4250	data: function( elem, name, data ) {
4251		return dataUser.access( elem, name, data );
4252	},
4253
4254	removeData: function( elem, name ) {
4255		dataUser.remove( elem, name );
4256	},
4257
4258	// TODO: Now that all calls to _data and _removeData have been replaced
4259	// with direct calls to dataPriv methods, these can be deprecated.
4260	_data: function( elem, name, data ) {
4261		return dataPriv.access( elem, name, data );
4262	},
4263
4264	_removeData: function( elem, name ) {
4265		dataPriv.remove( elem, name );
4266	}
4267} );
4268
4269jQuery.fn.extend( {
4270	data: function( key, value ) {
4271		var i, name, data,
4272			elem = this[ 0 ],
4273			attrs = elem && elem.attributes;
4274
4275		// Gets all values
4276		if ( key === undefined ) {
4277			if ( this.length ) {
4278				data = dataUser.get( elem );
4279
4280				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
4281					i = attrs.length;
4282					while ( i-- ) {
4283
4284						// Support: IE 11 only
4285						// The attrs elements can be null (#14894)
4286						if ( attrs[ i ] ) {
4287							name = attrs[ i ].name;
4288							if ( name.indexOf( "data-" ) === 0 ) {
4289								name = camelCase( name.slice( 5 ) );
4290								dataAttr( elem, name, data[ name ] );
4291							}
4292						}
4293					}
4294					dataPriv.set( elem, "hasDataAttrs", true );
4295				}
4296			}
4297
4298			return data;
4299		}
4300
4301		// Sets multiple values
4302		if ( typeof key === "object" ) {
4303			return this.each( function() {
4304				dataUser.set( this, key );
4305			} );
4306		}
4307
4308		return access( this, function( value ) {
4309			var data;
4310
4311			// The calling jQuery object (element matches) is not empty
4312			// (and therefore has an element appears at this[ 0 ]) and the
4313			// `value` parameter was not undefined. An empty jQuery object
4314			// will result in `undefined` for elem = this[ 0 ] which will
4315			// throw an exception if an attempt to read a data cache is made.
4316			if ( elem && value === undefined ) {
4317
4318				// Attempt to get data from the cache
4319				// The key will always be camelCased in Data
4320				data = dataUser.get( elem, key );
4321				if ( data !== undefined ) {
4322					return data;
4323				}
4324
4325				// Attempt to "discover" the data in
4326				// HTML5 custom data-* attrs
4327				data = dataAttr( elem, key );
4328				if ( data !== undefined ) {
4329					return data;
4330				}
4331
4332				// We tried really hard, but the data doesn't exist.
4333				return;
4334			}
4335
4336			// Set the data...
4337			this.each( function() {
4338
4339				// We always store the camelCased key
4340				dataUser.set( this, key, value );
4341			} );
4342		}, null, value, arguments.length > 1, null, true );
4343	},
4344
4345	removeData: function( key ) {
4346		return this.each( function() {
4347			dataUser.remove( this, key );
4348		} );
4349	}
4350} );
4351
4352
4353jQuery.extend( {
4354	queue: function( elem, type, data ) {
4355		var queue;
4356
4357		if ( elem ) {
4358			type = ( type || "fx" ) + "queue";
4359			queue = dataPriv.get( elem, type );
4360
4361			// Speed up dequeue by getting out quickly if this is just a lookup
4362			if ( data ) {
4363				if ( !queue || Array.isArray( data ) ) {
4364					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
4365				} else {
4366					queue.push( data );
4367				}
4368			}
4369			return queue || [];
4370		}
4371	},
4372
4373	dequeue: function( elem, type ) {
4374		type = type || "fx";
4375
4376		var queue = jQuery.queue( elem, type ),
4377			startLength = queue.length,
4378			fn = queue.shift(),
4379			hooks = jQuery._queueHooks( elem, type ),
4380			next = function() {
4381				jQuery.dequeue( elem, type );
4382			};
4383
4384		// If the fx queue is dequeued, always remove the progress sentinel
4385		if ( fn === "inprogress" ) {
4386			fn = queue.shift();
4387			startLength--;
4388		}
4389
4390		if ( fn ) {
4391
4392			// Add a progress sentinel to prevent the fx queue from being
4393			// automatically dequeued
4394			if ( type === "fx" ) {
4395				queue.unshift( "inprogress" );
4396			}
4397
4398			// Clear up the last queue stop function
4399			delete hooks.stop;
4400			fn.call( elem, next, hooks );
4401		}
4402
4403		if ( !startLength && hooks ) {
4404			hooks.empty.fire();
4405		}
4406	},
4407
4408	// Not public - generate a queueHooks object, or return the current one
4409	_queueHooks: function( elem, type ) {
4410		var key = type + "queueHooks";
4411		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
4412			empty: jQuery.Callbacks( "once memory" ).add( function() {
4413				dataPriv.remove( elem, [ type + "queue", key ] );
4414			} )
4415		} );
4416	}
4417} );
4418
4419jQuery.fn.extend( {
4420	queue: function( type, data ) {
4421		var setter = 2;
4422
4423		if ( typeof type !== "string" ) {
4424			data = type;
4425			type = "fx";
4426			setter--;
4427		}
4428
4429		if ( arguments.length < setter ) {
4430			return jQuery.queue( this[ 0 ], type );
4431		}
4432
4433		return data === undefined ?
4434			this :
4435			this.each( function() {
4436				var queue = jQuery.queue( this, type, data );
4437
4438				// Ensure a hooks for this queue
4439				jQuery._queueHooks( this, type );
4440
4441				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
4442					jQuery.dequeue( this, type );
4443				}
4444			} );
4445	},
4446	dequeue: function( type ) {
4447		return this.each( function() {
4448			jQuery.dequeue( this, type );
4449		} );
4450	},
4451	clearQueue: function( type ) {
4452		return this.queue( type || "fx", [] );
4453	},
4454
4455	// Get a promise resolved when queues of a certain type
4456	// are emptied (fx is the type by default)
4457	promise: function( type, obj ) {
4458		var tmp,
4459			count = 1,
4460			defer = jQuery.Deferred(),
4461			elements = this,
4462			i = this.length,
4463			resolve = function() {
4464				if ( !( --count ) ) {
4465					defer.resolveWith( elements, [ elements ] );
4466				}
4467			};
4468
4469		if ( typeof type !== "string" ) {
4470			obj = type;
4471			type = undefined;
4472		}
4473		type = type || "fx";
4474
4475		while ( i-- ) {
4476			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
4477			if ( tmp && tmp.empty ) {
4478				count++;
4479				tmp.empty.add( resolve );
4480			}
4481		}
4482		resolve();
4483		return defer.promise( obj );
4484	}
4485} );
4486var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
4487
4488var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
4489
4490
4491var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
4492
4493var documentElement = document.documentElement;
4494
4495
4496
4497	var isAttached = function( elem ) {
4498			return jQuery.contains( elem.ownerDocument, elem );
4499		},
4500		composed = { composed: true };
4501
4502	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
4503	// Check attachment across shadow DOM boundaries when possible (gh-3504)
4504	// Support: iOS 10.0-10.2 only
4505	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
4506	// leading to errors. We need to check for `getRootNode`.
4507	if ( documentElement.getRootNode ) {
4508		isAttached = function( elem ) {
4509			return jQuery.contains( elem.ownerDocument, elem ) ||
4510				elem.getRootNode( composed ) === elem.ownerDocument;
4511		};
4512	}
4513var isHiddenWithinTree = function( elem, el ) {
4514
4515		// isHiddenWithinTree might be called from jQuery#filter function;
4516		// in that case, element will be second argument
4517		elem = el || elem;
4518
4519		// Inline style trumps all
4520		return elem.style.display === "none" ||
4521			elem.style.display === "" &&
4522
4523			// Otherwise, check computed style
4524			// Support: Firefox <=43 - 45
4525			// Disconnected elements can have computed display: none, so first confirm that elem is
4526			// in the document.
4527			isAttached( elem ) &&
4528
4529			jQuery.css( elem, "display" ) === "none";
4530	};
4531
vendor: 2,487 bytes, lines 4532-4629
4532var swap = function( elem, options, callback, args ) {
4533	var ret, name,
4534		old = {};
4535
4536	// Remember the old values, and insert the new ones
4537	for ( name in options ) {
4538		old[ name ] = elem.style[ name ];
4539		elem.style[ name ] = options[ name ];
4540	}
4541
4542	ret = callback.apply( elem, args || [] );
4543
4544	// Revert the old values
4545	for ( name in options ) {
4546		elem.style[ name ] = old[ name ];
4547	}
4548
4549	return ret;
4550};
4551
4552
4553
4554
4555function adjustCSS( elem, prop, valueParts, tween ) {
4556	var adjusted, scale,
4557		maxIterations = 20,
4558		currentValue = tween ?
4559			function() {
4560				return tween.cur();
4561			} :
4562			function() {
4563				return jQuery.css( elem, prop, "" );
4564			},
4565		initial = currentValue(),
4566		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
4567
4568		// Starting value computation is required for potential unit mismatches
4569		initialInUnit = elem.nodeType &&
4570			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
4571			rcssNum.exec( jQuery.css( elem, prop ) );
4572
4573	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
4574
4575		// Support: Firefox <=54
4576		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
4577		initial = initial / 2;
4578
4579		// Trust units reported by jQuery.css
4580		unit = unit || initialInUnit[ 3 ];
4581
4582		// Iteratively approximate from a nonzero starting point
4583		initialInUnit = +initial || 1;
4584
4585		while ( maxIterations-- ) {
4586
4587			// Evaluate and update our best guess (doubling guesses that zero out).
4588			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
4589			jQuery.style( elem, prop, initialInUnit + unit );
4590			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
4591				maxIterations = 0;
4592			}
4593			initialInUnit = initialInUnit / scale;
4594
4595		}
4596
4597		initialInUnit = initialInUnit * 2;
4598		jQuery.style( elem, prop, initialInUnit + unit );
4599
4600		// Make sure we update the tween properties later on
4601		valueParts = valueParts || [];
4602	}
4603
4604	if ( valueParts ) {
4605		initialInUnit = +initialInUnit || +initial || 0;
4606
4607		// Apply relative offset (+=/-=) if specified
4608		adjusted = valueParts[ 1 ] ?
4609			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
4610			+valueParts[ 2 ];
4611		if ( tween ) {
4612			tween.unit = unit;
4613			tween.start = initialInUnit;
4614			tween.end = adjusted;
4615		}
4616	}
4617	return adjusted;
4618}
4619
4620
4621var defaultDisplayMap = {};
4622
4623function getDefaultDisplay( elem ) {
4624	var temp,
4625		doc = elem.ownerDocument,
4626		nodeName = elem.nodeName,
4627		display = defaultDisplayMap[ nodeName ];
4628
4629	if ( display ) {
vendor: 4,818 bytes, lines 4630-4825
4630		return display;
4631	}
4632
4633	temp = doc.body.appendChild( doc.createElement( nodeName ) );
4634	display = jQuery.css( temp, "display" );
4635
4636	temp.parentNode.removeChild( temp );
4637
4638	if ( display === "none" ) {
4639		display = "block";
4640	}
4641	defaultDisplayMap[ nodeName ] = display;
4642
4643	return display;
4644}
4645
4646function showHide( elements, show ) {
4647	var display, elem,
4648		values = [],
4649		index = 0,
4650		length = elements.length;
4651
4652	// Determine new display value for elements that need to change
4653	for ( ; index < length; index++ ) {
4654		elem = elements[ index ];
4655		if ( !elem.style ) {
4656			continue;
4657		}
4658
4659		display = elem.style.display;
4660		if ( show ) {
4661
4662			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
4663			// check is required in this first loop unless we have a nonempty display value (either
4664			// inline or about-to-be-restored)
4665			if ( display === "none" ) {
4666				values[ index ] = dataPriv.get( elem, "display" ) || null;
4667				if ( !values[ index ] ) {
4668					elem.style.display = "";
4669				}
4670			}
4671			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
4672				values[ index ] = getDefaultDisplay( elem );
4673			}
4674		} else {
4675			if ( display !== "none" ) {
4676				values[ index ] = "none";
4677
4678				// Remember what we're overwriting
4679				dataPriv.set( elem, "display", display );
4680			}
4681		}
4682	}
4683
4684	// Set the display of the elements in a second loop to avoid constant reflow
4685	for ( index = 0; index < length; index++ ) {
4686		if ( values[ index ] != null ) {
4687			elements[ index ].style.display = values[ index ];
4688		}
4689	}
4690
4691	return elements;
4692}
4693
4694jQuery.fn.extend( {
4695	show: function() {
4696		return showHide( this, true );
4697	},
4698	hide: function() {
4699		return showHide( this );
4700	},
4701	toggle: function( state ) {
4702		if ( typeof state === "boolean" ) {
4703			return state ? this.show() : this.hide();
4704		}
4705
4706		return this.each( function() {
4707			if ( isHiddenWithinTree( this ) ) {
4708				jQuery( this ).show();
4709			} else {
4710				jQuery( this ).hide();
4711			}
4712		} );
4713	}
4714} );
4715var rcheckableType = ( /^(?:checkbox|radio)$/i );
4716
4717var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
4718
4719var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
4720
4721
4722
4723// We have to close these tags to support XHTML (#13200)
4724var wrapMap = {
4725
4726	// Support: IE <=9 only
4727	option: [ 1, "<select multiple='multiple'>", "</select>" ],
4728
4729	// XHTML parsers do not magically insert elements in the
4730	// same way that tag soup parsers do. So we cannot shorten
4731	// this by omitting <tbody> or other required elements.
4732	thead: [ 1, "<table>", "</table>" ],
4733	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
4734	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
4735	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
4736
4737	_default: [ 0, "", "" ]
4738};
4739
4740// Support: IE <=9 only
4741wrapMap.optgroup = wrapMap.option;
4742
4743wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
4744wrapMap.th = wrapMap.td;
4745
4746
4747function getAll( context, tag ) {
4748
4749	// Support: IE <=9 - 11 only
4750	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
4751	var ret;
4752
4753	if ( typeof context.getElementsByTagName !== "undefined" ) {
4754		ret = context.getElementsByTagName( tag || "*" );
4755
4756	} else if ( typeof context.querySelectorAll !== "undefined" ) {
4757		ret = context.querySelectorAll( tag || "*" );
4758
4759	} else {
4760		ret = [];
4761	}
4762
4763	if ( tag === undefined || tag && nodeName( context, tag ) ) {
4764		return jQuery.merge( [ context ], ret );
4765	}
4766
4767	return ret;
4768}
4769
4770
4771// Mark scripts as having already been evaluated
4772function setGlobalEval( elems, refElements ) {
4773	var i = 0,
4774		l = elems.length;
4775
4776	for ( ; i < l; i++ ) {
4777		dataPriv.set(
4778			elems[ i ],
4779			"globalEval",
4780			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
4781		);
4782	}
4783}
4784
4785
4786var rhtml = /<|&#?\w+;/;
4787
4788function buildFragment( elems, context, scripts, selection, ignored ) {
4789	var elem, tmp, tag, wrap, attached, j,
4790		fragment = context.createDocumentFragment(),
4791		nodes = [],
4792		i = 0,
4793		l = elems.length;
4794
4795	for ( ; i < l; i++ ) {
4796		elem = elems[ i ];
4797
4798		if ( elem || elem === 0 ) {
4799
4800			// Add nodes directly
4801			if ( toType( elem ) === "object" ) {
4802
4803				// Support: Android <=4.0 only, PhantomJS 1 only
4804				// push.apply(_, arraylike) throws on ancient WebKit
4805				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
4806
4807			// Convert non-html into a text node
4808			} else if ( !rhtml.test( elem ) ) {
4809				nodes.push( context.createTextNode( elem ) );
4810
4811			// Convert html into DOM nodes
4812			} else {
4813				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
4814
4815				// Deserialize a standard representation
4816				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
4817				wrap = wrapMap[ tag ] || wrapMap._default;
4818				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
4819
4820				// Descend through wrappers to the right content
4821				j = wrap[ 0 ];
4822				while ( j-- ) {
4823					tmp = tmp.lastChild;
4824				}
4825
vendor: 1,252 bytes, lines 4826-4883
4826				// Support: Android <=4.0 only, PhantomJS 1 only
4827				// push.apply(_, arraylike) throws on ancient WebKit
4828				jQuery.merge( nodes, tmp.childNodes );
4829
4830				// Remember the top-level container
4831				tmp = fragment.firstChild;
4832
4833				// Ensure the created nodes are orphaned (#12392)
4834				tmp.textContent = "";
4835			}
4836		}
4837	}
4838
4839	// Remove wrapper from fragment
4840	fragment.textContent = "";
4841
4842	i = 0;
4843	while ( ( elem = nodes[ i++ ] ) ) {
4844
4845		// Skip elements already in the context collection (trac-4087)
4846		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
4847			if ( ignored ) {
4848				ignored.push( elem );
4849			}
4850			continue;
4851		}
4852
4853		attached = isAttached( elem );
4854
4855		// Append to fragment
4856		tmp = getAll( fragment.appendChild( elem ), "script" );
4857
4858		// Preserve script evaluation history
4859		if ( attached ) {
4860			setGlobalEval( tmp );
4861		}
4862
4863		// Capture executables
4864		if ( scripts ) {
4865			j = 0;
4866			while ( ( elem = tmp[ j++ ] ) ) {
4867				if ( rscriptType.test( elem.type || "" ) ) {
4868					scripts.push( elem );
4869				}
4870			}
4871		}
4872	}
4873
4874	return fragment;
4875}
4876
4877
4878( function() {
4879	var fragment = document.createDocumentFragment(),
4880		div = fragment.appendChild( document.createElement( "div" ) ),
4881		input = document.createElement( "input" );
4882
4883	// Support: Android 4.0 - 4.3 only
vendor: 6,890 bytes, lines 4884-5130
4884	// Check state lost if the name is set (#11217)
4885	// Support: Windows Web Apps (WWA)
4886	// `name` and `type` must use .setAttribute for WWA (#14901)
4887	input.setAttribute( "type", "radio" );
4888	input.setAttribute( "checked", "checked" );
4889	input.setAttribute( "name", "t" );
4890
4891	div.appendChild( input );
4892
4893	// Support: Android <=4.1 only
4894	// Older WebKit doesn't clone checked state correctly in fragments
4895	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
4896
4897	// Support: IE <=11 only
4898	// Make sure textarea (and checkbox) defaultValue is properly cloned
4899	div.innerHTML = "<textarea>x</textarea>";
4900	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
4901} )();
4902
4903
4904var
4905	rkeyEvent = /^key/,
4906	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
4907	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
4908
4909function returnTrue() {
4910	return true;
4911}
4912
4913function returnFalse() {
4914	return false;
4915}
4916
4917// Support: IE <=9 - 11+
4918// focus() and blur() are asynchronous, except when they are no-op.
4919// So expect focus to be synchronous when the element is already active,
4920// and blur to be synchronous when the element is not already active.
4921// (focus and blur are always synchronous in other supported browsers,
4922// this just defines when we can count on it).
4923function expectSync( elem, type ) {
4924	return ( elem === safeActiveElement() ) === ( type === "focus" );
4925}
4926
4927// Support: IE <=9 only
4928// Accessing document.activeElement can throw unexpectedly
4929// https://bugs.jquery.com/ticket/13393
4930function safeActiveElement() {
4931	try {
4932		return document.activeElement;
4933	} catch ( err ) { }
4934}
4935
4936function on( elem, types, selector, data, fn, one ) {
4937	var origFn, type;
4938
4939	// Types can be a map of types/handlers
4940	if ( typeof types === "object" ) {
4941
4942		// ( types-Object, selector, data )
4943		if ( typeof selector !== "string" ) {
4944
4945			// ( types-Object, data )
4946			data = data || selector;
4947			selector = undefined;
4948		}
4949		for ( type in types ) {
4950			on( elem, type, selector, data, types[ type ], one );
4951		}
4952		return elem;
4953	}
4954
4955	if ( data == null && fn == null ) {
4956
4957		// ( types, fn )
4958		fn = selector;
4959		data = selector = undefined;
4960	} else if ( fn == null ) {
4961		if ( typeof selector === "string" ) {
4962
4963			// ( types, selector, fn )
4964			fn = data;
4965			data = undefined;
4966		} else {
4967
4968			// ( types, data, fn )
4969			fn = data;
4970			data = selector;
4971			selector = undefined;
4972		}
4973	}
4974	if ( fn === false ) {
4975		fn = returnFalse;
4976	} else if ( !fn ) {
4977		return elem;
4978	}
4979
4980	if ( one === 1 ) {
4981		origFn = fn;
4982		fn = function( event ) {
4983
4984			// Can use an empty set, since event contains the info
4985			jQuery().off( event );
4986			return origFn.apply( this, arguments );
4987		};
4988
4989		// Use same guid so caller can remove using origFn
4990		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
4991	}
4992	return elem.each( function() {
4993		jQuery.event.add( this, types, fn, data, selector );
4994	} );
4995}
4996
4997/*
4998 * Helper functions for managing events -- not part of the public interface.
4999 * Props to Dean Edwards' addEvent library for many of the ideas.
5000 */
5001jQuery.event = {
5002
5003	global: {},
5004
5005	add: function( elem, types, handler, data, selector ) {
5006
5007		var handleObjIn, eventHandle, tmp,
5008			events, t, handleObj,
5009			special, handlers, type, namespaces, origType,
5010			elemData = dataPriv.get( elem );
5011
5012		// Don't attach events to noData or text/comment nodes (but allow plain objects)
5013		if ( !elemData ) {
5014			return;
5015		}
5016
5017		// Caller can pass in an object of custom data in lieu of the handler
5018		if ( handler.handler ) {
5019			handleObjIn = handler;
5020			handler = handleObjIn.handler;
5021			selector = handleObjIn.selector;
5022		}
5023
5024		// Ensure that invalid selectors throw exceptions at attach time
5025		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
5026		if ( selector ) {
5027			jQuery.find.matchesSelector( documentElement, selector );
5028		}
5029
5030		// Make sure that the handler has a unique ID, used to find/remove it later
5031		if ( !handler.guid ) {
5032			handler.guid = jQuery.guid++;
5033		}
5034
5035		// Init the element's event structure and main handler, if this is the first
5036		if ( !( events = elemData.events ) ) {
5037			events = elemData.events = {};
5038		}
5039		if ( !( eventHandle = elemData.handle ) ) {
5040			eventHandle = elemData.handle = function( e ) {
5041
5042				// Discard the second event of a jQuery.event.trigger() and
5043				// when an event is called after a page has unloaded
5044				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
5045					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
5046			};
5047		}
5048
5049		// Handle multiple events separated by a space
5050		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
5051		t = types.length;
5052		while ( t-- ) {
5053			tmp = rtypenamespace.exec( types[ t ] ) || [];
5054			type = origType = tmp[ 1 ];
5055			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
5056
5057			// There *must* be a type, no attaching namespace-only handlers
5058			if ( !type ) {
5059				continue;
5060			}
5061
5062			// If event changes its type, use the special event handlers for the changed type
5063			special = jQuery.event.special[ type ] || {};
5064
5065			// If selector defined, determine special event api type, otherwise given type
5066			type = ( selector ? special.delegateType : special.bindType ) || type;
5067
5068			// Update special based on newly reset type
5069			special = jQuery.event.special[ type ] || {};
5070
5071			// handleObj is passed to all event handlers
5072			handleObj = jQuery.extend( {
5073				type: type,
5074				origType: origType,
5075				data: data,
5076				handler: handler,
5077				guid: handler.guid,
5078				selector: selector,
5079				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
5080				namespace: namespaces.join( "." )
5081			}, handleObjIn );
5082
5083			// Init the event handler queue if we're the first
5084			if ( !( handlers = events[ type ] ) ) {
5085				handlers = events[ type ] = [];
5086				handlers.delegateCount = 0;
5087
5088				// Only use addEventListener if the special events handler returns false
5089				if ( !special.setup ||
5090					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
5091
5092					if ( elem.addEventListener ) {
5093						elem.addEventListener( type, eventHandle );
5094					}
5095				}
5096			}
5097
5098			if ( special.add ) {
5099				special.add.call( elem, handleObj );
5100
5101				if ( !handleObj.handler.guid ) {
5102					handleObj.handler.guid = handler.guid;
5103				}
5104			}
5105
5106			// Add to the element's handler list, delegates in front
5107			if ( selector ) {
5108				handlers.splice( handlers.delegateCount++, 0, handleObj );
5109			} else {
5110				handlers.push( handleObj );
5111			}
5112
5113			// Keep track of which events have ever been used, for event optimization
5114			jQuery.event.global[ type ] = true;
5115		}
5116
5117	},
5118
5119	// Detach an event or set of events from an element
5120	remove: function( elem, types, handler, selector, mappedTypes ) {
5121
5122		var j, origCount, tmp,
5123			events, t, handleObj,
5124			special, handlers, type, namespaces, origType,
5125			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
5126
5127		if ( !elemData || !( events = elemData.events ) ) {
5128			return;
5129		}
5130
vendor: 4,172 bytes, lines 5131-5266
5131		// Once for each type.namespace in types; type may be omitted
5132		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
5133		t = types.length;
5134		while ( t-- ) {
5135			tmp = rtypenamespace.exec( types[ t ] ) || [];
5136			type = origType = tmp[ 1 ];
5137			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
5138
5139			// Unbind all events (on this namespace, if provided) for the element
5140			if ( !type ) {
5141				for ( type in events ) {
5142					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
5143				}
5144				continue;
5145			}
5146
5147			special = jQuery.event.special[ type ] || {};
5148			type = ( selector ? special.delegateType : special.bindType ) || type;
5149			handlers = events[ type ] || [];
5150			tmp = tmp[ 2 ] &&
5151				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
5152
5153			// Remove matching events
5154			origCount = j = handlers.length;
5155			while ( j-- ) {
5156				handleObj = handlers[ j ];
5157
5158				if ( ( mappedTypes || origType === handleObj.origType ) &&
5159					( !handler || handler.guid === handleObj.guid ) &&
5160					( !tmp || tmp.test( handleObj.namespace ) ) &&
5161					( !selector || selector === handleObj.selector ||
5162						selector === "**" && handleObj.selector ) ) {
5163					handlers.splice( j, 1 );
5164
5165					if ( handleObj.selector ) {
5166						handlers.delegateCount--;
5167					}
5168					if ( special.remove ) {
5169						special.remove.call( elem, handleObj );
5170					}
5171				}
5172			}
5173
5174			// Remove generic event handler if we removed something and no more handlers exist
5175			// (avoids potential for endless recursion during removal of special event handlers)
5176			if ( origCount && !handlers.length ) {
5177				if ( !special.teardown ||
5178					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
5179
5180					jQuery.removeEvent( elem, type, elemData.handle );
5181				}
5182
5183				delete events[ type ];
5184			}
5185		}
5186
5187		// Remove data and the expando if it's no longer used
5188		if ( jQuery.isEmptyObject( events ) ) {
5189			dataPriv.remove( elem, "handle events" );
5190		}
5191	},
5192
5193	dispatch: function( nativeEvent ) {
5194
5195		// Make a writable jQuery.Event from the native event object
5196		var event = jQuery.event.fix( nativeEvent );
5197
5198		var i, j, ret, matched, handleObj, handlerQueue,
5199			args = new Array( arguments.length ),
5200			handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
5201			special = jQuery.event.special[ event.type ] || {};
5202
5203		// Use the fix-ed jQuery.Event rather than the (read-only) native event
5204		args[ 0 ] = event;
5205
5206		for ( i = 1; i < arguments.length; i++ ) {
5207			args[ i ] = arguments[ i ];
5208		}
5209
5210		event.delegateTarget = this;
5211
5212		// Call the preDispatch hook for the mapped type, and let it bail if desired
5213		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
5214			return;
5215		}
5216
5217		// Determine handlers
5218		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
5219
5220		// Run delegates first; they may want to stop propagation beneath us
5221		i = 0;
5222		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
5223			event.currentTarget = matched.elem;
5224
5225			j = 0;
5226			while ( ( handleObj = matched.handlers[ j++ ] ) &&
5227				!event.isImmediatePropagationStopped() ) {
5228
5229				// If the event is namespaced, then each handler is only invoked if it is
5230				// specially universal or its namespaces are a superset of the event's.
5231				if ( !event.rnamespace || handleObj.namespace === false ||
5232					event.rnamespace.test( handleObj.namespace ) ) {
5233
5234					event.handleObj = handleObj;
5235					event.data = handleObj.data;
5236
5237					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
5238						handleObj.handler ).apply( matched.elem, args );
5239
5240					if ( ret !== undefined ) {
5241						if ( ( event.result = ret ) === false ) {
5242							event.preventDefault();
5243							event.stopPropagation();
5244						}
5245					}
5246				}
5247			}
5248		}
5249
5250		// Call the postDispatch hook for the mapped type
5251		if ( special.postDispatch ) {
5252			special.postDispatch.call( this, event );
5253		}
5254
5255		return event.result;
5256	},
5257
5258	handlers: function( event, handlers ) {
5259		var i, handleObj, sel, matchedHandlers, matchedSelectors,
5260			handlerQueue = [],
5261			delegateCount = handlers.delegateCount,
5262			cur = event.target;
5263
5264		// Find delegate handlers
5265		if ( delegateCount &&
5266
vendor: 5,718 bytes, lines 5267-5452
5267			// Support: IE <=9
5268			// Black-hole SVG <use> instance trees (trac-13180)
5269			cur.nodeType &&
5270
5271			// Support: Firefox <=42
5272			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
5273			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
5274			// Support: IE 11 only
5275			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
5276			!( event.type === "click" && event.button >= 1 ) ) {
5277
5278			for ( ; cur !== this; cur = cur.parentNode || this ) {
5279
5280				// Don't check non-elements (#13208)
5281				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
5282				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
5283					matchedHandlers = [];
5284					matchedSelectors = {};
5285					for ( i = 0; i < delegateCount; i++ ) {
5286						handleObj = handlers[ i ];
5287
5288						// Don't conflict with Object.prototype properties (#13203)
5289						sel = handleObj.selector + " ";
5290
5291						if ( matchedSelectors[ sel ] === undefined ) {
5292							matchedSelectors[ sel ] = handleObj.needsContext ?
5293								jQuery( sel, this ).index( cur ) > -1 :
5294								jQuery.find( sel, this, null, [ cur ] ).length;
5295						}
5296						if ( matchedSelectors[ sel ] ) {
5297							matchedHandlers.push( handleObj );
5298						}
5299					}
5300					if ( matchedHandlers.length ) {
5301						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
5302					}
5303				}
5304			}
5305		}
5306
5307		// Add the remaining (directly-bound) handlers
5308		cur = this;
5309		if ( delegateCount < handlers.length ) {
5310			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
5311		}
5312
5313		return handlerQueue;
5314	},
5315
5316	addProp: function( name, hook ) {
5317		Object.defineProperty( jQuery.Event.prototype, name, {
5318			enumerable: true,
5319			configurable: true,
5320
5321			get: isFunction( hook ) ?
5322				function() {
5323					if ( this.originalEvent ) {
5324							return hook( this.originalEvent );
5325					}
5326				} :
5327				function() {
5328					if ( this.originalEvent ) {
5329							return this.originalEvent[ name ];
5330					}
5331				},
5332
5333			set: function( value ) {
5334				Object.defineProperty( this, name, {
5335					enumerable: true,
5336					configurable: true,
5337					writable: true,
5338					value: value
5339				} );
5340			}
5341		} );
5342	},
5343
5344	fix: function( originalEvent ) {
5345		return originalEvent[ jQuery.expando ] ?
5346			originalEvent :
5347			new jQuery.Event( originalEvent );
5348	},
5349
5350	special: {
5351		load: {
5352
5353			// Prevent triggered image.load events from bubbling to window.load
5354			noBubble: true
5355		},
5356		click: {
5357
5358			// Utilize native event to ensure correct state for checkable inputs
5359			setup: function( data ) {
5360
5361				// For mutual compressibility with _default, replace `this` access with a local var.
5362				// `|| data` is dead code meant only to preserve the variable through minification.
5363				var el = this || data;
5364
5365				// Claim the first handler
5366				if ( rcheckableType.test( el.type ) &&
5367					el.click && nodeName( el, "input" ) ) {
5368
5369					// dataPriv.set( el, "click", ... )
5370					leverageNative( el, "click", returnTrue );
5371				}
5372
5373				// Return false to allow normal processing in the caller
5374				return false;
5375			},
5376			trigger: function( data ) {
5377
5378				// For mutual compressibility with _default, replace `this` access with a local var.
5379				// `|| data` is dead code meant only to preserve the variable through minification.
5380				var el = this || data;
5381
5382				// Force setup before triggering a click
5383				if ( rcheckableType.test( el.type ) &&
5384					el.click && nodeName( el, "input" ) ) {
5385
5386					leverageNative( el, "click" );
5387				}
5388
5389				// Return non-false to allow normal event-path propagation
5390				return true;
5391			},
5392
5393			// For cross-browser consistency, suppress native .click() on links
5394			// Also prevent it if we're currently inside a leveraged native-event stack
5395			_default: function( event ) {
5396				var target = event.target;
5397				return rcheckableType.test( target.type ) &&
5398					target.click && nodeName( target, "input" ) &&
5399					dataPriv.get( target, "click" ) ||
5400					nodeName( target, "a" );
5401			}
5402		},
5403
5404		beforeunload: {
5405			postDispatch: function( event ) {
5406
5407				// Support: Firefox 20+
5408				// Firefox doesn't alert if the returnValue field is not set.
5409				if ( event.result !== undefined && event.originalEvent ) {
5410					event.originalEvent.returnValue = event.result;
5411				}
5412			}
5413		}
5414	}
5415};
5416
5417// Ensure the presence of an event listener that handles manually-triggered
5418// synthetic events by interrupting progress until reinvoked in response to
5419// *native* events that it fires directly, ensuring that state changes have
5420// already occurred before other listeners are invoked.
5421function leverageNative( el, type, expectSync ) {
5422
5423	// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
5424	if ( !expectSync ) {
5425		if ( dataPriv.get( el, type ) === undefined ) {
5426			jQuery.event.add( el, type, returnTrue );
5427		}
5428		return;
5429	}
5430
5431	// Register the controller as a special universal handler for all event namespaces
5432	dataPriv.set( el, type, false );
5433	jQuery.event.add( el, type, {
5434		namespace: false,
5435		handler: function( event ) {
5436			var notAsync, result,
5437				saved = dataPriv.get( this, type );
5438
5439			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
5440
5441				// Interrupt processing of the outer synthetic .trigger()ed event
5442				// Saved data should be false in such cases, but might be a leftover capture object
5443				// from an async native handler (gh-4350)
5444				if ( !saved.length ) {
5445
5446					// Store arguments for use when handling the inner native event
5447					// There will always be at least one argument (an event object), so this array
5448					// will not be confused with a leftover capture object.
5449					saved = slice.call( arguments );
5450					dataPriv.set( this, type, saved );
5451
5452					// Trigger the native event and capture its result
5453					// Support: IE <=9 - 11+
5454					// focus() and blur() are asynchronous
5455					notAsync = expectSync( this, type );
5456					this[ type ]();
5457					result = dataPriv.get( this, type );
5458					if ( saved !== result || notAsync ) {
5459						dataPriv.set( this, type, false );
5460					} else {
5461						result = {};
5462					}
5463					if ( saved !== result ) {
5464
5465						// Cancel the outer synthetic event
5466						event.stopImmediatePropagation();
5467						event.preventDefault();
5468						return result.value;
5469					}
5470
5471				// If this is an inner synthetic event for an event with a bubbling surrogate
5472				// (focus or blur), assume that the surrogate already propagated from triggering the
5473				// native event and prevent that from happening again here.
5474				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
5475				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
5476				// less bad than duplication.
5477				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
5478					event.stopPropagation();
5479				}
5480
5481			// If this is a native event triggered above, everything is now in order
5482			// Fire an inner synthetic event with the original arguments
5483			} else if ( saved.length ) {
5484
5485				// ...and capture the result
5486				dataPriv.set( this, type, {
5487					value: jQuery.event.trigger(
5488
5489						// Support: IE <=9 - 11+
5490						// Extend with the prototype to reset the above stopImmediatePropagation()
5491						jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
5492						saved.slice( 1 ),
5493						this
5494					)
5495				} );
5496
5497				// Abort handling of the native event
5498				event.stopImmediatePropagation();
5499			}
5500		}
5501	} );
5502}
5503
5504jQuery.removeEvent = function( elem, type, handle ) {
5505
5506	// This "if" is needed for plain objects
5507	if ( elem.removeEventListener ) {
5508		elem.removeEventListener( type, handle );
5509	}
5510};
5511
5512jQuery.Event = function( src, props ) {
5513
5514	// Allow instantiation without the 'new' keyword
5515	if ( !( this instanceof jQuery.Event ) ) {
5516		return new jQuery.Event( src, props );
5517	}
5518
5519	// Event object
5520	if ( src && src.type ) {
5521		this.originalEvent = src;
5522		this.type = src.type;
5523
5524		// Events bubbling up the document may have been marked as prevented
5525		// by a handler lower down the tree; reflect the correct value.
5526		this.isDefaultPrevented = src.defaultPrevented ||
5527				src.defaultPrevented === undefined &&
5528
5529				// Support: Android <=2.3 only
5530				src.returnValue === false ?
5531			returnTrue :
5532			returnFalse;
5533
5534		// Create target properties
5535		// Support: Safari <=6 - 7 only
5536		// Target should not be a text node (#504, #13143)
5537		this.target = ( src.target && src.target.nodeType === 3 ) ?
5538			src.target.parentNode :
5539			src.target;
5540
5541		this.currentTarget = src.currentTarget;
5542		this.relatedTarget = src.relatedTarget;
5543
5544	// Event type
5545	} else {
5546		this.type = src;
5547	}
5548
5549	// Put explicitly provided properties onto the event object
5550	if ( props ) {
5551		jQuery.extend( this, props );
5552	}
5553
5554	// Create a timestamp if incoming event doesn't have one
5555	this.timeStamp = src && src.timeStamp || Date.now();
5556
5557	// Mark it as fixed
5558	this[ jQuery.expando ] = true;
5559};
5560
5561// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
5562// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
5563jQuery.Event.prototype = {
5564	constructor: jQuery.Event,
5565	isDefaultPrevented: returnFalse,
5566	isPropagationStopped: returnFalse,
5567	isImmediatePropagationStopped: returnFalse,
5568	isSimulated: false,
5569
5570	preventDefault: function() {
5571		var e = this.originalEvent;
5572
5573		this.isDefaultPrevented = returnTrue;
5574
5575		if ( e && !this.isSimulated ) {
5576			e.preventDefault();
5577		}
5578	},
5579	stopPropagation: function() {
5580		var e = this.originalEvent;
5581
5582		this.isPropagationStopped = returnTrue;
5583
5584		if ( e && !this.isSimulated ) {
5585			e.stopPropagation();
5586		}
5587	},
5588	stopImmediatePropagation: function() {
5589		var e = this.originalEvent;
5590
5591		this.isImmediatePropagationStopped = returnTrue;
5592
5593		if ( e && !this.isSimulated ) {
5594			e.stopImmediatePropagation();
5595		}
5596
5597		this.stopPropagation();
5598	}
5599};
5600
5601// Includes all common event props including KeyEvent and MouseEvent specific props
5602jQuery.each( {
5603	altKey: true,
5604	bubbles: true,
5605	cancelable: true,
5606	changedTouches: true,
5607	ctrlKey: true,
5608	detail: true,
5609	eventPhase: true,
5610	metaKey: true,
5611	pageX: true,
5612	pageY: true,
5613	shiftKey: true,
5614	view: true,
5615	"char": true,
5616	code: true,
5617	charCode: true,
5618	key: true,
5619	keyCode: true,
5620	button: true,
5621	buttons: true,
5622	clientX: true,
5623	clientY: true,
5624	offsetX: true,
5625	offsetY: true,
5626	pointerId: true,
5627	pointerType: true,
5628	screenX: true,
5629	screenY: true,
5630	targetTouches: true,
5631	toElement: true,
5632	touches: true,
5633
5634	which: function( event ) {
5635		var button = event.button;
5636
5637		// Add which for key events
5638		if ( event.which == null && rkeyEvent.test( event.type ) ) {
5639			return event.charCode != null ? event.charCode : event.keyCode;
5640		}
5641
5642		// Add which for click: 1 === left; 2 === middle; 3 === right
5643		if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
5644			if ( button & 1 ) {
5645				return 1;
5646			}
5647
5648			if ( button & 2 ) {
5649				return 3;
5650			}
5651
5652			if ( button & 4 ) {
5653				return 2;
5654			}
5655
5656			return 0;
5657		}
5658
5659		return event.which;
5660	}
5661}, jQuery.event.addProp );
5662
5663jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
5664	jQuery.event.special[ type ] = {
5665
5666		// Utilize native event if possible so blur/focus sequence is correct
5667		setup: function() {
5668
5669			// Claim the first handler
5670			// dataPriv.set( this, "focus", ... )
5671			// dataPriv.set( this, "blur", ... )
5672			leverageNative( this, type, expectSync );
5673
5674			// Return false to allow normal processing in the caller
5675			return false;
vendor: 4,563 bytes, lines 5676-5852
5676		},
5677		trigger: function() {
5678
5679			// Force setup before trigger
5680			leverageNative( this, type );
5681
5682			// Return non-false to allow normal event-path propagation
5683			return true;
5684		},
5685
5686		delegateType: delegateType
5687	};
5688} );
5689
5690// Create mouseenter/leave events using mouseover/out and event-time checks
5691// so that event delegation works in jQuery.
5692// Do the same for pointerenter/pointerleave and pointerover/pointerout
5693//
5694// Support: Safari 7 only
5695// Safari sends mouseenter too often; see:
5696// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
5697// for the description of the bug (it existed in older Chrome versions as well).
5698jQuery.each( {
5699	mouseenter: "mouseover",
5700	mouseleave: "mouseout",
5701	pointerenter: "pointerover",
5702	pointerleave: "pointerout"
5703}, function( orig, fix ) {
5704	jQuery.event.special[ orig ] = {
5705		delegateType: fix,
5706		bindType: fix,
5707
5708		handle: function( event ) {
5709			var ret,
5710				target = this,
5711				related = event.relatedTarget,
5712				handleObj = event.handleObj;
5713
5714			// For mouseenter/leave call the handler if related is outside the target.
5715			// NB: No relatedTarget if the mouse left/entered the browser window
5716			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
5717				event.type = handleObj.origType;
5718				ret = handleObj.handler.apply( this, arguments );
5719				event.type = fix;
5720			}
5721			return ret;
5722		}
5723	};
5724} );
5725
5726jQuery.fn.extend( {
5727
5728	on: function( types, selector, data, fn ) {
5729		return on( this, types, selector, data, fn );
5730	},
5731	one: function( types, selector, data, fn ) {
5732		return on( this, types, selector, data, fn, 1 );
5733	},
5734	off: function( types, selector, fn ) {
5735		var handleObj, type;
5736		if ( types && types.preventDefault && types.handleObj ) {
5737
5738			// ( event )  dispatched jQuery.Event
5739			handleObj = types.handleObj;
5740			jQuery( types.delegateTarget ).off(
5741				handleObj.namespace ?
5742					handleObj.origType + "." + handleObj.namespace :
5743					handleObj.origType,
5744				handleObj.selector,
5745				handleObj.handler
5746			);
5747			return this;
5748		}
5749		if ( typeof types === "object" ) {
5750
5751			// ( types-object [, selector] )
5752			for ( type in types ) {
5753				this.off( type, selector, types[ type ] );
5754			}
5755			return this;
5756		}
5757		if ( selector === false || typeof selector === "function" ) {
5758
5759			// ( types [, fn] )
5760			fn = selector;
5761			selector = undefined;
5762		}
5763		if ( fn === false ) {
5764			fn = returnFalse;
5765		}
5766		return this.each( function() {
5767			jQuery.event.remove( this, types, fn, selector );
5768		} );
5769	}
5770} );
5771
5772
5773var
5774
5775	/* eslint-disable max-len */
5776
5777	// See https://github.com/eslint/eslint/issues/3229
5778	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
5779
5780	/* eslint-enable */
5781
5782	// Support: IE <=10 - 11, Edge 12 - 13 only
5783	// In IE/Edge using regex groups here causes severe slowdowns.
5784	// See https://connect.microsoft.com/IE/feedback/details/1736512/
5785	rnoInnerhtml = /<script|<style|<link/i,
5786
5787	// checked="checked" or checked
5788	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
5789	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
5790
5791// Prefer a tbody over its parent table for containing new rows
5792function manipulationTarget( elem, content ) {
5793	if ( nodeName( elem, "table" ) &&
5794		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
5795
5796		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
5797	}
5798
5799	return elem;
5800}
5801
5802// Replace/restore the type attribute of script elements for safe DOM manipulation
5803function disableScript( elem ) {
5804	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
5805	return elem;
5806}
5807function restoreScript( elem ) {
5808	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
5809		elem.type = elem.type.slice( 5 );
5810	} else {
5811		elem.removeAttribute( "type" );
5812	}
5813
5814	return elem;
5815}
5816
5817function cloneCopyEvent( src, dest ) {
5818	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
5819
5820	if ( dest.nodeType !== 1 ) {
5821		return;
5822	}
5823
5824	// 1. Copy private data: events, handlers, etc.
5825	if ( dataPriv.hasData( src ) ) {
5826		pdataOld = dataPriv.access( src );
5827		pdataCur = dataPriv.set( dest, pdataOld );
5828		events = pdataOld.events;
5829
5830		if ( events ) {
5831			delete pdataCur.handle;
5832			pdataCur.events = {};
5833
5834			for ( type in events ) {
5835				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
5836					jQuery.event.add( dest, type, events[ type ][ i ] );
5837				}
5838			}
5839		}
5840	}
5841
5842	// 2. Copy user data
5843	if ( dataUser.hasData( src ) ) {
5844		udataOld = dataUser.access( src );
5845		udataCur = jQuery.extend( {}, udataOld );
5846
5847		dataUser.set( dest, udataCur );
5848	}
5849}
5850
5851// Fix IE bugs, see support tests
5852function fixInput( src, dest ) {
vendor: 3,609 bytes, lines 5853-5980
5853	var nodeName = dest.nodeName.toLowerCase();
5854
5855	// Fails to persist the checked state of a cloned checkbox or radio button.
5856	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
5857		dest.checked = src.checked;
5858
5859	// Fails to return the selected option to the default selected state when cloning options
5860	} else if ( nodeName === "input" || nodeName === "textarea" ) {
5861		dest.defaultValue = src.defaultValue;
5862	}
5863}
5864
5865function domManip( collection, args, callback, ignored ) {
5866
5867	// Flatten any nested arrays
5868	args = concat.apply( [], args );
5869
5870	var fragment, first, scripts, hasScripts, node, doc,
5871		i = 0,
5872		l = collection.length,
5873		iNoClone = l - 1,
5874		value = args[ 0 ],
5875		valueIsFunction = isFunction( value );
5876
5877	// We can't cloneNode fragments that contain checked, in WebKit
5878	if ( valueIsFunction ||
5879			( l > 1 && typeof value === "string" &&
5880				!support.checkClone && rchecked.test( value ) ) ) {
5881		return collection.each( function( index ) {
5882			var self = collection.eq( index );
5883			if ( valueIsFunction ) {
5884				args[ 0 ] = value.call( this, index, self.html() );
5885			}
5886			domManip( self, args, callback, ignored );
5887		} );
5888	}
5889
5890	if ( l ) {
5891		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
5892		first = fragment.firstChild;
5893
5894		if ( fragment.childNodes.length === 1 ) {
5895			fragment = first;
5896		}
5897
5898		// Require either new content or an interest in ignored elements to invoke the callback
5899		if ( first || ignored ) {
5900			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
5901			hasScripts = scripts.length;
5902
5903			// Use the original fragment for the last item
5904			// instead of the first because it can end up
5905			// being emptied incorrectly in certain situations (#8070).
5906			for ( ; i < l; i++ ) {
5907				node = fragment;
5908
5909				if ( i !== iNoClone ) {
5910					node = jQuery.clone( node, true, true );
5911
5912					// Keep references to cloned scripts for later restoration
5913					if ( hasScripts ) {
5914
5915						// Support: Android <=4.0 only, PhantomJS 1 only
5916						// push.apply(_, arraylike) throws on ancient WebKit
5917						jQuery.merge( scripts, getAll( node, "script" ) );
5918					}
5919				}
5920
5921				callback.call( collection[ i ], node, i );
5922			}
5923
5924			if ( hasScripts ) {
5925				doc = scripts[ scripts.length - 1 ].ownerDocument;
5926
5927				// Reenable scripts
5928				jQuery.map( scripts, restoreScript );
5929
5930				// Evaluate executable scripts on first document insertion
5931				for ( i = 0; i < hasScripts; i++ ) {
5932					node = scripts[ i ];
5933					if ( rscriptType.test( node.type || "" ) &&
5934						!dataPriv.access( node, "globalEval" ) &&
5935						jQuery.contains( doc, node ) ) {
5936
5937						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
5938
5939							// Optional AJAX dependency, but won't run scripts if not present
5940							if ( jQuery._evalUrl && !node.noModule ) {
5941								jQuery._evalUrl( node.src, {
5942									nonce: node.nonce || node.getAttribute( "nonce" )
5943								} );
5944							}
5945						} else {
5946							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
5947						}
5948					}
5949				}
5950			}
5951		}
5952	}
5953
5954	return collection;
5955}
5956
5957function remove( elem, selector, keepData ) {
5958	var node,
5959		nodes = selector ? jQuery.filter( selector, elem ) : elem,
5960		i = 0;
5961
5962	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
5963		if ( !keepData && node.nodeType === 1 ) {
5964			jQuery.cleanData( getAll( node ) );
5965		}
5966
5967		if ( node.parentNode ) {
5968			if ( keepData && isAttached( node ) ) {
5969				setGlobalEval( getAll( node, "script" ) );
5970			}
5971			node.parentNode.removeChild( node );
5972		}
5973	}
5974
5975	return elem;
5976}
5977
5978jQuery.extend( {
5979	htmlPrefilter: function( html ) {
5980		return html.replace( rxhtmlTag, "<$1></$2>" )
vendor: 2,889 bytes, lines 5980-6089
5980;
5981	},
5982
5983	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
5984		var i, l, srcElements, destElements,
5985			clone = elem.cloneNode( true ),
5986			inPage = isAttached( elem );
5987
5988		// Fix IE cloning issues
5989		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
5990				!jQuery.isXMLDoc( elem ) ) {
5991
5992			// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
5993			destElements = getAll( clone );
5994			srcElements = getAll( elem );
5995
5996			for ( i = 0, l = srcElements.length; i < l; i++ ) {
5997				fixInput( srcElements[ i ], destElements[ i ] );
5998			}
5999		}
6000
6001		// Copy the events from the original to the clone
6002		if ( dataAndEvents ) {
6003			if ( deepDataAndEvents ) {
6004				srcElements = srcElements || getAll( elem );
6005				destElements = destElements || getAll( clone );
6006
6007				for ( i = 0, l = srcElements.length; i < l; i++ ) {
6008					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
6009				}
6010			} else {
6011				cloneCopyEvent( elem, clone );
6012			}
6013		}
6014
6015		// Preserve script evaluation history
6016		destElements = getAll( clone, "script" );
6017		if ( destElements.length > 0 ) {
6018			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
6019		}
6020
6021		// Return the cloned set
6022		return clone;
6023	},
6024
6025	cleanData: function( elems ) {
6026		var data, elem, type,
6027			special = jQuery.event.special,
6028			i = 0;
6029
6030		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
6031			if ( acceptData( elem ) ) {
6032				if ( ( data = elem[ dataPriv.expando ] ) ) {
6033					if ( data.events ) {
6034						for ( type in data.events ) {
6035							if ( special[ type ] ) {
6036								jQuery.event.remove( elem, type );
6037
6038							// This is a shortcut to avoid jQuery.event.remove's overhead
6039							} else {
6040								jQuery.removeEvent( elem, type, data.handle );
6041							}
6042						}
6043					}
6044
6045					// Support: Chrome <=35 - 45+
6046					// Assign undefined instead of using delete, see Data#remove
6047					elem[ dataPriv.expando ] = undefined;
6048				}
6049				if ( elem[ dataUser.expando ] ) {
6050
6051					// Support: Chrome <=35 - 45+
6052					// Assign undefined instead of using delete, see Data#remove
6053					elem[ dataUser.expando ] = undefined;
6054				}
6055			}
6056		}
6057	}
6058} );
6059
6060jQuery.fn.extend( {
6061	detach: function( selector ) {
6062		return remove( this, selector, true );
6063	},
6064
6065	remove: function( selector ) {
6066		return remove( this, selector );
6067	},
6068
6069	text: function( value ) {
6070		return access( this, function( value ) {
6071			return value === undefined ?
6072				jQuery.text( this ) :
6073				this.empty().each( function() {
6074					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
6075						this.textContent = value;
6076					}
6077				} );
6078		}, null, value, arguments.length );
6079	},
6080
6081	append: function() {
6082		return domManip( this, arguments, function( elem ) {
6083			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
6084				var target = manipulationTarget( this, elem );
6085				target.appendChild( elem );
6086			}
6087		} );
6088	},
6089
vendor: 5,129 bytes, lines 6090-6282
6090	prepend: function() {
6091		return domManip( this, arguments, function( elem ) {
6092			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
6093				var target = manipulationTarget( this, elem );
6094				target.insertBefore( elem, target.firstChild );
6095			}
6096		} );
6097	},
6098
6099	before: function() {
6100		return domManip( this, arguments, function( elem ) {
6101			if ( this.parentNode ) {
6102				this.parentNode.insertBefore( elem, this );
6103			}
6104		} );
6105	},
6106
6107	after: function() {
6108		return domManip( this, arguments, function( elem ) {
6109			if ( this.parentNode ) {
6110				this.parentNode.insertBefore( elem, this.nextSibling );
6111			}
6112		} );
6113	},
6114
6115	empty: function() {
6116		var elem,
6117			i = 0;
6118
6119		for ( ; ( elem = this[ i ] ) != null; i++ ) {
6120			if ( elem.nodeType === 1 ) {
6121
6122				// Prevent memory leaks
6123				jQuery.cleanData( getAll( elem, false ) );
6124
6125				// Remove any remaining nodes
6126				elem.textContent = "";
6127			}
6128		}
6129
6130		return this;
6131	},
6132
6133	clone: function( dataAndEvents, deepDataAndEvents ) {
6134		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
6135		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
6136
6137		return this.map( function() {
6138			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
6139		} );
6140	},
6141
6142	html: function( value ) {
6143		return access( this, function( value ) {
6144			var elem = this[ 0 ] || {},
6145				i = 0,
6146				l = this.length;
6147
6148			if ( value === undefined && elem.nodeType === 1 ) {
6149				return elem.innerHTML;
6150			}
6151
6152			// See if we can take a shortcut and just use innerHTML
6153			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
6154				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
6155
6156				value = jQuery.htmlPrefilter( value );
6157
6158				try {
6159					for ( ; i < l; i++ ) {
6160						elem = this[ i ] || {};
6161
6162						// Remove element nodes and prevent memory leaks
6163						if ( elem.nodeType === 1 ) {
6164							jQuery.cleanData( getAll( elem, false ) );
6165							elem.innerHTML = value;
6166						}
6167					}
6168
6169					elem = 0;
6170
6171				// If using innerHTML throws an exception, use the fallback method
6172				} catch ( e ) {}
6173			}
6174
6175			if ( elem ) {
6176				this.empty().append( value );
6177			}
6178		}, null, value, arguments.length );
6179	},
6180
6181	replaceWith: function() {
6182		var ignored = [];
6183
6184		// Make the changes, replacing each non-ignored context element with the new content
6185		return domManip( this, arguments, function( elem ) {
6186			var parent = this.parentNode;
6187
6188			if ( jQuery.inArray( this, ignored ) < 0 ) {
6189				jQuery.cleanData( getAll( this ) );
6190				if ( parent ) {
6191					parent.replaceChild( elem, this );
6192				}
6193			}
6194
6195		// Force callback invocation
6196		}, ignored );
6197	}
6198} );
6199
6200jQuery.each( {
6201	appendTo: "append",
6202	prependTo: "prepend",
6203	insertBefore: "before",
6204	insertAfter: "after",
6205	replaceAll: "replaceWith"
6206}, function( name, original ) {
6207	jQuery.fn[ name ] = function( selector ) {
6208		var elems,
6209			ret = [],
6210			insert = jQuery( selector ),
6211			last = insert.length - 1,
6212			i = 0;
6213
6214		for ( ; i <= last; i++ ) {
6215			elems = i === last ? this : this.clone( true );
6216			jQuery( insert[ i ] )[ original ]( elems );
6217
6218			// Support: Android <=4.0 only, PhantomJS 1 only
6219			// .get() because push.apply(_, arraylike) throws on ancient WebKit
6220			push.apply( ret, elems.get() );
6221		}
6222
6223		return this.pushStack( ret );
6224	};
6225} );
6226var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
6227
6228var getStyles = function( elem ) {
6229
6230		// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
6231		// IE throws on elements created in popups
6232		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
6233		var view = elem.ownerDocument.defaultView;
6234
6235		if ( !view || !view.opener ) {
6236			view = window;
6237		}
6238
6239		return view.getComputedStyle( elem );
6240	};
6241
6242var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
6243
6244
6245
6246( function() {
6247
6248	// Executing both pixelPosition & boxSizingReliable tests require only one layout
6249	// so they're executed at the same time to save the second computation.
6250	function computeStyleTests() {
6251
6252		// This is a singleton, we need to execute it only once
6253		if ( !div ) {
6254			return;
6255		}
6256
6257		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
6258			"margin-top:1px;padding:0;border:0";
6259		div.style.cssText =
6260			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
6261			"margin:auto;border:1px;padding:1px;" +
6262			"width:60%;top:1%";
6263		documentElement.appendChild( container ).appendChild( div );
6264
6265		var divStyle = window.getComputedStyle( div );
6266		pixelPositionVal = divStyle.top !== "1%";
6267
6268		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
6269		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
6270
6271		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
6272		// Some styles come back with percentage values, even though they shouldn't
6273		div.style.right = "60%";
6274		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
6275
6276		// Support: IE 9 - 11 only
6277		// Detect misreporting of content dimensions for box-sizing:border-box elements
6278		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
6279
6280		// Support: IE 9 only
6281		// Detect overflow:scroll screwiness (gh-3699)
6282		
vendor: 8,298 bytes, lines 6282-6572
6282// Support: Chrome <=64
6283		// Don't get tricked when zoom affects offsetWidth (gh-4029)
6284		div.style.position = "absolute";
6285		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
6286
6287		documentElement.removeChild( container );
6288
6289		// Nullify the div so it wouldn't be stored in the memory and
6290		// it will also be a sign that checks already performed
6291		div = null;
6292	}
6293
6294	function roundPixelMeasures( measure ) {
6295		return Math.round( parseFloat( measure ) );
6296	}
6297
6298	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
6299		reliableMarginLeftVal,
6300		container = document.createElement( "div" ),
6301		div = document.createElement( "div" );
6302
6303	// Finish early in limited (non-browser) environments
6304	if ( !div.style ) {
6305		return;
6306	}
6307
6308	// Support: IE <=9 - 11 only
6309	// Style of cloned element affects source element cloned (#8908)
6310	div.style.backgroundClip = "content-box";
6311	div.cloneNode( true ).style.backgroundClip = "";
6312	support.clearCloneStyle = div.style.backgroundClip === "content-box";
6313
6314	jQuery.extend( support, {
6315		boxSizingReliable: function() {
6316			computeStyleTests();
6317			return boxSizingReliableVal;
6318		},
6319		pixelBoxStyles: function() {
6320			computeStyleTests();
6321			return pixelBoxStylesVal;
6322		},
6323		pixelPosition: function() {
6324			computeStyleTests();
6325			return pixelPositionVal;
6326		},
6327		reliableMarginLeft: function() {
6328			computeStyleTests();
6329			return reliableMarginLeftVal;
6330		},
6331		scrollboxSize: function() {
6332			computeStyleTests();
6333			return scrollboxSizeVal;
6334		}
6335	} );
6336} )();
6337
6338
6339function curCSS( elem, name, computed ) {
6340	var width, minWidth, maxWidth, ret,
6341
6342		// Support: Firefox 51+
6343		// Retrieving style before computed somehow
6344		// fixes an issue with getting wrong values
6345		// on detached elements
6346		style = elem.style;
6347
6348	computed = computed || getStyles( elem );
6349
6350	// getPropertyValue is needed for:
6351	//   .css('filter') (IE 9 only, #12537)
6352	//   .css('--customProperty) (#3144)
6353	if ( computed ) {
6354		ret = computed.getPropertyValue( name ) || computed[ name ];
6355
6356		if ( ret === "" && !isAttached( elem ) ) {
6357			ret = jQuery.style( elem, name );
6358		}
6359
6360		// A tribute to the "awesome hack by Dean Edwards"
6361		// Android Browser returns percentage for some values,
6362		// but width seems to be reliably pixels.
6363		// This is against the CSSOM draft spec:
6364		// https://drafts.csswg.org/cssom/#resolved-values
6365		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
6366
6367			// Remember the original values
6368			width = style.width;
6369			minWidth = style.minWidth;
6370			maxWidth = style.maxWidth;
6371
6372			// Put in the new values to get a computed value out
6373			style.minWidth = style.maxWidth = style.width = ret;
6374			ret = computed.width;
6375
6376			// Revert the changed values
6377			style.width = width;
6378			style.minWidth = minWidth;
6379			style.maxWidth = maxWidth;
6380		}
6381	}
6382
6383	return ret !== undefined ?
6384
6385		// Support: IE <=9 - 11 only
6386		// IE returns zIndex value as an integer.
6387		ret + "" :
6388		ret;
6389}
6390
6391
6392function addGetHookIf( conditionFn, hookFn ) {
6393
6394	// Define the hook, we'll check on the first run if it's really needed.
6395	return {
6396		get: function() {
6397			if ( conditionFn() ) {
6398
6399				// Hook not needed (or it's not possible to use it due
6400				// to missing dependency), remove it.
6401				delete this.get;
6402				return;
6403			}
6404
6405			// Hook needed; redefine it so that the support test is not executed again.
6406			return ( this.get = hookFn ).apply( this, arguments );
6407		}
6408	};
6409}
6410
6411
6412var cssPrefixes = [ "Webkit", "Moz", "ms" ],
6413	emptyStyle = document.createElement( "div" ).style,
6414	vendorProps = {};
6415
6416// Return a vendor-prefixed property or undefined
6417function vendorPropName( name ) {
6418
6419	// Check for vendor prefixed names
6420	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
6421		i = cssPrefixes.length;
6422
6423	while ( i-- ) {
6424		name = cssPrefixes[ i ] + capName;
6425		if ( name in emptyStyle ) {
6426			return name;
6427		}
6428	}
6429}
6430
6431// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
6432function finalPropName( name ) {
6433	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
6434
6435	if ( final ) {
6436		return final;
6437	}
6438	if ( name in emptyStyle ) {
6439		return name;
6440	}
6441	return vendorProps[ name ] = vendorPropName( name ) || name;
6442}
6443
6444
6445var
6446
6447	// Swappable if display is none or starts with table
6448	// except "table", "table-cell", or "table-caption"
6449	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
6450	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
6451	rcustomProp = /^--/,
6452	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
6453	cssNormalTransform = {
6454		letterSpacing: "0",
6455		fontWeight: "400"
6456	};
6457
6458function setPositiveNumber( elem, value, subtract ) {
6459
6460	// Any relative (+/-) values have already been
6461	// normalized at this point
6462	var matches = rcssNum.exec( value );
6463	return matches ?
6464
6465		// Guard against undefined "subtract", e.g., when used as in cssHooks
6466		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
6467		value;
6468}
6469
6470function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
6471	var i = dimension === "width" ? 1 : 0,
6472		extra = 0,
6473		delta = 0;
6474
6475	// Adjustment may not be necessary
6476	if ( box === ( isBorderBox ? "border" : "content" ) ) {
6477		return 0;
6478	}
6479
6480	for ( ; i < 4; i += 2 ) {
6481
6482		// Both box models exclude margin
6483		if ( box === "margin" ) {
6484			delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
6485		}
6486
6487		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
6488		if ( !isBorderBox ) {
6489
6490			// Add padding
6491			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
6492
6493			// For "border" or "margin", add border
6494			if ( box !== "padding" ) {
6495				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
6496
6497			// But still keep track of it otherwise
6498			} else {
6499				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
6500			}
6501
6502		// If we get here with a border-box (content + padding + border), we're seeking "content" or
6503		// "padding" or "margin"
6504		} else {
6505
6506			// For "content", subtract padding
6507			if ( box === "content" ) {
6508				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
6509			}
6510
6511			// For "content" or "padding", subtract border
6512			if ( box !== "margin" ) {
6513				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
6514			}
6515		}
6516	}
6517
6518	// Account for positive content-box scroll gutter when requested by providing computedVal
6519	if ( !isBorderBox && computedVal >= 0 ) {
6520
6521		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
6522		// Assuming integer scroll gutter, subtract the rest and round down
6523		delta += Math.max( 0, Math.ceil(
6524			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
6525			computedVal -
6526			delta -
6527			extra -
6528			0.5
6529
6530		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
6531		// Use an explicit zero to avoid NaN (gh-3964)
6532		) ) || 0;
6533	}
6534
6535	return delta;
6536}
6537
6538function getWidthOrHeight( elem, dimension, extra ) {
6539
6540	// Start with computed style
6541	var styles = getStyles( elem ),
6542
6543		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
6544		// Fake content-box until we know it's needed to know the true value.
6545		boxSizingNeeded = !support.boxSizingReliable() || extra,
6546		isBorderBox = boxSizingNeeded &&
6547			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
6548		valueIsBorderBox = isBorderBox,
6549
6550		val = curCSS( elem, dimension, styles ),
6551		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
6552
6553	// Support: Firefox <=54
6554	// Return a confounding non-pixel value or feign ignorance, as appropriate.
6555	if ( rnumnonpx.test( val ) ) {
6556		if ( !extra ) {
6557			return val;
6558		}
6559		val = "auto";
6560	}
6561
6562
6563	// Fall back to offsetWidth/offsetHeight when value is "auto"
6564	// This happens for inline elements with no explicit setting (gh-3571)
6565	// Support: Android <=4.1 - 4.3 only
6566	// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
6567	// Support: IE 9-11 only
6568	// Also use offsetWidth/offsetHeight for when box sizing is unreliable
6569	// We use getClientRects() to check for hidden/disconnected.
6570	// In those cases, the computed value can be trusted to be border-box
6571	if ( ( !support.boxSizingReliable() && isBorderBox ||
6572		val === "auto" ||
vendor: 3,698 bytes, lines 6573-6703
6573		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
6574		elem.getClientRects().length ) {
6575
6576		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
6577
6578		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
6579		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
6580		// retrieved value as a content box dimension.
6581		valueIsBorderBox = offsetProp in elem;
6582		if ( valueIsBorderBox ) {
6583			val = elem[ offsetProp ];
6584		}
6585	}
6586
6587	// Normalize "" and auto
6588	val = parseFloat( val ) || 0;
6589
6590	// Adjust for the element's box model
6591	return ( val +
6592		boxModelAdjustment(
6593			elem,
6594			dimension,
6595			extra || ( isBorderBox ? "border" : "content" ),
6596			valueIsBorderBox,
6597			styles,
6598
6599			// Provide the current computed size to request scroll gutter calculation (gh-3589)
6600			val
6601		)
6602	) + "px";
6603}
6604
6605jQuery.extend( {
6606
6607	// Add in style property hooks for overriding the default
6608	// behavior of getting and setting a style property
6609	cssHooks: {
6610		opacity: {
6611			get: function( elem, computed ) {
6612				if ( computed ) {
6613
6614					// We should always get a number back from opacity
6615					var ret = curCSS( elem, "opacity" );
6616					return ret === "" ? "1" : ret;
6617				}
6618			}
6619		}
6620	},
6621
6622	// Don't automatically add "px" to these possibly-unitless properties
6623	cssNumber: {
6624		"animationIterationCount": true,
6625		"columnCount": true,
6626		"fillOpacity": true,
6627		"flexGrow": true,
6628		"flexShrink": true,
6629		"fontWeight": true,
6630		"gridArea": true,
6631		"gridColumn": true,
6632		"gridColumnEnd": true,
6633		"gridColumnStart": true,
6634		"gridRow": true,
6635		"gridRowEnd": true,
6636		"gridRowStart": true,
6637		"lineHeight": true,
6638		"opacity": true,
6639		"order": true,
6640		"orphans": true,
6641		"widows": true,
6642		"zIndex": true,
6643		"zoom": true
6644	},
6645
6646	// Add in properties whose names you wish to fix before
6647	// setting or getting the value
6648	cssProps: {},
6649
6650	// Get and set the style property on a DOM Node
6651	style: function( elem, name, value, extra ) {
6652
6653		// Don't set styles on text and comment nodes
6654		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
6655			return;
6656		}
6657
6658		// Make sure that we're working with the right name
6659		var ret, type, hooks,
6660			origName = camelCase( name ),
6661			isCustomProp = rcustomProp.test( name ),
6662			style = elem.style;
6663
6664		// Make sure that we're working with the right name. We don't
6665		// want to query the value if it is a CSS custom property
6666		// since they are user-defined.
6667		if ( !isCustomProp ) {
6668			name = finalPropName( origName );
6669		}
6670
6671		// Gets hook for the prefixed version, then unprefixed version
6672		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
6673
6674		// Check if we're setting a value
6675		if ( value !== undefined ) {
6676			type = typeof value;
6677
6678			// Convert "+=" or "-=" to relative numbers (#7345)
6679			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
6680				value = adjustCSS( elem, name, ret );
6681
6682				// Fixes bug #9237
6683				type = "number";
6684			}
6685
6686			// Make sure that null and NaN values aren't set (#7116)
6687			if ( value == null || value !== value ) {
6688				return;
6689			}
6690
6691			// If a number was passed in, add the unit (except for certain CSS properties)
6692			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
6693			// "px" to a few hardcoded values.
6694			if ( type === "number" && !isCustomProp ) {
6695				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
6696			}
6697
6698			// background-* props affect original clone's values
6699			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
6700				style[ name ] = "inherit";
6701			}
6702
6703			// If a hook was provided, use that value, otherwise just set the specified value
vendor: 7,976 bytes, lines 6704-6986
6704			if ( !hooks || !( "set" in hooks ) ||
6705				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
6706
6707				if ( isCustomProp ) {
6708					style.setProperty( name, value );
6709				} else {
6710					style[ name ] = value;
6711				}
6712			}
6713
6714		} else {
6715
6716			// If a hook was provided get the non-computed value from there
6717			if ( hooks && "get" in hooks &&
6718				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
6719
6720				return ret;
6721			}
6722
6723			// Otherwise just get the value from the style object
6724			return style[ name ];
6725		}
6726	},
6727
6728	css: function( elem, name, extra, styles ) {
6729		var val, num, hooks,
6730			origName = camelCase( name ),
6731			isCustomProp = rcustomProp.test( name );
6732
6733		// Make sure that we're working with the right name. We don't
6734		// want to modify the value if it is a CSS custom property
6735		// since they are user-defined.
6736		if ( !isCustomProp ) {
6737			name = finalPropName( origName );
6738		}
6739
6740		// Try prefixed name followed by the unprefixed name
6741		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
6742
6743		// If a hook was provided get the computed value from there
6744		if ( hooks && "get" in hooks ) {
6745			val = hooks.get( elem, true, extra );
6746		}
6747
6748		// Otherwise, if a way to get the computed value exists, use that
6749		if ( val === undefined ) {
6750			val = curCSS( elem, name, styles );
6751		}
6752
6753		// Convert "normal" to computed value
6754		if ( val === "normal" && name in cssNormalTransform ) {
6755			val = cssNormalTransform[ name ];
6756		}
6757
6758		// Make numeric if forced or a qualifier was provided and val looks numeric
6759		if ( extra === "" || extra ) {
6760			num = parseFloat( val );
6761			return extra === true || isFinite( num ) ? num || 0 : val;
6762		}
6763
6764		return val;
6765	}
6766} );
6767
6768jQuery.each( [ "height", "width" ], function( i, dimension ) {
6769	jQuery.cssHooks[ dimension ] = {
6770		get: function( elem, computed, extra ) {
6771			if ( computed ) {
6772
6773				// Certain elements can have dimension info if we invisibly show them
6774				// but it must have a current display style that would benefit
6775				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
6776
6777					// Support: Safari 8+
6778					// Table columns in Safari have non-zero offsetWidth & zero
6779					// getBoundingClientRect().width unless display is changed.
6780					// Support: IE <=11 only
6781					// Running getBoundingClientRect on a disconnected node
6782					// in IE throws an error.
6783					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
6784						swap( elem, cssShow, function() {
6785							return getWidthOrHeight( elem, dimension, extra );
6786						} ) :
6787						getWidthOrHeight( elem, dimension, extra );
6788			}
6789		},
6790
6791		set: function( elem, value, extra ) {
6792			var matches,
6793				styles = getStyles( elem ),
6794
6795				// Only read styles.position if the test has a chance to fail
6796				// to avoid forcing a reflow.
6797				scrollboxSizeBuggy = !support.scrollboxSize() &&
6798					styles.position === "absolute",
6799
6800				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
6801				boxSizingNeeded = scrollboxSizeBuggy || extra,
6802				isBorderBox = boxSizingNeeded &&
6803					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
6804				subtract = extra ?
6805					boxModelAdjustment(
6806						elem,
6807						dimension,
6808						extra,
6809						isBorderBox,
6810						styles
6811					) :
6812					0;
6813
6814			// Account for unreliable border-box dimensions by comparing offset* to computed and
6815			// faking a content-box to get border and padding (gh-3699)
6816			if ( isBorderBox && scrollboxSizeBuggy ) {
6817				subtract -= Math.ceil(
6818					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
6819					parseFloat( styles[ dimension ] ) -
6820					boxModelAdjustment( elem, dimension, "border", false, styles ) -
6821					0.5
6822				);
6823			}
6824
6825			// Convert to pixels if value adjustment is needed
6826			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
6827				( matches[ 3 ] || "px" ) !== "px" ) {
6828
6829				elem.style[ dimension ] = value;
6830				value = jQuery.css( elem, dimension );
6831			}
6832
6833			return setPositiveNumber( elem, value, subtract );
6834		}
6835	};
6836} );
6837
6838jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
6839	function( elem, computed ) {
6840		if ( computed ) {
6841			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
6842				elem.getBoundingClientRect().left -
6843					swap( elem, { marginLeft: 0 }, function() {
6844						return elem.getBoundingClientRect().left;
6845					} )
6846				) + "px";
6847		}
6848	}
6849);
6850
6851// These hooks are used by animate to expand properties
6852jQuery.each( {
6853	margin: "",
6854	padding: "",
6855	border: "Width"
6856}, function( prefix, suffix ) {
6857	jQuery.cssHooks[ prefix + suffix ] = {
6858		expand: function( value ) {
6859			var i = 0,
6860				expanded = {},
6861
6862				// Assumes a single number if not a string
6863				parts = typeof value === "string" ? value.split( " " ) : [ value ];
6864
6865			for ( ; i < 4; i++ ) {
6866				expanded[ prefix + cssExpand[ i ] + suffix ] =
6867					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
6868			}
6869
6870			return expanded;
6871		}
6872	};
6873
6874	if ( prefix !== "margin" ) {
6875		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
6876	}
6877} );
6878
6879jQuery.fn.extend( {
6880	css: function( name, value ) {
6881		return access( this, function( elem, name, value ) {
6882			var styles, len,
6883				map = {},
6884				i = 0;
6885
6886			if ( Array.isArray( name ) ) {
6887				styles = getStyles( elem );
6888				len = name.length;
6889
6890				for ( ; i < len; i++ ) {
6891					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
6892				}
6893
6894				return map;
6895			}
6896
6897			return value !== undefined ?
6898				jQuery.style( elem, name, value ) :
6899				jQuery.css( elem, name );
6900		}, name, value, arguments.length > 1 );
6901	}
6902} );
6903
6904
6905function Tween( elem, options, prop, end, easing ) {
6906	return new Tween.prototype.init( elem, options, prop, end, easing );
6907}
6908jQuery.Tween = Tween;
6909
6910Tween.prototype = {
6911	constructor: Tween,
6912	init: function( elem, options, prop, end, easing, unit ) {
6913		this.elem = elem;
6914		this.prop = prop;
6915		this.easing = easing || jQuery.easing._default;
6916		this.options = options;
6917		this.start = this.now = this.cur();
6918		this.end = end;
6919		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
6920	},
6921	cur: function() {
6922		var hooks = Tween.propHooks[ this.prop ];
6923
6924		return hooks && hooks.get ?
6925			hooks.get( this ) :
6926			Tween.propHooks._default.get( this );
6927	},
6928	run: function( percent ) {
6929		var eased,
6930			hooks = Tween.propHooks[ this.prop ];
6931
6932		if ( this.options.duration ) {
6933			this.pos = eased = jQuery.easing[ this.easing ](
6934				percent, this.options.duration * percent, 0, 1, this.options.duration
6935			);
6936		} else {
6937			this.pos = eased = percent;
6938		}
6939		this.now = ( this.end - this.start ) * eased + this.start;
6940
6941		if ( this.options.step ) {
6942			this.options.step.call( this.elem, this.now, this );
6943		}
6944
6945		if ( hooks && hooks.set ) {
6946			hooks.set( this );
6947		} else {
6948			Tween.propHooks._default.set( this );
6949		}
6950		return this;
6951	}
6952};
6953
6954Tween.prototype.init.prototype = Tween.prototype;
6955
6956Tween.propHooks = {
6957	_default: {
6958		get: function( tween ) {
6959			var result;
6960
6961			// Use a property on the element directly when it is not a DOM element,
6962			// or when there is no matching style property that exists.
6963			if ( tween.elem.nodeType !== 1 ||
6964				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
6965				return tween.elem[ tween.prop ];
6966			}
6967
6968			// Passing an empty string as a 3rd parameter to .css will automatically
6969			// attempt a parseFloat and fallback to a string if the parse fails.
6970			// Simple values such as "10px" are parsed to Float;
6971			// complex values such as "rotate(1rad)" are returned as-is.
6972			result = jQuery.css( tween.elem, tween.prop, "" );
6973
6974			// Empty strings, null, undefined and "auto" are converted to 0.
6975			return !result || result === "auto" ? 0 : result;
6976		},
6977		set: function( tween ) {
6978
6979			// Use step hook for back compat.
6980			// Use cssHook if its there.
6981			// Use .style if available and use plain properties where available.
6982			if ( jQuery.fx.step[ tween.prop ] ) {
6983				jQuery.fx.step[ tween.prop ]( tween );
6984			} else if ( tween.elem.nodeType === 1 && (
6985					jQuery.cssHooks[ tween.prop ] ||
6986					tween.elem.style[ finalPropName( tween.prop ) ] != null
vendor: 29,107 bytes, lines 6986-8183
6986 ) ) {
6987				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
6988			} else {
6989				tween.elem[ tween.prop ] = tween.now;
6990			}
6991		}
6992	}
6993};
6994
6995// Support: IE <=9 only
6996// Panic based approach to setting things on disconnected nodes
6997Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
6998	set: function( tween ) {
6999		if ( tween.elem.nodeType && tween.elem.parentNode ) {
7000			tween.elem[ tween.prop ] = tween.now;
7001		}
7002	}
7003};
7004
7005jQuery.easing = {
7006	linear: function( p ) {
7007		return p;
7008	},
7009	swing: function( p ) {
7010		return 0.5 - Math.cos( p * Math.PI ) / 2;
7011	},
7012	_default: "swing"
7013};
7014
7015jQuery.fx = Tween.prototype.init;
7016
7017// Back compat <1.8 extension point
7018jQuery.fx.step = {};
7019
7020
7021
7022
7023var
7024	fxNow, inProgress,
7025	rfxtypes = /^(?:toggle|show|hide)$/,
7026	rrun = /queueHooks$/;
7027
7028function schedule() {
7029	if ( inProgress ) {
7030		if ( document.hidden === false && window.requestAnimationFrame ) {
7031			window.requestAnimationFrame( schedule );
7032		} else {
7033			window.setTimeout( schedule, jQuery.fx.interval );
7034		}
7035
7036		jQuery.fx.tick();
7037	}
7038}
7039
7040// Animations created synchronously will run synchronously
7041function createFxNow() {
7042	window.setTimeout( function() {
7043		fxNow = undefined;
7044	} );
7045	return ( fxNow = Date.now() );
7046}
7047
7048// Generate parameters to create a standard animation
7049function genFx( type, includeWidth ) {
7050	var which,
7051		i = 0,
7052		attrs = { height: type };
7053
7054	// If we include width, step value is 1 to do all cssExpand values,
7055	// otherwise step value is 2 to skip over Left and Right
7056	includeWidth = includeWidth ? 1 : 0;
7057	for ( ; i < 4; i += 2 - includeWidth ) {
7058		which = cssExpand[ i ];
7059		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
7060	}
7061
7062	if ( includeWidth ) {
7063		attrs.opacity = attrs.width = type;
7064	}
7065
7066	return attrs;
7067}
7068
7069function createTween( value, prop, animation ) {
7070	var tween,
7071		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
7072		index = 0,
7073		length = collection.length;
7074	for ( ; index < length; index++ ) {
7075		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
7076
7077			// We're done with this property
7078			return tween;
7079		}
7080	}
7081}
7082
7083function defaultPrefilter( elem, props, opts ) {
7084	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
7085		isBox = "width" in props || "height" in props,
7086		anim = this,
7087		orig = {},
7088		style = elem.style,
7089		hidden = elem.nodeType && isHiddenWithinTree( elem ),
7090		dataShow = dataPriv.get( elem, "fxshow" );
7091
7092	// Queue-skipping animations hijack the fx hooks
7093	if ( !opts.queue ) {
7094		hooks = jQuery._queueHooks( elem, "fx" );
7095		if ( hooks.unqueued == null ) {
7096			hooks.unqueued = 0;
7097			oldfire = hooks.empty.fire;
7098			hooks.empty.fire = function() {
7099				if ( !hooks.unqueued ) {
7100					oldfire();
7101				}
7102			};
7103		}
7104		hooks.unqueued++;
7105
7106		anim.always( function() {
7107
7108			// Ensure the complete handler is called before this completes
7109			anim.always( function() {
7110				hooks.unqueued--;
7111				if ( !jQuery.queue( elem, "fx" ).length ) {
7112					hooks.empty.fire();
7113				}
7114			} );
7115		} );
7116	}
7117
7118	// Detect show/hide animations
7119	for ( prop in props ) {
7120		value = props[ prop ];
7121		if ( rfxtypes.test( value ) ) {
7122			delete props[ prop ];
7123			toggle = toggle || value === "toggle";
7124			if ( value === ( hidden ? "hide" : "show" ) ) {
7125
7126				// Pretend to be hidden if this is a "show" and
7127				// there is still data from a stopped show/hide
7128				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
7129					hidden = true;
7130
7131				// Ignore all other no-op show/hide data
7132				} else {
7133					continue;
7134				}
7135			}
7136			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
7137		}
7138	}
7139
7140	// Bail out if this is a no-op like .hide().hide()
7141	propTween = !jQuery.isEmptyObject( props );
7142	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
7143		return;
7144	}
7145
7146	// Restrict "overflow" and "display" styles during box animations
7147	if ( isBox && elem.nodeType === 1 ) {
7148
7149		// Support: IE <=9 - 11, Edge 12 - 15
7150		// Record all 3 overflow attributes because IE does not infer the shorthand
7151		// from identically-valued overflowX and overflowY and Edge just mirrors
7152		// the overflowX value there.
7153		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
7154
7155		// Identify a display type, preferring old show/hide data over the CSS cascade
7156		restoreDisplay = dataShow && dataShow.display;
7157		if ( restoreDisplay == null ) {
7158			restoreDisplay = dataPriv.get( elem, "display" );
7159		}
7160		display = jQuery.css( elem, "display" );
7161		if ( display === "none" ) {
7162			if ( restoreDisplay ) {
7163				display = restoreDisplay;
7164			} else {
7165
7166				// Get nonempty value(s) by temporarily forcing visibility
7167				showHide( [ elem ], true );
7168				restoreDisplay = elem.style.display || restoreDisplay;
7169				display = jQuery.css( elem, "display" );
7170				showHide( [ elem ] );
7171			}
7172		}
7173
7174		// Animate inline elements as inline-block
7175		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
7176			if ( jQuery.css( elem, "float" ) === "none" ) {
7177
7178				// Restore the original display value at the end of pure show/hide animations
7179				if ( !propTween ) {
7180					anim.done( function() {
7181						style.display = restoreDisplay;
7182					} );
7183					if ( restoreDisplay == null ) {
7184						display = style.display;
7185						restoreDisplay = display === "none" ? "" : display;
7186					}
7187				}
7188				style.display = "inline-block";
7189			}
7190		}
7191	}
7192
7193	if ( opts.overflow ) {
7194		style.overflow = "hidden";
7195		anim.always( function() {
7196			style.overflow = opts.overflow[ 0 ];
7197			style.overflowX = opts.overflow[ 1 ];
7198			style.overflowY = opts.overflow[ 2 ];
7199		} );
7200	}
7201
7202	// Implement show/hide animations
7203	propTween = false;
7204	for ( prop in orig ) {
7205
7206		// General show/hide setup for this element animation
7207		if ( !propTween ) {
7208			if ( dataShow ) {
7209				if ( "hidden" in dataShow ) {
7210					hidden = dataShow.hidden;
7211				}
7212			} else {
7213				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
7214			}
7215
7216			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
7217			if ( toggle ) {
7218				dataShow.hidden = !hidden;
7219			}
7220
7221			// Show elements before animating them
7222			if ( hidden ) {
7223				showHide( [ elem ], true );
7224			}
7225
7226			/* eslint-disable no-loop-func */
7227
7228			anim.done( function() {
7229
7230			/* eslint-enable no-loop-func */
7231
7232				// The final step of a "hide" animation is actually hiding the element
7233				if ( !hidden ) {
7234					showHide( [ elem ] );
7235				}
7236				dataPriv.remove( elem, "fxshow" );
7237				for ( prop in orig ) {
7238					jQuery.style( elem, prop, orig[ prop ] );
7239				}
7240			} );
7241		}
7242
7243		// Per-property setup
7244		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
7245		if ( !( prop in dataShow ) ) {
7246			dataShow[ prop ] = propTween.start;
7247			if ( hidden ) {
7248				propTween.end = propTween.start;
7249				propTween.start = 0;
7250			}
7251		}
7252	}
7253}
7254
7255function propFilter( props, specialEasing ) {
7256	var index, name, easing, value, hooks;
7257
7258	// camelCase, specialEasing and expand cssHook pass
7259	for ( index in props ) {
7260		name = camelCase( index );
7261		easing = specialEasing[ name ];
7262		value = props[ index ];
7263		if ( Array.isArray( value ) ) {
7264			easing = value[ 1 ];
7265			value = props[ index ] = value[ 0 ];
7266		}
7267
7268		if ( index !== name ) {
7269			props[ name ] = value;
7270			delete props[ index ];
7271		}
7272
7273		hooks = jQuery.cssHooks[ name ];
7274		if ( hooks && "expand" in hooks ) {
7275			value = hooks.expand( value );
7276			delete props[ name ];
7277
7278			// Not quite $.extend, this won't overwrite existing keys.
7279			// Reusing 'index' because we have the correct "name"
7280			for ( index in value ) {
7281				if ( !( index in props ) ) {
7282					props[ index ] = value[ index ];
7283					specialEasing[ index ] = easing;
7284				}
7285			}
7286		} else {
7287			specialEasing[ name ] = easing;
7288		}
7289	}
7290}
7291
7292function Animation( elem, properties, options ) {
7293	var result,
7294		stopped,
7295		index = 0,
7296		length = Animation.prefilters.length,
7297		deferred = jQuery.Deferred().always( function() {
7298
7299			// Don't match elem in the :animated selector
7300			delete tick.elem;
7301		} ),
7302		tick = function() {
7303			if ( stopped ) {
7304				return false;
7305			}
7306			var currentTime = fxNow || createFxNow(),
7307				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
7308
7309				// Support: Android 2.3 only
7310				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
7311				temp = remaining / animation.duration || 0,
7312				percent = 1 - temp,
7313				index = 0,
7314				length = animation.tweens.length;
7315
7316			for ( ; index < length; index++ ) {
7317				animation.tweens[ index ].run( percent );
7318			}
7319
7320			deferred.notifyWith( elem, [ animation, percent, remaining ] );
7321
7322			// If there's more to do, yield
7323			if ( percent < 1 && length ) {
7324				return remaining;
7325			}
7326
7327			// If this was an empty animation, synthesize a final progress notification
7328			if ( !length ) {
7329				deferred.notifyWith( elem, [ animation, 1, 0 ] );
7330			}
7331
7332			// Resolve the animation and report its conclusion
7333			deferred.resolveWith( elem, [ animation ] );
7334			return false;
7335		},
7336		animation = deferred.promise( {
7337			elem: elem,
7338			props: jQuery.extend( {}, properties ),
7339			opts: jQuery.extend( true, {
7340				specialEasing: {},
7341				easing: jQuery.easing._default
7342			}, options ),
7343			originalProperties: properties,
7344			originalOptions: options,
7345			startTime: fxNow || createFxNow(),
7346			duration: options.duration,
7347			tweens: [],
7348			createTween: function( prop, end ) {
7349				var tween = jQuery.Tween( elem, animation.opts, prop, end,
7350						animation.opts.specialEasing[ prop ] || animation.opts.easing );
7351				animation.tweens.push( tween );
7352				return tween;
7353			},
7354			stop: function( gotoEnd ) {
7355				var index = 0,
7356
7357					// If we are going to the end, we want to run all the tweens
7358					// otherwise we skip this part
7359					length = gotoEnd ? animation.tweens.length : 0;
7360				if ( stopped ) {
7361					return this;
7362				}
7363				stopped = true;
7364				for ( ; index < length; index++ ) {
7365					animation.tweens[ index ].run( 1 );
7366				}
7367
7368				// Resolve when we played the last frame; otherwise, reject
7369				if ( gotoEnd ) {
7370					deferred.notifyWith( elem, [ animation, 1, 0 ] );
7371					deferred.resolveWith( elem, [ animation, gotoEnd ] );
7372				} else {
7373					deferred.rejectWith( elem, [ animation, gotoEnd ] );
7374				}
7375				return this;
7376			}
7377		} ),
7378		props = animation.props;
7379
7380	propFilter( props, animation.opts.specialEasing );
7381
7382	for ( ; index < length; index++ ) {
7383		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
7384		if ( result ) {
7385			if ( isFunction( result.stop ) ) {
7386				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
7387					result.stop.bind( result );
7388			}
7389			return result;
7390		}
7391	}
7392
7393	jQuery.map( props, createTween, animation );
7394
7395	if ( isFunction( animation.opts.start ) ) {
7396		animation.opts.start.call( elem, animation );
7397	}
7398
7399	// Attach callbacks from options
7400	animation
7401		.progress( animation.opts.progress )
7402		.done( animation.opts.done, animation.opts.complete )
7403		.fail( animation.opts.fail )
7404		.always( animation.opts.always );
7405
7406	jQuery.fx.timer(
7407		jQuery.extend( tick, {
7408			elem: elem,
7409			anim: animation,
7410			queue: animation.opts.queue
7411		} )
7412	);
7413
7414	return animation;
7415}
7416
7417jQuery.Animation = jQuery.extend( Animation, {
7418
7419	tweeners: {
7420		"*": [ function( prop, value ) {
7421			var tween = this.createTween( prop, value );
7422			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
7423			return tween;
7424		} ]
7425	},
7426
7427	tweener: function( props, callback ) {
7428		if ( isFunction( props ) ) {
7429			callback = props;
7430			props = [ "*" ];
7431		} else {
7432			props = props.match( rnothtmlwhite );
7433		}
7434
7435		var prop,
7436			index = 0,
7437			length = props.length;
7438
7439		for ( ; index < length; index++ ) {
7440			prop = props[ index ];
7441			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
7442			Animation.tweeners[ prop ].unshift( callback );
7443		}
7444	},
7445
7446	prefilters: [ defaultPrefilter ],
7447
7448	prefilter: function( callback, prepend ) {
7449		if ( prepend ) {
7450			Animation.prefilters.unshift( callback );
7451		} else {
7452			Animation.prefilters.push( callback );
7453		}
7454	}
7455} );
7456
7457jQuery.speed = function( speed, easing, fn ) {
7458	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
7459		complete: fn || !fn && easing ||
7460			isFunction( speed ) && speed,
7461		duration: speed,
7462		easing: fn && easing || easing && !isFunction( easing ) && easing
7463	};
7464
7465	// Go to the end state if fx are off
7466	if ( jQuery.fx.off ) {
7467		opt.duration = 0;
7468
7469	} else {
7470		if ( typeof opt.duration !== "number" ) {
7471			if ( opt.duration in jQuery.fx.speeds ) {
7472				opt.duration = jQuery.fx.speeds[ opt.duration ];
7473
7474			} else {
7475				opt.duration = jQuery.fx.speeds._default;
7476			}
7477		}
7478	}
7479
7480	// Normalize opt.queue - true/undefined/null -> "fx"
7481	if ( opt.queue == null || opt.queue === true ) {
7482		opt.queue = "fx";
7483	}
7484
7485	// Queueing
7486	opt.old = opt.complete;
7487
7488	opt.complete = function() {
7489		if ( isFunction( opt.old ) ) {
7490			opt.old.call( this );
7491		}
7492
7493		if ( opt.queue ) {
7494			jQuery.dequeue( this, opt.queue );
7495		}
7496	};
7497
7498	return opt;
7499};
7500
7501jQuery.fn.extend( {
7502	fadeTo: function( speed, to, easing, callback ) {
7503
7504		// Show any hidden elements after setting opacity to 0
7505		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
7506
7507			// Animate to the value specified
7508			.end().animate( { opacity: to }, speed, easing, callback );
7509	},
7510	animate: function( prop, speed, easing, callback ) {
7511		var empty = jQuery.isEmptyObject( prop ),
7512			optall = jQuery.speed( speed, easing, callback ),
7513			doAnimation = function() {
7514
7515				// Operate on a copy of prop so per-property easing won't be lost
7516				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
7517
7518				// Empty animations, or finishing resolves immediately
7519				if ( empty || dataPriv.get( this, "finish" ) ) {
7520					anim.stop( true );
7521				}
7522			};
7523			doAnimation.finish = doAnimation;
7524
7525		return empty || optall.queue === false ?
7526			this.each( doAnimation ) :
7527			this.queue( optall.queue, doAnimation );
7528	},
7529	stop: function( type, clearQueue, gotoEnd ) {
7530		var stopQueue = function( hooks ) {
7531			var stop = hooks.stop;
7532			delete hooks.stop;
7533			stop( gotoEnd );
7534		};
7535
7536		if ( typeof type !== "string" ) {
7537			gotoEnd = clearQueue;
7538			clearQueue = type;
7539			type = undefined;
7540		}
7541		if ( clearQueue && type !== false ) {
7542			this.queue( type || "fx", [] );
7543		}
7544
7545		return this.each( function() {
7546			var dequeue = true,
7547				index = type != null && type + "queueHooks",
7548				timers = jQuery.timers,
7549				data = dataPriv.get( this );
7550
7551			if ( index ) {
7552				if ( data[ index ] && data[ index ].stop ) {
7553					stopQueue( data[ index ] );
7554				}
7555			} else {
7556				for ( index in data ) {
7557					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
7558						stopQueue( data[ index ] );
7559					}
7560				}
7561			}
7562
7563			for ( index = timers.length; index--; ) {
7564				if ( timers[ index ].elem === this &&
7565					( type == null || timers[ index ].queue === type ) ) {
7566
7567					timers[ index ].anim.stop( gotoEnd );
7568					dequeue = false;
7569					timers.splice( index, 1 );
7570				}
7571			}
7572
7573			// Start the next in the queue if the last step wasn't forced.
7574			// Timers currently will call their complete callbacks, which
7575			// will dequeue but only if they were gotoEnd.
7576			if ( dequeue || !gotoEnd ) {
7577				jQuery.dequeue( this, type );
7578			}
7579		} );
7580	},
7581	finish: function( type ) {
7582		if ( type !== false ) {
7583			type = type || "fx";
7584		}
7585		return this.each( function() {
7586			var index,
7587				data = dataPriv.get( this ),
7588				queue = data[ type + "queue" ],
7589				hooks = data[ type + "queueHooks" ],
7590				timers = jQuery.timers,
7591				length = queue ? queue.length : 0;
7592
7593			// Enable finishing flag on private data
7594			data.finish = true;
7595
7596			// Empty the queue first
7597			jQuery.queue( this, type, [] );
7598
7599			if ( hooks && hooks.stop ) {
7600				hooks.stop.call( this, true );
7601			}
7602
7603			// Look for any active animations, and finish them
7604			for ( index = timers.length; index--; ) {
7605				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
7606					timers[ index ].anim.stop( true );
7607					timers.splice( index, 1 );
7608				}
7609			}
7610
7611			// Look for any animations in the old queue and finish them
7612			for ( index = 0; index < length; index++ ) {
7613				if ( queue[ index ] && queue[ index ].finish ) {
7614					queue[ index ].finish.call( this );
7615				}
7616			}
7617
7618			// Turn off finishing flag
7619			delete data.finish;
7620		} );
7621	}
7622} );
7623
7624jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
7625	var cssFn = jQuery.fn[ name ];
7626	jQuery.fn[ name ] = function( speed, easing, callback ) {
7627		return speed == null || typeof speed === "boolean" ?
7628			cssFn.apply( this, arguments ) :
7629			this.animate( genFx( name, true ), speed, easing, callback );
7630	};
7631} );
7632
7633// Generate shortcuts for custom animations
7634jQuery.each( {
7635	slideDown: genFx( "show" ),
7636	slideUp: genFx( "hide" ),
7637	slideToggle: genFx( "toggle" ),
7638	fadeIn: { opacity: "show" },
7639	fadeOut: { opacity: "hide" },
7640	fadeToggle: { opacity: "toggle" }
7641}, function( name, props ) {
7642	jQuery.fn[ name ] = function( speed, easing, callback ) {
7643		return this.animate( props, speed, easing, callback );
7644	};
7645} );
7646
7647jQuery.timers = [];
7648jQuery.fx.tick = function() {
7649	var timer,
7650		i = 0,
7651		timers = jQuery.timers;
7652
7653	fxNow = Date.now();
7654
7655	for ( ; i < timers.length; i++ ) {
7656		timer = timers[ i ];
7657
7658		// Run the timer and safely remove it when done (allowing for external removal)
7659		if ( !timer() && timers[ i ] === timer ) {
7660			timers.splice( i--, 1 );
7661		}
7662	}
7663
7664	if ( !timers.length ) {
7665		jQuery.fx.stop();
7666	}
7667	fxNow = undefined;
7668};
7669
7670jQuery.fx.timer = function( timer ) {
7671	jQuery.timers.push( timer );
7672	jQuery.fx.start();
7673};
7674
7675jQuery.fx.interval = 13;
7676jQuery.fx.start = function() {
7677	if ( inProgress ) {
7678		return;
7679	}
7680
7681	inProgress = true;
7682	schedule();
7683};
7684
7685jQuery.fx.stop = function() {
7686	inProgress = null;
7687};
7688
7689jQuery.fx.speeds = {
7690	slow: 600,
7691	fast: 200,
7692
7693	// Default speed
7694	_default: 400
7695};
7696
7697
7698// Based off of the plugin by Clint Helfers, with permission.
7699// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
7700jQuery.fn.delay = function( time, type ) {
7701	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
7702	type = type || "fx";
7703
7704	return this.queue( type, function( next, hooks ) {
7705		var timeout = window.setTimeout( next, time );
7706		hooks.stop = function() {
7707			window.clearTimeout( timeout );
7708		};
7709	} );
7710};
7711
7712
7713( function() {
7714	var input = document.createElement( "input" ),
7715		select = document.createElement( "select" ),
7716		opt = select.appendChild( document.createElement( "option" ) );
7717
7718	input.type = "checkbox";
7719
7720	// Support: Android <=4.3 only
7721	// Default value for a checkbox should be "on"
7722	support.checkOn = input.value !== "";
7723
7724	// Support: IE <=11 only
7725	// Must access selectedIndex to make default options select
7726	support.optSelected = opt.selected;
7727
7728	// Support: IE <=11 only
7729	// An input loses its value after becoming a radio
7730	input = document.createElement( "input" );
7731	input.value = "t";
7732	input.type = "radio";
7733	support.radioValue = input.value === "t";
7734} )();
7735
7736
7737var boolHook,
7738	attrHandle = jQuery.expr.attrHandle;
7739
7740jQuery.fn.extend( {
7741	attr: function( name, value ) {
7742		return access( this, jQuery.attr, name, value, arguments.length > 1 );
7743	},
7744
7745	removeAttr: function( name ) {
7746		return this.each( function() {
7747			jQuery.removeAttr( this, name );
7748		} );
7749	}
7750} );
7751
7752jQuery.extend( {
7753	attr: function( elem, name, value ) {
7754		var ret, hooks,
7755			nType = elem.nodeType;
7756
7757		// Don't get/set attributes on text, comment and attribute nodes
7758		if ( nType === 3 || nType === 8 || nType === 2 ) {
7759			return;
7760		}
7761
7762		// Fallback to prop when attributes are not supported
7763		if ( typeof elem.getAttribute === "undefined" ) {
7764			return jQuery.prop( elem, name, value );
7765		}
7766
7767		// Attribute hooks are determined by the lowercase version
7768		// Grab necessary hook if one is defined
7769		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
7770			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
7771				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
7772		}
7773
7774		if ( value !== undefined ) {
7775			if ( value === null ) {
7776				jQuery.removeAttr( elem, name );
7777				return;
7778			}
7779
7780			if ( hooks && "set" in hooks &&
7781				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
7782				return ret;
7783			}
7784
7785			elem.setAttribute( name, value + "" );
7786			return value;
7787		}
7788
7789		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
7790			return ret;
7791		}
7792
7793		ret = jQuery.find.attr( elem, name );
7794
7795		// Non-existent attributes return null, we normalize to undefined
7796		return ret == null ? undefined : ret;
7797	},
7798
7799	attrHooks: {
7800		type: {
7801			set: function( elem, value ) {
7802				if ( !support.radioValue && value === "radio" &&
7803					nodeName( elem, "input" ) ) {
7804					var val = elem.value;
7805					elem.setAttribute( "type", value );
7806					if ( val ) {
7807						elem.value = val;
7808					}
7809					return value;
7810				}
7811			}
7812		}
7813	},
7814
7815	removeAttr: function( elem, value ) {
7816		var name,
7817			i = 0,
7818
7819			// Attribute names can contain non-HTML whitespace characters
7820			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
7821			attrNames = value && value.match( rnothtmlwhite );
7822
7823		if ( attrNames && elem.nodeType === 1 ) {
7824			while ( ( name = attrNames[ i++ ] ) ) {
7825				elem.removeAttribute( name );
7826			}
7827		}
7828	}
7829} );
7830
7831// Hooks for boolean attributes
7832boolHook = {
7833	set: function( elem, value, name ) {
7834		if ( value === false ) {
7835
7836			// Remove boolean attributes when set to false
7837			jQuery.removeAttr( elem, name );
7838		} else {
7839			elem.setAttribute( name, name );
7840		}
7841		return name;
7842	}
7843};
7844
7845jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
7846	var getter = attrHandle[ name ] || jQuery.find.attr;
7847
7848	attrHandle[ name ] = function( elem, name, isXML ) {
7849		var ret, handle,
7850			lowercaseName = name.toLowerCase();
7851
7852		if ( !isXML ) {
7853
7854			// Avoid an infinite loop by temporarily removing this function from the getter
7855			handle = attrHandle[ lowercaseName ];
7856			attrHandle[ lowercaseName ] = ret;
7857			ret = getter( elem, name, isXML ) != null ?
7858				lowercaseName :
7859				null;
7860			attrHandle[ lowercaseName ] = handle;
7861		}
7862		return ret;
7863	};
7864} );
7865
7866
7867
7868
7869var rfocusable = /^(?:input|select|textarea|button)$/i,
7870	rclickable = /^(?:a|area)$/i;
7871
7872jQuery.fn.extend( {
7873	prop: function( name, value ) {
7874		return access( this, jQuery.prop, name, value, arguments.length > 1 );
7875	},
7876
7877	removeProp: function( name ) {
7878		return this.each( function() {
7879			delete this[ jQuery.propFix[ name ] || name ];
7880		} );
7881	}
7882} );
7883
7884jQuery.extend( {
7885	prop: function( elem, name, value ) {
7886		var ret, hooks,
7887			nType = elem.nodeType;
7888
7889		// Don't get/set properties on text, comment and attribute nodes
7890		if ( nType === 3 || nType === 8 || nType === 2 ) {
7891			return;
7892		}
7893
7894		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
7895
7896			// Fix name and attach hooks
7897			name = jQuery.propFix[ name ] || name;
7898			hooks = jQuery.propHooks[ name ];
7899		}
7900
7901		if ( value !== undefined ) {
7902			if ( hooks && "set" in hooks &&
7903				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
7904				return ret;
7905			}
7906
7907			return ( elem[ name ] = value );
7908		}
7909
7910		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
7911			return ret;
7912		}
7913
7914		return elem[ name ];
7915	},
7916
7917	propHooks: {
7918		tabIndex: {
7919			get: function( elem ) {
7920
7921				// Support: IE <=9 - 11 only
7922				// elem.tabIndex doesn't always return the
7923				// correct value when it hasn't been explicitly set
7924				// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
7925				// Use proper attribute retrieval(#12072)
7926				var tabindex = jQuery.find.attr( elem, "tabindex" );
7927
7928				if ( tabindex ) {
7929					return parseInt( tabindex, 10 );
7930				}
7931
7932				if (
7933					rfocusable.test( elem.nodeName ) ||
7934					rclickable.test( elem.nodeName ) &&
7935					elem.href
7936				) {
7937					return 0;
7938				}
7939
7940				return -1;
7941			}
7942		}
7943	},
7944
7945	propFix: {
7946		"for": "htmlFor",
7947		"class": "className"
7948	}
7949} );
7950
7951// Support: IE <=11 only
7952// Accessing the selectedIndex property
7953// forces the browser to respect setting selected
7954// on the option
7955// The getter ensures a default option is selected
7956// when in an optgroup
7957// eslint rule "no-unused-expressions" is disabled for this code
7958// since it considers such accessions noop
7959if ( !support.optSelected ) {
7960	jQuery.propHooks.selected = {
7961		get: function( elem ) {
7962
7963			/* eslint no-unused-expressions: "off" */
7964
7965			var parent = elem.parentNode;
7966			if ( parent && parent.parentNode ) {
7967				parent.parentNode.selectedIndex;
7968			}
7969			return null;
7970		},
7971		set: function( elem ) {
7972
7973			/* eslint no-unused-expressions: "off" */
7974
7975			var parent = elem.parentNode;
7976			if ( parent ) {
7977				parent.selectedIndex;
7978
7979				if ( parent.parentNode ) {
7980					parent.parentNode.selectedIndex;
7981				}
7982			}
7983		}
7984	};
7985}
7986
7987jQuery.each( [
7988	"tabIndex",
7989	"readOnly",
7990	"maxLength",
7991	"cellSpacing",
7992	"cellPadding",
7993	"rowSpan",
7994	"colSpan",
7995	"useMap",
7996	"frameBorder",
7997	"contentEditable"
7998], function() {
7999	jQuery.propFix[ this.toLowerCase() ] = this;
8000} );
8001
8002
8003
8004
8005	// Strip and collapse whitespace according to HTML spec
8006	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
8007	function stripAndCollapse( value ) {
8008		var tokens = value.match( rnothtmlwhite ) || [];
8009		return tokens.join( " " );
8010	}
8011
8012
8013function getClass( elem ) {
8014	return elem.getAttribute && elem.getAttribute( "class" ) || "";
8015}
8016
8017function classesToArray( value ) {
8018	if ( Array.isArray( value ) ) {
8019		return value;
8020	}
8021	if ( typeof value === "string" ) {
8022		return value.match( rnothtmlwhite ) || [];
8023	}
8024	return [];
8025}
8026
8027jQuery.fn.extend( {
8028	addClass: function( value ) {
8029		var classes, elem, cur, curValue, clazz, j, finalValue,
8030			i = 0;
8031
8032		if ( isFunction( value ) ) {
8033			return this.each( function( j ) {
8034				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
8035			} );
8036		}
8037
8038		classes = classesToArray( value );
8039
8040		if ( classes.length ) {
8041			while ( ( elem = this[ i++ ] ) ) {
8042				curValue = getClass( elem );
8043				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8044
8045				if ( cur ) {
8046					j = 0;
8047					while ( ( clazz = classes[ j++ ] ) ) {
8048						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
8049							cur += clazz + " ";
8050						}
8051					}
8052
8053					// Only assign if different to avoid unneeded rendering.
8054					finalValue = stripAndCollapse( cur );
8055					if ( curValue !== finalValue ) {
8056						elem.setAttribute( "class", finalValue );
8057					}
8058				}
8059			}
8060		}
8061
8062		return this;
8063	},
8064
8065	removeClass: function( value ) {
8066		var classes, elem, cur, curValue, clazz, j, finalValue,
8067			i = 0;
8068
8069		if ( isFunction( value ) ) {
8070			return this.each( function( j ) {
8071				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
8072			} );
8073		}
8074
8075		if ( !arguments.length ) {
8076			return this.attr( "class", "" );
8077		}
8078
8079		classes = classesToArray( value );
8080
8081		if ( classes.length ) {
8082			while ( ( elem = this[ i++ ] ) ) {
8083				curValue = getClass( elem );
8084
8085				// This expression is here for better compressibility (see addClass)
8086				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
8087
8088				if ( cur ) {
8089					j = 0;
8090					while ( ( clazz = classes[ j++ ] ) ) {
8091
8092						// Remove *all* instances
8093						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
8094							cur = cur.replace( " " + clazz + " ", " " );
8095						}
8096					}
8097
8098					// Only assign if different to avoid unneeded rendering.
8099					finalValue = stripAndCollapse( cur );
8100					if ( curValue !== finalValue ) {
8101						elem.setAttribute( "class", finalValue );
8102					}
8103				}
8104			}
8105		}
8106
8107		return this;
8108	},
8109
8110	toggleClass: function( value, stateVal ) {
8111		var type = typeof value,
8112			isValidValue = type === "string" || Array.isArray( value );
8113
8114		if ( typeof stateVal === "boolean" && isValidValue ) {
8115			return stateVal ? this.addClass( value ) : this.removeClass( value );
8116		}
8117
8118		if ( isFunction( value ) ) {
8119			return this.each( function( i ) {
8120				jQuery( this ).toggleClass(
8121					value.call( this, i, getClass( this ), stateVal ),
8122					stateVal
8123				);
8124			} );
8125		}
8126
8127		return this.each( function() {
8128			var className, i, self, classNames;
8129
8130			if ( isValidValue ) {
8131
8132				// Toggle individual class names
8133				i = 0;
8134				self = jQuery( this );
8135				classNames = classesToArray( value );
8136
8137				while ( ( className = classNames[ i++ ] ) ) {
8138
8139					// Check each className given, space separated list
8140					if ( self.hasClass( className ) ) {
8141						self.removeClass( className );
8142					} else {
8143						self.addClass( className );
8144					}
8145				}
8146
8147			// Toggle whole class name
8148			} else if ( value === undefined || type === "boolean" ) {
8149				className = getClass( this );
8150				if ( className ) {
8151
8152					// Store className if set
8153					dataPriv.set( this, "__className__", className );
8154				}
8155
8156				// If the element has a class name or if we're passed `false`,
8157				// then remove the whole classname (if there was one, the above saved it).
8158				// Otherwise bring back whatever was previously saved (if anything),
8159				// falling back to the empty string if nothing was stored.
8160				if ( this.setAttribute ) {
8161					this.setAttribute( "class",
8162						className || value === false ?
8163						"" :
8164						dataPriv.get( this, "__className__" ) || ""
8165					);
8166				}
8167			}
8168		} );
8169	},
8170
8171	hasClass: function( selector ) {
8172		var className, elem,
8173			i = 0;
8174
8175		className = " " + selector + " ";
8176		while ( ( elem = this[ i++ ] ) ) {
8177			if ( elem.nodeType === 1 &&
8178				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
8179					return true;
8180			}
8181		}
8182
8183		return false;
vendor: 5,544 bytes, lines 8184-8419
8184	}
8185} );
8186
8187
8188
8189
8190var rreturn = /\r/g;
8191
8192jQuery.fn.extend( {
8193	val: function( value ) {
8194		var hooks, ret, valueIsFunction,
8195			elem = this[ 0 ];
8196
8197		if ( !arguments.length ) {
8198			if ( elem ) {
8199				hooks = jQuery.valHooks[ elem.type ] ||
8200					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
8201
8202				if ( hooks &&
8203					"get" in hooks &&
8204					( ret = hooks.get( elem, "value" ) ) !== undefined
8205				) {
8206					return ret;
8207				}
8208
8209				ret = elem.value;
8210
8211				// Handle most common string cases
8212				if ( typeof ret === "string" ) {
8213					return ret.replace( rreturn, "" );
8214				}
8215
8216				// Handle cases where value is null/undef or number
8217				return ret == null ? "" : ret;
8218			}
8219
8220			return;
8221		}
8222
8223		valueIsFunction = isFunction( value );
8224
8225		return this.each( function( i ) {
8226			var val;
8227
8228			if ( this.nodeType !== 1 ) {
8229				return;
8230			}
8231
8232			if ( valueIsFunction ) {
8233				val = value.call( this, i, jQuery( this ).val() );
8234			} else {
8235				val = value;
8236			}
8237
8238			// Treat null/undefined as ""; convert numbers to string
8239			if ( val == null ) {
8240				val = "";
8241
8242			} else if ( typeof val === "number" ) {
8243				val += "";
8244
8245			} else if ( Array.isArray( val ) ) {
8246				val = jQuery.map( val, function( value ) {
8247					return value == null ? "" : value + "";
8248				} );
8249			}
8250
8251			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
8252
8253			// If set returns undefined, fall back to normal setting
8254			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
8255				this.value = val;
8256			}
8257		} );
8258	}
8259} );
8260
8261jQuery.extend( {
8262	valHooks: {
8263		option: {
8264			get: function( elem ) {
8265
8266				var val = jQuery.find.attr( elem, "value" );
8267				return val != null ?
8268					val :
8269
8270					// Support: IE <=10 - 11 only
8271					// option.text throws exceptions (#14686, #14858)
8272					// Strip and collapse whitespace
8273					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
8274					stripAndCollapse( jQuery.text( elem ) );
8275			}
8276		},
8277		select: {
8278			get: function( elem ) {
8279				var value, option, i,
8280					options = elem.options,
8281					index = elem.selectedIndex,
8282					one = elem.type === "select-one",
8283					values = one ? null : [],
8284					max = one ? index + 1 : options.length;
8285
8286				if ( index < 0 ) {
8287					i = max;
8288
8289				} else {
8290					i = one ? index : 0;
8291				}
8292
8293				// Loop through all the selected options
8294				for ( ; i < max; i++ ) {
8295					option = options[ i ];
8296
8297					// Support: IE <=9 only
8298					// IE8-9 doesn't update selected after form reset (#2551)
8299					if ( ( option.selected || i === index ) &&
8300
8301							// Don't return options that are disabled or in a disabled optgroup
8302							!option.disabled &&
8303							( !option.parentNode.disabled ||
8304								!nodeName( option.parentNode, "optgroup" ) ) ) {
8305
8306						// Get the specific value for the option
8307						value = jQuery( option ).val();
8308
8309						// We don't need an array for one selects
8310						if ( one ) {
8311							return value;
8312						}
8313
8314						// Multi-Selects return an array
8315						values.push( value );
8316					}
8317				}
8318
8319				return values;
8320			},
8321
8322			set: function( elem, value ) {
8323				var optionSet, option,
8324					options = elem.options,
8325					values = jQuery.makeArray( value ),
8326					i = options.length;
8327
8328				while ( i-- ) {
8329					option = options[ i ];
8330
8331					/* eslint-disable no-cond-assign */
8332
8333					if ( option.selected =
8334						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
8335					) {
8336						optionSet = true;
8337					}
8338
8339					/* eslint-enable no-cond-assign */
8340				}
8341
8342				// Force browsers to behave consistently when non-matching value is set
8343				if ( !optionSet ) {
8344					elem.selectedIndex = -1;
8345				}
8346				return values;
8347			}
8348		}
8349	}
8350} );
8351
8352// Radios and checkboxes getter/setter
8353jQuery.each( [ "radio", "checkbox" ], function() {
8354	jQuery.valHooks[ this ] = {
8355		set: function( elem, value ) {
8356			if ( Array.isArray( value ) ) {
8357				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
8358			}
8359		}
8360	};
8361	if ( !support.checkOn ) {
8362		jQuery.valHooks[ this ].get = function( elem ) {
8363			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
8364		};
8365	}
8366} );
8367
8368
8369
8370
8371// Return jQuery for attributes-only inclusion
8372
8373
8374support.focusin = "onfocusin" in window;
8375
8376
8377var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
8378	stopPropagationCallback = function( e ) {
8379		e.stopPropagation();
8380	};
8381
8382jQuery.extend( jQuery.event, {
8383
8384	trigger: function( event, data, elem, onlyHandlers ) {
8385
8386		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
8387			eventPath = [ elem || document ],
8388			type = hasOwn.call( event, "type" ) ? event.type : event,
8389			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
8390
8391		cur = lastElement = tmp = elem = elem || document;
8392
8393		// Don't do events on text and comment nodes
8394		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
8395			return;
8396		}
8397
8398		// focus/blur morphs to focusin/out; ensure we're not firing them right now
8399		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
8400			return;
8401		}
8402
8403		if ( type.indexOf( "." ) > -1 ) {
8404
8405			// Namespaced trigger; create a regexp to match event type in handle()
8406			namespaces = type.split( "." );
8407			type = namespaces.shift();
8408			namespaces.sort();
8409		}
8410		ontype = type.indexOf( ":" ) < 0 && "on" + type;
8411
8412		// Caller can pass in a jQuery.Event object, Object, or just an event type string
8413		event = event[ jQuery.expando ] ?
8414			event :
8415			new jQuery.Event( type, typeof event === "object" && event );
8416
8417		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
8418		event.isTrigger = onlyHandlers ? 2 : 3;
8419		event.namespace = namespaces.join( "." );
vendor: 7,012 bytes, lines 8420-8693
8420		event.rnamespace = event.namespace ?
8421			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
8422			null;
8423
8424		// Clean up the event in case it is being reused
8425		event.result = undefined;
8426		if ( !event.target ) {
8427			event.target = elem;
8428		}
8429
8430		// Clone any incoming data and prepend the event, creating the handler arg list
8431		data = data == null ?
8432			[ event ] :
8433			jQuery.makeArray( data, [ event ] );
8434
8435		// Allow special events to draw outside the lines
8436		special = jQuery.event.special[ type ] || {};
8437		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
8438			return;
8439		}
8440
8441		// Determine event propagation path in advance, per W3C events spec (#9951)
8442		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
8443		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
8444
8445			bubbleType = special.delegateType || type;
8446			if ( !rfocusMorph.test( bubbleType + type ) ) {
8447				cur = cur.parentNode;
8448			}
8449			for ( ; cur; cur = cur.parentNode ) {
8450				eventPath.push( cur );
8451				tmp = cur;
8452			}
8453
8454			// Only add window if we got to document (e.g., not plain obj or detached DOM)
8455			if ( tmp === ( elem.ownerDocument || document ) ) {
8456				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
8457			}
8458		}
8459
8460		// Fire handlers on the event path
8461		i = 0;
8462		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
8463			lastElement = cur;
8464			event.type = i > 1 ?
8465				bubbleType :
8466				special.bindType || type;
8467
8468			// jQuery handler
8469			handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
8470				dataPriv.get( cur, "handle" );
8471			if ( handle ) {
8472				handle.apply( cur, data );
8473			}
8474
8475			// Native handler
8476			handle = ontype && cur[ ontype ];
8477			if ( handle && handle.apply && acceptData( cur ) ) {
8478				event.result = handle.apply( cur, data );
8479				if ( event.result === false ) {
8480					event.preventDefault();
8481				}
8482			}
8483		}
8484		event.type = type;
8485
8486		// If nobody prevented the default action, do it now
8487		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
8488
8489			if ( ( !special._default ||
8490				special._default.apply( eventPath.pop(), data ) === false ) &&
8491				acceptData( elem ) ) {
8492
8493				// Call a native DOM method on the target with the same name as the event.
8494				// Don't do default actions on window, that's where global variables be (#6170)
8495				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
8496
8497					// Don't re-trigger an onFOO event when we call its FOO() method
8498					tmp = elem[ ontype ];
8499
8500					if ( tmp ) {
8501						elem[ ontype ] = null;
8502					}
8503
8504					// Prevent re-triggering of the same event, since we already bubbled it above
8505					jQuery.event.triggered = type;
8506
8507					if ( event.isPropagationStopped() ) {
8508						lastElement.addEventListener( type, stopPropagationCallback );
8509					}
8510
8511					elem[ type ]();
8512
8513					if ( event.isPropagationStopped() ) {
8514						lastElement.removeEventListener( type, stopPropagationCallback );
8515					}
8516
8517					jQuery.event.triggered = undefined;
8518
8519					if ( tmp ) {
8520						elem[ ontype ] = tmp;
8521					}
8522				}
8523			}
8524		}
8525
8526		return event.result;
8527	},
8528
8529	// Piggyback on a donor event to simulate a different one
8530	// Used only for `focus(in | out)` events
8531	simulate: function( type, elem, event ) {
8532		var e = jQuery.extend(
8533			new jQuery.Event(),
8534			event,
8535			{
8536				type: type,
8537				isSimulated: true
8538			}
8539		);
8540
8541		jQuery.event.trigger( e, null, elem );
8542	}
8543
8544} );
8545
8546jQuery.fn.extend( {
8547
8548	trigger: function( type, data ) {
8549		return this.each( function() {
8550			jQuery.event.trigger( type, data, this );
8551		} );
8552	},
8553	triggerHandler: function( type, data ) {
8554		var elem = this[ 0 ];
8555		if ( elem ) {
8556			return jQuery.event.trigger( type, data, elem, true );
8557		}
8558	}
8559} );
8560
8561
8562// Support: Firefox <=44
8563// Firefox doesn't have focus(in | out) events
8564// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
8565//
8566// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
8567// focus(in | out) events fire after focus & blur events,
8568// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
8569// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
8570if ( !support.focusin ) {
8571	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
8572
8573		// Attach a single capturing handler on the document while someone wants focusin/focusout
8574		var handler = function( event ) {
8575			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
8576		};
8577
8578		jQuery.event.special[ fix ] = {
8579			setup: function() {
8580				var doc = this.ownerDocument || this,
8581					attaches = dataPriv.access( doc, fix );
8582
8583				if ( !attaches ) {
8584					doc.addEventListener( orig, handler, true );
8585				}
8586				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
8587			},
8588			teardown: function() {
8589				var doc = this.ownerDocument || this,
8590					attaches = dataPriv.access( doc, fix ) - 1;
8591
8592				if ( !attaches ) {
8593					doc.removeEventListener( orig, handler, true );
8594					dataPriv.remove( doc, fix );
8595
8596				} else {
8597					dataPriv.access( doc, fix, attaches );
8598				}
8599			}
8600		};
8601	} );
8602}
8603var location = window.location;
8604
8605var nonce = Date.now();
8606
8607var rquery = ( /\?/ );
8608
8609
8610
8611// Cross-browser xml parsing
8612jQuery.parseXML = function( data ) {
8613	var xml;
8614	if ( !data || typeof data !== "string" ) {
8615		return null;
8616	}
8617
8618	// Support: IE 9 - 11 only
8619	// IE throws on parseFromString with invalid input.
8620	try {
8621		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
8622	} catch ( e ) {
8623		xml = undefined;
8624	}
8625
8626	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
8627		jQuery.error( "Invalid XML: " + data );
8628	}
8629	return xml;
8630};
8631
8632
8633var
8634	rbracket = /\[\]$/,
8635	rCRLF = /\r?\n/g,
8636	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
8637	rsubmittable = /^(?:input|select|textarea|keygen)/i;
8638
8639function buildParams( prefix, obj, traditional, add ) {
8640	var name;
8641
8642	if ( Array.isArray( obj ) ) {
8643
8644		// Serialize array item.
8645		jQuery.each( obj, function( i, v ) {
8646			if ( traditional || rbracket.test( prefix ) ) {
8647
8648				// Treat each array item as a scalar.
8649				add( prefix, v );
8650
8651			} else {
8652
8653				// Item is non-scalar (array or object), encode its numeric index.
8654				buildParams(
8655					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
8656					v,
8657					traditional,
8658					add
8659				);
8660			}
8661		} );
8662
8663	} else if ( !traditional && toType( obj ) === "object" ) {
8664
8665		// Serialize object item.
8666		for ( name in obj ) {
8667			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
8668		}
8669
8670	} else {
8671
8672		// Serialize scalar item.
8673		add( prefix, obj );
8674	}
8675}
8676
8677// Serialize an array of form elements or a set of
8678// key/values into a query string
8679jQuery.param = function( a, traditional ) {
8680	var prefix,
8681		s = [],
8682		add = function( key, valueOrFunction ) {
8683
8684			// If value is a function, invoke it and use its return value
8685			var value = isFunction( valueOrFunction ) ?
8686				valueOrFunction() :
8687				valueOrFunction;
8688
8689			s[ s.length ] = encodeURIComponent( key ) + "=" +
8690				encodeURIComponent( value == null ? "" : value );
8691		};
8692
8693	
8693if ( a == null ) {
8694		return "";
8695	}
vendor: 12,730 bytes, lines 8695-9199
8695
8696
8697	// If an array was passed in, assume that it is an array of form elements.
8698	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
8699
8700		// Serialize the form elements
8701		jQuery.each( a, function() {
8702			add( this.name, this.value );
8703		} );
8704
8705	} else {
8706
8707		// If traditional, encode the "old" way (the way 1.3.2 or older
8708		// did it), otherwise encode params recursively.
8709		for ( prefix in a ) {
8710			buildParams( prefix, a[ prefix ], traditional, add );
8711		}
8712	}
8713
8714	// Return the resulting serialization
8715	return s.join( "&" );
8716};
8717
8718jQuery.fn.extend( {
8719	serialize: function() {
8720		return jQuery.param( this.serializeArray() );
8721	},
8722	serializeArray: function() {
8723		return this.map( function() {
8724
8725			// Can add propHook for "elements" to filter or add form elements
8726			var elements = jQuery.prop( this, "elements" );
8727			return elements ? jQuery.makeArray( elements ) : this;
8728		} )
8729		.filter( function() {
8730			var type = this.type;
8731
8732			// Use .is( ":disabled" ) so that fieldset[disabled] works
8733			return this.name && !jQuery( this ).is( ":disabled" ) &&
8734				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
8735				( this.checked || !rcheckableType.test( type ) );
8736		} )
8737		.map( function( i, elem ) {
8738			var val = jQuery( this ).val();
8739
8740			if ( val == null ) {
8741				return null;
8742			}
8743
8744			if ( Array.isArray( val ) ) {
8745				return jQuery.map( val, function( val ) {
8746					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
8747				} );
8748			}
8749
8750			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
8751		} ).get();
8752	}
8753} );
8754
8755
8756var
8757	r20 = /%20/g,
8758	rhash = /#.*$/,
8759	rantiCache = /([?&])_=[^&]*/,
8760	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
8761
8762	// #7653, #8125, #8152: local protocol detection
8763	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
8764	rnoContent = /^(?:GET|HEAD)$/,
8765	rprotocol = /^\/\//,
8766
8767	/* Prefilters
8768	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
8769	 * 2) These are called:
8770	 *    - BEFORE asking for a transport
8771	 *    - AFTER param serialization (s.data is a string if s.processData is true)
8772	 * 3) key is the dataType
8773	 * 4) the catchall symbol "*" can be used
8774	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
8775	 */
8776	prefilters = {},
8777
8778	/* Transports bindings
8779	 * 1) key is the dataType
8780	 * 2) the catchall symbol "*" can be used
8781	 * 3) selection will start with transport dataType and THEN go to "*" if needed
8782	 */
8783	transports = {},
8784
8785	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
8786	allTypes = "*/".concat( "*" ),
8787
8788	// Anchor tag for parsing the document origin
8789	originAnchor = document.createElement( "a" );
8790	originAnchor.href = location.href;
8791
8792// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
8793function addToPrefiltersOrTransports( structure ) {
8794
8795	// dataTypeExpression is optional and defaults to "*"
8796	return function( dataTypeExpression, func ) {
8797
8798		if ( typeof dataTypeExpression !== "string" ) {
8799			func = dataTypeExpression;
8800			dataTypeExpression = "*";
8801		}
8802
8803		var dataType,
8804			i = 0,
8805			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
8806
8807		if ( isFunction( func ) ) {
8808
8809			// For each dataType in the dataTypeExpression
8810			while ( ( dataType = dataTypes[ i++ ] ) ) {
8811
8812				// Prepend if requested
8813				if ( dataType[ 0 ] === "+" ) {
8814					dataType = dataType.slice( 1 ) || "*";
8815					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
8816
8817				// Otherwise append
8818				} else {
8819					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
8820				}
8821			}
8822		}
8823	};
8824}
8825
8826// Base inspection function for prefilters and transports
8827function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
8828
8829	var inspected = {},
8830		seekingTransport = ( structure === transports );
8831
8832	function inspect( dataType ) {
8833		var selected;
8834		inspected[ dataType ] = true;
8835		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
8836			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
8837			if ( typeof dataTypeOrTransport === "string" &&
8838				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
8839
8840				options.dataTypes.unshift( dataTypeOrTransport );
8841				inspect( dataTypeOrTransport );
8842				return false;
8843			} else if ( seekingTransport ) {
8844				return !( selected = dataTypeOrTransport );
8845			}
8846		} );
8847		return selected;
8848	}
8849
8850	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
8851}
8852
8853// A special extend for ajax options
8854// that takes "flat" options (not to be deep extended)
8855// Fixes #9887
8856function ajaxExtend( target, src ) {
8857	var key, deep,
8858		flatOptions = jQuery.ajaxSettings.flatOptions || {};
8859
8860	for ( key in src ) {
8861		if ( src[ key ] !== undefined ) {
8862			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
8863		}
8864	}
8865	if ( deep ) {
8866		jQuery.extend( true, target, deep );
8867	}
8868
8869	return target;
8870}
8871
8872/* Handles responses to an ajax request:
8873 * - finds the right dataType (mediates between content-type and expected dataType)
8874 * - returns the corresponding response
8875 */
8876function ajaxHandleResponses( s, jqXHR, responses ) {
8877
8878	var ct, type, finalDataType, firstDataType,
8879		contents = s.contents,
8880		dataTypes = s.dataTypes;
8881
8882	// Remove auto dataType and get content-type in the process
8883	while ( dataTypes[ 0 ] === "*" ) {
8884		dataTypes.shift();
8885		if ( ct === undefined ) {
8886			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
8887		}
8888	}
8889
8890	// Check if we're dealing with a known content-type
8891	if ( ct ) {
8892		for ( type in contents ) {
8893			if ( contents[ type ] && contents[ type ].test( ct ) ) {
8894				dataTypes.unshift( type );
8895				break;
8896			}
8897		}
8898	}
8899
8900	// Check to see if we have a response for the expected dataType
8901	if ( dataTypes[ 0 ] in responses ) {
8902		finalDataType = dataTypes[ 0 ];
8903	} else {
8904
8905		// Try convertible dataTypes
8906		for ( type in responses ) {
8907			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
8908				finalDataType = type;
8909				break;
8910			}
8911			if ( !firstDataType ) {
8912				firstDataType = type;
8913			}
8914		}
8915
8916		// Or just use first one
8917		finalDataType = finalDataType || firstDataType;
8918	}
8919
8920	// If we found a dataType
8921	// We add the dataType to the list if needed
8922	// and return the corresponding response
8923	if ( finalDataType ) {
8924		if ( finalDataType !== dataTypes[ 0 ] ) {
8925			dataTypes.unshift( finalDataType );
8926		}
8927		return responses[ finalDataType ];
8928	}
8929}
8930
8931/* Chain conversions given the request and the original response
8932 * Also sets the responseXXX fields on the jqXHR instance
8933 */
8934function ajaxConvert( s, response, jqXHR, isSuccess ) {
8935	var conv2, current, conv, tmp, prev,
8936		converters = {},
8937
8938		// Work with a copy of dataTypes in case we need to modify it for conversion
8939		dataTypes = s.dataTypes.slice();
8940
8941	// Create converters map with lowercased keys
8942	if ( dataTypes[ 1 ] ) {
8943		for ( conv in s.converters ) {
8944			converters[ conv.toLowerCase() ] = s.converters[ conv ];
8945		}
8946	}
8947
8948	current = dataTypes.shift();
8949
8950	// Convert to each sequential dataType
8951	while ( current ) {
8952
8953		if ( s.responseFields[ current ] ) {
8954			jqXHR[ s.responseFields[ current ] ] = response;
8955		}
8956
8957		// Apply the dataFilter if provided
8958		if ( !prev && isSuccess && s.dataFilter ) {
8959			response = s.dataFilter( response, s.dataType );
8960		}
8961
8962		prev = current;
8963		current = dataTypes.shift();
8964
8965		if ( current ) {
8966
8967			// There's only work to do if current dataType is non-auto
8968			if ( current === "*" ) {
8969
8970				current = prev;
8971
8972			// Convert response if prev dataType is non-auto and differs from current
8973			} else if ( prev !== "*" && prev !== current ) {
8974
8975				// Seek a direct converter
8976				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
8977
8978				// If none found, seek a pair
8979				if ( !conv ) {
8980					for ( conv2 in converters ) {
8981
8982						// If conv2 outputs current
8983						tmp = conv2.split( " " );
8984						if ( tmp[ 1 ] === current ) {
8985
8986							// If prev can be converted to accepted input
8987							conv = converters[ prev + " " + tmp[ 0 ] ] ||
8988								converters[ "* " + tmp[ 0 ] ];
8989							if ( conv ) {
8990
8991								// Condense equivalence converters
8992								if ( conv === true ) {
8993									conv = converters[ conv2 ];
8994
8995								// Otherwise, insert the intermediate dataType
8996								} else if ( converters[ conv2 ] !== true ) {
8997									current = tmp[ 0 ];
8998									dataTypes.unshift( tmp[ 1 ] );
8999								}
9000								break;
9001							}
9002						}
9003					}
9004				}
9005
9006				// Apply converter (if not an equivalence)
9007				if ( conv !== true ) {
9008
9009					// Unless errors are allowed to bubble, catch and return them
9010					if ( conv && s.throws ) {
9011						response = conv( response );
9012					} else {
9013						try {
9014							response = conv( response );
9015						} catch ( e ) {
9016							return {
9017								state: "parsererror",
9018								error: conv ? e : "No conversion from " + prev + " to " + current
9019							};
9020						}
9021					}
9022				}
9023			}
9024		}
9025	}
9026
9027	return { state: "success", data: response };
9028}
9029
9030jQuery.extend( {
9031
9032	// Counter for holding the number of active queries
9033	active: 0,
9034
9035	// Last-Modified header cache for next request
9036	lastModified: {},
9037	etag: {},
9038
9039	ajaxSettings: {
9040		url: location.href,
9041		type: "GET",
9042		isLocal: rlocalProtocol.test( location.protocol ),
9043		global: true,
9044		processData: true,
9045		async: true,
9046		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
9047
9048		/*
9049		timeout: 0,
9050		data: null,
9051		dataType: null,
9052		username: null,
9053		password: null,
9054		cache: null,
9055		throws: false,
9056		traditional: false,
9057		headers: {},
9058		*/
9059
9060		accepts: {
9061			"*": allTypes,
9062			text: "text/plain",
9063			html: "text/html",
9064			xml: "application/xml, text/xml",
9065			json: "application/json, text/javascript"
9066		},
9067
9068		contents: {
9069			xml: /\bxml\b/,
9070			html: /\bhtml/,
9071			json: /\bjson\b/
9072		},
9073
9074		responseFields: {
9075			xml: "responseXML",
9076			text: "responseText",
9077			json: "responseJSON"
9078		},
9079
9080		// Data converters
9081		// Keys separate source (or catchall "*") and destination types with a single space
9082		converters: {
9083
9084			// Convert anything to text
9085			"* text": String,
9086
9087			// Text to html (true = no transformation)
9088			"text html": true,
9089
9090			// Evaluate text as a json expression
9091			"text json": JSON.parse,
9092
9093			// Parse text as xml
9094			"text xml": jQuery.parseXML
9095		},
9096
9097		// For options that shouldn't be deep extended:
9098		// you can add your own custom options here if
9099		// and when you create one that shouldn't be
9100		// deep extended (see ajaxExtend)
9101		flatOptions: {
9102			url: true,
9103			context: true
9104		}
9105	},
9106
9107	// Creates a full fledged settings object into target
9108	// with both ajaxSettings and settings fields.
9109	// If target is omitted, writes into ajaxSettings.
9110	ajaxSetup: function( target, settings ) {
9111		return settings ?
9112
9113			// Building a settings object
9114			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
9115
9116			// Extending ajaxSettings
9117			ajaxExtend( jQuery.ajaxSettings, target );
9118	},
9119
9120	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
9121	ajaxTransport: addToPrefiltersOrTransports( transports ),
9122
9123	// Main method
9124	ajax: function( url, options ) {
9125
9126		// If url is an object, simulate pre-1.5 signature
9127		if ( typeof url === "object" ) {
9128			options = url;
9129			url = undefined;
9130		}
9131
9132		// Force options to be an object
9133		options = options || {};
9134
9135		var transport,
9136
9137			// URL without anti-cache param
9138			cacheURL,
9139
9140			// Response headers
9141			responseHeadersString,
9142			responseHeaders,
9143
9144			// timeout handle
9145			timeoutTimer,
9146
9147			// Url cleanup var
9148			urlAnchor,
9149
9150			// Request state (becomes false upon send and true upon completion)
9151			completed,
9152
9153			// To know if global events are to be dispatched
9154			fireGlobals,
9155
9156			// Loop variable
9157			i,
9158
9159			// uncached part of the url
9160			uncached,
9161
9162			// Create the final options object
9163			s = jQuery.ajaxSetup( {}, options ),
9164
9165			// Callbacks context
9166			callbackContext = s.context || s,
9167
9168			// Context for global events is callbackContext if it is a DOM node or jQuery collection
9169			globalEventContext = s.context &&
9170				( callbackContext.nodeType || callbackContext.jquery ) ?
9171					jQuery( callbackContext ) :
9172					jQuery.event,
9173
9174			// Deferreds
9175			deferred = jQuery.Deferred(),
9176			completeDeferred = jQuery.Callbacks( "once memory" ),
9177
9178			// Status-dependent callbacks
9179			statusCode = s.statusCode || {},
9180
9181			// Headers (they are sent all at once)
9182			requestHeaders = {},
9183			requestHeadersNames = {},
9184
9185			// Default abort message
9186			strAbort = "canceled",
9187
9188			// Fake xhr
9189			jqXHR = {
9190				readyState: 0,
9191
9192				// Builds headers hashtable if needed
9193				getResponseHeader: function( key ) {
9194					var match;
9195					if ( completed ) {
9196						if ( !responseHeaders ) {
9197							responseHeaders = {};
9198							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
9199								responseHeaders[ match[ 1 ].toLowerCase() 
9199+ " " ] =
9200									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
9201										.concat( match[ 2 ] );
9202							}
9203						}
9204						match = responseHeaders[ key.toLowerCase() + " " ];
9205					}
9206					return match == null ? null : match.join( ", " )
vendor: 10,702 bytes, lines 9206-9595
9206;
9207				},
9208
9209				// Raw string
9210				getAllResponseHeaders: function() {
9211					return completed ? responseHeadersString : null;
9212				},
9213
9214				// Caches the header
9215				setRequestHeader: function( name, value ) {
9216					if ( completed == null ) {
9217						name = requestHeadersNames[ name.toLowerCase() ] =
9218							requestHeadersNames[ name.toLowerCase() ] || name;
9219						requestHeaders[ name ] = value;
9220					}
9221					return this;
9222				},
9223
9224				// Overrides response content-type header
9225				overrideMimeType: function( type ) {
9226					if ( completed == null ) {
9227						s.mimeType = type;
9228					}
9229					return this;
9230				},
9231
9232				// Status-dependent callbacks
9233				statusCode: function( map ) {
9234					var code;
9235					if ( map ) {
9236						if ( completed ) {
9237
9238							// Execute the appropriate callbacks
9239							jqXHR.always( map[ jqXHR.status ] );
9240						} else {
9241
9242							// Lazy-add the new callbacks in a way that preserves old ones
9243							for ( code in map ) {
9244								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
9245							}
9246						}
9247					}
9248					return this;
9249				},
9250
9251				// Cancel the request
9252				abort: function( statusText ) {
9253					var finalText = statusText || strAbort;
9254					if ( transport ) {
9255						transport.abort( finalText );
9256					}
9257					done( 0, finalText );
9258					return this;
9259				}
9260			};
9261
9262		// Attach deferreds
9263		deferred.promise( jqXHR );
9264
9265		// Add protocol if not provided (prefilters might expect it)
9266		// Handle falsy url in the settings object (#10093: consistency with old signature)
9267		// We also use the url parameter if available
9268		s.url = ( ( url || s.url || location.href ) + "" )
9269			.replace( rprotocol, location.protocol + "//" );
9270
9271		// Alias method option to type as per ticket #12004
9272		s.type = options.method || options.type || s.method || s.type;
9273
9274		// Extract dataTypes list
9275		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
9276
9277		// A cross-domain request is in order when the origin doesn't match the current origin.
9278		if ( s.crossDomain == null ) {
9279			urlAnchor = document.createElement( "a" );
9280
9281			// Support: IE <=8 - 11, Edge 12 - 15
9282			// IE throws exception on accessing the href property if url is malformed,
9283			// e.g. http://example.com:80x/
9284			try {
9285				urlAnchor.href = s.url;
9286
9287				// Support: IE <=8 - 11 only
9288				// Anchor's host property isn't correctly set when s.url is relative
9289				urlAnchor.href = urlAnchor.href;
9290				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
9291					urlAnchor.protocol + "//" + urlAnchor.host;
9292			} catch ( e ) {
9293
9294				// If there is an error parsing the URL, assume it is crossDomain,
9295				// it can be rejected by the transport if it is invalid
9296				s.crossDomain = true;
9297			}
9298		}
9299
9300		// Convert data if not already a string
9301		if ( s.data && s.processData && typeof s.data !== "string" ) {
9302			s.data = jQuery.param( s.data, s.traditional );
9303		}
9304
9305		// Apply prefilters
9306		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
9307
9308		// If request was aborted inside a prefilter, stop there
9309		if ( completed ) {
9310			return jqXHR;
9311		}
9312
9313		// We can fire global events as of now if asked to
9314		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
9315		fireGlobals = jQuery.event && s.global;
9316
9317		// Watch for a new set of requests
9318		if ( fireGlobals && jQuery.active++ === 0 ) {
9319			jQuery.event.trigger( "ajaxStart" );
9320		}
9321
9322		// Uppercase the type
9323		s.type = s.type.toUpperCase();
9324
9325		// Determine if request has content
9326		s.hasContent = !rnoContent.test( s.type );
9327
9328		// Save the URL in case we're toying with the If-Modified-Since
9329		// and/or If-None-Match header later on
9330		// Remove hash to simplify url manipulation
9331		cacheURL = s.url.replace( rhash, "" );
9332
9333		// More options handling for requests with no content
9334		if ( !s.hasContent ) {
9335
9336			// Remember the hash so we can put it back
9337			uncached = s.url.slice( cacheURL.length );
9338
9339			// If data is available and should be processed, append data to url
9340			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
9341				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
9342
9343				// #9682: remove data so that it's not used in an eventual retry
9344				delete s.data;
9345			}
9346
9347			// Add or update anti-cache param if needed
9348			if ( s.cache === false ) {
9349				cacheURL = cacheURL.replace( rantiCache, "$1" );
9350				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
9351			}
9352
9353			// Put hash and anti-cache on the URL that will be requested (gh-1732)
9354			s.url = cacheURL + uncached;
9355
9356		// Change '%20' to '+' if this is encoded form body content (gh-2658)
9357		} else if ( s.data && s.processData &&
9358			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
9359			s.data = s.data.replace( r20, "+" );
9360		}
9361
9362		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
9363		if ( s.ifModified ) {
9364			if ( jQuery.lastModified[ cacheURL ] ) {
9365				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
9366			}
9367			if ( jQuery.etag[ cacheURL ] ) {
9368				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
9369			}
9370		}
9371
9372		// Set the correct header, if data is being sent
9373		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
9374			jqXHR.setRequestHeader( "Content-Type", s.contentType );
9375		}
9376
9377		// Set the Accepts header for the server, depending on the dataType
9378		jqXHR.setRequestHeader(
9379			"Accept",
9380			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
9381				s.accepts[ s.dataTypes[ 0 ] ] +
9382					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
9383				s.accepts[ "*" ]
9384		);
9385
9386		// Check for headers option
9387		for ( i in s.headers ) {
9388			jqXHR.setRequestHeader( i, s.headers[ i ] );
9389		}
9390
9391		// Allow custom headers/mimetypes and early abort
9392		if ( s.beforeSend &&
9393			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
9394
9395			// Abort if not done already and return
9396			return jqXHR.abort();
9397		}
9398
9399		// Aborting is no longer a cancellation
9400		strAbort = "abort";
9401
9402		// Install callbacks on deferreds
9403		completeDeferred.add( s.complete );
9404		jqXHR.done( s.success );
9405		jqXHR.fail( s.error );
9406
9407		// Get transport
9408		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
9409
9410		// If no transport, we auto-abort
9411		if ( !transport ) {
9412			done( -1, "No Transport" );
9413		} else {
9414			jqXHR.readyState = 1;
9415
9416			// Send global event
9417			if ( fireGlobals ) {
9418				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
9419			}
9420
9421			// If request was aborted inside ajaxSend, stop there
9422			if ( completed ) {
9423				return jqXHR;
9424			}
9425
9426			// Timeout
9427			if ( s.async && s.timeout > 0 ) {
9428				timeoutTimer = window.setTimeout( function() {
9429					jqXHR.abort( "timeout" );
9430				}, s.timeout );
9431			}
9432
9433			try {
9434				completed = false;
9435				transport.send( requestHeaders, done );
9436			} catch ( e ) {
9437
9438				// Rethrow post-completion exceptions
9439				if ( completed ) {
9440					throw e;
9441				}
9442
9443				// Propagate others as results
9444				done( -1, e );
9445			}
9446		}
9447
9448		// Callback for when everything is done
9449		function done( status, nativeStatusText, responses, headers ) {
9450			var isSuccess, success, error, response, modified,
9451				statusText = nativeStatusText;
9452
9453			// Ignore repeat invocations
9454			if ( completed ) {
9455				return;
9456			}
9457
9458			completed = true;
9459
9460			// Clear timeout if it exists
9461			if ( timeoutTimer ) {
9462				window.clearTimeout( timeoutTimer );
9463			}
9464
9465			// Dereference transport for early garbage collection
9466			// (no matter how long the jqXHR object will be used)
9467			transport = undefined;
9468
9469			// Cache response headers
9470			responseHeadersString = headers || "";
9471
9472			// Set readyState
9473			jqXHR.readyState = status > 0 ? 4 : 0;
9474
9475			// Determine if successful
9476			isSuccess = status >= 200 && status < 300 || status === 304;
9477
9478			// Get response data
9479			if ( responses ) {
9480				response = ajaxHandleResponses( s, jqXHR, responses );
9481			}
9482
9483			// Convert no matter what (that way responseXXX fields are always set)
9484			response = ajaxConvert( s, response, jqXHR, isSuccess );
9485
9486			// If successful, handle type chaining
9487			if ( isSuccess ) {
9488
9489				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
9490				if ( s.ifModified ) {
9491					modified = jqXHR.getResponseHeader( "Last-Modified" );
9492					if ( modified ) {
9493						jQuery.lastModified[ cacheURL ] = modified;
9494					}
9495					modified = jqXHR.getResponseHeader( "etag" );
9496					if ( modified ) {
9497						jQuery.etag[ cacheURL ] = modified;
9498					}
9499				}
9500
9501				// if no content
9502				if ( status === 204 || s.type === "HEAD" ) {
9503					statusText = "nocontent";
9504
9505				// if not modified
9506				} else if ( status === 304 ) {
9507					statusText = "notmodified";
9508
9509				// If we have data, let's convert it
9510				} else {
9511					statusText = response.state;
9512					success = response.data;
9513					error = response.error;
9514					isSuccess = !error;
9515				}
9516			} else {
9517
9518				// Extract error from statusText and normalize for non-aborts
9519				error = statusText;
9520				if ( status || !statusText ) {
9521					statusText = "error";
9522					if ( status < 0 ) {
9523						status = 0;
9524					}
9525				}
9526			}
9527
9528			// Set data for the fake xhr object
9529			jqXHR.status = status;
9530			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
9531
9532			// Success/Error
9533			if ( isSuccess ) {
9534				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
9535			} else {
9536				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
9537			}
9538
9539			// Status-dependent callbacks
9540			jqXHR.statusCode( statusCode );
9541			statusCode = undefined;
9542
9543			if ( fireGlobals ) {
9544				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
9545					[ jqXHR, s, isSuccess ? success : error ] );
9546			}
9547
9548			// Complete
9549			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
9550
9551			if ( fireGlobals ) {
9552				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
9553
9554				// Handle the global AJAX counter
9555				if ( !( --jQuery.active ) ) {
9556					jQuery.event.trigger( "ajaxStop" );
9557				}
9558			}
9559		}
9560
9561		return jqXHR;
9562	},
9563
9564	getJSON: function( url, data, callback ) {
9565		return jQuery.get( url, data, callback, "json" );
9566	},
9567
9568	getScript: function( url, callback ) {
9569		return jQuery.get( url, undefined, callback, "script" );
9570	}
9571} );
9572
9573jQuery.each( [ "get", "post" ], function( i, method ) {
9574	jQuery[ method ] = function( url, data, callback, type ) {
9575
9576		// Shift arguments if data argument was omitted
9577		if ( isFunction( data ) ) {
9578			type = type || callback;
9579			callback = data;
9580			data = undefined;
9581		}
9582
9583		// The url can be an options object (which then must have .url)
9584		return jQuery.ajax( jQuery.extend( {
9585			url: url,
9586			type: method,
9587			dataType: type,
9588			data: data,
9589			success: callback
9590		}, jQuery.isPlainObject( url ) && url ) );
9591	};
9592} );
9593
9594
9595jQuery._evalUrl = function( url
9595, options ) {
9596	return jQuery.ajax( {
9597		url: url,
9598
9599		// Make this explicit, since user can override this through ajaxSetup (#11264)
9600		type: "GET",
9601		dataType: "script",
9602		cache: true,
9603		async: false,
9604		global: false,
9605
9606		// Only evaluate the response if it is successful (gh-4126)
9607		// dataFilter is not invoked for failure responses, so using it instead
9608		// of the default converter is kludgy but it works.
9609		converters: {
9610			"text script": function() {}
9611		},
9612		dataFilter: function( response ) {
9613			jQuery.globalEval( response, options
vendor: 11,651 bytes, lines 9613-10078
9613 );
9614		}
9615	} );
9616};
9617
9618
9619jQuery.fn.extend( {
9620	wrapAll: function( html ) {
9621		var wrap;
9622
9623		if ( this[ 0 ] ) {
9624			if ( isFunction( html ) ) {
9625				html = html.call( this[ 0 ] );
9626			}
9627
9628			// The elements to wrap the target around
9629			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
9630
9631			if ( this[ 0 ].parentNode ) {
9632				wrap.insertBefore( this[ 0 ] );
9633			}
9634
9635			wrap.map( function() {
9636				var elem = this;
9637
9638				while ( elem.firstElementChild ) {
9639					elem = elem.firstElementChild;
9640				}
9641
9642				return elem;
9643			} ).append( this );
9644		}
9645
9646		return this;
9647	},
9648
9649	wrapInner: function( html ) {
9650		if ( isFunction( html ) ) {
9651			return this.each( function( i ) {
9652				jQuery( this ).wrapInner( html.call( this, i ) );
9653			} );
9654		}
9655
9656		return this.each( function() {
9657			var self = jQuery( this ),
9658				contents = self.contents();
9659
9660			if ( contents.length ) {
9661				contents.wrapAll( html );
9662
9663			} else {
9664				self.append( html );
9665			}
9666		} );
9667	},
9668
9669	wrap: function( html ) {
9670		var htmlIsFunction = isFunction( html );
9671
9672		return this.each( function( i ) {
9673			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
9674		} );
9675	},
9676
9677	unwrap: function( selector ) {
9678		this.parent( selector ).not( "body" ).each( function() {
9679			jQuery( this ).replaceWith( this.childNodes );
9680		} );
9681		return this;
9682	}
9683} );
9684
9685
9686jQuery.expr.pseudos.hidden = function( elem ) {
9687	return !jQuery.expr.pseudos.visible( elem );
9688};
9689jQuery.expr.pseudos.visible = function( elem ) {
9690	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
9691};
9692
9693
9694
9695
9696jQuery.ajaxSettings.xhr = function() {
9697	try {
9698		return new window.XMLHttpRequest();
9699	} catch ( e ) {}
9700};
9701
9702var xhrSuccessStatus = {
9703
9704		// File protocol always yields status code 0, assume 200
9705		0: 200,
9706
9707		// Support: IE <=9 only
9708		// #1450: sometimes IE returns 1223 when it should be 204
9709		1223: 204
9710	},
9711	xhrSupported = jQuery.ajaxSettings.xhr();
9712
9713support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
9714support.ajax = xhrSupported = !!xhrSupported;
9715
9716jQuery.ajaxTransport( function( options ) {
9717	var callback, errorCallback;
9718
9719	// Cross domain only allowed if supported through XMLHttpRequest
9720	if ( support.cors || xhrSupported && !options.crossDomain ) {
9721		return {
9722			send: function( headers, complete ) {
9723				var i,
9724					xhr = options.xhr();
9725
9726				xhr.open(
9727					options.type,
9728					options.url,
9729					options.async,
9730					options.username,
9731					options.password
9732				);
9733
9734				// Apply custom fields if provided
9735				if ( options.xhrFields ) {
9736					for ( i in options.xhrFields ) {
9737						xhr[ i ] = options.xhrFields[ i ];
9738					}
9739				}
9740
9741				// Override mime type if needed
9742				if ( options.mimeType && xhr.overrideMimeType ) {
9743					xhr.overrideMimeType( options.mimeType );
9744				}
9745
9746				// X-Requested-With header
9747				// For cross-domain requests, seeing as conditions for a preflight are
9748				// akin to a jigsaw puzzle, we simply never set it to be sure.
9749				// (it can always be set on a per-request basis or even using ajaxSetup)
9750				// For same-domain requests, won't change header if already provided.
9751				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
9752					headers[ "X-Requested-With" ] = "XMLHttpRequest";
9753				}
9754
9755				// Set headers
9756				for ( i in headers ) {
9757					xhr.setRequestHeader( i, headers[ i ] );
9758				}
9759
9760				// Callback
9761				callback = function( type ) {
9762					return function() {
9763						if ( callback ) {
9764							callback = errorCallback = xhr.onload =
9765								xhr.onerror = xhr.onabort = xhr.ontimeout =
9766									xhr.onreadystatechange = null;
9767
9768							if ( type === "abort" ) {
9769								xhr.abort();
9770							} else if ( type === "error" ) {
9771
9772								// Support: IE <=9 only
9773								// On a manual native abort, IE9 throws
9774								// errors on any property access that is not readyState
9775								if ( typeof xhr.status !== "number" ) {
9776									complete( 0, "error" );
9777								} else {
9778									complete(
9779
9780										// File: protocol always yields status 0; see #8605, #14207
9781										xhr.status,
9782										xhr.statusText
9783									);
9784								}
9785							} else {
9786								complete(
9787									xhrSuccessStatus[ xhr.status ] || xhr.status,
9788									xhr.statusText,
9789
9790									// Support: IE <=9 only
9791									// IE9 has no XHR2 but throws on binary (trac-11426)
9792									// For XHR2 non-text, let the caller handle it (gh-2498)
9793									( xhr.responseType || "text" ) !== "text"  ||
9794									typeof xhr.responseText !== "string" ?
9795										{ binary: xhr.response } :
9796										{ text: xhr.responseText },
9797									xhr.getAllResponseHeaders()
9798								);
9799							}
9800						}
9801					};
9802				};
9803
9804				// Listen to events
9805				xhr.onload = callback();
9806				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
9807
9808				// Support: IE 9 only
9809				// Use onreadystatechange to replace onabort
9810				// to handle uncaught aborts
9811				if ( xhr.onabort !== undefined ) {
9812					xhr.onabort = errorCallback;
9813				} else {
9814					xhr.onreadystatechange = function() {
9815
9816						// Check readyState before timeout as it changes
9817						if ( xhr.readyState === 4 ) {
9818
9819							// Allow onerror to be called first,
9820							// but that will not handle a native abort
9821							// Also, save errorCallback to a variable
9822							// as xhr.onerror cannot be accessed
9823							window.setTimeout( function() {
9824								if ( callback ) {
9825									errorCallback();
9826								}
9827							} );
9828						}
9829					};
9830				}
9831
9832				// Create the abort callback
9833				callback = callback( "abort" );
9834
9835				try {
9836
9837					// Do send the request (this may raise an exception)
9838					xhr.send( options.hasContent && options.data || null );
9839				} catch ( e ) {
9840
9841					// #14683: Only rethrow if this hasn't been notified as an error yet
9842					if ( callback ) {
9843						throw e;
9844					}
9845				}
9846			},
9847
9848			abort: function() {
9849				if ( callback ) {
9850					callback();
9851				}
9852			}
9853		};
9854	}
9855} );
9856
9857
9858
9859
9860// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
9861jQuery.ajaxPrefilter( function( s ) {
9862	if ( s.crossDomain ) {
9863		s.contents.script = false;
9864	}
9865} );
9866
9867// Install script dataType
9868jQuery.ajaxSetup( {
9869	accepts: {
9870		script: "text/javascript, application/javascript, " +
9871			"application/ecmascript, application/x-ecmascript"
9872	},
9873	contents: {
9874		script: /\b(?:java|ecma)script\b/
9875	},
9876	converters: {
9877		"text script": function( text ) {
9878			jQuery.globalEval( text );
9879			return text;
9880		}
9881	}
9882} );
9883
9884// Handle cache's special case and crossDomain
9885jQuery.ajaxPrefilter( "script", function( s ) {
9886	if ( s.cache === undefined ) {
9887		s.cache = false;
9888	}
9889	if ( s.crossDomain ) {
9890		s.type = "GET";
9891	}
9892} );
9893
9894// Bind script tag hack transport
9895jQuery.ajaxTransport( "script", function( s ) {
9896
9897	// This transport only deals with cross domain or forced-by-attrs requests
9898	if ( s.crossDomain || s.scriptAttrs ) {
9899		var script, callback;
9900		return {
9901			send: function( _, complete ) {
9902				script = jQuery( "<script>" )
9903					.attr( s.scriptAttrs || {} )
9904					.prop( { charset: s.scriptCharset, src: s.url } )
9905					.on( "load error", callback = function( evt ) {
9906						script.remove();
9907						callback = null;
9908						if ( evt ) {
9909							complete( evt.type === "error" ? 404 : 200, evt.type );
9910						}
9911					} );
9912
9913				// Use native DOM manipulation to avoid our domManip AJAX trickery
9914				document.head.appendChild( script[ 0 ] );
9915			},
9916			abort: function() {
9917				if ( callback ) {
9918					callback();
9919				}
9920			}
9921		};
9922	}
9923} );
9924
9925
9926
9927
9928var oldCallbacks = [],
9929	rjsonp = /(=)\?(?=&|$)|\?\?/;
9930
9931// Default jsonp settings
9932jQuery.ajaxSetup( {
9933	jsonp: "callback",
9934	jsonpCallback: function() {
9935		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
9936		this[ callback ] = true;
9937		return callback;
9938	}
9939} );
9940
9941// Detect, normalize options and install callbacks for jsonp requests
9942jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
9943
9944	var callbackName, overwritten, responseContainer,
9945		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
9946			"url" :
9947			typeof s.data === "string" &&
9948				( s.contentType || "" )
9949					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
9950				rjsonp.test( s.data ) && "data"
9951		);
9952
9953	// Handle iff the expected data type is "jsonp" or we have a parameter to set
9954	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
9955
9956		// Get callback name, remembering preexisting value associated with it
9957		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
9958			s.jsonpCallback() :
9959			s.jsonpCallback;
9960
9961		// Insert callback into url or form data
9962		if ( jsonProp ) {
9963			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
9964		} else if ( s.jsonp !== false ) {
9965			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
9966		}
9967
9968		// Use data converter to retrieve json after script execution
9969		s.converters[ "script json" ] = function() {
9970			if ( !responseContainer ) {
9971				jQuery.error( callbackName + " was not called" );
9972			}
9973			return responseContainer[ 0 ];
9974		};
9975
9976		// Force json dataType
9977		s.dataTypes[ 0 ] = "json";
9978
9979		// Install callback
9980		overwritten = window[ callbackName ];
9981		window[ callbackName ] = function() {
9982			responseContainer = arguments;
9983		};
9984
9985		// Clean-up function (fires after converters)
9986		jqXHR.always( function() {
9987
9988			// If previous value didn't exist - remove it
9989			if ( overwritten === undefined ) {
9990				jQuery( window ).removeProp( callbackName );
9991
9992			// Otherwise restore preexisting value
9993			} else {
9994				window[ callbackName ] = overwritten;
9995			}
9996
9997			// Save back as free
9998			if ( s[ callbackName ] ) {
9999
10000				// Make sure that re-using the options doesn't screw things around
10001				s.jsonpCallback = originalSettings.jsonpCallback;
10002
10003				// Save the callback name for future use
10004				oldCallbacks.push( callbackName );
10005			}
10006
10007			// Call if it was a function and we have a response
10008			if ( responseContainer && isFunction( overwritten ) ) {
10009				overwritten( responseContainer[ 0 ] );
10010			}
10011
10012			responseContainer = overwritten = undefined;
10013		} );
10014
10015		// Delegate to script
10016		return "script";
10017	}
10018} );
10019
10020
10021
10022
10023// Support: Safari 8 only
10024// In Safari 8 documents created via document.implementation.createHTMLDocument
10025// collapse sibling forms: the second one becomes a child of the first one.
10026// Because of that, this security measure has to be disabled in Safari 8.
10027// https://bugs.webkit.org/show_bug.cgi?id=137337
10028support.createHTMLDocument = ( function() {
10029	var body = document.implementation.createHTMLDocument( "" ).body;
10030	body.innerHTML = "<form></form><form></form>";
10031	return body.childNodes.length === 2;
10032} )();
10033
10034
10035// Argument "data" should be string of html
10036// context (optional): If specified, the fragment will be created in this context,
10037// defaults to document
10038// keepScripts (optional): If true, will include scripts passed in the html string
10039jQuery.parseHTML = function( data, context, keepScripts ) {
10040	if ( typeof data !== "string" ) {
10041		return [];
10042	}
10043	if ( typeof context === "boolean" ) {
10044		keepScripts = context;
10045		context = false;
10046	}
10047
10048	var base, parsed, scripts;
10049
10050	if ( !context ) {
10051
10052		// Stop scripts or inline event handlers from being executed immediately
10053		// by using document.implementation
10054		if ( support.createHTMLDocument ) {
10055			context = document.implementation.createHTMLDocument( "" );
10056
10057			// Set the base href for the created document
10058			// so any parsed elements with URLs
10059			// are based on the document's URL (gh-2965)
10060			base = context.createElement( "base" );
10061			base.href = document.location.href;
10062			context.head.appendChild( base );
10063		} else {
10064			context = document;
10065		}
10066	}
10067
10068	parsed = rsingleTag.exec( data );
10069	scripts = !keepScripts && [];
10070
10071	// Single tag
10072	if ( parsed ) {
10073		return [ context.createElement( parsed[ 1 ] ) ];
10074	}
10075
10076	parsed = buildFragment( [ data ], context, scripts );
10077
10078	if ( scripts && scripts.length ) {
vendor: 14,511 bytes, lines 10079-10599
10079		jQuery( scripts ).remove();
10080	}
10081
10082	return jQuery.merge( [], parsed.childNodes );
10083};
10084
10085
10086/**
10087 * Load a url into a page
10088 */
10089jQuery.fn.load = function( url, params, callback ) {
10090	var selector, type, response,
10091		self = this,
10092		off = url.indexOf( " " );
10093
10094	if ( off > -1 ) {
10095		selector = stripAndCollapse( url.slice( off ) );
10096		url = url.slice( 0, off );
10097	}
10098
10099	// If it's a function
10100	if ( isFunction( params ) ) {
10101
10102		// We assume that it's the callback
10103		callback = params;
10104		params = undefined;
10105
10106	// Otherwise, build a param string
10107	} else if ( params && typeof params === "object" ) {
10108		type = "POST";
10109	}
10110
10111	// If we have elements to modify, make the request
10112	if ( self.length > 0 ) {
10113		jQuery.ajax( {
10114			url: url,
10115
10116			// If "type" variable is undefined, then "GET" method will be used.
10117			// Make value of this field explicit since
10118			// user can override it through ajaxSetup method
10119			type: type || "GET",
10120			dataType: "html",
10121			data: params
10122		} ).done( function( responseText ) {
10123
10124			// Save response for use in complete callback
10125			response = arguments;
10126
10127			self.html( selector ?
10128
10129				// If a selector was specified, locate the right elements in a dummy div
10130				// Exclude scripts to avoid IE 'Permission Denied' errors
10131				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
10132
10133				// Otherwise use the full result
10134				responseText );
10135
10136		// If the request succeeds, this function gets "data", "status", "jqXHR"
10137		// but they are ignored because response was set above.
10138		// If it fails, this function gets "jqXHR", "status", "error"
10139		} ).always( callback && function( jqXHR, status ) {
10140			self.each( function() {
10141				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
10142			} );
10143		} );
10144	}
10145
10146	return this;
10147};
10148
10149
10150
10151
10152// Attach a bunch of functions for handling common AJAX events
10153jQuery.each( [
10154	"ajaxStart",
10155	"ajaxStop",
10156	"ajaxComplete",
10157	"ajaxError",
10158	"ajaxSuccess",
10159	"ajaxSend"
10160], function( i, type ) {
10161	jQuery.fn[ type ] = function( fn ) {
10162		return this.on( type, fn );
10163	};
10164} );
10165
10166
10167
10168
10169jQuery.expr.pseudos.animated = function( elem ) {
10170	return jQuery.grep( jQuery.timers, function( fn ) {
10171		return elem === fn.elem;
10172	} ).length;
10173};
10174
10175
10176
10177
10178jQuery.offset = {
10179	setOffset: function( elem, options, i ) {
10180		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
10181			position = jQuery.css( elem, "position" ),
10182			curElem = jQuery( elem ),
10183			props = {};
10184
10185		// Set position first, in-case top/left are set even on static elem
10186		if ( position === "static" ) {
10187			elem.style.position = "relative";
10188		}
10189
10190		curOffset = curElem.offset();
10191		curCSSTop = jQuery.css( elem, "top" );
10192		curCSSLeft = jQuery.css( elem, "left" );
10193		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
10194			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
10195
10196		// Need to be able to calculate position if either
10197		// top or left is auto and position is either absolute or fixed
10198		if ( calculatePosition ) {
10199			curPosition = curElem.position();
10200			curTop = curPosition.top;
10201			curLeft = curPosition.left;
10202
10203		} else {
10204			curTop = parseFloat( curCSSTop ) || 0;
10205			curLeft = parseFloat( curCSSLeft ) || 0;
10206		}
10207
10208		if ( isFunction( options ) ) {
10209
10210			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
10211			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
10212		}
10213
10214		if ( options.top != null ) {
10215			props.top = ( options.top - curOffset.top ) + curTop;
10216		}
10217		if ( options.left != null ) {
10218			props.left = ( options.left - curOffset.left ) + curLeft;
10219		}
10220
10221		if ( "using" in options ) {
10222			options.using.call( elem, props );
10223
10224		} else {
10225			curElem.css( props );
10226		}
10227	}
10228};
10229
10230jQuery.fn.extend( {
10231
10232	// offset() relates an element's border box to the document origin
10233	offset: function( options ) {
10234
10235		// Preserve chaining for setter
10236		if ( arguments.length ) {
10237			return options === undefined ?
10238				this :
10239				this.each( function( i ) {
10240					jQuery.offset.setOffset( this, options, i );
10241				} );
10242		}
10243
10244		var rect, win,
10245			elem = this[ 0 ];
10246
10247		if ( !elem ) {
10248			return;
10249		}
10250
10251		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
10252		// Support: IE <=11 only
10253		// Running getBoundingClientRect on a
10254		// disconnected node in IE throws an error
10255		if ( !elem.getClientRects().length ) {
10256			return { top: 0, left: 0 };
10257		}
10258
10259		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
10260		rect = elem.getBoundingClientRect();
10261		win = elem.ownerDocument.defaultView;
10262		return {
10263			top: rect.top + win.pageYOffset,
10264			left: rect.left + win.pageXOffset
10265		};
10266	},
10267
10268	// position() relates an element's margin box to its offset parent's padding box
10269	// This corresponds to the behavior of CSS absolute positioning
10270	position: function() {
10271		if ( !this[ 0 ] ) {
10272			return;
10273		}
10274
10275		var offsetParent, offset, doc,
10276			elem = this[ 0 ],
10277			parentOffset = { top: 0, left: 0 };
10278
10279		// position:fixed elements are offset from the viewport, which itself always has zero offset
10280		if ( jQuery.css( elem, "position" ) === "fixed" ) {
10281
10282			// Assume position:fixed implies availability of getBoundingClientRect
10283			offset = elem.getBoundingClientRect();
10284
10285		} else {
10286			offset = this.offset();
10287
10288			// Account for the *real* offset parent, which can be the document or its root element
10289			// when a statically positioned element is identified
10290			doc = elem.ownerDocument;
10291			offsetParent = elem.offsetParent || doc.documentElement;
10292			while ( offsetParent &&
10293				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
10294				jQuery.css( offsetParent, "position" ) === "static" ) {
10295
10296				offsetParent = offsetParent.parentNode;
10297			}
10298			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
10299
10300				// Incorporate borders into its offset, since they are outside its content origin
10301				parentOffset = jQuery( offsetParent ).offset();
10302				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
10303				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
10304			}
10305		}
10306
10307		// Subtract parent offsets and element margins
10308		return {
10309			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
10310			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
10311		};
10312	},
10313
10314	// This method will return documentElement in the following cases:
10315	// 1) For the element inside the iframe without offsetParent, this method will return
10316	//    documentElement of the parent window
10317	// 2) For the hidden or detached element
10318	// 3) For body or html element, i.e. in case of the html node - it will return itself
10319	//
10320	// but those exceptions were never presented as a real life use-cases
10321	// and might be considered as more preferable results.
10322	//
10323	// This logic, however, is not guaranteed and can change at any point in the future
10324	offsetParent: function() {
10325		return this.map( function() {
10326			var offsetParent = this.offsetParent;
10327
10328			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
10329				offsetParent = offsetParent.offsetParent;
10330			}
10331
10332			return offsetParent || documentElement;
10333		} );
10334	}
10335} );
10336
10337// Create scrollLeft and scrollTop methods
10338jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
10339	var top = "pageYOffset" === prop;
10340
10341	jQuery.fn[ method ] = function( val ) {
10342		return access( this, function( elem, method, val ) {
10343
10344			// Coalesce documents and windows
10345			var win;
10346			if ( isWindow( elem ) ) {
10347				win = elem;
10348			} else if ( elem.nodeType === 9 ) {
10349				win = elem.defaultView;
10350			}
10351
10352			if ( val === undefined ) {
10353				return win ? win[ prop ] : elem[ method ];
10354			}
10355
10356			if ( win ) {
10357				win.scrollTo(
10358					!top ? val : win.pageXOffset,
10359					top ? val : win.pageYOffset
10360				);
10361
10362			} else {
10363				elem[ method ] = val;
10364			}
10365		}, method, val, arguments.length );
10366	};
10367} );
10368
10369// Support: Safari <=7 - 9.1, Chrome <=37 - 49
10370// Add the top/left cssHooks using jQuery.fn.position
10371// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
10372// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
10373// getComputedStyle returns percent when specified for top/left/bottom/right;
10374// rather than make the css module depend on the offset module, just check for it here
10375jQuery.each( [ "top", "left" ], function( i, prop ) {
10376	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
10377		function( elem, computed ) {
10378			if ( computed ) {
10379				computed = curCSS( elem, prop );
10380
10381				// If curCSS returns percentage, fallback to offset
10382				return rnumnonpx.test( computed ) ?
10383					jQuery( elem ).position()[ prop ] + "px" :
10384					computed;
10385			}
10386		}
10387	);
10388} );
10389
10390
10391// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
10392jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
10393	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
10394		function( defaultExtra, funcName ) {
10395
10396		// Margin is only for outerHeight, outerWidth
10397		jQuery.fn[ funcName ] = function( margin, value ) {
10398			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
10399				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
10400
10401			return access( this, function( elem, type, value ) {
10402				var doc;
10403
10404				if ( isWindow( elem ) ) {
10405
10406					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
10407					return funcName.indexOf( "outer" ) === 0 ?
10408						elem[ "inner" + name ] :
10409						elem.document.documentElement[ "client" + name ];
10410				}
10411
10412				// Get document width or height
10413				if ( elem.nodeType === 9 ) {
10414					doc = elem.documentElement;
10415
10416					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
10417					// whichever is greatest
10418					return Math.max(
10419						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
10420						elem.body[ "offset" + name ], doc[ "offset" + name ],
10421						doc[ "client" + name ]
10422					);
10423				}
10424
10425				return value === undefined ?
10426
10427					// Get width or height on the element, requesting but not forcing parseFloat
10428					jQuery.css( elem, type, extra ) :
10429
10430					// Set width or height on the element
10431					jQuery.style( elem, type, value, extra );
10432			}, type, chainable ? margin : undefined, chainable );
10433		};
10434	} );
10435} );
10436
10437
10438jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
10439	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
10440	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
10441	function( i, name ) {
10442
10443	// Handle event binding
10444	jQuery.fn[ name ] = function( data, fn ) {
10445		return arguments.length > 0 ?
10446			this.on( name, null, data, fn ) :
10447			this.trigger( name );
10448	};
10449} );
10450
10451jQuery.fn.extend( {
10452	hover: function( fnOver, fnOut ) {
10453		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
10454	}
10455} );
10456
10457
10458
10459
10460jQuery.fn.extend( {
10461
10462	bind: function( types, data, fn ) {
10463		return this.on( types, null, data, fn );
10464	},
10465	unbind: function( types, fn ) {
10466		return this.off( types, null, fn );
10467	},
10468
10469	delegate: function( selector, types, data, fn ) {
10470		return this.on( types, selector, data, fn );
10471	},
10472	undelegate: function( selector, types, fn ) {
10473
10474		// ( namespace ) or ( selector, types [, fn] )
10475		return arguments.length === 1 ?
10476			this.off( selector, "**" ) :
10477			this.off( types, selector || "**", fn );
10478	}
10479} );
10480
10481// Bind a function to a context, optionally partially applying any
10482// arguments.
10483// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
10484// However, it is not slated for removal any time soon
10485jQuery.proxy = function( fn, context ) {
10486	var tmp, args, proxy;
10487
10488	if ( typeof context === "string" ) {
10489		tmp = fn[ context ];
10490		context = fn;
10491		fn = tmp;
10492	}
10493
10494	// Quick check to determine if target is callable, in the spec
10495	// this throws a TypeError, but we will just return undefined.
10496	if ( !isFunction( fn ) ) {
10497		return undefined;
10498	}
10499
10500	// Simulated bind
10501	args = slice.call( arguments, 2 );
10502	proxy = function() {
10503		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
10504	};
10505
10506	// Set the guid of unique handler to the same of original handler, so it can be removed
10507	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
10508
10509	return proxy;
10510};
10511
10512jQuery.holdReady = function( hold ) {
10513	if ( hold ) {
10514		jQuery.readyWait++;
10515	} else {
10516		jQuery.ready( true );
10517	}
10518};
10519jQuery.isArray = Array.isArray;
10520jQuery.parseJSON = JSON.parse;
10521jQuery.nodeName = nodeName;
10522jQuery.isFunction = isFunction;
10523jQuery.isWindow = isWindow;
10524jQuery.camelCase = camelCase;
10525jQuery.type = toType;
10526
10527jQuery.now = Date.now;
10528
10529jQuery.isNumeric = function( obj ) {
10530
10531	// As of jQuery 3.0, isNumeric is limited to
10532	// strings and numbers (primitives or objects)
10533	// that can be coerced to finite numbers (gh-2662)
10534	var type = jQuery.type( obj );
10535	return ( type === "number" || type === "string" ) &&
10536
10537		// parseFloat NaNs numeric-cast false positives ("")
10538		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
10539		// subtraction forces infinities to NaN
10540		!isNaN( obj - parseFloat( obj ) );
10541};
10542
10543
10544
10545
10546// Register as a named AMD module, since jQuery can be concatenated with other
10547// files that may use define, but not via a proper concatenation script that
10548// understands anonymous AMD modules. A named AMD is safest and most robust
10549// way to register. Lowercase jquery is used because AMD module names are
10550// derived from file names, and jQuery is normally delivered in a lowercase
10551// file name. Do this after creating the global so that if an AMD module wants
10552// to call noConflict to hide this version of jQuery, it will work.
10553
10554// Note that for maximum portability, libraries that are not jQuery should
10555// declare themselves as anonymous modules, and avoid setting a global if an
10556// AMD loader is present. jQuery is a special case. For more information, see
10557// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
10558
10559if ( typeof define === "function" && define.amd ) {
10560	define( "jquery", [], function() {
10561		return jQuery;
10562	} );
10563}
10564
10565
10566
10567
10568var
10569
10570	// Map over jQuery in case of overwrite
10571	_jQuery = window.jQuery,
10572
10573	// Map over the $ in case of overwrite
10574	_$ = window.$;
10575
10576jQuery.noConflict = function( deep ) {
10577	if ( window.$ === jQuery ) {
10578		window.$ = _$;
10579	}
10580
10581	if ( deep && window.jQuery === jQuery ) {
10582		window.jQuery = _jQuery;
10583	}
10584
10585	return jQuery;
10586};
10587
10588// Expose jQuery and $ identifiers, even in AMD
10589// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
10590// and CommonJS for browser emulators (#13566)
10591if ( !noGlobal ) {
10592	window.jQuery = window.$ = jQuery;
10593}
10594
10595
10596
10597
10598return jQuery;
10599} );
10600//!!!jQuery.cookie
10601var eb$ = jQuery.noConflict();
10602(function($) {
10603jQuery.cookie = function(name, value, options) {
10604    if (typeof value != 'undefined') { // name and value given, set cookie
10605        options = options || {};
10606        if (value === null) {
10607            value = '';
10608            options.expires = -1;
10609        }
10610        var expires = '';
10611        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
10612            var date;
10613            if (typeof options.expires == 'number') {
10614                date = new Date();
10615                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
10616            } else {
10617                date = options.expires;
10618            }
10619            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
10620        }
10621        // CAUTION: Needed to parenthesize options.path and options.domain
10622        // in the following expressions, otherwise they evaluate to undefined
10623        // in the packed version for some reason...
10624        var path = options.path ? '; path=' + (options.path) : '';
10625        var domain = options.domain ? '; domain=' + (options.domain) : '';
10626        var secure = options.secure ? '; secure' : '';
10627        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
10628    } else { // only name given, get cookie
10629        var cookieValue = null;
10630        if (document.cookie && document.cookie != '') {
10631            var cookies = document.cookie.split(';');
10632            for (var i = 0; i < cookies.length; i++) {
10633                var cookie = jQuery.trim(cookies[i]);
10634                // Does this cookie string begin with the name we want?
10635                if (cookie.substring(0, name.length + 1) == (name + '=')) {
10636                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
10637                    break;
10638                }
10639            }
10640        }
10641        return cookieValue;
10642    }
10643};
10644
10645/* Copyright jQuery Foundation and other contributors; Licensed MIT */
10646
10647(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(h.inline?h.dpDiv.parent()[0]:h.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}t.ui=t.ui||{},t.ui.version="1.12.1";var r=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},l=e.split(".")[0];e=e.split(".")[1];var h=l+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][h.toLowerCase()]=function(e){return!!t.data(e,h)},t[l]=t[l]||{},n=t[l][e],o=t[l][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:l,widgetName:e,widgetFullName:h}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o}
10647,t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=r++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t
vendor: 9,589 bytes, line 10647
10647(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var l=s.match(/^([\w:-]*)\s*(.*)$/),h=l[1]+o.eventNamespace,c=l[2];c?n.on(h,c,r):i.on(h,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,l=/top|center|bottom/,h=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,g,m,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),k={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,g=_.offset,m=t.extend({},g),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):l.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=l.test(i[1])?i[1]:"center",t=h.exec(i[0]),e=h.exec(i[1]),k[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?m.left+=p:"center"===n.at[0]&&(m.left+=p/2),"bottom"===n.at[1]?m.top+=f:"center"===n.at[1]&&(m.top+=f/2),u=e(k.at,p,f),m.left+=u[0],m.top+=u[1],this.each(function(){var s,r,l=t(this),h=l.outerWidth(),c=l.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),x=h+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},m),T=e(k.my,l.outerWidth(),l.outerHeight());"right"===n.my[0]?D.left-=h:"center"===n.my[0]&&(D.left-=h/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=T[0],D.top+=T[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:h,elemHeight:c,collisionPosition:s,collisionWidth:x,collisionHeight:C,offset:[u[0]+T[0],u[1]+T[1]],my:n.my,at:n.at,within:b,elem:l})}),n.using&&(r=function(t){var e=g.left-D.left,i=e+p-h,s=g.top-D.top,r=s+f-c,u={target:{element:v,left:g.left,top:g.top,width:p,height:f},element:{element:l,left:D.left,top:D.top,width:h,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};h>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),l.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,l=n-r,h=r+e.collisionWidth-a-n;e.collisionWidth>a?l>0&&0>=h?(i=t.left+l+e.collisionWidth-a-n,t.left+=l-i):t.left=h>0&&0>=l?n:l>h?n+a-e.collisionWidth:n:l>0?t.left+=l:h>0?t.left-=h:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,l=n-r,h=r+e.collisionHeight-a-n;e.collisionHeight>a?l>0&&0>=h?(i=t.top+l+e.collisionHeight-a-n,t.top+=l-i):t.top=h>0&&0>=l?n:l>h?n+a-e.collisionHeight:n:l>
vendor: 4,336 bytes, line 10647
106470?t.top+=l:h>0?t.top-=h:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,l=n.isWindow?n.scrollLeft:n.offset.left,h=t.left-e.collisionPosition.marginLeft,c=h-l,u=h+e.collisionWidth-r-l,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-l,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,l=n.isWindow?n.scrollTop:n.offset.top,h=t.top-e.collisionPosition.marginTop,c=h-l,u=h+e.collisionHeight-r-l,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-l,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,l,h=i.nodeName.toLowerCase();return"area"===h?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(h)?(r=!i.disabled,r&&(l=t(i).closest("fieldset")[0],l&&(r=!l.disabled))):r="a"===h?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(
vendor: 7,583 bytes, line 10647
10647),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.extend(t.ui,{datepicker:{version:"1.12.1"}});var h;t.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return a(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,o;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),o=this._newInst(t(e),n),o.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,o):n&&this._inlineDatepicker(e,o)},_newInst:function(e,i){var s=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?n(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.on("focus",this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,l,h,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(l=document.documentElement.clientWidth,h=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+c,h/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),h===n&&(h=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,l,h=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):h?"all"===i?t.extend({},h.settings):this._get(h,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),h&&(this._curInst===h&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(h,"min"),l=this._getMinMaxDate(h,"max"),a(h.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(h.settings.minDate=this._formatDate(h,r)),null!==l&&void 0!==n.dateFormat&&void 0===n.maxDate&&(h.settings.maxDate=this._formatDate(h,l)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),h),this._autoSize(h),this._setDate(h,o),this._updateAlternate(h),this._updateDatepicker(h)),void 0)}
vendor: 4,566 bytes, lines 10647-10648
10647,_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,l,h,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),l={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),l=t.datepicker._checkOffset(s,l,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:l.left+"px",top:l.top+"px"}),s.inline||(h=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[h]?s.dpDiv.show(h,t.datepicker._get(s,"showOptions"),c):s.dpDiv[h||"show"](h?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s))
10648}},_updateDatepicker:function(e){this.maxRows=4,h=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);
vendor: 10,556 bytes, line 10648
10648var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,l=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),h=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>l&&l>n?Math.abs(i.left+n-l):0),i.top-=Math.min(i.top,i.top+o>h&&h>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,l=0,h=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof h?h:(new Date).getFullYear()%100+parseInt(h,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(l).match(o);if(!a)throw"Missing number at position "+l;return l+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(l,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],l+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+l},x=function(){if(i.charAt(l)!==e.charAt(n))throw"Unexpected literal at position "+l;l++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>l&&(a=i.substr(l),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,l=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},h=function(t,e,i){var s=""+e;if(l(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return l(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||l("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=h("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=h("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=h("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=l("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":l("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),l=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,h=l.exec(i);h;){switch(h[2]||"d"){case"d":case"D":r+=parseInt(h[1],10);break;case"w":case"W":r+=7*parseInt(h[1],10);break;case"m":case"M":a+=parseInt(h[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(h[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}h=l.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null}
vendor: 6,672 bytes, line 10648
10648,_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,l,h,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,T,I,M,P,S,N,H,A,z,O,E,W,F,L,R=new Date,Y=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),B=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),X=this._get(t,"stepMonths"),$=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),J=this._getMinMaxDate(t,"min"),Q=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),Q)for(e=this._daylightSavingAdjust(new Date(Q.getFullYear(),Q.getMonth()-U[0]*U[1]+1,Q.getDate())),e=J&&J>e?J:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-X,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"e":"w")+"'>"+i+"</span></a>":q?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+X,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"w":"e")+"'>"+n+"</span></a>":q?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(B?"w":"e")+"'>"+n+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:Y,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,l=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",h=j?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(B?l:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(B?"":l)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),T=" ui-corner-all",I="",$){if(I+="<div class='ui-datepicker-group",U[1]>1)switch(C){case 0:I+=" ui-datepicker-group-first",T=" ui-corner-"+(B?"right":"left");break;case U[1]-1:I+=" ui-datepicker-group-last",T=" ui-corner-"+(B?"left":"right");break;default:I+=" ui-datepicker-group-middle",T=""}I+="'>"}for(I+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+T+"'>"+(/all|left/.test(T)&&0===k?B?o:s:"")+(/all|right/.test(T)&&0===k?B?s:o:"")+this._generateMonthYearHeader(t,Z,te,J,Q,k>0||C>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",M=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;7>w;w++)P=(w+c)%7,M+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[P]+"'>"+p[P]+"</span></th>";for(I+=M+"</tr></thead><tbody>",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),N=(this._getFirstDayOfMonth(te,Z)-c+7)%7,H=Math.ceil((N+S)/7),A=$?this.maxRows>H?this.maxRows:H:H,this.maxRows=A,z=this._daylightSavingAdjust(new Date(te,Z,1-N)),O=0;A>O;O++){for(I+="<tr>",E=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(z)+"</td>":"",w=0;7>w;w++)W=m?m.apply(t.input?t.input[0]:null,[z]):[!0,""],F=z.getMonth()!==Z,L=F&&!v||!W[0]||J&&J>z||Q&&z>Q,E+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(z.getTime()===D.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===z.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!_?"":" "+W[1]+(z.getTime()===G.getTime()?" "+this._currentClass:"")+(z.getTime()===Y.getTime()?" ui-datepicker-today":""))+"'"+(F&&!_||!W[2]?"":" title='"+W[2].replace(/'/g,"&#39;")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+z.getMonth()+"' data-year='"+z.getFullYear()+"'")+">"+(F&&!_?"&#xa0;":L?"<span class='ui-state-default'>"+z.getDate()+"</span>":"<a class='ui-state-default"+(z.getTime()===Y.getTime()?" ui-state-highlight":"")+(z.getTime()===G.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+"' href='#'>"+z.getDate()+"</a>")+"</td>",z.setDate(z.getDate()+1),z=this._daylightSavingAdjust(z);I+=E+"</tr>"}Z++,Z>11&&(Z=0,te++),I+="</tbody></table>"+($?"</div>"+(U[0]>0&&C===U[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),x+=I}y+=x}return y+=h,t._keyEvent=!1,y}
vendor: 4,843 bytes, lines 10648-10656
10648,_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var l,h,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(l=s&&s.getFullYear()===i,h=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!l||c>=s.getMonth())&&(!h||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(v||(b+=y+(!o&&m&&_?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!_)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";g>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,l=this._get(t,"yearRange");return l&&(i=l.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker});
10649
10650/* Japanese initialisation for the jQuery UI date picker plugin. */
10651$(function($){
10652	"use strict";
10653	$.datepicker.regional['ja'] = {
10654		clearText: 'クリア', clearStatus: '日付をクリアします',
10655		closeText: '閉じる', closeStatus: '変更せずに閉じます',
10656		prevText: '&#x3c;
10656前', prevStatus: '前月を表示します',
10657		prevBigText: '&#x3c;&#x3c;', prevBigStatus: '前年を表示します',
10658		nextText: '次&#x3e;', nextStatus: '翌月を表示します',
10659		nextBigText: '&#x3e;&#x3e;', nextBigStatus: '翌年を表示します',
10660		currentText: '今日', currentStatus: '今月を表示します',
10661		monthNames: ['1月','2月','3月','4月','5月','6月',
10662		'7月','8月','9月','10月','11月','12月'],
10663		monthNamesShort: ['1月','2月','3月','4月','5月','6月',
10664		'7月','8月','9月','10月','11月','12月'],
10665		monthStatus: '表示する月を変更します', yearStatus: '表示する年を変更します',
10666		weekHeader: '週', weekStatus: '暦週で第何週目かを表します',
10667		dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'],
10668		dayNamesShort: ['日','月','火','水','木','金','土'],
10669		dayNamesMin: ['日','月','火','水','木','金','土'],
10670		dayStatus: '週の始まりをDDにします', dateStatus: 'Md日(D)',
10671		dateFormat: 'yy/mm/dd', firstDay: 0,
10672		initStatus: '日付を選択します', isRTL: false,
10673		yearSuffix: "å¹´",
10674		showMonthAfterYear: true};
10675	$.datepicker.setDefaults($.datepicker.regional['ja']);
10676});
10677}) (jQuery);
10678
10679/*
10680 * jQuery ah-placeholder plugin 1.2
10681 *
10682 * https://github.com/ahomu/jquery.ah-placeholder
10683 * http://havelog.ayumusato.com/develop/javascript/e189-jquery-plugin-placeholder.html
10684 *
10685 * Copyright (c) 2011 Ayumu Sato ( http://havelog.ayumusato.com )
10686 *
10687 * Dual licensed under the MIT and GPL licenses:
10688 *   http://www.opensource.org/licenses/mit-license.php
10689 *   http://www.gnu.org/licenses/gpl.html
10690 */
10691eb$(function() {
10692	eb$('[placeholder]').ahPlaceholder({
10693		placeholderColor : 'gray',
10694		placeholderAttr : 'placeholder',
10695		likeApple : false
10696		});
10697	});
10698
10699(function(eb$) {
10700
10701eb$.fn.ahPlaceholder = function(options)
10702{
10703    // property
10704    var defaults = {
10705            placeholderColor : 'silver',
10706            placeholderAttr  : 'title',
10707            likeApple        : false
10708        },
10709        settings = eb$.extend({}, defaults, options);
10710
10711    var ngCode  = [
10712            ' ',  // --------------
10713            '0',  // ???
10714            '9',  // tab
10715            '16', // shift
10716            '17', // ctrl
10717            '32', // space
10718            '27', // esc
10719            '37', // left
10720            '38', // up
10721            '39', // right
10722            '40', // down
10723            '91', // Cmd(L), Win(L)
10724            '92', // Win(R)
10725            '93', // Cmd(R)
10726            '112',// F1
10727            '113',// F2
10728            '114',// F3
10729            '115',// F4
10730            '116',// F5
10731            '117',// F6
10732            '118',// F7
10733            '119',// F8
10734            '120',// F9
10735            '121',// F10
10736            '122',// F11
10737            '123',// F12
10738            ' '   // ---------------
10739        ].join('@'),
10740        keyCatch = (function(){
10741            if ( document.all ) {
10742                return function(e){return e.keyCode;};
10743            } else if ( document.getElementById ) {
10744                return function(e){return (e.keyCode)? e.keyCode: e.charCode;};
10745            } else if ( document.layers ) {
10746                return function(e){return e.which;};
10747            }
10748        })();
10749
10750    // method
10751    var init    = function()
10752        {
10753            // placeholderが有効なら処理を必要としないので終了
10754            if ( settings.placeholderAttr === 'placeholder' && ('placeholder' in document.createElement('input')) ) {
10755                return;
10756            }
10757
10758            eb$.data(this, 'placeholder-string', eb$(this).attr(settings.placeholderAttr));
10759            eb$.data(this, 'placeholder-color', eb$(this).css('color'));
10760
10761            var phString    = eb$.data(this, 'placeholder-string'),
10762                self        = this,
10763                eb$self       = eb$(this);
10764
10765            if ( self.value === '' ) {
10766                self.value = phString;
10767                eb$self.css('color', settings.placeholderColor);
10768            }
10769
10770            if ( settings.likeApple === true ) {
10771                eb$self.bind('mousedown', moveCursorToHead);
10772                eb$self.bind('keydown', onKeydown);
10773                eb$self.bind('keyup', resetPlaceholder);
10774            } else {
10775                eb$self.bind('focus', onFocus);
10776                eb$self.bind('blur', resetPlaceholder);
10777            }
10778
10779            eb$self.closest('form').submit(function() {
10780                if ( self.value === eb$.data(self, 'placeholder-string')
10781                     && eb$self.css('color') === eb$('<div/>').css('color', settings.placeholderColor).css('color')) {
10782                         self.value = '';
10783                }
10784                return true;
10785            });
10786        },
10787        onKeydown = function(e)
10788        {
10789            if ( this.value === eb$.data(this, 'placeholder-string') ) {
10790                var key = keyCatch(e);
10791
10792                if ( ngCode.indexOf('@'+key+'@') !== -1 ) {
10793                    // tabの入力は認める
10794                    return ( key === 9 );
10795                } else {
10796                    _clearPlaceholder(this);
10797                }
10798            }
10799        },
10800        onFocus = function()
10801        {
10802            if ( this.value === eb$.data(this, 'placeholder-string') ) {
10803                _clearPlaceholder(this);
10804            }
10805        },
10806        resetPlaceholder = function(e)
10807        {
10808            if ( this.value === '' ) {
10809                _setPlaceholder(this);
10810
10811                if ( e.type === 'keyup' ) {
10812                    moveCursorToHead.apply(this);
10813                }
10814            }
10815        },
10816        moveCursorToHead = function()
10817        {
10818            if ( this.value === eb$.data(this, 'placeholder-string') ) {
10819                eb$(this).focus();
10820                if ( this.createTextRange ) {
10821                    var range = this.createTextRange();
10822                    range.collapse();
10823                    range.moveEnd('character', 0);
10824                    range.moveStart('character', 0);
10825                    setTimeout(function() {
10826                        range.select();
10827                    }, 17);
10828                }
10829                else if ( this.setSelectionRange ) {
10830                    this.setSelectionRange(0, 0);
10831                }
10832                return false;
10833            }
10834        },
10835        _setPlaceholder = function(self)
10836        {
10837            self.value = eb$.data(self, 'placeholder-string');
10838            eb$(self).css('color', settings.placeholderColor);
10839        },
10840        _clearPlaceholder = function(self)
10841        {
10842            self.value = '';
10843            eb$(self).css('color', eb$.data(self, 'placeholder-color'));
10844        };
10845    // construct
10846    this.each(function()
10847    {
10848        init.apply(this);
10849    });
10850
10851    return this;
10852};
10853})(jQuery);
10854/*! jQuery Validation Plugin - v1.13.1 - 10/14/2014
10855 * http://jqueryvalidation.org/
10856 * Copyright (c) 2014 J旦rn Zaefferer; Licensed MIT */
10857!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){a.extend(a.fn,{validate:function(b){if(!this.length)return void(b&&b.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."));var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.validateDelegate(":submit","click",function(b){c.settings.submitHandler&&(c.submitButton=b.target),a(b.target).hasClass("cancel")&&(c.cancelSubmit=!0),void 0!==a(b.target).attr("formnovalidate")&&(c.cancelSubmit=!0)}),this.submit(function(b){function d(){var d,e;return c.settings.submitHandler?(c.submitButton&&(d=a("<input type='hidden'/>").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),e=c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&&d.remove(),void 0!==e?e:!1):!0}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c;return a(this[0]).is("form")?b=this.validate().form():(b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b})),b},removeAttrs:function(b){var c={},d=this;return a.each(b.split(/\s/),function(a,b){c[b]=d.attr(b),d.removeAttr(b)}),c},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(b,c){i[c]=f[c],delete f[c],"required"===c&&a(j).removeAttr("aria-required")}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g),a(j).attr("aria-required","true")),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}),a.extend(a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){return!!a.trim(""+a(b).val())},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(a,b){(9!==b.which||""!==this.elementValue(a))&&(a.name in this.submitted||a===this.lastElement)&&this.element
10857(a)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date ( ISO ).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){var c=a.data(this[0].form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!this.is(e.ignore)&&e[d].call(c,this[0],b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).validateDelegate(":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox']","focusin focusout keyup",b).validateDelegate("select, option, [type='radio'], [type='checkbox']","click",b),this.settings.invalidHandler&&a(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler),a(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c=this.clean(b),d=this.validationTargetFor(c),e=!0;return this.lastElement=d,void 0===d?delete this.invalid[c.name]:(this.prepareElement(d),this.currentElements=a(d),e=this.check(d)!==!1,e?delete this.invalid[d.name]:this.invalid[d.name]=!0),a(b).attr("aria-invalid",!e),this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),e},showErrors:function(b){if(b){a.extend(this.errorMap,b),this.errorList=[];for(var c in b)this.errorList.push({message:b[c],element:this.findByName(c)[0]});this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors(),this.elements().removeClass(this.settings.errorClass).removeData("previousValue").removeAttr("aria-invalid")},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)c++;return c},hideErrors:function(){this.hideThese(this.toHide)}
10857,hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled], [readonly]").not(this.settings.ignore).filter(function(){return!this.name&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in c||!b.objectLength(a(this).rules())?!1:(c[this.name]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([]),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d=a(b),e=b.type;return"radio"===e||"checkbox"===e?a("input[name='"+b.name+"']:checked").val():"number"===e&&"undefined"!=typeof b.validity?b.validity.badInput?!1:d.val():(c=d.val(),"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f=a(b).rules(),g=a.map(f,function(a,b){return b}).length,h=!1,i=this.elementValue(b);for(d in f){e={method:d,parameters:f[d]};try{if(c=a.validator.methods[d].call(this,i,b,e.parameters),"dependency-mismatch"===c&&1===g){h=!0;continue}if(h=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(j){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",j),j}}if(!h)return this.objectLength(f)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(void 0!==arguments[a])return arguments[a];return void 0},defaultMessage:function(b,c){return this.findDefined(this.customMessage(b.name,c),this.customDataMessage(b,c),!this.settings.ignoreTitle&&b.title||void 0,a.validator.messages[c],"<strong>Warning: No message defined for "+b.name+"</strong>")},formatAndAdd:function(b,c){var d=this.defaultMessage(b,c.method),e=/\$?\{(\d+)\}/g;"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),this.errorList.push({message:d,element:b,method:c.method}),this.errorMap[b.name]=d,this.submitted[b.name]=d},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g=this.errorsFor(b),h=this.idOrName(b),i=a(b).attr("aria-describedby");
10857g.length?(g.removeClass(this.settings.validClass).addClass(this.settings.errorClass),g.html(c)):(g=a("<"+this.settings.errorElement+">").attr("id",h+"-error").addClass(this.settings.errorClass).html(c||""),d=g,this.settings.wrapper&&(d=g.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement(d,a(b)):d.insertAfter(b),g.is("label")?g.attr("for",h):0===g.parents("label[for='"+h+"']").length&&(f=g.attr("id").replace(/(:|\.|\[|\])/g,"\\$1"),i?i.match(new RegExp("\\b"+f+"\\b"))||(i+=" "+f):i=f,a(b).attr("aria-describedby",i),e=this.groups[b.name],e&&a.each(this.groups,function(b,c){c===e&&a("[name='"+b+"']",this.currentForm).attr("aria-describedby",g.attr("id"))}))),!c&&this.settings.success&&(g.text(""),"string"==typeof this.settings.success?g.addClass(this.settings.success):this.settings.success(g,b)),this.toShow=this.toShow.add(g)},errorsFor:function(b){var c=this.idOrName(b),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+d.replace(/\s+/g,", #")),this.errors().filter(e)},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+b+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):!0},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);
10857return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(a){this.pending[a.name]||(this.pendingRequest++,this.pending[a.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b){return a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,"remote")})}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),/min|max/.test(c)&&(null===g||/number|range|text/.test(g))&&(d=Number(d)),d||0===d?e[c]=d:g===c&&"range"!==g&&(e[c]=!0);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b);for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),void 0!==d&&(e[c]=d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0!==e.param?e.param:!0:delete b[d]}}),a.each(b,function(d,e){b[d]=a.isFunction(e)?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:a.trim(b).length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},creditcard:function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 \-]+/.test(a))return!1;var c,d,e=0,f=0,g=!1;
10857if(a=a.replace(/\D/g,""),a.length<13||a.length>19)return!1;for(c=a.length-1;c>=0;c--)d=a.charAt(c),f=parseInt(d,10),g&&(f*=2)>9&&(f-=9),e+=f,g=!g;return e%10===0},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||d>=e},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||c>=a},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d){if(this.optional(c))return"dependency-mismatch";var e,f,g=this.previousValue(c);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),g.originalMessage=this.settings.messages[c.name].remote,this.settings.messages[c.name].remote=g.message,d="string"==typeof d&&{url:d}||d,g.old===b?g.valid:(g.old=b,e=this,this.startRequest(c),f={},f[c.name]=b,a.ajax(a.extend(!0,{url:d,mode:"abort",port:"validate"+c.name,dataType:"json",data:f,context:e.currentForm,success:function(d){var f,h,i,j=d===!0||"true"===d;e.settings.messages[c.name].remote=g.originalMessage,j?(i=e.formSubmitted,e.prepareElement(c),e.formSubmitted=i,e.successList.push(c),delete e.invalid[c.name],e.showErrors()):(f={},h=d||e.defaultMessage(c,"remote"),f[c.name]=g.message=a.isFunction(h)?h(b):h,e.invalid[c.name]=!0,e.showErrors(f)),g.valid=j,e.stopRequest(c,j)}},d)),"pending")}}}),a.format=function(){throw"$.format has been deprecated. Please use $.validator.format instead."};var b,c={};a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)}),a.extend(a.fn,{validateDelegate:function(b,c,d){return this.bind(c,function(c){var e=a(c.target);return e.is(b)?d.apply(e,arguments):void 0})}})});
10858/*!
10859 * jQuery hashchange event - v1.3 - 7/21/2010
10860 * http://benalman.com/projects/jquery-hashchange-plugin/
10861 * 
10862 * Copyright (c) 2010 "Cowboy" Ben Alman
10863 * Dual licensed under the MIT and GPL licenses.
10864 * http://benalman.com/about/license/
10865 */
10866
10867// Script: jQuery hashchange event
10868//
10869// *Version: 1.3, Last updated: 7/21/2010*
10870// 
10871// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/
10872// GitHub       - http://github.com/cowboy/jquery-hashchange/
10873// Source       - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js
10874// (Minified)   - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped)
10875// 
10876// About: License
10877// 
10878// Copyright (c) 2010 "Cowboy" Ben Alman,
10879// Dual licensed under the MIT and GPL licenses.
10880// http://benalman.com/about/license/
10881// 
10882// About: Examples
10883// 
10884// These working examples, complete with fully commented code, illustrate a few
10885// ways in which this plugin can be used.
10886// 
10887// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/
10888// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/
10889// 
10890// About: Support and Testing
10891// 
10892// Information about what version or versions of jQuery this plugin has been
10893// tested with, what browsers it has been tested in, and where the unit tests
10894// reside (so you can test it yourself).
10895// 
10896// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2
10897// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5,
10898//                   Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5.
10899// Unit Tests      - http://benalman.com/code/projects/jquery-hashchange/unit/
10900// 
10901// About: Known issues
10902// 
10903// While this jQuery hashchange event implementation is quite stable and
10904// robust, there are a few unfortunate browser bugs surrounding expected
10905// hashchange event-based behaviors, independent of any JavaScript
10906// window.onhashchange abstraction. See the following examples for more
10907// information:
10908// 
10909// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/
10910// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/
10911// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/
10912// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/
10913// 
10914// Also note that should a browser natively support the window.onhashchange 
10915// event, but not report that it does, the fallback polling loop will be used.
10916// 
10917// About: Release History
10918// 
10919// 1.3   - (7/21/2010) Reorganized IE6/7 Iframe code to make it more
10920//         "removable" for mobile-only development. Added IE6/7 document.title
10921//         support. Attempted to make Iframe as hidden as possible by using
10922//         techniques from http://www.paciellogroup.com/blog/?p=604. Added 
10923//         support for the "shortcut" format $(window).hashchange( fn ) and
10924//         $(window).hashchange() like jQuery provides for built-in events.
10925//         Renamed jQuery.hashchangeDelay to <jQuery.fn.hashchange.delay> and
10926//         lowered its default value to 50. Added <jQuery.fn.hashchange.domain>
10927//         and <jQuery.fn.hashchange.src> properties plus document-domain.html
10928//         file to address access denied issues when setting document.domain in
10929//         IE6/7.
10930// 1.2   - (2/11/2010) Fixed a bug where coming back to a page using this plugin
10931//         from a page on another domain would cause an error in Safari 4. Also,
10932//         IE6/7 Iframe is now inserted after the body (this actually works),
10933//         which prevents the page from scrolling when the event is first bound.
10934//         Event can also now be bound before DOM ready, but it won't be usable
10935//         before then in IE6/7.
10936// 1.1   - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug
10937//         where browser version is incorrectly reported as 8.0, despite
10938//         inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag.
10939// 1.0   - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special
10940//         window.onhashchange functionality into a separate plugin for users
10941//         who want just the basic event & back button support, without all the
10942//         extra awesomeness that BBQ provides. This plugin will be included as
10943//         part of jQuery BBQ, but also be available separately.
10944
10945(function($,window,undefined){
10946  '$:nomunge'; // Used by YUI compressor.
10947  
10948  // Reused string.
10949  var str_hashchange = 'hashchange',
10950    
10951    // Method / object references.
10952    doc = document,
10953    fake_onhashchange,
10954    special = $.event.special,
10955    
10956    // Does the browser support window.onhashchange? Note that IE8 running in
10957    // IE7 compatibility mode reports true for 'onhashchange' in window, even
10958    // though the event isn't supported, so also test document.documentMode.
10959    doc_mode = doc.documentMode,
10960    supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 );
10961  
10962  // Get location.hash (or what you'd expect location.hash to be) sans any
10963  // leading #. Thanks for making this necessary, Firefox!
10964  function get_fragment( url ) {
10965    url = url || location.href;
10966    return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' );
10967  };
10968  
10969  // Method: jQuery.fn.hashchange
10970  // 
10971  // Bind a handler to the window.onhashchange event or trigger all bound
10972  // window.onhashchange event handlers. This behavior is consistent with
10973  // jQuery's built-in event handlers.
10974  // 
10975  // Usage:
10976  // 
10977  // > jQuery(window).hashchange( [ handler ] );
10978  // 
10979  // Arguments:
10980  // 
10981  //  handler - (Function) Optional handler to be bound to the hashchange
10982  //    event. This is a "shortcut" for the more verbose form:
10983  //    jQuery(window).bind( 'hashchange', handler ). If handler is omitted,
10984  //    all bound window.onhashchange event handlers will be triggered. This
10985  //    is a shortcut for the more verbose
10986  //    jQuery(window).trigger( 'hashchange' ). These forms are described in
10987  //    the <hashchange event> section.
10988  // 
10989  // Returns:
10990  // 
10991  //  (jQuery) The initial jQuery collection of elements.
10992  
10993  // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and
10994  // $(elem).hashchange() for triggering, like jQuery does for built-in events.
10995  $.fn[ str_hashchange ] = function( fn ) {
10996    return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange );
10997  };
10998  
10999  // Property: jQuery.fn.hashchange.delay
11000  // 
11001  // The numeric interval (in milliseconds) at which the <hashchange event>
11002  // polling loop executes. Defaults to 50.
11003  
11004  // Property: jQuery.fn.hashchange.domain
11005  // 
11006  // If you're setting document.domain in your JavaScript, and you want hash
11007  // history to work in IE6/7, not only must this property be set, but you must
11008  // also set document.domain BEFORE jQuery is loaded into the page. This
11009  // property is only applicable if you are supporting IE6/7 (or IE8 operating
11010  // in "IE7 compatibility" mode).
11011  // 
11012  // In addition, the <jQuery.fn.hashchange.src> property must be set to the
11013  // path of the included "document-domain.html" file, which can be renamed or
11014  // modified if necessary (note that the document.domain specified must be the
11015  // same in both your main JavaScript as well as in this file).
11016  // 
11017  // Usage:
11018  // 
11019  // jQuery.fn.hashchange.domain = document.domain;
11020  
11021  // Property: jQuery.fn.hashchange.src
11022  // 
11023  // If, for some reason, you need to specify an Iframe src file (for example,
11024  // when setting document.domain as in <jQuery.fn.hashchange.domain>), you can
11025  // do so using this property. Note that when using this property, history
11026  // won't be recorded in IE6/7 until the Iframe src file loads. This property
11027  // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7
11028  // compatibility" mode).
11029  // 
11030  // Usage:
11031  // 
11032  // jQuery.fn.hashchange.src = 'path/to/file.html';
11033  
11034  $.fn[ str_hashchange ].delay = 50;
11035  /*
11036  $.fn[ str_hashchange ].domain = null;
11037  $.fn[ str_hashchange ].src = null;
11038  */
11039  
11040  // Event: hashchange event
11041  // 
11042  // Fired when location.hash changes. In browsers that support it, the native
11043  // HTML5 window.onhashchange event is used, otherwise a polling loop is
11044  // initialized, running every <jQuery.fn.hashchange.delay> milliseconds to
11045  // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7
11046  // compatibility" mode), a hidden Iframe is created to allow the back button
11047  // and hash-based history to work.
11048  // 
11049  // Usage as described in <jQuery.fn.hashchange>:
11050  // 
11051  // > // Bind an event handler.
11052  // > jQuery(window).hashchange( function(e) {
11053  // >   var hash = location.hash;
11054  // >   ...
11055  // > });
11056  // > 
11057  // > // Manually trigger the event handler.
11058  // > jQuery(window).hashchange();
11059  // 
11060  // A more verbose usage that allows for event namespacing:
11061  // 
11062  // > // Bind an event handler.
11063  // > jQuery(window).bind( 'hashchange', function(e) {
11064  // >   var hash = location.hash;
11065  // >   ...
11066  // > });
11067  // > 
11068  // > // Manually trigger the event handler.
11069  // > jQuery(window).trigger( 'hashchange' );
11070  // 
11071  // Additional Notes:
11072  // 
11073  // * The polling loop and Iframe are not created until at least one handler
11074  //   is actually bound to the 'hashchange' event.
11075  // * If you need the bound handler(s) to execute immediately, in cases where
11076  //   a location.hash exists on page load, via bookmark or page refresh for
11077  //   example, use jQuery(window).hashchange() or the more verbose 
11078  //   jQuery(window).trigger( 'hashchange' ).
11079  // * The event can be bound before DOM ready, but since it won't be usable
11080  //   before then in IE6/7 (due to the necessary Iframe), recommended usage is
11081  //   to bind it inside a DOM ready handler.
11082  
11083  // Override existing $.event.special.hashchange methods (allowing this plugin
11084  // to be defined after jQuery BBQ in BBQ's source code).
11085  special[ str_hashchange ] = $.extend( special[ str_hashchange ], {
11086    
11087    // Called only when the first 'hashchange' event is bound to window.
11088    setup: function() {
11089      // If window.onhashchange is supported natively, there's nothing to do..
11090      if ( supports_onhashchange ) { return false; }
11091      
11092      // Otherwise, we need to create our own. And we don't want to call this
11093      // until the user binds to the event, just in case they never do, since it
11094      // will create a polling loop and possibly even a hidden Iframe.
11095      $( fake_onhashchange.start );
11096    },
11097    
11098    // Called only when the last 'hashchange' event is unbound from window.
11099    teardown: function() {
11100      // If window.onhashchange is supported natively, there's nothing to do..
11101      if ( supports_onhashchange ) { return false; }
11102      
11103      // Otherwise, we need to stop ours (if possible).
11104      $( fake_onhashchange.stop );
11105    }
11106    
11107  });
11108  
11109  // fake_onhashchange does all the work of triggering the window.onhashchange
11110  // event for browsers that don't natively support it, including creating a
11111  // polling loop to watch for hash changes and in IE 6/7 creating a hidden
11112  // Iframe to enable back and forward.
11113  fake_onhashchange = (function(){
11114    var self = {},
11115      timeout_id,
11116      
11117      // Remember the initial hash so it doesn't get triggered immediately.
11118      last_hash = get_fragment(),
11119      
11120      fn_retval = function(val){ return val; },
11121      history_set = fn_retval,
11122      history_get = fn_retval;
11123    
11124    // Start the polling loop.
11125    self.start = function() {
11126      timeout_id || poll();
11127    };
11128    
11129    // Stop the polling loop.
11130    self.stop = function() {
11131      timeout_id && clearTimeout( timeout_id );
11132      timeout_id = undefined;
11133    };
11134    
11135    // This polling loop checks every $.fn.hashchange.delay milliseconds to see
11136    // if location.hash has changed, and triggers the 'hashchange' event on
11137    // window when necessary.
11138    function poll() {
11139      var hash = get_fragment(),
11140        history_hash = history_get( last_hash );
11141      
11142      if ( hash !== last_hash ) {
11143        history_set( last_hash = hash, history_hash );
11144        
11145        $(window).trigger( str_hashchange );
11146        
11147      } else if ( history_hash !== last_hash ) {
11148        location.href = location.href.replace( /#.*/, '' ) + history_hash;
11149      }
11150      
11151      timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay );
11152    };
11153    
11154    // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
11155    // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv
11156    // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
11157    $.support.msie && !supports_onhashchange && (function(){
11158      // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8
11159      // when running in "IE7 compatibility" mode.
11160      
11161      var iframe,
11162        iframe_src;
11163      
11164      // When the event is bound and polling starts in IE 6/7, create a hidden
11165      // Iframe for history handling.
11166      self.start = function(){
11167        if ( !iframe ) {
11168          iframe_src = $.fn[ str_hashchange ].src;
11169          iframe_src = iframe_src && iframe_src + get_fragment();
11170          
11171          // Create hidden Iframe. Attempt to make Iframe as hidden as possible
11172          // by using techniques from http://www.paciellogroup.com/blog/?p=604.
11173          iframe = $('<iframe tabindex="-1" title="empty"/>').hide()
11174            
11175            // When Iframe has completely loaded, initialize the history and
11176            // start polling.
11177            .one( 'load', function(){
11178              iframe_src || history_set( get_fragment() );
11179              poll();
11180            })
11181            
11182            // Load Iframe src if specified, otherwise nothing.
11183            .attr( 'src', iframe_src || 'javascript:0' )
11184            
11185            // Append Iframe after the end of the body to prevent unnecessary
11186            // initial page scrolling (yes, this works).
11187            .insertAfter( 'body' )[0].contentWindow;
11188          
11189          // Whenever `document.title` changes, update the Iframe's title to
11190          // prettify the back/next history menu entries. Since IE sometimes
11191          // errors with "Unspecified error" the very first time this is set
11192          // (yes, very useful) wrap this with a try/catch block.
11193          doc.onpropertychange = function(){
11194            try {
11195              if ( event.propertyName === 'title' ) {
11196                iframe.document.title = doc.title;
11197              }
11198            } catch(e) {}
11199          };
11200          
11201        }
11202      };
11203      
11204      // Override the "stop" method since an IE6/7 Iframe was created. Even
11205      // if there are no longer any bound event handlers, the polling loop
11206      // is still necessary for back/next to work at all!
11207      self.stop = fn_retval;
11208      
11209      // Get history by looking at the hidden Iframe's location.hash.
11210      history_get = function() {
11211        return get_fragment( iframe.location.href );
11212      };
11213      
11214      // Set a new history item by opening and then closing the Iframe
11215      // document, *then* setting its location.hash. If document.domain has
11216      // been set, update that as well.
11217      history_set = function( hash, history_hash ) {
11218        var iframe_doc = iframe.document,
11219          domain = $.fn[ str_hashchange ].domain;
11220        
11221        if ( hash !== history_hash ) {
11222          // Update Iframe with any initial `document.title` that might be set.
11223          iframe_doc.title = doc.title;
11224          
11225          // Opening the Iframe's document after it has been closed is what
11226          // actually adds a history entry.
11227          iframe_doc.open();
11228          
11229          // Set document.domain for the Iframe document as well, if necessary.
11230          domain && iframe_doc.write( '<script>document.domain="' + domain + '"</script>' );
11231          
11232          iframe_doc.close();
11233          
11234          // Update the Iframe's hash, for great justice.
11235          iframe.location.hash = hash;
11236        }
11237      };
11238      
11239    })();
11240    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11241    // ^^^^^^^^^^^^^^^^^^^ REMOVE IF NOT SUPPORTING IE6/7/8 ^^^^^^^^^^^^^^^^^^^
11242    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11243    
11244    return self;
11245  })();
11246  
11247})(jQuery,this);

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