| /* global Symbol */ | 
 | // Defining this global in .eslintrc.json would create a danger of using the global | 
 | // unguarded in another place, it seems safer to define global only for this module | 
 |  | 
 | define( [ | 
 | 	"./var/arr", | 
 | 	"./var/getProto", | 
 | 	"./var/slice", | 
 | 	"./var/flat", | 
 | 	"./var/push", | 
 | 	"./var/indexOf", | 
 | 	"./var/class2type", | 
 | 	"./var/toString", | 
 | 	"./var/hasOwn", | 
 | 	"./var/fnToString", | 
 | 	"./var/ObjectFunctionString", | 
 | 	"./var/support", | 
 | 	"./var/isFunction", | 
 | 	"./var/isWindow", | 
 | 	"./core/DOMEval", | 
 | 	"./core/toType" | 
 | ], function( arr, getProto, slice, flat, push, indexOf, | 
 | 	class2type, toString, hasOwn, fnToString, ObjectFunctionString, | 
 | 	support, isFunction, isWindow, DOMEval, toType ) { | 
 |  | 
 | "use strict"; | 
 |  | 
 | var | 
 | 	version = "@VERSION", | 
 |  | 
 | 	// Define a local copy of jQuery | 
 | 	jQuery = function( selector, context ) { | 
 |  | 
 | 		// The jQuery object is actually just the init constructor 'enhanced' | 
 | 		// Need init if jQuery is called (just allow error to be thrown if not included) | 
 | 		return new jQuery.fn.init( selector, context ); | 
 | 	}; | 
 |  | 
 | jQuery.fn = jQuery.prototype = { | 
 |  | 
 | 	// The current version of jQuery being used | 
 | 	jquery: version, | 
 |  | 
 | 	constructor: jQuery, | 
 |  | 
 | 	// The default length of a jQuery object is 0 | 
 | 	length: 0, | 
 |  | 
 | 	toArray: function() { | 
 | 		return slice.call( this ); | 
 | 	}, | 
 |  | 
 | 	// Get the Nth element in the matched element set OR | 
 | 	// Get the whole matched element set as a clean array | 
 | 	get: function( num ) { | 
 |  | 
 | 		// Return all the elements in a clean array | 
 | 		if ( num == null ) { | 
 | 			return slice.call( this ); | 
 | 		} | 
 |  | 
 | 		// Return just the one element from the set | 
 | 		return num < 0 ? this[ num + this.length ] : this[ num ]; | 
 | 	}, | 
 |  | 
 | 	// Take an array of elements and push it onto the stack | 
 | 	// (returning the new matched element set) | 
 | 	pushStack: function( elems ) { | 
 |  | 
 | 		// Build a new jQuery matched element set | 
 | 		var ret = jQuery.merge( this.constructor(), elems ); | 
 |  | 
 | 		// Add the old object onto the stack (as a reference) | 
 | 		ret.prevObject = this; | 
 |  | 
 | 		// Return the newly-formed element set | 
 | 		return ret; | 
 | 	}, | 
 |  | 
 | 	// Execute a callback for every element in the matched set. | 
 | 	each: function( callback ) { | 
 | 		return jQuery.each( this, callback ); | 
 | 	}, | 
 |  | 
 | 	map: function( callback ) { | 
 | 		return this.pushStack( jQuery.map( this, function( elem, i ) { | 
 | 			return callback.call( elem, i, elem ); | 
 | 		} ) ); | 
 | 	}, | 
 |  | 
 | 	slice: function() { | 
 | 		return this.pushStack( slice.apply( this, arguments ) ); | 
 | 	}, | 
 |  | 
 | 	first: function() { | 
 | 		return this.eq( 0 ); | 
 | 	}, | 
 |  | 
 | 	last: function() { | 
 | 		return this.eq( -1 ); | 
 | 	}, | 
 |  | 
 | 	even: function() { | 
 | 		return this.pushStack( jQuery.grep( this, function( _elem, i ) { | 
 | 			return ( i + 1 ) % 2; | 
 | 		} ) ); | 
 | 	}, | 
 |  | 
 | 	odd: function() { | 
 | 		return this.pushStack( jQuery.grep( this, function( _elem, i ) { | 
 | 			return i % 2; | 
 | 		} ) ); | 
 | 	}, | 
 |  | 
 | 	eq: function( i ) { | 
 | 		var len = this.length, | 
 | 			j = +i + ( i < 0 ? len : 0 ); | 
 | 		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); | 
 | 	}, | 
 |  | 
 | 	end: function() { | 
 | 		return this.prevObject || this.constructor(); | 
 | 	}, | 
 |  | 
 | 	// For internal use only. | 
 | 	// Behaves like an Array's method, not like a jQuery method. | 
 | 	push: push, | 
 | 	sort: arr.sort, | 
 | 	splice: arr.splice | 
 | }; | 
 |  | 
 | jQuery.extend = jQuery.fn.extend = function() { | 
 | 	var options, name, src, copy, copyIsArray, clone, | 
 | 		target = arguments[ 0 ] || {}, | 
 | 		i = 1, | 
 | 		length = arguments.length, | 
 | 		deep = false; | 
 |  | 
 | 	// Handle a deep copy situation | 
 | 	if ( typeof target === "boolean" ) { | 
 | 		deep = target; | 
 |  | 
 | 		// Skip the boolean and the target | 
 | 		target = arguments[ i ] || {}; | 
 | 		i++; | 
 | 	} | 
 |  | 
 | 	// Handle case when target is a string or something (possible in deep copy) | 
 | 	if ( typeof target !== "object" && !isFunction( target ) ) { | 
 | 		target = {}; | 
 | 	} | 
 |  | 
 | 	// Extend jQuery itself if only one argument is passed | 
 | 	if ( i === length ) { | 
 | 		target = this; | 
 | 		i--; | 
 | 	} | 
 |  | 
 | 	for ( ; i < length; i++ ) { | 
 |  | 
 | 		// Only deal with non-null/undefined values | 
 | 		if ( ( options = arguments[ i ] ) != null ) { | 
 |  | 
 | 			// Extend the base object | 
 | 			for ( name in options ) { | 
 | 				copy = options[ name ]; | 
 |  | 
 | 				// Prevent Object.prototype pollution | 
 | 				// Prevent never-ending loop | 
 | 				if ( name === "__proto__" || target === copy ) { | 
 | 					continue; | 
 | 				} | 
 |  | 
 | 				// Recurse if we're merging plain objects or arrays | 
 | 				if ( deep && copy && ( jQuery.isPlainObject( copy ) || | 
 | 					( copyIsArray = Array.isArray( copy ) ) ) ) { | 
 | 					src = target[ name ]; | 
 |  | 
 | 					// Ensure proper type for the source value | 
 | 					if ( copyIsArray && !Array.isArray( src ) ) { | 
 | 						clone = []; | 
 | 					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { | 
 | 						clone = {}; | 
 | 					} else { | 
 | 						clone = src; | 
 | 					} | 
 | 					copyIsArray = false; | 
 |  | 
 | 					// Never move original objects, clone them | 
 | 					target[ name ] = jQuery.extend( deep, clone, copy ); | 
 |  | 
 | 				// Don't bring in undefined values | 
 | 				} else if ( copy !== undefined ) { | 
 | 					target[ name ] = copy; | 
 | 				} | 
 | 			} | 
 | 		} | 
 | 	} | 
 |  | 
 | 	// Return the modified object | 
 | 	return target; | 
 | }; | 
 |  | 
 | jQuery.extend( { | 
 |  | 
 | 	// Unique for each copy of jQuery on the page | 
 | 	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), | 
 |  | 
 | 	// Assume jQuery is ready without the ready module | 
 | 	isReady: true, | 
 |  | 
 | 	error: function( msg ) { | 
 | 		throw new Error( msg ); | 
 | 	}, | 
 |  | 
 | 	noop: function() {}, | 
 |  | 
 | 	isPlainObject: function( obj ) { | 
 | 		var proto, Ctor; | 
 |  | 
 | 		// Detect obvious negatives | 
 | 		// Use toString instead of jQuery.type to catch host objects | 
 | 		if ( !obj || toString.call( obj ) !== "[object Object]" ) { | 
 | 			return false; | 
 | 		} | 
 |  | 
 | 		proto = getProto( obj ); | 
 |  | 
 | 		// Objects with no prototype (e.g., `Object.create( null )`) are plain | 
 | 		if ( !proto ) { | 
 | 			return true; | 
 | 		} | 
 |  | 
 | 		// Objects with prototype are plain iff they were constructed by a global Object function | 
 | 		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; | 
 | 		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; | 
 | 	}, | 
 |  | 
 | 	isEmptyObject: function( obj ) { | 
 | 		var name; | 
 |  | 
 | 		for ( name in obj ) { | 
 | 			return false; | 
 | 		} | 
 | 		return true; | 
 | 	}, | 
 |  | 
 | 	// Evaluates a script in a provided context; falls back to the global one | 
 | 	// if not specified. | 
 | 	globalEval: function( code, options, doc ) { | 
 | 		DOMEval( code, { nonce: options && options.nonce }, doc ); | 
 | 	}, | 
 |  | 
 | 	each: function( obj, callback ) { | 
 | 		var length, i = 0; | 
 |  | 
 | 		if ( isArrayLike( obj ) ) { | 
 | 			length = obj.length; | 
 | 			for ( ; i < length; i++ ) { | 
 | 				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { | 
 | 					break; | 
 | 				} | 
 | 			} | 
 | 		} else { | 
 | 			for ( i in obj ) { | 
 | 				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { | 
 | 					break; | 
 | 				} | 
 | 			} | 
 | 		} | 
 |  | 
 | 		return obj; | 
 | 	}, | 
 |  | 
 | 	// results is for internal usage only | 
 | 	makeArray: function( arr, results ) { | 
 | 		var ret = results || []; | 
 |  | 
 | 		if ( arr != null ) { | 
 | 			if ( isArrayLike( Object( arr ) ) ) { | 
 | 				jQuery.merge( ret, | 
 | 					typeof arr === "string" ? | 
 | 						[ arr ] : arr | 
 | 				); | 
 | 			} else { | 
 | 				push.call( ret, arr ); | 
 | 			} | 
 | 		} | 
 |  | 
 | 		return ret; | 
 | 	}, | 
 |  | 
 | 	inArray: function( elem, arr, i ) { | 
 | 		return arr == null ? -1 : indexOf.call( arr, elem, i ); | 
 | 	}, | 
 |  | 
 | 	// Support: Android <=4.0 only, PhantomJS 1 only | 
 | 	// push.apply(_, arraylike) throws on ancient WebKit | 
 | 	merge: function( first, second ) { | 
 | 		var len = +second.length, | 
 | 			j = 0, | 
 | 			i = first.length; | 
 |  | 
 | 		for ( ; j < len; j++ ) { | 
 | 			first[ i++ ] = second[ j ]; | 
 | 		} | 
 |  | 
 | 		first.length = i; | 
 |  | 
 | 		return first; | 
 | 	}, | 
 |  | 
 | 	grep: function( elems, callback, invert ) { | 
 | 		var callbackInverse, | 
 | 			matches = [], | 
 | 			i = 0, | 
 | 			length = elems.length, | 
 | 			callbackExpect = !invert; | 
 |  | 
 | 		// Go through the array, only saving the items | 
 | 		// that pass the validator function | 
 | 		for ( ; i < length; i++ ) { | 
 | 			callbackInverse = !callback( elems[ i ], i ); | 
 | 			if ( callbackInverse !== callbackExpect ) { | 
 | 				matches.push( elems[ i ] ); | 
 | 			} | 
 | 		} | 
 |  | 
 | 		return matches; | 
 | 	}, | 
 |  | 
 | 	// arg is for internal usage only | 
 | 	map: function( elems, callback, arg ) { | 
 | 		var length, value, | 
 | 			i = 0, | 
 | 			ret = []; | 
 |  | 
 | 		// Go through the array, translating each of the items to their new values | 
 | 		if ( isArrayLike( elems ) ) { | 
 | 			length = elems.length; | 
 | 			for ( ; i < length; i++ ) { | 
 | 				value = callback( elems[ i ], i, arg ); | 
 |  | 
 | 				if ( value != null ) { | 
 | 					ret.push( value ); | 
 | 				} | 
 | 			} | 
 |  | 
 | 		// Go through every key on the object, | 
 | 		} else { | 
 | 			for ( i in elems ) { | 
 | 				value = callback( elems[ i ], i, arg ); | 
 |  | 
 | 				if ( value != null ) { | 
 | 					ret.push( value ); | 
 | 				} | 
 | 			} | 
 | 		} | 
 |  | 
 | 		// Flatten any nested arrays | 
 | 		return flat( ret ); | 
 | 	}, | 
 |  | 
 | 	// A global GUID counter for objects | 
 | 	guid: 1, | 
 |  | 
 | 	// jQuery.support is not used in Core but other projects attach their | 
 | 	// properties to it so it needs to exist. | 
 | 	support: support | 
 | } ); | 
 |  | 
 | if ( typeof Symbol === "function" ) { | 
 | 	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; | 
 | } | 
 |  | 
 | // Populate the class2type map | 
 | jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), | 
 | 	function( _i, name ) { | 
 | 		class2type[ "[object " + name + "]" ] = name.toLowerCase(); | 
 | 	} ); | 
 |  | 
 | function isArrayLike( obj ) { | 
 |  | 
 | 	// Support: real iOS 8.2 only (not reproducible in simulator) | 
 | 	// `in` check used to prevent JIT error (gh-2145) | 
 | 	// hasOwn isn't used here due to false negatives | 
 | 	// regarding Nodelist length in IE | 
 | 	var length = !!obj && "length" in obj && obj.length, | 
 | 		type = toType( obj ); | 
 |  | 
 | 	if ( isFunction( obj ) || isWindow( obj ) ) { | 
 | 		return false; | 
 | 	} | 
 |  | 
 | 	return type === "array" || length === 0 || | 
 | 		typeof length === "number" && length > 0 && ( length - 1 ) in obj; | 
 | } | 
 |  | 
 | return jQuery; | 
 | } ); |